大江戸Ruby会議06

大江戸Ruby会議06 #oedo06 に行ってきたので雑感など。 会場 @sora_h さん生誕20周年記念ということで、会場も「ソラシティカンファレンスセンター」という場所でした。 Docker時代の分散RSpec環境の作り方 speakerdeck.com RSpecの実行に時間が掛かってたの…

Ruby製のEmacsライクなテキストエディタTextbringer

大江戸Ruby会議06で前田さんがRubyでEmacsライクなエディタTextbringerを作ったという発表をしていました。 発表資料 https://github.com/shugo/oedo06/blob/master/textbringer.md ブログ https://shugo.net/jit/20170320.html 最初はEmacs上の何かでプレゼ…

Sequelのトランザクション内でタイムアウトするとCOMMITされてしまう

ちょっと前にハマったのでメモ。 Sequelでトランザクションを使う時は次のように transaction メソッドにブロックを渡します。 require 'sequel' require 'logger' db = Sequel.connect('mysql2://user:passwd@localhost/test') db.loggers = [Logger.new($s…

ThinkPad T460s Ubuntu でトラックパッドを無効化

5ヶ月ほど ThinkPad T460s を Ubuntu(Xubuntu) で使ってます。 ちょっと前に さよならMac | めがねをかけるんだ という ThinkPad をdisった記事が話題になりましたが、自分はあんまり不満はありません。 ノートPCでLinuxを使う時の鬼門だった無線LANやサスペ…

Unicode Collation Algorithm

文字コードは面白いね! わーい! たのしー! MySQL で utf8mb4_unicode_ci コレーションを使用した時に「」=「」や「ハ」=「パ」になる問題があります。 この utf8mb4_unicode_ci ってなんぞや?と思ってマニュアルを見てみると、 MySQL は、http://www.un…

MySQLの文字コード事情

この前 MySQL Casual に登壇して、「MySQLの文字コード事情」と称して発表してきました。 終電の都合で途中退席しましたが楽しかったです。また機会があれば参加したいです。 発表スライドはこちら MySQLの文字コード事情 2017版 from Masahiro Tomita www.s…

ThinkPad T460s 購入

ちょっと前ですが ThinkPad T460s を買いました。 ThinkPad T460s キタ! pic.twitter.com/JMp8shnrTf— とみたまさひろ (@tmtms) October 7, 2016 軽いPCが欲しくて、1kg前後のPCを探したりしてたんですけど、ThinkPad T460s が 10万円以下で買えるようにな…

Firefoxで絵文字が白黒で表示される

Firefox 50 で絵文字に色がつきました。 次のようなテキストファイルを表示すると と 次のように表示されるようになりました。 ですが、Ubuntu で次のファイルを表示すると 次のように「」と「」だけ白黒で表示されてしまいました。 どうやら、OSのフォント…

Ruby の Enumerable#sum

「最近のruby-core (2016年7月)」に次のような記述がありました。 Enumerable#sum というメソッドが追加されており、特定の場合(浮動小数点数の配列とか)には誤差が累積しないアルゴリズムが採用されています。 Ruby 2.4 に Enumerable#sum が追加されたのは…

Suica対応スマホに変更

データ通信用のスマホの他に、通話とモバイルSuicaのためにガラケー(F-01E)を持っていたのですが、ガラケーの2年縛りの契約の更新時期になりました。最近SIMロックフリーのスマホでもSuicaが使えるものが出てきたので、1台にまとめました。 arrows M03 の評…

MySQL で utf8 と utf8mb4 の混在で起きること

MySQL を UTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。 MySQL の UTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。 UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイ…

Ruby の Timeout の仕組み

Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end …

Sequelの罠

Sequel の罠っぽい挙動にハマったのでメモ。 次のようなテーブル a, b, c, d がありまして、 mysql> select * from a; +------+ | id | +------+ | 1 | +------+ mysql> select * from b; +------+ | id | +------+ | 2 | +------+ mysql> select * from c; …

要素数ができるだけ均等になるように配列を分割する

例えば10個の要素を持つ配列があって、これを3つに分割したい時に、 a = [1,2,3,4,5,6,7,8,9,10] n = 3 m = Rational(a.size, n).ceil a.each_slice(m).to_a #=> [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]] みたいにすると、3つには分割できるんですが、要素数…

Rubyで指定バイト数を超えない文字列の取得

文字エンコーディングにUTF-8を使用した場合、1文字は1バイト〜4バイトです。 ある文字列の先頭からn文字の文字列を取り出すには次のようにできます。 str = "本日は晴天なり" n = 3 str[0, n] #=> "本日は" 先頭からnバイトを超えない最大の文字列を取り出…