« 2007年11月 | メイン | 2008年01月 »

2007年12月 アーカイブ

2007年12月02日

LiveCoding#5で披露してしまった「任意のコードを実行するBookmarklet」について

「任意のコードを実行するBookmarklet」をひょんな事からLiveCoding#5で公開してしまった。割り込んだ形になってしまったdanさん、すいませんでした。もう何年も前に作った物だから、今ではもっと出来の良い似たようなツールが沢山ある。例えばWindows Script Debugger、Firebug、この間のJavaScript第5版読書会#1で知ったJash等々。ただ、これらの優れたツールより優れた点をほんの少しであるが持っている。
インストール不要
Bookmarkletなのでインストール不要。レジストリもさわらない。アプリケーションのインストールが許可されていない環境でもBookmarkletなら許可される可能性が高い。
ほとんど全てのブラウザで実行可能
クロスブラウザで実行可能。IEの508byteの問題にも対応している。
名前空間を汚さない
新規ウィンドウ上に環境を作るので名前空間を汚さない。親ウィンドウ上には、HTMLタグを追加しないしJavaScriptの変数を宣言したりもしない。
特にインストールしなくても良い点はメリットが大きいのではないかと思う。

第13回まっちゃ139勉強会

まっちゃさん主催の「第13回まっちゃ139勉強会」に参加してきました。でも、勉強会の内容の公開は基本的に禁止らしいのです。「なんで? もったいない」と思っていたのですが...。話を聞いていてわかりました。無理です。公開なんて無理すぎます。悪用されたときが怖い。テーマが「管理者のためのセキュリティ勉強会」なので、いわば脅威に対抗する方法、こんなものが広く知られてしまっては対抗策が対抗策ではなくなってしまいます。でも書きたいですね。でも我慢です。技術者のモラルを守らねばなりません。
夕方以降に予定があったので早退となってしましました。機会があれば懇親会にも参加したいですね。
主催されているまっちゃだいふくさんはじめ、スタッフの方々、発表者の皆様、ありがとうございました。

LiveCoding#5に参加してきた

Hackerのイベント、LiveCodingに参加してきた。LiveCodingとは与えられた課題を制限時間内にCodingするというもの。観客からのツッコミもあり大変盛り上がった。
LiveCoder
はじめに、「丸ビルRSSリーダー」のnotoyonさん。Takeshi MAX(FxUGとてら子の共催イベント)で初見。FlexではてぶViewerを作成。Flex面白そう。あれだけのコード量でここまでできるとは思ってなかった。当然、経験がものをいうのだろうけど。

次はyharaさん、Zuの人。初めてあってから少ししか経っていないけど既に顔見知り。ZuはフローチャートをAAで書くと、それを解析し実行してくれるというプログラム言語。Zuの処理系をCoding中に修正する等、言語開発者ならではのLiveCodingだった。

Kanasan.JS#1で初めて会ったikegamiさん、神と呼ばれているらしい。時間内には終らなかったけど、最終形は画像を回転するというもの。Haskellの名前は知っていたけどCodeは初めて見た。Lispっぽい? これは勉強になった。

飛び入り参加のサイロスさんはMiyakoでアニメーションを作成、昔のMacromedia Directorという認識でいいのかな。誰とは言いませんがネギ振っていた。サイロスさんのプレゼンテーションソフトも実はいい感じ。

wintermelonさんはTwitterViewer、がんばれG4。LeopardってG4でも充分使える。G4が固まったように見えた時の会場の緊張感、そして動き出した時の歓声が笑えた。「それりん」の原案はwintermelonさんらしい。

oxyさんの倉庫番、この人が一番凄かった。他のLiveCoderはHelpを見たり完成形を事前に用意していたりしたが、全くなし。そしてタイピング速度の凄まじい早さ。ACM/ICPCの人らしい。これが世界クラスか、凄まじ過ぎる。typoもほとんどないし、何よりCodingに迷いがない。

404のdankogaiさん、飛び入りです。「パソコン誰か貸して」と声が上がったので、自分の物を生け贄に差し出した。何とその後突然、JavaScript解説者に引っ張りだされてびっくり。すいません、danさんが全部自分で解説したので一言も声を発していません。アマグラマー向けのJavaScriptの実行環境の解説、アマグラマー向けに特化しているので404に直接埋め込んでの実装だった。過去に自分が作ったものと動きが似ていたので、ちょっと(ちょっとか?)乱入してしまった。「パソコンを貸し出し」=>「解説者」=>「自分の実装を見てもらう」、こんな流れを誰が予想したのか。

ZEROProxyの人、伊勢さんが飛び入りした。ZEROProxy使ったはないのでよく分からなかったが、ONEProxyはプラグインってことか? そもそもW-ZERO3をProxyに使おうかという発想に脱帽。
参加者
最近「配列の初期値を指定する方法」でTBをし合っているThousand Yearsの人や、cotocotoの中の人に声をかけられてびっくりした。実はThousand Yearsの人はJSmartyの人と知って尚びっくり。cotocotoが目指しているものを聞いてまたびっくり。
解説者の中ではYuyaさんのものがウィットがきいていて一番面白かった。頭の良さが滲み出ている。
Hacker
LiveCoderも参加者も凄すぎ。今後もやって欲しい。今度は事前準備一切なしで、LiveCoding直前に課題が突き付けられるようなのも見てみたいな。課題の発表の後にLiveCoder募集も面白いかもしれない。多分なんとかなるよ、皆Hackerとその予備軍だし。
Staff & Sponsor
主催のujihisa氏、スタッフの方々、そして会場をご提供頂いたスポンサーのグッデイの皆様、素敵なイベントの開催、ありがとうございました。特に社内を会場として使わせて頂いたグッデイ社、日常業務に少なからず影響した事かと思います。本当にありがとうございました。

Kanasan.JS#2やります

関西のJavaScriptの勉強会「Kanasan.JS」、先週から募集しています。
cotocotoで受付しています。

2007年12月03日

今更ながらSourceViewerの使い方

現versionではソフトタブと2タブのハードタブに対応しています。
前準備
まず、Sourceのテキストエリアにcodeを貼付けます。その後、Runをクリックして下さい。解析が始まりますので、行番号を含むcodeが表示されるまでお待ち下さい。Sourceをクリックするとテキストエリアの表示の可視・不可視が切り替わります。
使用方法
画面左側に表示されている行番号に注目して下さい。行番号が濃くコントラストがはっきりしている行と、そうでない行があります。はっきりと表示している行番号をクリックすると、それより後の行のインデントが深い部分が非表示になり、行番号が赤く変化します。赤くなっている行番号をクリックすると非表示にした部分が再度表示されます。

2007年12月08日

Kanasan.JS#2終了しました

参加した皆様、長丁場お疲れさまでした。感想等のトラックバックはこちらのエントリーにお願いします。
2007/12/12追記
こちらで受け取っているトラックバックは全て反映させています。現段階で反映されていないものは、何らかの理由で受信できていません。イベント直後はトラックバックやコメントは頻繁に確認しています。もし、24時間以内に反映されていないのであれば受信できていないので、トラックバックの再送信をお願いします。

2007年12月23日

Kanasan.JS#2のアンケートのまとめ

Kanasan.JS#2のアンケートをまとめます。
インターネット配信
多くの参加者が、インターネット配信を今後も続けて欲しいと望んでいるようです。
特にLingrを用いたChat、そしてUstreamを用いた映像配信に評価が集まりました。
今回の会場にはインターネット環境がなく、ネット環境は参加者が持ち込んだ機器に依存する形でしたので実現できるかどうか不安でしたが、参加者からご協力を得ることで可能となりました。
インターネット配信で狙っていた「会場外からのツッコミ」も多く行われました。会場外では音声を聞きながら一緒にCodeReadingを行っている方もいるようでした。会場でされた会話や質問に対し会場外からChatで返答、またはその逆があったりで、非常に有効にコラボレーションができたと思います。
Lingr・Ustreamは全て記録するようにしていますので、参加者の復習だけでなく参加していない方やこれから学習し始める未来のプログラマに、僅かですが資産を残せたのではないでしょうか。
プロジェクタ
プロジェクタの存在も好評でした。
質問に挙がったCodeを参加者が実行し、その結果をLingrに貼り付けることが多々行われました。プロジェクタでChatをスクリーンに映写していたため、パソコンを持ち込んでいなかった参加者とも意識を共有する事ができました。
ただ、プロジェクタが繋がったパソコンではほとんどCodeの実行を行わなかったため、実際の挙動を参加者に見てもらうようなことができませんでした。アンケートにも「もっと実例を見せて欲しい」との声があがっていました。
プレゼンテーション
「前回のKanasan.JS(プレゼンター:kanasan)」と「Prototype.js:version1.5.1.1と1.6の違い(プレゼンター:nanto_viさん)」というプレゼンテーションを行いましたが、かなり好評だったようです。特にnanto_viさんのプレゼンテーションは、高いレベルを保ったまま綺麗にまとめられており大好評でした。nanto_viさん、本当にありがとうございました。
#1をまとめていて思ったのですが、どうしても大変濃い内容となってしまい準備にかなりの時間を要してしまいます。また、レベルがかなり高いためJavaScriptに対する相当な理解がないとまとめ切れません。しかも#2では8時間程CodeReadingをしておりとてもまとめきれるような内容ではないのかもしれません。次回はこのような形でのプレゼンテーションは不可能なのではないでしょうか。残念ながら#3以降に初参加となる方々には、過去の参加者のBlog等を参照して貰うしか方法がないのかもしれません。
次回以降のプレゼンテーションの内容は未定です。30分から1時間位で何か喋りたい人の募集やLightning Talkの実施を考えるべきかもしれません。
多言語の話
JavaScript第5版読書会#1でもそうでしたが、今回も多言語の話を問題視する声がありました。読書会は初心者・初級者が多いため、多くの意見が寄せられました。今回のCodeReadingの参加者は中級者・初級者中心だったので読書会よりは少なかったです。そもそもPrototype.JSはRubyの影響を非常に受けており、Ruby on Railsに同梱されています。余談ですが、Prototype.JSの作者であるSam Stephenson氏はRuby on Railsの開発チームの一人らしいです。このような状況下では他言語の話、特にRubyの話が出てくるのは必然だと思います。しかし参加者が皆Rubyを知っているわけではないため、説明が必要ではないかと思います。今後はその時の話の中心にいる人に説明をお願いするようにします。
12時間
今回の一番の失敗がこれです。前回のCodeReadingの進捗が余りにも遅かったため、時間枠の拡大を考えたまではよかったのですが、はっきり言って拡大しすぎました。会場の使用枠は、午前・午後・夜間に分かれており、前回はひと枠だけでした。今回は午後と夜間と考えていたのですが、終日で利用した場合とほとんど利用料が変わらなかったため午前からとなりました。しかし、CodeReadingはかなり体力を消耗するらしく、かなり休憩をはさんだのですが、終了間際には皆フラフラで本当に大変でした。
机の配置
JavaScript第5版読書会#1での失敗を生かすために、開場早々に机の配置換えを行いました。CodeReading中は質問が局所化せずに全体で共有する事ができました。しかし、午前のフリートークでは逆に机の配置が災いして、会話がよそよそしくなってしまいました。また、机を馬蹄型に配置した時に、壁際ぎりぎりになってしまったため、移動が非常にしにくくお菓子を取りに行くのも一苦労するような状態になってしまいました。お菓子の置き場所は重要かもしれません。

2007年12月25日

JavaScriptでRubyのMixInみたいな事を実現する

JavaScriptでRubyのMixInのようなものを実現する方法をふと思いついたので書いてみる。
既に誰かが何処かで書いているかもしれないがとりあえず。
MixIn用の処理例
//MixIn用
function MixIn(){}

//MixInの準備・既にMixIn済であればfalseを、MixInの準備完了であればtrueを返す
MixIn.readyMixIn=function(){
    var mixInMethod=arguments.callee.caller;
    if(!this._mixIn){this._mixIn={};}
    var check=this._mixIn[mixInMethod];
    if(!this._mixIn[mixInMethod]){this._mixIn[mixInMethod]=true;}
    return !check;
}

//ユーティリティメソッド追加
MixIn.addUtilities=function(){

    //何度もMixInしないようにする
    if(!MixIn.readyMixIn()){return;}

    arguments.callee.caller.prototype.displayThisValue
    =function(){
        var val="This value is "+this+".";
        alert(val);
    }

}

//比較メソッド追加
MixIn.addComparisons=function(){

    //何度もMixInしないようにする
    if(!MixIn.readyMixIn()){return;}

    arguments.callee.caller.prototype.isBigger
    =function(num){
        return (this>num);
    }
    arguments.callee.caller.prototype.isSmaller
    =function(num){
        return (this<num);
    }
    arguments.callee.caller.prototype.isEqual
    =function(num){
        return (this==num);
    }

}
MixInをしている例
function TestClass(arg){
    this._arg=arg;
    MixIn.addComparisons();
    MixIn.addUtilities();
}
TestClass.prototype.toString=function(){return this._arg.toString();}
TestClass.prototype.valueOf=function(){return this._arg;}
MixInのしたメソッドの使用例
var o=new TestClass(10);

alert(o.isBigger(9));       //true
alert(o.isSmaller(8));      //false
alert(o.isEqual(10));       //true
alert(o.isEqual("10"));     //true
o.displayThisValue();       //"This value is 10."

var o=new TestClass("c");

alert(o.isBigger("a"));     //true
alert(o.isSmaller("b"));    //false
alert(o.isEqual("c"));      //true
alert(o.isEqual("d"));      //false
o.displayThisValue();       //"This value is c."

2007年12月27日

私にとっての過渡期 - 「ウェブ時代をゆく」を読んで

今更ながら梅田望夫氏の「ウェブ時代をゆく」を読んで思った事を書く。
大前提として、社会的地位や経済的金銭的については言及していないことを断っておく。名誉でもない。あくまで単純に人間として高みを目指したい、技術者としてどう生きるのかということを念頭に読んで頂きたい。
若者が年配の人を見た時に羨むのは経験である。逆に年配の人が若者を見た時に羨むのは余りある時間である。
両者はトレードオフの関係にある。年配者はこれまでに時間をかけ経験を積み、そこで得た社会的地位等の立ち位置で、日々の時間の消費配分が決まってしまう。
若者には経験がないが未来がある。また、立場に影響しない可処分時間がある。この時間を使って若者は経験を培っていくのである。
蓄積された経験があるのと、豊富な時間があるのとではどちらが有利なのだろうか。これは単純には言い切れない。時間を有効に利用して得た経験であれば当然経験が勝る。時間を無駄に浪費してきたのであれば、余命が長い方が良い。梅田望夫氏も説いている通り、時間は人間に平等に与えられた唯一無二の資産なのだから。
しかし、これには無視できない前提がある。若者も年配者も同一時代で生き抜く場合はその通りである。
では、今現在はどのような時代か。このBlogを読んでいる人には言うまでもないが、いわゆる「こちら」側のこれまでの価値観の時代と、「あちら」側を主とするこれからの価値観を持つウェブ時代、この二つの時代の過渡期にあたる。人によって認識は違っていると思うが、私は初期から中期に差し掛かっているような段階と考えている。
ここからは私個人の考えを展開する。
私は団塊ジュニア世代である。私にとって今の時代というのはどのような時代なのか。私と同世代の人間はどのような立場に置かれているのだろうか。
私は「廃校の決まった高校の最後の新入生」と思っている。あと数年でなくなってしまうような場所の最後の人間、部活でがんばろうにも団体競技は部員不足で大会にも参加させてもらえない。どれだけがんばろうが上級生には経験上太刀打ちできない(もちろん実社会であれば年齢を大きく飛び越えて上を目指す事も可能ではあるが、何十年も飛び越せる事は稀だ。人生を高校三年間に圧縮して考えた場合、ひとつ上の学年に追いつくのもやっとであろう。)。
では他の高校はどうか。「新設された高校」はどうなのだろうか。初めての新入生は在学中は(教諭を除いて)ずっと最年長である。人間関係も模索の連続だし、学校の雰囲気も自分達次第である。伝統はないが自分たちで作っていく事ができる。部活にも決められた規則がない。高校生という狭い視野や価値観では、全てが未知数である。不安もあるが将来があり未来がある。
「廃校の決まった高校の最後の新入生」である私はどうすべきか。先輩への恩義もある。義理もある。高校とのしがらみもある。居心地の良い雰囲気もある。しかし未来がない。転校するのも煩わしい。しかし転校するには今がチャンスである。「新設された高校」の最初の新入生は、まだ人間関係の模索中である。今なら伝統の構築にも参加できる。来年、いや一学期が終る頃には人間関係が構築されてしまっている可能性がある。もしかすると仲間意識が強くてしばらくの間は疎外感を感じてしまうかもしれない。「廃校の決まった高校」の中で一緒に転校してくれる同級生を見つけるべきか。同級生は皆、学外が見えていないので転校なんて全く考えていない。同級生の目を学外に向かせようとしても全くもって無関心である。やっと見つかった頃には二年生になっているかもしれない。その時には伝統の構築がほとんど終ってしまっている可能性もある。じゃあ同級生を見捨てるのか。強引にでも今すぐ一人で転校すべきなのだろうか。
「廃校の決まった高校」の最後の学生となるのか、「新設された高校」の最初の学生となるのか。私はどうすべきなのだろう。
Google