kenju's blog

About Programming and Mathematics

Ruby

『Understanding Computation』を読んだ

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本この商品を含むブログ (11件) を見る 実際に読んだのはだいぶ…

"The dRuby Book" を読んだ

http://www.druby.org/sidruby/the-druby-book.html 背景 http://druby.hatenablog.com/entry/20170304/1488568155 関さんの ^ の記事を見つけて、"The dRuby Book" が公開されていることを知りました。こうして公開してもらえるのはありがたいです。 発売さ…

『オブジェクト指向設計実践ガイド』を読んだ

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者: Sandi Metz,?山泰基出版社/メーカー: 技術評論社発売日: 2016/09/02メディア: 大型本この商品を含むブログ (1件) を見る 設計力って難しくて面白い。日々…

Ruby で Numbers->SVG のコンパイラを書いた

過去に書いたこれの Ruby 版。 itiskj.hatenablog.com Ruby で書き換えた理由は、TDD の型の練習だったり、オブジェクト指向開発をライトなレベルで実践したかったり、とまあいくつかあるものの、特に深い理由ではない。気が向いたので書いてみた。 前回同様…

新訳版『テスト駆動開発』を読んだ

テスト駆動開発作者: Kent Beck,和田卓人出版社/メーカー: オーム社発売日: 2017/10/14メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る 旧訳版も読んだことがなかった。この本が非常に優れているのは、すごく細かいステップを経ながら、…

『メタプログラミングRuby 第2版』を読んだ

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (3件) を見る メタプログラミング周りを中心に、Ruby のオブジェクトモデル関連の API についてより…

Programming Contest: 数字をローマ数字に変換する

exercism.io をやっていて、http://exercism.io/tracks/ruby/exercises/roman-numerals という問題に出くわした。数字が渡されたときに、ローマ数字(String)に変換するメソッドを実装しろ、というものだ。 Problem Specの一部抜粋は以下のような感じ。 def…

Implement Timeout in Ruby

Rubyでタイムアウトをアプリ側で実装したいときなどは、Timeoutというビルトインのmoduleを使えば簡単に実装できる。 docs.ruby-lang.org Example Definition DEFAULT_TIMEOUT = 1 * 60 # 1min def with_timeout(timeout_sec: DEFAULT_TIMEOUT) begin Timeou…

MurmurHashとは何か

背景 RubyのHashTableの実装が知りたくて、ソースコードを読んでいた時に、"MurmurHash"という単語に出会った。何かよくわからなかったので、調べて見た。 https://github.com/ruby/ruby/blob/c08f7b80889b531865e74bc5f573df8fa27f2088/st.c: /* This hash …

activerecord_precountのRails v5対応のパッチを送った

@k0kubunさんが作成されたactiverecord_precountを使っているのだが、Rails v5対応を行う中で、Rails v5で動作しないことが判明した。 そこで、少し前の話になるのだが、acriverecord_precountのRails v5対応をするためのパッチを3件送った。 s/query_scope/…

"Cookpad Ruby Hack Challenge"に参加してきました

“Cookpad Ruby Hack Challenge"に参加してきました。 ↓は参加前日に書いた記事です。 itiskj.hatenablog.com 参加して良かったこと 講義・開発・懇親会全てを通して満足度の高い、最高の2日間でした。ある程度の目的を持って臨んだのですが、それを越す学び…

"Cookpad Ruby Hack Challenge"に参加してくる

普段Rubyを使っているものとして、その内部構造を知りたい、という強い思いがあった。 なので、今回抽選に受かってこの上なく嬉しかった。 RubyのソースコードHackは何度かトライしてみたが、いきなりソースコードをクローンしたものの、なかなかとっかかり…

Rubyでシンプルなデータ構造を表現する時に何を使うか

Rubyを書いている時に、シンプルなデータ構造を書く場面は多々ある。 そんな時に頭の中で無意識的に判断している内容を言語化してみた。 選択肢 細かいところまであげるとキリがないが、大まかな選択肢としては以下の4つが選択肢としてあげられるのではない…

書評『Rubyのしくみ ~Ruby Under a Microscope~』を読んで

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る とりあえず一通り通読をし終えた。 今後は、さらにRuby…

『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第12章>

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 第1~5章編:『Rubyのしくみ -Ruby Under a Microscope…

『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第10~11章>

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 第1~5章編:『Rubyのしくみ -Ruby Under a Microscope…

『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第8~9章>

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 第1~5章編:『Rubyのしくみ -Ruby Under a Microscope…

『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第6~7章>

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 第1~5章編はこちら:『Rubyのしくみ -Ruby Under a Mic…

『Rubyのしくみ -Ruby Under a Microscope』の読書メモ<第1~5章>

Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 第1章 字句解析と構文解析 遠くからは複雑に見えること…

エンコードが必要な文字の時YAML.dumpはvalueをクオートでラップして出力する

tl;dr Rubyの現在のYAMLモジュールの実装の詳細は、cのYAML ParserライブラリlibyamlのブリッジであるPsych YAML.dumpしたときに、valueがシングルクオートでラップされることがあるのは、エンコードが必要な文字を出力するとき(例:0x80) 意図しない出力…

AWS SDK for RubyでS3のファイルを扱う時はdownload_file/upload_fileを使う

tl;dr S3へのファイルのアップロードには、#putも#upload_fileもいずれも使えるが、特別な理由がない限り#upload_fileを使うべき 同様に、ダウンロードする際は#download_fileを使う s3 = Aws::S3::Resource.new(...) obj = s3.bucket('bucket-name').object…

FileSystemの互換性を保つファイル名のエスケープ

先日の仕事で、maxOS, Windows, Linuxで基本的に互換性のあるファイル・ディレクトリ名を出力する必要にでくわしました。 Windowsにおける禁止単語 Naming Files, Paths, and Namespaces (Windows) Windowsをあまり使わなかったのですが、Windowsでは↓の文字…

RubyのソースコードリーディングにGNU GLOBALを使うと便利

tl;dr Rubyのソースコードのようなある程度大きい規模のコードリーディングにはタグシステムが必須 いくつかあるツールの中で、GNU GLOBALが手軽でおすすめ GNU GLOBALでコードリーディングするときによく使うキーボードショートカットをまとめた 背景 私が…

rubyzip と zip(1) のメモリ消費量を比較検討した

rubyzipgemが、ある特定のJobサーバーでメモリ消費量的に利用できるかどうかを計測したかったため、Profilerを書いた。比較対象として、Linuxコマンドのzip(1)と比較した。また、単純にzipしようとするファイルをRubyでシンプルに扱う場合どれくらいのメモリ…