muzigram

山椒は小粒でもピリリと辛い

2014/08/31

yapc::asia 参加して得た希望と闇 #yapcasia

一人のエンジニアが鬱屈している話


自分はperlエンジニアではないので、yapcはそれ以外の講演を聞いたり、
自身のモチベーション回復にもっぱら当てています。
今年は上半期、ほぼプロジェクト炎上の対策に追われていたのでバーンアウト感を払拭したいというのもあります。
  • 完璧を求めるよりもコード書け
  • 作りたいものを作る
  • 自分がほしい物を作っていく
ってのはまぁ、そのとおりぐうのねも出ないんだけど、
自分にそれを置き換えると、今何を書くべきでなにから始めたらよいのかというのが
ぱっと浮かばない。というのをここ数年繰り返している。
年齢が近くてすげー人のすげー講演とか聞いて消耗したりとかね。あれ、私だけ!?

これをしたいというものを見つけなければならない。
物事を大きく変えられる銀の弾丸は存在せず、
とにかく小さなものから始めるしかないんだろう。

悩むよりも書け
モチベーションにはなっている。なっているが、どのように行動していくべきか
まだ、わからないでいる。

結論

・一歩ずつやるしかない。
・自分がどうあるべきかわからないのでアドバイスくれる人飲みましょう。日本酒の美味しい店なら紹介できます。
・あと、優秀なエンジニアは結婚している率が高まっている気がする。焦燥感。
(結婚していない人が優秀ではない!といっているわけではありません
・スモールスタート、スモールコミット

ま、それはおいておくとして
以下、いろいろと感想。
http://yapcasia.org/2014/talk/show/df196eac-fb65-11e3-b7e8-e4a96aeab6a4

https://twitter.com/studio3104さんは元同僚なのでココらへんの話は色々話してもらった内容の総集編ッて感じがしました。
注目すべき点は彼が持つ危機感を彼はどのように解消していっているか。

Go For Perl Mongers

スライド
Goの話。
Goのはまりポイント、GoならではのGoroutineとは何者か。とかGoとオブジェクト指向はちょいとちがう
的な話が明快にまとめられていて素晴らしいです。
クイズNow!
どのようにhttp://quiznow.me/community/を作ったかの話。
主にチームビルディングのお話。デザイナーとプログラマーの齟齬をなくすための仕掛けなど。
DeNAさんはやるべきことを一つ一つしっかりやっている印象。
Gifアニメで動きを共有とかはやったことあるけど、そっか、動画でいいんだよな。とか

ライブコーディング 2014
人がコーディングしてる様子ってなんでこんなに面白いんだろう
(もちろん、トークが素晴らしいってのもあるんですけど)
緊張の中でもしっかり、機能を実装していく様子はさすが。
「代わりに、思っていることを話していきます、あ、いまここをクリックします」はずるい

ウェッブエンジニアのローレベルプログラミング
コンピュータってどうやって動いてんだっけ?みたいな疑問を追求していくようなセッション
テンポがよく、スライドもみやすく、おすすめ
電子工学やっていた頃を思い出した。

開発合宿!!!! 合宿をする上での、段取り8割な話や
どうやって、モチベーション維持するかなど
いつか開発合宿主催してみたい。

Dockerで遊んでみよっかー Dockerについてのひと通り、ナイス資料
Dockerってなんなのという疑問が解消できる。
COPYの時の罠みたいな落とし穴にも言及されている

半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情(5.6対応)

圧倒的トーク力
過去のPHPで笑いを取りつつも、さらっと現代的なPHPを紹介していて、
単なるお笑いだけではなく、きっちりと抑えるところを抑えているのが今回のベストトーク賞たる所以だと思います。
地域.pmミートアップ 2014
_人人人人人人人人人人人人人_
> 千葉.pmは10/11予定です <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

モバイルアプリとAPIのありかたを考える2014
技術的に今の仕事と近いので気になった話。
ユーザーにどのような体験を与えるか、そのために、技術が足かせになってはいけない的なお話など。
MBaaS http://matome.naver.jp/odai/2138620499863058801っていうことばを知れたり
http://www.jsonrpc.org/specificationという規格を知ったりと、気付きがある。
jsonrpcはGoでhttp://golang.org/pkg/net/rpc/jsonrpc/というのがあったので、後で実装してみようとおもう。
そういえば、@yosuke_furukawaさんがjsonrpcやらいっちょすかん!と言っていたのでそこら辺の話をしてくれるのかもしれない。

あやかNow! 池澤あやかさんはガチだった。しっかりLTだった。
Mobile Application Development for Perl Mongers [ninjinkun x gfx]
半分くらいしか聞けていない。Gitの扱いとか、テストとか まっとうなアプリ開発の話。あとで資料を見よう…
そんなにビッグでもないデータ処理手法の話

すさまじい情報量のマシンガントーク。20分では足りなかったのでは…。
キーノート 実は一番もやっとしている。
この話を聞いて、自分の中でどうやって消化すればよいのかわからない。 いろいろなものを作って楽しめている人と
自分の違いはなんだろうとか考えている。闇。

考えていくうちに自分の現状や仕事が趣味、仕事のレイヤーでどの位置なのかもよくわからなくなってくる。
説明が難しい。
今の自分は仕事としてのプログラムを楽しめてない気がする。
30を超えて何を行っているんだ、死ぬしかない。('A`)

2014/08/19

Gosublimeのメモ

Gosublimeインストールした後にやること

Ctrl+Shift+PでGoSublime User Setting
設定例
{
    "env": {
    	"GOROOT": "/opt/boxen/homebrew/Cellar/go/1.3/libexec",
        "GOPATH": "/Users/mogetta/Documents/go"
    }
}
GoSublimeのビルドが失敗する場合は
  • GOROOTのPathを確認
  • GOPATHのPathを確認
  • Goのバージョンを確認

ビルド

Ctrl + 9で9oを起動
go run main.go
等を行うと、由なに処理を実行する。

ループ処理なアプリを切る

9o起動後にtskill
で、終了する処理を選択。

2014/08/14

hikarie.goに参加してきた話。revelがどのようにファイル更新によるリロードを実現しているか #golangjp #hikarie_go

先日hikarie.go #2 http://connpass.com/event/7914/ に参加してきました。 hikarie.goで使用されていた、ハンズオン形式で分かりやすくい資料はこちら
https://github.com/yosuke-furukawa/golang-study @yosuke_furukawaさん++!

で、その中でどういう質問だったか曖昧なのですが、
要点はファイルを更新した際に、コンパイルしなおして、Webを再表示するみたいなことはできるのか?
(Gae/Goだとできてたっけ?曖昧)という旨の話があって、revelはそれやってたなーという話

revelがどのようにファイル更新によるリロードを実現しているか。


フルスタックなWebふれーむわーくrevel
https://github.com/revel

revelは本体とcmdが分かれている。
https://github.com/revel/cmd

run.go

https://github.com/revel/cmd/blob/master/revel/run.go
を見てみると、watchモードだったら
harness.NewHarness().Run() // Never returns.
みたいな記述があるので、revel.harness.NewHarnessを見に行く。

Harness.go

https://github.com/revel/revel/blob/master/harness/harness.go
NewHarness は *Harness を返してくる。
同ファイル内にてメソッドを定義している。
https://github.com/revel/revel/blob/master/harness/harness.go#L153
func (h *Harness) Run()
で、Run()内で以下のような、Pathを渡している箇所がある。
paths = append(paths, revel.CodePaths...)
 watcher = revel.NewWatcher()
 watcher.Listen(h, paths...)
次はrevel.NewWatcher()を追っていく

watcher.go

https://github.com/revel/revel/blob/master/watcher.go

func (w *Watcher) Listen(listener Listener, roots ...string) {
なるほど、WatcherはListenerと監視するディレクトリを受け取るようだ。
fsnotify.NewWatcher()がいかにもなので、先にこれを見てみよう↓

github.com/howeyc/fsnotify

https://github.com/howeyc/fsnotify
と、ここまで来て、
File system notification for Go というライブラリにたどり着く
なるほど。ファイルのを監視して通知してくれるんやな。
で、今度はファイルシステムの変更があったら何をするかという話になるんだけど、
Listener型はRefresh()を持っていればListenerと見なせる。という形になっている。
Harness.goでWatcherに自分自身を渡しているのでHarness.goのRefresh()が実行される寸法
type Listener interface {
 // Refresh is invoked by the watcher on relevant filesystem events.
 // If the listener returns an error, it is served to the user on the current request.
 Refresh() *Error
}

harness.go

https://github.com/revel/revel/blob/master/harness/harness.go Harnessには確かにRefreshというメソッドが定義してある。そして、revel.TRACE.Println("Rebuild")
って記述もあるので、そろそろゴールっぽい。
// Rebuild the Revel application and run it on the given port.
func (h *Harness) Refresh() (err *revel.Error) {

build.go

https://github.com/revel/revel/blob/master/harness/build.go ここで、main.goやroutes.goの再構成が行われている!
// GENERATED CODE - DO NOT EDIT
と書かれたテンプレートも同ファイルに記述してある。


と、若干駆け足だったけど、revelがどんな感じで監視&更新してるかをざっと見てみました。
github.com/howeyc/fsnotifyをなにかのツールで使ってみたい欲があります。

あと、Goのコードはルールさえ覚えておけば追いやすい感があります。 結論が出てない感じですが、眠くなってしまう前にBlogに投下!