見慣れないforの条件を見かけたので、実験してみた。$i++ と ++$i に、そんな使い分けるほどの差があるのかどうか。

$ php -v
PHP 5.4.36 (cli) (built: Jan  2 2015 09:31:47)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans
<?php
$tmp = 1;
// Post-increment
$time_start = microtime(true);
for ($i=0; $i<100000; $i++) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;
 
// Pre-increment
$time_start = microtime(true);
for ($i=0; $i<100000; ++$i) {
    $tmp = 1;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo $time . "秒" . PHP_EOL;

↑を実行した結果

0.0064029693603516秒
0.0063819885253906秒

10万回のループで、たった0.00002秒の差。個人的には、たったこれだけの差なら、わざわざ ++$i なんて使いたくない。返却値に細心の注意(++$iでインクリメント後の値か、$i++でインクリメント前の値かの注意)が必要となるのに、++$iを、forの条件で書かれたら、「何か$i++とは違う挙動をさせたいような特別意図があるのか?」と、ドキっとするじゃないか…。読み手のストレスが増えるデメリットに対して、得られるスピードのメリットは大きくなさそうだ。

【追記】
もっと驚きの結果が出た。上記の結果は、手元の iMac(Late 2015 3.3GHz 16GB) なのだが、どこぞのクラウドの 1CPU メモリ1GB の CentOS7 の PHP7 で同じコードを実行したところ、以下の結果だった。これは、先ほどの結果より、2倍程度遅く、0.007秒ほど遅い。ただでさえPHP7は爆速になったと言われているが、本当に速度を改善したいのなら、マシン自体の構成をまず検討するべきという結果ではなかろうか。

0.013155937194824秒
0.013364791870117秒

Comments $i++ と ++$i の速度の違いについて実験した はコメントを受け付けていません。

CakePHP のマニュアルは、github で公開されている。
https://github.com/cakephp/docs

これを Mac に入れて、オフラインでも(飛行機の中でも)見れるようにしてみた。

$ mkdir CakeDoc
↑ ディレクトリ名は何でもOK

$ cd CakeDoc
$ git clone https://github.com/cakephp/docs.git .
$ sudo easy_install sphinx
$ sudo easy_install sphinxcontrib-phpdomain
$ make html

ここまですると、 CakeDoc の中に build/html というディレクトリが出来ていて、そこに en, ja などなど マニュアルの HTMLファイルができている。

Comments CakePHP の マニュアルを MacOS10.7 に入れたメモ はコメントを受け付けていません。

今年も秋の大イベント PHP Matsuri が開催されます!

PHP Matsuri 2011 リレーブログ
昨日の @cakephper さんから引き継ぎ、本日は lllnorikolll が書きます。

PHP Matsuri の魅力については、これまでのリレーブログに沢山かかれてあるので、ここでは割愛します。
本日は、今までの リレーブログ を読んで、行ってみたいけれどもいまひとつ踏み切れないそんなあなたの背中をそっと押すことにしましょう…。

世界中の PHPer が利用している フレームワーク の コアデベロッパ と、日本で直接話すことがでるイベント。

国内の様々な PHPer の開発スタイルをその目で見ることができる唯一のイベント。

来年はイベントチケットが即日完売で行けないかもしれない。

来年は 伊丹空港経由 大阪 で開催されないかもしれない。
(↑最後のは飛行機好きな個人的都合です…。

迷っているのなら、思い切って行ってみませんか!

踏み切れない理由は何でしょう。よく考えてみることにしましょう。

ケースその1. だって知り合い誰も行かないって言うし…。

そんなあなた!大丈夫です。
「もう仲の良い人が決まってしまっていて、入りづらかったりなんていうことありませんか?」
↑先日、隣のデスクの某氏を PHP Matsuri に誘ったときに聞かれました。
そんなことはありませんよ!
私も初めてイベントに参加したときは知り合いが誰もいなかったのですが、積極的に話しかけることで、すぐにうちとけました。一人だって平気です!

ケースその2. だって 伊丹空港 大阪 遠いし…。

そんなあなた!大丈夫です。
海外ゲストは、もっと遠いところをはるばる日本にやってくるのです。
彼らに普段会おうと思ったら、パスポートをもって、国際線に乗って、時差があるんですよ!
伊丹空港 大阪は、パスポートも不要です。国内線でOKです。時差もありません!

ケースその3. だって高いし…。

そんなあなた!大丈夫です。
実は私、PHP Matsuri 2011 の翌日に、アメリカで開催される ZendCon2011 に参加予定なのですが、ZendCon2011 はカンファレンスだけでも(今買うと)1,095ドル(だいたい8〜9万円)もするんです!
あきらかに PHP Matsuri費用対効果ありすぎです。

どうでしょう。参加する決心つきましたか?

では、 →こちら からお進みください。

では最後に、ここ数年の ケーキ集をご覧ください。

2008年の CakePHPカンファレンス東京

当時のCakePHP開発マネージャであるGarrett J. Woodworth氏と Cake ( photo by Kiryu Tsukimiya )

2009年の CakeMatsuriTOKYO2009

CakePHPコアデベロッパ Graham Weldon氏とJoel Perras氏と Cake

2010年の PHP Matsuri 2010

各種フレームワークコアデベロッパ Graham Weldon氏 ( CakePHP ) , Kris Wallsmith氏 ( Symfony ) , Joel Perras氏 ( Lithium ) , Nate Abele氏 ( Lithium ) と Cake

リレーブログ、明日は @remore さんです!

そして、この記事を読んでくださった方々と、PHP Matsuri 2011 当日、伊丹空港 大阪でお会いできることを楽しみにしています☆

【備考】
当記事では、伊丹空港という文字を多用したので、イベントへの参加は空のルートを使わなければいけないのかという疑問を持たれた方もいらっしゃるかと思います。(いない?
lllnorikolll が飛行機が好きなだけです…。
陸のルートでは、 N700 という窓側・壁側に電源を完備しネットも HOTSPOT を使うことができる素晴らしい新幹線もありますよ。

Comments PHP Matsuri 2011 への参加を迷っているあなたへ はコメントを受け付けていません。

大量のクエリを流そうとして
ERROR 2006 (HY000): MySQL server has gone away
エラーが出た。

XAMPP Control Panel で MySql を落としておく。

C:\xampp\mysql\bin\my.ini をリネームしてバックアップ
C:\xampp\mysql\my-innodb-heavy-4G.ini を
C:\xampp\mysql\bin\my.ini として保存。

XAMPP Control Panel で MySql を起動。

で、大量のクエリを実行できるようになった。

Comments XAMPP で ERROR 2006 (HY000): MySQL server has gone away はコメントを受け付けていません。

 

特定のサーバにSSH接続をする際、VPNを経由しないと接続できないような制限をもうけられていることがあった。

MacのVPN接続設定のオプションで、「すべてのトラフィックをVPN経由で送信」にチェックを入れておかないと、サーバにアクセスできなかった。が、これではVPNを経由する必要のないデータまでVPNを経由するようになってしまう。

サーバに接続する場合にのみ、VPNを経由するような設定をした。

参考にしたのは、こちら

 

sudo vi /etc/ppp/ip-up

以下のように編集し保存。

#!/bin/sh
 
if [ "$4" = "YYY.YYY.YYY.YYY" ]; then
    /sbin/route add -net XXX.XXX.XXX.XX1 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX2 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX3 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX4 ZZZ.ZZZ.ZZZ.ZZZ
fi

XXX.XXX.XXX.XX1〜4 は、VPN経由させたいサーバのIP。
YYY.YYY.YYY.YYY は、VPN経由した際のローカルIP。
ZZZ.ZZZ.ZZZ.ZZZ は、VPN経由した際のゲートウェイのIP。
参考サイトでは、interface-name が ppp0 かどうかで分岐していたが、VPN接続先が複数あったため、VPN経由した際のローカルIPで分岐するようにした。

# 2011/05/02 追記
# VPN経由した際のローカルIPが固定でなかったので、条件部分を書き換え
if [[ ! -z `echo “$4” | egrep “^YYY.YYY.YYY.[0-9]+$”` ]]; then
#if [ “$4” = “YYY.YYY.YYY.YYY” ]; then (←古いこっちはコメントアウト)
/sbin/route add -net XXX.XXX.XXX.XX1 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX2 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX3 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX4 ZZZ.ZZZ.ZZZ.ZZZ
fi

ファイルのパーミッションを変更

sudo chmod 744 /etc/ppp/ip-up

最後に、VPN接続設定の「すべてのトラフィックをVPN経由で送信」のチェックをはずして変更を保存適用。

設定が有効かどうかを調べるために、↓のコマンドで確認。設定した分の行が表示されればOK。(VPN接続中のみ表示される。切断すると表示されないことも合わせて確認。)

netstat -rn | grep ZZZ.ZZZ.ZZZ.ZZZ

これでVPNを接続するたびにこの設定が有効化され、特定の接続先のみVPN経由されるようになる。
ためしに確認くんを開くと、VPN経由しないIPから接続していると表示され、その状態のままサーバにVPN経由で無事SSH接続することができた。

Comments MacOS 10.6 SnowLeopard で 特定の接続先のみVPN経由する設定 はコメントを受け付けていません。

一時的なネタなのかと思ったら、まだ使えたので記念メモ。

www.php.net で「上上下下左右左右ba(Return)」と押して、画面左上のphpロゴ部分に注目。

Comments php.net でコナミコマンド はコメントを受け付けていません。

VAIO type UCentOS5 を入れていたが、Ubuntu 10.10 Desktop 日本語版 を ネットワークインストール してみた。
CentOS では、php, ruby などの各種バージョンが古めなことで、使いたいもののインストールに手間がかかるので、手軽に使えそうな Ubuntu を試してみようと思った。
今回、なぜ ネットワークインストール にしたかというと、CentOS にして以来、外付DVDドライブやUSBメモリからのブートが出来なくなってしまったからだったりする。

参考にしたのはこちらのサイト→ 古いノートPCで Ubuntu 9.04 LiveCD のネットワークブート

上記サイトでは、バージョン9.04 をインストールしているが、今回は 10.10 Desktop 日本語版 をインストールしたため若干異なる点もあった。

まず、インストール前に手元にあったもの。

  • CentOS5が入っている VAIO type U
  • VMware Fusion をインストール済みの MacBook Air
  • DHCP機能がついているルータ

行った手順

  1. MacBook Air の VMware Fusion に PXEサーバとなる Ubuntu をインストール
  2. PXEサーバの設定
  3. VAIO type U に PXEサーバから Ubuntu をネットワークインストール
  4. インストール後のネットワーク設定

以下、それぞれの手順について詳しく。

1. MacBook Air の VMware Fusion に PXEサーバとなる Ubuntu をインストール

MacBook Air で、Ubuntu Desktop 日本語 Remix CDのダウンロードページ から
ubuntu-ja-10.10-desktop-i386.iso(CDイメージ) をダウンロードする。

VMware Fusion で ダウンロードした iso ファイルから 新規仮想マシンを作成(以下 UbuntuVM と略)。

UbuntuVM は、VMware Fusion の設定で、ネットワークを ブリッジ接続 に設定する。

2. PXEサーバの設定

UbuntuVM を起動し、アプリケーション>ターミナル を立ち上げ、ifconfig でローカルIPアドレスを調べる。

自分の環境の場合、
・ルータ→ 192.168.73.1
・UbuntuVM→ 192.168.73.6
となっていた。

ローカルIPアドレスを調べたら、PXEサーバの設定をする。

sudo su -
 
mkdir /pxe
mkdir /pxe/images
mkdir /pxe/images/ubuntu
mkdir /pxe/pxelinux.cfg
 
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.03.tar.gz
tar zxvf syslinux-4.03.tar.gz
cp syslinux-4.03/core/pxelinux.0 /pxe/
cp syslinux-4.03/com32/menu/menu.c32 /pxe/
vi /pxe/pxelinux.cfg/default

以下の内容を書いて保存。

DEFAULT menu.c32
PROMPT 0
NOESCAPE 0
ALLOWOPTIONS 0
TIMEOUT 600
MENU TITLE PXE Boot Menu

LABEL Ubuntu Jaunty Live Desktop
kernel images/ubuntu/casper/vmlinuz
append boot=casper netboot=nfs nfsroot=192.168.73.6:/pxe/images/ubuntu initrd=images/ubuntu/casper/initrd.lz — splashd

LABEL Ubuntu Jaunty Live Install
kernel images/ubuntu/casper/vmlinuz
append boot=casper netboot=nfs nfsroot=192.168.73.6:/pxe/images/ubuntu initrd=images/ubuntu/casper/initrd.lz — splash only-ubiquity

以下の手順で、UbuntuVM の中でも、Ubuntu Desktop 日本語 Remix CDのダウンロードページ から
ubuntu-ja-10.10-desktop-i386.iso(CDイメージ) をダウンロードし、マウントする。
これは、最終的にネットワークインストールに使うイメージとなる。

wget http://ftp.kddilabs.jp/Linux/packages/ubuntu-jp/release-cd/releases/10.10/ubun
tu-ja-10.10-desktop-i386.iso
mount -o loop,ro ubuntu-ja-10.10-desktop-i386.iso /pxe/images/ubuntu

マウントできたか確認。

ls -al pxe/images/ubuntu

と打って、ディレクトリやファイルの一覧が表示されたら、マウントできている。

以下の手順で、dnsmasqnfs-kernel-server をインストールし設定。

apt-get install dnsmasq nfs-kernel-server
vi /etc/dnsmasq.conf

以下の内容を書いて保存。

no-hosts
server=/localnet/192.168.73.1
dhcp-range=192.168.73.10,192.168.73.20,2h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/pxe
dhcp-option=3,192.168.73.1

vi /etc/exports

以下の内容を書いて保存。

/pxe/images/ubuntu *(ro,all_squash,no_subtree_check,crossmnt)

dnsmasqnfs-kernel-server を再起動

/etc/init.d/dnsmasq restart
/etc/init.d/nfs-kernel-server reload

3. VAIO type U に PXEサーバから Ubuntu をネットワークインストール

ネットワークブートできるよう、VAIO type U のBIOS設定をする。
起動音が聞こえたらすぐに F2 を押すと、BIOS設定画面が現れる。
Advanced の Network Boot を Enabled にする。
Boot の Boot priority order で Network を最優先にすべきところを、念のため Network のみ有効とした。
設定を保存して Setup Utility を終了する。

すると、何やらネットワークを探しているような白い文字が数秒間表示され、しばらくすると、参考サイトにあるような PXE Boot Menu という画面が表示される。
↓カーソルキーで Install の方を選択し、Enter。

Ubuntu ロゴが表示され、インストールが始まるので、ユーザ名などなど記入し、インストール。
インストールが完了したら、再起動。
このとき、再度 F2 で BIOS設定画面を開き、
Advanced の Network Boot を Disabled に、Boot の Boot priority order を元に戻して、F10 で保存・BIOS設定終了する。

4. インストール後のネットワーク設定

Ubuntuを再起動して気付いた。
ネット繋がらない!
ifconfig で確認するも、eth0 は無く、lo だけが表示される。

sudo vi /etc/network/interfaces

eth0のところを dhcp と書き換えて、保存。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

ネットワークを再起動。

sudo /etc/init.d/networking restart

これで、ネットに繋がった。

おまけ

インストールしたままでは、ssh でリモートから接続できないようなので、OpenSSH をインストールする。

sudo apt-get install openssh-server

GUIでリモート操作するには、リモートデスクトップ設定をする。
参考サイト→ Ubuntuマシンにリモートデスクトップ(VNC)で接続

正しくインストールできたことを確認したら、PXEサーバとしての UbuntuVM はもう使わないので、シャットダウンしてVMファイルごと削除。

Comments VAIO type U に Ubuntu 10.10 Desktop 日本語版 を ネットワークインストール はコメントを受け付けていません。

プロフィールを iddy というサービスに書いていたのだけれど、同じようなページを自分のブログに置いておきたいと思い立ち、移行した際のメモ。

移行した先のプロフィールページはこちら
http://lllnorikolll.com

iddyにあったflickrのサムネイル表示と同等のものを用意したい!

そこで、flickr のブログパーツを探していたところ、flickr本家サイトにあった。

Flickr: Make a badge
http://www.flickr.com/badge.gne

Step 1: What sort of badge would you like to use?

HTML版とFLASH版が選べるようになっている。今回はHTML版を選んだ。

(iPhone, iPad では FLASHが見れないというウワサを聞いていたので、未試験だけれどもFLASHは避けた。)

flickr make badge step1

Step 2: Choose content

自分がアップロードした画像を表示させたいので Yours を選択。

今回はすべての写真を対象としたいので All of your public photos and video を選択した。

flickr make badge step2

Step 3: Layout

プロフィールページに表示させるので、flickrの自分のアイコンやスクリーンネームは非表示にした。

個数は 1, 3, 5, 10 から選択が可能。表示幅に合わせて選択。

最新orランダムは、はじめ最新に設定したら雪景色の写真で非常に寒々しかったので、ランダムに設定してみた。

(ランダムにしても高確率で航空関連の写真が出る…。)

写真サイズは、Square, Thumbnail, Mid-size から選択が可能。表示幅に合わせて選択。

Vertical(縦に並べる), Horizontal(横にならべる), None(自分で設定可能とする)から選択。

Vertical, Horizontal は、全体がtableタグで個々の写真はtdタグの中にimgタグが入る。

None は、全体も個々の写真もdivタグでかこまれる。

CSSでスタイルを指定することに慣れている人は、Noneのほうが使い勝手が良さそうだ。

flickr make badge step3

Step 4: Colors

背景色や枠線の色の設定が可能。

flickr make badge step4

Your badge!

表示されたコードをブログに貼り付ければ、完成。

↓は完成したもののサンプル。



www.flickr.com

ちなみに、iPhoneでの見た目はこちら↓

lllnorikolll.com iPhone キャプチャ

Comments Flickr badge : 本家ブログパーツ はコメントを受け付けていません。

PHPマニュアルがSVN管理されるようになり、以前のCVSからのビルドとは少し変わったのでメモ。

SVNのインストール

$ sudo port install subversion

PhDのインストール

$ sudo pear channel-discover doc.php.net
$ sudo pear install doc.php.net/phd
$ sudo pear install doc.php.net/phd_php

SVNからから日本語ドキュメント関連のファイルを取得

$ svn co http://svn.php.net/repository/phpdoc/modules/doc-ja phpdoc

↑英語版のマニュアルにしたい場合は、doc-ja の部分を doc-en にしてください。

マニュアルのビルド

$ cd phpdoc
$ php doc-base/configure.php --with-lang=ja

↑英語版のマニュアルにしたい場合は、デフォルトが en なので –with-lang オプションをつけなくてOK。

$ phd -d doc-base/.manual.xml -P PHP -f xhtml

phpdocディレクトリの中に output というディレクトリが作成される。
phpdoc/output/php-chunked-xhtml/index.htmlをブラウザで開く。
完成☆

ちなみに、configure のオプションは他にもいろいろあるようです。以下のように -h でヘルプが表示されます。

$ php doc-base/configure.php -h

Comments MacOS10.6SnowLeopardに常に最新のPHPマニュアルをSVNから作成する はコメントを受け付けていません。

PHP Matsuri に参加してきました。 – Notes From PHP Matsuri

PHP Matsuri は一泊二日のハッカソン(開発合宿)スタイルの技術イベントです。
PHP製のフレームワークである “CakePHP”, “Lithium”, “Symfony” の開発者を海外からゲストとして招いて、とても豪華なイベントでした。

PHP Matsuri was a overnight technical event in Tokyo, JAPAN.
The developers of PHP Framework (“CakePHP”, “Lithium”, “Symfony”) were invited to Japan.
It was deluxe event.

英語の話せない私でも楽しめたのは、通訳の方や、参加者の中で英語がわかる方が随時通訳してくださったおかげです。
@mackstar さん、@cakephper さん他、皆様にこの場を借りてお礼を言いたいと思います。ありがとう!

Thanks to the interpreters and others, I was able to enjoy the event even though I don’t speak English.
I want to take this opportunity to thank @mackstar and @cakephper.

イベントの詳しい様子は、他の参加者のブログ もご覧ください。

See the link page for more details.

嬉しかったこと – Happy

  • フレームワーク開発者の生の声を聞けたこと。
  • 今度こそ酒におぼれずに物作りができたこと(ちょっと飲んだけど)
  • はじめて発表してみた
  • I was able to discuss issues directly with the frameworkd developers.
  • I could focus on the development, without losing myself to booze this time. ( I drank only a little… )
  • I gave a Lightning Talk for the first time.

驚いたこと – Amazing

  • みんな当たり前のように github を使っていたこと。(ちなみに 私のアカウント は絶賛放置中…)
  • Mac率の高さ(PHPのNameSpaceを書くには、バックスラッシュが表示されるMacのほうが違和感が無くて良いのかも)
  • github was in common use.
  • It has the high Macintosh user rate

写真 – Photos

  • コードを書いていて、ふと振り返るとゲーム会場になっていた

When I was coding, I turned around, there was the game hall.

  • カメラ好きなお二人と朝散歩に出かけた

I took a morning walk with two Camera Lovers.

  • CakePHP の開発者である Graham Weldonさん ( @predominant ) が、去年開催された CakeMatsuri で私が飛行機好きと言ったのを覚えていてくれて、写真のおみやげをくれた。とても嬉しかった☆

Mr. Graham Weldon ( @predominant ) who is CakePHP core developer gave me a present from Australia. He remembered that I loved airplanes. It made me so happy!

  • ホワイトボードに無造作にはられた付箋(どこから来たか)を、折角だから地図上に配置してみた。今見直すとイギリスとかいろいろ足りてない地図になっていたのと、ふと振り返ると人だかりができてて恥ずかしかった(^^;

Sticky that shows “Where are you from ?” was casually pasted to the whiteboard. I drew a map, and put the sticky on the map. I was kind of embarrased when I noticed there was crowd behind me.

  • ゲストとケーキ

Guests and Cakes

最後に – Final Note

とても楽しい2日間でした。このようなイベントが今後もあったら是非参加したいです。
そして、英語を覚えて、いつか ZendCon に行きたい!!!

I had a nice two days. I want to participate on the similar type of events again. And, I want to go to the ZendCon when I learn to speak English.

Comments 2 コメント »