« 2006年7月 | トップページ | 2006年9月 »

2006/08/31

自浄能力の目覚め?

ウェブ進化論でいう総表現化社会が実現しつつある。その一端が今回の事件見えているのかもしれない。

個人が運営する Blog ネット証券Blog2 の調査により楽天証券が Wikipedia の自社に関するエントリを改竄していることが判明した。この不正な編集が行われたという事実は Wikipedia の「楽天証券」エントリに即座に反映されたほか、Technobahn 社、livedoor ファイナンスでも取り上げられている。8月31日付けの朝日新聞でも報道された。Internet Watch によると、楽天証券の社員個人の判断で行われたことでその社員に対しては社内処分が下されたとのこと。

削除されたのは、項目「沿革」の2005年11月16日に金融庁から業務改善命令が下されたという事実と、楽天証券が提供するリアルタイムトレーディングツール「マーケットスピード」についてのエントリで「特徴」をまとめた部分の一節だ。

この事件についてはネット上で盛んに議論が交わされている。ちょっと外れるが、ここでわたしの考えも述べておこうと思う。

マーケットスピードの使い勝手に関する記述は、まぁ・・・、削除を認めてもいい。どういった UI を使いやすいと感じるかは個人の感覚に大きく依存するからだ。明確な数値化した根拠を示すことは難しく、中立性を証明することも難しい。

しかし、「システム障害が多く、業務改善命令が下された」という事実を削除し、なかったことにするのは認めるわけにはいかない。金融庁および東京証券取引所から処罰を受けたというのは変えようのない事実である。これを「無かったことにする」というのは歴史の改竄に他ならない。

閑話休題。

わたしが今回の事件で注目したのは、楽天証券がもみ消しに奮闘したことではない。こういったことは今までに呆れるほど報道されている。

わたしが注目したこと。それは、個人が企業の不正を暴いたということだ。警察や行政機関など特別な権威を持った機関がではなかったことに驚いた。特別な権威を持った機関に頼りっきりになるのではなく、ひとりひとりが不正を見つけ正そうとすること。これこそが大昔のエントリで書いた自浄能力だ。

ネットの発展によって総表現化社会が実現しようとしているからこそ、芽生えてきたのだろう。ネットがない時代、企業対個人というのはあまりに分が悪い対図だった。ネットが未発達だった時代でも、よほど大きなサイトでない限りはほとんど注目を集めることはできなかった。集まったとしても、企業から圧力がかかってつぶされてしまうこともあった。結果として、個人の声は広まることなく消えてしまっていた。

しかし、総表現化社会が実現しつつあることで、この対図は徐々に変わりつつあると思う。Blog を使って個人でも簡単に情報を発信できるようになった。Trackback で情報の結びつきを作ることもできる。そして、ある情報が真実であるかを検証することも容易になった。情報と情報、人と人の結びつきも強くなったから、どこか1つを潰したからといって、個人の声が消えることはない。むしろ、そうした行為は別の個人によって日の光が当たる場所へと晒されるのだ。今回の事件のように。

わたしは自浄能力によって、企業や機関の不正が少なくなってよりよい社会になればな、と思う。もちろん、間違った方向へ進んでしまえば江戸時代の五人組 (帝国主義時代の隣組の方が適切かな?) のようになってしまうだろう。そうならないように我々一人ひとりが注意を払わなければならないが。

| | コメント (0) | トラックバック (0)

2006/08/30

[web] お勧め Gmail ガイド

日本でも一般公開された Gmail。Gmail は便利なんだけど、タグ付けとかやったことがないユーザは、フォルダがないことや「スター」「アーカイブ」といった Gmail 独自の機能・インターフェイスに戸惑うかもしれない。

読みやすくわかりやすいガイドページがあればユーザの助けになるのだが、公式のヘルプはわたしが見てもちょいとわかりづらい。百聞は一見にしかず。アドバイスをするにしてもスクリーンショットが送れないとやりにくいし、受ける側も文字だけではわかりにくいこともあるよね。いいページがないかなぁと探していたら見つけました。

BroadBandWatch でGmail 特集記事が連載されています。 今のところ ( 2006/08/30 18:00 現在 ) は第2回までですが、Gmail の基本的な使い方はこの2つで大体わかると思います。

Gmail に申し込んだんだけど使い方がわからない、とお困りの方は参考にしてみてください。

| | コメント (0) | トラックバック (0)

2006/08/27

[ Python/LLRing] re: 君ならどう書く 2.0 -Round 1- 改

前回のエントリで書いたスクリプトには、LLRing ブログのコメントにあった美しいスクリプトにも、欠点がある。 それは N が大きくなるとメモリ消費量が膨大に増えてしまうこと。

原因は最初に 2 から N までの自然数を全て含む集合を作ってしまうことにある。

range(2, N )

この部分だね。このほかにも、結果を全て含むリストを作成してからそれを返しているのもメモリを大量に消費してしまう原因だ。これを解消したスクリプトを作ってみた。

def search_prime( max ):
    probable_prime = 2
    prime = None
    
    while probable_prime <= max :
        aNum = 2
        while aNum < probable_prime :
            if (probable_prime % aNum) == 0 :
                break
            elif( probable_prime % aNum ) != 0 :
                if aNum == ( probable_prime -1 ) :
                    prime = probable_prime
                    yield prime
        
            aNum += 1
        
        probable_prime += 1


if __name__ == "__main__" :
    import sys
    for i in search_prime( int(sys.argv[1]) ):
        print i,

このコードはエラトステネスの篩ではなくて、素数の定義そのものをもとに書きました。つまり、「素数とは、1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のことである」(Wikipedia「素数」より引用)です。言い換えると、1より大きな自然数 i について、i を 2以上 i 未満の自然数で割ったときの余りが全て 0 でなければ自然数 i は素数なのです。

2以上 N 以下の 任意の自然数 i 全てについて、上記の定義が当てはまるものを探しています。そして、当てはまるものが見つかったらそれを即座に yield しています。

この方法でメモリ消費量は抑えられたのですが、今度は処理速度が・・・ orz

Relative
re: 君ならどう書く 2.0 -Round 1-
re: 君ならどう書く 2.0 -Round3-

| | コメント (0) | トラックバック (0)

2006/08/26

[ Python/LLRing] re: 君ならどう書く 2.0 -Round 1-

お題は「100までの整数の中から素数を列挙する」こと。
素数を見つける方法といえばエラトステネスの篩。

primes = []

# Obviously 0 and 1 are not prime.
# This problem is equal that searching primes in a range( 2, 100+1 ).
set_of_int = range( 2, 100 + 1 )
dflag = {}
for d in set_of_int :
    dflag[d] = None

while( len( set_of_int ) ):
    # At the sieve, the top element of the list is always prime.
    # All integers included set_of_range[1: ] are devided by prime.
    # when a remainder is 0, the integer is not prime.
    for pp in set_of_int[1: ]:
        if( pp % set_of_int[0] ) == 0 :
            dflag[ pp ] = False

    for key in dflag.keys():
        if dflag[ key ] == False :
            dflag.pop( key )

    # remove the element that is identified as prime
    dflag.pop( set_of_int[0] )

    # append a prime to prime progression
    primes.append( set_of_int.pop(0) )

    # update probable prime
    set_of_int = dflag.keys()
print primes

めちゃめちゃ醜いです。美しさのかけらもありません orz
コメントを読まないと、たぶん何をやっているかさっぱりわからなくなるでしょう。

実は元エントリのコメントに素晴らしいコードがあるんですよ。残念なことにランキング投票の対象にはならなかったようですが、わたしはこのコードに一票入れたかったです。とても美しいコードです。

[p for p in range(2,100) if 0 not in [p%d for d in range(2,p)]]

最初に 2以上 100未満の整数の集合をつくり、その中の数 p に対して 2以上 p 未満の数で割ったあまりの集合を求めています。余りの集合の中に 0 がひとつでもあれば、割り切れる数があったということを意味しますからその数は素数ではないということになります。最終的に得られるリストは 2以上 p 未満の数では割り切れない数、つまり素数だけを集めたものになります。

リスト内包表記が使われたコードは「うわ、読みたくないなこれ」というような可読性がとても低いものが多いように思えます。しかし、このコードは実に簡単に理解できます。この点でも驚きました。素晴らしいです。

Relative
re: 君ならどう書く 2.0 -Round 1- 改
re: 君ならどう書く 2.0 -Round 3-

| | コメント (0) | トラックバック (0)

[Python / LLRing ] re:君ならどう書く2.0 -Round 3-

Python で書いてみる。引数として与えられた数値のうち最大の数値を '*' 20個であらわし、他の数値は '*' をつかった相対的な長さで表現することにしよう。

import sys

# descending sort
# because all argument are recognized as string,
# it is necessary transform str to int. After that,
# using sort( reverse=True ).
num_list = []
for arg in sys.argv[1: ]:
        num_list.append( float(arg) )
num_list.sort( reverse = True )

# Maximum is represented by ('*' * 20).
# others are represented by relative length with '*'.
args_and_str = { num_list[0]: '*' * 20 }
for anum in num_list[1: ]:
        relative_length = int( round(( anum / num_list[0] ) * 20) )
        args_and_str[ anum ] = '*' * relative_length 

# display graph
key_list = args_and_str.keys()
key_list.sort(reverse = True)
for akey in key_list:
        print "%g : %s" % ( akey, args_and_str[akey] )

本当は太字の部分は
#for akey in args_and_str.keys().sort( reverse = True ):
って一行で片付けたかったんだけど、これでは Iteratable object が返らないみたいだし*1、無理にやろうとすると複雑になりそうな予感がしたので3行に分割することにしました。

読みやすいコードを意識したのですがどうでしょうか?
他の方のコードを見ていると場違いな気がしてきました orz

*1: list.sort() は in place の Stable 置換なので新たなリストオブジェクトは返ってきません。None が返ってきます。

Relative
re: 君ならどう書く 2.0 -Round 1-
re: 君ならどう書く 2.0 -Round 1- 改

| | コメント (0) | トラックバック (0)

2006/08/25

[政治] 自らを助く社会を助けよ

404 Blog Not Found 国は自らを助くものを助く...か?より

さらに極論してしまえば、愛国者の存在を前提にしないと成立しない国に存在意義があるか、はなはだ疑問なのだ。あなたを愛しもしない国をあなたが愛さねばならない道理はないではないか。

鋭い指摘に笑いながら同意。

税率引き上げになぜ反発が強いのか。なぜ年金基金を納付しないのか。その答えがまさしくこれではないか。税を払ったところで政治家の懐に消えるかなにかの尻拭いに消え、年金基金を納付したところで生活保護より少ない ( つまり、最低限の生活なんて到底できない ) 額の年金しかもらえない。

リターンがないにもかかわらず、徴収する税を増加するといわれても納得するはずがない。政治家は必死で言い訳を垂れ流しているが、納税する側から見れば、実感できるリターンがなければそれは存在しないことと同じなのだ。となれば、納税しろという国の命令が無視されるのも当然といえる。

スウェーデンは税率が高いことで有名だが、それでも税を収めているのは世界各国から注目と賞賛を浴びるほどの社会福祉の恩恵を得ることができるからだろう。明確な、そして負担と釣り合うだけのリターンがあれば日本のようにぼろくそに叩かれることはないんじゃないだろうか。

国民が国のために存在するのではなく、国が国民のために存在するのだ。国民のためにならぬ国などに存在する価値はない。

| | コメント (0) | トラックバック (0)

2006/08/24

[教育]「権威の取り崩し」!= 教育

404 Blog Not Foundのエントリキャズムを渡る方法で Dan 氏が教育というものをどう考えているかを述べている。

必ず「なぜもっと楽な方法を使ってはならないのか」「なぜもっと力量を試せる方法を使ってはならないのか」という二通りの質問が必ず出てくる。私自身は、教育の手間の八割はこの質問への答えを準備することなのではないかと思っている。
わたしはこれに深く同意する。そして、これができなければ教育者たる資格はないと思う。教育では好奇心探究心を損なわせることなくさまざまなことを教えて教え子を開花させていかなければならないのだ。

しかし、現実の教育の場と呼ばれるものを見てみると、Dan氏が「一番やってはいけない」という方法ばかりがとられている。すなわち「権威の取り崩し」だ。

たとえば高校時代のある試験で、わたしは学校では教えられていない方法を使って解を導いた。数学と化学それぞれでのことだが、返却された試験用紙には両方とも×印がついていた。納得がいかなかったわたしは自称教師に理由を聞きにいったが、「俺はその方法を教えていない」で一蹴された*1

その後、大学に入ってから教授の講義で疑問に思ったことがあったので、質問をしたところ「俺の論は正しい。黙って聞いていろ若造が」と一蹴された。

さて、こうして権威を盾にねじ伏せられる教育を受けて「自分で考える力」が育つだろうか?わたしは育つどころか、「何か言うと叩かれる。お上のいうとおりに動いていれば、そっちの方が楽でいいや」と考える人間ばかりが育つ気がする*2。こんな教育では自律心が大きく欠如した人間が育ってしまうと思う。

授業の課題をググらせるのも誤りだが、フェルマーの定理にハマった子を放置しておくのもまた誤りだと私は思う。

( キャズムを越える方法 より引用)

わたしもこの通りだとおもう。そしてまた、積み木を使って何かを創っている教え子に対して「お前は間違っている。こうやるんだ。」とぶち壊してから教師が組み立ててしまうことも誤りだとおもう。たとえ間違っていたとしても「どうして上手くいかないんだろうね?」ということが大切なんだと思う。根気がいることではあるけれど、そうやって育んでいくことを教育というんじゃないかな。

*1: 後日談。後に記述式の公開模試試験で同じ方法で解を導いたところ、両方とも○がついていた。模試を実施した予備校に質問したところ、理論的には全く問題はないとのことだった。その後、その授業を昼寝と自習の時間に割り当てたのはいうまでもない。
*2: 事実、お上に盲目的に従うことを美徳とする人間のなんと多いことか。間違っていることであってもお上が言うなら首肯しろ ( ←実話 ) とは率直に言って馬鹿としか思えない。そもそも、たとえ自分が睨まれることになったとしても、間違っていることは間違っているといえることこそが本当の忠誠であり、あるいは相手を真に思いやるということであろう。

| | コメント (0) | トラックバック (0)

[教育] 3つの大切なもの

発端は日経新聞 2006/08/17 朝刊の第一面の記事とPOLAR BEAR BLOGのエントリ 「『答えがググれる世界』の教育」。新聞には「問題の答えを Google で検索してそのまま持ってきた小学生」の話が取り上げられ、それを基にネットで検索して答えを出すことへの批判が書かれている。

これに対して POLAR BEAR BLOG では、「『もっとも効率的』に目的を達成している。このことは評価するべきだ。ググれる世界では、検索しても見つからないようなことを教えるべき。ググれば済むことはそれでいいじゃないか」との見解を示している。一方で 404 Blog Not Found のエントリググらざる知肉キャズムを渡る方法で Dan氏は「『検索で答えを見つける』と『自分で考えて答えを導き出す』では結果は同じでも、得られるもの育つものが違う。子供の可能性を引き出すためにも自分で考えて答えを導き出させるべきだ」との見解を示している。

さて、わたしはというとどちらも必要だと思うのだ。ただし、比重でいうと Dan氏 が主張することの方が重要ではあると思う。POLAR BEAR BLOG でかかれていることは「道具があるならばその使い方を教えよう」ということで、Dan氏がいうのは「探究心を育てよう」ということだろう。しかし、この二つだけではなく、2つに加えて好奇心も育てることが必要だと思う。

現代社会では、多くの場面で物事を効率よくこなすことが求められている。この点で、「道具を使って効率よく目的を達成する」ことを学ぶことも必要なのだ。また、道具を使ってやってはいけないこと ( たとえばクラッキングとかね ) を教える必要もあるだろう。

しかし、道具の使い方を知っているだけ、つまり「この目的のためにはこの道具を使うんだ」を知っているだけでは未知の問題に対処できないし、よりよい道具を自分でつくることもできないだろう。

まだ誰も解を導いていない問題を解決したり、ある道具のもっと簡単なそれでいてより効率的な使い方をみつけたり、もっといい道具をつくるためには別のものが必要になると思う。まずは「なぜ?どうして?」という好奇心。そして問題の本質を見抜いて解を導こうとする探究心だ。

「これは***だから△△△なんだ」という本質を知っていれば、発展・応用して別の問題の解法に当てはめることができるかもしれない。たとえば Google が Ajax で世界を驚かせたように。また、問題の本質を見抜いて、「この道具には○○が欠けているんじゃないか。それを解決した道具を作ろう」ということで新しい道具を生み出せるかもしれない。Matz 氏が Ruby を生み出したように。そしてまた、「こういった使い方をすれば誰でももっと簡単に使えてよりすばやくできるようになるんじゃないか」ということに気付いて、ガイドライン的なものが生み出されるかもしれない。David Heinemeier Hansson が Ruby on Rails を生み出したように。

今あるものを発展させたり新しいモノを創ったりするには、好奇心探究心だけじゃなくてその道具の使い方も知らなきゃならない。また一方で、道具の使い方だけじゃなくて「どうしてそうなるのか」も知らなきゃならない。

道具の使い方。好奇心。探究心。これらはどれも必要なもので、どれも欠けてはならないのだと思う。

| | コメント (0) | トラックバック (0)

2006/08/17

[ Javascript ] 辞書(連想)配列の Key を取り出す方法

前のエントリで、JavaScript では辞書配列の Key を取り出して利用する方法がわからなくて苦労したのだが、havana から Key を利用する方法を教えてもらうことができた。その方法で作ったのが バード成功率計算ツール。havana, ほんとうにありがとう!

辞書配列の Key を取り出すにはどうすればいいのか。コード中ではイテレーションを利用して Key を取り出しています。たとえば、次のような辞書配列があったとしましょう。

var instruct = new Array();
instruct = {
    'provocation':{
        'Normal_Quality':       0.0,
        'Exceptional_Quality': 10.0,
        'Slayer':              20.0,
        'anti':               -20.0,
        'anti & Normal':      -10.0,
        'Slayer & Normal':     10.0,
        'Slayer & anti':        0.0
    },
    'discordance':{
        'Normal_Quality' :       0.0,
        'Exceptional_Quality':  10.0,
        'Slayer':               20.0,
        'anti':                -20.0
    },
    'peacemaking':{
        'Normal_Quality':        0.0,
        'Exceptional_Quality':  10.0,
        'Slayer':               20.0,
        'anti':                -20.0
    }
}

この中から 'provocation', 'discordance', 'peacemaking' を取り出したいときは↓
(ボタンを押すと実行します。)

var keys = '';
for( keys in instruct )
{
    paragraph.style.background = 'aliceblue';
    paragraph.innerHTML += (keys + '<br>') ;
}

イテレーションを使うとこのように Key の文字列を利用できるのです。バード成功率計算ツールのコードでは、実際には "provocation", "discordance", "peacemaking" はフォームから取得しています。そして、その内側にネストされた辞書配列の key をフォームの動的更新に使い、値を成功率の計算に利用しているのです。

| | コメント (2) | トラックバック (1)

2006/08/06

[ UO ] バード成功率計算ツール

このツールは現在 α 版です。バグなどを発見しましたらコメントかメールにてお知らせください。 データがないモンスターが結構います ( 特にパラゴン )。皆様からのデータの投稿をお待ちしております。
なお、ライセンスは GPL3 です。

今回はバードスキルの成功率計算ツールです。UO 系の掲示板を回っていると計算ツールを探しているユーザが結構います。その中には Java を使ったツールを紹介されて JavaVM 関係のトラブル ( XP には JavaVM が標準では存在しないのです ) に遭遇して困っている方がいました。やっぱりほとんどのユーザにとっては JavaVM って何のためにあるのかわからないから、「JavaVM 入れてね」っていわれても「なんで?」って思っちゃうんですよね。そこで変なモノを入れなくてすむ計算ツールを作ってみました。国際標準規格準拠を意識して作りましたのでほとんどのブラウザで動作すると思います。わたし自身は IE6.0 SP2 と Firefox 1.5.0.3 で動作確認を行っています。

バードスキル 音楽スキル 楽器

 
Select target

成功率

使い方
スキルを使用したときの成功率を知りたいとき

  1. バードスキルを選択してください。その下にある「input value」と書かれているボックスに、選択したスキルのスキル値を入力してください。たとえば、不調和でスキル値が 90 ならば --Select Skill-- から discordance(不調和) を選んでから input value と書かれたボックスに 90 と入力します。
  2. 音楽スキルのスキル値を入力してください。
  3. 使用する楽器のタイプを選択してください。たとえば高品質の楽器を使用するならば Exceptional Quality を選択します。
  4. ターゲットとなるモンスターを選びます。まず、モンスターが所属するグループを選択してください。次に、グループの右側にあるセレクトボックスから種族を選びます。ドラゴンの場合はグループで Reptile(爬虫類) を選んでから、その右側のセレクトボックスで dragon を選びます。
  5. 最後に calculate ボタンを押してください。成功率が表示されると思います。
  6. 続けて使用するときは、Reset ボタンをクリックしてください。

スキルを逆算したいとき

  1. バードスキルを選択してください。
  2. 楽器の種類 (NQ, HQ, 特攻、反特攻 ) を選択してください。
  3. ターゲットを選択してください。
  4. 成功率を入力してください。
  5. 音楽スキルを逆算したいときは、音楽スキルを空欄にしてバードスキルのスキル値を入力してから「Calculate」ボタンをクリックします。バードスキルを逆算したいときは、バードスキルのスキル値入力欄はそのままにして音楽スキルと成功率を入力して「Calculate」ボタンをクリックします。

たとえば、Balron Daemon に 音楽120 で HQ 楽器を使って不調和を試みたときに100% 成功する不調和のスキル値を求めたいときは次のように操作します。 まず Discordance(不調和)を選びます。次に Exceptional Quality を選びます。ターゲットは Daemon(悪魔族) → Balron Daemon の順に選択します。 最後に音楽スキルの 120 と成功率の 100 を入力してから Calculate ボタンをクリックします。

計算について

バード難易度、計算式については公式データブックを参考にさせていただきました。 公式データブックに載っていないデータについては自分のキャラでアニマルロアを使うなどで調べた平均を使っています。

不調和と PM については同じ計算式になっています。バードスキルを dpm, 音楽スキルを m, バード難易度を dif, 楽器ボーナスを sp とすると成功率 R は次の式で求められます。楽器ボーナスは標準品質は 0%, 高品質 10%, 特攻 20%, 反特攻 -20% となっています。

R = 50 + 2{ dpm - ( dif - 10 ) } + sp
これが基本の成功率で、音楽スキルが 100 未満のときはペナルティが、100 以上のときはボーナス補正が入ります。最終的には次のようになります。
m < 100 のとき R = [ 50 + 2{ dpm - ( dif - 10 )} + sp ] * ( m / 100 )
m > 100 のとき R = 50 + 2{ dpm - (dif - 10 )} + sp + ( m - 100 )

扇動の場合は、難易度は2つのターゲットのバード難易度の平均になります。つまり、扇動スキルを p, 第一ターゲットのバード難易度を dif_1, 第二ターゲットのバード難易度を dif_2, 扇動難易度を avg_dif とすると成功率 R の基本値は次の式で求められます。

R = 50 + 2{ p - (avg_dif - 5 ) } + sp
不調和、PM と同じく音楽スキルの値に基いて修正が行われ、最終的な成功率になります。
m < 100 のとき R = [ 50 + 2{ p - (avg_dif - 5 )} + sp ] * ( m / 100 )
m > 100 のとき R = 50 + 2{ p - (avg_dif - 5 )} + sp + ( m - 100 )

バグ?

Cocolog システムのコード自動修正機能によってレイアウトが崩れています(;´Д`) これはわたしには直しようがないです。直接 HTML を編集しているユーザにとっては有害でしかないのでオプションで無効にするようにフィードバックを送ったのですが反映される気配がありません。

更新履歴
2006.08.08
バード耐性を持った生物をターゲットに選んだときに「不可能」と表示するように修正。
2006.08.09
成功率からバードスキルを逆算する機能と、音楽スキルを逆算する機能を追加。 条件分岐がちょっと不安。「これっておかしくない?」と思いましたら遠慮なく連絡してくださいませ。
逆算機能を追加したらコードがめちゃめちゃ汚くなりました _| ̄|○il|!
最初から逆算機能も視野に入れて設計すればよかったと激しく後悔。
2006.08.14
オフィディアンバーサーカーとオフィディアン[General]を追加
2006.08.25
成功率が100%以上になったりマイナスになることがあったのを修正。
今まで気付きませんでした_| ̄|○il|! 2006.09.10
こっちも他のモンスに対する成功率がすぐに確認できるように変更。

謝辞

このツールを製作するにあたり、アドバイスおよび協力をいただいた havana 氏に感謝いたします。havana 氏の協力なくしてこのツールを公開することはできませんでした。本当にありがとう!

他の UO 計算ツール
テイム成功率・命令成功率計算ツール
攻撃速度シュミレータ

| | コメント (0) | トラックバック (0)

2006/08/04

[JavaScript]辞書(連想)配列のKeyが取り出せない?

次のような辞書配列があったとします。

d_hoge = {
    key1 : {
        nstd_key1 : val1,
        nstd_key2 : val2,
        nstd_key3 : val3 },
    key2 : {
        nstd_key4 : val4,
        nstd_key5 : val5,
        nstd_key6 : val6 },
    key3 : {
        nstd_key7 : val7,
        nstd_key8 : val8,
        nstd_key9 : val9 }
}
key1, key2, key3 ( もちろん str ) を使いたいとき、つまり value ではなくて Key のほうを取り出したいときはどうするでしょうか? Python なら次のように書きます。
d_hoge.keys()
とても簡単です。では、その内側にある辞書配列 d_hoge[ key1 ] が持つ3つの Key を取り出すにはどうすればいいでしょうか?これも簡単です。
d_hoge[ key1 ].keys()
実際に Idle 上で実行するとこんな感じになります。
>>> d_hoge.keys()
['key3', 'key2', 'key1']
>>> d_hoge["key1"].keys()
['nstd_key2', 'nstd_key3', 'nstd_key1']

JavaScript で辞書配列の Key を取り出すにはどうすればいいのでしょうか?
前置きが長くなりましたが、こちらが本題です。調べたのですが無理なようです。現在 JavaScript でちょっとしたツールを作っているのですが、それにはどうしてもこれが必要なのです。でも、できません。泣きそうです。どなたか教えてください (T-T)

2006.08.17
解決しました。 エントリはこちら

| | コメント (0) | トラックバック (1)

2006/08/02

[ webdev ] Aptana は Dreamweaver の代わりにはならない

404 Blog Not Found 経由で Webdev 用のフリーソフトIDE Aptana を知る。JavaScript をつかった開発にも使えるらしい。ちょうど JavaScript の IDE を探していたところなので早速 Aptena のHP に飛んでチェック。が、、、System Requirements に JRE v1.42 の文字が・・・

Java 大嫌いなわたしは JavaVM そのものがインストールされていないし、する気もない。 どうやら Aptana とはご縁がなかったようだ。

Dreamweaver も JavaScript 開発に使えるっぽいのでこっちはどうだろうと思ってチェックしたらなんと価格が5万!Visual Studio Pro が C#, C/C++, VB, J#, ASP.NET の開発に使えて10万程度であることを考えると、JavaScript だけに5万はあまりにも高すぎる気がします。

¥1万以内 ( $100 以内 ) の JavaScript 開発環境はないかしら・・・

2006.08.07 追記

使わずにどうこう評するのはよくないといわれたので使ってみた。まず最初に感じたのは、やっぱりその重さ。Eclipse ほどではないけれど、起動に時間がかかりすぎ。Visual Studio よりも時間がかかります。起動した後も、動作にもっさり感がある。げんなりしながらも1つくらいは書いてみることに。ところが致命的な問題が発生。800行を越えた辺りでしょうか、キーを打ち込むたびに「スタックオーバーフローが発生した。終了することを推奨する。詳細はログを見ろ」とメッセージが表示されるのだ。全く編集することができない。

率直に言って、話にならない。Dreamweaver の変わり?到底無理だろう。現在 Dreamweaver を使っていて価格以外に不満がないならそのまま Dreamweaver を使い続けることをお勧めします。

| | コメント (0) | トラックバック (0)

« 2006年7月 | トップページ | 2006年9月 »