飴屋2009年5月〜12月の日記2009/12/23MovableType5をいじる機会があったのですが、そのときに詰まったことのメモ。MTは4から5へのバージョンアップで、ブログ制作ソフトからサイト制作ソフトという面が強く押し出されているようでした。MT4のときと同じ感覚で設置したら、ブログ記事の新規追加ができなくていきなり躓きました。インストール(設置)などの工程はMT4とさして変わらないのですが、MT5では一番最初に設置されるのが「ブログ」ではなく、「サイト」なのでした。ブログを設置しているつもりで名前をつけたら、それはブログの名前ではなく、サイトの名前だったという。「へ〜、サイト管理が便利になるかもなぁ」ぐらいの軽い気持ちでとりあえず、「サイト」の中に改めて「ブログ」を新規に追加し、MT4と同じようにブログのテンプレートをいじって指定のデザインを組み込み、期待通りの動作をしたので納品したのですが、後日お客さんから「トップページがデフォルトのデザインになっちゃった」との連絡がありました。テンプレートは書き変えてあるはずなので、そんなことになるわけはないと思ったのですが、確かにMT5標準のデザインテンプレートが使われた赤い画面になっています。ブログの再構築を行ったところ、元の正しいデザインのトップページに戻ったのですが、あまりに不可解な現象だったのでしばらく悩みこんでしまいました。新たに追加された「テーマ」という機能に私の知らない何か特別な要素があって、テンプレートの設定以外の操作が必要になっているのかも、と「テーマ」について調べてみるも、テーマ自体はテンプレートやカスタムフィールド、ウィジェットなどの要素を包括的に管理するだけの仕組みでした。そこで、最初に躓いた「サイト」と「ブログ」のことが思い出されました。私のいじったテンプレートはブログのテンプレートであって、サイトにはまた別にサイト用のテンプレートが存在することに気が付き、問題は氷解しました。ブログのインデックス(index.html)がサイトのインデックスに上書きされてたのか・・・。お客さんの要望は「ブログをメインにしたサイト」とのことだったので、ルートディレクトリにブログを書きだすように設定していたのですが、それとは別に最初に名前をつけた「サイト」も同じ場所にindex.htmlやらRSSやらを出力する設定にデフォルトでなっていたのでした。う〜ん、初めてのバージョンにはこういった初めての現象がつきものですが、早めに気がついてよかったです。出力ファイルがサイトやブログで重複した場合に、警告してくれるような仕組みがあったら、こんなミスにもすぐに気がつけたかもしれないですね。2009/12/8FlexでFlash制作中にIE8がJavaScriptエラーを出していたときのメモ。FlashのExternalInterfaceオブジェクトを使用してFlash表示中のブラウザと通信を行う際に、ExternalInterface.call("関数名")といったような感じで、JavaScriptの関数を呼び出すことができますが、呼び出し時に以下のようなJavaScriptが動的に生成され、返り値がFlash側に返ってくるようです。}このときに「オブジェクトはNullです。」みたいなエラーが出るようになって、最初はExternalInterfaceがIE8では使えないのか!?なんて慌ててしまいました。みると動的に生成されたコードのgetElementByIdの引数が空の文字列になっていますね。ここでnullなオブジェクトに対してSetReturnValueメソッドを呼ぼうとしてエラーが発生していたというだけの話でした。動的なスクリプトが空のエレメントIDを指定していた理由は、そもそもFlash表示用のタグ(object、embed)にIDを割り当てていなかったという単純なミスでした。普段のFlash制作では起こらないようなミスなのですが、今回のFlashはmixiアプリ用のものだったため、opensosicalのAPIが提供する方法(gadgets.flash.embedFlash)でFlashを表示したら、IDを指定し忘れてしまったんですね。先日は「allowScriptAccess」も指定し忘れてましたっけ・・・。foundという警告が出て、うまくレスポンスが返ってこない。ローカルでのテストは問題なかった。原因どうもpythonスクリプトのファイル名に問題があったらしい。json.pyというそのまんまなファイル名ではアウトだった。jsonp.pyでも駄目。先頭にjsonがついているのが駄目っぽい。似たような事例を検索して発見。こちらのケースでは「img」で始まるのがよくなかったらしい。対策fugajson.pyのような感じでファイル名の先頭を変更。他の何らかのファイル名と競合するのだろう。Engineを使ったサービスの構築を行ってみようと本日挑戦中です。Pythonは概要しか知らない言語でしたが、既知のOOP言語からそれほど外れているわけでもなさそうなので、何となくわかったつもりになっています。Basicを買って、Pythonスクリプトのプラグインを書こうと思ったときにインストールしてあったPythonがバージョン3.0でしたので、最新バージョンの3.1をインストールしなおしてみました。definedとログに表示されてしまいました。特別な操作はしていないのに何故?と焦りましたが、調べてみると外部ファイルの実行関数「execfile」は、Pythonがバージョン2系統からバージョン3系統にアップデートする際に「exec」という名前に変更があったそうです。GAEのPython環境はバージョン2.5系統なんだそうです。いうことなので、バージョン2.5.4のPythonをインストールして、開発ツールのPythonへのパスを設定しなおすことで事なきを得たのですが、将来的にはPythonのバージョンアップに対応した環境も開放してもらえるのでしょうか。若い言語のようですし、頻繁に改修もあると思いますが、追いついていけるのか少し心配になったのでした。一つのデータモデルのプロパティに、同じモデルを参照するdb.ReferencePropertyを複数設定すると「DuplicatePropertyError」が発生するという現象に遭遇しました。私の場合、db.SelfReferencePropertyを二つ持たせてあげたときに発生したのですが、同じことでしょう、きっと。db.SelfReferenceProperty()さっぱり、ピンとこなかったのですが、以下のようにcollection_nameを指定してあげるとよいとのことでした。db.SelfReferenceProperty(collection_name="mohe")例えば、MySQLで同じテーブルを二回JOINするときにそれぞれのテーブルに名前をつけてやらないと中身を扱えないというようなことかと推測してみましたが、これ以上深くは考えないでおきます。「DuplicatePropertyError」で似たような現象について解説していないかググってみましたが、英語サイトの方がやはり情報が充実しているように感じました。いいお手本になる日本語サイトとめぐり合いたいです。2009/5/30先日、ふと気がつくとMovableTypeで管理している自分のブログの記事のカテゴリー情報がすべて消え、タグ情報もちぐはぐに関連付けられていました。血の気のひいた一瞬です。去年の末にブログの整理作業を行った際に問題が発生し、数ヶ月間気がつかないでいたようです。バックアップから復旧作業を行ったのですが、一部未済のままだったようです。昨年末の作業を詳細まで覚えていないので、とりあえずmt_objecttagテーブルとmt_placementテーブルを当時のバックアップデータと照合して、ずれを補正するという作業でことなきをえました。失われたデータが残っていなかったらと思うと今でもぞっとします。忘れないうちに修正済みのデータもバックアップしておこうと思います。今回、修正作業のついでにバージョンを4.1から4.25にアップグレードしましたが、そこでも少し厄介なことが起こりました。以前とったバックアップの復元をしようとしたら、どうもバックアップファイルの仕様がどこかの段階で変更されていたらしく、受け付けてもらえず、また、再構築しようとしたらテンプレートの仕様がこれまた変更されたらしく途中でエラーを吐いて止まってしまいました。バージョンアップによる仕様変更は仕方ないと思いますが、ちょっと喫茶店にでも寄る感覚で気軽にバージョンアップをしようとすると火傷するので、今後はもうちょっと慎重にいきたいと思いました。2009/5/18デジタルカメラで写真をたくさん撮るのですが、現在、整理の方法を検討中です。日付のフォルダを作って撮影日ごとに分類し、月に一度差分のバックアップを取るというスタイルでやってきていたのですが、共同で写真を使う人から時系列だと探している写真がみつけにくいと文句がでてきたのでした。時系列ではなく、ロケーションやイベント毎に分類されていることが望ましいそうです。私は主にPicasa3でパラパラとサムネイルを確認し、必要に応じて写真にタグ付け(今はアルバムと呼ぶらしいです)しているので、不便はなかったのですが、Windows標準のエクスプローラでもわかりやすく分類しなおせと言われました。そこで問題になったのがデジカメ写真のファイル名です。最後に撮った写真の番号を記憶して連番(10000枚ごとに別フォルダ作成)というルールなので、それなりの頻度で名前がかぶるのです。同名のファイルを同じフォルダにまとめて突っ込もうとすると「上書き、キャンセル、リネーム」の選択ウィンドウが出てきてしまいます。別にリネームして「ABC00001(2).jpg」みたいな変なファイル名になっても構わないのですが、どうもリネームを選択するとファイルの移動にかなり時間がかかるみたいなので、整理していてイライラがつのるのでした。事前にExif情報から撮影日時をひいてリネームしておこうと思って、書いたPerlのスクリプトがこれです。「Image::ExifTool」は別途入れる必要のあるモジュールです。開発者の人、便利なものをありがとうございます。$fn,$newname;}これで、事なきを得たかと思われましたが、一部リネームされないデータがありました。デジカメの時計用の電池が切れたのか、はたまた時計を未設定状態で使っていたのか、Exif情報が記録されていないファイルが・・・これは仕方がないので、不明な部分を連番に置き換える処理でお茶を濁しました。問題はそれだけではありませんでした。デジタル一眼レフの連射機能にまかせて、バッシャバッシャと写真を撮っていたら、一秒間に複数枚写真を撮っている場合があり、日時でファイル名を作るとまたしてもファイル名が重複するケースが出てきました。アナログカメラのときはフィルム代をケチって連射なんて使わなかったので考えもつかなかったのですが、すごい勢いで画面を切り取っていたのですね、自分。最近のデジカメのCMでは「フルハイビジョン動画も撮れる」なんて文句も踊ってるくらいですもんね。動画のコーデックや、記録媒体の進歩は目覚ましいものです。近いうちに、写真は「動画の一部を切り出すもの」になるのかもしれませんね。するとデジカメプリント屋に列ができそうでいやだなぁ。読み込みに何十分もかかったりして。2009/5/17引き続きWordPressの構築でつまづいた点をメモ。「amazon-showcase-wordpress-widget」というAmazonの商品をウィジェットとして表示してくれる便利なプラグインがあるのですが、利用者が商品の番号(ASIN、ISBN)を調べるのが面倒だとごねているので、ASINの検索プラグインを作らなければならなくなりそうになりました。「wp-tmkm-amazon」なんていうこれまた便利なプラグインが公開されていまして、本来なら記事の編集画面でAmazonの商品情報を差し込むというプラグインではあるのですが、その商品検索窓の部分だけiframeタグでひっぱってくることでことなきをえました。ありがたや、ありがたや。Showcase」の方で、追加した商品情報が管理者画面では確認できるのに、公開されるブログの方では表示されないという問題にぶち当たりました。原因がさっぱりわからないのでデータベースを覗いてみたところ、どうもAmazonから引っ張ってきた商品情報のキャッシュが保存されていない模様。仕方がないので、プラグインのコードを一から読み直してデバッグしてみたところ、日本のAmazonの情報サービスのドメインが変更されていたのが原因のようでした。break;要するに「.co.jp」を「.jp」にするだけで直ってしまう現象なのでした。Amazonの商品情報サービスを直接自分で使ったことはないのですが、提供元ドメインの変更がどこかの段階であったのでしょうね。Showcase」を利用している人は国内でも多そうなので、商品が表示されなくなって困っている人も結構いるかもしれませんね。2009/5/13以前、WordPressの設置を頼まれることがあり、テンプレートを作ったり、編集画面用のプラグインを作ったり、いろいろいじっているうちにちょっと興味が湧いてきたので、自分の管理しているサイトにも導入してみました。私のほかにも記事を書く人がいて、その人はWYSIWYGなエディタに不慣れなため、これまたいろいろと機能を追加してあげる必要がありました。そんな中、挙がってきた要望に「画像をたくさん記事に挿入したいけどめんどい」というものがありました。自分でやっても確かに煩わしいです。WordPressは、Flashを使って画像を一度に複数枚アップロードできるので、写真をたくさん載せる人に優しいと思っていたのですが、実際に掲載する際は「メディアライブラリ」を開いて、該当ファイルを選択して、「投稿に挿入」ボタンを押さなければなりません。画像一つ挿入するのに4クリックも必要であり、しかもメディアライブラリを開くのに少し時間がかかるものですから、たくさん画像を張り付けるのも一苦労です。そこは何とか便利なプラグインがあるんじゃないかと検索しましたが、今のところまだ見つかっていません。同様の悩みを抱えている人はいるようで、以下のような解決策が提示されていました。24行目]でメディアライブラリのthickboxを閉じる処理を、ページを戻る処理に変更//変更前tb_remove();//変更後window.history.back();これで、画像を挿入するたびにメディアライブラリの窓が閉じないので、いくらか手間が減ります。欲を言えば、画像の一覧画面から画像を「投稿に挿入」できたらもっと楽ができそうです。href='#'>$toggle_off</a>";自分で使うものなのでやっつけ仕事ですが、とりあえず、一覧から画像を挿入できるようになりました。前のthickboxを閉じない処理と組み合わせることで一覧からガンガン画像を追加できるようになりました。(ボタンの表示位置とかは$send2の追加位置を変更すれば、もうちょっとましになりそうです。)とりあえず満足ですが、プラグイン化しないとバージョンアップ時にまた同じ作業をやり直しですね。ちなみに作業時のWordPressのバージョンは2.7.1でした。2009/5/3先日、注文したShade10.5が本日届きました。連休中に遊べるようにAmazonのお急ぎ便で注文したにも関わらず、昨日は不在で受け取れなかったというがっかり感を払拭すべく、さっそくインストール作業を開始します。ライセンスは一本につきPC一台だそうです。LAN内のマシンにレンダリングの計算だけをさせるプログラムも同梱されていましたので、有事の際には他マシンも動員して計算することができそうでした。ユーザ登録作業を終えると、Poser6もダウンロードできるようになってました。製品ID的なものを打ち込む作業は、今も昔も変わらず面倒くさいですね。発売されてから何回かパッチプログラムが発表されているようなので、10.5.3なる最新のパッチをあててみました。前評判で「バグが多い」なんて情報もみかけたのですが、致命的なやつはもうそこそこ塞がれているのでしょうか。あとは同梱のHanakoという女の子のモデリングデータも入れてみました。水着姿の女の子がモニタに現れると、なんというか気恥ずかしいものですね。人体のモデリングを行うようなレベルではないので、とりあえずこの子のことは忘れておきます。体験版をいじってみたときから、以下のサイトを参考にモデリングの実験を行っていました。http://www.nichibun.net/applications/collection/fn2001/index.htm古いバージョンを使用しての解説だったので、ツール名や作法が最新版のShadeとは結構異なっていましたが、ざっくりと検索した結果の中では一番わかりやすいサイトでした。モデリング手順は理解できたので、後は実践あるのみです。#img(http://soft.candychip.net/images/2009/05/03/shade.jpg)初レンダリングは、意味不明な自由曲面の計上となりました。記念に貼っておきましょう。2009/5/1たまに無性に3DCGへの興味がムクムクと起きだして、衝動的にプログラムを組んでみたり、形状データの記録ファイルのフォーマットを調べてみたりすることがあります。春の陽気に誘われて、そういった欲求が起こってきたようです。今回はモデリング関連に興味が湧きまして、ソフトウェアを一つ買ってみようと考えています。定額給付金の通知もきたことなので、それで少し遊んでみようというわけです。お金がもらえるわけではありませんので、選択肢は非常に狭いのです。3DCG関連のソフトウェアは昔と比べれば値段は随分と廉価になったものですが、まだ、本格的に仕事に使うわけでもないのに、何十万円も投資はできません。無償のものも含めていくつか調べてみて、一番気になっているのがShadeです。数少ない国産のソフトの中では、ユーザのコミュニティもそれなりに活発そうな印象を受けました。最近、10.5にバージョンアップしたとのことで、それを記念してPoser6と女の子のモデリングデータが付属するというキャンペーンも展開されているみたいですね。お金の都合上Basic版という機能制限版を買うことになりました。これは、実際に触ってみて、機能が足りないと感じた時にアップグレードも検討するということにします。本日のAmazonでの価格は10289円でしたので、本当に定額給付金で買えてしまいました。Shadeの販売元のe-frontierのサイトでは、最新版のShadeの体験版を配布しているとのことなので、どんなものか試しにダウンロードしてみました。レンダリング結果への制限事項がかなり厳しいものなので、イマイチきれいな出力を実感できませんでしたが、とりあえず手に余るものでもなさそうです。Sketchupなど、比較的安価なものばかり使っていました。最初は一枚絵を出力して満足していたものでした。昔のマシンの処理能力では、一枚出力するにも一日がかりでしたので、生半可な気持ちでレンダリングを開始することはできなかったというのが、非常に記憶に残っています。それから、ゲーム機の主軸がプレイステーション時代になってくるとともに、徐々に自分でモデリングしたデータを自由に動かしてみたくなる欲求が出てきて、ローポリゴンのモデルをJavaやDirectXで動かして満足したものでした。それから、何度か衝動的に3D関連のことをしたくなり、Postpetのデータをいじってみたり、ゲームソフト内のデータを捕まえてみたり、一番最近はXAMLで遊んでみたりして遊んでいました。今回は、もう少し真面目に取り組んでみるのもいいかもしれませんね。面白いものができたら発表しましょう。Shadeを選んだ理由は、自由曲面という面白そうな響きの単語があったのが大きいですね。これは計算式で面の形状を示すというモデルなんだそうで、ポリゴンとはまた違った使用感があるそうです。自分はモデリングにはある段階で飽きるか限界を感じると思うので、その次の段階でプログラマブルにモデリングをしてみたくなるものと見込んでいます。Pythonでプラグインが書けるようなので、この機能を使って、Basic版でもそれなりに便利に活用できるようになるとうれしいです。