タグ

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

  • Rabbit on Firefox - tmtms のメモ

    Rabbit というプレゼンツールがある。画面の下の方でウサギとカメが追いかけっこをしてるプレゼンツールで、Ruby で作られててまつもとさんがよく使ってる。 www.youtube.com PDF 表示時にもこれと同じようなウサギとカメを表示できないかなーと思っていろいろいじってたらできたのでメモ。 Firefox のブックマークレットを使って ruby.wasm で rb ファイルを読み込む形で実装してみた。最近自分の中で ruby.wasm が流行りなので、JavaScript でできることをわざわざ Ruby でやってる。 ブックマークレットはこんな感じ: javascript:(()=>{if(typeof rubyVM!='undefined'){rubyVM.eval('start');return};var d=document;var h=d.getElementsByT

    Rabbit on Firefox - tmtms のメモ
    iga_k
    iga_k 2023/04/05
    Rabbit on PDF!
  • ruby.wasm で MySQL Parameters を作り直した - tmtms のメモ

    プライベートでは基的に誰の役にも立たないプログラムを作ってるんだけど、たまにうっかり MySQL Parameters みたいな役に立つものを作ってしまう。 MySQL Parameters は5年くらい前に Vue.js の勉強のために作ってみたんだけど、結局そのまま Vue.js は触らず放置状態だった。MySQL の新しいバージョンが出るたびにデータは更新してたけど。 ruby.wasmRubyWebAssembly 上で動くようになり、ブラウザ上で JavaScript の代わりに使えるようになったんで、MySQL Parameters を Ruby で作り直してみた。 ruby.wasm ruby.wasm のページに載ってるけど、これだけでブラウザ上で Ruby が動く。簡単。 <html> <script src="https://cdn.jsdelivr.ne

    ruby.wasm で MySQL Parameters を作り直した - tmtms のメモ
    iga_k
    iga_k 2023/03/25
    勉強になる
  • 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 のメモ
    iga_k
    iga_k 2023/02/15
  • Ruby 2.7 の変更点 - 「...」で全引数渡し - tmtms のメモ

    Ruby 2.7 アドベントカレンダーの9日目の記事です。 qiita.com 「...」で全引数渡し メソッド内から別のメソッドを呼び出す際に、... で今のメソッドに渡された引数そのまま渡すことができるようになりました。 ブロックも含めてすべて渡されます。 def hoge(...) fuga(...) end def fuga(a, b=0, key: 123, &block) p [a, b, key, block] end hoge(1) #=> [1, 0, 123, nil] hoge(1, 2, key: 789) #=> [1, 2, 789, nil] hoge(1) { nil } #=> [1, 0, 123, #<Proc:0x0000559166565430 test.rb:11>] 括弧なしの super みたいな感じですね。 なお、... はそのままでは R

    Ruby 2.7 の変更点 - 「...」で全引数渡し - tmtms のメモ
    iga_k
    iga_k 2021/07/18
    引数を転送する記法 (...)
  • MySQLの日本語コレーション - tmtms のメモ

    4月にMySQLの日語コレーションについて語り合う場に呼ばれていろいろ話を聞いてきました。すぐにブログを書こうと思ったんですが、はや2ヶ月経過…。 ときどき、自分がMySQLの文字コードに関して発表する際に、次のようなスライドをいれてるんですが、 MySQL 8.0 でとうとう日語コレーションが入ることになったのに、なんか期待してたのと違いました。 で、その辺の話を聞きました(2ヶ月も経ってるのでうろ覚え)。 Q. わざわざ日語ロケール作るんだったら日人が扱いやすいロケールにしてほしい utf8mb4_ja_0900_as_csはMySQLが独自に考えたものではない。Unicode規格に従っている。過去にいろいろ独自にやって失敗してきてるので、もう独自にやるのは避けたい。 ai(accent insensitive)で「ハ」=「パ」=「バ」になるのも、ci(case insensi

    MySQLの日本語コレーション - tmtms のメモ
  • 相手がいないのに ESTABLISHED になってる TCP ポート - tmtms のメモ

    最近 ParallelServer というライブラリを作ったのですが、その最中に奇妙な状態になってる TCP ポートを見つけたので、メモっておきます。 Ruby では TCP サーバーは次のような感じで作ることができます。お手軽ですね。 require 'socket' Socket.tcp_server_loop(12345) do |socket, client_addr| socket.puts "Your IP address: #{client_addr.ip_address}" name = socket.gets socket.puts "Hello, #{name}" socket.close end これは 12345 ポートでクライアントからの接続を待ち、接続されたらクライアントのIPアドレスとクライアントからの入力をクライアントに送信して切断するだけの簡単なプログラム

    相手がいないのに ESTABLISHED になってる TCP ポート - tmtms のメモ
    iga_k
    iga_k 2020/04/14
    勉強になる
  • Rack アプリでクライアントのIPアドレスを取得する - tmtms のメモ

    Rack アプリで、クライアントのIPアドレスを取得する方法を調べてみたのでメモ。 どうやら Rack::Request#ip を使えばいいらしいので Rack アプリはこんな感じで。 [config.ru] class HogeApp def call(env) req = Rack::Request.new(env) [200, {}, [ "req.ip=#{req.ip}\n", "REMOTE_ADDR=#{env["REMOTE_ADDR"]}\n", "HTTP_X_FORWARDED_FOR=#{env["HTTP_X_FORWARDED_FOR"]}\n", ]] end end run HogeApp.new 普通に接続 これを 192.0.2.11 サーバーで次のようにして起動して、 rackup -o 0.0.0.0 192.0.2.1 のクライアントからアクセスし

    Rack アプリでクライアントのIPアドレスを取得する - tmtms のメモ
    iga_k
    iga_k 2020/03/17
    多段のプロキシ難しいなー
  • Ruby 2.7 の変更点 - GC / Method / NilClass / TrueClass / FalseClass / Proc / RubyVM - tmtms のメモ

    Ruby 2.7 アドベントカレンダーの20日目の記事です。 qiita.com GC.compact 追加 Method#inspect : 出力が詳しく NilClass#to_s / TrueClass#to_s / FalseClass#to_s : 同じオブジェクトを返す Proc#to_s 形式変更 RubyVM.resolve_feature_path が $LOAD_PATH.resolve_feature_path に移動 GC.compact 追加 メモリの獲得&解放を繰り返してるとあちこちに空きができて、メモリの使用が非効率になってしまいます。 2.7 で追加された GC.compact を使用すると、メモリ内のオブジェクトを移動して、使わないメモリを解放することができるようになるみたいです。 Method#inspect : 出力が詳しく Method#inspec

    Ruby 2.7 の変更点 - GC / Method / NilClass / TrueClass / FalseClass / Proc / RubyVM - tmtms のメモ
    iga_k
    iga_k 2019/12/27
    require 先を調べる
  • Ruby 2.7 の変更点 - 復活したものや入りそうで入らなかったもの - tmtms のメモ

    Ruby 2.7 アドベントカレンダーの1日目の記事です。 qiita.com Ruby は毎年クリスマスにバージョンが上がります。 今年も順調にいけば 12/25 に Ruby 2.7 がリリースされる予定です。 2.7 がリリースされるまで毎日少しずつ変更点を見ていきます。 ソースは NEWS(とか git log とか)です。 Ruby 2.7 までに復活したもの キーワード引数のハッシュのシンボルでないキー flip-flop 構文 Ruby 2.7 で入りそうだったけど入らなかったもの パイプライン演算子 メソッド参照演算子 Ruby 2.7 までに復活したもの キーワード引数のハッシュのシンボルでないキー Ruby 2.6.0 で キーワード引数のハッシュのキーがシンボルでない場合はエラーになったんですが、2.6.2 でその挙動が取り消されてエラーにならなくなりました。 2.7

    Ruby 2.7 の変更点 - 復活したものや入りそうで入らなかったもの - tmtms のメモ
    iga_k
    iga_k 2019/12/02
    毎年恒例のtmtmsさんのRuby新バージョン説明きたー!知見!
  • MySQLと「令和」その2 - tmtms のメモ

    MySQLでは異なる字が等しいと見なされることがあるということを書きました。 tmtms.hatenablog.com この動きはMySQLが独自に変なことをしているわけではなく、Unicodeの規則に従っています。 MySQL 8.0 のデフォルトのCollationは Unicode 9.0.0のUnicode Collation Algorithm(UCA) に従っています。 文字にはそれぞれ Weight という値が設定されていてソートに使用されています。この値が同じなら等しい文字とみなされます。 Collation utf8mb4 のデフォルトの Collation は utf8mb4_0900_ai_ci という名前ですが、これは次のような意味です。 名前の要素 意味 utf8mb4 charset名 0900 Unicodeバージョン9.0.0 ai アクセントの違いを無視

    MySQLと「令和」その2 - tmtms のメモ
    iga_k
    iga_k 2019/11/22
    utf8mb4_0900_ai_ciとかのめっちゃ良い知見まとめ
  • Ruby 2.6 の変更点 - IO - @tmtms のメモ

    Ruby2.6アドベントカレンダーの10日目の記事です。 qiita.com IO ファイルオープン時のモードに x 追加 IO ファイルオープン時のモードに x 追加 https://bugs.ruby-lang.org/issues/11258 ファイルを作成用にオープンするには w を指定しますが、これはファイルが既に存在していた場合に上書きして空にしてしまいます。 それを避けるために次のようなコードをたまに見ることがありますが、これは他の方法で排他制御していなければ危険です。 raise "File exists" if File.exist?("hoge.txt") # 他プロセスがこのタイミングでファイルを作ってるかもしれない File.open("hoge.txt", "w") 今までは次のようにしていました。 File.open("hoge.txt", File::CREA

    Ruby 2.6 の変更点 - IO - @tmtms のメモ
    iga_k
    iga_k 2018/12/12
    ファイルの存在確認できるx便利!
  • Ruby 2.6 の変更点 - Array - tmtms のメモ

    Ruby2.6アドベントカレンダーの3日目の記事です。 qiita.com Array Array#union 追加 Array#difference 追加 Array#filter, Array#filter! 追加 Array#to_h にブロックを渡すとキーと値を変換できる Array Array#union 追加 https://bugs.ruby-lang.org/issues/14097 引数に指定した配列を結合した新しい配列オブジェクトを返します。重複した要素は削除されます。 ary1 = [1, 2, 3] ary2 = ary1.union([2, 3, 4, 5]) ary1 #=> [1, 2, 3] ary2 #=> [1, 2, 3, 4, 5] 複数の配列を指定できること以外は Array#| と同じ。 Array#difference 追加 https://b

    Ruby 2.6 の変更点 - Array - tmtms のメモ
    iga_k
    iga_k 2018/12/06
    毎年ありがたやな tmtms さんのバージョンアップ記事だ!
  • DNSで浸透って言っちゃだめなの? - tmtms のメモ

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

    DNSで浸透って言っちゃだめなの? - tmtms のメモ
    iga_k
    iga_k 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 のメモ
    iga_k
    iga_k 2018/01/23
    まとめありがたい
  • #devsumi【18-B-1】プログラマが知るべきたったひとつの大事なことがら - tmtms のメモ

    デブサミ2011の id:t-wada の講演のメモです。嘘書いてあるかもしれません。 タイトルは釣り きのこ18. 学び続ける姿勢 読む/書く/話す サッカーファンが得意なことは二年単位でものを覚えること 1996/07/22 マイアミの奇跡 アメリカにいた 初めてコンピュータに出会った ホームステイ先の子供と仲良くなりたい ファミコンでマリオ3をやってみせた 当に没入したものは体が覚えている 無限1UP 「ニンテンドーの国からきた男は違う」 心をつかんだ 原体験 ひとを動かすためにはやってみせる 2000年 OO厨をこじらせる RDBの世界は汚いから俺が正す テスト大嫌い 俺が書いたコードにバグがあるわけがない でもバグや手戻りが多い 完璧主義の呪いにかかった ただしいモデルがわかるまでコードを書いてはいけない 2002/06/07 日韓ワールドカップでアルゼンチン対イングランド 技

    #devsumi【18-B-1】プログラマが知るべきたったひとつの大事なことがら - tmtms のメモ
    iga_k
    iga_k 2011/02/18
    これは聞きたかった。
  • 1