タグ

ブックマーク / blog.tmtms.net (18)

  • LSP ルーターを作った - tmtms のメモ

    最近は Emacs の LSP クライアント機能である Eglot を使って Ruby を書いたり読んだりしてる。 ruby-mode では LSP サーバーはデフォルトで Solargraph が使われてる。 半年くらい前に rubocop に LSP サーバー機能が搭載されたらしいんで使ってみた。 (add-to-list 'eglot-server-programs '(ruby-mode . ("rubocop" "--lsp"))) rubocop の機能であるコードのチェックはちゃんと使えたんだけど、Solargraph で使えてたコードジャンプとかが使えなくなった。まあそれはそう。 Eglot はモードごとに LSP サーバーを指定することはできるけど、同じモードに複数の LSP サーバーを指定することはできなそう。Emacs Lisp はよくわからないんでちゃんと調べてない

    LSP ルーターを作った - tmtms のメモ
    gfx
    gfx 2023/12/24
    "複数の LSP サーバーを束ねて一つの LSP サーバーのように振る舞うツールがどこかにあるんじゃないかな…と思って5分ほどググって探してみたけど見つからなかったので、自分で作ってみた"
  • 文字ときどきRuby - tmtms のメモ

    これはRubyアドベントカレンダーとSmartHRアドベントカレンダーの17日目の記事です。 qiita.com qiita.com 12/9 に nagano.rb で文字について発表して、同じのを 12/15 に SmartHR 社内で LT しました。 スライドはこちら speakerdeck.com 同じ文字? この2つの文字は同じものに見えますか? 実はこれは同じ文字を異なるフォントで表示したものです。 ゴシック体と明朝体で字体が異なって見えるのと同じことなので、同じ文字と言えるでしょう。 コンピュータで扱う文字は文字ごとに番号(コードポイント)が振られていて、プログラムから見たときには同じコードポイントであれば同じ文字として扱われます。 Ruby で文字のコードポイントを得るには String#ord を使用できます。 '直'.ord.to_s(16) #=> "76f4" '

    文字ときどきRuby - tmtms のメモ
    gfx
    gfx 2023/12/17
  • 転職した - tmtms のメモ

    これは「Rubyist近況[1] Advent Calendar 2021」の6日目の記事です。 adventar.org 自称 Rubyist なので近況を書きます。 2021年10月末で30年ほど勤めた富士通グループを退職しました。 11月からは SmartHR という会社で働いてます。 3年ほど Ruby仕事ではあんまり使ってなかったのですが、また Ruby仕事で使うようになりました。 会社から配布された PC は Core i7 メモリ32GB の MacBook Pro なんでかなり人権がある感じなんですが、人生Mac で1ヶ月位経ってもまだ慣れなくて、VM で Ubuntu Desktop 入れようか迷ってます。 近況は以上です。以下は富士通グループの入社〜退職までのメモ。長いので読まなくていいです。 1991〜 設立7年目の今はなき「富士通長野システムエンジニア

    転職した - tmtms のメモ
    gfx
    gfx 2021/12/06
  • MySQLと「令和」 - tmtms のメモ

    新元号が「令和」に決まったことなので、MySQLでの扱いについての話を。 普通の文字 「令」も「和」もJIS第一水準に含まれている基的な文字なので普通に日語が使用できるcharsetで使用できます。 mysql> create table t ( utf8mb4 varchar(255) charset utf8mb4, utf8mb3 varchar(255) charset utf8mb3, utf16 varchar(255) charset utf16, utf32 varchar(255) charset utf32, cp932 varchar(255) charset cp932, eucjpms varchar(255) charset eucjpms, sjis varchar(255) charset sjis, ujis varchar(255) charset

    MySQLと「令和」 - tmtms のメモ
    gfx
    gfx 2019/04/06
  • DNSで浸透って言っちゃだめなの? - tmtms のメモ

    別に言ってもいいよ。 以下想定問答。 「浸透が何を意味しているのかわからない」 ホント? 「浸透いうな」って言われてるってことは、逆に言うとそれなりに広く使われてるってことでしょ。 個人的には「DNSの設定を変更した後、徐々に新しい情報を見ることができるクライアントが増えていく」ことだと思ってるんだけど、これとは異なる意味で使われてたりするの? 「"浸透に数週間かかる" なんて言うのはへぼい業者の言い訳」 それは同感だけど、「浸透」という単語の問題じゃないよね。 「浸透」という単語を使わなくてもその業者はへぼいままで、数週間かかるのは変わらない。 数週間じゃなくて、「浸透には5分くらいかかります」だったらOK? 「設定ミスってるくせに浸透に時間がかかるなんて言い訳するな」ならわかるけど、「浸透という単語を使うな」はおかしいと思う。「浸透」を使わないことで何か解決するの? 「浸透なんて用語は

    DNSで浸透って言っちゃだめなの? - tmtms のメモ
    gfx
    gfx 2018/05/13
  • Ruby 2.4 の変更内容 その1 - tmtms のメモ

    Ruby 2.5 がリリースされたので、そろそろ Ruby 2.3 から 2.4 にしようかと思う今日この頃です。 この前 Ruby 2.5 の変更内容の記事を書きましたが、Ruby 2.4 についてちゃんと調べてなかったので今さらですが調べてみました。 元ネタは https://github.com/ruby/ruby/blob/v2_4_3/NEWS です。 長くなったので3つにわけてます。 全般 - このページ 組み込みライブラリ 標準添付ライブラリ 条件式中での多重代入が可能 メソッド引数で rescue 修飾子が有効 トップレベルで return 可能 Refinements Symbol#to_proc で Refinements が有効 BasicObject##__send__ で Refinements が有効 Module#refine の引数にモジュールを指定可 Mo

    Ruby 2.4 の変更内容 その1 - tmtms のメモ
    gfx
    gfx 2018/01/23
  • クラスはクラスクラスのインスタンスである - tmtms のメモ

    タイトルで出落ち感がありますが…。 naruby で時間があまった時のために用意してあったのですが、時間が余らなかったので発表しなかった小ネタです。ここで公開して供養します。 Rubyはほぼすべてがオブジェクトです。 クラスもオブジェクトです。オブジェクトということはクラスがあります。オブジェクトのクラスはオブジェクトの class メソッドで調べられます。 class Hoge end Hoge.class #=> Class Hoge クラスのクラスは Class であることがわかりました。 つまり「クラスはClassクラスのインスタンス」ということです。 クラスがClassクラスのインスタンスということは、Class.new すればクラスが作成されるわけです。 a = Class.new #=> #<Class:0x00560d27bf2108> Hoge = a #=> Hoge

    クラスはクラスクラスのインスタンスである - tmtms のメモ
    gfx
    gfx 2017/12/05
  • Ruby 2.5 - tmtms のメモ

    この記事は Ruby 2.5.0 preview1 時点のものです。Ruby 2.5 リリース版については http://tmtms.hatenablog.com/entry/2017/12/30/ruby25 を見てください。 Rubyは毎年クリスマスにバージョンアップされます。 今年も問題なければ12/25にRuby 2.5が出ると思います。 https://docs.ruby-lang.org/en/trunk/NEWS.html を元に変更内容を調べてみました。 言語仕様 トップレベル定数参照 rescue/else/ensure 節 文字列内式のRefinement Unicode バージョン 10.0.0 組み込みライブラリ Array#append, #prepend 追加 Dir.children, Dir.each_child 追加 Dir.glob :base オプショ

    Ruby 2.5 - tmtms のメモ
    gfx
    gfx 2017/12/04
  • 本当はこわいMySQLプロトコル - tmtms のメモ

    11/28 に Haskell で MySQL の Xプロトコルを実装したという話が聴ける Club MySQL というイベントがあったので参加してきました。 clubmysql.connpass.com MySQLのプロトコルの話ということで、平日の夜とは言え東京で参加者9人(発表者含む)というマニアックな集まりでした。 自分も1年前に RubyMySQL Xプロトコルを実装していたのですが、このツイートを最後に中断していたのでした。 MySQL X Protocol で Collection の追加はできるようになったが、検索がめんどくさい。条件文字列のパースはクライアントで行う必要があるんだな。— とみたまさひろ💎🐬 (@tmtms) 2017年2月20日 今回話を聞いて、無理に謎条件式文字列をパースするんじゃなくて、処理系で書きやすいように書けばいいんだという方式に目から

    本当はこわいMySQLプロトコル - tmtms のメモ
    gfx
    gfx 2017/12/01
    へー!信頼できないMySQLサーバに繋いではいけない!
  • Rubyのbundlerをアップデートしたらプログラムが動かなくなった話 - tmtms のメモ

    Rubybundler を 1.13 から 1.15 にアップデートしたら今まで動いたプログラムが動かなくなりました。 こんな感じ: % bundle _1.13.7_ exec ruby -r./hoge.rb -e Hoge.new % % bundle _1.15.4_ exec ruby -r./hoge.rb -e Hoge.new hoge.rb:3:in `initialize': uninitialized constant Hoge::Timeout (NameError) Did you mean? Time from -e:1:in `new' from -e:1:in `<main>' この hoge.rb の中味はこんな感じで、 class Hoge def initialize Timeout.timeout(5){sleep 1} end end

    Rubyのbundlerをアップデートしたらプログラムが動かなくなった話 - tmtms のメモ
    gfx
    gfx 2017/11/13
  • 実行中プログラムのイメージを得る - tmtms のメモ

    Twitter見てたらこんなこと言ってる人がいました。 Unix で実行中の実行ファイルのパスを確実に得る方法はない、というのは FAQ だと思うけど、実際にやりたいことは自分自身を別プロセスで新たに立ち上げたいということなので、メモリにロード済の自分自身から別プロセスを作る手段はないんだろうか— Yusuke Endoh (@mametter) 2017年10月25日 昔自分もそんなこと考えたなーと思いつつ、Linuxなら /proc/<pid>/exe が実行ファイルへのリンクになってるんで、 環境によるような気もするけど、自分の実行ファイルのパスは /proc/pid/exe から取れないですかね。— とみたまさひろ (@tmtms) 2017年10月25日 と言ってみたら、 Linuxならその手が使えますが、現在実行中の実行ファイルでも削除できちゃいますから、パス名を得る完璧な方法

    実行中プログラムのイメージを得る - tmtms のメモ
    gfx
    gfx 2017/10/26
  • Rubyおもしろい - tmtms のメモ

    Rubyは括弧をつけなくてもメソッドを呼び出せます。メソッド名は普通は英小文字で始まります。ローカル変数も英小文字で始まります。 こんなRubyプログラムを実行すると(ifの条件部で代入しているのはtypoではありません)、 def hoge 123 end p hoge x = 456 if hoge = x p hoge end p hoge こういう出力が得られます。 123 456 456 途中でhogeがメソッド呼び出しから変数参照に変わったのがわかります。 変数宣言後は括弧「()」をつけない場合はメソッド呼び出しではなく変数参照になります。 def hoge 123 end p hoge # hogeメソッド呼び出しなので123 x = 456 if hoge = x # hogeにx(456)を代入。その結果は真なのでif内を実行 p hoge # ここでのhogeはローカル

    Rubyおもしろい - tmtms のメモ
    gfx
    gfx 2017/10/17
  • NoException - tmtms のメモ

    役に立たないライブラリを作るシリーズです。 最近例外を発生させない某言語が流行ってるらしいと聞いて作ってみました。 インストール % gem install tmtms-noexception なんと noexception という名前は既に取られてた! 使い方 こんな風な例外を発生させるメソッドを持つクラスがあったとして、 class Foo def bar 123 end def abc raise 'abc error' end def xyz raise 'xyz error' end end 普通にメソッドを呼ぶと例外が発生するんですけど、 foo = Foo.new foo.bar #=> 123 foo.abc #=> RuntimeError: abc error NoException::No を include すると、例外が発生する代わりに nil を返すようになりま

    NoException - tmtms のメモ
    gfx
    gfx 2017/09/27
  • Ruby の Timeout の仕組み - tmtms のメモ

    Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end Timeout.timeout はブロック開始時にスレッドを作成し、そのスレッドで指定された秒数だけ sleep して、sleep から復帰してもまだブロックが終わってなければ作成元のスレッドに対して Timeout::Error 例外を発生させます。 指定時間以内に処理が終わる場合: timeout(X) │ スレッド作成 ─┐ │ │ ブロック実行 sleep X │ │ スレッドkill→ 🕱 │ timeout復帰 指定時間以内に処理が終わら

    Ruby の Timeout の仕組み - tmtms のメモ
    gfx
    gfx 2017/09/27
  • Rubyのシグナルハンドラ - tmtms のメモ

    toRuby & guRuby 出張版 でシグナルについてやってたので、関連して書いてみます。 どのような時にシグナルハンドラを定義するのか どのような時にシグナルハンドラを定義するのかという話がありました。 UNIXのデーモンプログラムは、何が由来なのかわかりませんが、SIGHUP で設定ファイルの再読み込みを行うのが慣習になっています。 SIGHUP はデフォルト動作ではプログラムを終了させてしまうだけなので、SIGHUP で特別な処理を行いたいプログラムはシグナルハンドラを定義しています。 来 SIGHUP は端末が終了した時に端末上で動いていたプログラムに対してOSが発行するためのものです。 たとえば、端末エミュレータを開いて、 % sleep 9999 と実行してる状態で端末エミュレータを閉じると sleep プロセスに SIGHUP が送られます。別の端末から strace

    Rubyのシグナルハンドラ - tmtms のメモ
    gfx
    gfx 2015/01/16
  • RSpec をやめて Test::Unit に戻る - tmtms のメモ

    最近の RSpec は、それまで obj.stub(hoge: value) と書けたものが、 allow(obj).to receive(:hoge).and_return value と書かないといけなくなったりとか、正気の沙汰とは思えないような変更をしたりするので、何年かぶりに Test::Unit を使ってみようとリハビリ中です。 RSpec は、テストケースを入れ子にできたり、テストケースや example がクラスやメソッドではなく、文字列で自由に書くことができたりしたのが良かったのですが、最近の Test::Unit ではそれもできるようになっています。 [ruby-list:48926] [ANN] test-unit 2.5.2 このリリースはとみたさんに使ってもらえるように改良したリリー スです。新しく追加した--locationはRSpecの--line_number

    RSpec をやめて Test::Unit に戻る - tmtms のメモ
    gfx
    gfx 2014/10/13
    power_assertと併用した場合の感想も知りたい
  • Git に対する Subversion の利点 - tmtms のメモ

    気がついたら Git を初めて触ってからもう5年近くになってました。 それまで使ってた Subversion はもう全然使ってなくて、もう svn のサブコマンドは ls, log, co くらいしか使えません。Subversion のリポジトリを見ないといけないときは、とりあえず git svn で Git リポジトリに変換してから見たりしてます。 SCCS, RCS, CVS はもう全然わからないので、Subversion はまだ覚えてる方ですけど…。 Subversion に対する Git の利点はあちこちで述べられているので今更何も書くことはありませんが、Git よりも Subversion の方が良いこともあるので、忘れないうちに書いときます。 リポジトリ全体をコピーしなくても編集できる リポジトリの歴史が長い場合や、頻繁に更新されるバイナリデータがあるとリポジトリが大きくなりま

    Git に対する Subversion の利点 - tmtms のメモ
    gfx
    gfx 2014/06/01
    サブディレクトリだけとってこれるのは確かにgitにも欲しくなることある
  • 親子関係のないプロセス間でファイルディスクリプタを共有する - tmtms のメモ

    UNIX や Linux でプロセス間でファイルディスクリプタを共有するには、ファイルディスクリプタを作成後に fork して親子間で共有するという方法が良く取られますが、UNIXドメインソケットを使って、親子関係のないプロセス間でファイルディスクリプタを受け渡すことができます。 C だといろいろ面倒なのですが、Ruby だと UNIXSocket#send_io と #recv_io を使って簡単に実現できます。 sender.rb require 'socket' File.unlink 'socket' rescue nil sock = UNIXServer.new 'socket' s = sock.accept f = File.open ARGV.first s.send_io f receiver.rb require 'socket' sock = UNIXSocket.

    親子関係のないプロセス間でファイルディスクリプタを共有する - tmtms のメモ
    gfx
    gfx 2013/07/26
  • 1