明日5時起きか… 寝よ。 |
今月は moziila 強化月間。 みんなが mozilla 使ってるっていうのはいいことかもしれない。っていう話。 これまで、windowsではIE使ってたけど、この前なんとなくここ (タブ拡張とかで有名なpiroさんところの日記6月分) とか読んでて、特に5日に分の「シェアが低いことがmozillaを駄目にする」っていうのが心に残って、 それでなんとなく windows でも Moziila の nightly 使ってみたら、なんかサクサク動いて気分良くなって、 思い付くままに BBS に書きこんだのが 6月30日 3時47分 の奴(そのうち流れて消えてるだろうけど)。 「Gecko = Netscape6.0 = 超遅い」というイメージはもはや微塵も無い。 多くの人から見ればわざわざIEからmozillaに乗り換える理由は無いように見えるかもしれない。 しかし、そうではないのである。っていう話を書こうと思うけど、あんまり一気に書くとネタ切れするのが目に見えるので ちょっとずつ書いていこうと思います。(続く) |
二日更新してないのって久し振りだなぁ。 このくらいのペースがいいかもしれない。 ケツイ5ボスまで行った。見た目の割に避けれるな。あと数ミリだった。 続き。 フリーソフトの場合はただ単に使うというだけでもそのソフトウェアに対するフィードバックになるのではないだろうか。 フリーソフトの質は企業ソフトウェアに比べると開発者のやる気というものが大きく影響してくる。 で、使用してくれている人の数っていうのはそのやる気を上下させる最も大きな要因の一つだろう。 だから、ただ単に「mozillaを使っている」というだけでもmozillaの質を上げることに貢献できるんじゃないだろうか。 それに、フリーソフトウェアの場合は利用者が増えることは単純に開発者が 増えるということにも繋がってくるし。 でも、それに対して、IEをはじめとする企業ソフトウェアは元から100%シェアを取ることを目標につくられているわけで、 シェアが増えたところでソフトウェアの質が上がるとは思えない。 それに、たとえそのことが開発者に対してフィードバックになったとしてもそれが効果あるのは次のバージョンなわけで、 やっぱりそれはまた金を払って買わないといけない。 ついでに言っておくと、次のIEは新しいwindowsに付いてくるしくみになっている。 無料ダウンロードは無い。(これ(ZDNN)ね) で、今なんだけど、mozillaのシェアはわずかしかない。上昇していく気配さえない。 こんな気配でもmozillaは機能、性能ともにIE並なんだから、シェアが上がれば mozillaの質はIEを超えるんじゃないだろうか。まあ、そんな単純な話じゃないかもしれないけど。 だから、今、多少の苦難を乗り越えてでもmozillaを使ってさえおけば、 まあ、そのうちIEもOperaも越えた最高のブラウザが生まれるんじゃないかっていう話。 もうちょっと続きます。 |
今日の織姫様。![]() クリスマスはその前日の24日から25日にかけての夜なのに 七夕は当日の夜だから話がややこしくなるわけで。 いや、ややこしくないけど。 すげぇ。 |
ケツイ一周できた。 なんかすごく感動した。エスプレイド ALLした時も大往生一周したときも 少しだけ感動したけど、今日は少しじゃなくて、なんかすごく感動した。なんでかわからんけど。 RPGはクリアしたらなんか虚しくなるけど、 シューティングはクリアしても虚しさなんか全然無くて、ただひたすら感動できる。 そのへんがシューティングのいいところかと。 けど、ここ見てる人も含めて周りにシューティング話が理解できる人がいないっていうのはけっこう辛い。 シューティングはとにかく初心者がプレイしづらいというのがあるんだけど、 そういうのを乗り越えて、みんなもっとシューティングやろーよ。っていう話。 ここであれだけmozilla使えって書いたのに姉は普通にIE使ってた。 大半の人は別にIEにこだわる理由とかも無いけど、わざわざmozillaに乗り換える理由もないし、 結局色々面倒だからIE使い続けるのだろう。 で、まだIE使ってる人はBBSに素直に名乗り出ておくこと。 もし名乗り出る人が多かったらmozillaの話は終わろうかと思うし。 読んでてもつまらないよね。 たまにはネガティブな文章も書いとかないと。web日記っぽく。 |
四 なんかスランプ気味だけど、描かないようになるとどんどんやばくなっていくので。 あと、雨描こうとしたらなんかパラソルへんべえ思い出してググってみたらなんか けっこう見つかったのでwwwって便利だな。って思った。 |
![]() 線の描きかたを少し変えてみた。 あと、左上から光当たる確率が高過ぎだと思う。 もうちょっとなんとかしよう… 最近全然コード書いてないな。 絵の練習とコード書くのとゲームするのとがあって、どれも毎日 やっとかないとすぐなまってくるんだけど、やっぱり3つとも同時に力入れるっていうのも 無理なわけで、なんかリンクの冒険のレベルの概念みたいだと思った。 webの規格なんかにおいて、Microsoftは結構大きな影響力を持っている。 W3Cが規格を決めても IE がその機能を実装しなければ普及しないし、 逆に IE が独自規格の独自機能を持ったとしたら、それは暗黙の標準となってしまうかもしれない。 この辺の議論はまあ、色んなとこで行なわれてるわけなのだが、 ただの一ユーザーにとってはそんなこと「それがどうしたん?」程度なわけで、結局それでIEは使い続けられる。 フリーソフトウェアっていうのは全体的に宣伝が弱いのではないだろうか。 企業っていうのは宣伝のために一部門作って、そこにも結構な量の投資を行っているわけで、 それに比べたら、フリーソフトの宣伝っていうのは一部の人しか読まないメーリングリストにリリース情報が投げられて、 それからそれを見た人の一部がChangeLogまで読んで、またその中のごく一部の人が 技術面からしか書いてないChangeLogをわかりやすくした文章をweb等でひっそり公開とかその程度なわけで、 これではどんなに優れていてもシェアを勝ち取ることはできない。 で、宣伝するのもmozillaへの貢献の一つかもしれないと思ったので、やっぱりmozillaの話続けます。 |
2-2のボス見た。 2-2に入ってから長いなぁ… 2-1は結構簡単なのに… ![]() 続き描こうとしたけど思い付かなかった。 いや、投げやりとかそういうのでは無いです。 あと、うちのPS2はうちに来てから起動時以外ポリゴン片表示したこと無い。PS2なのに。 左利きの人ってマウス左に持つからキーショートカットって使いにくいかもしれない。 一応覚えとこう。 mozillaはブラウザとして見た場合はフリーという以外は普通かもしれない。 でも、mozillaはそれだけじゃなくて、XUL実行環境及びXPCOM提供者としても 使えたりとかもする。 XPCOMのほうはC++とMozillaの内部構造わかってないとどうしようも無い部分があるけど、 XULのほうはなんちゃってアプリケーションとかMozillaの機能拡張なんかが 簡単に作れたりするので結構遊べるかもしれない。 糞ややこしいAPIを覚える必要なんかなくて、 簡単なユーザインタフェース用のXMLを書いて、あとは挙動をJava Scriptで書けばいいだけ。 と思って、XUL勉強してたけど、RDF読み込みあたりがよく分からなかったので挫折中。 (あかんやん…) 参考 - XUL研 役立つ日本語資料はここから辿れば十分かと。 |
四 ノーコメントで。 集計消そうかな。 あと、うちのPS2もようやくポリゴン表示しました。 僕達世代より上のオタ達っていうのはやたら練られて伏線張りまくりなストーリーは 好きだし、ゲームシステムは練られれば練られるほど、複雑なら複雑なほど楽しいと感じるし、 やたら気合いの入ったムービーなんかも見てて「あーすげーなー」とか感動するけど、 小学生っていうのはああいうのってどう感じるんだろうか。 僕らは物心ついた時にはまあ、子供にも理解できるスーパーマリオっていうのがあって、 それで、オタとして成長した今はゲーオタが満足できるぐらいのクオリティの高いゲームが やたらあって。 っていう風に考えると、僕達世代のゲーム好きっていうのは幸せかもしれない。って思った。 要するに、前も書いたけど、最近ゲームしすぎ。 3億1500万まで行った。大往生。 Windows 98 サポート終わったんか… なんとかしといてください > 姉 |
XULの動作をプログラムする為に使われる言語は JavaScript である。 ていうことで、JavaScript言語自身について調べてみる。 webページの飾りとして流す程度に勉強したことはあったが、 ひとつの言語として勉強したことは無かったような気がする。 JavaScript はその名前とC-likeな書式のせいで、直接は Java とは関係無い。 とわかってはいても、どうしても Java のサブセットみたいなイメージを持ってしまいそうになる。 けど、そうではなかったのである。 JavaScript が持ってる哲学、というか、基本的な考えかたは結構他の言語には見られない物だ。 C-likeな書式になるとどうしても静的な感じがするが、JavaScriptはスクリプトと名付けられてるだけあって、 かなり動的というか値的な動作が可能になっている。 例えば、匿名関数なんかも、 function () { return 4; } // 4 を返す匿名関数非常に簡単に書けるようになっているし、これを利用して、関数を操作する高階関数なんかも function map( a, f ) { var result = new Array; var len = a.length; result.length = len; for ( var i=0; i<len; i++ ) { result[i] = f(a[i]); } return result; } var ret = map( i_array, function(a) { return a*a; } ); // 配列の中の物を全部2乗したものの配列が返ってくると、いうふうに自然に書け、そして使えるのである。 さらに、驚くことにJavaScriptにおける関数はクロージャなのだ。 関数自身が定義された時の環境というものを保持し続けているのである。 これを利用すれば、 function WithPrivate( num ) { var i = num; this.getNum = function () { return i; } this.setNum = function (num) { i = num; } this.pub = "public"; } var w = new WithPrivate( 3 ); dump(w.getNum()) // 3 を表示 w.i = 0; // エラー。 w には i というメンバは無い w.setNum(100); dump(w.getNum()); // 100 を表示のようにプライベートメンバを定義する事も可能なのである。 あと、継承の際に prototype という他では見られないユニークな方法を使ってるんだけど、 この辺はまた明日で。 てなわけで、webサイトの為に適当に作られたかと思われたただのスクリプト言語が 他では見られない独特な実装であるっていうのはなんかすげーなー。って思った。
|
昨日のん、liタグとdlタグ間違えてた…恥…(修正しました) いつもと違うゲーセンに久し振りに行ってみたところ、大往生とケツイが 式神2と大往生(黒) に替わってた。 で、大往生(黒)をプレイ。 一応説明しておくと、大往生(黒)っていうのは神にしかクリアできないと言われた 大往生を達人だったらクリアできるレベルまで下げたバージョン。まあ、十分難しいけど。 黒いほうのいいところは2週目まで行かなくても緋蜂様に会える1週モードというものが存在するということ。 で、なんとか5面まで行けて、緋蜂様と初のご対面。 「まあ、ゆーてもブラックレーベルだしなー。いくら緋蜂って言っても全然無理っていうことは無いだろ」 最初…超針弾 → 絶対無理 次……超高速弾 → 絶対無理 次……回転弾 → 絶対無理 ていうことで、あっさり死。 いや、やばい。動画とかで見てたのと自分がやるのと全然違う。超高速弾とか速すぎ。無理。 回転弾とか見ただけだったら簡単そうなのに。実際はなんか隙間とか思ってたよりずっと狭い。 てなわけで、やられたけど楽しかったです。 惜しむらくは BGM が完全に式神になってたことか。(音大きすぎ > 式神) 今日、web巡回してたら、piroさんのところで、自分のサイトへのリンク発見。 他人の日記からリンク張られるの始めてかもしれない。 で、テンション上がってます。 昨日の補足。 prototype について調べてたら、昨日のプライベートメンバーの事についてもうちょっと深く考察されたサイト を見つけたんで紹介しておきます。 Internal Properties Emulation(日本語) で、昨日の単純な方法だと、関数オブジェクトが大量に生成されてしまうかもしれないらしい。 でも、こういうのって実装によってはうまく処理されるんじゃないかなー (そうじゃないと関数型言語の魅力が半減してしまう)と思って、 MozillaのJavaScriptインタプリタ のソース拾ってきて、適当に js_fun_toString っていう関数いじって以下のコードで試したところ、 a.ret3 と b.ret3 は全く同じオブジェクトだったんで、Mozilla では問題無いと思う。 function Functions( ) { this.ret3 = function () { var aho; aho = 4;return 3; } this.retNum = function (x) { return x; } } var a = new Functions(); var b = new Functions(); print( Functions ); for ( var i in a.retNum ) { print ( a.retNum[i] ); } print( a.ret3 ); print( b.ret3 );IEも多分大丈夫だと思う。調べようないけど。 さて、JavaScriptにおけるオブジェクトシステムっていうのは結構独特である。 まず、クラスという概念が無い。全てはコンストラクタで決まるのである。 function Person(name,age) { this.name = name; this.age = age; } var john = new Person("john", 19); // john は名前が"john"で年齢 19 才 print( john.name + " is " + john.age " years old."); // → john is 19 years old.で、ここまではまあ有名なのだが、継承となると、あまり知られていない。 多分理由は継承という概念があまり必要では無いからだろう。 型無し言語では is-A 関係とかいうのがそもそも必要で無い。 foo.nanika_function()というような場面において foo に要求されるものは nanika_function という関数を持っているということだけだ。 fooの型は一切問われない。 そういうことで、JavaScriptの継承システムは非常に単純な物となっている。 prototypeチェーンと呼ばれるものだ。 書くのが面倒 & 眠いので、自分で調べてください→ googleさん function Base() { this.ret3 = function () { return 3; } } function Derived() { this.ret4 = function () { return 4; } this.__proto__ = new Base(); } var foo = new Derived(); print( foo.ret4() ); // → 4 print( foo.ret3() ); // → 3大体で理解して下さい… 機構が単純だから、いくつか継承の方法があるけど、上のが一番直観的かと。興味ある人は昨日のリンク(devedge)へどうぞ。 何がすごいかっていうと、オブジェクトの親クラスの付け換えなんかも行えるっていうこと。 JavaScriptってすごいなって思いました。 Flashに使われてるAction Scriptもこの方法使ってるみたいです。豆知識に。 |
昨日久しぶりにキーボード叩かなかったわけだが、なんか今日一日不安だった。 依存症というやつかもしれない。 携帯とかで二日くらい、人と会話しなくても一日くらいは大丈夫だと思うのだが、 コンピューターさんには毎日触れないといけないようだ。 なんか話題が逸れるけど、 こことか こことかで 触れられてるので少し関数ポインタとクロージャについての話。 簡単に言うと、クロージャ(closure)っていうのはいわゆるCとかの関数ポインタより偉い関数オブジェクト みたいなもんです。クロージャは関数オブジェクトになれるけど、Cの関数ポインタはクロージャにはなれない。 GCCの拡張なんですが、C言語でローカル関数を定義して、それを使うことができます。 ↓のような感じです。 typedef int (*func)(int i); func ret_fun() { int ret_3(int i) { return 3; } return ret_3; }こういう場合は、まあ、前回のJavaScriptの例と大差ないです。 ret_funで返ってきた物を呼ぶと、3になります。 しかし、次の場合はどうでしょう、 func make_adder( int i ) { int adder( int n ) { return i+n; } return adder; } int main() { func adder_3 = make_adder( 3 ); printf("%d\n",(*adder_3)( 5 )); /* ここで望むものは '8' */ return 0; }期待される adder_3 の機能は引数と3を足したものを返すことです。 実際 adder_3 は int adder_3( int n ) { return 3 + n; /* i は 3 に置き替わるはず */ }になりそうです。 しかし、上の例の結果は未定義。どうなるかわからないのです。 なぜなら、make_adderの中の変数iはmake_adderが終了すると同時に死んでしまうからです。 これに対してクロージャは adder_3 自身が責任を持って変数iの寿命まで管理する。 そのへんがクロージャのほうが賢いところです。 function make_adder( i ) { return function (x) { return i+x; } } var adder_3 = make_adder( 3 ); print( adder_3(5) ); // 確かに '8'ってな感じです。あんまりわからないですね。 クロージャは schemeとかML, Haskelなんかの関数型言語寄りのマイナー言語にしか実装されてないんで、 あんまり有名じゃないです。けど、関数型言語信者は大抵クロージャ大好き人間でもあるので、そういう人の前では 「ああ、クロージャってなんか凄いのはわかるけど、結局それで役立つの?」 なんていう発言は人間関係を良くする上で避けたほうがよいかと思います。 カリー化の話 なんかクロージャについて探してたら見つけた。カリー化じゃなくてbindなんだと思うけど…。あんまり詳しくないんでわからん。 途中まで普通の話なんだけど、最後の変態具合がおもしろかった。 #include <stdio.h> #include <stdlib.h> #include <string.h> const static char bind_data[] = { 0xff, 0x34, 0x24, /* pushl (%esp) */ 0xc7, 0x44, 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, /* movl xxxx, 4(%esp) */ 0xb8, 0x00, 0x00, 0x00, 0x00, /* movl xxxx, %eax */ 0xff, 0xe0 /* jmp *%eax */ }; void *bind( void *F, int A ) { char *func = malloc( sizeof(bind_data) ); memcpy( func, bind_data, sizeof(bind_data) ); *((int*)(func+7)) = A; *((int*)(func+12)) = (int)F; return (void*)func; } int sub( int a, int b ) { return b-a; } typedef int (*subber)(int i); /* 減算器 */ subber make_subber( int i ) { return bind(sub,i); } int main( ) { subber s = make_subber( 3 ); printf("%d\n", (*s)(7) ); return 0; }i386 gcc だとこんな感じか。VCでも動くかも |
とりあえず、XULやろう。 って考えて、それで書いてたら、ちょっとしたスクリプトの動作確認するために、 エディタでスクリプト書き換えて保存して、ブラウザリロードっていうのも面倒だな。 って思って、インタラクティブにJavaScript実行できる環境をXULで書いたら便利なん違うかな。 て思って、JavaScript制御用のXPCOM(nsIJSRuntimeService)見つけて、見つけたまではいいけど、なんで インターフェース作れなくて、原因がわからなくて2時間くらい悩んでたら、nsIJSRuntimeServiceはなんか not scriptableとか書いてた。 んで、「うわ…二時間無駄にした…」とか思った次の瞬間、「JavaScriptってevalあるやん。」 って思い出して、eval使ったら10分くらいで作れて凹んだ。 |
携帯電話がjpegのデコードエンコードしてるの見る度に負けた気分になる。 最近は動画とかも作れるし。 とりあえず、機能的にはJS Consoleで十分なので、それ使うことにしよう。 ちょっと使いにくいというだけなので。 あと、chrome.rdfの為のファイル群を作るときの面倒さはなんとかならないのか。 せめて、エラーがあった時はその旨を表示するくらいしてほしいような。 ![]() しかし、web上の絵における男率の低さはなんだろうか。 いや、男ばっかりよりは女ばっかりのほうが随分ましだと思うが、しかし、何だ、 ちょっとあんまりではないか。 まあ、理由はオタ絵描きっていうのは男女問わずなんとなく絵を描いたら女を描いてしまうからとか そのへんだろう。 あと、日本では男のほうが多いって昔聞いたような。 遺伝子の都合上成長するまでに死ぬ確率が女より高いから男のほうがたくさん生まれる、 でも、医学が発達して死ななくなったから結果として男のほうが女より多いとかそんな話だったような気がする。 |
四 コンロじゃないけど。 JavaScriptのテスト環境なんだが、最低
これ xpiとかはないんでxulファイル開いてください。 履歴がちょっとおかしい。原因はわかるけど、解決方法がわからん。 とりあえず思ったのが、
あと掲示板長い文書書くと非常に使いづらいことがわかった。 変えようかな… ただ、掲示板に付いてるカウンターはJが始まってからのカウントをずっと刻み続けてるのでなんだかもったいない |
こーいうゲームがあるんよ。 二人プレイも可能。で、今日なんかカップルらしき男女がやってた。 いったいどういう状況だったのか。 男のほうがオタで無理矢理やらせたという可能性も考えたけど、あんまりオタっぽい人じゃなかったし、 女のほうがノリノリで男のほうが嫌々やってる感じだったし、 クイズのジャンルを選んでくださいっていうところで、「ゲーム」っていうのジャンルじゃなくて 「夏」っていうほう選んでたし。 奇妙な光景でした。 で、その近くで大往生やってた二人組がおって、二人プレーなんか珍しいから ぼーっと見てたんだけど、片方は初めてだったようで。 二面ボスの発狂見て、 「こんなん絶対無理やって。怒首領蜂大往生、糞やん。」 って叫んでたのが印象深かったです。一昨日のやつ更新。 どこが変わったかはスクリーンショットで察して下さい… ここ読んで 「もうちょっとHTMLちゃんと書かなあかん」 と思って、僕は大丈夫か調査してみる。center とか font とか使ってそうだしな…bash-2.05a$ find -name '*.html' | xargs grep -i '<font' | wc 3 32 1013 bash-2.05a$ find -name '*.html' | xargs grep -i '<center' | wc 9 27 690あかんやん… 気が向いたら直しとこう && 今度から気を付けよう… DOCTYPEきちんと書いとけば、いけないHTMLは表示できないようにできるのか…メモ。 参考 |
あ、特に書くことないな… xpcomの色々にListenerとかobserver渡す場合のオブジェクトをJavaScriptで作れるのか? いや、試してみればいいんだけど。 XPCOMのそういう部分ってC++で書いてあるんだけど、C++の継承とかって動的に行うとかって不可能じゃないのか? もしできるんなら、どうやってるの? 間違ったときはCONVERT_ERROR(だったっけ?)とかいうのが飛んでくるんだから型チェックも行ってるんだと思うんだけど。 あー…わからん… サーバー落ちてるとか、DDNSが死んでるとかして、あるDNSが使えないことが一回でもあると、 そのサーバーにある全てのファイルのURLオートコンプリートの記録が消えてるような気がする。 別に問題無いんだけど。 |
ブラックレーベルで2-4まで行けた。残機持ち越しっていいね。ハイパー中も弾ゆっくりなのっていいね。
多分白いほうでやったらなまってるだろなー なんか、色々やってるんで更新だらだら。 学校行くよりバイト行くほうが疲れるってなんだろな。 バイト行ってるよりだらだらしてるほうが有意義に感じるってなんだろな。 なんかテスラさんの話やってた。 テスラっていうと、磁束密度の単位を思い出す。 磁束密度って何に使うのかは全然思い出せないけど。 4年も電磁気勉強したのって何だったんだろうな。いや、実際殆んど寝てたけど。 ![]() 最近紙に描いてないからなー。今度描いたときはアンドゥしそうになるだろなー。 そう、ジオシティーズなんだし、 これ使おう。 ezwebよりは使い易いと思うし。 |