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

  • Crystal には Thread がなくてつらい - tmtms のメモ

    これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の22日目の記事です。 qiita.com タイトルのまんまですが、Crystal は Thread がなくてつらい。 Thread というクラスはありますが、ソースを見ると、 # Don't use this class, it is used internally by the event scheduler. # Use spawn and channels instead. と書いてあって気軽に使える雰囲気ではありません。 spawn や channel を使えと書かれてるので spawn を使ってみます。 spawn do 10.times do |i| print 'a' sleep 1 end end spawn do 10.times do |i| print 'b' sleep 1 en

    Crystal には Thread がなくてつらい - tmtms のメモ
    koyancya
    koyancya 2015/12/24
  • Crystal にはタプルがあってつらくない - tmtms のメモ

    これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の9日目の記事です。 qiita.com 昨日の記事に「Tuple を使うとらくちんです」というコメントをもらいました。 タプルを使って書きなおしてみます。 [ { 1, "hoge" }, { 2, "fuga" }, { 3, "piyo" }, ].each do |obj| num, str = obj num + 100 str.size end タプルは Ruby には無い型です。変更不可能な配列のような感じみたいです。 配列リテラルは [ ] で書きますが、代わりに { } で括るとタプルになります。 タプルは変更不可能なので、何番目の値がどのような型かもコンパイル時にわかるので、問題ないようです。 つらくない!

    Crystal にはタプルがあってつらくない - tmtms のメモ
    koyancya
    koyancya 2015/12/09
    Tuple 良い
  • Crystal は配列内要素に対してすべての要素が持つメソッドしか呼び出せなくてつらい - tmtms のメモ

    これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の8日目の記事です。 qiita.com Ruby だと、プログラマーが配列の1番目の要素は整数で、2番目の要素が文字列で…といったように決めて、次のようなコードを書いたりすることがあります。 [ [ 1, "hoge" ], [ 2, "fuga" ], [ 3, "piyo" ], ].each do |obj| num, str = obj num + 100 str.size end Crystal だとこれはコンパイルエラーになります。 % crystal hoge.cr Error in ./hoge.cr:1: instantiating 'Array(Array(String | Int32))#each()' [ ^~~~ in /opt/crystal/src/array.cr:774

    Crystal は配列内要素に対してすべての要素が持つメソッドしか呼び出せなくてつらい - tmtms のメモ
    koyancya
    koyancya 2015/12/08
    なるほどー
  • Crystal でも深さが不定の配列が作れてつらくない…? - tmtms のメモ

    これは「Ruby脳にはCrystalつらい Advent Calendar 2015」の4日目の記事です。 qiita.com 昨日の記事で、Crystal は深さが不定の配列が作れなくてつらいと書いたんですが、 実際にできないわけないだろうから方法を調べて4日目の記事にしようと思ってたところ、Twitterやコメントで方法を教えてもらいました。 このアドベントカレンダーは「Crystalつらいと言ってたら詳しい人がきっと教えてくれるだろう」という下心で始めたので思惑通りです :-) 深さが不定の配列を作る場合は、型(クラス)にエイリアスを設定します。 昨日の記事にコメントしていただいた例: alias Hoge = Int32 | String | Array(Hoge) array = [] of Hoge array.push 1 array.push "2" array.push

    Crystal でも深さが不定の配列が作れてつらくない…? - tmtms のメモ
    koyancya
    koyancya 2015/12/04
    釣り駆動学習だ -> "このアドベントカレンダーは「Crystalつらいと言ってたら詳しい人がきっと教えてくれるだろう」という下心で始めたので思惑通りです :-)"
  • Software Design 9月号の特集の記事を書きました - tmtms のメモ

    Software Design 9月号の特集の記事を書きました。もう三週間も前に発売になってますが…。 ソフトウェアデザイン 2015年 09 月号 [雑誌] 出版社/メーカー: 技術評論社発売日: 2015/08/18メディア: 雑誌この商品を含むブログ (3件) を見る 第1特集「正規表現・SQL・オブジェクト指向 苦手克服のベストプラクティス」の正規表現の記事と、第2特集「メールシステムの教科書」の第1章と第2章を書きました。第2特集の第4章は NSEG 仲間の佐藤さんが書いてます。 正規表現もメールも基的なことしか書いてませんが、何か参考になれば幸いです。 ところで正規表現の記事の方には誤りがあります。 p.27〜28 誤 任意の50文字のあとに文字列末尾があるような位置に適合します。つまりこの位置以降の文字数が50文字であることを指定できるのです。 正 任意の5〜10文字のあと

    Software Design 9月号の特集の記事を書きました - tmtms のメモ
    koyancya
    koyancya 2015/09/09
    とみたさんの連載読みたい
  • Crystal - Ruby風静的型付きコンパイル言語 - @tmtms のメモ

    Ruby で複数人で大きめのプログラムを作ってると、型が欲しいと思うことが時々あるんですが、最近型つきRuby風言語の Crystal というのがあるのを知ってちょっと触ったりしてました。 YAPC::Asia 2015 で、まつもとさんの「絶対に型を書きたくないでござる」を聞いて、「型がある Ruby ってどんな感じなんだろう?」とあらためて Crystal についてもう少し知りたいと思って、YAPC の開催期間中に発表聞かずに調べたりしてました(発表はちゃんと聞きましょう)。 Matz「絶対に型を書きたくないでござる」 #yapcasiaA— とみたまさひろ (@tmtms) 2015, 8月 21 自分は Ruby にも型宣言欲しい #yapcasiaA— とみたまさひろ (@tmtms) 2015, 8月 21 @_ko1 最近触ってみてる— とみたまさひろ (@tmtms) Au

    Crystal - Ruby風静的型付きコンパイル言語 - @tmtms のメモ
    koyancya
    koyancya 2015/08/24
  • 誰も掴んでない TCP ポートを使うことができない - tmtms のメモ

    たとえば、次の例では 12345 ポートは netstat や lsof でも出てこないし、クライアントから接続することもできません。 # netstat -a | grep 12345 # lsof -i :12345 # telnet localhost 12345 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused が、12345 ポートで LISTEN するサーバーを起動すると Address already in use になってしまいます。 # ruby -rsocket -e 'TCPServer.new(12345)' -e:1:in `initialize': Address already in use - bind(2) for nil port 12345

    誰も掴んでない TCP ポートを使うことができない - tmtms のメモ
    koyancya
    koyancya 2015/08/13
    神隠しだ
  • 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 のメモ
    koyancya
    koyancya 2015/06/10
  • 「理論から学ぶデータベース実践入門 ― リレーショナルモデルによる効率的なSQL」 - tmtms のメモ

    理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus) 作者: 奥野幹也出版社/メーカー: 技術評論社発売日: 2015/03/10メディア: 単行(ソフトカバー)この商品を含むブログ (9件) を見る ひょんなことから著者の奥野さんから頂きました。読み終えたのは3月頭なのに、2ヶ月も経ってからブログを書くという遅筆ぶりです。 このはもともと2月末に発売予定だったらしいのですが、3/10に販売延期になりました。 『理論から学ぶデータベース実践入門』 発売延期及びテスト販売購入のお客様への書籍交換対応のお詫びとお知らせ:重要なお知らせ|技術評論社 テスト販売という限られた部数とはいえ、一旦販売したものを正誤表対応ではなく刷り直して交換対応というのは、電子書籍ならともかく、紙の書籍でやるとはすばらしいです。神対応と言ってもいいの

    「理論から学ぶデータベース実践入門 ― リレーショナルモデルによる効率的なSQL」 - tmtms のメモ
    koyancya
    koyancya 2015/05/06
    頼もしい! -> "書籍販売前に誤字脱字等のチェックをして欲しいという人はご相談ください :-)"
  • RubyHiroba に行って来ました - tmtms のメモ

    (この記事は 2013-06-08 に書きました) RubyKaigi 2013 は諸般の事情により行かなかったのですが、RubyKaigi が終了した翌日に開催された RubyHiroba に参加しました。 会場は品川のマイクロソフトさんのビルでした。 ロビーに到着すると、豪華な受付の人がいて、申し込み時にメールで送られてきた二次元バーコードを見せると、それを機械で読み取って入館証を渡していました。ハイテクですね。 会場は31Fで窓からの見晴らしがとても素晴らしかったです。電車や車がミニチュアのようでした。 メイン会場は LT で、サブ会場では dRuby Hiroba や RailsGirls や p4d が開催されていました。 自分も LT で発表してみました。スライド貼っておきます。 Sequelのすすめ あと、オープンスペースでいろんなブースが立っていたようでした。 自分は咳さん

    RubyHiroba に行って来ました - tmtms のメモ
    koyancya
    koyancya 2015/02/03
    これですね http://upec.jp/archives/482 -> "奥のブースでは須藤さんが何かやっていたようですが、4〜5人で怖い顔してPCの画面を睨んでいたので声を掛けれませんでした"
  • Ruby, MySQL のうるう秒の扱い - @tmtms のメモ

    2015/7/1 にうるう秒が挿入されるということで、うるう秒の話題が盛り上がってるようなので自分も書いてみます。 Linux 上のプログラムが時刻で60秒を刻むには、うるう秒対応のタイムゾーンを使う必要があります。 通常はうるう秒を考慮していないタイムゾーンが使用されているので、60秒を含む時刻になることはありません。 60秒を含む時刻を扱うには、right/Japan のように right/ を前につけたタイムゾーンを指定します。 前回のうるう秒は 2012/7/1 08:59:60 (JST) だったので、これで試してみます。 % TZ=Japan date --date='2012-07-01 08:59:60' date: `2012-07-01 08:59:60' は無効な日付です % TZ=right/Japan date --date='2012-07-01 08:59:6

    Ruby, MySQL のうるう秒の扱い - @tmtms のメモ
    koyancya
    koyancya 2015/01/11
  • MySQLユーザーがPostgreSQLを触ってみたメモ - tmtms のメモ

    最近なぜか MySQL を使う Ruby アプリを PostgreSQL に対応する羽目になっているのですが、今までほとんど MySQL 以外の RDBMS を触ってなかったので、色々ハマったりしたのでメモっときます。 なお PostgreSQL 歴が浅いので間違ってること書いてるかもしれません。 API プログラムから MySQL にアクセスするには Ruby/MySQL を使っていたのですが、PostgreSQL 用の API を新たに覚えるのは面倒だったので、Sequel を使って書き直しました。 mysql.query("select col1, col2 from table where col3='xxx'") ↓ db[:table].where(col3: 'xxx').select(:col1, :col2) …みたいな感じです。 今までプログラム中に突然 SQL が現れ

    MySQLユーザーがPostgreSQLを触ってみたメモ - tmtms のメモ
    koyancya
    koyancya 2014/10/27
    良いですね。どんどん使いましょう。ポスグレ
  • Rubyのシグナルハンドラ - tmtms のメモ

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

    Rubyのシグナルハンドラ - tmtms のメモ
    koyancya
    koyancya 2014/09/23
  • RubyHiroba 2014 に行きました - tmtms のメモ

    去年に引き続き RubyHiroba 2014 に行ってきました。 お目当ては toRuby & guRuby 出張版 です。 渋谷の一角の北関東。 咳さん(@m_seki)とか田中さん(@tanaka_akr)とか角さん(@kdmsnr)とか角谷さん(@kakutani)とか豪華メンバーが参加してました。 guRuby - メタプログラミングRuby メタプログラミングRuby 作者: Paolo Perrotta,角征典出版社/メーカー: アスキー・メディアワークス発売日: 2010/08/28メディア: 大型購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る method_missing の章の朗読&サンプルプログラムの写経でした。 第二版の翻訳予定もあるようです。 toRuby - なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 シグナルの

    RubyHiroba 2014 に行きました - tmtms のメモ
    koyancya
    koyancya 2014/09/23
    "サンライズ出雲で RubyWorld Conference に行こう仲間の @yancya さん"
  • メールアドレスの正規表現 - tmtms のメモ

    たまにメールアドレスの形式を正規表現で表すのは不可能とかというのを目にするのですが、そんなことはありません。入れ子がなければたいていの文字列の形式は正規表現で表すことができます。 ということで、RFC5321, 5322 からメールアドレスの正規表現を書いてみました。 /\A([0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+(\.[0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+)*|\"([\x20\x21\x23-\x5b\x5d-\x7e]|\\[\x20-\x7e])*\")@[0-9a-z]([0-9a-z-]*[0-9a-z])?(\.[0-9a-z]([0-9a-z-]*[0-9a-z])?)*\z/i ちょっと長いですけど、最近の Ruby だと (?<hoge>) と \g<hoge> を使うことで、同じ正規表現の繰り返しを簡単に書くことができる

    メールアドレスの正規表現 - tmtms のメモ
    koyancya
    koyancya 2014/09/09
    このシャツ、めっちゃイカす
  • 相手がいないのに 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 のメモ
    koyancya
    koyancya 2014/08/06
  • Ruby の Timeout.timeout に例外クラスを指定する時の注意 - tmtms のメモ

    ちょっとハマったのでメモ。 Ruby の Timeout ライブラリを使うと、一定の時間が過ぎても終わらない処理を中断することができます。 require 'timeout' def hoge sleep end def main Timeout.timeout(3) do hoge end rescue Timeout::Error => e p 'main: timeout', e.backtrace.first end main このスクリプトを実行すると3秒たってから終了します。 % ruby t1.rb "main: timeout" "t1.rb:4:in `sleep'" バックトレースから 4行目の sleep 中でタイムアウトが発生したことがわかります。 次に Timeout.timeout を入れ子にしてみます。 require 'timeout' def hoge T

    Ruby の Timeout.timeout に例外クラスを指定する時の注意 - tmtms のメモ
    koyancya
    koyancya 2014/06/19
  • MySQL の SQL エスケープ - tmtms のメモ

    この記事は MySQL Casual Advent Calendar 2013 の15日目の記事です。 今、空前の SQL エスケープブームみたいなので、このビッグウェーブに乗っかってみます。 でも面倒なのでセキュリティについての話はしません。カジュアル! 文字列リテラルとエスケープ MySQL では SQL 中の文字列リテラルは次のように表現します。 'abc' -- シングルクォートで括る "abc" -- ダブルクォートで括る 0x616263 -- 16進数 x'616263' -- 16進数 0b011000010110001001100011 -- 2進数 b'011000010110001001100011' -- 2進数 各表記で charset を指定することができます _utf8 'abc' _utf8 "abc" _utf8 0x616263 _utf8 x'6162

    MySQL の SQL エスケープ - tmtms のメモ
    koyancya
    koyancya 2013/12/16
  • Rails の rake db:create がひどい - tmtms のメモ

    Rails でアプリケーションの初期化はこんな感じになると思います。 % rails new hoge -d mysql % cd hoge % mysql -uroot -p mysql> create user hoge@localhost identified by 'abcdefg'; mysql> grant all on hoge_development.* to hoge@localhost; mysql> grant all on hoge_test.* to hoge@localhost; % vi config/database.yml development: 〜 username: hoge password: abcdefg 〜 test: 〜 username: hoge password: abcdefg % rake db:createで、rake db:c

    Rails の rake db:create がひどい - tmtms のメモ
    koyancya
    koyancya 2013/12/12
    これほんとすごいw