mod_proxy + mod_proxy_balancer を使用した際の reverse proxy の設定のメモ

By admin | 2009年11月19日

忘れそうだったのでメモ

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / balancer://hogehoge/ timeout=2
ProxyPassReverse / balancer://hogehoge/
<Proxy balancer://hogehoge>
    BalancerMember http://192.168.1.1 loadfactor=10 keepalive=Off
    BalancerMember http://192.168.1.2 loadfactor=10 keepalive=Off
</Proxy>

ポイントは ProxyPreserveHost On ってところ。
ProxyPassReverse だけだと proxy 先に header の Host: をそのまま送ってくれるようになる。

参考資料

XML::Simple で RSS の entry を順番通りに取り出す方法

By admin | 2009年9月6日

たとえばこんな感じのフィードがあったとします。

<?xml version="1.0" encoding="utf-8"?>
<feed>
    <entry>
        <key>blog1</key>
        <title>blog1-title</title>
        <content>blog1-content</content>
    </entry>
    <entry>
        <key>blog2</key>
        <title>blog2-title</title>
        <content>blog2-content</content>
    </entry>
    <entry>
        <key>blog3</key>
        <title>blog3-title</title>
        <content>blog3-content</content>
    </entry>
    <entry>
        <key>blog4</key>
        <title>blog4-title</title>
        <content>blog4-content</content>
    </entry>
    <entry>
        <key>blog5</key>
        <title>blog5-title</title>
        <content>blog5-content</content>
    </entry>
</feed>

単純に parse するとハッシュに格納されるので
entry の並び順はめちゃくちゃになります。

dump結果

$VAR1 = {
          'entry' => {
                     'blog2' => {
                                'content' => 'blog2-content',
                                'title' => 'blog2-title'
                              },
                     'blog5' => {
                                'content' => 'blog5-content',
                                'title' => 'blog5-title'
                              },
                     'blog4' => {
                                'content' => 'blog4-content',
                                'title' => 'blog4-title'
                              },
                     'blog1' => {
                                'content' => 'blog1-content',
                                'title' => 'blog1-title'
                              },
                     'blog3' => {
                                'content' => 'blog3-content',
                                'title' => 'blog3-title'
                              }
                   }
        };

ランキングの RSS とかだと entry の順番が変わるだけで致命的です。
今回がまさにその状態。
blog1〜5の順番で entry に入っていてほしかったのです。

できないかと思って調べてたらいけました。
how to preserve XML::Simple element order
どうやら Tie::IxHash を使えばいけそうとのこと。
Tie::IxHash については ハッシュのキーを挿入(追加)した順番通りに取り出す がとても
まとまっておりわかりやすいです。

#!/usr/bin/perl
 
use strict;
use warnings;
 
use Tie::IxHash;
use XML::Simple;
use Data::Dumper; 
 
*XML::Simple::new_hashref = 'new_hashref';
sub new_hashref {
    my $self = shift;
    tie my %hash, 'Tie::IxHash';
    %hash = @_; 
    return \%hash;
}
 
my $parser = XML::Simple->new();
my $xml = $parser->XMLin('sample.xml');
warn Dumper $xml;
 
1;
 
__END__
結果
$VAR1 = {
          'entry' => {
                     'blog1' => {
                                'content' => 'blog1-content',
                                'title' => 'blog1-title'
                              },
                     'blog2' => {
                                'content' => 'blog2-content',
                                'title' => 'blog2-title'
                              },
                     'blog3' => {
                                'content' => 'blog3-content',
                                'title' => 'blog3-title'
                              },
                     'blog4' => {
                                'content' => 'blog4-content',
                                'title' => 'blog4-title'
                              },
                     'blog5' => {
                                'content' => 'blog5-content',
                                'title' => 'blog5-title'
                              }
                   }
        };

このように new_hashref を Tie::IxHash で tie してやった
ハッシュリファレンスを返すように override してやれば大丈夫です。
XML::LibXML でも同じようなことはできるらしいです。

snow leopard 移行したまとめ

By admin | 2009年8月30日

snow leopard が届いた。
もちろん待てるわけもなく気づけば移行していたw

64bit で使いたかったからアップデートすると ports と Xcode, SDK 周りで
ハマりそうな気も凄いしたから結局クリーンインストールすることにした。

アップデート自体は QuickSilver と KeyRemap4MacBook が使えないと
作業効率に支障きたすからどうしようかと思ってたけど
TimeMachine にバックアップとって試してみた。

アプリケーション


iStat menu がそもそもつかえない。
しばらくしたら対応版がでるみたい。
それまでの我慢ということでしばらく放置。

本家対応済み。
前よりも個人的には使いやすくなっています。

QuickSilver はここから最新版を落とせばちゃんと動く。

KeyRemap4MacBook に関してはパッチをあててくれている人がいて無事に動作した(DL)
パッチも本家に送っているらしい。とりあえず暫定的には使える。
感謝感謝。

その他の Tips

起動時はデフォルトだと 32bit モードで起動している。
Snow Leopardの起動カーネルを32bitから64bitに変更『32- or 64-bit Kernel Startup Mode Selector』
を参考にしてデフォルトを 64bit にした。


safari だけ SIMBL をなぜか使えてる。
SIMBL を使う場合は 32bit モードで開けばいけるとのこと。
ただ GreaseKit はスクリプトが消えている。
追加もできないので結局使えてないようなもの。
ただいかんせん動作が不安定すぎる。。。
それにしても SIMBL 使えないのは不便すぎる。

追記 2009-09-06 22:00
InputManager がそもそも使えないから Logicool のドライバも入らないし。
なにより Terminal.appで選択時にコピーするSIMBLプラグインを作りました
使えなくなったのが相当不便。

あと 64bit の場合だとMac::Growl が使えなくなる。
MacPerl や Carbon 系のアーキテクチャが 32bit にしか対応していないためとのこと。
ソースはここ。
これどうにかならないかなぁ〜。

updatedb に関しては

sudo touch /var/db/locate.db
sudo chown nobody:wheel /var/db/locate.database

しておかないと権限の問題で locate.databse が生成されない。

snow leopard とは関係ないけど ports の perl が 5.10.1 になっていた。
体感速度はあがった気がするし今のとこは leopard に戻す!!
といったこともないので入れなおして良かったかな。
また随時追加していきます。

参考資料

Snow Leopardにアップデートした後に気をつけること 主にMacPortsとrubygemsについて
enabling SIMBL on Snow Leopard

追記 2009-09-06 22:00

■ Safari 関連

SIMBL本家が Snow Leopard 対応!!

64bit に対応した Safari の SIMBL プラグイン。
Tab 系と GreaseKit が 64bit で対応しているのが相当あつい!!
あとは Glims と SafariStand が対応してくれればほぼほぼ問題ない状態になりそう。

GreaseKit のスクリプトのまとめはここがよくまとまっています

■ Input switcher が組み込まれている!!

これすごい便利。なぜかデフォルトだとオフられているので設定が必要。
「言語とテキスト」->「入力ソース」->「入力ソースのオプション」
これを、「書類ごとに異なるものを使用」を選択する。
そうすると InputSwicter と同じようにアプリ毎に入力ソース(英字、ひらがな、etc)が保存されるようになる。

“Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法”が便利すぎる件

By admin | 2009年8月22日

“Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法” で紹介されている zsh の vcs_info という関数を使って
git や mercurial のブランチ名をプロンプトに表示しているみたいです。

git 使ってたら実際どのブランチいじってるのかわからなくなることが
多々あって困ってたのでさっそく導入してみました。

git リポジトリ

svn リポジトリ

svn リポジトリ

はまったのは “vcs_info: function definition file not found” というエラーが
表示され vcs_info が使用できなかった。
これはバージョンを 4.3.6-dev-0+20080929-1 以降にすればいいらしい。

mac の ports の場合は zsh-devel でいれないと 4.3.6 以下なので使用できない。
zsh-devel をインストールして /opt/local/bin/zsh-4.3.10 から /bin/zsh へと
/etc/zprofile から /opt/local/etc/zprofile へシンボリックリンクを張って準備完了。

zprofile のシンボリックリンクを張らないと PATH の環境変数が足らなくなる。
/usr/bin とかその辺の PATH をここを呼んで足してるみたい。
.zshrc の設定に関しては本家の方で詳しくまとまってます。
.zshrc の一部抜粋でこんな感じです。

autoload -Uz vcs_info
zstyle ':vcs_info:*' formats ':(%s)%b'
zstyle ':vcs_info:*' actionformats ':(%s)%b|%a'
precmd () {
    psvar=()
    LANG=en_US.UTF-8 vcs_info
    [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_"
}
PROMPT="%{${fg[yellow]}%}[%n@%m%1(v|%F{green}%1v%f|)%{${fg[yellow]}%}]%{${reset_color}%}%b "

zsh ちゃんと勉強すればもっと便利になりそうだな

参考資料

vcs_info: function definition file not found

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

「Flash Liteで作る 携帯コンテンツ実践教科書」を読んで

By admin | 2009年8月3日

これはかなりの良書です。
これから Flash Lite を勉強しようとしてたり、すでにやってる人にもお奨めできる1冊です。
むしろこれ以外で役に立つ本が今までなかった。

書籍としてもサンプルにQRコードがついていて何もしなくても確認もできるし
Flash Lite1.1 の書き方と FLash Lite2.0 の両方のサンプルがついててわかりやすい。

中でも役にたつのが Chapter 10 と Chapter 11。
これだけのために本書をかったとしても損はないと思うくらいの内容。
さらに Flash Lite 3.1 までもカバーしています。

未だに知らなかったはまりどこもたくさんあったので著者の方々には本当に感謝です。
以下、簡単な自分用のまとめです。

音について

  • 機種毎の拡張子
    • docomo => MIDI
    • au => SMAF
    • softbank => SMAF
  • コンパクトサウンド(.fls) 便利
  • Flash Lite が自動的に端末に合わせた音データを選択して再生してくれる
    Mobile & Device Developer Center だと繰り返しとかで対応していない
    対応していない実機もある
  • 全てをカバーするなら UA を見て出し分ける必要がある
  • 複数音を同時に鳴らせない
  • サウンドの繰り返しの際に処理が遅れる
  • 待ち受けだと音が鳴らない

最適化について

  • 線の最適化 :「修正」->「シェイプ」->「高度なスムーズ」
  • ベクターの最適化 : 「修正」->「シェイプ」->「最適化」

テキストについて

  • 12, 24px を使う
  • 変数のプロパティに直接 「/:newsTxt」みたいに指定できるのは知らなかった
  • mblength => 2バイト文字での長さ (FlashLite1.1のみ)

GPSについて

  • docomo => 使えない
  • au => getURL(”device:location?url=CGIのURL);
  • softbank => getURL(”location:auto?url=CGIのURL);

お気に入りについて(auのみ)

  • 表示 => getURL(”device:home/bookmark”);
  • 登録 => getURL(”device:home/bookmark?url=[URLエンコードされたURL]&title=[URLエンコードされたもの]“);

Tips

  • 動的な変数の参照 (Flash Player6以前) ex) eval(”hoge” add 1);
  • 書き換え ex) set(”hoge” add 1, 0);
  • バイブレータ振動中は描画速度が落ちる
  • 決定キーを押しても一時的に処理が遅くなる
  • 同じタイミングでフレームの遷移、変数の代入したら駄目
  • ドットズレをさせないためには MC のサイズを偶数値にし位置を整数値にすればよい
  • 変数の初期値は”"
  • _width, _height は読み取り専用
  • マスクレイヤーの MC は操作できない
  • call で別の階層にあるラベルも call で呼べる ex) call(”../:hoge”);
  • 透明なオブジェクトの重なりは5階層までは正常に表示できる
  • && || よりも and or の方が処理が早い

あと、ここには書かれてなかったけどメモリの使用量を確認するときは
Mobile & Device Developer Center で確認するだけでなく
メインを実機で確認した方がいいと思う。
以前にメモリ使用量が実機だと倍になっていることがあったので
めんどくさいけど実機で見た方がいい。
あと、ビットマップ画像はそのままメモリに乗るのでバランス良くビットマップ画像を使う。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

WordPress Themes