すがブロ

sugamasaoのhatenablogだよ

毎年忘年会に参加し続けた結果www

執筆する機会を得ることができまして、「Webアプリエンジニア養成読本」という本が近日発売する運びとなりました(ごめんね、ごめんね、タイトルは釣りです……)。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

著者紹介の文章、テンションおかしくて胸が熱くなります。

この本ってどんな本なの

今までWebアプリを書いたことがない人向けです。例えば、学校でプログラミング言語自体はならったけどWebアプリ作ったことないわーみたいな人とか。

正直な所、この本をもってプログラミング言語が理解できるような深い内容ではないです。まずは写経して、「なるほど、わからん」という部分はその他の入門書やWebサイトなどで補完してもらうという形です。

その代わり、HTTPの通信の仕組みやサーバーを構築するための基礎知識や運用監視についてまで、抑えておくと良い点が揃っていると思います。ようするに、Webアプリを作りたい!!だがどうすれば?という時に、この本に書かれている要素を頼りにしてより深く調べて行ってもらえると良いのかなと思います。

また、本の出版イベントも行う予定ですので、もし興味のある方はいらしてください。

三行で執筆経緯を

  • ハチイチ忘年会に毎年参加してたら仲の良い人ができた
  • 毎年朝までいるもんで幹事をやることに
  • そんなこんなでゆーすけべーさんからお声がけ頂くことに

所感

履歴を見ると、11/14に声を掛けてもらって、その後編集者さんと顔合わせや構成についての意識合わせをしたのが11月末くらいです。なので、2〜3ヶ月で執筆や校正をした感じですね。 こういうスプリント戦は(書くのが決まれば)楽で良いです……*1

執筆陣のスピード感が非常に良く、レスポンスの良さだったり締め切りにきちんと合わせてくるであったり、なんというか息のあった良いチームでした。

Webアプリを作ろうという2章の構成ではPHP編とRuby*2という別の言語それぞれ同じような題材を扱うという話なんですけど、PHP編を書いてる @uzulla さんが超絶文章書きまくってて*3本当にスゴいと思いました。スゴいんですよ。いやースゴい。

合わせて読みたい:『Webアプリエンジニア養成読本』を共著で執筆しました+イベントやります!

*1:パーフェクトRubyは2年近くかかったので

*2:あとPerlもちょっとある

*3:予定の分量の3倍とか

ささたつ会議(あるいは新年会)に行ってきました

去る1/26、ささたつ会議が行われました。

f:id:seiunsky:20140126174223j:plain

ノリで参加したのですが、ワイワイしながら料理を作るというリア充臭あふれるイベントでした。

記憶に残っているメモ

  • 2kgあった鶏肉が一瞬で無くなった
  • 酒もドンドンなくなっていく
  • すぎゃーんさんの将来が心配です
    • 一流の人間は何をやっても*1一流になるのがわかったし心配いらないよ
  • 料理も酒もうまくてヤバい感じだった
    • 料金も2000円くらい?でコスパ厨歓喜
  • というか手作り料理って滅多に食べないので感動もひとしおでしたね

f:id:seiunsky:20140126202135j:plain

写真で振り返るささたつ会議

写真NGの人もいるかもしれないので、とりあえず大丈夫そうな人だけ写ってるヤツを乗っけてみます。

これはしめ鯖という食べ物で、とてもおいしい

f:id:seiunsky:20140126182412j:plain

これは福井県民が涙を流しながら食べるという逸話のあるおあげ。おいしい

f:id:seiunsky:20140126184324j:plain

「たーっちゃん」って呼ばれて照れてる世界一の幸せ者

f:id:seiunsky:20140126191223j:plain

いわゆる唐揚げと呼ばれる食べ物なのですが、皿がテーブルに置かれた瞬間に食べられしまう

f:id:seiunsky:20140126203231j:plain

ラーメン屋のポーズ

f:id:seiunsky:20140126203056j:plain

どあきちゃん(CV: @do_aki)

f:id:seiunsky:20140126205759j:plain

イケメンはネギを持ってもイケメンであると暗に自慢している図

f:id:seiunsky:20140126215219j:plain

ちなみに、世界一の幸せ者タスキは @kamipo に継承されました

唐揚げの作り方を学ぶことは出来ませんでしたが、とても楽しかったですし、料理も美味しかったです。料理を作ってくれた方、お酒を持ってきてくれた方、企画・実行をしてくれたささたつさん、ありがとうございます!!1

関連リンク:ささたつ会議(新年会?) - Togetterまとめ

*1:ドルヲタでも

2013年をまとめる

まとめようと思ったのですが

ブログを読み返してこの一年を振り返ろうと思いましたが、ぜんぜん書いてなくて何も振り返られないですね。最悪です。

なんとなくがんばってまとめると

今年の抱負

  • ブログをもうちょっと書こう
    • というか新しいテクノロジーとか触った時にきちんと所感を書くというのをしたほうが良い……
    • 深刻な語彙力低下をなんとかするためにも
  • コードももっと書いていかないと
    • すぎゃーんの彼女作ってる場合じゃない!!!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 (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

パーフェクト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 さんです。本書のレビューでも助けて頂きました……!!

*1:11日を書いたイオリさんに指名も受けてしまいましたし

*2:ポート番号は実行のたびに変わる

パーフェクトRuby Advent Calendar 2013(5日目)

なんとなく5日が空いていたので書いてみます。

このエントリは パーフェクトRuby Advent Calendar の5日目のエントリです。 前の日のエントリは http://d.hatena.ne.jp/zonu_exe/20131204/1386271407 でした*1

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

パーフェクト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って画像も添付できたんですね……)。

「関係ないね」ってふうな顔をするんじゃあないッ!

読んだジョジョの本を紹介します。

恥知らずのパープルヘイズ

あまりに強すぎて倒せるイメージのつかないフーゴさんの話。フーゴが救済されて良い。

恥知らずのパープルヘイズ ?ジョジョの奇妙な冒険より?

恥知らずのパープルヘイズ ?ジョジョの奇妙な冒険より?

The Book

丈助とか億泰とかが出てくる四部の話。今読んだ中では一番おもしろい。

The Book jojo's bizarre adventure 4th another day (JUMP j BOOKS)

The Book jojo's bizarre adventure 4th another day (JUMP j BOOKS)

JOJO'S BIZARRE ADVENTURE OVER HEAVEN

承太郎が焼いたDIOの手記を復元して読んでいくという話。DIOがひたすらママーって言っててツライ。

JOJO’S BIZARRE ADVENTURE OVER HEAVEN

JOJO’S BIZARRE ADVENTURE OVER HEAVEN

その他

ジョジョじゃないんだけど、これは面白かった!!

死刑執行中脱獄進行中

これは荒木センセーが書いた短篇集っていうのかな?なんだけどサスペンスっぽい内容でとてもおもしろい。さらに岸辺露伴は動かないシリーズやデッドマンズQもあってオススメ。

死刑執行中脱獄進行中 (集英社文庫 あ 41-54)

死刑執行中脱獄進行中 (集英社文庫 あ 41-54)

最後に

このエントリを読んだ人は当然買ってると思うんですけど、JOJOVELLERは冗談じゃなくて本当に素晴らしい画集なのでもし、万が一買ってない人がいたらこいつはメチャ許さんよなぁぁぁと言われることうけあいですので、今すぐ買っておくと良いでしょう。

JOJOVELLER完全限定版 (マルチメディア)

JOJOVELLER完全限定版 (マルチメディア)

どうしても書かなくてはいけない宣伝

ジョジョと言えばジョセフ・ジョースターですし、ジョセフ・ジョースターと言えばリサリサですし、リサリサと言えばエイジャの赤石ですが、プログラミング言語界のエイジャの赤石と呼ばれるRubyの書籍について紹介しておきますのでよろしくお願いいたします( http://www.adventar.org/calendars/198 で感想を書くと良いです)。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby Advent Calendar 2013(1日目)

なんとなく初日が空いていたので書いてみます。

このエントリは パーフェクトRuby Advent Calendar の1日目のエントリです

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

大変だったこと

だいたいのことはここらへんに書いてしまったのですが……。 企画を貰って書き始めた半年くらいはまだ楽しくやっていましたが、一年くらい経ってからはなかなかプレッシャーがあって大変でした。イベント出てる場合かー!遊んでる場合かー!みたいなのが心の隅にあって土日休んだ気がしませんでしたね。。。

ところでこんな話がある

書籍のページ数と価格帯ってある程度連動しているらしく、ページ数が増えてしまうと価格が上がってしまうのですね。今回のパーフェクトRubyは640ページくらいあるんですけど、600ページ超えるともう一段階値段があがってしまうかも〜というところを、編集者さんががんばってくれたんですね。

はい

ちなみにパーフェクトRubyにテストの書いてなくてパーフェクトじゃないですね〜みたいな感想があって、確かに僕もそう思うんですけど、もともとは15章、16章はRSpecでテスト書いていたんですね。だがしかし、やんごとなき事情により爆発四散して無くなってしまったのでした*1。。。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

次のアドベンターは id:troter さんです

追記

あまり知られていないかもしれませんが、サンプルコードは以下からDLできます

*1:実際の所、Rubyのコードの説明をしつつ、テストを書いていくとかなりわかりにくいので、結果的に読みやすくなったという側面はあります