WordPress 2.9.2のプラグインの時間

WordPressのアップグレードはとても簡単だから、気軽に出来ちゃう。そしてこれまでの問題のことなどすっかり忘れたころに2.9.2に上げて、またしてもプラグインの時間がUTCに戻ってしまった。

もうこれはこういう仕様なのね。永遠に応急処置を続けていくこともできないので、これはプラグイン側の対応をしないといけないだろう。この問題に対応できるようなWordpressプラグインを作ろうかとも思ったんだけど、新たなプラグインを作るよりも、今のプラグインを直すほうが早いし楽だし。。。

プラグインはphpのtime()で時間をとってきて、アクセス情報とともにテキストファイルに書き出すだけ。Wordpressではdate_default_timezone_set(‘UTC’) が宣言されているため、time()はUTCタイムスタンプを返すようになる。他所で実行するときはJSTタイムスタンプが返される。タイムゾーンを判断して切り替えるよりは、どこで使われようとUTCでタイムスタンプを取得して、JSTに変換するのが簡単で手堅い方法だろう。

ちなみに、プラグイン自体をWebサービスにしてしまえばコードの実行は呼び出し元に寄らないので最もスマートな解なんだけど、大したプラグインでもないのに新たに作り直す必要があって、ちょっとやる気が起きない。

改修は簡単で、time()の前にdate_default_timezone_set(‘UTC’) を宣言して、すぐさまdate_default_timezone_set(‘Asia/Tokyo’) で日本時間に戻す。time()で取得してきたタイムスタンプには9時間足せばいい。date_default_timezone_set('UTC');
$timestamp = time() + 9 * 3600;
date_default_timezone_set('Asia/Tokyo');

これで解決したんだけど、date_default_timezoneを弄るのは後々問題を起こしそうだし、場当たり的なコーディングで美しくない。

よりスマートなUTCタイムスタンプの使い方はそふぃのPHP入門にあるように、$hour = gmdate("H");
$minute = gmdate("i");
$second = gmdate("s");
$month = gmdate("n");
$day = gmdate("j");
$year = gmdate("Y");

$timestamp = mktime($hour, $minute, $second, $month, $day, $year) + 9 * 3600;
とすべきかな。

* 2010/3/10 追記:
やっぱり他のところに弊害が出て、gmdateを使った方式に変更。これでほぼ不具合は解消できた。本日、昨日のカウントが間違ってるだけ。。。

Sony VAIO VGN-TT90PSのHDDをSSDに換装

Sony VAIO Type T (VGN-TT90PS) のHDDが分かったところで、それと換装できそうなSSDを物色してみる。

少し前ならもうちょっと選択肢があったものの、現在では、

  • Intel X18-Mシリーズ
  • Samsung MCCOE64G8MPP-0VA(1.8インチは3.3V)
  • Runcore Pro IVシリーズ

くらいしか手に入らない。いや、厳密に言うと、よ~く探さないと上記のものでも入手は難しい。
純正のドライブは、

  • Samsung MMCQE28G8MUP-0VA

だと思われる。VAIOのSSDアップグレードサービスには64GBもラインアップされている。それはたぶん上に挙げているMCCOE64G8MPP-0VAだと思う。

以下のものは入手できれば規格は同じだから使えると思う(全く保証なし)。

  • Samsung MMCRE28G8MXP-0VB
  • Samsung MCBQE32G8MPP-0VA
  • SuperTalent MasterDrive KX か KX2

ちなみに、

  • PQI S518シリーズ

は動作電圧が違うのでTTでは動作しない。USBから5Vをとってきて動かしているツワモノもいるようだが。

本当はIntel X18-Mが良かったんだけど、入手可能なのがExpansys経由のみっぽくって、しかも納期が1ヶ月。MCCOEはちらほら見かけるんだけど、高い。よって、必然的に候補はRuncore Pro IVに絞られてくるんだけど、Data GateSarutekくらいしか扱ってなく、ググっても情報が極めて少ない。

で、Sarutekのほうはラインアップが限られてて64GBのものがなかったので、Data Gateから購入。納期が2週間ちょっとって連絡を受けたんだけど、実際は1週間で届いて、対応は迅速で良かった。

で、入手したのがRuncore Pro IV 64GB 1.8インチ Micro SATA

注意しないといけないのは、Data GateのサイトでSony Type Tを選択するとPATAのものに誘導されてしまう。ここは間違わずにMicro SATAのものを注文しよう。

届いてビックリしたのは、1.8インチMicroSATAドライブ用外付けケース、専用の精密プラスドライバー、(写真にはないけど)USBケーブルまでついてきたこと。これが実はHDDから換装するにはとっても便利で、大変お世話になった。

SSDはあらかじめパーティションが作成されていて、Windowsから見えるパーティションにはTrueImage 2010が入っていた。でも、なぜかインストールできない。英語版だからかな。

早速VGN-TT90PSに取り付けてみた。

SSDがもとのHDDより小さいのでスペース的には余裕なんだけど、防振用のゴムがぴったりと合わないので若干押し込める必要あり。

ささっと動作確認を行ってみて、ちゃんと動いているみたい。SSDは音がしないから動作確認が難しいけど。

さて、ちゃんと動くのを確認したらさくさくとOSをインストール。。。 と、ここで大はまり。
つづく。。。

Sony VAIO VGN-TT90PSのHDD確認+メモリ増設

常用しているSony VAIO Type T VGN-TT90PSだけど、一通りWindows 7 RCで遊んだし、そろそろ改造に取り掛かろうかな、と。もともとメインマシンではなく、お遊びの気軽に使うマシンで、もともと2GBだったメモリを4GBにすべく、2GB X 2メモリセットは購入済み。後はHDDをSSDに交換する。これで相当使えるマシンになるはず。やっぱりHDDはアクセスが集中するとボトルネックとなって、著しく遅く感じる。

VGN-TTシリーズの分解はソニーが基本的に好きが大いに参考になるものの、これはSSD RAID0モデルなのでSATAコネクタもRAID対応になっている。かたやうちのVGN-TTはHDDモデルなのでSATAコネクタは別のものが入っている可能性が大。

HDDモデルのHDDは、ググると1.8インチ、3.3V、Micro SATAのようで、同じスペックのSSDに換装した例もあるけど、どれも掲示板の書き込み情報なので確証が持てない。ここはまずメモリ増設+HDDの確認のためにVGN-TTの開腹手術を行おう。

先のサイトの通りに分解していけば問題なくVGN-TTは分解できる。ただ、ネジがやたら多いのと、ちょっとコツが必要な箇所がある。

まずはパームレストの手前にある3つのゴムをはずすこと。これは溝にゴムカバーがしっかりとはまっているだけなので、先のサイトで使っているような樹脂製の小型のヘラのようなものでホジホジすれば簡単に取れるだろう。でも、先端は相当尖っている必要がある。身近にちょうどいいものがなかったので、仕方なく小型マイナスドライバーの細いものを使って、目立った傷をつけることなくクリクリと外すことができ、無事ゴムの下にあるネジも外せた。

あとはキーボード(上面)を外すときに左奥のツメが取れにくいこと。これは左後ろのヒンジの辺りにツメが見えるので、外側から押してあげると割合簡単に外れる。キーボードはFPCでつながっているだけなので、簡単に取れる(でも慎重にね)。

無事HDDまでたどり着いた。東芝のMK1216GSGだね。3.3VのMicro SATA。HDDの両端にはゴムがつけられていて、ショックを吸収してくれそう。

やっぱり、思っていたとおり、SATAケーブルは先のサイトにあるものとは違っていた。どうせだったらRAID用のケーブルをつけておいてくれてもよかったのに。

ともあれ、マザーボード上面にあるメモリを交換することができ、めでたく4GBマシンへと生まれ変わった。ADATAの安いメモリだったけど無事4GB認識された。全部は使えないけど。しかも体感は全く変わりなし。2GB→4GBの増設は自己満足の世界だな。

あとはSSDに交換するだけ。これは絶対に速くなるぞ~。

Sleipnirの起動時に追加される新規タブを出ないようにする

SleipnirはChrome登場以前は主力ブラウザで、無くてはならないものだった。でも、Chromeの使い勝手がいいことと、「起動時に追加される新規タブ」が鬱陶しくてSleipnirはサブブラウザとして使っていた。Sleipnirを再起動するたびにタブが一つずつ増えていくし、そのタブを毎回起動するたびに消すのは無駄で、だんだん使ってるのがバカバカしくなってくる。以前ググッた時はそれらしい解決法はなくて、これは仕様なんだと自分に思い聞かせてきたけど、昨日になってようやくいいヒントが得られた。

Sleipnirのメインメニューにある「お気に入り」-「お気に入りの整理」で出現する画面左側のお気に入りツリーの上のほうに「整理」ボタンを押すと「お気に入りグループ」に「スタートアップ」がフォルダになる。このフォルダを開くと中にファイル(ホームページ、とか)があるので、それを削除する。

これで「前回終了時の状態を復元」をチェックしていてSleipnirを起動したときに新規ページタブが追加されることがなくなる。こんな隠し技みたいなものを使わないと普通に使えないなんて。。。 まあ、これでようやく普通に使えるようになったから、Sleipnirの出番も増えてくるかな。

Eagleの部品表

Eagle CADで設計した基板の部品表を簡単に作るには、回路図画面でrun bomとすればCSVかHTMLでEagleのパーツデータを出力してくれる。ただ、問題は細かい部品型番までは分からないし、部品の説明などは後から付け足さないといけない。そもそも回路図を作っている段階で大まかな部品の仕様は頭に入っていたり、部品の型番などを調べたりしているのにそれがCADにも部品表(BOM: Bill Of Materials)にも反映できないのはなんとももどかしい。いったん外部で部品表を作ったあとに修正なんか入ると修正ミスやオペミスの可能性が高くなるので、なんとかEagle CAD上で部品情報が管理できればいいのに、と常々思っていた。

で、よく調べてみたらEagleにはVer 5からAttribute属性を部品につけられるようになっている。ここに部品の型番や特別なメモ(オーディオ用抵抗使用、とか)を書き込めるようになっている。これはこれで便利だけど、残念なのはこの情報がBOMに反映されないこと。Attributeは自由に情報を書き込めるが使い道を提供してくれない。せめて、どうにかしてAttributeの内容をBOMに出力できないか。。。

そう考えた偉人がいらっしゃいました! Embed Incさんの中の人がちょうど思っていたツールを作って公開していました。早速install_eagle.exeをダウンロードして実行。デフォルトでは c:¥embedincなるディレクトリにツール群が解凍される。このうち、eagle¥com以下すべてとeagle¥ulp¥bom.ulpをEagleのフォルダにコピーする。Eagle-5.6.0¥comなるディレクトリは元々ないのでそっくりコピーして、bom.ulpはオリジナルのものをbom_org.ulpなどとリネームしておいてからコピーすると良いだろう。

これで回路図画面からrun bomと実行すると。。。 エラーになる。。。 ulpからcomディレクトリ内のcsv_bom.exeを実行しようとしてエラーになるっぽい。どうやらcsv_bom.exeに渡しているパラメータが日本語OSでは扱えないものになっているよう。コマンドラインでごにょごにょすれば何とか実行できるので、csv_bom.exe自体はちゃんと動いているようで、出力結果のtsvファイルもExcelファイルも見事なもの。

Attribute項目が出力されているのはもちろん、ちゃんと似たような部品はグルーピングされて数量欄まで追加されている。Excelに取り込んで使えるように式を出力した項目なんかも追加されている。個人的にはあまり必要ではないけど。

パーツのグルーピングは

  1. library名
  2. device名
  3. value値
  4. package名

で重複するものをまとめているよう。まあ、ほぼこれで思い通りのまとめ方をしてくれるんだけど、唯一通常の抵抗とオーディオ用抵抗を分けたいところがあって、苦肉の策でvalueに*をつけることにした(例: 20k*)。

そして出力できるAttribute項目は決めうちで、doc¥eagle_attr.txtになーんとなく書いてある。まあ、ようするに、DESCに大まかな部品説明(例: Aluminum Electrolytic Capacitor)、PARTNUMに部品型番(例: Nichicon KZ 50V)を書いておくと良さそう。なぜ例が英語かというと、Eagleは日本語をデータとして保持することはできないようなので使えない。ここがかなりイタイところ。

さて、日本語が使えないのはいいとして、なんとかcsv_bom.exeを簡単に実行する方法はないものかと小一時間考えて、vbscriptを書いてみた。

bom.vbs (zipファイルをダウンロードして解凍して下さい)

bom.ulp本体もちょっと改造する。以下のようにコメントアウトして、//exstat = system ("run_cmline (cog)com/csv_bom " + fnam);その下に以下を追加する。string curdir; //Current directory
string lnam; //Log file name
string bnam; //Base file name
project.schematic (sch) { //open the schematic
curdir = filedir(gnam); //get current directory
bnam = filename(gnam);
}
lnam = curdir + "bom.log";
output(lnam, "wt") {
printf(fnam + "\n");
printf(curdir + "\n");
printf(bnam + "\n");
}

dlgMessageBox ("Created CSV and log file " + lnam,"ok");
を追加する。bom.ulpでcsv_bomを実行させずに、csvファイル情報をbom.logファイルに書き出す。

bom.vbsをプロジェクトのディレクトリに入れて実行すると、csv_bom.exeを実行してHTML化まで行っちゃうようにした。tsvやxlsよりもhtmlのほうが扱いやすいし、なぜかxlsファイルを出力しようとするとエラーになるし。bom.ulpからbom.vbsを実行させようとじたばたしてみたけど、どうしても実行できなかったので、仕方なくプロジェクトフォルダで手動起動することにした。

日本語が扱えないのと出力できるAttribute項目が若干貧弱であることを除けば非常に良い仕組みが出来上がった。これで回路図を作りながら部品を調べて、その内容を回路図に書き込めるようになった。Attributeの入力欄は1行で狭いけど、あらかじめHTMLタグつきで入力しておけば、BOM処理をした最後のHTMLファイルではとても見栄えがある。

VBSで日本語注釈をつけられるように拡張することも可能だけど、とりあえずこの形でしばらく使ってみよう。

WordPress 2.9.1のプラグインの時間

自作プラグインの時間がUTCに設定されてしまう問題が2.9.1で解決されるだろうとアップデートしてみたら。。。

だめ。。。
やっぱりUTCに設定されてしまう。

WordPress 2.9のプラグインの時間で施した対処は2.9.1でも有効だったからいいものの。。。

これは本気でプラグイン側で何とか対処しないと。。。

WordPress 2.9のプラグインの時間

ちょっと分かりづらい現象(バグ)でその対処も良く分かっていないけど、なんとなくうまくいったからなんとなく公開してみる(なんだかなぁ)。

簡単なアクセス記録を取るための自作プラグインを使っているんだけど、Wordpress 2.9にアップグレードした途端に時間が-9時間ズレるようになった。これはどこかでtimezoneがUTCに設定されているんだなと思って調べてみても分からない。ブログのtimezoneはちゃんとUTC+9になっているし、新規投稿の時間もちゃんとJSTになっている。プラグインは他のページからも呼ばれているんだけど、そっちからはちゃんと今までどおり正常に動いているので、Wordpress 2.9の仕業であることが濃厚。

WordPress 2.9.1のバグフィックスをちらちらと眺めていたら、timezoneに関わるものを発見! 対処法も上がっていたので適用してみたら直った。新規投稿も含め、他の時刻に関連するものにも(今のところ)影響がなさそう。

その対処法というのは、wp-settings.phpの21, 22行目if ( function_exists('date_default_timezone_set') )
date_default_timezone_set('UTC');
をコメントアウトするだけ。

まあ、きっと2.9.1にアップグレードされれば根本的に解決されているだろうから、メモだけここに残してこのままにしておこう。

20 LED オーディオレベルメーター Rev. 2.0

12/17にツベタンから20 LED オーディオレベルメーター Rev 2.0基板が届いた!
今回は1枚の基板に2ch分の20 LED レベルメーターを詰め込んだからぎっしり。それでも16cm x 10cmパネルから6枚も基板をとることができた。9ユーロ余計に取られたことだけあって、穴だらけ。ユニバーサル基板なんじゃないかと思ってしまうほど。

今回も5milのシルク印刷がとてもきれい。スルーホールも満足の行く精度で開けられている。今回は1パネルから6枚もとるからギロチンカットを指定。確かにエッジにはバリが残っていたけど、ささっとヤスリ掛けすれば全く問題なし。切り口は若干精度にばらつきがあるけど、これもホビーユースでは全く問題なし。

さて、問題の裏面(ハンダ面)のシルクスクリーンは!

ない。。。

まあ、HPにあるようにガーバーデータを送らなかった私が悪いんだけどさ。追加料金も払っていないから当然の結果なんだけどさ。まあ、裏面のシルクはなくても何とかなるからいいんだけどさ。

さて、気を取り直してさっそく作っていきましょう。

今回の基板はオリジナル部品データをつくっていろいろとトリッキーなことをしている。ICソケットの内側に部品が実装されていたり、抵抗の足を斜めに折り曲げたり、抵抗のスルーホールのピッチも変えていたり。通常の部品面にICおよびその周辺部品、裏面にダイオードとLEDを実装しているので、スルーホールながら両面実装。部品の実装に順番があるので、気をつけて組み立てよう。

まずはダイオードの取り付け。これは裏面に取り付けるんだけど、いきなりシルクがないのでどっち向きにつけていいか分からない!

まあ、こんなこともあろうかと裏面を紙に大きく印刷しておいて、手元においてあったのさ。ここら辺は表側から抵抗が刺さってくるからダイオードを通す穴を間違いやすい。慎重に。ハンダ付けもダイオードのある面だけにしておく。裏(というよりも表面)には抵抗(そしてその上にICソケット)がくるから長くリードを残しておきたくない。

ダイオード面からハンダ付けして、半対面のリードを切断してハンダ付けする。

そうすると写真のようにコンパクトにハンダ付けすることが出来る。

次は黙々と40個のLEDを植えつけていこう。LEDは裏面に実装するんだけど、裏面にLED用のシルクがない。。。 写真は表面から見たところで、表面はVccがベタパターンなのでVccの穴がサーマルパターン(十字にベタとつながっている)になっている。Vccの穴にLEDのアノード(足の長いほう)を通せばOK。

ここもリードを長くハンダ付けしたくないので、まず片側(カソード・・・足の短いほう)を基板の暑さ程度に短く切っておいて、LEDを基板にさす。写真はこの状態で、短いほうの足を表面からハンダ付けする。このとき、LEDを押し付けながらハンダ付けすればキッチリと実装できる。LEDの実装はいかにきれいに並べられるかがポイントだけど、一つ一つキッチリと実装していけばおのずときちんと整列する。

ちなみに、LEDはロームのSLR-342シリーズがお勧め。緑、黄色、橙、赤がそろっていて、それぞれの輝度、発光パターン、形がとてもそろっている。青がないし輝度が低いのが難点だけど、レベルメーターはそんなに光らなくてもいいし、某国製のものより何といっても加工精度が高いので、きちんと整列させるのが楽。輝度ムラが少ないので、餞別する必要もないのもマル。でも、SLR-342は入手が困難なのが玉にきず。

LEDの短いほうの足が固定されたらLEDを押し付けながら再度キッチリと再加熱して再固定する。次に長いほうの足を切って、ハンダ付けする。

こうするとはみ出るリード線がとても小さくなる。

この作業を地道に40回繰り返せばきれいなLEDアレイの完成! ここで一息入れる。

前にも書いたけど、SLR-342シリーズは4色なので、各色5個のLEDを使った。2chなので4色 x 10個。

次にR3、R4、R13、R14(20kΩ)をこれまた部品側からハンダ付けして、反対側のリード線を切ってからハンダ付け。

抵抗は1/4W 炭素皮膜抵抗を使っている。全く問題なく動作するんだけど、左右のバランスとかシビアなことを要求するなら1/4W 金属皮膜抵抗(誤差±1%)を使ったほうがいいかも。まあ、その他の部品にもばらつきがあるので抵抗だけ凝ってもダメなんだけどね。

さて、取り付けた抵抗の上にICソケットを乗せる。下にある抵抗が凸凹しているのでICソケットが安定しない。この場合は半対面のスルーホールを被せるようにセロテープを貼る。ICソケットの足をスルーホールに入れ、ICソケット側から足を2本ほどハンダ付けして固定する。その後テープをはがして半対面からハンダ付けする。

残りの部品を取り付けていく。

まずは中央の背の低い部品から。中央から外へ、小さいものから大きいものへ、下のものから上のものへ、の順番で。

まずは抵抗から。

ICソケット、電解コンデンサ、半固定抵抗以外は実装済み。

半固定抵抗の取り付け。

LEDのすぐ近くに足がくるので、もっとも接近している足をあらかじめ切っておいてからハンダ付けするとやりやすい。まあ、半田付けした後でも、部品の足はクネクネしていれば切れるから大したことではないけど。

最後にICソケット。これも前に書いたように、ICソケットの反対側のスルーホールをセロテープでふさぎ、ICソケットの足を何ヶ所か固定したらセロテープを外して、残りの足をハンダ付けする。

完成!

写真は暗いですが、とても部品が込み合っているから明るくてもよく見えないかも。

LED面。

ジャンパー線で飛ばしているように見えるのはゼロΩ抵抗。整流回路とLED表示部を分離するために入れている。ここを分離できるようにしておくとデバッグが楽なのと、整流回路を変えたりLED表示部だけ使う、なんてこともできるかな、と。

点灯式。

無事点きました~。パチパチパチ~。

半固定抵抗が8つもあって調整が難しいけど、それだけ利用範囲が広いということ。懸案の整流回路の時定数(LEDの動き)と最下位LEDとLM3915、LM3916間のつながりはRev 1.0同様、全く違和感なし。

LM3915、LM3916を使ったレベルメーターはこれが完成形じゃないかな。一般的なスルーホール部品を使ってなるべくコンパクトに仕上げるのはこれが限界かも。

チップ抵抗のサイズ

Eagle CADのチップ抵抗を選ぼうにも、サイズのネーミングがここでも分からないものがいっぱい。たぶんインチ系の呼称だろうから、ミリ系のものとの対応表を作っておこう。

インチ系 ミリ系
1812 (0.18″ × 0.12″)
1206 (0.12″ × 0.06″) 3216 (3.2 mm x 1.6 mm)
0805 (0.08″ × 0.05″) 2125 (2.0 mm x 1.25 mm) or 2012
0603 (0.06″ × 0.03″) 1608 (1.6 mm x 0.8 mm)
0402 (0.04″ × 0.02″) 1005 (1.0 mm x 0.5 mm)
0201 (0.02″ × 0.01″) 0603 (0.6 mm x 0.3 mm)
0402 (0.4 mm x 0.2 mm)

Eagleの既存プロジェクトファイルからパーツデータを抽出する

EagleのBrdやSchファイルに欲しい部品が乗っているけど、自分も使いたいし自分のライブラリにコピーしたいということが結構ある。BrdやSchウィンドウで部品をコピーして、自分のlbrファイルにペーストしようとしてもだめ。

こういうときはexp-project-lbr.ulpを使うといい。部品データを抜き取りたいプロジェクトのSchファイルを開き、コマンドラインでrun exp-project-lbrを実行する。お勧めはCreation Modeで「One library」をチェックすること。プロジェクトに使われているパーツを丸ごと1つのlbrに抽出して、そこから必要なものをさらに他のlbrにコピーするほうがいいだろう。

まずは「Collect data」ボタンを押すとプロジェクト内のデータを収集する。途中で「Eport also only mechanical packages from board?」と聞かれるが、今ひとつ意味がわからないので Yes を押しとく(笑)。次に「Create library」ボタンを押すとプロジェクトフォルダにlbrファイルが生成される。この中にプロジェクトに使われている部品のデータが一まとめにされているので、あとはEagleの機能で必要なパーツデータをコピーする。

PCにおける総合的な研究を行う私的機関である