2013年をまとめる
まとめようと思ったのですが
ブログを読み返してこの一年を振り返ろうと思いましたが、ぜんぜん書いてなくて何も振り返られないですね。最悪です。
なんとなくがんばってまとめると
- 千葉県東京Ruby会議の黒Ruby会議というところで話をした
- 東京都東京Ruby会議の三日目で話をした
- http://tokyo10.rubykaigi.info/
- https://speakerdeck.com/sugamasao/you-are-not-alone-tkrk10-equals
- 雪で中止になって日をおいてからの三日目だったのだけど、正直な所三日目は開催しないかと思って先走って資料を上げてしまってちょっと動揺した
- パーフェクトRubyの執筆と東京Ruby会議で2本のトークをするっていうのは個人のキャパシティとして完全に無理というのがわかった(結果として、資料を作りなおす時間があって三日目開催で助かった)
- パーフェクトRubyが出版できた
- ありがたい話で、少しの誤字脱字を修正した2刷が流通しております
- ノリでパーフェクトRubyアドベントカレンダーをやった
- http://www.adventar.org/calendars/198
- なんとか全ての日にちが埋まってよかったです(ありがとうございます)
- sugamasao.comをgithub pagesにした
- すぎゃーんの彼女botというのを作りました
今年の抱負
- ブログをもうちょっと書こう
- というか新しいテクノロジーとか触った時にきちんと所感を書くというのをしたほうが良い……
- 深刻な語彙力低下をなんとかするためにも
- コードももっと書いていかないと
- すぎゃーんの彼女作ってる場合じゃない!!!1
- 今年もどこかでトークできるように精進していきます
パーフェクトRubyから泣く泣く削った標準添付ライブラリ パーフェクトRuby Advent Calendar 2013(12日目)
なんとなく12日が空いていたので書いてみます*1。
このエントリは パーフェクトRuby Advent Calendar の12日目のエントリです。 前の日のエントリはイオリさん http://iori-o.github.io/blog/2013/12/11/perfect-ruby-2013-12-11/ でした。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (10件) を見る
パーフェクトRubyから泣く泣く削った標準添付ライブラリ
ページ数の都合で泣く泣く削ることになってしまった部分というのが多少なりともあります。その他にこれも載せたほうが良いんだけどページ数が(ryというのもあります。
そこで削ってしまったけど、本当はあると良かったなというのを紹介します。
IO#select
これはいわゆるselect(2)を提供してくれます。select(2)って何スカっていうとman select 2
すれば良いじゃないって感じなんですけど、たぶんIOオブジェクト(もっと言うとファイルディスクリプタかな)を待ち受けて、読み取り準備ができたオブジェクトを返すって感じですかね。
で?っていう
例えば、TCPServerのサンプルとかで使われてるので、こういう事例を見ると良いと思う。
ここのサンプルソースでTCPServerを使ったエコーサーバがある。
require "socket" gs = TCPServer.open(0) socks = [gs] addr = gs.addr addr.shift printf("server is on %s\n", addr.join(":")) while true nsock = select(socks) next if nsock == nil for s in nsock[0] if s == gs socks.push(s.accept) print(s, " is accepted\n") else if s.eof? print(s, " is gone\n") s.close socks.delete(s) else str = s.gets s.write(str) end end end end
これの nsock = select(socks)
ってところで使われている。実はKernel#selectはIO#selectと同じなので、単にselectとも書けるのだった。
ここでやってるのはTCPServerをopenして開いたsocketをIO#selectで待って、入力があったらその文字列をそのまま返却する(s.write(str)
のところ)というのをやってるわけですね。
ちなみに、上記のスクリプトを実行するとこんな感じで出力がある。
% ruby sample.rb server is on 51450:0.0.0.0:0.0.0.0
そうしたら、別のターミナルからおもむろに telnet localhost 51450*2 して、何か文字列を打ってみると動作を確認できます。
このIO#selectというのは配列の配列で返ってくるのでなかなかデータ構造を把握するのが大変なのですが、こういう低レイヤーっぽいものの動作を調べるのもなかなか楽しいですよね。
次のアドベンターは id:akiinyo さんです。本書のレビューでも助けて頂きました……!!
パーフェクトRuby Advent Calendar 2013(5日目)
なんとなく5日が空いていたので書いてみます。
このエントリは パーフェクトRuby Advent Calendar の5日目のエントリです。 前の日のエントリは http://d.hatena.ne.jp/zonu_exe/20131204/1386271407 でした*1。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (9件) を見る
パーフェクトRubyに載っていない便利クラス
パーフェクトRubyで組み込みクラスや標準添付ライブラリ等を説明しています。とはいえ、全てを網羅しているわけではありません。 そんな漏れているクラスのなかでもマル得情報として名高い(と勝手に思っている)クラスとしてTSortがあります。
このTSortは依存関係をイイカンジに解決してくれるトポロジカルソートっていうのを提供してくれる。
require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort #=> [3, 2, 1, 4]
依存という言葉を使っているけど、位置とか距離って言ったほうが正しい気もする。 tsortメソッド実行した結果を見るとわかるかもしれないけれど、3というのは1と2から参照されているので、先頭に並び替えられる。同じように、1は2と3を参照していうるので、2よりも後に来るという感じ。言葉で説明するのむずかしいですね。
実は
すごい知った風に紹介しましたけど、ainameさんのエントリ で知っただけでした。ぼくはそれまでこのクラスを知りませんでしたけど、なんとなく知っていると助かる可能性が微レ存な気がするので、使い方を覚えておいて損はしなそうだと思ってます。
次のアドベンターは
パーフェクトRuby執筆者でもある id:joker1007 さんです。どんなエントリになるのか、楽しみですね。
*1:12/4のエントリが書かれたようなので修正しました
JOJO'S BIZARRE ADVENT(URE) Calendar 2013 12/4
ジョジョベントカレンダー 12/4
ジョジョのアドベントカレンダーです。 前日は azusa-tomita さんでした (gistって画像も添付できたんですね……)。
「関係ないね」ってふうな顔をするんじゃあないッ!
読んだジョジョの本を紹介します。
恥知らずのパープルヘイズ
あまりに強すぎて倒せるイメージのつかないフーゴさんの話。フーゴが救済されて良い。
- 作者: 上遠野浩平,荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2011/09/16
- メディア: 単行本
- 購入: 22人 クリック: 1,009回
- この商品を含むブログ (92件) を見る
The Book
丈助とか億泰とかが出てくる四部の話。今読んだ中では一番おもしろい。
The Book jojo's bizarre adventure 4th another day (JUMP j BOOKS)
- 作者: 乙一,荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2011/12/19
- メディア: 新書
- 購入: 3人 クリック: 22回
- この商品を含むブログ (17件) を見る
JOJO'S BIZARRE ADVENTURE OVER HEAVEN
承太郎が焼いたDIOの手記を復元して読んでいくという話。DIOがひたすらママーって言っててツライ。
JOJO’S BIZARRE ADVENTURE OVER HEAVEN
- 作者: 西尾維新,荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2011/12/16
- メディア: 単行本
- 購入: 31人 クリック: 1,849回
- この商品を含むブログ (54件) を見る
その他
ジョジョじゃないんだけど、これは面白かった!!
死刑執行中脱獄進行中
これは荒木センセーが書いた短篇集っていうのかな?なんだけどサスペンスっぽい内容でとてもおもしろい。さらに岸辺露伴は動かないシリーズやデッドマンズQもあってオススメ。
- 作者: 荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2011/09/16
- メディア: 文庫
- 購入: 11人 クリック: 98回
- この商品を含むブログ (30件) を見る
最後に
このエントリを読んだ人は当然買ってると思うんですけど、JOJOVELLERは冗談じゃなくて本当に素晴らしい画集なのでもし、万が一買ってない人がいたらこいつはメチャ許さんよなぁぁぁと言われることうけあいですので、今すぐ買っておくと良いでしょう。
- 作者: 荒木飛呂彦
- 出版社/メーカー: 集英社
- 発売日: 2013/09/19
- メディア: コミック
- クリック: 1,650回
- この商品を含むブログ (36件) を見る
どうしても書かなくてはいけない宣伝
ジョジョと言えばジョセフ・ジョースターですし、ジョセフ・ジョースターと言えばリサリサですし、リサリサと言えばエイジャの赤石ですが、プログラミング言語界のエイジャの赤石と呼ばれるRubyの書籍について紹介しておきますのでよろしくお願いいたします( http://www.adventar.org/calendars/198 で感想を書くと良いです)。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (9件) を見る
パーフェクトRuby Advent Calendar 2013(1日目)
なんとなく初日が空いていたので書いてみます。
このエントリは パーフェクトRuby Advent Calendar の1日目のエントリです
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (8件) を見る
大変だったこと
だいたいのことはここらへんに書いてしまったのですが……。 企画を貰って書き始めた半年くらいはまだ楽しくやっていましたが、一年くらい経ってからはなかなかプレッシャーがあって大変でした。イベント出てる場合かー!遊んでる場合かー!みたいなのが心の隅にあって土日休んだ気がしませんでしたね。。。
ところでこんな話がある
書籍のページ数と価格帯ってある程度連動しているらしく、ページ数が増えてしまうと価格が上がってしまうのですね。今回のパーフェクトRubyは640ページくらいあるんですけど、600ページ超えるともう一段階値段があがってしまうかも〜というところを、編集者さんががんばってくれたんですね。
はい
ちなみにパーフェクトRubyにテストの書いてなくてパーフェクトじゃないですね〜みたいな感想があって、確かに僕もそう思うんですけど、もともとは15章、16章はRSpecでテスト書いていたんですね。だがしかし、やんごとなき事情により爆発四散して無くなってしまったのでした*1。。。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (8件) を見る
次のアドベンターは id:troter さんです
追記
あまり知られていないかもしれませんが、サンプルコードは以下からDLできます
RubyMineでRSpecが動かない場合
rake で実行するspecタスクは動くんだけど rspec を実行しようとするとエラーが出る
こんな感じ
RSpec support is disabled because 'rspec-rails' gem or RSpec Rails plugin are missing. Install and activate gem at first
ちなみに環境はこう
- RubyMine 5.4.3.2.1
- Ruby 2.0.0
で、当然Gemfileにはrspec-railsとかは書いてあってインストールされているにも関わらずこのエラーが出る。RSpec Rails pluginというのはpluginsリストにはない。
どうすれば良いのか
なんか不具合っぽいんだけど、実行するRubyのグローバル環境にrspec-railsが入っていれば動くもよう。
ようするに gem install rspec-rails
すると良い。
gitで現在のブランチ名を取得する
一覧の情報はいらなくて、現在のブランチ名だけが欲しい
ようするにシェルスクリプトとかで扱うときに git branch
の結果ではなく、そのものずばりカレントブランチ名を取得したい。
いくらなんでもそういうインターフェイスあるでしょーと思ったらgit rev-parseで取得できるようだ。
sugamasao@GRAM% git rev-parse --abbrev-ref HEAD master sugamasao@GRAM% git checkout -b test Switched to a new branch 'test' sugamasao@GRAM% git rev-parse --abbrev-ref HEAD test sugamasao@GRAM% git checkout master Switched to branch 'master' sugamasao@GRAM% git rev-parse --abbrev-ref HEAD master
おー取れてるぞ!!
追記(どうしても書かざるをえない宣伝)
gitの使い方よりRubyの使い方を知りたいワイという人にはこの書籍がオススメです。
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (7件) を見る