タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2009/08/06/JavaのMBeanメモ | msakamoto-sf | 2009-08-06 22:21:02 |
Erlang/基礎 | msakamoto-sf | 2009-08-03 23:56:12 |
Erlang/HowTo/GetMD5OrSHA1CheckSum | msakamoto-sf | 2009-08-02 23:58:53 |
Erlang/HowTo/ListUpProcessInformations | msakamoto-sf | 2009-08-02 12:52:44 |
Erlang | msakamoto-sf | 2009-08-02 11:09:17 |
日記/2009/08/02/Erlangの比較演算子 | msakamoto-sf | 2009-08-02 08:59:14 |
日記/2009/08/02/戸籍を郵送で取り寄せてみた | msakamoto-sf | 2009-08-02 07:18:26 |
日記/2009/07/30/本日付けで退職しました。 | msakamoto-sf | 2009-07-31 00:16:15 |
日記/2009/07/27/梅雨がなかなか明けない。 | msakamoto-sf | 2009-07-27 00:37:47 |
読書/データベース関連 | msakamoto-sf | 2009-07-24 00:56:21 |
ちょっとJBossの設定絡みでドキュメントを読んでみたのだけれど。
そもそものきっかけはJNIのDLL(ホントはUNIXサーバだから.soファイル)を、同じJBossインスタンス(=一つのJVM)内で異なる二つのWebAppでSystem.LoadLibrary()しようとしてエラーになってるっぽい、ということで、上手い事できないか・・・という話が寄せられた。
で、以前WebLogic9.1を使った時にもやっぱり似たような話があった。
WebLogicの場合は起動クラスと停止クラスというものがあり、WebLogic Serverの起動 or 停止時に自前で何らかの処理を行わせるJavaクラスを登録できた。
で、JBossでも同じ事やらせようと「JBoss startup class」でググったらどうやらMBeanとして実装するみたい。
「そーいえばWebLogicでも時々MBeanって出てきたよなー」ということで、あんまりMBeanについて詳しく調べたり手を動かした事が無かったので、とりあえずメモ。
あとで読む・・・かも。
ファイル内容のMD5, SHA-1チェックサムを取得してみます。
MD5であれば、erlang:md5/1 を使う事で取得できます。
1> {ok, Data} = file:read_file("target_file.dat"). {ok,<<...>>} 2> erlang:md5(Data). <<107,234,210,187,213,214,238,244,213,7,165,33,228,191,197,244>>
erlang:md5_init/0, md5_update/2, md5_final/1を組み合わせても可能です。
3> C1 = erlang:md5_init(). <<1,35,69,...>> 4> C2 = erlang:md5_update(C1, Data). <<158,140,...>> 5> C3 = erlang:md5_final(C2). <<107,234,210,187,213,214,238,244,213,7,165,33,228,191,197,244>>
得られたバイナリはerlang:md5/1と同一です。
ダウンロードファイルのチェックサムを確認したい場合などは、バイナリから16進数表記の文字列にして、チェックサムが書かれたサーバ側のファイルと中身を付き合わせる事になると思います。
・・・が。バイナリを簡単に16進表記にするショートカット関数が上手い事見つかりませんでした。
とりあえず確認したかったので、アルゴリズムもへったくれもない力業で済ませておきます。
6> lists:flatten(lists:map(fun(X) -> io_lib:format("~.16X", [X,""]) end, binary_to_list(C3))). "6BEAD2BBD5D6EEF4D57A521E4BFC5F4"
Erlangの素人が無理矢理でっち上げた力業なので、真似しないで下さい(;・∀・)。
「プログラミング Erlang」のソースコードに、lib_md5.erlというモジュールが入ってまして、これのソースコードを見るともっとちゃんと「プログラミング」されてる16進数変換関数が書かれてます。実際はそちらを参考にするべきでしょう。
SHA-1についてはcryptoモジュールで提供されている sha/1, sha_init/0, sha_update/2, sha_final/1 を使って計算できました。sha/1の場合だけ載せます。
7> crypto:start(). % これをやっておかないとまずいらしい。 ok 8> C4 = crypto:sha1(Data). <<149,229,83,86,245,217,56,145,166,127,215,161,123,238,204,31,131,12,10,86>> 9> crypto:stop(). ok
なお、crypto:md5/1, md5_init/0, md5_update/2, md5_final/1 というのもありまして、erlangモジュールでの結果と同じになります。
BIFsの erlang:processes/0 はPidのリストを返す。また、erlang:process_info/1 はPidを引数に取りプロセス情報のタプルのリストを返す。
lists:map()を使えば全Pidのプロセス情報のリストを取得できる。
1> lists:map(fun erlang:process_info/1, erlang:processes()). [[{registered_name,init}, {current_function,{init,loop,1}}, {initial_call,{otp_ring0,start,2}}, {status,waiting}, {message_queue_len,0}, {messages,[]}, {links,[<0.4.0>,<0.5.0>,<0.2.0>]}, {dictionary,[]}, {trap_exit,true}, {error_handler,error_handler}, {priority,normal}, {group_leader,<0.0.0>}, {total_heap_size,1364}, {heap_size,987}, {stack_size,2}, {reductions,2786}, {garbage_collection,[{fullsweep_after,65535},{minor_gcs,3}]}, {suspending,[]}], ...
Pidも戻してみたいので、次のようにしてみる。
1> lists:map(fun(X) -> {X, erlang:process_info(X)} end, erlang:processes()). [{<0.0.0>, [{registered_name,init}, {current_function,{init,loop,1}}, {initial_call,{otp_ring0,start,2}}, {status,waiting}, {message_queue_len,0}, {messages,[]}, {links,[<0.4.0>,<0.5.0>,<0.2.0>]}, {dictionary,[]}, {trap_exit,true}, {error_handler,error_handler}, {priority,normal}, {group_leader,<0.0.0>}, {total_heap_size,1364}, {heap_size,987}, {stack_size,2}, {reductions,2786}, {garbage_collection,[{fullsweep_after,65535},{minor_gcs,3}]}, {suspending,[]}]}, ...
なおerlang:process_info/1はデバッグ用途にのみ使ってね、という記述がある。
通常用途ではerlang:erlang:process_info/2を使って、どの情報を取得するか明示的に指定する。
1> erlang:process_info(list_to_pid("<0.29.0>"), status). {status,running} 2> erlang:process_info(list_to_pid("<0.29.0>"), [status, memory]). [{status,running},{memory,142044}]
なおerlang:list_to_pid/1もデバッグ用途orErlang内部限定であり、一般アプリでは使うべきではない、との警告がリファレンスマニュアルには記載されている。
Erlang Reference Manualの "6.11 Term Comparisons" にあるのだけど・・・。
まず「不一致」が
/=
なのが忘れやすそう。他の言語は大体 "!=" なので。
1> 1 /= 2. true
続いてデータ型変換の発生しない、PHPでいうところの"===", "!=="が
=:= =/=
というのもまた・・・。":"ってなんだよ、":"って。忘れやすそうというか、暫く離れた後戻ってきた時にぎょっとしそう。
1> 1 =:= 1.0. false 2> 1 =/= 1.0. true
のだが。
80円切手を貼っておいた返信用封筒に入ってきたのだが、封筒に「不足料金受取人払」という判子が押されていた。
が、普通に郵便受けに入っており、特にその後も郵便局員から料金請求された訳でもない。
「戸籍 郵送 不足料金受取人払」でググってみたところ、役所側としては切手代が不足する場合は判子を押すらしい。一方、郵送請求する人向けの文書では不足すると予想される場合は予め封筒に「不足料金受取人払」と書いておくと良いですよ、というのを見つけた。
請求する側としては80円切手で足りるか不明なので、返信先の自分自身で不足分は払いますよ、ということで念のため「不足料金受取人払」と書いておくのは納得。
しかし返信する役所側としては、重さを量るチャンスがあるのだから切手が足りているかは分かる。なので、予想ではなく確実に不足する「場合は」と書いたのも納得。
・・・でも今回、判子押されてるのに請求されてない・・・。
いいのかな?役所の人が重さを量ってOKだったけど念のため、というかその役所内での通例として「不足~」の判子を押しただけなのかも・・・。
まぁ最終的に不足分を請求されたわけでも無いし、特にそのような連絡のメモなども入ってなかったのでOKなのだろう・・・。
公私でお世話になった方々へ:
本日付で msakamoto-sf こと坂本昌彦は立川の某システム開発会社を退社致しました。
9/1より新しい会社に移ります。そこでは研究開発として新しいWebサービスを開発したり、既存Webサービスに関連したシステム開発・プログラミングなどに携わる予定です。
これまでの常駐型受託開発のSEとはガラリと働き方が変わる事が予想され、不安がないとは言い切れませんが、この度の転職も何かしらご縁が有ってのことですので、心機一転して職務に励みたいと思います。
今後もご縁が合ってばったり出会った時はご挨拶だけでもさせてください。
簡単ではありますが、これにてご挨拶と致します。
太平洋高気圧の張り出しが7月終わろうとしていてもまだ弱い。
梅雨前線が未だに日本の本州上に停滞しているのって、おかしいような気がする。
感覚的に、小学校(1990年代前半)の頃の「夏」の気象と、大学時代後半の2003-4年以降の「夏」の気象が随分違ってきているような気がする。
梅雨が中々明けないし。
お盆過ぎた辺りで一旦長雨になるパターンが増えてきてるし。
何というか体感レベルで、天気の変動パターンが以前と明らかに違ってきている気がするんですけど。
高校まで過ごした千葉県の利根川沿いの一地方と、大学以降の東京八王子近辺ではそれほどパターンが違うのだろうか。
梅雨前線とか気圧配置とかはその程度の距離の差は関係ないだろうし。
温暖化の影響かなぁ。
データベース(主にRDBMS)を勉強した時にお世話になった本を紹介します。
といっても、MySQL/PostgreSQLは公式ドキュメントでOracleはOTN(Oracle Technology Network)、あとGoogle検索で大概事足りてしまいますので、個別のDBの勉強、というよりは「リレーショナルDBの一般的な仕組みや運用方法」について勉強した本になります。
以下2冊になりますが、いずれも新品は無いようです。残念です。(*1)
この本には本当に感謝してるんですが・・・増刷は無いのかな・・・。
RDBMSを使った主に企業の業務システムを想定していて、DBもOracleやDB2など商用のDBMSを意識しています。
とはいえ、一般的な概念の話として、
などなど重要ポイントを網羅しています。また図も多用されていますので分かりやすいと思います。
ページ数は300Pを少し超えた程度ですが、結構読むのに時間がかかりました。それだけ密度が濃いです。
「データベース設計・構築」の姉妹本で、こちらは運用と管理について扱っています。
運用となると、組織との絡みもありますので抽象的にならざるを得ず、やはり人間的な部分や監査などを扱った章は一般的なお話が多いです。
開発者としては、第3章の「データベースの運用管理の実際」の方が興味深かったです。
この姉妹本を読んでいたお陰で、お客様のSI部隊のDB担当の人と話もし易くなりました。全体的に一通り網羅できますので、単にSQLを組んで終わりというのではなく、運用まで含めた全体を見渡せる視点が得られたと思います。
最後に、Oracleに特化してしまいますがディープな話を軽いノリでガンガン進めていく一冊を。
ぶっちゃけまだ読み終わっていません。(;・∀・)
もう最初のインデックス構造の部分だけでお腹一杯です。
Oracleの内部処理に興味のある人にはオススメ・・・って、これも新品無さげです。
結局全部新品が無い本ばかりになってしまいましたが、坂本が新入社員のころ(2004-2005年当時)にたまたま書店で見かけて入手した本です。
えー、その、まぁこういう本を読んでDB勉強しましたよ、という程度にしか参考にならないですね、スミマセン・・・。