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バイトを超えない最大の文字列を取り出…

MySQL X Protocol を解析してみる

前回 MySQL X Protocol で使用している Protobuf について書きましたが、それだけでは MySQL のプロトコルは解析できません。 TCP を流れるデータは区切りがないので、書き込み側が Protobuf データをただ垂れ流しても、読み込む側がどう読んで良いのかわか…

RubyからProtobufを使う

MySQL 5.7.12 から追加された X Protocol は Protobuf というのを使ってるらしいです。 Protobuf というのをそこで初めて知ったので、とりあえず Ruby から Protobuf を利用する方法を調べてみました。 Protobuf はデータ構造をバイト列にエンコードしたり、…

Ruby の文字列データの複製について

Ruby で String オブジェクトを複製しても、文字列データは複製されません。 data = "a"*10*1024*1024 system "grep ^VmSize /proc/#$$/status" t1 = Time.now a = [] 100.times do |i| a.push data.dup end t2 = Time.now system "grep ^VmSize /proc/#$$/s…

最近のCrystal

昨年末に「Ruby脳にはCrystalつらい Advent Calendar 2015」というのを書きました。 qiita.com 当時の Crystal のバージョンは 0.10 だったのですが、その後バージョンがあがって改善されてたりするので、紹介します。 カレントディレクトリに .crystal を作…

MySQL Shell / X DevAPI / X Protocol

MySQL 5.7.12 で突如登場した MySQL Shell とか X DevAPI とか X Protocol とかが面白そうだったので調べてみました。 Document Store とかも同じ文脈で語られてて、それぞれの用語が何を表してるのかややこしかったので、まずその辺から。 X Protocol mysql…

MySQL ソケットピア証明書認証プラグイン

全然知らなかったんですが、MySQLに「ソケットピア証明書認証プラグイン」というのがあるのを知りました。 http://dev.mysql.com/doc/refman/5.6/ja/socket-authentication-plugin.html これを使うとOSのログインユーザーと同じ名前のMySQLユーザーであれば…

Twitter からの文字化けメール

Twitter を名乗るメールアドレスからメールが届いたのですが、Subjectが文字化けしていました。 Subject: ã¨ã¿ãŸã¾ã•ã²ã‚さん、Twitterからの感謝のメッセージです。 いまのTwitterがあるのは、皆さんのおかげです。 10年前の今日、ひとつのツイートからすべ…

flock(LOCK_EX) で EBADF

ちょっとハマったのでメモ。 ファイルを flock() で排他的にロックするために次のようにすると成功します。 % ruby -e 'File.open("hoge").flock(File::LOCK_EX); puts "OK"' OK が、NFS 上で同じことをやると失敗します。 % ruby -e 'File.open("hoge").flo…

Postfix 3.1 の新機能 / JSON形式キュー表示と配送流量制御

Postfix 3.1 がリリースされました。 個人的に気になった新機能は JSON-format Postfix queue listing. Destination-independent delivery rate delay の2つです。 JSON形式キュー表示 今までは mailq や postqueue -p コマンドで次のような表示がされていま…

Crystalの文字エンコーディング

2/16 に Crystal 0.12 がリリースされました。 0.12 では Crystal に文字エンコーディング変換の仕組みが導入されました。 Ruby と同じような感じで String#encode や IO#set_encoding 等が追加されました。 といっても Crystal の文字エンコーディングは Ru…

文字化けメールその2

スパムメール…というかフィッシングメールが送られてきたのですが、文字化けしていました。 文字化けメール研究家としては(ry メーラーで見ると Subject と本文が次のようになっていました。 From: 【りそな_y行】 <mp@resona-gr.co.jp> Subject: 本人_J_^サ_`ビス 文字化けとし</mp@resona-gr.co.jp>…

文字化けメール

DELL にユーザー登録したらメールが送られてきたんですが、そのメールが文字化けしてました。 文字化けメール研究家としては解析せざるを得ません。 メーラーで見ると Subject が次のようになっていました。 デルアカウントに$4EPO?$$$?$@$-!"$"$j$,$H$&$4$6…

1kg 前後のノートPC

自分のメインPCはノートPCで ThinkPad X220 を使ってるんですが、もう4年半前に買ったものだし重いので、新しくてもっと軽いPCが欲しいと思ってます。 重量 1kg 程度、画面は13インチ、CPUは Core i5、メモリ8GB くらいを条件にして探してみました。 なお、…

Crystal でバイナリデータを扱う

前回も書いたように Crystal の String のエンコーディングは UTF-8 固定です。なので Ruby のようにバイナリデータを String オブジェクトで扱うことはできません。 バイナリデータは Pointer, Slice, MemoryIO で扱うことができるようです。 自分でもよく…

Crystal に String#scrub と String#valid_encoding? を追加

前に次のような記事を書きました。 tmtms.hatenablog.com Ruby と異なり、エンコーディングを変換したり UTF-8 として正しいバイト列かどうかを判定する方法もありません。つらい。 これを解決するために Crystal に String#scrub と String#valid_encoding?…

Crystal の名前付き引数は自然に書けてつらくない

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の25日目の記事です。 qiita.com Ruby の名前付き引数の例です。 def hoge(a, b=1, c: 2) p [a, b, c] end hoge(123) #=> [123, 1, 2] hoge(123, 456) #=> [123, 456, 2] hoge(123, c: 789) #=> [123…

Crystal はソースコードも Crystal でつらくない!

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の24日目の記事です。 qiita.com Crystal のソースコードは Crystal で記述されています。最初は Ruby で書かれていたようですが、現在はすべて Crystal で書かれています。 Ruby は本体と組み込みラ…

Crystal はブロックがエラーになることがあってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の23日目の記事です。 qiita.com メソッドに渡されたブロックを実行するには次の2つの方法があります。 def hoge yield end hoge{ p 123 } def hoge(&block) block.call end hoge{ p 123 } ですが、…

Crystal には Thread がなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の22日目の記事です。 qiita.com タイトルのまんまですが、Crystal は Thread がなくてつらい。 Thread というクラスはありますが、ソースを見ると、 # Don't use this class, it is used internally…

Crystal のバイナリデータ読み込みは C みたいでつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の21日目の記事です。 qiita.com Crystal の String は UTF-8 固定なのでバイナリデータを String で扱うことはできません。 バイナリデータを扱うには String ではなく Slice を使います。 Slice(UI…

Crystal の型を絞り込む場合は is_a? を使うしかなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の20日目の記事です。 qiita.com 昨日の記事で、File#gets が nil を返すことがあるので、 line = File.open("/dev/urandom").gets if line.is_a? String # gets は nil を返すことがあるためこの if…

Crystal の文字列は UTF-8 固定でつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の19日目の記事です。 qiita.com 昨日の記事で Crystal の文字列は UTF-8 だと書きましたが、実行時に外部から UTF-8 以外の文字列を与えるとどうなるのでしょうか。 p File.open("/dev/urandom").ge…