CakePHP の多言語対応でハマリ中

このサイトを参考に
http://bakery.cakephp.org/articles/view/p28n-the-top-to-bottom-persistent-internationalization-tutorial

extract コマンドで po ファイルを生成するところまではいけたけど、
言語の切り替えが上手くいかなくてハマリ中。


どうやっても日本語になってしまう。
まあいいけど。


あと、最初に生成されるファイルが default.pot で、それをそのまま
local/jpn/LC_MESSAGES にコピーしたら動かなくてハマった。


default.pot → default.po に改名しなきゃなのね。


※僕の cake は 1.2.0.5427alpha。

ビリーズブートキャンプ入隊

今さら今さらだけど、ビリーズブートキャンプ始めてみた。
ビリ始め。


自分の場合、減量目的ではなくてむしろ増量目的だったりする。
スタート地点は 47 kg。


1日目は基本プログラムで脱落。
もちろん、チューブとかなし。
エアで。エアビリーで。


次回は1週間後の予定。それって意味ねえのかな。

簡単に特定IPからのアクセス以外ならメンテナンス画面を出してみる

ウノウラボさんのエントリ、メンテナンス画面を簡単に出してみるを参考に、以下を .htaccess だけで実現してみる

  • 特定 IP からのアクセスは認証下で普通にサイト閲覧が可能
  • それ以外の IP からのアクセスなら、メンテナンス画面を表示
  1. まず、こういうことらしいので、何も考えずに 503 エラーを吐く 503.php を用意。
    mod_rewriteでは300番系のエラーを出すことができますが、503のエラーは出せないようなので
  2. 次に、ドメイン下全てを 503 へ Rewrite してやる。
  3. その時に、「自分の IP 以外は」を付ける
  4. そのままでは不安なので、さらに自分の IP のみ、認証下に置く

以上を実現してみたのが、以下。
PHP の部分は丸パクリ。すいませんすいません。

503/503.php

<?php
    header ('HTTP/1.0 503 Service Temporarily Unavailable');
    include(dirname(__FILE__) . '/maintenance.html');
?>

503/maintenance.html

<html>
<body>
<h1>メンテナンス中ですよ</h1>
</body>
</html>

.htaccess
{*.*.*.*} のとこに、自分の IP を、 {path} のとこにパスワードファイルへの絶対 path を入れる

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !{*.*.*.*}
    RewriteCond %{REQUEST_FILENAME} !503.php
    RewriteRule ^.*$ /503/503.php [L]
</IfModule>

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /{path}/.htpasswd
require valid-user

Satisfy Any
Order Allow,Deny
Allow from all
Deny from {*.*.*.*}

.htaccess がややこしいけど、こんなことが起きてる(と思う)

  • 自 IP 以外からのアクセスの場合
    1. 503/503.php に飛ばされる
    2. Satisfy Any の 「Allow from all」により認証は必要ないので、そのままメンテナンス画面が表示される
  • 自 IP からのアクセスの場合
    1. 503/503.php には飛ばされない
    2. Satisfy Any の 「Deny from {*.*.*.*}」に該当するので、「require valid-user」を満たす必要がある
    3. パスワードを聞かれる

で、携帯片手に 503 になってることを確認しつつ、PC から設定作業を行うと。


うちは業務では FTP オンリーのレンタルサーバーを使用することがほとんどなので、
システムの入れ替え時にどうしてもサイトを落とす必要が発生してしまう。
設定途中のサイトにアクセスされるとまずいけど、誰もアクセスしないような深夜作業なんていやだしね。
(そもそも、問題の解決方法として間違ってると思うし)
ってことで考えたのがこの方法。

CakePHP と asido を使った任意の画像を url の変更だけで任意のサイズで書き出す web アプリ

php の画像処理ライブラリのasidoが便利そうだったのでひどい web アプリを作ってみた。

url でサイズと画像を指定したら、そのサイズでその画像を出力するアプリ。

まず、元画像 500x334

これを、以下のような url でアクセスした時の画像




動作の説明がめんどいので、さらっと。

  • 元画像は ドキュメントルートからの絶対パス指定でも、http:// から始まる絶対パスでもok
  • url で指定されたサイズにリサイズする
  • 縦横比が異なる場合は、リサイズした上で画像の中心から指定サイズ分トリミングする
  • 元画像より大きいサイズを指定した場合は無視される
  • 本来は一度生成した画像はこの辺に書き出される→ http://pm11op.xii.jp/pm11op/anysizenizer/img/thumbs/test/100x100/
    • けど、借りてるサーバに得体の知れない画像が生成されるのは嫌なので、表示直後に unlink する富豪っぷり。
  • 中身は CakePHP と asido で動いてますよと。


一番下からダウンロードできますが、
実際に使用した際に発生したいかなる不利益も自己責任で処理してください。


ちょっと考えただけでも以下の問題点・改善すべき点があります。

まるっと一式 downlowd

はてなダイアリーで JavaScript eval ちょっと待って

盛り上がってるところ*1に水を差すようですが、
気になって仕事が手につきません。
さっき前の席の人に「なんでニヤニヤ*2してるんですか?」って聞かれました。
そろそろお昼なのに、食事も喉を通らないかもしれないので、
書いてしまいます。


はてダで Javascript を実行するという件について。

先日、自分のはてなダイアリーブログパーツを設置できるようになったので、事実上の JavaScript 解禁になりました。

ということで、JavaScript の eval を貼り付けるガジェットを Google Gadgets で作ってみました。


やりたくなる気持ちはわかります。
僕も id:amachang さん(面識も本題に関係もないのに名前出してすいません)とかのスクリプトとか、その場で実行したいです。
でも、外部から来た変数に eval したらいかんと思うのですよ。


↓例えばこんなことできちゃう
http://gmodules.com/ig/ifr?url=http://nitoyon.googlepages.com/js_eval.xml&up_eval=alert('bad%20script')&synd=open&w=320&h=50


いきなりこんな画面でボタン押す方がおかしいですが、
このガジェットを使用することで


「任意の人が自分の手を汚さずに(リンクを張るだけで)任意のコードを
実行させることができる」


んじゃないかと思います。

自動実行とかもやろうと思えばきっとできちゃうわけですからね。


代案があまり思いつかないですが、

  • 任意の人が
  • リンクを張るだけで

の部分を何とか出来そうな気がします。
トークンとセットじゃないと eval しないとか。


個人的には、外部から来た変数への eval は御法度だと思ってるんですが、
実際のところはどうなんでしょうね。

*1:はてブ http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/nitoyon/20070820/javascript_eval_on_hatena_diary

*2:ニヤニヤしてたのは、やらしいことを考えていたからです