並んだポスト

2009年6月24日

なんで2つ並んでいるんだろう。管轄の違い?投函される郵便物の量が多い地域だから?右に投函すると鬼太郎、左に投函するとねずみ男に届きます的なもの?

■本八幡
本八幡のポスト

■市ヶ谷
市ヶ谷のポスト

■水道橋
水道橋のポスト

ぐぐってみたら他にもあるようで。でも、理由はわからなかった。

PHP統合開発環境PDT2入門 ZendDebuggerのテストが起動しないよ編

2009年6月4日

本の7章 ZendDebuggerのセットアップに従って設定すると、The file ‘http://localhost/pdt/dummy.php’ which is required by the Zend Debugger, could not be found. Please verify that…みたいなエラーダイアログが出てしまいました。これは、P131に書かれているdummy.phpのコピー先は、c:\dev\workspaceではなく、C:\dev\xampp\htdocsではないかなと。でもこれ、エラーが出ても気にしなくていいみたいです。

また、dummy.phpを正しいフォルダにコピーして、続いて、Test Debuggerボタンを押してZendDebuggerの動作確認を使用とすると、私のPC環境ではApacheが落ちました。が、それもあまり気にしなくていい?みたいです。

どうも、localhostよりも先に、このPCに割り当てられたIPアドレスでZendDebuggerに接続しようとしているようなのですが、php.iniのzend_debugger.allow_hostsで許可しているIPアドレスは、127.0.0.1だけなので、接続に失敗して、その際になぜかApacheを落としてしまうようで。こうなったら、一度、XAMPPのApacheを停止→開始して、ついでにEclipseも再起動した方がいいようです。ちょっと不安定だね。

PHP統合開発環境 PDT2入門

2009年6月2日


PHP統合開発環境 PDT2入門[AA] という、初心者向けに丁寧に書かれている本を買いました。ページをめくりつつ実際にWindows上で環境構築をしてみたのですが、一カ所、はまったところがあったのでメモです。

“2-4 Subversionのセットアップ”という章に従ってApacheにSubversionのモジュールを組み込むように設定してからApacheを再起動しようとしたのですが、Apacheが起動しませんでした。その原因なのですが、”2-1 XAMPPのセットアップ”の章では、XAMPPのインストーラ版をダウンロードするように書かれているのですけど、これにはSubverionが入っていないようです。
XAMPのダウンロードページに開発パッケージというのがありますから、これを展開して、先にインストールしてあるXAMPPのフォルダ(この本に従うならc:\dev\xampp)に上書きすると、Subversionモジュールが組み込まれたApacheが起動するようです。

XAV-2s

2009年6月1日

マイコンソフトから発売されているXAV-2sが手元にあるのですが、購入時から開封もしていない状態でした。それでつい最近、ゲーム基板のプレイ映像をハードディスクレコーダで録画してみようと思い、基板の15KHz RGB出力をXAV-2sに接続してみたのですが、その際にXAV-2sの取扱説明書を見たところ、これがまぁ、非常にマニアックな内容なのですよ。

ゲーム基板のRGB出力は、様々な仕様があり、きっちり規格のビデオ/S端子出力とは相性がよくないものがあるのです。それらに対応するため、XAV-2sでは、このゲーム基板ではこうしなさい的な設定表が記載されているのです。普通のダウンスキャンコンバータでは「規格外の信号には対応していません」で済ませてしまうところを、あえて書く、マイコンソフトのそういうところが好きです。そのマニアックっぽい取扱説明書の対応表から引用すると、XAV-2sでは次のゲーム基板について動作確認されているようです。

メーカー 名称
シャープ X68000
富士通 FM TOWNS
各社 MSX
ナムコ システム86
ナムコ システム1
ナムコ システム2
ナムコ グロブダー
ナムコ バラデューク
カプコン CPシステム
カプコン CPシステムII
カプコン サイドアームズ
コナミ 極上パロディウス
コナミ ゼクセクス
コナミ ガイアポリス
コナミ 出たなツインビー
コナミ エイリアンズ
コナミ 究極戦隊ダダンダーン
タイトー F-2システム(大)
タイトー F-2システム(小)
セガ システム18
セガ システム16A
セガ システム16B
セガ システム32
セガ ギャラクシーフォース
東亜プラン V・V
アイレム M-72システム
アイレム R-TYPE II
アイレム クロスブレイズ
アイレム サンダーブラスター
ジャレコ メガシステム
ライジング 魔法大作戦
セタ,サミー,ビスコ SSV
SNK NEO・GEO

なんという偏りっぷり。たぶん、開発部にあった基板で試してみたという話なのだと思いますが。

もちろん、上記の基板をXAV-2sに接続してもちゃんと表示されない可能性もあると思います。ゲーム基板ってそういうものですし。取扱説明書にも、ダメな場合もありますよとは書いてありますし、明確に「コナミ社 グラディウス2」には対応していない(画面上部が極端に歪む)と記載されています。

あと、S端子やビデオ端子接続でテレビに表示できたからといって、これがVHSやハードディスクレコーダに録画できるかというと、それはまた別問題で、映像がぶれたり、一瞬だけ画面が黒くなったりと、かなりやっかいみたいです。ゲーム画面の録画は試してみたいとは思っているのですけど、録画するほどの魅せるプレイが出来るわけではないのでした。

PHPのrequire_once

2009年4月28日

PHPのrequire_once()は、このrequire_once文が書かれた箇所にファイルを読み込みます。ただし、1度だけなので、

<?php
require_once("a.php");
require_once("a.php");
?>

と記述した場合、2度目のrequire_once()ではa.phpは読み込まれません。例えば、a.phpではz.phpを読み込んでいて、b.phpでもz.phpを読み込んでいる場合、とあるスクリプトでa.phpとb.phpを読み込むと、z.phpを2度、間接的に読み込んでしまうような事態を防ぐ事ができます。
逆に何度でも読み込むのがrequire()で、これはC言語でいうところのincludeみたいなものです。

大抵の場合、同じファイルを2度読み込む理由はないからのだからと、何でもかんでもrequire_once()にしておけば安心だ、というもんでもありません。いや、自戒の意を込めて、以下は、つまらないバグに悩まされてしまった記録です。

例えば、
mysqlへアクセスするためのIDとパスワードの保存場所という記事。データベースの設定を外部ファイルにして、それをrequire_once()で読み込むという処理です。ここで、このDBへの接続部分を関数化してみます。

function connectDB()
{
    require_once('cfg.php');
    $dbc = mysql_connect($db['host'], $db['user'], $db['pass']);
    mysql_select_db($db['dbname']);
    return $dbc;
}

この関数を使ってDBに接続して、戻り値を使ってSQLを実行して、mysql_close()でDBへの接続を解除したとします。ここで処理が終わせずに、続けて再びSQLを実行するためにconnectDB()を呼び出すと・・・つまり、こんなソースです。

$id = connectDB();
mysql_query(...);
mysql_close($id);
$id = connectDB();
mysql_query(...);
mysql_close($id);

レコードの更新を実行したあと、画面を更新するためにデータを取り直すというような処理ですね。これがなぜ、動かないのかというと、2度目のconnectDB()では require_once()が実行されないのです。2度目の読み込みになりますから。なので、$db変数は定義されずにDBへの接続に失敗するわけです。

PHP的に考えたら当たり前なのですが、C言語のincludeようにプリプロセッサが外部スクリプトを展開して、その外部スクリプトはその箇所に恒久的に存在すると勘違いしてしまったのですね。つまり、関数の呼び出し毎にrequire_once()が実行されていると思っていなかったわけです。

そんなの、mysql_connect()した段階でエラーチェックしてりゃ気がつくだろ、と思うのですが、mysql_connect()のパラメータが指定されない場合、デフォ ルト値 server = ‘localhost:3306′, username = サーバプロセスの所有ユーザ名 password = 空のパスワードで接続するらしく、
Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
という警告メッセージはですのですが、戻り値は得られてしまうのです。もっともその先のmysql_select_db()の段階でエラーになって、こちらは検出できていたので、あれあれなんかおかしい、と気がついたわけです。

ちなみにPHPではmysql_close()を呼び出さなくてもいいそうです、と、ドキュメントに書いてあります。が、ほったらかしは気持ち悪いよね。

そこまで劣化しない証明とか

2009年4月19日

新規保存で劣化していくJPEG形式の画像の様子をとらえたムービーという記事を読んだのだけれど、そこまで劣化するかなと疑問。

元の記事であるGENERATION LOSSを見ると動画と一緒にソースが添えてあって、Processingで記述してありました。名前は知ってるけど使った事はありません。私もプログラマの端くれですから、ざっと読むくらいはできるのでソースを見ていくと・・・

float q = map(i,0,numberOfFrames,1,0);
p.setQuality(q,true);

ここ、なんか妙ですよね。map()関数がよくわからないのですけど、setQuality()はjpeg保存時の画質を決めてるところだと思うのですが、ここをこんな風に0~numberOfFrames(600-1)の間で変化させたら、画像を保存するたびに画質が変わってしまいます。

いい機会なのでとProcessingをダウンロードしてきて試し
てみました。

まず最初の画像ですが、元記事の動画の最初フレームをキャプチャして使いました。

最初のJPEG画像

Processingに元のソースコードを流し込んで実行してしばらくすると、599枚の画像ファイルが完成するのですが、この時点ですでにファイルサイズが怪しく、徐々に小さくなっています。
ファイル一覧

保存を繰り返すたびにどのように劣化するのかを確かめるのであれば、ファイル保存時の品質は一定にした方がいいでしょうから、

//float q = map(i,0,numberOfFrames,1,0);
p.setQuality(1.0 ,true);

このように固定値(ここでは1.0の最高値/PhotoShopだと画質10以上?)を設定した方がいいと思うのですね。この場合、600回保存した画像は
固定画質で600回目の保存
ぱっと見た感じでは劣化してません。もちろん、PhotoShopなどでヒストグラムをみると変化していますし、瞬間的に画像を切り替えると色の差異がみてとれますが。

いやまて、もしかして、これはsetQuality()のパラメータと保存される画像の変化を確認しているのか?と思ったのですが、だとしたら、

//PImage reference = loadImage("sky"+(i-1)+".jpg");
PImage reference = loadImage("sky"+(1-1)+".jpg");

このように、最初の画像を常に固定しないと意味がないのではないかなと。ちなみに、map()関数がなにをしているのかわからないのですが、最初の画像をいきなりmap(numberOfFrames-1,0,numberOfFrames,1,0)として保存した画像はこちら。

画質低保存

なんらかの画像処理ソフトで低画質保存したのと同じ結果になります、というだけの話でした。

Papervision3Dの描画順序

2009年4月7日

papervison3Dを使って、単純なPlaneに接するようにCubeを描画した際に、Cubeの一部が欠けて表示されてしまいました。大きなプレーンがあって、その上に立方体が置いてあるようなイメージです。Cubeの欠け方を観察していると、Cubeの面を三角形に分割した形状で欠けが発生しています。
推測ですが、papervison3Dは描画にZソートを用いている事と、PlaneもCubeも三角形単位で描画している事が影響しているのだと思われます。大きなPlaneの三角形の重心の位置と小さなCubeの三角形の重心の位置の前後関係かなと。

なので、まず、単純なPlane同士の描画テストをしてみました。

この投稿の続きを読む »

WordPress用のShadowbox JSプラグイン

2009年4月7日

WordPress上でFLASHコンテンツを表示したかったので。

WordPress用のShadowbox JSプラグインをインストール。SWFのサイズ指定方法がよくわからないけど、a rel=”~”を使って自分で指定するしかないの?

box2d_01

Lightboxプラグインと衝突しないのかなとか、ブラウザの種別やバージョンによっては表示されてないんじゃないかとか不安になってきたけど気にしない!

テクノスケープ TechnoScape 人工的空間風景

2009年4月1日

テクノスケープ 人工的空間風景

ダム、高層ビル、パイプが複雑に絡み合った工場、風力発電のプロペラ、鉄塔、道路の立体交差、車を運転しながら橋の下をくぐる時。これらの単語に心が動かされてしまう人のためのDVDです。
これら個々の単語をネットで検索すると、鉄塔マニアやダムマニアの方々はいますが、何か一つの事に特化しているのではなく、”それら”を併せた全てに見入ってしまう人にしか観る価値がない内容です。わかる人にはもう、これだけで充分に伝わるでしょう。

”それら”がどういった物を指すのかをはっきりと定義することが出来ないのですが、ボクは人の手で作り出された人の大きさを遙かに超えるもの全てに同じような言い表しようがない気持ちを持つことがあります。そういった物が作られた時点での人間の技術力の集体物に、人間のすごさを感じるのです。普通は(普通の人は)、映画とか小説、絵画や音楽といった文化的な物に対して感動する気持ちと同じ大きさのベクトルが、機能を持った巨大な構造物・建築物に向いているのです。また、ボクは幼少の頃を自然の中で育ったので、自然の中にある人工物や、その逆に街中の自然物に違和感を持つのですが、それが日常の中の非日常というおもしろさとして感じられるのかなと自己分析しています。

ボクには、これはどこどこの鉄塔だとか、なんとか型のダムですね、なんてことはさっぱりわかりませんが、でも、観てるだけで充分満足です。ただ、工場にはあまり萌えません。大気や水質を汚染するという印象を持っているからだと思います。(今時の工場はそんなことないのでしょうが)

こういう建築物は、DVDや写真で観るのではなく、自分の目で直接見た方がいいに決まっているのですが、それがなかかな難しい場所の映像も納められていますし、映像に合わせた綺麗なBGMがついていますから、買って観る価値のある内容です。納められている映像も、定点観測的な早送り程度の演出がたまにある程度で、余計な映像効果はありません。スクイーズ収録ですし、きっと、ボクと同じ嗜好を持つであろう、作り手の意志が充分に伝わってくる作品です。
ちなみにDVDが一枚入っているだけで説明のペラすらありませんし、DVDにはメニューもありません。その分、安いので、それで構わないと思いました。

公式サイトの下部にあるリンクから辿ると、同様の趣向を持つ人の情報を見る事ができますよ。

歩道に緑色の線

2009年3月30日

WordPressにgbliteboxというプラグインを導入したので、再び画像Upのテスト。

緑線

港区某所の道路で、歩道の白線に平行するように緑色の線がひかれていた。なんだろうこれ。検索してみると通学路に「緑のベルト」、歩道代わりにというBlogがあったので、これと同じようなものかな。

gbliteboxはlightbox.jsを使うためのプラグインで、それと一緒に記事内のリンクを別ウィンドウで開くためのアイコンを表示するAutoExternalLinkというプラグインをインストールしたんだけど、画像をlightboxで表示した時に変なところにリンクアイコンが表示されてしまっていて、その修正にちょっと手間取った。原因はlightbox内に#記号だけのアンカーリンクが埋め込まれていて、これに対してリンクが張られてしまっていたみたい。なので、AutoExternalLink.jsのexclusionStrを

var exclusionStr = new Array('#', 'www.retropc.net/mm/');

こんな風にして解決。