Hatena::ブログ(Diary)

Ehrenの日記 このページをアンテナに追加

2009-12-31

2009年の振り返り

関連

2009年の目標・計画 - Ehrenの日記

目標の達成度

○ なるべくソースを書くようにしたい。

技術書の一人読書会を何回か行う。

× 早く起きる習慣をつける

× 毎日何かHatenaDiaryに書き込む

× 本を週に一冊は読む

△ 自分が一番大切にしたいことは何なのかを見極めたい。

いくつか目標にしたことすら忘れていたことが。。

来年はこまめに目標修正&振り返りをしたいところです。

今年の良かったところ

動くサービスが作れたのが個人的に実は満足しています。来年もなるべく人の役にたたなそうなものを作りたいな。

id:tannz,id:hkhumanoidSICP Liteを立ち上げられたのが今年一番良かったことです。

この勉強会を通じて自分も成長できたと信じたいところです。

また、Python系の集まりに参加するようになり、たくさんの優れたエンジニアに会えました。

とても充実した一年だったと思います

今後

今興味のある、GAE(NoSQL),GUI,LISP,並行処理(Erlang含む)をやっていきたいところ。

ただし、GUIをのぞくすべてが直接今の仕事に関わらないんですよね〜。

SICP Lite #9 に参加

SICP Lite #9 : ATNDに参加しました。

内容

2章は一応今回で終わりになりました。次回は3章を読み始めることになります。

が、2.4,2.5は個人的に興味ありなので個別に読むことにします。

SchemeOOPの話などが出ていてなかなか面白そうです。

Erlang 基礎勉強会に参加させていただいてきた

2009/12/28に第一回 Erlang 基礎勉強会 : ATNDに参加させて頂いてきました。

主催のid:cooldaemonさんありがとうございました。

Erlangの使われ方、逐次処理での勘所をcooldaemonさんに教えていただけてかなり勉強になりました。

軽くまとめておきます。

主な内容

↓cooldaemonさんのスライドに従って進行しました。

Basic Study for Erlang #1

手続き型言語のプログラム経験を、ある程度お持ちの方を対象に Erlang の基礎勉強会を開きます。
第一回は、疎かにされがちなリスト処理の概念などを一緒に考えていく事を検討しています。

スライドに出てくるサンプルは↓

http://github.com/cooldaemon/BasicStudyForErlang

※演習の答えもあるので注意!


雑多にとったメモ


スライドでの実習課題

一応全部解いてみた。一応仕様は満たしてるけど細かいところはまだ実装しきれてません。

-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).


参加者として反省点

  • 環境の設定は必要
    • MacではPC名が127.0.0.1に割り振られていないので、「JCLで他ノードシェルにリモート接続」の実習に手間取り時間を圧迫してしまった。
    • 参加前に/etc/hostsで設定して置く必要があった。
  • 参加者が思いついたタイミングで細かくcooldaemonさんに質問したけど、なるべく節目でした方が良かった。進行が悪くなるので。

まとめ

※同じ内容で、何回か行なう予定です

とのことなので、興味のある方は是非参加するのをおすすめします。

参加する前にLisp,Haskellなど(JavaScriptクロージャまで学ぶでも可)を流し読みしておくとさらに理解が深まると思います。


演習の参考