openwengo on Debian GNU/Linux etch
openwengo を試したみたので書いておきます。
この情報は 2007-08-17 時点のものです。
openwengo のインストール
Debian 用のパッケージが存在するのでそれを使用します。DebianUbuntuPackages - OpenWengo - Trac
/etc/apt/source.list に以下を追記します。
deb http://pkg-voip.buildserver.net/debian etch main以下のコマンドを実行すると警告メッセージが表示されます。
$ sudo aptitude updateW: GPG error: http://pkg-voip.buildserver.net etch Release: 公開鍵を利用できないため、以下の署名は検証できま せんでした: NO_PUBKEY 2A5E3A5A52ABFCB1
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれませんなので AptGet - Debian GNU/Linux スレッドテンプレ を参考に鍵情報を登録します。
# sudo でやると何故かうまくいかなかった
# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 2A5E3A5A52ABFCB1
# gpg --armor --export 2A5E3A5A52ABFCB1 | apt-key add -これで鍵情報を登録することができたので、openwengo をインストールします。
$ sudo aptitude update
$ sudo aptitude install wengophoneインストールできたら、wengophone を起動してアカウントを作成すればよいです。
web カメラの設定
手元に web カメラ QVP-61HSRD があったので QuickCam を参考に使えるようにしてみる。
まずはデバイスを確認。
$ lsusb |grep Logitech
Bus 001 Device 004: ID 046d:08d9 Logitech, Inc.046d がベンダーID で 08d9 がプロダクトIDらしいので、spca5xx でページ内検索して確認します。
サポートされているようなのでドライバをインストールします。
$ sudo aptitude install spca5xx-source
$ sudo module-assistant prepare
$ sudo module-assistant auto-install spca5xx上記コマンドで必要なもの一式インストールしてくれるはずです。途中でエラーメッセージがでたら、なんか足りてないので調べてインストールしましょう。
動作確認は ekiga でもできるし wengophone でもできます。
Posted in 雑記 | no comments |
Ruby KansaiWorkshop 18th
Ruby/Rails勉強会@関西-18に行ってきました。
今回はいつにも増して盛りだくさんで、初めての方向けのお話が多かったように思います。 前回は色々と酷かったので今回はうまくいってとてもよかったと思います。
「Rubyの書き方のお作法?(仮題)」 by 中田伸悦さん
Ruby でプログラムを書くときのお作法と不作法について色々とお話してくれました。 ログ担当だったのでログはあとで Hiki にあげます。
「MyGameとゲームプログラミング」 by 山本 団さん
MyGame の使いかたをわかりやすく教えてくれました。
同梱のサンプルが全く動かなかったのは報告してないけど、報告した方がいいかなぁ。
「Rails初心者向けレッスン」 by 南木晴雄さん
もう三回目なので略。
毎回少なくとも一人は変なはまりかたをして私を困らせてくれる人がいます。
あと、既出かもしれないけど scaffold で作成される HTML は仕様通りではないらしい。
「nginxの話」 by Stoyan Zhekovさん
mongrel が雑種犬という意味だというのを知りました。 VPS (Virtual Private Server) などのメモリが少ないマシンでは nginx がお薦めでそれ以外のメモリをたくさん使用できる環境では、普通に Apache + いろんなモジュールでいいんじゃない?って話。
詳しい内容は Hiki にログがまとまってます。
「Internationalization in Ruby on Rails」 by 氏久達博さん
意外にも普通の話でした。
最後に ruby/gettext のデモをライブコーディングでやってくれました。今回は練習してきていたみたいで、わりとうまくいってよかったなと思います。
懇親会についてはmixiで。
Posted in Ruby |
Ruby Reference Manual
るりまの作業を最近少しだけやってる。
あまり、たくさん作業できないけどスタンドアロンで簡単に見栄えを確認できるようになったので作業しやすくなった。やっと Module クラスのドキュメントが半分終わったかもしれない。
と思ったら、@see が導入されたのでまた全部見直しだorz
Posted in Ruby |
Typo の調子がわるい?
Posted in 雑記 | no comments |
第16回 Ruby 勉強会@関西
行ってきました。 第16回 Ruby 勉強会@関西
RubyKaigi2007レポート
ちょっと参加者の数が少ないような気がしたので外に探しに行っている間に終わってた。「Ruby」っていう関数型言語の話が聞けたので良かったかなぁ。写真とかどれくらい使われたのか全然把握してない。
丸投げシリーズ: Ruby + Win32OLE + Adobe Illustrator
折紙で豆本を作るのはサービスが開始されたら実際に使ってみたい。何かのカンファレンスとかのときに配ると楽しそう。
Win32OLEは私も愛用してます。主に Excel に入力されたデータを加工してソースコードにするという感じです。
初級者向けレッスン
例外とメソッドについて。量は多かったけど、ほぼ時間通りに説明できたと思う。
今回もサカイさんに喋ってもらう。今回も漢字の読みを間違っていたので緊張していたのでしょう。演習課題はみんな出来ていたようで、今回の難易度設定はちょうどよかったみたいです。
スライド、配布資料、解答は明日か明後日くらいにアップします。
# 最近、妙に疲れてるのです。
30分で分かる継続の使い方
継続の使い方がやっとわかったような気がしました。けど、使わないだろうな。 というか恐くて使えない。
懇親会についてはmixiで。
Posted in Ruby |
Integer to RomanNumeral in Erlang 2
Haskell で書いたのを参考に書き直してみた。 なんとなく Haskell っぽくなった?
-module(convert).
-compile(export_all).
-import(lib_misc,[p/1]).
old_roman_unit(1000) -> "M";
old_roman_unit( 500) -> "D";
old_roman_unit( 100) -> "C";
old_roman_unit( 50) -> "L";
old_roman_unit( 10) -> "X";
old_roman_unit( 5) -> "V";
old_roman_unit( 1) -> "I".
i2r(Num) ->
lists:flatten(i2r(Num, [1000, 500, 100, 50, 10, 5, 1])).
i2r(_,[]) ->
[];
i2r(Num, [H|T]) ->
lists:duplicate(Num div H, old_roman_unit(H)) ++ i2r(Num rem H, T).
Posted in Programming, Ruby |
Integer to RomanNumeral in Haskell 2
ちょっとだけ改善してみたのでまた公開しておく。
コマンドライン引数を一つ受け取って10進数をローマ数字に変換してくれる。
使い方
$ runghc convert.hs 10 #=> X
$ runghc convert.hs 999 #=> DCCCCLXXXXVIIIIimport System
import Numeric
main = do cs <- getArgs
let [(n,_)] = readDec $ head cs
putStrLn $ i2r n
old_roman_unit :: Int -> Char
old_roman_unit n
| n == 1000 = 'M'
| n == 500 = 'D'
| n == 100 = 'C'
| n == 50 = 'L'
| n == 10 = 'X'
| n == 5 = 'V'
| n == 1 = 'I'
| otherwise = 'Q'
i2r :: Int -> String
i2r n = i2r2 n [1000, 500, 100, 50, 10, 5, 1]
i2r2 :: Int -> [Int] -> String
i2r2 _ [] = []
i2r2 n (u:us) =
replicate (n `div` u) (old_roman_unit u) ++ i2r2 (n `mod` u) us
Posted in Programming |
Integer to RomanNumeral in Haskell
意味があるかどうかわからないけど、なんとなく書いてみた。
戦略は Erlang の場合と同じ。なんとなく Erlang の時よりすっきりしている気がしなくもない。
main = putStrLn $ unlines $ map i2r [1..4999]
old_roman_unit :: Int -> Char
old_roman_unit n
| n == 1000 = 'M'
| n == 500 = 'D'
| n == 100 = 'C'
| n == 50 = 'L'
| n == 10 = 'X'
| n == 5 = 'V'
| n == 1 = 'I'
| otherwise = 'Q' -- 本当は例外?を投げたい気がする
i2r :: Int -> String
i2r n = i2r2 n [1000, 500, 100, 50, 10, 5, 1] []
i2r2 :: Int -> [Int] -> String -> String
i2r2 _ [] str = str
i2r2 n (u:us) str =
i2r2 (n `mod` u) us (str ++ replicate (n `div` u) (old_roman_unit u))
最後の行がちょっと微妙な気がする。誰か Haskell っぽく書くとこうなるってのを教えてくれるとうれしい。
今度逆も書いてみる。
Posted in Programming | no comments |
RomanNumeral to Integer in Erlang
昨日、帰宅後に書いた奴の逆バージョン。
D(500), L(50), V(5) が複数ある場合のチェックは抜けてるけど大体できたので書いておく。
r2i(Str) ->
[H|T] = [1000, 500, 100, 50, 10, 5, 1],
{Matched, Unmatched} =
lists:partition(fun(X) ->
[X] =:= old_roman_unit(H) end, Str),
check(Str, Matched),
lists:sum(lists:map(fun({Num, L}) ->
Num * length(L) end,
r2i(T, Unmatched, [{H, Matched}]))).
r2i([], _, L) ->
L;
r2i([H|T], Str, L) ->
{Matched, Unmatched} =
lists:partition(fun(X) ->
[X] =:= old_roman_unit(H) end, Str),
check(Str, Matched),
r2i(T, Unmatched, [{H, Matched}|L]).
check(Orig, L) ->
if length(Orig) < length(L) ->
false;
true ->
case lists:all(fun({X,Y}) -> X =:= Y end,
lists:zip(lists:sublist(Orig,1,length(L)),L)) of
true -> true;
false -> throw('ArgumentError')
end
end.
自分で作った lib_misc:p/1 がかなり便利。Ruby の Kernel#p というか Ruby1.9 の Kernel#tap ぽく使える。
Posted in Programming |
Integer to RomanNumeral in Erlang
Erlang 勉強会#1の宿題ができたので公開。
-module(math).
-export([i2r/1,to_s/2]).
-import(lib_misc,[p/1]).
old_roman_unit(N) when N =:= 1000 -> "M";
old_roman_unit(N) when N =:= 500 -> "D";
old_roman_unit(N) when N =:= 100 -> "C";
old_roman_unit(N) when N =:= 50 -> "L";
old_roman_unit(N) when N =:= 10 -> "X";
old_roman_unit(N) when N =:= 5 -> "V";
old_roman_unit(N) when N =:= 1 -> "I".
i2r(Num) ->
[H|T] = [1000, 500, 100, 50, 10, 5, 1],
{Div, Mod} = {Num div H, Num rem H},
lists:flatten(i2r(Mod, T, to_s(old_roman_unit(H),Div))).
i2r(_,[],Str) ->
Str;
i2r(Num, [H|T], Str) ->
{Div, Mod} = {Num div H, Num rem H},
if
Div > 0 ->
i2r(Mod, T, Str ++ to_s(old_roman_unit(H), Div));
true ->
i2r(Mod, T, Str)
end.
to_s(C, Num) ->
if Num > 0 ->
lists:map(fun(_) -> C end,lists:seq(1,Num));
true ->
[]
end.ダサい部分はたくさんあるけど自力で書いたのが偉いと思ったので公開。エラーメッセージの読み方がなんとなくわかってきたような気がする。
ついでに。
-module(lib_misc).
-export([p/1]).
p(X) ->
io:format("~p~n",[X]),
X.こんな感じで使う。 関数の途中の値を知りたいときに使うと便利かも?
to_s(C, Num) ->
if Num > 0 ->
lib_misc:p(lists:map(fun(_) -> C end,lists:seq(1,Num)));
true ->
[]
end.Posted in Programming | no comments |