VSuite RamdiskとInternet Explorerの一時ファイル

2009 年 7 月 1 日

VSuite Ramdiskで作成したRAMディスクを、IEの「インターネット一時ファイルのフォルダ」に設定した場合の注意点、というか、はまったメモです。

まず前提として、IEの「インターネット一時ファイルのフォルダ」で、使用するディスク領域のサイズを小さく設定してあっても、そのサイズを超える単一のファイルにアクセスする際には、指定したサイズのファイルが作成されます。例えば、設定を10Mにしておいても、100Mぐらいの動画ファイルを開けば(観れば)、指定した保存領域を100M使うわけです。(ページを閉じたりページ移動すると、そのファイルは消えるようですが)

ここでRamdiskの容量を10Mで作成しておいて、IEの一時ファイル領域の指定も10Mとします。この状態で10Mを超えるファイルを開こうとすると、ファイルが壊れます。ディスクがいっぱいなので。壊れない場合があるようなのですが、壊れる場合があります。それで保存できなかったというエラーメッセージでも表示されればまだ気がつくのですが、たとえば大きめのZIPファイルはエラー表示なしに途中でダウンロードが中断し、保存先にファイルが作成されてしまいますので、無事にダウンロード出来たように見えてしまいます。当然、解凍・展開はできません。
また、ニコニコ動画では、動画の読み込み進捗バーが100%になっていても実際には読み込みされていないようで、動画再生が途中で止まったり、同じ箇所を再生し続けたり、シークバーが戻ったりするという現象が起きます。
さらに、SmileDownloaderでYOUTUBEやニコニコ動画をローカル保存しようとすると、途中までしか再生できない動画ファイルが作成されます。

これはram diskに限らず、一時ファイルのフォルダがあるドライブのディスク領域サイズが小さいと起こる現象です。

私は、HDDのフラグメントを避けるためにIEの一時ファイル用にHDDのパーティションを10G程度確保した上で、インターネット一時ファイルのフォルダの容量は10M程度にしています。ネットのファイルをキャッシュする意味はないと思っているので(その分、回線に負担をかけているのですが)、1Mでもいいくらいです。ただ、仕事の都合で大きなファイルをやりとりすることがあるので、一時領域は大きめに指定しています、というか、していました。それをつい最近、VSuite Ramdisk導入時にRAM DISKのサイズを小さく20Mに指定していたので、100Mを超えるファイルをダウンロードする際にファイル破損が起きて、不具合に気がついたのです。今では500MをRAM DISKに割り当てていますが、500Mを超えるファイルのやりとりはできませんから、仕事のやりとりでは一時ファイルの領域をHDDにしてあるFireFoxを使うような使い分けが必要ですね。

ま、そもそも私的PCと仕事PCを別けなさいという話ですね。

サイバークリーン[Cyber Clean]

2009 年 6 月 25 日

サイバークリーン

サイバークリーンというクリーナーが、アキバヨドバシで390円で売っていたので試しに買ってみました。
袋から出してみるとウェット感があってグニグニしてます。これをぎゅっとキーボードに押しつけてしばらくグニグニしてると、キーボードの奥の方まで入り込んでいってゴミをくっつけてくれます。普段からキーボードは掃除機をあてて綺麗にしているんですが、それにも関わらずゴミがとれたので効果あります。除菌・殺菌もしてくれるみたいですね。さすがに強く付着した黒い汚れまでは取れませんが、そういう汚れは別の方法でごしごしとキーボード掃除しましょう。
ベタベタはしません。湿ってはいるのですがアルコールっぽい感じでさらさらです。ただ、レモン風な香りがついています。なので、清掃後は手を洗わないとです。

並んだポスト

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