犬ターネット

Archive : 2011年07月

PHP-5.4.0 の Short syntax for arrays

さっき PHP-5.4.0 alpha 入れたのでついでに Short syntax for arrays も試した。

むっきいいいいいいいいいいいいい!便利すぎしぬ


PHP 5.4.0 のビルトインウェブサーバーを試してみる

おもしろい実装が PHP 5.4.0 に組み込まれることになった。

というわけでPHP builtin serverの残タスクはほぼ消化し終えたと思う。5.4でお披露目できそうです。
PHP: ビルトインウェブサーバー - Manual

さっそく PHP 5.4.0 アルファリリースで試してみる。

# cd /usr/local/src
# wget http://snaps.php.net/php5.4-latest.tar.gz
# tar -xzvf php5.4-latest.tar.gz
# cd php5.4-201107282230/
# ./configure
# make

インストールはしないで、とりあえず実行できるか確認。

# ./sapi/cli/php -v
PHP 5.4.0alpha3-dev (cli) (built: Jul 26 2011 19:16:58)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies

仮のドキュメントルートを作成。ついでにindex.phpも作成(日付表示するだけ)。

# mkdir /usr/local/src/php54docroot
# vim /usr/local/src/php54docroot/index.php

<?php
date_default_timezone_set'Asia/Tokyo' );
echo 'php webserver test.' "\n";
echo date'Y-m-d H:i:s' ), "\n";

さっそく8000 ポートで起動してみる。

# ./sapi/cli/php -S localhost:8000 -t /usr/local/src/php54docroot
PHP 5.4.0alpha3-dev Development Server started at Tue Jul 26 19:32:10 2011
Listening on localhost:8000
Document root is /usr/local/src/php54docroot
Press Ctrl-C to quit.

別ターミナル開いて curl で http://localhost:8000/ にアクセス。おおお、でたでた。

# curl http://localhost:8000/
php webserver test.
2011-07-26 19:34:19

ログはこんな感じ。

[Tue Jul 26 19:33:12 2011] 127.0.0.1:38679 GET / - Request read
[Tue Jul 26 19:33:12 2011] 127.0.0.1:38679 GET / - Response sent successfully (200)

存在しないファイルにアクセスするとこうなる。

# curl http://localhost:8000/unko.html
<html><head><title>404 Not Found</title><style type="text/css">
body {background-color: #ffffff; color: #000000;}
body, td, th, h1, h2 {font-family: sans-serif;}
pre {margin: 0px; font-family: monospace;}
a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse;}
.center {text-align: center;}
.center table { margin-left: auto; margin-right: auto; text-align: left;}
.center th { text-align: center !important; }
td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccccff; font-weight: bold; color: #000000;}
.h {background-color: #9999cc; font-weight: bold; color: #000000;}
.v {background-color: #cccccc; color: #000000;}
.vr {background-color: #cccccc; text-align: right; color: #000000;}
img {float: right; border: 0px;}
hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
</style>
</head><body><h1 class="h">Not Found</h1><p>The requested resource /unko.html was not found on this server.</p></body></html>

ログはこんな感じ。

[Tue Jul 26 19:40:50 2011] 127.0.0.1:51149 GET /unko.html - Request read
[Tue Jul 26 19:40:50 2011] 127.0.0.1:51149 GET /unko.html - No such file or directory
[Tue Jul 26 19:40:50 2011] 127.0.0.1:51149 GET /unko.html - Sending error page (404)

PHP自体がwebサーバになるってのはおもしろい。すごいすごい。さすがの moriyoshit 先生。


たまに

インターネットしてるとこういういい文章にであうことがあるんだけど

おしっこドリンクバー

まああれよね、これの3倍濃縮みたいな文章をほぼ毎日facebookに書いてるよしいの存在は貴重だしあまり教えたくありませんよね。


Chrome と Opera は Object のキーが整数っぽいやつを勝手にソートしてしまう

こういう javascript を実行すると「こめをとぎとぎ」が表示されると思ってたんだけど、Chrome と Opera だけは「ぎとぎとをめこ」が表示された。

ざっと試した感じ、Chrome と Opera だけは「parseInt(key) == key」 の場合に key 昇順でソートされるっぽい。

以下を Chrome と Opera で実行すると「イャジアン」が表示される。

これバグなのか仕様なのかちょっとわからないけど、Perlのハッシュなんかだと順番なんか保証されないわけだし、こういう key:value を順番に操作するみたいなことはやめといたほうがいいと思った。


mod_rewrite 使ってケータイっぽかったらリダイレクト

mod_rewrite を使って、スマホの場合は http://www.example.com/sumaho/ に、ガラケーの場合は http://www.example.com/keitai/ にリダイレクト。

RewriteRule は上から書かれた順に評価されるので、いったんスマホ判定されればそこで処理終わる。ガラケー判定はされない。

[R=302,L] でわざわざ 302(Found) ステータスコード返してるのは、docomo端末の場合 301(Moved Permanently) だとエラーになる機種があるとかないとかどこかで見た記憶があるので。実機で試したけど 302 で問題ないっぽい。


MXR Distortion+

中古で買った MXR の Distortion+、YAMAHA SG-1000 との相性が悪くて放置してたんだけど、昨日テレキャスにつないでほぼフルテン設定にしたら意外といい音出た。

歪みはこれと IBANEZ TS-9DX あればとりあえずはよさそう。

あー新しいコンパクトディレイほしい、誰か100万円くれ。


ひっさびさに

妻が久しぶりに休日休みで子守りお願いできたので、日ごろのフラストレーションはらしに近所のスタジオいって一人でギター弾いて帰ってきた。

結構な音量でギター弾いたのほんとうに久しぶりで最初の30分くらいはニタニタニタニタニタニタニタニタしながらギター弾いてた。

途中でツイッターに写真upしたりしながら麦茶のみつつ楽しい二時間をすごした。また行く。


ママの心をわしづかみ

保育園の男の先生、迎えにきたママに「あれ?髪切った?雰囲気かわったねー」ってサラッという。言われたママさんまんざらでもない。

ずば抜けてかっこいい顔してるわけじゃないんだけど、こういう些細な変化に気付いてあげるってのがモテる男の一要素なんだろうな。

いっぽうおれは今日もツイッターでうんことかつぶやいてイル


ダサイト

仕事でプロキシみたいの作る必要がありそうなんだけど、まずはコンテンツ取得してちょっとソース弄って返す、みたいなの作ってみた。

ダサイト

コンテンツ内の画像パスやリンクは正規表現使って置換しなきゃならないんだけど面倒だったので、baseタグ使って手抜きした。


プリログがさあ

おもしろい。

http://pri-log.jp/

mixiみたいに閉鎖された環境じゃないのに、顔出しして飲酒喫煙写真とかアップしてるんだから、まあ、大変ですね。


patchコマンドをインストールしたかったけどroot権限なかったのでホームディレクトリにいれた

# cd
# mkdir local
# mkdir tmp/src/
# cd tmp/src/
# wget ftp://ftp.gnu.org/gnu/patch/patch-2.6.1.tar.gz
# tar -xzvf patch-2.6.1.tar.gz
# cd patch-2.6.1
# ./configure --prefix=/home/mgng/local

makeしたら /home/mgng/tmp/src/patch-2.6.1/src/patch.c:1542: warning: the use of `mktemp' is dangerous, better use `mkstemp' ってエラーが出たので、該当箇所の mktemp を mkstemp に変更してからmake。

# make
# make install
# ~/local/bin/patch -v
patch 2.6.1
Copyright (C) 1988 Larry Wall
Copyright (C) 2003, 2009 Free Software Foundation, Inc.
...

よしよし


dateコマンドの設定いい加減覚えろこのハゲ

2011年07月12日 09時22分33秒 に設定したい場合(rootで)

# date 071209222011.33
2011年  7月 12日 火曜日 09:22:33 JST

フォーマットは

# date [月][日][時][分][西暦].[秒]

んべむいお

ねむい


PHP の preg 系関数に使える正規表現のサイズ

PHPのpreg系関数の正規表現にあんまり大きいパターンを渡すと以下のようなエラーが出る。

Compilation failed: regular expression is too large at offset ...

PCREの場合、ディフォルトだと正規表現には 65539bytes までしか使えない、と記述されている(http://www.pcre.org/pcre.txt の LIMITATIONS を参照

本当にそうなのか、PHP-5.4(alpha1) で最小限コンパイルして試してみる。

# cd /usr/local/src/
# wget http://snaps.php.net/php5.4-latest.tar.gz
# tar -xzvf php5.4-latest.tar.gz
# cd php5.4-201107110030
# ./configure
# make

./sapi/cli/php に実行ファイルができるので確認する( -n オプションは php.ini 使わないよっていうオプション)

# ./sapi/cli/php -n -v
PHP 5.4.0alpha2-dev (cli) (built: Jul  2 2011 07:46:52)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies

ためしに以下のようなスクリプト作って実行してみる。

<?php
$pattern '';
for( $i=1$i<=65539$i++ ) {
  $pattern .= 'a';
  if ( preg_match"/{$pattern}/"'test' ) === false ) {
    exit("error : {$i} bytes");
  }
}

実行。32765 bytes でエラーになった。

# ./sapi/cli/php -n _test.php
Warning: preg_match(): Compilation failed: regular expression is too large at offset 32765 in /usr/local/src/php5.4-201107110030/_test.php on line 5
error : 32765 bytes

さて、正規表現の実行可能バイト数を増やすには PCRE の link size を増やしてあげる必要がある (http://www.pcre.org/pcre.txt の HANDLING VERY LARGE PATTERNS を参照)

ということで PCRE を --with-link-size=3 指定してソースコンパイル(PHPのコンパイルでつかうだけなのでインストールはしない)

# cd /usr/local/src
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
# tar -xzvf pcre-8.12.tar.gz
# cd pcre-8.12/
# ./configure --enable-utf8 --enable-unicode-properties --with-link-size=3
# make
# cp -a pcre.h .libs/ ← PHPコンパイル時に pcre.h が必要なので .libs/ にコピーしとく

で、PHPを再コンパイル。pcre ライブラリの場所は上記の .libs を指定。

# cd /usr/local/src/php5.4-201107110030/
# make distclean
# ./configure --with-pcre-regex=/usr/local/src/pcre-8.12/.libs
# make

さっき作ったPHPスクリプトを実行してみる。

# ./sapi/cli/php -n _test.php

30分たっても結果返ってこなかったので途中であきらめた...

ということでスクリプト内容変えてためしてみる。

<?php
$base 65539;
var_dump(
  pregtest$base),
  pregtest$base10 ),
  pregtest$base100 ),
  pregtest$base150 )
);

function pregtest $base$multiply ) {
  $pattern "/" str_pad''$base $multiply'a' ) . "/";
  return preg_match$pattern'test' ) ;
}

実行。65539 * 100 bytes までは実行できた。

# ./sapi/cli/php -n _test.php
Warning: preg_match(): Compilation failed: regular expression is too large at offset 9830850 in /usr/local/src/php5.4-201107110030/_test.php on line 12
int(0)
int(0)
int(0)
bool(false)

まあ、6M もあれば充分か。


mgng2(森ボーイ)の神ポストまとめ

@mgng2 という、フォロワーの発言を学んで適当にしゃべるボットをつくったんですが、たまに神ポストされるので、それをまとめておきます。


俺たちは世論コントロールは世論コントロールは世論コントロールは世論コントロールは世論コントロールは世論コントロールは世論コントロールは世論コントロール

ふわふわ汁だく親子丼600\(^o^)/ 臍帯血から作成

酒井法子、酒井法子、酒井法子、酒井法子、酒井法子、酒井法子、酒井法子、酒井法子、酒井法子

黒いハットリくんのちんぽこ

実は俺botなんだ。

ロジンぽっふぽふぽふ

ただいまんこだがもうしばらく離脱るるる。

貴様の軍隊 我らの軍隊 貴様の軍隊 海兵隊 おれの愛する海兵隊!

かー。980円…買います!これ、幾らなんでしょうね。むむむ。むむむ。むむむ。980円…買いますよ、買えばいいんだろ、コンチクショー。むむむ。

一生童貞

本当に気持ちのいいセックスが有料化

風船フェチDVDを常時上演いたします

パパイパイパイパイパイパイパイパイパイパイパイパイパイパイパイパイイイイィィィヒヒヒヒヒイパイィィィィィッィんんまだ起きてました☆

bloodthirsty butchers吉村秀樹のギター4本が盗難

ドキッ!女だらけのとこだけすごい流暢な発音で言う。 の巻

ラーメン

昨日夕飯の準備が間に合わず、しかたないので出前でラーメン頼んで、娘といっしょに食べたんだけど、それ以来娘がずっと「あーめんあーめん(ラーメン食わせろこのクソボケメガネが殺すぞ?あ?)」と言っているのでちょっと失敗したかなと思っている。


Perlの配列返す関数で値をうけとるとき

ああああ...こういう書き方できるのか...うああああ...

一方PHPやjavascriptでは一旦変数に格納しないとだめなのであった...ああああ....

PHP

javascript

あああああぁぁぁああぁぁぁぁぁぁああぁ.........

--- 追記 ---

http://b.hatena.ne.jp/heavenshell/20110922#bookmark-60122342

PHP は list使えばいいのかああぁぁああぁぁぁあxx


PHPで画像をリサイズ減色モザイクしてファミコンのアイコンっぽい画像を作る(削除)

削除


違法音楽ダウンロードサイトから音楽をダウンロードしても逮捕されない方法

今日もあついですね


textarea 用の zen-coding プラグイン

vim には zencoding-vim、サクラエディタには Zen Coding for Sakura Editor を入れて使っているんだけど、textarea 用の zen-coding プラグイン、Zen Coding for textarea があったので設置してみた。

設置の仕方は簡単で、ここ から Zen Coding for textarea vx.x.x をダウンロード、zen_textarea.min.js を script タグで読み込めば、画面内のtextareaでzen-codingコマンドが使える。

以下テキストエリアの文末にカーソルを合わせてCtrl+E(Macは Command+E)押すとHTML5形式の雛形が展開される。うあー超便利。

まじzen-codingなかったらしぬ


in_array か preg_match か

単語存在チェックするのに

とするか

とするかって話。

PHPer だと多分 in_array を使う人が多い気がする。でも Perl 触ってると preg_match を使いたくなる。

じゃあどっちが処理速いかって話をしよう。in_array と preg_match 使って、3000単語の中から特定の単語探してみる。

まずは in_array の場合。

次は preg_match の場合。

ほんっっっっっっのわずかだけど preg_match が速い。じゃあ10000単語に増やしてみよう。

in_array の場合。

preg_match の場合。

エラー。

preg_match の場合、ディフォルトだと正規表現パターンに64Kまでしか使えない。それ以上使いたい場合はコンパイルしなおせと。でも動作遅くなるよって書いてある

HANDLING VERY LARGE PATTERNS

Within a compiled pattern, offset values are used to point from one part to another
(for example, from an opening parenthesis to an alternation metacharacter).
By default, two-byte values are used for these offsets,leading to a maximum size for a compiled pattern of around 64K.
This is sufficient to handle all but the most gigantic patterns.
Nevertheless, some people do want to process truyl enormous patterns,so it is possible to compile PCRE to use three-byte or  four-byte offsets by adding a setting such as

--with-link-size=3

to the configure command.The value given must be 2, 3, or 4. Using longer offsets slows down the operation of PCRE because it has to load additional bytes when handling them.

ええと、どっちが速いかって話か。別にどっちでもいい。


このサイト

このサイトはブログっぽい形態をとってはいるものの基本的にHTMLのタグ書いて投稿するスタイルでいわゆるgeocities世代のようにFFFTPでホームページアップするのとなんら変わらないんですがおかげさまでHTMLとかcssとかjavascriptを覚えることが出来るし自分で構築したシステムなので自由度が高いしええとなんだっけ、いいからビールおごれよ!


要素内で指定幅で自動改行させたいんだけど

長いURLなんかを埋め込むと以下のように文字列がはみ出してしまう。

http://unkounkounkounkounkounkoqwertyuiopasdfghjklzxcvbnm.example.com

でも、こういうcssを設定してあげれば指定幅で自動改行されることがわかった。

.ww {
  width:200px;
  word-wrap: break-word;
  word-break:break-all;
}

http://unkounkounkounkounkounkoqwertyuiopasdfghjklzxcvbnm.example.com

でも td タグに上記 css を設定しても、Firefox だと無視される(以下はFirefoxで見ると表示がおかしくなるはず)

http://unkounkounkounkounkounkoqwertyuiopasdfghjklzxcvbnm.example.com

td > div class="ww" のように td の中に div 入れ子にしないとダメっぽい。

http://unkounkounkounkounkounkoqwertyuiopasdfghjklzxcvbnm.example.com

っていう、くっだらない作業して日々小銭を稼いでるんだけど、全然お金がたまらないので、だれかとっととビールおごれよ