Categories: "Programming" or "Erlang" or "Java" or "デバッグ"

2008/11/23

Link: http://www.fiveflavors.com/mt/pas_mal/archives/2008/02/post_1.html

昨年より、Nokia E61というSymbian OS 9.1/S60 3rd editionベースのスマートホンを使ってきた。ほとんど、PalmOSから乗り換えられるが、2つだけ今ひとつ乗り換えられないアプリケーションが2つある。

一つは、パスワード管理ソフトウエア。Keyring for palmOSを使ってきていて、その代替となるフリーソフトウエアがほとんどない。おしいのは、safeというアプリケーション。ただし、キーの生成機能がない。

二つ目は、辞書引きソフト。これまで、EIJIROWDICの組み合わせで、ちょっと引きたいときに使ってきた。Linux distro上では、EBViewというアプリケーションを使っている。この辞書引きについては、EPWING形式を検索できるアプリケーションがS60上には存在していなくて、そんなQ&Aがインターネット検索をするとたくさんでてくる。MobilePocketというのを使うのが、今のところのworkaroundだが、変換が面倒。それは実は仕方なくて、EPWINGという規格がグローバルな標準ではなく、日本ローカルであって、Symbian OSベースのスマートホンを世界でもっとも出荷しているNokiaやモトローラの市場は、日本だけはその範囲外であったということだ。

EPWING形式を引くアプリケーションは作るのが面倒そうだな、と、思っていたのだが、じつはEBViewは、EB libraryを利用して作られている。そして、eb4jというEB libraryのjava実装があって、EPWING形式へのアクセスはライブラリに任せてしまえそう、ということに気がついた。
そして、このeb4jを使って、辞書引きソフトウエアを作った人がいて、LGPLで公開している。

Javaならば、Nokiaのスマートホンは、CLDC/MIDPアプリケーションを構築すれば、動かせるのだし、複雑な部分はライブラリ上にあるわけだから、GUIつまり、検索キーワードを受け取ってライブラリに渡して、結果をリスト表示する。程度のアプリケーションは、さほど難しくならなそうだな、ということで、作ってみたいとおもったのである

2008/06/21

  13:54:42 by , Categories: Freesoftware and Open Source Software, Programming

Link: http://rubykaigi.tdiary.net/

13:30からMatzさんの梁山泊の話。基調講演。

プログラミング梁山泊 Sanctuary
LISPは梁山泊である。Fortranは梁山泊ではない。
UNIXは梁山泊である。yacc, awk, etc... perl, linux
ベストなテクノロジーである必要はない。便利である必要はある。
Smalltalk梁山泊。OOP. Dynamic Language implementation
Java梁山泊。温故知新 learning from history. smalltalkのVMの技術やLISPのGCの技術を取り込んでいった。エンタープライズ技術。ビジネスに使えるCS。

Ruby kaigiの資料は、日本語と英語の併記。
梁山泊大事。技術者が集まる場所。求心力のある場所。それが大事だという話は、そのとおり。誰が作るか?人を集めたからといって梁山泊にならないよね。

コアになるネタがあるから、それが楽しいから結果として集まってきて梁山泊になっていくのだろう。

Ruby梁山泊。楽しさを重視。生産性を重視。

こうなる可能性はありそう。「楽しい」ことを重視しているから、ということだ。

2008/04/21

  00:22:58 by , Categories: SymbianOS, Freesoftware and Open Source Software, Java

Link: http://www.da-cha.jp/?q=node/378

SafeというGPLのアプリケーションの改造を行っている。CLDC/MIDP上で動くJ2MEのアプリケーションだ。メインターゲットは、Symbian OSを採用しているNokiaやMotorolaの携帯電話。

このアプリケーションは、パスワード等の情報を暗号化して、携帯デバイス上で管理するソフトウエアである。類似のアプリケーションで、Palm OSでよく利用されるものに、Keyring for PalmOSがある。

Safeは、対称鍵暗号にIDEAを使用し、パスワードハッシュにMD5を利用している。現在アルファ版のKeyring for PalmOS v2.0を参考に、つぎのことをやろうとしている。

  1. AESを使用
  2. ハッシュにSHA利用
  3. AESの利用に当たっては、Initial Vectorをきちんと使用し、データストアにもIVを保存する
  4. データの構造としてtitle/contentという単純なデータ構造から、title, account, password, note, last modified dateという形にする。
  5. プログラムの構造を整理する

このうち、AES利用やハッシュ、IVの処理あたりを片付けた。さてと、データ構造の変更をかけようとしたら、データ定義、export, data storeへの書き出しなど、多箇所の変更を余儀なくされる状況になった。
これは、プログラム設計がよくないということ。そこで、リファクタリングである。

暗号化されていないデータ要素(element)、その暗号化された要素、データストアへの書き出し(ファイル、XML、GUI)、データストアからの取り込み(ファイル、XML, GUI)といったものを、DecoratorやAbstractFactoryパターンで表現できそうな気がしてきたところで、就寝時間である。

2007/06/10

  18:38:37 by , Categories: Linux, Programming

Link: http://adamklunick.com/2007/05/11/rails-error-to_date/

Check it OutというRailsでうごく家計簿ソフトがあるのだが、

NoMethodError in Admin#index

Showing app/views/account/_nav_show_small_balance.rhtml where line #1 raised:

private method `to_date' called for Sun Jun 10 16:05:34 +0900 2007:Time

Extracted source (around line #1):

1: total: <%= getTodayBalance(@account)%>

Trace of template inclusion: /app/views/account/_list.rhtml, /app/views/admin/partials/_nav.rhtml, /app/views/admin/index.rhtml

RAILS_ROOT: script/../config/..
Application Trace | Framework Trace | Full Trace

のようなエラーに遭遇。

どうやら、rails noのこのバグに遭遇しているようだ。
環境は、Debian Sid でRubyは1.8.6、Raisは1.2.3-2。チケットでは、Ruby 1.8.6で発生し、1.8.5では発生しないようす。

$ script/console
Loading development environment.
>> t = Time.now
=> Sun Jun 10 18:40:05 +0900 2007
>> t.to_date
NoMethodError: private method `to_date' called for Sun Jun 10 18:40:05 +0900 2007:Time
from (irb):2

チケットにあるのと同様、再現する。

このかたのブログでは、

So, dont make the same mistake as I did. Make sure to change the environment.rb file in the projects which you force to use a Rails version.

Hope this helps.

ということで助けになることを期待。

Ruby Forum
にあるDanielさんのコメントように
、実際1.8.6ではto_dateがprivateになっているために、Railsとconlictすることが示されている

This is really really minor but it would be nice if Time#to_date and
Time#to_datetime (from date.rb) were made public. I don't know why they
are private (doesn't seem very useful) but that causes a conflict with
Rails' similarly-named helper methods.

Railsのほうで、to_dateを使わないで実装するのがいいのかな?

2007/06/04

  00:22:34 by , Categories: Freesoftware and Open Source Software, モブログ, Erlang

Link: http://www.dtek.chalmers.se/~henoch/text/ejabberd-ircd.html

ejabberd_ircdというモジュールがあるが、最新のejabberd 1.1.3に対応していない。
ということで、修正した。

まだまともに動き出していないが、どちらかというと、もともとのこのモジュールのバグのような気がしてならない。

オリジナルのモジュールはここから取得する。
IRC-to-XMPP interface


Index: src/ejabberd_ircd.erl
===================================================================
--- src/ejabberd_ircd.erl (revision 107)
+++ src/ejabberd_ircd.erl (working copy)
@@ -7,6 +7,7 @@
%% External exports
-export([start/2,
start_link/2,
+ become_controller/1,
socket_type/0]).

%% gen_fsm callbacks
@@ -20,7 +21,7 @@
terminate/3
]).

-%-define(ejabberd_debug, true).
+-define(ejabberd_debug, true).

-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -51,7 +52,7 @@

-record(line, {prefix, command, params}).

-%-define(DBGFSM, true).
+-define(DBGFSM, true).

-ifdef(DBGFSM).
-define(FSMOPTS, [{debug, [trace]}]).
@@ -71,6 +72,9 @@
socket_type() ->
raw.

+become_controller(Pid) ->
+ gen_fsm:send_all_state_event(Pid, become_controller).
+
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
%%%----------------------------------------------------------------------
@@ -119,7 +123,7 @@
?DICT:store(RoomJID, BareChannel, JToC)}
end, {?DICT:new(), ?DICT:new()},
ChannelMappings),
- inet:setopts(Socket, [list, {packet, line}, {active, true}]),
+ %%inet:setopts(Socket, [list, {packet, line}, {active, true}]),
%%_ReceiverPid = start_ircd_receiver(Socket, SockMod),
{ok, wait_for_nick, #state{socket = Socket,
sockmod = SockMod,
@@ -149,6 +153,9 @@
Reply = ok,
{reply, Reply, StateName, StateData}.

+handle_event(become_controller, StateName, StateData) ->
+ activate_socket(StateData),
+ {next_state, StateName, StateData};
handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.

@@ -836,3 +843,11 @@
end;
error_to_string(_) ->
"unknown error".
+
+activate_socket(#state{socket = Socket, sockmod = SockMod}) ->
+ case SockMod of
+ gen_tcp ->
+ inet:setopts(Socket, [list, {packet, line}, {active, true}]);
+ _ ->
+ SockMod:setopts(Socket, [list, {packet, line}, {active, once}])
+ end.

このソフトはerlangという関数型言語で記述されている。

2007/05/18

  18:50:00 by , Categories: Freesoftware and Open Source Software, Programming, Erlang

Link: http://www.process-one.net/en/blogs/article/angie_ejabberd_roadmap_updated/

高いスケーラブルのInstant Messaging のソフトウエアejabberdのロードマップが更新された。ejabberdは、関数型、並列のErlang言語を用いて実装されている。

  • ejabberd 2.0: このバージョンで新しいアーキテクチャである Flexarchが採用される。基本のアイディアはもっとも柔軟で設定可能なアーキテクチャで、痛みを伴わずすべての組織で適用することができるいようにするものになる。このリリースはベータステータスに2007年5月に、リリースは7月になる予定だ。
  • ejabberd 2.1: This version is expected to change the relational database architecture support to make it more flexible and ease code maintenance.
  • ejabberd 2.2: This version will be a major optimisation of the code base and will dramatically improve the performance and the memory consumption. It will integrate a new XMPP parsing library called exmpp, common to ejabberd and Jabberlang. More on this new library soon, which is the key of this performance boost.
  • ejabberd 2.3: This version will improve the consistency of the cluster configuration mechanisms. A single configuration file describing the complete cluster will be introduced, radically improving cluster management.

とのことで、楽しみである。

Atlassian Jira によるプロジェクトトラッキングソフトウエアのロードマップによると、ロードマップの進捗状況まだまだOPENになっているIssueが多数あるようだ。

::