はてなブックマーク - 複雑なCakePHPテンプレートのファイルパスが一目瞭然。Viewpath Pluginの紹介
    このエントリーをはてなブックマークに追加

    ひょんなことからiPod Touchを手に入れて、ガラケーとのUIの違いに戸惑っている小山です。
    iPod Touch薄すぎて、なくしかけたのは内緒です。
    (iPod TouchをもらうきっかけとなったPHP Matsuriの話はまたのちほどまとめてしたいと思っています。)

    CakePHPの複雑なテンプレートファイル構造

    CakePHPで1つのページを表示するにはデフォルトでは2つのctpファイル(テンプレートファイル)で構成されます。
    また、element化などをして部分を切り出した場合はそれ以上の数のctpファイルで構成されます。
    さらにPrefixルーティング機能やTheme機能などを使った場合は、通常と異なるctpファイルが呼び出されることがあります。

    CakePHPにどっぷりつかった自分には全くもって問題ないのですが、これが協業していただくデザイナーさんにとってはかなり面倒なことになってしまうのが現状です。

    ただでさえ(Smartyなどではなく)PHPスクリプトが混在したファイルを触ってもらっているのに、さらにどのファイルが今のページを構成しているのかまで、理解してもらうのはかなり負担をかけてしまいます。

    Viewpath Plugin

    というわけで、作ってみたのがViewpathプラグインです。

    k1LoW’s viewpath at master – GitHub -

    これは現在のページを構成しているctpファイルのリストを作成してくれるプラグインです。
    DebugKitプラグインのように、常に左上に表示されているアイコンをクリックすると「現在のページを構成しているctpファイルのリスト」を表示してくれます。

    設置方法などはREADMEをみてください。
    たったそれだけのプラグインです。たぶんプログラマにはいらないでしょう。
    でも、きっとデザイナーの人は喜んでくれる(はず)。
    若干一部対応しきれていない箇所があるのですが、十分参考になると思います。

    いづれはDebugKitへの統合ができたらいいなと思っています。

    追記:slywalkerさんがDebugKitへの対応をしてくれました!これにより、単独利用だけでなくDebugKitへの統合も可能になります。

    よかった是非使ってみてください。

    • eucalyptus
    はてなブックマーク - CentOSでEucalyptusを構築してNagiosとGangliaで監視する(3)
    このエントリーをはてなブックマークに追加

    というわけで三回目。
    初めての人ははじめまして。そうでない人はこんにちは。
    Fusic 仁井の提供でお送りします。

    というわけで連続記事の三回目です。第一回はCentosにEucalyptusの導入、第二回はそれをNagiosで監視、という内容でした。今回は、Gangliaを使っての監視を行ないます。

    Gangliaで監視する

    第一回でも軽く触れましたが、Gangliaはプロセスの監視ツールになります。
    Eucalyptusが正式にサポートをしていますので、Eucalyptusを監視したいときは素直にこちらを使うのが良いのではないか、ということで、今回の導入に至ったわけです。

    gangliaは今回用意したマシン全てに入れますが、手順はすべて同じです。
    なお、最新版を入手するためにはソースからmakeする必要がありますが、今回はYUMを使うことにします。こちらだとバージョンが少し落ちて3.0系が入ります。最新は3.1です。

    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
    # yum install rrdtool
    # yum install ganglia
    # yum install ganglia-gmond
    # yum install ganglia-gmetad
    # yum install ganglia-web
     
    # /etc/init.d/gmetad start
    # /etc/init.d/gmond start
     
    # /etc/init.d/httpd restart

    これで動きます。実にシンプルです。とても良いことだと思います。

    ここまでで一度画面を見てみます。https://ホストIPアドレス/ganglia/ にアクセスして、グラフが表示されたらOKです。

    ここまでで普通の情報は見ることができます。
    さらにEucalyptusの情報を見るために、README.Monitoringの記述に従いシェルスクリプトを使用します。README.Monitoringについては第二回をどうぞ。

    # ./ganglia.sh -type nc -d /

    -typeは[nc|warlus|sc]があり、それぞれに応じた情報がGangliaで参照できるようになります。
    今回はノードで使うので -type nc で。


    このように、VM~といったグラフが追加されます。
    あとはcronでシェルを定期的に走らせるようにします。

    # crontab -e
    * * * * /root/ganglia.sh -type nc -d /

    これで監視環境はできました。
    それでは試しに、2つ立ててあるインスタンスのうちのひとつを停止させて変化を見てみます。

    # euca-describe-instances 
    RESERVATION	r-4CCD07DE	admin	default
    INSTANCE	i-4D0D0940	emi-40321247	192.168.24.73	192.168.24.73	running 	mykey 	0 	m1.small 	2010-09-01T08:54:10.856Z 	LOCALCL 	eki-5DF61296 	eri-1B10156F
    RESERVATION	r-46D108E5	admin	default
    INSTANCE	i-403D074E	emi-40321247	192.168.24.89	192.168.24.89	running 	mykey 	0 	m1.small 	2010-09-01T02:27:01.583Z 	LOCALCL 	eki-5DF61296 	eri-1B10156F
    # euca-terminate-instances i-4D0D0940
    INSTANCE	i-4D0D0940# euca-describe-instances 
    RESERVATION	r-4CCD07DE	admin	default
    INSTANCE	i-4D0D0940	emi-40321247	192.168.24.73	192.168.24.73	terminated 	mykey 	0 	m1.small 	2010-09-01T08:54:10.856Z 	LOCALCL 	eki-5DF61296 	eri-1B10156F
    RESERVATION	r-46D108E5	admin	default
    INSTANCE	i-403D074E	emi-40321247	192.168.24.89	192.168.24.89	running 	mykey 	0 	m1.small 	2010-09-01T02:27:01.583Z 	LOCALCL 	eki-5DF61296 	eri-1B10156F

    停止しました。

    実際に画面を見てみると、以下のような感じで。

    というわけで、めでたくEucalyptusの監視環境が整いました。

    まとめ

    ブログに書くと随分と短くて手軽に思えるものですね。
    手順さえ分かればそんなに引っかかる部分もないかと思います。
    Nagiosの設定が一番引っかかりやすいところではあると思いますが、やること自体は多くはありませんので、根性で乗り気れるかと。

    { 2010.9.29 }

    as3cryptoで暗号化

      はてなブックマーク - as3cryptoで暗号化
      このエントリーをはてなブックマークに追加

      こんにちは。
      ユニコーン好きのruby使い、ヤマモトです。

      今回は、ActionScriptで暗号化した文字列を、rubyで複合化して受け取る、というのをやります。

      ActionScriptには as3crypto という便利なライブラリが提供されていて、aesやdesなどのアルゴリズムを使用しての暗号化・複合化が可能です。
      code.google.com/p/as3crypto/

      デモページも用意されていて、コードを書く前にあれこれ試すことができます。
      crypto.hurlant.com/demo/

      SecretKeyからデモが行えますが、簡単な説明としては以下のとおりです。

      Encryption : 暗号アルゴリズム選択(AES,3DESなど)
      Mode : 暗号利用モード選択(CBC,CFBなど)
      Padding : 公開鍵暗号技術規格(PKCS#5)

      KeyFormat に秘密鍵を、
      PlainText に変換したい文字列を入力して Encrypto を押すと暗号化された文字列がCipherTextに表示されます。
      このとき、表示モードをText以外にしないと、バイナリデータとして表示されますので、Hex等でシリアライズするのがいいでしょう。

      で、これの実装方法ですが、
      以下の通り書きました。
      前提として、
      秘密鍵 : “hogehoge”
      暗号化する文字列 : “fugafuga”
      暗号アルゴリズム : AES
      暗号利用モード : ECB
      を使用します。

      as側

      public function encrypt(str:String):ByteArray {
      	var e:ByteArray = new ByteArray();
      	var key:ByteArray = Hex.toArray(Hex.fromString("hogehoge"));
      	var src:ByteArray = Hex.toArray(Hex.fromString(str));
      	var pad:IPad = new PKCS5();
      	var cipher:ICipher = Crypto.getCipher("aes-ecb", key, pad);
      	pad.setBlockSize(cipher.getBlockSize());
      	cipher.encrypt(src);
      	e.writeObject(src);
      	return src;
      }

      これで、

      encrypt_data = encrypt("fugafuga")

      で暗号化の文字列がバイナリで返されます。
      これを、Base64コードに変換してXMLにてrubyに渡し、復号化を行ないます。

      rubyではOpenSSL::Cipherクラスを使用して復号化を行ないますが、
      その前に、受け取るデータのデシリアライズをしなくてはいけません。
      as側で、暗号化文字列をBase64コードに変換していましたので、これを元に戻します。

      require 'base64'
      # encrypt_data = 暗号化された文字列
      encrypt_data_byte = decode64(URI.decode(encrypt_data))

      あとは以下の要領で復号化です。

      def decrypt(data, key)
          c = OpenSSL::Cipher::Cipher.new("aes-128-ecb")
          begin
            c.decrypt
            c.key = "hogehoge"
            c.update(data) + c.final
          rescue Error => e
            logger.error("#{e.message}")
          end
        end
       
      # 復号化された文字列
      decrypt_data = decrypt(encrypt_data_byte)
       
      puts decrypt_data
      ⇒ "fugafuga"

      ロジック中にアルゴリズムや秘密鍵を直接指定していますが、
      そこは定数化などで汎用的にしてください。

      今回は、as・ruby間で行ないましたが、JavaやObjective-Cでも可能です。