Silverlightプロフェッショナル・セミナー。
先日開催されたSilverlightプロフェッショナル・セミナーには、たくさんの方々にご来場いただきありがとうございました。
今回のセミナーは僕自身にとっても貴重な経験となりました。また同時に、まだまだ勉強不足であることを痛感しました。
精進していきますので今後ともよろしくお願いします。
さて、今回のセミナーのお土産はVisual Studio Robotに登場するロボットのフィギュアでした!

なかなかのクオリティで、不安定ながらちゃんと立ちます。
当然ながら非売品ですが、Visual Studio Robotのゲームを通じて入手できるかもしれません。
是非プレイしてみてください。
告知: Silverlightセミナー。
僭越ながら、5月28日開催のSilverlightセミナーでトークセッションに参加させていただくことになりました。
Visual Studio Robot開発時の裏話を、開発中の画面を交えながらしようと思っています。
当日はお土産もあるようなので、是非参加してみてください。
http://www.creativevillage.ne.jp/pec/seminar_forum/detail?id=1085
近況。
先月終わり頃からAppleのダウンロードサイトでDashboardウィジェットのピックアップに取り上げていただき、おかげさまで多くの方に訪問していただいています。どうもありがとうございます。全然更新してなくてすいません。
まだまだIn the Moodの使い勝手を良くしたいとも考えていますが、最近はすっかりSilverlightでの開発に身をやつしています。
ちょこちょこと備忘録にも書いてきたSilverlightですが、XAMLというXMLベースのマークアップ言語で記述するだけでかなり滑らかなアニメーションもできて、当初思っていたよりも面白いですね。
とはいえ、複雑なコンテンツを作るにはやはりそれなりのツールが必要になってくるんですが、Macだけでは環境が整わず、Windowsも併用しなければならないのが悩みの種です。
そんなこんなで制作しているSilverlightコンテンツの記事が、CGWORLD 5月号にちょっとだけ掲載されました。興味のある方はご覧になってみてください。
備忘録: Silverlightプラグインのアンインストール。
Windowsでは「プログラムの追加と削除」からアンインストールできるが、Mac OS Xでは以下のファイルを手動で削除して、ブラウザを再起動する。
/Library/Internet Plug-Ins/Silverlight.plugin
備忘録: Silverlightプラグインの挙動の違い。
- Windows/IE:
HTML要素を重ねても、Silverlightコンテンツが最前面に来る。
改めてやってみたら問題なかった。 - Windows/Firefox:
Silverlightコンテンツ同士を重ねると、例え静止していても重なった部分がちらつく。 - Mac OS X/Safari:
特に問題はない。
SilverlightコンテンツにHTML要素を重ねると、テキストは前面になるが背景がSilverlightコンテンツより背面になってしまう。
スタイルにposition:absoluteを設定すればOK。 - Mac OS X/Firefox:
opacityスタイルを1以外に設定したHTML要素と領域が重なると、どちらが上にあるかに関わらずSilverlightコンテンツの内容が表示されない。
重なっている部分だけでなく、1ピクセルでも重なっていると全体が表示されない。
音は聞こえるのでストーリーボード自体は再生しているみたい。
元々半透明のpngは重なっても問題ない。
追記: 2008.02.19
Silverlightコンテンツの上にHTML要素を重ねるとき、HTML要素のスタイルにposition:absoluteを設定するとどのブラウザでも問題ない。備忘録: Silverlightでローディング中にプログレスバーを表示するために。
Downloading Content on DemandDownloaderオブジェクトを使えば、指定したファイルを何%読み込んだかを取得したり、読み込み完了時のイベントを拾えたりするが、XAMLファイルを指定してもそこに記述されているリソースまでは含まれない(XAMLファイルを読み込み終わった時点でcompletedイベントが発生してしまう)。
この場合は、XAMLファイルとそれが参照しているリソースをZIPアーカイブにしておいて、DownloaderオブジェクトでZIPアーカイブを読み込むようにする。
追記: 2008.02.11
ZIPアーカイブ内の各リソースは、XAMLファイルでSourceを指定してあっても、DownloaderオブジェクトのcompletedイベントハンドラでいちいちSetSourceを呼んで関連づけないといけない。function ContentLoaded(sender, args)
{
var content = sender.getHost().content.createFromXamlDownloader(
sender, "main.xaml"
);
sender.findName("container").children.add(content);
content.findName("img01").setSource(sender, "images/img01.jpg");
content.findName("bgm01").setSource(sender, "sounds/bgm01.mp3");
}
このとき、MediaElement(オーディオとかビデオ)オブジェクトにXAML上でSourceを指定してあると、SafariやMac版のFirefoxでは何故か再生されない(MediaFailedが発生する)ので、空にしておかないといけない。(Imageオブジェクトは問題ない)
<MediaElement x:Name="bgm01" Source="" AutoPlay="False"/>
追記: 2008.02.19
Imageオブジェクトは問題ないと思ったけど、構成ファイル一覧で見るとNot Foundになっているので、やはりSourceは空にしておいた方がいいかもしれない。正月早々。
遅ればせながら、あけましておめでとうございます。
今年もどうぞよろしくお願いします。
さて、新年早々メインで使っているMacBookのHDDがフッ飛ぶというトラブルに見舞われました…。
元々80GBだった内蔵のドライブを160GBのものに換装して使用していたのですが、大晦日まで何の問題もなかったのが、1日夜に突如HDDからカラカラと異音が!
ヤバいと思い再起動をかけましたが、時既に遅く、かろうじてBoot CampのパーティションからXPが立ち上がるだけで、Mac OSの方はウンともスンとも言わなくなりました。
幸い、ホームフォルダだけは定期的にバックアップしていたので、大事には至りませんでしたが、日頃のバックアップの大切さを思い知りました。
とりあえず元の80GBのドライブに戻して、Macworld Expoで食指が動くものが何も発表されなければ(笑)、また新しくドライブを買い直そうと思っています。
そんな中、Sifter 1.1.5をリリースしました。
新たにRuby版を公開していますが、本格的にRubyを使用したのは今回初めてです。
Perl版をベースにしたのであまり苦労せず組むことができましたが、唯一引っかかったところは、0や空文字列が論理的にfalseとならないところですね。
それらは他言語ではよくfalseとして扱われているので、すべてがオブジェクトであるというRubyといえど、同様であった方が分かりやすいんじゃないかという気がします。
(確かに、オブジェクトとしては存在していて、その持つ値が0や空文字列というだけと考えると理にかなってはいるんだけど、trueやfalseもオブジェクトだし…)
Rendezvous Proxyの代用はNetwork Beacon。
LeopardでRendezvous Proxyが使えなくなったため、代替の方法を検索していたら見つけました。
これで職場でのBGM環境も整って、ほぼLeopardへ移行できた感じです。
こうして見ると、Leopardで問題になったところはほとんどファイアウォール絡みのような気がします。
LeopardのセキュリティはVista以下と揶揄されたり、新しいファイアウォールの設定も使いづらいし、ここだけは改悪だなあと思います。
Synergy on Leopard
Leopardで動作しなくなったSynergyですが、-fオプションをつけて起動することでサーバもクライアントもとりあえずは動作しました。
/usr/local/synergy/bin/synergys -f -c /etc/synergy.conf &起動するとファイアウォールの警告が表示されるので、Skypeと同様にファイアウォール絡みの問題のようですね。
Leopard その2
Leopardで動いてほっとしたもの- SheepShaver (そんなに使う機会はなくなっているものの…)
- Internet Explorer (まだまだ動作確認に必要)
Leopardで動かなくなって困っているもの
- Skype (なぜか2回目以降起動しなくなる)
- GrowlMail
- Synergy (コンパイルしなおしてもだめだった…)
- Rendezvous Proxy (職場のBGMはこれ頼りなのでどうしたものか)
- 空模様 widget (とりあえずWeather widgetで代用)
…と、まだまだ安定しない環境ですが、こんなものでしょうかね。
家でも職場でも困っているのがSynergyで、とりあえずこれがなんとかなってくれれば落ち着きそうです。
そういえば、まだTime Machineは試していませんでした。
今までバックアップに使っていたHDDは、PowerMac G3 DT233(Panther)に接続してネットワークで共有していたもので、Time Machineには使えませんでした。
Leopard以外の共有ボリュームも使えるようになるといいんですけどね。
Leopard
早速、Mac OS X 10.5 Leopardをインストールしてみたので、一日使ってみた感想でも。- Terminalの環境設定で、ウィンドウのテーマを選べるようになった。特にいつも使っていた黒バック半透明に白文字のテーマが、デフォルトであるのが嬉しい。
- Finderの表示オプションで、アイコン表示時のグリッド間隔が変更できるようになった。
- Finderの環境設定で、「拡張子を変更する前に警告を表示」をオフにできるようになった。Tigerのときはこれが鬱陶しかった…。
- Dockのスタックはイマイチ。以前はフォルダを右クリックで階層をたどれるようにしていたので、それができないのが微妙。違う使い方をすればいいのかもしれないので模索中。
- QuickLookは素晴らしい。PowerPointのドキュメントも見られる。
- Webクリップも便利。ニュースサイトなど普段あまり能動的に見に行かないので、Webクリップにしてほかの用事でDashboardを開いたときにちらっと確認できていい。
- Mail.appで、進行状況をメインウィンドウに表示できるようになった。
- In the Moodの背面のボタンが崩れた…。
それから、何となくTigerよりメモリを食ってやや重めな感じがします。気のせいかもしれませんが。
ちなみにCore Duoの初代MacBookにクリーンインストールしています。
In the Mood 0.6.0
In the Mood 0.6.0をリリースしました。
元々の目的は、起動時などにSkypeへの接続に失敗することがあったバグの修正と、ウェブから取得していたGrowl通知用のデフォルトアイコンの内包でしたが、せっかくなので、Twitterにもムードメッセージを送信する機能を追加してバージョン0.6.0としました。
automaticをオンにしておくと自動でどんどんtwitterしてしまうので、やりすぎるとちょっと鬱陶しいかもしれません。
今回Twitterに対応するにあたって、パスワードの保存先はkeychainがいいだろうということで、widgetからkeychainに保存する方法を模索していました。
コマンドラインからsecurityというコマンドでKeychainへのパスワードの追加、参照ができるようでしたが、既存のパスワードの変更の仕方が分からず断念。
結局、ADCのドキュメントにあったソースをそのままwidgetpluginに流用して、widgetへのインタフェースを付けただけでわりと簡単に実現できました。
ところで、リリースしたのは昨晩遅くでしたが、眠かったので公開するだけして寝てしまいました。にもかかわらず、朝には新しもの好きのダウンロードさんに掲載していただいてました。うーん、素早い!
いつもありがとうございます。
Sifter 1.1.2
PHP/Perl用のテンプレートエンジンSifter 1.1.2をリリースしました。
バグフィックスとちょっとした最適化だけですけど。
この手のテンプレートエンジンは他にも数多くありますが、そもそも開発したきっかけは、patTemplateがあまりに使いにくく、Smartyも複雑で覚えることが多く、シンプルで簡単に使えるテンプレートエンジンが欲しくなったからです。
数年前から自分の仕事で使って、少しずつブラッシュアップされて、ようやく今の形になりました。
Sifterは、実行の度にテンプレートを解釈してオブジェクトのツリーを作成し、それを根元から再びたどって出力をしています。そのため、あんまりパフォーマンスはよくないです。
Smartyのように、スクリプト化されたテンプレートファイルを出力するようにすればパフォーマンスを上げることができるので、次期バージョンではそんな仕様を組み込もうと思っています。
まあ、あんまりファイルを出力して散らかすのもどうかと思ったり、パーミッションなど面倒な設定がいらずに使えるというところも売りであったりするので、オプショナルな機能ということで。
Skype 2.6.0.72 BETA
Skypeの新しいベータバージョンが公開され、設定の詳細に「ムードメッセージにiTunesの曲を表示」オプションが追加されました。
開発を始めて早半年、いつかは来ると思っていた日が来たという感じです。
標準の機能となったことで、In the Moodはその役目をほぼ終えましたが、表示するフォーマットを変更できたり、よく使うムードメッセージを切り替える機能もあるので、まだ存在意義はあるかな〜と思います。
今後は、とりあえず再生中の曲のアートワークをアイコンに表示できるようになるまでは開発を続けようと思ってます。
widgetpluginからのframeworkの利用
In the Moodの新バージョンをリリースしたわけでもないのにアクセス数が伸びてると思ったら、HMDTさんからリンクしていただいていました。
やはりこの、widgetpluginからframeworkを使用するときの問題は皆さん引っかかるようですね。
僕も色々検索してインストールパスを変更すればいいというのはすぐに分かったんですが、実際のやり方が、検索しても英文ドキュメントしか出てこないこともあり、なかなか分かりませんでした。
HMDTさんが書かれていますが、install_name_toolでインストールパスを変更できるのは短い名前にする場合だけだそうです。やはり、コンパイル済みのバイナリに対してコマンドを実行するのでそうなっているんでしょうね。
In the Mood 0.5.0
仮運用中のためしばらくトラックバックなどはできませんが、開発記録としてブログを始めてみようと思います。
早速ですが、In the Mood 0.5.0をリリースしました。
今回一番大きい変更点は、最も見た目には分からない、今までAppleScriptとPHP(とwidgetplugin)で行っていた内部処理をwidgetpluginに一本化したというところです。
widgetpluginで処理をするようになった0.2.4のころからずっとそのつもりだったんですが、widgetpluginでSkype.frameworkを使用するために@executable_pathを@loader_pathに変更するやり方が分からず、しばらく放置していました。
今回、Growlの通知に対応するためにGrowl.frameworkを使用する必要が出てきて、改めて検索などしていたら実は簡単な方法だったんですね。
/usr/bin/install_name_tool -change
"@executable_path/../Frameworks/Skype.framework/Versions/A/Skype"
"@loader_path/../Frameworks/Skype.framework/Versions/A/Skype"
itm.widgetplugin/Contents/MacOS/itm改行はなしで、frameworkやwidgetpluginの名前は適宜読み替えてください。
さて、そのGrowlの通知ですが、iTunesで再生中の曲が変わったときに通知してくれるアプリケーションは結構あるんですが(Growlに付属のGrowlTunesやiScrobblerなど)、それだけのためにアプリケーションを起動しておくのが何となく気になっていたので、In the Moodの機能とすることにしました。
メニューバーやDockの領域ももったいないですし。
ところで、0.4.0のころからDashcodeのベータ版を試験的に導入しています。
widgetpluginの部分には使えませんが、JavaScript部分のデバッグが格段に楽になりました。Dashboardを表示しなくてもテスト実行できるのがいいですね。