Code can be an art.

Creative Commons in Seoul의 코드잼. Distributed "Code can be an art."입니다. ㅋㅋ.

처음 하나는 "erl -name s1 -noshell -eval 'ccs_jam:seed()"로 실행하고 두 번째 부터는 "erl -name s2 -noshell -eval 'ccs_jam:join(s1@juno.local)'" 식으로 이름을 바꾸어서 실행하면 때를 지어 돌아가며 "Code can be an art."를 색색으로 노래합니다.




-module(ccs_jam).
-export([seed/0, join/1]).

next_word(Word) ->
case Word of
"Code" ->
"can";
"can" ->
"be";
"be" ->
"an";
"an" ->
"art";
"art" ->
".";
"." ->
"Code"
end.

seed() ->
Seed = spawn(fun() -> loop() end),
pg2:create(ccs_jam),
pg2:join(ccs_jam, Seed),
Seed ! ".".

join(Node) ->
net_kernel:connect_node(Node),
NewMember = spawn(fun() -> loop() end),
case pg2:join(ccs_jam, NewMember) of
{error, _} ->
timer:sleep(1000),
pg2:join(ccs_jam, NewMember);
ok ->
ok
end.

loop() ->
receive
Word ->
NextWord = next_word(Word),
io:format("\e[~wm~s ", [29 + random:uniform(10), NextWord]),
timer:sleep(100),
Members = pg2:get_members(ccs_jam),
lists:nth(random:uniform(length(Members)), Members) ! NextWord,
loop()
end.

by 만성피로 | 2007/05/19 03:51 | Erlang | 트랙백 | 덧글(0)

트랙백 주소 : http://colus.egloos.com/tb/3421372
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶