笑いながらコードを書く。

vimから出たくないフロントエンドエンジニアの備忘録的な何か。

面白法人カヤックを退職しました。

本日が面白法人カヤックの社員として最終日でした。

// ちょっと前から有給消化だったので席があるのが今日までということです。

2010年からちょうど2年間くらい、ちょっと短かったなぁと思います。

 

2年前友人の誕生パーティの席でデザイン王子と知り合い

「フロント足りないから受けてみてくださいよ」

と軽いノリで言われ、ちょうど転職を考えていた時期だったので説明会などにいったのは良い思い出です。

// 最終面接前の連絡が1ヶ月以上なかったのも良い思い出ですね。
// 「ああ、落ちたなー」
// と思って確認の連絡したら
// 「受かってるので面接来てください!」
// とかどうなってたんでしょうね。というか自分もよく1ヶ月も待ったなぁ。
// 2年前の自分に「お前カヤック2年で辞めるよ」とか言われてたらどう思っただろうね。

 

職場ではフロントをメインでやり、

・JSでテスト書いたり
・設計しまくったり
・ライブラリとかツールとか案件に合わせて作りまくったり
・そうそうVimmerになりました
・ついでにVimのプラグイン作ったり
・縁あって登壇させてもらったり
本を書く手伝いをしたり

 

などなど。
大変充実してた2年間でした。

複数の案件を抱えてた状態で、Compassのコマンド叩きまくるのが面倒になってVimプラグイン書いて社内のチャットに流したら何故か仕事中に改善することになったりとか割とフリーダムにやらせてもらってました。

部署のリーダーが最適化魔神だったこともあり色々ツール作ったりするのすごい楽しかったです。本当に有難うございます。

 もとから誰かのヘルプとか、ちょっとした最適化とか好きでプログラマーやってるところがありましたが、カヤックでの2年間の経験で完全に自分の方向が定まったと思ってます。

 

------------------------------------------------------------------------------------------------------

 

心残りといえば受諾開発、キャンペーン系の制作が主だったので作ったもののほとんどがWebに残ってないことかな・・・

まぁでもそのお陰でなんか残そうという意識になりライブラリ書いたりプラグイン書いたりしようって気になったんじゃないかな。と今更思ってます。

ああ、無情。

 

------------------------------------------------------------------------------------------------------

 

そんなわけで次は長く残るサービスとかやりたいなぁと思って転職します。

フロントエンドをメインに色々やってく感じ(になるはず)です。

RubyとかPythonとかObjective-Cとかチョットずつでも関わっていきたいなぁと。
(やっぱりJavaScriptが一番好きだけどな!今のところは!)

 

それでは次も自分らしくやっていけたらいいと思います。

 

------------------------------------------------------------------------------------------------------

 

とりあえずビール飲みたい。

Read.jsを更新した

https://github.com/AtsushiM/Read.js

 

最近Rubyの勉強ばっかりしててあんまり自分のプロダクト作れてないけどRead.jsを更新した。

run(path/to/file)でjsを非同期読込して実行したりとかファイル圧縮したりとか。
// なんか仕事でやってた案件の影響でやたらとミニファイ(+手動ミニファイ)とかやったからつい・・・

 

あと勉強がてらcompilerをRubyで書いてみた。

最初

「書き方がRubyっぽくなくて黒魔術になってる」

と言われ、教えてもらったりした。

 

次、Rubyで何か作ろう。

Closure Compilerのexternsでプロパティを圧縮しないようにする設定方法

ドキュメントとかに書いてなくてデフォルトで設定されるextern見ててわかった。

// externs
Object.prototype.hogehoge;

なるほどなーって感じ。

js同期読み込みライブラリを作ってみた。

■Read.js
https://github.com/AtsushiM/Read.js
https://github.com/AtsushiM/unite-read-js

 

javascriptの同期読み込みライブラリを作ってみた。
仕組みとしては

1.XMLHttpRequestで同期読み込み(xhr.openじに第三引数にfalseを渡す)
2.読み込み完了後scriptタグを生成してxhr.responseTextを突っ込む
3.jsが同期的に実行される

となってる。

unite-read-jsに追加してあるタスク、'unite-read-html'を使用すればhtmlに対してscriptタグを埋め込むので多少デバッグしやすくなるかも。

 

開発するときにそもそも最終的にjs結合するのわかってるし
RequireJS使うほど大きいプロジェクトでもねぇし
他の言語のincludeとかrequireとかみたいに気軽に使える奴が欲しいなー

という自分と友人の要望で開発してみた。

 

使い方の注意点としては

・read('hogehoge', 'path/to/file')の上には処理がないほうが好ましい。gruntタスクを使用して結合した場合、実行順序が変わってしまうのでバグの原因になる
・gruntタスク使わないとデバッグしにくい。(jsファイルを直接読み込んでるわけではないので)

 

しばらくいじってみる。

ライブラリをCoffeeScriptで書きなおしてみた時の話。

Composite.jsをCoffeeScriptで書きなおしてみた

https://github.com/AtsushiM/Composite.js/blob/master/js/src/main.coffee

 

結構いい勉強になった。

よくCoffeeScriptやってからRubyやったらいいとか言われたけど、あえてRubyちょっとやってみてからCoffeeScriptに行くとすごいすんなりかけた。

Coffee美味しいです。

Closure LibraryのdispatchEvent時に値を渡す方法について

goog.events.listenで登録したイベントに、値を渡したい。
でもドキュメント読んでも引数で渡す設定とかは無さそうだしどうやんねん!

となったので調べたらカスタムイベントを作ればいいっぽい。

// CustomEvent
goog.provide('hogehoge.CustomEvent');
goog.require('goog.events.Event');

hogehoge.CustomEvent = function(type, arg) { // type: イベント名, arg: 渡したい値
    this.type = type;
    this.arg = arg;
};

goog.inherits(hogehoge.CustomEvent, goog.events.Event);

// dispatchEventで値を渡したいとき
goog.events.dispatchEvent( instance, // イベント発火させたい対象 new hogehoge.CustomEvent('filterChange', {test: 'test'}) );

// 受け取るとき
goog.events.listen(
instance,
'filterChange',
function(e) {
// e.arg == {test: 'test'}
}
);

なるほど。

coffeescriptで逆順で配列をループさせたい時

最近Ruby始めてみたらCoffeescriptがすごく書きやすくなった。

いい傾向だなーと思いながらライブラリを書き直していたですが、
forの逆ループのさせ方がわからずにちょっと詰まる。

色々試してみたけど展開後がなんかしっくりこないので仕方なしに

i = array.length
while i--
    #hogehoge

みたいな感じでひとまず実装してたら友人が教えてくれた。

for val, i in array by -1
    #hogehoge

うん、しっくり来る。
CoffeeもRubyも面白いなー