• [Mac] gitでの作業を便利にする設定

    gitでtab補完を有効にする 環境はMax OSX Lionです ここから、git-completion.bashを入手します。 入手したgit-completion.bashを/usr/local/git/contrib/completionへ配置 $ sudo mkdir -p /usr/local/git/contrib/completion/ $ sudo mv git-completion.bash /usr/local/git/contrib/completion/ ~/.profileに以下を追加します( ~/.bachrcに追加でもいいです)。 ついでに、ブランチ名も表示する設定を追加します。 source /usr/local/git/contrib/completion/git-completion.bash GIT\_PS1\_SHOWDIRTYSTATE=true PS1='\\\[\\033\[32m\\\]\\u@\\h\\\[\\033\[00m\\\]:\\\[\\033\[34m\\\]\\W\\\[\\033\[31m\\\]$(\_\_git\_ps1)\\\[\\033\[00m\\\]\\$ ' ターミナルのウィンドウを開きなおせば設定が反映されていると思います。 macbook@wadslab: project (master) $ git c (ここでtab2度押し) checkout cherry-pick clean commit cherry citool clone config macbook@wadslab: project (master) $ git c tabで候補コマンドが保管されました。ブランチ名もちゃんと表示されているようです。
  • iPhone SDK ログの出力

    ビルドのモードによってログの出力を切り替える NSLogの使い方を調べていたら以下のとおりDEBUGモードの時だけログを出力する方法が書いてありました。 NSLog()の置き換え - 強火で進め 最終的には #define ALog(fmt, ...) NSLog((@"%s \[Line %d\] " fmt), \_\_PRETTY\_FUNCTION\_\_, \_\_LINE\_\_, ##\_\_VA\_ARGS\_\_); これは元々はiPhone Development Blogの記事から引用していますが、よく読むと正しく以下の部分を定義する必要があると思います。 The Evolution of a Replacement for NSLog | iPhone Development Blog #ifdef DEBUG #define DLog(fmt, ...) NSLog((@"%s \[Line %d\] " fmt), \_\_PRETTY\_FUNCTION\_\_, \_\_LINE\_\_, ##\_\_VA\_ARGS\_\_); #else #define DLog(...) #endif // ALog always displays output regardless of the DEBUG setting #define ALog(fmt, ...) NSLog((@"%s \[Line %d\] " fmt), \_\_PRETTY\_FUNCTION\_\_, \_\_LINE\_\_, ##\_\_VA\_ARGS\_\_); DLogはDEBUGが0のときに(RELEASEモード)何も出力せず、それ以外のときにログを出力します。
  • [git] gitのbranchを完全に削除する

    gitでbranchの作成や削除方法は過去書きました。 $ git branch -d branch-name HEADへマージされていないコミットがある場合 $ git branch -D branch-name これでローカルのbranchは削除できました。 リーモートのリポジトリから完全に削除する場合は、以下のようにpushする必要があるようです。 $ git push origin :branch-name ブランチ名の前に:(コロン)をつけます。
  • WordPressをMT(Movable Type)形式でエクスポートしてブログをお引越し。

    wordpressで書いていたブログを、はてなに引っ越すことにしました。 結局こっちへ戻ってきました 実際に引っ越しを行ったバージョンはwordpress2.6です。 インポート方法 はてなで既存ブログデータをインポートするには、Movable Type形式(MT形式)でデータをエクスポートする必要があります。 今使用しているwordpressのバージョンは2.6で、MT形式でデータをエクスポートするために、WordPressExportというプラグインを使用しました。 プラグインのインストール インストール方法などはこちらをご覧ください プラグインのインストール後、管理画面の「設定」タブから「Export」をクリックすると、MT形式でデータ表示されるはずでしたが、何も出てきませんでした。 プラグインの修正 調べてみると、MT.php内21行目付近の、SQLを発行している部分で、エラーがでていることがわかりました。 MT.phpの21行目付近 $query = "SELECT $wpdb->posts.post\_date, $wpdb->posts.post\_content, $wpdb->posts.post\_title, $wpdb->users.user\_nickname, $wpdb->posts.post\_status, $wpdb->comments.comment\_author, $wpdb->comments.comment\_content, $wpdb->comments.comment\_author\_email, $wpdb->comments.comment\_author\_url, $wpdb->comments.comment\_date, $wpdb->post2cat.category\_id, $wpdb->categories.cat\_name FROM $wpdb->comments RIGHT OUTER JOIN $wpdb->posts ON ( $wpdb->comments.comment\_post\_ID = $wpdb->posts.ID ) LEFT OUTER JOIN $wpdb->users ON ( $wpdb->posts.post\_author = $wpdb->users.ID ) LEFT OUTER JOIN $wpdb->post2cat ON ( $wpdb->posts.ID = $wpdb->post2cat.post\_id ) LEFT OUTER JOIN $wpdb->categories ON ($wpdb->post2cat.category\_id = $wpdb->categories.cat\_ID) "; また、エラーがでている部分はeval()関数で実行されていたので、特にエラーなど出現せず、単に出力がない状態となっていたのです。
  • Perlでモジュールを動的にロードする

    PHPならば $class = "Class\_Foo"; require\_once $class; のような処理は、perlの場合、 my $class = "Class::Foo"; eval qq(require $class; import $class); とするとできるようです。(参考) 今読みかけている本に、関連することが書いてあるかもしれない。 ほかのやり方があるかどうかあとで調べよう
  • Papervision3D 基礎の基礎

    最近、papervison3dを使って、flash上で3dのムービーを作ろうとしています。 Web Designing 2009年6月号で連載されている、papervision3dの記事を参考に、基礎の勉強中をしています。 連載自体は、1つ前の5月号より行っているようで、手元にあるのは2回目でした。 ■ 3DCG表示関連の用語 連載のサンプルソースを見て、大体は理解できましたが、シーンやビューポートの位置づけがよくわかりませんでした(説明は5月号にあるのかな)。 この件については、以下のサイトでわかりやすく説明してありました。 勉強部屋:Papervision入門``` 3Dシーン(3Dscene) 3Dモデルを配置する空間です。この3D空間に、3Dモデルを配置する事により、空間と物 が存在する3DCGの世界が作られます。 カメラ(Camera) 3Dモデルと3Dシーンで3DCGの世界を作成したら、それを見るためにカメラが必要です。 私達は作成した3DCGの世界をカメラの視点で見ることになります。 ビューポート(Viewport) カメラで撮影した3DCGの世界は、何かに投影しないと私達は見ることができません。 例えばテレビ局でカメラが撮影した映像は、液晶ディスプレイやブラウン管に映し出さ れる事により目にする事ができるのと一緒です。この例えで、ディスプレイやブラウン 管の役割をするのがビューポートです。 * シーンにオブジェクトを配置して動かしたりする * モデルをカメラで撮影する * 撮影したのをビューポートで映して見る という感じで、上記一連の処理を、レンダリングで行うというという理解です。 **■ オブジェクト** オブジェクトの形状は、Planeや、Cubeなどがあり、これらをプリミティブオブジェクトといいます。 現在のところ、プリミティブオブジェクトは6種類あるようです。 * Cone (円錐) * Cube (直方体) * Cylinder (円柱) * PaperPlane (紙飛行機的なオブジェクトのようです) * Plane (平面) * Sphere (球体) プリミティブオブジェクトの表面に設定する属性(色や、画像など)を、マテリアルといいます。 マテリアルは、プリミティブのインスタンスを生成時に引数で与えます。 マテリアルは、色をつけるためのマテリアルや、ワイヤーフレーム、bitmapやMovieClipを貼り付けるものなど色々あります。``` // カラーマテリアル var coMaterial:ColorMaterial = new ColorMaterial(0x006699); ```ひとつのプリミティブオブジェクトに複数のマテリアルを設定したい場合は、CompositeMaterialというオブジェクトを使用します。 他のマテリアルをCompositeMaterialに追加すれば、プリミティブオブジェクトに複数のマテリアルを設定できます。``` // カラーマテリアル var coMaterial:ColorMaterial = new ColorMaterial(0x006699); // ワイヤーフレームマテリアル var wiMaterial:WireframeMaterial = new WireframeMaterial(0x0099CC); // CompositeMaterialに集約 var compMaterial:CompositeMaterial = new CompositeMaterial(); compMaterial.
  • Papervison3Dのセットアップ

    Papervison3Dを使ってみようと思いましたが、flashが必要そうだったので、flash CS4の30日間トライアルバージョンをインストールしてセットアップしました。 flash CS4のインストールは割愛します。 ■ Papervison3Dのインストール``` http://papervision3d.googlecode.com/svn/trunk/branches/cs4 というCS4向けのようなやつがありますが、まだブランチなので、今回は使用しません。 とりあえず以下のas3版(らしき物)をチェックアウトしてみます。 svn co svn co http://papervision3d.googlecode.com/svn/trunk/as3/trunk/ ちなみに、papervison3dのプロジェクトページでは、 http://papervision3d.googlecode.com/svn/trunk をチェックアウトとありますが、いっぱいファイルがダウンロードされたので、今回は上記のところにしました。 **■ flashの設定** チェックアウトが完了したら、flashを起動します。 flash>環境設定...>ActionScript>ActionScript 3.0 の設定... をクリック。 ActionScript 3.0の詳細設定のウィンドウが表示されたら、ソースパスのところで 以下を設定します。 /path/to/trunk/src
  • Adobe Flex3 SDK をsakuraのサーバで使う

    いまさらながらAdobe Flexを使ってみることにしました。 今回はsakuraのサーバにインストールしました。 以下のページからFlex3.3 SDKをダウンロード。 http://www.adobe.com/products/flex/flexdownloads/ 解凍後、適当なところに配置。 早速サンプルをビルド。 $ cd flex\_sdk\_3/samples/explorer $ chmod 744 $ ./build.sh ./build.sh: ../../bin/mxmlc: Permission denied building containers/AccordionExample.mxml ./build.sh: ../../bin/mxmlc: Permission denied building containers/DividedBoxExample.mxml ... flex_sdk_3/bin 以下の実行ファイルに権限がないようなので、権限を付与。 $ chmod 744 ../../bin/\* $ ./build.sh java: not found building containers/AccordionExample.mxml java: not found building containers/DividedBoxExample.mxml java: not found ... sakuraのサーバーにjavaがインストールされていませんでした。 以下のページからjava(SDK)のパッケージを入手。 http://www.freebsdfoundation.org/downloads/java.shtml プラットフォームがいろいろあるので、sakuraのを調べる。 $ uname -mrs FreeBSD 7.1-RELEASE-p5 i386 ということで、FreeBSD 7.x/i386バージョン(diablo-jdk-freebsd7.i386.1.6.0.07.02.tbz)をダウンロード。 解凍して適当なところに配置。 $ tar zxvf diablo-jdk-freebsd7.i386.1.6.0.07.02.tbz $ mv diablo-jdk1.
  • [Zend Framework] Zend_Logでログのローテーション

    前回は簡単な使い方を書きましたが、今回は拡張する人用の情報を書きます。 クラスの構成 こんな感じになっています ┌─────────────------------------─┐ ┌────------------------------──────────-─┐┌─---------------────────┐ │ Wads_Log_RotationFile_Abstract │◇┬→│ Wads_Log_RotationFile_Writer_Interface ││Zend_Log_Writer_Abstract│ └───────-------------------──────┘ │ ├───────------------------------─────────┤└──-------------─────────┘ ▲ │ │ + update() │ ▲ │ │ └─────────────---------------------──────┘ │ ┌────────-----------───┐ │ △ │ │Wads_Log_RotationFile │ │ ├─────────────────────────────────┘ └─-----------──────────┘ │ ┌────────────────────────────┐ │ │Wads_Log_Writer_RotationFile│ │ ├────────────────────────────┤ │ │ + update() │ │ └────────────────────────────┘ │ ┌──────────────────────────────────────┐ └→│Wads_Log_RotationFile_Policy_Abstract │ ├──────────────────────────────────────┤ │ + trigger() │ │ + rollOver() │ └──────────────────────────────────────┘ ▲ ┌────────────────────┴───────────────────┐ ┌──────────────────────────────────────┐┌──────────────────────────────────┐ │Wads_Log_RotationFile_Policy_Datetime ││Wads_Log_RotationFile_Policy_Size │ ├──────────────────────────────────────┤├──────────────────────────────────┤ │ + trigger() ││ + trigger() │ │ + rollOver() ││ + rollOver() │ └──────────────────────────────────────┘└──────────────────────────────────┘ デザインパターンでいうと、ObserverとAdapterパターンあたりを意識しています。 PHPによるデザインパターン入門の本が役に立ちました。コンポーネントは、大きく分けると、
  • [Zend Framework]Zend_Logでログのローテーション

    勉強会で話したZend_Logを拡張してログのローテーションをできるようにしたものです。 log4jやlog4phpを参考にしながら、基本的な機能の部分をZend_Logに合わせて作りました。 前回の記事でも書きましたが、logrotateなどを使用してサーバー側でローテーションできないような場合(junichiroさんがコメントで仰っているようにレンタルサーバーなど)に、使用するといいかもしれません。 ソースはこちら 特徴 特定の期間やログのサイズをもとにローテーションを行うことができる ローテーションの方法を自由に拡張できる Zend_Logを使っていれば、writerを変更するだけで設定ができる 構成 Wads/ Log/ Writer/ RotationFile.php RotationFile/ Writer/ Interface.php Policy/ Abstract.php Datetime.php Size.php RotationFile.php Wads_Log_Writer_RotationFile クラスが、既存のZend_Log_Writer を拡張してローテーションに対応させたものです。これに、Wads_Log_RotationFile というローテーションを行うクラスを設定して使用します。 また、Wads/Log/RotationFile/Policy 以下にあるクラスでどのようにローテーションを行うか決めています。 現在は、ログファイルのサイズでローテーションを行うWads_Log_RotationFile_Policy_Sizeと、日付や時間、曜日でローテーションを行うWads_Log_RotationFile_Policy_Datetime の2つを用意しています。 使用方法 Wads_Log_RotationFileクラスのオブジェクトを生成する 1で生成したオブジェクト指定してWads_Log_Writer_RotationFileのオブジェクトを生成する Wads_Log_Writer_RotationFileのオブジェクトをZend_Logに追加する Zend_Logのlog()関数などを使ってログを書き出す 3以降は通常のZend_Logの使い方と同じです。 使用例です。 // ログファイル名 $logfile = "/var/log/foo/test.log"; // ローテーション方法指定 $opt = array( 'policy' => 'size', // Wads\_Log\_RotationFile\_Policy\_Size使用する 'backupindex' => 3, 'size' => 40 ); // 1(上の■ 使用方法 の番号) $lotation = new Wads\_Log\_Rotation($logfile, $opt); // 2 ('a' は fopen の mode) $writer = new Wads\_Log\_Writer\_RotationFile($logfile, 'a', $lotation); // 3 $log = new Zend\_Log(); $log->addWriter($writer); /\* .