技術系ネタはこちらで
以前はcocologを使っていたのですが、技術系の話題はこちらでしようかということで新設。Movable Typeって昔のバージョンと比べてだいぶ雰囲気が変わったなあ。インストールはすぐできたけど。
以前はcocologを使っていたのですが、技術系の話題はこちらでしようかということで新設。Movable Typeって昔のバージョンと比べてだいぶ雰囲気が変わったなあ。インストールはすぐできたけど。
ActionScript2.0でXMLを解析するのってノードを一個一個たどらなくちゃいけなく、とってもてかったるいです。そんなこんなで、ActionScriptでXpathを使えるようにするライブラリを作っちゃった人がいるんですね。
XPath4AS2
http://www.xfactorstudio.com/Actionscript/AS2/XPath/
これだけでも十分便利なんだけど、XMLを書き換えたりするときのためにラッパーを作ってみた。
ちょっと出遅れ気味なのですがMTASCをOSXにインストールしてみました。
MTASCはMotion-Twin ActionScript 2 Compilerの略でコマンドラインからjavacみたいにパブリッシュできるオープンソースのコンパイラーだそうな。MTASC 1.09からは、Flash8用にコンパイルできるらしい。std定義ファイルを入れ替える必要はあるらしいですが。っていうか、まだ本家が日本で発売してないじゃん。
このブログは、自分のFlash等々のスキルアップのために始めました。で、自分のスキルってどれくらいなのかなと思ったとき、端的にって今一歩のところで上級に届かないって所なのかなと思う。
例えば、だいたい最初に考えた仕様通りにコーディングできてとりあえず動くものは作れるのだけど、抽象クラスとかってなんなの?なんで使うのかいまいちピンとこないって感じです。そんなこんななんで、デザインパターンを入門してみます。
よくいわれる人種ネタで、「ドイツ人は歩く前に考え、イギリス人は歩きながら考え、イタリア人は歩いてから考える」というのがあります。(実際にはそうでもないような気がするけど)昔イギリスに留学してたというのもあってか(これも関係ないかもしれないけど)イギリス・スタイルがしっくりくる感じ。
本でじっくり学んでから行動を起こすより、なにかをしながら足りないところは本を読む。今関係ないところはあとで読むみたいなスタイル。すなわちこのブログみたいなスタイル。
何はともあれ、とりあえず手を動かしてみます。
使用するテキストは
「増補改訂版Java言語で学ぶデザインパターン入門」結城 浩
同僚のひろしさんお勧めの本です。これをパラパラめくって必要ありそうなところをjavaからAS2.0に書き換えていろいろ学んでしまおうというのがこのコーナーの趣旨。一回目は「Iterator(1つ1つ数え上げる)」です。
二回目はAdapter(一皮かぶせて再利用)です。これは普段からAdapterとか言う単語を知る前から自然に使ってたので簡単に理解できました。
このパターンの勘所は元々提供されているClassがあって(今回はBanner.as)クライアント(Main.as)が新しいインターフェース(Print.as)に適合させる必要がある場合、ずれを埋める役目(PrintBanner.as)すなわちAdapterを用意すれば元々提供されているClassを書き換えなくてもオッケーじゃん、便利じゃん。というところです。
やり方としては、「継承」と「委譲」というのがあって、いきなり非日常単語が出てくるのですが、ビビる必要はなし。要は「引き継ぎ式」と「お任せ式」ってことですね。それぞれのソースを書いてみました。
ということで第三回目はTemplate Methodです。
大枠の処理はスーパークラスで決めて細かいところはサブクラスに任せるってパターンですね。ストーリー的に言うと、頑固者の靴職人が、弟子に木型を渡して仕事をさせてるみたいな感じかな。
このパターンだとインターフェースを使用する意味がよくわかります。ということで早速コーディング。出てくる登場人物は三人です。
・AbstractDisplay.as(職人の親方です。displayメソッドを実装してます。)
・CharDisplay.as(弟子1です。)
・StringDisplay.as(弟子2です。)
・Main.as(お客さん。すなわち依頼主です。)
それではソースをみてきましょう。
うーむ。不覚にも感心してしまった。まじですごい。
http://www.microsoft.com/mscorp/innovation/yourpotential/main.html
やっぱお金があるところは違うよね。
Flash8も大幅にVideo関係のエフェクトを強化してくるみたいだし、これからWebで何かをプレゼンテーションする手段に映像的手法が重要な位置づけを占めてくることになるのかも。しかもテレビとか映画と違ってリニアなシーケンスじゃない感じの映像が作れる技術。だって文章読ませるより、ちゃんとしたナレーターがモーショングラフィックスと一緒に説明した方が伝わるもの。
動いて音が鳴るだけじゃ誰も感心しない世界。映像のクオリティとシナリオが問われる時代がやっとWebにもやってくる。とすると既存のグラフィックよりのデザイナーって厳しくなってくるのかなあ。まあそれはそれで今後も需要はあるのだろうけど。
はい、第四回目はFactory Methodです。
出てくる登場人物は5人
・Factory.as
・Product.as
・IDCard.as
・IDCardFactory.as
・Main.as
ひな形の役割のFactory.asさんとProduct.asはインターフェースがあるだけで、実際のインスタンス化はサブクラスのお二人、IDCard.asさんとIDCardFactory.asさんにお任せってパターンです。
今回は参考書の方はpackageを使ってまして、せっかくなんでActionScript 2.0版のほうも使ってみました。いままでpackageを使ったこと無かったんでちょっと手間取りました。
基本的にはフォルダを切ってそこに書いたクラスを放り込むような感じで、classの命名のところでhogepackage.hogeclassとするとオーケーみたい。importするときはjavaとかとおんなじで、
import hogepackage.*;
と、パッケージを使いたいclassの文頭に書いておくと、そのパッケージ内のクラスをパブリッシュするときに勝手にサーチしてくれる。まあ、importなくても、文中にhogepackage.hogeclassといった感じに書けば動くことは動きますが、面倒だし、パッケージをまとめとけば後々いいことありそうな雰囲気。というか、覚えておこう。
この辺は本題とは直接関係ないです。
では、順番にみてきましょう。
おつぎは、Singleton。インスタンスが作成されるのを一個のみにしたい時に使用するパターンですよ、と参考書には書いてありました。仕組み的には、コンストラクタをprivateにしてnew できないようにしちゃうパターンです。ま、作り方はあんま難しくないです。覚えておいて損はないでしょう。
確かに、絶対に一個しかインスタンスがないようにとプログラム的に制限してしまえば便利な場面もあるかも。ほかのインスタンスをコントロールするためのインスタンスとか。複数あると混乱しちゃうインスタンスとか。
ストーリー的には唯一無比のオリジナリティーを追求しているカリスマが俺についてこいみたいな勢いで仁王立ちしてる感じ?
ていうか、よけいわかんなくなった。
new できないのにインスタンスはあるってのが変な感じだけど、まあ、そんなもんなんでしょう。
本日追加したプロフィール欄の通り、本業ではWebデザイナー(兼ディレクター)として某ISPのお世話になっております。僕が作っているサイトに限らず世間一般ではお客様向けのサイトを作る際に、当たり前ですけど、公開時は100パーセント完成した(あるいは、と思われる)形で公開しているのが普通です。
ですが、Webサイトは書籍とかと違って、一度出したら終わりということはめずらしく、常に情報を更新したり、デザインを修正し続けるものだと思います。
だとしたら、発想を転換して最初の公開時は足りない所だらけのゆるゆるのデザインでスタートして、コンテンツを追加するのと同時にデザインの要素も追加したり、いらなくなった要素は削除していくような手法でやってみたら面白いんじゃないかと思いました。流動デザイン。よく言われる手法ですけど、実際に実践されているサイトはあんまりみたことないのでこのblogでやってみたいと思います。
MTのデフォルトのテンプレートでスタートして、すでにこの数日間で背景に影がついたり、日付がオレンジになったり、プロフィール欄が追加されたりしました。
こんな感じで、デザインの手法をデザインするって最近興味あります。
以前読んだこんな本をもう一度読み返してみたりして。
デザインのデザイン 原 研哉 (著)
ちまたではお祭り状態のAjaxですが、ライブラリ関連もあれこれ充実しつつあるんだなとMemo。
[翻訳]AJAX/JavaScriptライブラリまとめ
本業の方ではかなり厳しいクロスプラットフォームが要求されるので、いまいちAjax祭りにのりきれてないです。RIAっぽいのを作りたかったらFlashも機能が豊富だし、UIも柔軟に作れるし、ベンダー一社だから標準化もへったくれもないし、普及しまくりだし、更にはOpen化されてるし。ただあっち陣営の動向も今後は要チェックだよねということで。
米Microsoftの次世代ポータル「Start.com」が一歩前進 (INTERNET Watch)
まだちょっと使いづらいかなという気はする。。
動向が気になる人はいっぱいいるでしょう。
オープンソースのリッチクライアント Open Laszlo (3.0.2)をOSX(Tiger)にインストールしてみました。
ここで説明するまでもないけど、Open Laszloとは、Laszlo Systems社が開発したプラットフォームでXMLベースのタグとJavascriptでFlashをサーバー側で作れるものです。MacromediaのFlexとだいたい同じみたいなのだけど、こっちはオープンソースになってます。
探せばあるものですね。AS2.0対応のコードもある。
RegExp class for Flash 5 / Flash MX
あんまり使う機会ないかもですが。ちょっと重そうだし。(未使用です。)
ドネーションウェアらしいのでライセンスには注意。
今日発見した小技をメモ。
Q)
cssとdivを使ったサブメニューをswf上の領域に表示させようとするとムービーが全面に出てきてしまう。
A)
swfを表示させているobjectタグに <param name="wmode" value="transparent" />とパラメータ追加。(IE用) embedタグ内にwmode="transparent"と属性追加。(Mozilla系用)
z-indexをいじったり、onMouseのときにswfのレイヤーをhiddenにしたりとあれこれやってたのだけど、これで一発解決。
なんか普通になっちゃったかなあ。四隅がトンがりすぎちゃってあんまり好きじゃないです。アールがSonyっぽい。一度アップデートしちゃうとダウングレードが面倒だし。
初めてiTunesを見たとき当時マックが買えなくて歯ぎしりしたのを覚えてるけど、個人的には、あの感覚がなくなっちゃった感じ。機能はあれこれ便利になってるみたいだけど。
メールとかの親和性を考えてるのか。だとしたら、次期Mac OS XのLeopardもこの路線なのか。
うーむ。
いきなり更新頻度が落ちて喫茶マウンテンの形相を帯びてきたこのコーナーですが、まだ続けてます。ぜひ登頂したいところです。
今回のお題はPrototype(コピーしてインスタンスを作る)です。今回のパターンの意義として以下の3つがテキストに書いてありました。
1)似たようなクラスが大量にできてしまいそうな場合
2)複雑な過程を経てインスタンス化される場合
3)フレームワークとインスタンスを切り分けたい場合
クラス→インスタンス じゃなく、インスタンス→インスタンスというふうに生成するとコードがすっきりするし、クラス名がソースコードに書かれないので、部品としての結合が弱まって再利用しやすくなるらしいです。なるほど。と、いわれても、いまいちピンとこないです。まあ、とりあえず形を覚えて使えそうな場面をこれから意識的に探してみよう。
光の当て方から、てっきり17世紀の絵画っぽいプロモ(どんなん?)でいくのかと思ったら動画のほうは70年代〜80年代風のおもちゃのTVCMっぽいのね。(勝手なイメージだけど。)
もうヒートアップしまくりですね。(蚊帳の外)
なんか昔見た映画のあの台詞思い出した。
「敵がナイフならこっちは銃、一人病院送りなら一人安置所へ。それがシカゴのやり方だ。」
ほほう。あとでいじってみるかとMemo。
http://sourceforge.net/projects/flade/
via: FからはじめるFlash講座
ということはsodaplayとかも、Flashで作れちゃいそうですね。
Prossesing版のソースコードも公開されてるし。
7回目の今回はBuilder「複雑なインスタンスを組み立てる」です。複雑な構造のプログラムも大まかなところから細かいところへ分けて考えると楽にできますねというパターンです。一言でいってデカルトパターンということです。(謎)
このコード書いていて思い出したのは高校のときのデッサンの授業です。初心者の人はいきなりディティールの描き込みから入っちゃうのだけど、全体の構図やおおまかな明暗とかマッスのベースを作って、モチーフとの印象を確認しながら描くと対象に近づきやすくなります。今回はそんなパターン。
デッサンとかだと各工程が有機的につながってるからあまり良くない例だったかな。
例えば、、、
クライアントが「これ作ってね。」と依頼してきた。Directorはおおまかな仕事の進め方はわかるので、とりあえず「ほいきた。」と仕事を引き受ける。でもって実務は下請け業者(TextBUilder、HTMLBuilder)に流してるかんじ?平たく言えば中抜きやってる人。こんな商売なら、クライアントのニーズが変わっても下請け業者を切り替えるだけでよい→うまー!って。。
例えが悪すぎ。軽くへこんだ。
orz
FAMES:FAME+Swfmillとは、Flashout+ASDT(ActionScript Development Tool)+MTASC+Eclipse+Swfmillの頭文字をとったオープンソース(仮)のFlash開発環境です。
ばく自身、このブログのActionScript 2.0で書くデザインパターン入門のコーナーではMTASC+mi+FlashMXmodeでのんきにコーディングしてたのですけど、そろそろ限界になって来ました。ということで、思い切って開発環境を構築してみることにしました。
日本語で読める、まとまった構築方法(OSX Tiger版)を検索しても出てこなかったので、では、僭越ながらまとめておきますかというとで。今更ながらですが。
ちなみに、うちの環境はこんな感じです。
PowerMac G5 Dual 2 GHz
OSX10.4.2
1.5 GB DDR SDRAM
(うは、なんかちょと気恥ずかしい。うちの子紹介。)
さっき、FDTを入れてみました。
FDTのインストール via:fladdict
ぼくの環境ではEclipseのアップデートから普通にインストールできた。
むっちゃいいよこれ。一度使っちゃうと戻れん。
でも、有料なんだよなあ、これ。しかも結構いいお値段だったりする。
でもこれだけの機能だったら安い気もするし。。。うーむ。
かつての「もし世界が100人の村だったら」とか「電車男」とか、題は忘れてしまったけど、離婚危機の話みたいなノリをちょっと感じる。インターネットに住む人たちってこういう話に飢えてるんだなあと思った。
CEOのスティーブ・ジョブズ氏のスタンフォード大学卒業祝賀スピーチ
'You've got to find what you love,' Jobs says
へんな方向に行っちゃうとちょと怖いかなあとも思う。みんなを一斉に同じ方向ヘ向かせるパワーって、ある部分怖いところもある。
この話って別にその辺の飲んだくれたおじさんが言っててもぜんぜんおかしくないストーリーだったりするし、ジョブズだってその可能性は何度もあったはず。飲んだくれのおじさんがこういうこと言ってもだれも感動しない。
ただ、大きな違いは、直感を多くの人に伝えるパワーがある人ということなのだろう。だってマスコミュニケーションって分析能力だけじゃどうにもなんないし。スティーブ・ジョブズはまさにそれ。やっぱすごいよなあ。
この前、とあるコンサルの方にお話を聞く機会があった。その人が言うには、企業塾でのちに成功する人たちを傍で見てた経験から、一代で財を成す人のほとんどは分析思考型じゃなくて直感型だったそうだ。(あの、、分析型思考の研修だったのですけど。。。)
こんな、ばかげたビジネスプランなんか成り立つ分けない!ってまわりから叩かれても、ただただ信念だけて押し通しちゃう人たちだったらしい。
閑話休題。
死に対するくだりについて。
子供のころ、わりとまわりの人がぱたぱたと死んでしまう時期があって、悲しいというより結構簡単に人は死んじゃうんだなあという実感を持ってた。
明日死んじゃうのならつまんないことなんかしたくない。ましてや努力なんて言葉は大嫌い。楽しいことに一日中打ち込んでれば、それがどんなに肉体的にきつくみえてもそれは「努力」とは言わないはず。ぼくもずっとそう思ってた。実際にはつまんない事もやってますけど。ええ。
でも、ジョブズも言ってるとおり、その辺のバランスが崩れてきたら生活自体見直さなきゃなあというのは同意です。だって、誰だって持てる時間は限られてるもの。
和訳もあってワーキング・クラスっぽい雰囲気がほんのり伝わってきてカッコいいのだけど、せっかくだから原文を貼っとこう。
クロスプラトフォームでは3Dエンジンがサポートされない?Flash5レベルの機能?
それって本気なのかあ。
下の記事けちょんけちょんに叩いてて面白いです。
Sparkle v. Flash "the Showdown"
後追いだろうが、まねっこだろうが、力づくだろうがとにかく最後に立ってた人が勝ちとは思うのだけど、どうなるんでしょうね。
個人的には新しいのより、フラッシュのオープンソース勢にがんばってもらいたいのと、javascriptがもっと標準化されてほしいと思います。フィールドは全然違いますけど。
ActionScript 2.0のAbstract Factoryパターンでつまずき中。
プログラム自体が複雑というのもあります。orz
まあそっちの方は順を追っていけばよいはなしですが、問題はクラスを文字列から動的にロードする方法です。Javaで言うところの、forName(hoge).newInstance()のところです。
いろいろ調べてみると、
var InstanceName = new eval(classname)();
みたいな感じで実現できるみたいです。
ぼく自身、ハッカー志望というのでもぜんぜんなく、プログラミングとは100万光年くらい遠い世界に生きてきた(ついでに言えば数学とも折り合いが悪かった。)ので、この人が業界で有名人って全然知らなかったです(※)。けど、有名かどうかということでなく、この人の書く文章はとても響きます。
ぼくが、ActionScript 2.0でデザインパターンを入門するきっかけになった本を執筆された結城浩さんです。
その人が「プログラマの心の健康」という文章を書いていて、ずいぶん前に書かれた文章らしいのですが、最近読んで感銘を受けました。
先のジョブズのスピーチみたいに大仰なプレゼン力はないし、「世の中」は変えないかもしれない。けど、心に留まり仕事に対するあり方を少しずつ、でも確実に変える。
プログラマに限らず、デザイナーも含め、すべての締め切りと戦っている人は読むべし。
※その割には杉田玄白プロジェクトに個人的に参加した関係で名前だけは知ってたり。技術系フリーの翻訳家ですか?くらいの認識でした。同僚にデザパタ本を勧められたときは同姓同名かと思いました。また、翻訳はじめなきゃなー。あれは苦しいのになぜか面白い。
を初めて買ってみました。
http://www.mmedia.co.jp/
蜜柑じゃなかった、未完です。
今回は、前回でふれた、クラスを文字列からロードするときに厳密に型を指定しないとだめ問題が解決してないため未完です。
抽象的な工場にて使用する抽象的な部品プログラムとその使い方の大まかな流れを決めて、具体的な仕事は具体的な工場と、具体的な部品プログラムに任せるパターンです。
これをやっとくと、具体的なプログラムに変更を加える必要があるとき、パッケージとその工場にあたるプログラムの名前を変更するだけでごっそり実装を差し替えることができて便利ですねと。なるほど。
ただ、同じ種類の処理に変更する時は、さくっと変更できるけど、処理の種類自体を追加したいときとかはいろいろ縛りが出て来ちゃうので注意。
以下ソース。
やっと9回目。今回はBridgeパターンです。移植作業は簡単でした。
ポイントはクラスを機能と実装の階層に分けて橋渡しをさせるような作りにしておき、後々、修正するときにどっちの階層をいじるのか明確にしておくと混乱が少ないですねというパターン。ふーん。
とはいえ、機能と実装の階層とか言われてもよくわからん。テキストではともて手際よく解説されていたので、自分なりにわかる形でメモっておこう。なんか学校の講義ノートっぽくなってきた。
機能の階層
大まかな機能を持ったクラスを拡張させて新しいメソッドを追加するときにできる階層関係
実装の階層
インターフェースの具体的な処理を書くときに追加されたクラスとできる階層関係
だいたいこんな風に理解したのだけど、説明はへたくそです。実際問題、本買った方が早いです。
最近めちゃくちゃ気になる工事中。
http://www.comme-des-garcons.co.jp/
ちなみに、JAN Comme des garconsのページはあるんですね。ウェブでは服買えないですけど。
http://www.jan.comme-des-garcons.co.jp/top.html
ああ、今期も結構買っちゃったなあ。
セール待ちの品もいくつかあるし。。。
ていうか、前回のセールでカードの請求6桁来たときは病を感じた。
「Code」とか「Free Culture」とかの著者レッシグたんのBlogでアジりまくりの面白い記事があったので、要約だけでも訳してのっけとこうかと思ってモタモタしてたら、今日、日本語版が出てた。早いですねー。遅いですねー。<ぼく
CNET Japan:Google訴えられる
気持ちはわかるが、Google Printに関しては誰がどう見てもGoogleに分があるのではないか。と思った。
GoodPic.com:37signals Jason Fried氏の公演 「より少ないシンプルな機能で競争する」(via:Fladdict)
耳が痛い話ばかりです。
Ta-da Listを試しに使ってみたんですけど、かなりいけてるじゃないですか。これですよ、こういうの。
perlから、swfファイルを生成するモジュールを二つ見つけました。
SWF::File(日本語)
perl::flash(英語)
正直、テキスト入力してそれが反映されたswfが生成できてもあんまり意味ないかなあと思います(それくらいならFlash内で完結できるし。)が、perlと連結できれば可能性は広がりそうな感じがします。
ぼく自身はperlはウルトラ超初心者なので使えないですけど。
のやり方。なるほど。