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

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の18日目の記事です。 qiita.com Ruby の文字列のエンコーディングはオブジェクト毎に異なる可能性があります。 エンコーディングが異なる文字列を結合したりマッチングさせようとすると例外になりま…

Crystal は文字と文字列が異なっていてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の17日目の記事です。 qiita.com Ruby では '〜' と "〜" は両方とも文字列(String)です。文字列を1文字ずつに分割しても、それは1文字の文字列です。 Crystal では '〜' は文字(Char)で、"〜" は文…

Crystal の文字列は変更不可でつらい?

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の16日目の記事です。 qiita.com 最近 Ruby でリテラル文字列を変更不可にするとかしないとかって話がありますが、Crystal の文字列は最初から変更不可です。 文字列オブジェクトを変更するようなメ…

Crystal は String#to_i がエラーになることがあってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の15日目の記事です。 qiita.com Ruby の String#to_i は数字以外の文字列の場合に 0 を返します。C の atoi() と同じです。 % ruby -e 'p "abc".to_i' 0 Crystal の String#to_i は数字以外の文字列…

Crystal は nil.to_i がエラーになってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の14日目の記事です。 qiita.com Ruby では nil.to_i は 0 になりますが、Crystal ではコンパイル時エラーになります。 % crystal eval 'nil.to_i' Error in line 1: undefined method 'to_i' for Ni…

Crystal は宣言しただけだと値が未定義になってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の13日目の記事です。 qiita.com 昨日の記事に書いたように Crystal は変数を初期化せずに宣言だけすることができます。 ですが、宣言だけだと値は未定義です。未定義のまま参照すると例外が発生した…

Crystal のインスタンス変数が nilable になってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の12日目の記事です。 qiita.com Crystal で Ruby と同じような感覚でインスタンス変数を使うと nil だと怒られることがあります。 class Hoge def hoge @hoge = "abc" @hoge.size end end Hoge.new.…

Crystal は Ruby にあるメソッド名がなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の11日目の記事です。 qiita.com Ruby には同じ機能なのに複数の名前があるメソッドがありますが、Crystal は基本的に1機能に1メソッド名という方針のようです。 それにより Ruby にはあるのに Cryst…

Crystal は配列を展開した引数をメソッドに渡せなくてつらい?

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の10日目の記事です。 qiita.com Ruby だと、配列を展開してメソッドの引数にすることができます。 arg = [1, "abc", :foo] hoge(*arg) # hoge(1, "abc", :foo) と同じ Crystal だとこれはできません…

Crystal にはタプルがあってつらくない

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の9日目の記事です。 qiita.com 昨日の記事に「Tuple を使うとらくちんです」というコメントをもらいました。 タプルを使って書きなおしてみます。 [ { 1, "hoge" }, { 2, "fuga" }, { 3, "piyo" }, …

Crystal は配列内要素に対してすべての要素が持つメソッドしか呼び出せなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の8日目の記事です。 qiita.com Ruby だと、プログラマーが配列の1番目の要素は整数で、2番目の要素が文字列で…といったように決めて、次のようなコードを書いたりすることがあります。 [ [ 1, "hoge…

MIMEヘッダエンコーディングは複雑すぎてつらい

これは NSEG Advent Calender の7日目の記事です(内容は NSEG とも長野とも関係ありませんが…)。 www.adventar.org メールの送信者(From)や件名(Subject)は本来ASCII(の一部の文字)しか書くことができないんですが、MIME(RFC2047)の登場によって日本語等の非…

Crystal があちこちに .crystal というディレクトリを作ってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の7日目の記事です。 qiita.com Crystal を何の気無しに使っていると、気がつくと .crystal というディレクトリがあちこちにできています。 Crystal はコンパイル時に .crystal というディレクトリを…

Crystal は配列の範囲外の参照がエラーになってつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の6日目の記事です。 qiita.com 1日目の記事で配列が自動拡張されなくてつらいと書いたんですが、配列の範囲外の参照もエラーになります。 array = [0, 1, 2] array[3] [4337095] *CallStack::unwind…

Crystal は日本語のドキュメントがあってつらくない!

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の5日目の記事です。 qiita.com 5日目にして既にネタ切れでもう Ruby は関係ないしつらくもないんですけど、Crystal アドベントカレンダーで日本語ドキュメントがあることを知りました。 www.adventa…

Crystal でも深さが不定の配列が作れてつらくない…?

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の4日目の記事です。 qiita.com 昨日の記事で、Crystal は深さが不定の配列が作れなくてつらいと書いたんですが、 実際にできないわけないだろうから方法を調べて4日目の記事にしようと思ってたとこ…

Crystal は深さが不定の配列が作れなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の3日目の記事です。 qiita.com Ruby の配列は任意の型のオブジェクトが入りますが、Crystal は特定の型しか入りません。 空配列を作ろうとするとエラーになります。 array = [] #=> Syntax error in…

「理論から学ぶデータベース実践入門」読書会スペシャルを開催しました #nseg

理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)作者: 奥野幹也出版社/メーカー: 技術評論社発売日: 2015/03/10メディア: 単行本(ソフトカバー)この商品を含むブログ (13件) を見る 11/28 に NSEG 第69回勉…

Crystal は実行時エラーでソース位置がわからなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の2日目の記事です。 qiita.com Ruby だと実行時にエラーが発生すると、エラーが発生したプログラムの位置が出力されるのですが、 def hoge raise "hoge" end hoge % ruby hoge.rb hoge.rb:2:in `hog…

Crystal は配列が自動拡張されなくてつらい

これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の1日目の記事です。 qiita.com Ruby だと配列の範囲外に値を代入すると、 array = [0, 1, 2] array[4] = 4 array #=> [0, 1, 2, nil, 4] のように、配列が自動拡張されるのですが、Crystal で同じこ…

ELECOM ワイヤレスBlueLEDマウス M-XG1 Bluetooth 5ボタン 握りの極み Mサイズ ブラック M-XG1BBBK

この前買ったマイクロソフトのマウスがハズレだったので購入。 ELECOM ワイヤレスBlueLEDマウス M-XG1 Bluetooth 5ボタン 握りの極み Mサイズ ブラック M-XG1BBBK出版社/メーカー: エレコム発売日: 2013/09/06メディア: Personal Computersこの商品を含むブ…

Microsoft Sculpt Comfort Mouse

6年以上使ってたマウスが調子悪くなってきて、ホイールを触ってないのに勝手にスクロールしたり、上にスクロールしようとしてるのに下にスクロールしたりとか、そろそろ限界ぽかったので新しいのを買いました。 マイクロソフト [人間工学]?ワイヤレス Blueto…

Crystal

前に Crystal の記事を書いて、 tmtms.hatenablog.com このスライドの中で、 と書いたんですが、現在は条件分岐中のメソッド定義はエラーになるようになっています。 if true def hoge end end % crystal hoge.cr Error in ./hoge.cr:2: can't declare def d…

Software Design 9月号の特集の記事を書きました

Software Design 9月号の特集の記事を書きました。もう三週間も前に発売になってますが…。 ソフトウェアデザイン 2015年 09 月号 [雑誌]出版社/メーカー: 技術評論社発売日: 2015/08/18メディア: 雑誌この商品を含むブログ (3件) を見る 第1特集「正規表現・…

Crystal - Ruby風静的型付きコンパイル言語

Ruby で複数人で大きめのプログラムを作ってると、型が欲しいと思うことが時々あるんですが、最近型つきRuby風言語の Crystal というのがあるのを知ってちょっと触ったりしてました。 YAPC::Asia 2015 で、まつもとさんの「絶対に型を書きたくないでござる」…

MySQLのタイムゾーン

YAPC::Asia 2015 のセッションで、MySQL のタイムゾーンの話が出ていましたが、以前タイムゾーン周りで少しはまったことがあったのを思い出したので書いてみます。 MySQLのデフォルトのタイムゾーンは mysqld 起動時のシステム設定です。TZ 環境変数の値か、…

誰も掴んでない TCP ポートを使うことができない

たとえば、次の例では 12345 ポートは netstat や lsof でも出てこないし、クライアントから接続することもできません。 # netstat -a | grep 12345 # lsof -i :12345 # telnet localhost 12345 Trying 127.0.0.1... telnet: Unable to connect to remote ho…

アジャイルジャパン2015 長野サテライト / NSEG 62

4/25 に NSEG 第62回勉強会として アジャイルジャパン2015 の長野サテライトを開催しました。 場所は株式会社ケイケンシステムさんの会議室をお借りしました。いつもありがとうございます。 長野サテライトは去年は開催されなかったので、二年ぶりです。参加…

MyNA(日本MySQLユーザ会)会 2015年4月

4/22(水) に MyNA会が開催されたので久々に参加しました。 というか、私の東京出張に合わせて開催されたみたいなので強制参加です。 ちょっと前に話題になった「=問題」についてしゃべってきました。 スライド: = from Masahiro Tomita www.slideshare.net…

「理論から学ぶデータベース実践入門 ― リレーショナルモデルによる効率的なSQL」

理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)作者: 奥野幹也出版社/メーカー: 技術評論社発売日: 2015/03/10メディア: 単行本(ソフトカバー)この商品を含むブログ (9件) を見る ひょんなことから著者の…

Ruby + jemalloc でメモリ使用量が増える場合

Ruby でスレッドを1000個ほど作るとプロセスサイズが 4GB ほどになります。 % ruby -e 'system "ps -o vsz -p #$$"; 1000.times{Thread.new{sleep}}; system "ps -o vsz -p #$$"' VSZ 46392 VSZ 4151572 jemalloc 使うと 2.5GB くらいになります。jemalloc …

Postfix mruby plugin

Postfix の mruby plugin を作ってみました。 tmtm/postfix-mruby 誰得かわからないんですけど、Postfix のルックアップテーブルで mruby スクリプトで結果を返すことができます。 たとえば、次のようなスクリプトを作れば、 class Hoge def lookup(key) key…

Postfix で独自のルックアップテーブルを作る

Postfix 3.0 から導入された動的データベースプラグイン機構を使用して、独自のルックアップテーブルを作ってみます。 Postfix を次のようにしてインストールしてあります。 重要なのは dynamicmaps=yes なので、これさえあれば他のパラメータ指定はなんでも…

Postfix 3.0 の主な変更

Postfix 3.0.0 がリリースされたのでアナウンス文を勝手に翻訳してみました。 原文: http://www.postfix.org/announcements/postfix-3.0.0.html Postfix stable release 3.0.0 が利用可能になりました。このリリースにより Postfix 2.8 のサポートは終了しま…

Ruby, MySQL のうるう秒の扱い

2015/7/1 にうるう秒が挿入されるということで、うるう秒の話題が盛り上がってるようなので自分も書いてみます。 Linux 上のプログラムが時刻で60秒を刻むには、うるう秒対応のタイムゾーンを使う必要があります。 通常はうるう秒を考慮していないタイムゾー…

2014年の振り返り

あけましておめでとうございます。 2014年も無事終了したので一年を振り返ってみます。 ブログ 1年間で27件の記事を書きました。2013年が24件だったので少し増えました。 はてなブックマークで2桁以上ブクマされたものを並べてるとこんな感じです。 278 メー…

Postfix Advent Calendar 2014

これはPostfix Advent Calendar 2014の26日目の記事…じゃなくてまとめです。 Postfix Advent Calendar 2014 - Qiita 11月下旬、今年もどっかのアドベントカレンダーに記事を書こうかとQiita の Advent Calendar 2014を眺めてたんですが、Postfix が無いこと…

Postfix から MySQL を使う

これは Postfix Advent Calendar 2014 の15日めの記事です。 Postfix Advent Calendar 2014 - Qiita ルックアップテーブル Postfix のルックアップテーブルは Linux だと通常は hash 形式のファイルですが、ファイルの代わりに MySQL, PostgreSQL, LDAP 等を…

7bit と 8bit の狭間で

これは Postfix Advent Calendar 2014 の6日目の記事です。 Postfix Advent Calendar 2014 - Qiita その昔、電子メールは 7bit データでした。 日本語は ASCII の範囲におさまらないのですが、ISO-2022-JP*1にエンコードすることで 7bit になるので、日本語…

Postfix の拡張メールアドレス

これは Postfix Advent Calendar 2014 の4日目の記事です。 Postfix Advent Calendar 2014 - Qiita Postfix では拡張メールアドレスを使うことができます。 tmtms@eample.com というメールアドレスがあった場合、tmtms+ext@example.com というメールアドレス…

Postfix の main.cf のフォーマットについて

これは Postfix Advent Calendar 2014 の2日目の記事です。 Postfix Advent Calendar 2014 - Qiita Postfix が登場する以前、MTA と言えば Sendmail でした。Sendmail の設定ファイル sendmail.cf は人間が読むことも書くことも難しくて、設定ファイルを簡単…

Postfixのパラメータ

Postfix 2.9 がリリースされたころに「Postfixのパラメータ」という記事を書きましたが、それ以降の変更について書いてみます。 新しいパラメータ、全然しらない…。 Postfix 2.9.11 パラメータ数 701 Postfix 2.10.5 パラメータ数 709 追加 postscreen_upstr…

MySQLユーザーがPostgreSQLを触ってみたメモ

最近なぜか MySQL を使う Ruby アプリを PostgreSQL に対応する羽目になっているのですが、今までほとんど MySQL 以外の RDBMS を触ってなかったので、色々ハマったりしたのでメモっときます。 なお PostgreSQL 歴が浅いので間違ってること書いてるかもしれ…

RSpec をやめて Test::Unit に戻る

最近の RSpec は、それまで obj.stub(hoge: value) と書けたものが、 allow(obj).to receive(:hoge).and_return value と書かないといけなくなったりとか、正気の沙汰とは思えないような変更をしたりするので、何年かぶりに Test::Unit を使ってみようとリハ…

Rubyのシグナルハンドラ

toRuby & guRuby 出張版 でシグナルについてやってたので、関連して書いてみます。 どのような時にシグナルハンドラを定義するのか どのような時にシグナルハンドラを定義するのかという話がありました。 UNIXのデーモンプログラムは、何が由来なのかわかり…

RubyHiroba 2014 に行きました

去年に引き続き RubyHiroba 2014 に行ってきました。 お目当ては toRuby & guRuby 出張版 です。 渋谷の一角の北関東。 咳さん(@m_seki)とか田中さん(@tanaka_akr)とか角さん(@kdmsnr)とか角谷さん(@kakutani)とか豪華メンバーが参加してました。 guRuby - …

メールアドレスの正規表現

たまにメールアドレスの形式を正規表現で表すのは不可能とかというのを目にするのですが、そんなことはありません。入れ子がなければたいていの文字列の形式は正規表現で表すことができます。 ということで、RFC5321, 5322 からメールアドレスの正規表現を書…

Dockerイメージを作る (NSEG#54)

NSEGの第54回勉強会で「Dockerイメージを作る」という発表をしました。 Dockerイメージを作る (SlideShare にもアップロードしました) スライドにも書きましたが、前回以降にやったことの自分用のまとめみたいな感じで、世間的に目新しい話題は特に無いです…

相手がいないのに ESTABLISHED になってる TCP ポート

最近 ParallelServer というライブラリを作ったのですが、その最中に奇妙な状態になってる TCP ポートを見つけたので、メモっておきます。 Ruby では TCP サーバーは次のような感じで作ることができます。お手軽ですね。 require 'socket' Socket.tcp_server…

#NSEG 第53回勉強会

NSEG 第53回勉強会に参加しました。 今回も会場はケイケンさんです。 今回のテーマは JavaScript でした。 自分が JavaScript を触り始めたのは結構前なんですけど、未だにちゃんと書ける自信がありません。 "0" == 0 == false なのに if ("0") { alert("hog…