透過1px×1pxのGIFをPHPで出力

メモ。

<?php
header('Content-Type: image/gif');
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');

ちなみにPNGの場合。

<?php
header('Content-Type: image/png');
echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAAK/INwWK6QAAAAtJREFUGFdj+A8EAAn7A/0r1QhFAAAAAElFTkSuQmCC');

7弦ギターの弦を交換した

7弦に何ゲージを張っているのと友人に聞かれて覚えていないことが多いので貼ってみる。
7弦には10-59を張っている。ただ、少し不満があって、1弦は10で良いのだけれども、7弦はもう少し太い弦を張りたい。スケールの問題もあって、7弦はどうしてもダラダラになってしまうので、6弦用のヘビーボトムみたいなのが欲しいところ。


弦のメーカーはダダリオ。弦ごとに色が違っていて分かり易い。因みに7弦は銅色。
アーニーボールの弦とかの方が張りたての金属音が綺麗なのだけれど、ダダリオは安定した感じの音が鳴るので、それなりに歪ませる前提だと向いている気がする。
7弦ギター自体はIbanez製の安いもの。大学時代に先輩から1万円くらいで譲ってもらった。塗装が剥がされていたりしてかなり状態が悪かったので、思い切って大学時代に自分で色を塗った。

知っている人が見たら一目瞭然だけれども、Dream TheaterのJohn Petrucciの7弦ギターと同じようにカラーリング。思ったよりも模様が複雑だったので苦労したように記憶している。
7弦の音程を捕まえるにはデフォルトで付いていたピックアップだとあまりにも役不足だったので、リアのみToneZoneに変更してある。

6弦ギターでダウンチューニングしている人なら、あまり必要のないものかもしれないけれど、レギュラーチューニングにも関わらずBが出るのはかなり嬉しいし楽しい。
一時期はKoЯnLimp BizkitSlipknotなどの7弦ギターが注目されたけれども、今ではお蔵入りの存在なのだろうか。最近は7弦ギターが前に出ていることがほとんどないように感じる。

Firefox軽量化をやってみた

zilog -zilcaroy’s weblog-::Firefox軽量化
こちらのエントリをみて、userChrome.jsを入れる気になった。そして、
SCRAPBLOG : [userChrome.js] 軽量マウスジェスチャ(Windows/Linux/Mac対応)
こちらを利用させてもらった。
普段は開発向けのアドオンを無効にしていることもあってか、最近はFirefoxの動作にストレスを感じることが少なくなった。
開発用と閲覧用でプロファイルを分けるのも一つだと思うけれど、今のところは必要に応じてアドオンを有効にしたり無効にしたりしている。

fsockopenでHTTPリクエスト

PHPのテクメモ | fsockopenは時間がかかる?
自分も以前にPHPでHTTPリクエスト投げてあれこれする処理を書いたことがあるけれども、特に時間がかかるというようなことはなかった。
気になったので、部分的にコードを書いてみたけれど、やはり大丈夫なようだ。かおるんさんのコードがないので、どのような部分に差があるのかはわからないけれども、参考になれば幸いです。

<?php
$port = 80;
$path = '/';
$host = 'www.example.com';
$header = ''
. "GET $path HTTP/1.1\r\n"
. "Host: $host\r\n"
. "Connection: Close\r\n"
. "\r\n";
$handle = fsockopen($host, $port);
fwrite($handle, $header);
$buffer = '';
while (!feof($handle)) {
$buffer .= fgets($handle, 1024);
}
fclose($handle);
file_put_contents('response.txt', $buffer);

※環境はPHP 5.2.3 / Fedora Core 6

strtod

昨日書いたPHPの文字列・数値の計算結果PHPマニュアルを読んでいたら、結局のところはstrtod読めと書いてあったので、man strtodを読んでみた。

strtod(), strtof(), strtold() 関数は、 nptr が指し示す文字列のはじめの部分を double, float, long double 型の値にそれぞれ変換する。
Unixマニュアル

なるほど。変換の詳細も書いてある。

PHPの文字列・数値の計算結果

動的型付なので、文字列でも計算時に良かれを図ってくれるのは違和感のないところだったのだけれど、

<?php
echo '-1hoge' + 100;

これで99となるのは知らなかった。先頭から数字と読めるところまでは解釈して後の文字列は切り捨てるみたい。なので、

<?php
echo 'hoge100' + 100;

これは200ではなく100のまま。うーん、文字列結合なら.を使うから問題はないのかな。PHPでも流石に型キャストエラーになるのかと思っていた。
ちなみに

<?php
echo 'hoge' + 'hoge';

だと0となる。つまり、

<?php
echo 100 / 'hoge';

これだとゼロ除算エラーに。。。
なんとなく気持ち悪いけれど、良いことなのか悪いことなのか、いまいちピンとこない。

[追記]
PHP: 文字列#文字列の変換 – Manual
なるほど。仕様としてそのようにしているなら、そういうものということか。

組曲『ニコニコ動画』の中の曲を買った

組曲『ニコニコ動画』のオリジナルの中で気に入ったものを何曲か買った。

TVアニメ「らき☆すた」OP主題歌 もってけ!セーラーふく

TVアニメ「らき☆すた」OP主題歌 もってけ!セーラーふく

ファンキーな感じのバッキングなんだけど、ポップすぎて笑えるくらい素敵。サビに入るとコード進行が
FFBbBbC#D#FF
となっていてなかなか壮大な雰囲気。歌詞も良くて、「セーラーふくだからです←結論」あたりはやるなぁとか思ってしまう。これくらい無茶できると音楽業界がもっと盛り上がりそうなのにと思う。

瞳の欠片

瞳の欠片

二曲目のNowhere目当て。ヤンマーニヤンマーニヤンマーニヤイーヤの曲。繰り返し具合が絶対運命黙示録かと思った。最近こういう曲調の曲を聴いていなかったから結構テンションが上がった。こういう曲調というのは、大森俊之が作曲した曲みたいな感じ。エヴァとかナデシコとかスレイヤーズとか良く聴いたなぁ。
せっかくなので、サビのコード進行を。
CmCmCadd9Cadd9AbEbFmG

アンインストール

アンインストール

菅野よう子ORIGAに提供してる曲を遊佐未森風にアレンジしたような曲調で中々良い感じ。特にBメロは遊佐未森だなぁ。これもせっかくなので、サビのコード進行を。
FmDbAbEb

ということで、ウクレレ記法使われなさすぎ←結論

神宮外苑花火大会に行ってきた

8月16日に友人と神宮外苑花火大会に行ってきた。国立競技場から花火を堪能。
花火を見ながら音が凄いなと感じた。波形を途中で切ったときにできるプチというような音(波形が垂直になってしまうためで、波形編集で音を切るときはフェードインとかフェードアウトしたりする)に近い印象を受けた。きっと、ものすごく短い時間に音が大きくなってすぐに消えているのだろう。だから擬音語にするなら、「バン」とか「ドン」とかではなく、「パ」とか「カ」とかそういう音に聴こえた。
せっかくだったので、何枚か写真を撮っておいた。






自宅サイトをリニューアル

トップページが余りにも簡素なページだったので、リニューアルをしてみた。
モックアップを作るのが面倒だったので、今までは個別に画像を作ってCSSを書きながらレイアウトの調整をしたりしていたけれど、さすがに効率が悪いのと全体のデザインができないので、今回はPhotoshop上でちゃんとモックアップを作ってみた。とはいっても、デザインと呼べるほどのものでもないけれど。

Before

After

PHPでGeoIPを使えるようにする(インストール手順など)

PECL :: Package :: geoip
IPアドレスから国や地域を取得するのに利用できるPECLのGeoIP関数がstableになった。
以前にも使っていた時期があったけれども、かなり放置していたので、もう一度最初から入れなおしてみた。ということで、インストール手順などをメモ。
詳しくは、PHP: GeoIP 関数 – Manualを参考に。

  • GeoIP C ライブラリ
$ cd ~/download
$ wget http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.2.tar.gz
$ cp GeoIP-1.4.2.tar.gz /usr/local/src/
$ cd /usr/local/src
$ tar zxvf GeoIP-1.4.2.tar.gz
$ cd GeoIP-1.4.2
$ ./configure
$ make
$ sudo make install

  • GeoLite Country, GeoLite City バイナリデータを配置
$ cd ~/download
$ wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
$ wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoIP.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ sudo cp GeoIP.dat /usr/local/share/GeoIP/
$ sudo cp GeoLiteCity.dat /usr/local/share/GeoIP/
$ sudo mv /usr/local/share/GeoIP/GeoLiteCity.dat /usr/local/share/GeoIP/GeoIPCity.dat

$ sudo /usr/local/php/bin/pecl install channel://pecl.php.net/geoip-1.0.0
$ sudo cp /usr/local/php/lib/php/extensions/no-debug-zts-20060613/geoip.so /usr/local/php/lib/php/extensions/geoip.so

  • php.ini 修正
# 追加
extension=geoip.so

はまりどころとしてはGeoLite Cityのファイル名をGeoLiteCity.datからGeoIPCity.datに変更しないと、データの読み込みに失敗する。あと、商用データじゃないと利用できない関数があるので注意。
実際の利用としては

<?php
$record = geoip_record_by_name('www.example.com');
print_r($record);

というコードで

Array
(
[country_code] => US
[region] => CA
[city] => Beverly Hills
[postal_code] => 90210
[latitude] => 34.099498748779
[longitude] => -118.41429901123
[dma_code] => 803
[area_code] => 310
)

というようなデータが取得できる。