写真ばかりでは自分が内容を忘れてしまいそうなので(汗,見たセッションのメモを書いてみるテスト.
WindowsCEはXPなどと比べるとセキュリティ的にかなりしょぼいので,あれこれ仕掛けて楽しもうというお話.
KeyboardLogger,ARMプロセッサのアセンブラ少々, ftpsvr.exeのBufferOverflowを利用したハードウェアリセット,WindowsCEのハックに使用するツール紹介などなど.
WindowsCE(WindowsMobile)の開発はeVC3/4あたりで開発できるので, VisualC++に慣れている人ならば,比較的入りやすいジャンルかも?
匿名通信を実現するためのtorというソフトの紹介. 従来の匿名通信を実現する方法として,現状ではmixとproxiesの2種類が存在し, この2つを組み合わせたメッセージルーティングの方式をOnion Routingというらしい. 今回のtorはこのOnion Routingを拡張した方式ものとして紹介されていた.
torの開発版はこちら.
"Shoot the Messenger"といってもMSN Messengerの話ではなく,Shatter Attackの原理・攻撃・防御手法などの解説. Shutter Attackについては塩月さんのWindowsメッセージによる権限上昇の危険性の資料もあわせてどうぞ.
個人的にShatter Attackはなんとなく知っている程度だったので, そういう意味でなかなか面白かったです.
fwknopとfwsnortの紹介.fwsnortが利用しているiptables string match extensionの解説.あとはSnort_inlineとの性能比較などなど.
スケジュール変更でGoogle Hackingのセッションとかぶってしまったのですが,こちらの方に興味があったので見たセッション.
大量のデータを効率よく見るためには,Visualization(可視化)が有効ですよーというお話. 既存の可視化ツールの紹介や,発表者が作成しているrumintのデモ.
Steganographyの基礎からSteganalysis(検出),Cryptanalysis(解読)の手法について紹介. 発表者が作成している検出ツールStegSpy V2.0 も紹介されていた.
発表者のサイトはこちら
StegSpyはMozillaのプラグインとしても実装したいなーと言っていたので,ちょっと期待.
Steganographyのひとつとして,実行ファイルの中に情報を埋め込むための 手法が解説されていました.実行時の動作を変更せずに,
などを駆使してバイナリの中に情報を埋め込むみたいです.
Hydanというツールのデモがありました.
発表者が「x86のアセンブラしってる?」と聞いたとき,8割ぐらいの人が手を挙げていたのでびっくり.
QuickTimeです.ファイルサイズがちょっと大きいので,お茶でも飲みながら気長にダウンロードしてください.(^^;
一番最後にDark Tangentが言ってた言葉.また来年も行ってみたいなー.
こちらは現地時刻で朝の5時を過ぎたぐらいです.あと2時間ぐらいで空港に向かう予定です.

といってもまだ,帰宅途中の高速バスの中で渋滞にはまってる最中だったりして...(;´Д`)
あしたから通常営業の予定.社会復帰できるのだろうか...?(汗
車で移動することが多いからそんなに発達してないのかな?と思っていたら, 空港での待ち時間にホットスポットを利用している人を良く見かけました. 日本だと通勤途中とかでの利用が多いので,携帯端末が発達していると思うのですが, また異なったスタイルで発達していて面白いなーと思いました.
以下,アメリカ国内でのホットスポットとかのメモ.
#日本の携帯を見ていると,PC98シリーズとPC/AT互換機のデジャビュを見ているような気がするのは気のせい?
が鬼のように溜まっているのでぼちぼちと...(^^;
仕掛け自体はシンプルですが,なかなか効果的そうですね〜.
個人的には,そのまままじめに重要度を表示してしまうと,人がそこにしか集まらなくなるような気がするので, ある程度ランダムに重み付けを割り振ってみると面白いんじゃないかな?と思ってみるテスト.
遅まきながら.この辺のネタと組み合わされると,ちょっと痛い目にあわされそうな気が...
セキュリティホールmemoに載っているように,解凍ソフト側で,
・デフォルトでは絶対パスへの展開を行わない (オプションスイッチなどで明示的に許可する必要がある)
・デフォルトで絶対パスへの展開を行おうとするが、ユーザに対して確認ダイアログ等を表示する
という対応がされることを期待します.
GNU tarとかの場合,
$ tar cvfz hoge.tgz /home/hoge
とかすると,圧縮時にパスの先頭にある"/"が外れるよう になっている仕様は,先人の知恵だったのかな...?
セキュリティホールmemoより.気になったのでメモ.
これでWikiの編集が直接できれば最強環境になるのだが...(^^;
なかなか便利かも?と思って使っていたら,Gaimから送信したメッセージが表示されない...ひょっとしてフォントの問題?
debian.co.jpでUML専用サーバ(最小構成・月額)1,050円だそうで.
メモリ16MB,HDD 650MB,IP1つの最小構成で1050円/月(税込).メモリ128MB,HDD 4.7GBとかの構成にすると3675円/月(税込).
小規模なWebサーバを立てるぐらいの用途だったら安くてなかなかいいかも?
激しく筋肉痛になりそうな予感なんですけど…_| ̄|○
ここではTrackbackは使ってないのでプロトコルとかの詳細はよく知らないのですが,送信元の確認や認証などをせずにPOSTされたデータを無条件で受け付けてしまう仕様に問題があるのかな...?
対処方法の「5.Trackbackプロトコルのバージョンを上げて」というのは,その辺の仕組みが入ったプロトコルになってるのかな?とりあえず,あとで調べるためのメモ.
たまには本業に近い内容のイベントへ.
ジャヴァの奇妙な冒険「エイジャの赤石=Ruby」にはかなり感動.Eclipseで受けた衝撃は,まさにそんな感じだったかも?
...って,ぜんぜんLLに関係ないし(汗
#Lightweight Language WeekendだとJavaはアウェイなのね.
LLでデザインパターンを適用するとコード量が多くなりがち みたいな話が出てたような気がするのですが,
のは,相反する要素なのかな...?
どちらかというと1はユーザが手で書く領域で,2はRubyのIteratorみたいに 言語やライブラリでサポートする範囲なのかな?と,何となく考えてみたり.
PerlのCPANモジュールみたいなパッケージングシステム. ちょっと気になったのでメモ.
継続をサポートする言語を使ったことがなかったので, 初めて聞いたときは理解できなかったのですが, なんとなく言語レベルでのFiberかな?なんて勝手に想像してみたり.(笑
お昼の「LLを仕事に」のセッションで出ていた話題. 「ソースコードが汚いので見せたくないなぁ」という意見が出てきて 思わず笑ってしまいました.
個人的には「ファイル閲覧機能付きCGI」を 作りこんでしまった場合(?),そのままLLで書いたCGIを使っていると 意図せずソースコード丸見えになることあるよなぁ...なんて思ったり.
去年の某氏の名言ですが,個人的には, 「うん○プロジェクトにはJavaがよく採用されている」というのを, パブロフの犬的に「Java=うん○」と言ってるのかなぁ...なんて想像してみたり.
LLを使っている人にとっては,Java言語でコーディングすると かなり冗長な表現になってしまうのがウザイと思います.
逆にJava言語は,
などと,言語自体をシンプルにしてコーディングレベルのバグを 減らそうとしている言語仕様を目指していると思います. 個人的にはこの辺の方向性がJava言語で気に入っている点の1つです.
個人的にはJava言語自体には罪は無いと思いますよ(笑
#まぁ私も,Eclipseが無いとJavaでコーディングする気はまったくおきなかったりするのですが...(汗
LL侍おもしろすぎ(笑
なんだかTrackbackよりもリンクが多いのでメモ(汗
継続を使ったWebアプリの書き方には,かなりの衝撃を受けたり.
継続を使って画面遷移する際の処理を,自然に表現できてるところがすごい.(^^;
磯さんの,新しい言語を触るときにはかならずLispのインタプリタを書いてみるという 言葉が印象に残っていたり.
かずひこさんにごあいさつ.
「〜の誰それ」という感じで,何をしてる人なのかある程度素性が明らかになっていた方が, ごあいさつもスムーズにできるのになぁ...と,ちょっと精進が足りてない自分を反省.
「あなたの開発環境見せてください」のコーナー希望.
みなさんどんな感じでコーディング・テスト・デバッグ・リファクタリングとかしてるのかな?と 気になっていたり.できればリアルタイムでコーディングしているところを実況するとか.
もし,その中から良い習慣を見つけることができれば,まねしてみたいです.(^^;
最近,少しずつRubyをさわりはじめようかなぁ...と思っているところなのですが, 結局私はEclipseで人間をやめてしまった人(ここの資料P26参照)なので,とりあえず今のところはRDTを試しています(汗
先日少し紹介したTorを,IEから使う方法のまとめ.
登場してるみたいです.Journal InTimeより.
CGIでデータ保存するならDB使ったほうがいいのなぁ?と思ったので,ちょっとだけ使ってみました.
で,使っているうちになんか変だなーと思って,試しに下記のプログラムを実行してみたら...
#!/usr/bin/env ruby
require 'dbi'
require 'time'
#
$db_file = 'test.db'
$db_url = "DBI:SQLite:#{$db_file}"
$number = 1000
#
def getDBHandle
dbh = DBI.connect( $db_url )
dbh['AutoCommit'] = true
dbh
end
#
def updateTest
STDOUT.print "pid=#{Process.pid} start updateTest \n"
begin
dbh = getDBHandle
sql = "update test1 set name=? where id_name=?"
dbh.prepare(sql) do | sth |
0.upto( $number ) do |i|
sth.execute( "ほげ-#{Time.now.xmlschema}", i )
sleep 0.1
end
end
dbh.disconnect
rescue Exception => e
STDOUT.print "pid=#{Process.pid} exception in updateTest... e=#{e.to_s}\n"
end
STDOUT.print "pid=#{Process.pid} finish updateTest \n"
end
#
def selectTest
STDOUT.print "pid=#{Process.pid} start selectTest \n"
begin
($number/10).times { |i|
dbh = getDBHandle
dbh.select_all('select * from test1') do | row |
#STDOUT.print "pid=#{Process.pid} num=#{num} id=#{id} name=#{name}\n"
#STDOUT.flush
end
}
rescue Exception => e
STDOUT.print "pid=#{Process.pid} exception in selectTest... e=#{e.to_s}\n"
end
STDOUT.print "pid=#{Process.pid} finish selectTest \n"
end
#
# create table & insert test data...
#
File.delete( $db_file ) if File.exist?( $db_file )
STDOUT.print "pid=#{Process.pid} start create table & insert test data...\n"
dbh = getDBHandle()
dbh.do( "create table test1( id_name integer primary key, name text );" )
dbh.prepare( "insert into test1(id_name,name) values( ?,? )" ) do | sth |
0.upto( $number ) do |i|
sth.execute( i, "ほげほげ#{i}" )
end
end
dbh.disconnect
STDOUT.print "pid=#{Process.pid} finish create table & insert test data...\n"
#
# fork select & update process ...
#
20.times {|n| Process.fork { selectTest } }
Process.fork { updateTest }
Process.waitall
ロックがかかっているときに他のプロセスとかからDBにアクセスすると,いきなり例外が飛ぶ様子.せめてロックが解除されるまで少しぐらいはSQL文の実行を待ってほしいなぁ...
ひょっとして何か設定が他にあるのかな?
SQLiteの他に何かお手軽な物は無いかな?と思ったので, PStoreを使ってみるテスト.Rubyリファレンスマニュアル - PStore を参考にしました.
#!/usr/local/bin/ruby
# use "RAA - ruby-guid"
require 'guid'
require 'pstore'
require 'time'
#
$db = PStore.new( "addr.db" )
$number = 100
#
class Person
def initialize( name, mail )
@id = Guid.new.to_s
@name = name
@mail = mail
@update = Time.now
end
attr_reader :id, :update
attr_accessor :name, :mail
def to_s
"person[ @id=#{@id}, @name=#{@name}, @mail=#{@mail}, @update=#{@update.xmlschema} ]"
end
end
#
def pstoreTest1
#
$number.times { |i|
STDOUT.print "pstoreTest1: pid=#{Process.pid} i=#{i}\n"
STDOUT.flush
p = Person.new( "ほげ#{i}-pid=#{Process.pid}", "hoge#{i}@example.com" )
$db.transaction do
if $db.root?( "persons" ) then
ps = $db["persons"]
else
ps = Hash.new
end
ps["person:#{i}"] = p
$db["persons"] = ps
end
}
end
#
def pstoreTest2
$db.transaction do
$number.times { |i|
STDOUT.print "pstoreTest2: pid=#{Process.pid} i=#{i}\n"
STDOUT.flush
p = Person.new( "ほげ#{i}-pid=#{Process.pid}", "hoge#{i}@example.com" )
if $db.root?( "persons" ) then
ps = $db["persons"]
else
ps = Hash.new
end
ps["person:#{i}"] = p
$db["persons"] = ps
}
end
end
#
def pstoreTest3
#
$db.transaction do
ps = $db["persons"]
p $db.roots
ps.each_pair { |k,v|
STDOUT.print "person[#{k}]=#{v}\n"
}
end
end
#
# main
#
STDOUT.print "==== test1 ====\n"
File.delete( "addr.db" ) if File.exist?( "addr.db" )
st1 = Time.now
10.times {|n| Process.fork { pstoreTest1 } }
Process.waitall
t1 = Time.now - st1
STDOUT.print "==== test2 ====\n"
File.delete( "addr.db" ) if File.exist?( "addr.db" )
st2 = Time.now
10.times {|n| Process.fork { pstoreTest2 } }
Process.waitall
t2 = Time.now - st2
STDOUT.print "==== test3 ====\n"
pstoreTest3
STDOUT.print "t1=#{t1}, t2=#{t2}\n"
複数プロセスからの操作でも,transactionが終わるまで他プロセスは待つみたいな様子. なかなかお手軽でいい感じかも.
で,手元の遅いLinuxマシンで実行してみた結果は次のとおり.
t1=12.914477, t2=0.864499
t1は毎回,t2はまとめてtransactionで処理した場合の処理時間. 結構処理速度が違うみたいですね.
メモ代わりにソースを丸ごと貼り付けているので,日記が異様に見づらくなってしまう罠(汗
別に.NET Framework使わなければ,VC6で十分じゃないかと思ってしまったり...(笑
とりあえずだったら,今度のdotNETマガジンについてくるVisualStudio 2005β版を使ってみるとか?
#MSDN Subscriber Downloads(要Professional以上?のサブスクリプション)だと,いまだにVC1.52とかVC4.2とかダウンロードできたり.
久しぶりにActionScriptですよー.
ちょっと気になったのでメモ.Visual Studio用のxUnitお助けツール.この辺のスクリーンショットを見ると雰囲気がわかるかも?
#ますますVisualStudioにリファクタリングブラウザが欲しくなってくる罠...
Rubyといっても言語のRubyではなく,ATI Technologies Inc.でおなじみのRubyが大活躍のデモムービー.
今年のSIGGRAPH2004のanimation theaterで上映されているみたいです.
ツッコミをいただきましたので,こちらでも試してみました.
#!/usr/bin/env ruby
require 'sqlite'
require 'time'
$file = 'test.db'
$number = 1000
def getDB
SQLite::Database.new( $file, 0 )
end
def createTest
STDOUT.print "pid=#{Process.pid} start createTest()\n"
db = getDB()
db.execute( "create table test1( id_name integer primary key, name text );" )
# insert test data...
0.upto( $number ) { |i|
db.execute( "insert into test1(id_name,name) values(#{i},\"ほげ#{i}\")" )
}
db.close()
end
def selectTest()
STDOUT.print "pid=#{Process.pid} start selectTest()\n"
begin
db = getDB()
db.execute( "select id_name, name from test1;" ) do |row|
# STDOUT.print " %10-s %10-s \n" % [ row['id_name'], row['name'] ]
end
db.close()
rescue Exception => e
STDOUT.print "pid=#{Process.pid} exception in selectTest... e=#{e.to_s}\n"
end
STDOUT.print "pid=#{Process.pid} finish selectTest()\n"
end
def updateTest()
STDOUT.print "pid=#{Process.pid} start updateTest()\n"
begin
0.upto( $number ) { |i|
#print "pid=#{Process.pid} updateTest() i=#{i}\n"
db = getDB()
sql = "update test1 set name=\"ほげほげ-#{i}-#{Time.now.xmlschema}\" where id_name=#{i}"
db.execute( sql )
db.close()
}
rescue Exception => e
STDOUT.print "pid=#{Process.pid} exception in updateTest... e=#{e.to_s}\n"
end
STDOUT.print "pid=#{Process.pid} finish updateTest()\n"
end
#
File.delete( $file ) if File.exist?( $file )
#
createTest()
selectTest()
Process.fork { updateTest }
20.times {|n| Process.fork { selectTest } }
Process.waitall
ロックがかかっている最中に何かしようとすると,例外が飛んでくるみたいですね...
んー,やっぱりロックが解除されるまで待つような実装を, 自前で用意したほうが良さそうですね(笑
#SQLite3のを見ていると, この辺が改善されているような事が書いているような気がするのですが, DBD::SQLiteがSQLite3に対応してないしなぁ...
というよりも,いつの間にか今週が終わりそうなことに気がついて,あせっていたり..._| ̄|○
を見て,なんとなくFlashで作ってみたり.こちら.
久しぶりにActionScriptのリファレンスマニュアルを見ながら作ったので,作成時間は約1時間ぐらい.試験は不合格だなぁ...
Flashなので描画オブジェクトの数が増えてくると,かなり表示が重くなってきます.ある意味ベンチマークソフト?
#モンテカルロ法(Monte Carlo Methods)は乱数の生成がかなり重要だったり.メルセンヌ・ツイスターとか...(^^;
結局,会社で使ってるVirtualPCの中で塩漬けになっていたWindowsXPにSP2を入れてみました.何もせずに放置していたXPだったので,インストール前には「7日以内にライセンス認証してください」と表示されていたのですが,なぜかインストール後には「60日以内にライセンス認証してください」と元に戻ってるし...
それ以外に関しては,今のところは不具合なく使うことができている様子.
以下,さわっていて気がついたことのメモ
少し疑問に思ったので,試しに昔作ったWinPcapを使ったアレを動かしてみると... 手元のSP2を適用したマシン上ではちゃんと動作する様子.どうもWinPcapを使っていると生パケットの送出はできるみたい.
で,nmapwin_1.3.0_src.zipのソースをなんとなく見てみると...
| socket(AF_INET, SOCK_RAW, IPPROTO_RAW)のソケットを使った生パケットの送出 | NG |
| WinPcapのPacket.dllを使った生パケットの送出 | OK |
のような気がするのですが,--win_helpで出てくるWindows特有のオプションの使い方が良くわからなかったり...(汗
#socket(AF_INET, SOCK_RAW, IPPROTO_RAW)ってundocumentedな使い方だったと思うので,SP2で使えなくなっても文句は言えないような気はするのですが...
最後にリブートしたのは,先客さんを追い出す意味もあったり(笑
なんだかすごい勢いで来てるんですけど...
自宅のテレビ壊れた...
DEPが有効だと,JavaみたいなJITな物が動かなくなるような気がしたので この辺りを 読んでみると,
On 32-bit versions of Windows, DEP is applied to the stack by default.
なんて書いているので,heapには適用されないのかな...?
...というわけで,確認のために息抜きで作ったテストプログラムです.
実行前にソースコードをよく読んで,プログラムの趣旨を十分理解した上で使用してください.自分自身でバッファーオーバーフローを起こしてnotepad.exeを起動します.
DEPTest.exeみたいな変なことしなくても, インラインアセンブラで直接StackとかHeap上の コードをコールすればいいじゃないか...と,ふと思い出す.
...で,また息抜きで作ったテストプログラム.
今度はStackとHeapの両方で試せます.
アプリケーションで実行可能メモリが必要な場合は、Virtual* メモリ割り当て関数のメモリ保護引数で PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE または PAGE_EXECUTE_WRITECOPY を指定して、適切なメモリにこの属性を明示的に設定しなければなりません。malloc() 関数と HeapAlloc() 関数を使うヒープ割り当ては実行可能ではありません。
と書いてありました.JITとかで実行可能な領域が欲しい場合はVirtualAlloc()とかVirtualProtect()でPAGE_EXECUTE_READWRITEとかの属性を指定してメモリを確保すればいいのかな...?
なんだか罠にはまってしまったような感じ...(;´Д`)
各メーカー別Windows XP Service Pack 2 関連情報経由でこの辺より.
やっぱりDEPでサービスとかが動いているから遅いのかな?
知らなかったのですが,クライアント側のPCにデータを保存できるのですね.Flash TechNote : ローカル Shared Object とはを参照のこと.
WindowsXPとかの場合,通常,
%USERPROFILE%\Application Data\Macromedia\Flash Player\
以下にディレクトリがいろいろ作成されてデータが保存される様子.
なんだかCookieのかわりに使われそうな機能だなぁ...
◆ あららぁ [FlashCookieでfoo.txtを知らないうちに送りこまれた経験があります。かなり冷や汗でした。]
◆ あららぁ [http://mlsecurity.com でMindwarper氏が昔Exploitを公開していたような気がします..]
◆ あららぁ [あ、ここです。http://www.mlsecurity.com/ie/ie.htm]
◆ あららぁ [サードパーティーのcookieを拒否すると効かないような気も。]
◆ よぎ〜 [この辺の話題でしょうか?->http://www.securityfocus.com/archive/1/34247..]
◆ あららぁ [http://www.securityfocus.com/archive/1/342474 あたりでは、userがわ..]
◆ あららぁ出張中 [出張先でごにょごにょしたらFlashCookie周辺で以下のようなファイルが生成されnotepadで開けました。(W..]
Windows環境では,Flash Playerの上で右クリックをするとサイト毎の個別の設定はできるのですが, Flash Playerの共通の設定ってどこから変更できるの?と思って探していたら見つけたサイト.
ここのサイトを表示しないと設定が変更できないという仕様は,何となく変な感じがしないでもない...
そういえば,ブロードキャストしてネットワーク上に 同一シリアルを使用しているアプリが存在しているかどうかを チェックするようなアプリがあったような気がするのですが, WindowsXP SP2を入れるとこの手法が通用しなくなるような気がしないでもない...

強烈なリンク絨毯爆撃でapacheが止まってたし...
UAが"Java/1.4.1_02"って、最新の1.4.1_07とか1.4.2_05 じゃないところが、やる気の無さが伝わって来てイカス(笑
あまりこの辺の処理は詳しくないのですが, HTML中のJavaScriptを無効にするための処理を行う際, 単に<script>〜</script>を除去しているだけだと,
<html>
<body>
<scri<script>window.alert('ダミー')</script>pt>
window.alert('テスト')
</scr<script>window.alert('ダミー')</script>ipt>
</body>
</html>
※HTML的にはかなりおかしいです
というデータを処理すると,
<html>
<body>
<script>
window.alert('テスト')
</script>
</body>
</html>
という結果になって"window.alert('テスト')"の部分が 有効になることがあるのかな?なんて思ったり...
HTMLから<script>〜</script>がなくなるまで処理を繰り返せばいいのかな?
で,なぜこれを思ったかというと,WebアプリでRSSリーダを自分で作る際, CDATAでcontent要素を出力するRSS を表示する際に,処理が面倒くさそうだなぁ...なんて思ったからだったり.(^^;
GMailのUIが鬼のようなJavaScriptで構成されていて,かなーりびっくり.
Googleではこの辺のJavaScriptをハンドリングするための独自のフレームワークを作っているのかな?
本当はいろいろ期限がせまっていて余裕がないはずなのに,電車の中で↑のようなことを思い浮かべつつ現実逃避...
作業中,作業中,作業中...
Lightweight Language Weekendで 少し話を聞いて気になっていたので,息抜きにちょっとだけテスト.
#!/usr/local/bin/ruby
require 'webrick'
include WEBrick
# settings
document_root = Dir::pwd + '/htdocs'
debug_log = Dir::pwd + '/logs/debug_log'
access_log = Dir::pwd + '/logs/access_log'
# TestServlet class
class TestServlet < HTTPServlet::AbstractServlet
def do_GET(req, res)
res['Content-Type'] = "text/html"
res.body = <<-EOS
<html>
<body>
test,test,test.....
</body>
</html>
EOS
end
end
# create server
s = HTTPServer.new(
:Port => 2000,
:DocumentRoot => document_root,
:MaxClients => 3 ,
:ServerSoftware => 'Apache(Linux)',
:Logger => Log.new( debug_log, WEBrick::Log::DEBUG ) ,
:AccessLog => [
[ $stdout, AccessLog::COMBINED_LOG_FORMAT ],
[ File.new( access_log, 'w+' ), AccessLog::COMBINED_LOG_FORMAT ]
]
)
# mount servlets
s.mount( '/test', TestServlet )
# start http server
trap("INT"){ s.shutdown }
s.start
なんだかJettyみたいで, 好感持てるなぁ(笑
どうしてこのオブジェクトだけthisは自分自身じゃなくて,親のMovieClipを指しているのかよくわからん.ものすごく変なような気がするんですけど...
今日,小一時間ほどはまってしまったじゃないですか...(^^;
とりあえずSoftEtherって,プロトコルだけでも仕様を公開してほしいような気がしないでもない.
ヨドバシの書籍コーナーで購入.個人的にはSubversionのところがコンパクトにまとまっていてうれしいかも?
| プラットフォーム | 登場した年(リリース) | URL |
| Linux | 1991年 | http://www.linux10.org/history/ |
| Windows(NT系列) | 1993年 | http://www.microsoft.com/presspass/features/1998/winntfs.asp |
| Ruby | 1993年 | http://www.ruby-lang.org/ja/20030224.html |
| Java | 1995年(前身のOakは1991年) | http://java.sun.com/features/1998/05/birthday.html |
| .NET Framework | VisualStudio.NET 2002が発売されたのは2002年 | ? |
と,普段使ってるプラットフォームって大体10年ぐらい歴史があるわけで, .NETが浸透するのは, 2012年ごろなのかなぁ...なんて思ったり.(^^;
#プログラミング言語の歴史をみているとなかなか楽しい.
8月も終わりですなぁ..._| ̄|○
Tempura は、XML(XHTMLなど)で書かれたテンプレートと実データ(任意のオブ ジェクト)を結び付け、生きたXML文書を生成するための、いわゆるテンプレー トライブラリです。オブジェクト指向スクリプト言語Ruby用のライブラリとし て実装されています。
付属のサンプルを見たところいい感じだったので,ちょっと使ってみようかな?CGIでも使えるし,Divのフレームワークからでも使える様子.セッションはCGI::SessionとかDivについているTofuを使うような感じ.
ん?Divのセッションって,セッションがタイムアウトして消滅するときのイベントハンドラ(?)って登録しておくことできるのかな...?
↑って [ruby-list:38493] Re: デストラクタについてみたいにfinalizerを登録するような形でいいのかな?とりあえず,後で試してみるためのメモ.
◆ れですも [おつかれさまでしたー。ご無事のお帰りを。 ・・・いいなあ(ぼそ]
◆ たぬきん [普通に羨ましいよ?(´д`*]