2009-12-31
2009年の振り返り
関連
目標の達成度
○ なるべくソースを書くようにしたい。
× 早く起きる習慣をつける
× 毎日何かHatenaDiaryに書き込む
× 本を週に一冊は読む
△ 自分が一番大切にしたいことは何なのかを見極めたい。
いくつか目標にしたことすら忘れていたことが。。
来年はこまめに目標修正&振り返りをしたいところです。
今年の良かったところ
動くサービスが作れたのが個人的に実は満足しています。来年もなるべく人の役にたたなそうなものを作りたいな。
- ATNDの各イベントごとのモテ度を計算するグリモンの機能強化(お節介的な意味で) - Ehrenの日記
- ATNDユーザー毎のモテ度を取得するAPIをGoogle App Engineで作った(1) - Ehrenの日記
id:tannz,id:hkhumanoidとSICP Liteを立ち上げられたのが今年一番良かったことです。
この勉強会を通じて自分も成長できたと信じたいところです。
また、Python系の集まりに参加するようになり、たくさんの優れたエンジニアに会えました。
とても充実した一年だったと思います
今後
今興味のある、GAE(NoSQL),GUI,LISP,並行処理(Erlang含む)をやっていきたいところ。
ただし、GUIをのぞくすべてが直接今の仕事に関わらないんですよね〜。
SICP Lite #9 に参加
SICP, SCHEME, Lisp, sicp-lite, イベント
SICP Lite #9 : ATNDに参加しました。
内容
2章は一応今回で終わりになりました。次回は3章を読み始めることになります。
が、2.4,2.5は個人的に興味ありなので個別に読むことにします。
Erlang 基礎勉強会に参加させていただいてきた
2009/12/28に第一回 Erlang 基礎勉強会 : ATNDに参加させて頂いてきました。
主催のid:cooldaemonさんありがとうございました。
Erlangの使われ方、逐次処理での勘所をcooldaemonさんに教えていただけてかなり勉強になりました。
軽くまとめておきます。
主な内容
↓cooldaemonさんのスライドに従って進行しました。
手続き型言語のプログラム経験を、ある程度お持ちの方を対象に Erlang の基礎勉強会を開きます。 第一回は、疎かにされがちなリスト処理の概念などを一緒に考えていく事を検討しています。
スライドに出てくるサンプルは↓
http://github.com/cooldaemon/BasicStudyForErlang
※演習の答えもあるので注意!
雑多にとったメモ
- ErlangとOTPはほぼ不可分。OTPを行うための言語と考えてよい。
- Erlangはノード間通信をTCP/IPで行う。(UDPのモジュールもあるとのこと)
- cooldaemonさんによるKAIの解説記事。未チェックでした。
- erlコマンドはノード,シェルを立ち上げている
- 1ノード = 1VM
- WindowsのコマンドプロンプトからJCLモードに入ろうとしても入れない。(Ctr+Gはビープ音に割り当てられているため)
- JCLを使うときはerl.exeを実行するべき
スライドでの実習課題
一応全部解いてみた。一応仕様は満たしてるけど細かいところはまだ実装しきれてません。
-module(test). %% Exported Functions -export([seq/2,seq/3]). -export([foldl/3,foldr/3]). -export([filterl/2,filterr/2]). % Include files -include_lib("eunit/include/eunit.hrl"). %% -------------------------------------------------------------------- %% Test Functions %% -------------------------------------------------------------------- seq_test_() -> [ ?_assertEqual(seq(1,10),lists:seq(1,10)) ]. foldl_test_() -> [ ?_assertEqual(foldl(fun(E,AccIn) -> AccIn - E end, 1, [2,3,4]),-8) ]. foldr_test_() -> [ ?_assertEqual(foldr(fun(E,AccIn) -> AccIn - E end, 4, [1,2,3]),-2) ]. filterl_test_() -> [ ?_assertEqual(filterl(fun(A)-> (A rem 2) =:= 1 end,[1,2,3,4]),[1,3]) ]. filterr_test_() -> [ ?_assertEqual(filterr(fun(A)-> (A rem 2) =:= 1 end,[1,2,3,4]),[1,3]) ]. % seq/2 seq(X,Y) when X =< Y -> seq(X,Y,1); seq(X,_Y) when X =:= (_Y + 1) -> []. % seq/3 seq(X,Y,Z) when X =< Y -> [X|seq(X+Z,Y,Z)]; seq(X, _Y, _Z) when X =< (_Y + _Z) -> []. % foldl foldl(_F, Acc, []) -> Acc; foldl(F, Acc, [X|Xs]) -> foldl(F, F(X, Acc), Xs). % foldr foldr(_F,Acc,[]) -> Acc; foldr(F,Acc,[X|Xs]) -> F(X,foldr(F, Acc, Xs)). % lists:filter/2 を foldlで定義 filterl(F,L) -> lists:reverse( foldl( fun(E,AccIn) -> case F(E) of true -> [E|AccIn]; false -> AccIn end end , [], L)). % lists:filter/2 を foldrで定義 filterr(F,L) -> foldr( fun(E,AccIn) -> case F(E) of true -> [E|AccIn]; false -> AccIn end end , [], L).
参加者として反省点
- 環境の設定は必要
- 参加者が思いついたタイミングで細かくcooldaemonさんに質問したけど、なるべく節目でした方が良かった。進行が悪くなるので。
まとめ
※同じ内容で、何回か行なう予定です
とのことなので、興味のある方は是非参加するのをおすすめします。
参加する前にLisp,Haskellなど(JavaScriptでクロージャまで学ぶでも可)を流し読みしておくとさらに理解が深まると思います。
