2009年2月28日土曜日

Data::Dumper

Data::DumperというのはPerlのモジュールです。とある仕事で教えてもらいましたが、便利です。

Perlのデータ構造を、そのままPerlコードとしてテキスト化してくれます。テキスト化したコードは、evalに与えるとそのままPerlとして解釈されます。その為、Data::Dumperでダンプしたコードをテキストファイルとして保存し、後ほど読み出してevalに与える、という形でデータ構造のシリアライズ/デシリアライズが可能です。

使い方はこんな感じ:

use Data::Dumper;

my %hoge = ("key1" => "val1", "key2" => "val2");
print Dumper(¥%hoge);

出力結果はこんな感じ。

$VAR1 = {"key1" => "val1", "key2" => "val2"};

"$VAR1"という変数名は勝手にDumperが名付けるんですが、これを無くす方が都合がよい場合は、

$Data::Dumper::Terse = 1;

というコードをDumper呼び出し前に挿入します。こうしておくと、例えば上記のテキストが保存された変数を$hogeとすると、

$fuga = eval $hoge;

という形でevalすれば、$fugaに上記の$VAR1に相当する連想配列へのレファレンスが代入されます。

ちなみに、Dumperに渡す引数はレファレンスであることにご注意を。

2009年2月26日木曜日

SheevaPlug

久々に面白いガジェットです。

電源アダプタ型Linuxサーバ「SheevaPlug」

何のことはない、PLCではなくコンセントからは商用電源を取ってるだけなんですが、これがPLCだったらもっと面白いかも知れませんね。

ちなみに、あまり聞いたことのないSheevaというCPUコアをベースにしたSoCに512MBのDRAMと512MBのフラッシュメモリを搭載しています。ギガビットイーサとUSBポートが付いてる様です。USBデバイスをLAN経由で操作する為のコントローラユニットとして使えそうです。

# もっとも、その程度の用途なら秋月のH8 LANボードとかでもいい気がしますね。。。

2009年2月23日月曜日

ksymoops

先ほどのkernel panicの件だが、パニック時に表示されるメッセージ(Oopsメッセージ)の解析を行うことが出来るksymoopsというツールがあるそうです。

Linuxカーネルを読む -カーネル解析-

備忘録まで。

pg_dumpでkernel panic

システムはRed Hat Enterprise Linux ES release 4 (Nahant Update 7)で、PostgreSQLは8.1.11。pg_dumpで1つずつテーブルをdumpしていたらkernel panic・・・orz

何故だ。。。

調べても理由が分からない。もしかしてポスグレは直接の原因ではないのか?Linux kernel自体のバグということだろうか。

ちなみに、カーネルバージョンは2.6.9-78.0.8.ELsmpである。

2009年2月21日土曜日

キューピー13

キュージョン根付 第3弾 ゴルゴ13

やば。。。めっさ欲しい。

ゴルゴ13

ゴルゴ13の全エピソードを日々解説しているブログを発見。

ゴルゴ13総合研究所『俺の背後に立つな!』

うぅむ、凄い。家にあるゴルゴ129巻の「最終暗号」を読んでいて、この暗号って実際は何の暗号を指しているのだろうかと思い、Google先生にお伺いを立てたところこちらに辿り着きました。

今後とも参考にさせて頂くことにする。

ズキューン

SSHでポートフォワーディング

久々にSSHのポートフォワーディング機能を使った。

大学生時代は研究室のLAN内に存在するCVSリポジトリに接続する為によく使っていたけれど、最近はすっかりご無沙汰していた為にすっかりコマンドラインオプションを忘れてしまっていた。

備忘録までに記しておく。

% ssh -l [sshリモートホストユーザ名] -L [ローカルホストポート番号]:[接続フォワード先リモートホストアドレス]:[接続フォワード先リモートホストポート番号] [sshリモートホストアドレス]

2009年2月20日金曜日

MacPortsでMySQLとApache

そう言えば、MacPortsで入れたMySQLとApacheを自動起動する様に設定するのを忘れていた。

MacPorts で Apache をインストール

を参考にさせて頂き、自動起動を設定した。

% launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
% launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

これでMySQLとApacheの自動起動が設定できた。かつ、サーバ起動もこの時点で完了。

簡単だ。

PerlでHTTPSアクセス via proxy

PerlにはLWPという非常に便利なモジュールがあり、HTTP及びHTTPS (SSL)によるウェブサーバへのアクセスが、僅か数行のコードで書けてしまいます。しかも、このモジュールはHTTP Proxyもサポートしているのです。ああ、何て素晴らしいモジュール!

しかし、そんなLWPにも弱点があります。

それは、Proxyを通したHTTPSアクセスが出来ない、という点です。これはバグらしいのですが、たまたま私の顧客がこの方法を使う必要があり、大変困りました。

CPAN: #1894: LWP::UserAgent can't reach https sites via proxy

さて、どうしようか、いっそのことJavaで書き直すか、なんて悲壮な決意をしていたところ、素敵なウェブリソースを発見しました。

Perlから、https(SSL)のコンテンツをProxy経由で取得する

ううむ。世の中には似た様な事をやる人がいるものですね。いやはや、大変参考になります。

このページで書かれている事を要約すると、以下の様になります。
  1. LWP::UserAgentのProxyアクセスはHTTPであれば問題無い
  2. LWP::UserAgentのProxyアクセスはHTTPSでは問題がある為、代わりにCrypt::SSLeayのProxyアクセスを使う
ちょっとかっこ悪いコードではありますがPerlのまま目的が達成できるだけ良いです。これをJavaで作り直す事を考えたら・・・ああ、卒倒しそう。

というわけで、今回は何とか問題を回避出来そうです。

2009年2月19日木曜日

GMailがFirefoxからアクセス出来ない件 (解決?)

どうやらFirefoxからGMailにアクセス出来る様になった模様。

どうも、私が使っているGMail ManagerというFirefoxのextensionが問題だったっぽい。昨日このextensionがupdateされたのだが、それ以降はすっかり安定してGMailに繋がるようになった。

何だったんだ一体・・・

2009年2月17日火曜日

Unreachable

自前の開発環境を構築するのに色々と敷居が高い事もあり、リモートのサーバ上で直接コーディングを行うという作業をしていたのだけれど、先ほどからサーバが非常に不安定な模様。

まずSSHでのリモート接続が遮断され、その際はpingは通っていて、5分ほどでSSH接続は回復したのだけれど、10分ほどで再度SSHが切断、今度はpingも通らなくなった。

作業を止めて寝なさい、という神のお告げかも知れない。。。

2009年2月16日月曜日

GMailがFirefoxからアクセス出来ない件 (続々)

ダメだ・・・Cookieを削除するとアクセス出来るのだが、その後暫くするとまたループが発生してエラーになる。何がいけないのだろう。。。

GMailがFirefoxからアクセス出来ない件 (続)

どうやら、GMail関連のCookieがおかしかったらしい。

FirefoxのCookieからGMailに関連する物を全て消去したところ、無事GMailにアクセス出来るようになりました。何故こんな状況になったのか原因が分からないけれど、ひとまず一件落着です。

GMailがFirefoxからアクセス出来ない件

どうも、これはFirefoxの問題っぽい。

同じMacBook (MacOS X 10.5 Leopard) のSafariからアクセスしたら問題無い。Firefoxを再起動してもダメなので、何か根本的に設定を直したりしなければいけないのかも。。。

GMailがおかしい!?

GMailにアクセスすると、以下のエラーメッセージが表示されてしまう。ちなみに、プラットフォームはFirefox 3.0.6 (MacOS X 10.5 Leopard) である。

+++++

自動転送がループしています


このアドレスへのリクエストに対するサーバの自動転送設定がループしています。
リクエストされたリソースの取得を中止しました。このサイトではリクエストの自動転送がループしています。
  • このサイトで要求されている Cookie を無効化またはブロックしていないか確認してください。
  • 注意: サイトによる Cookie の使用を許可しても解決しない場合、これはご利用のコンピュータではなくサーバの設定に問題があると思われます。
+++++

恐らくはGoogleのウェブサーバの設定の問題か、DNSの設定の問題か、という感じだと思うのだけれど、今日(2/15)は一日中この問題でGMailのウェブサイトにアクセス出来ていない。一応MUA (Thunderbird) からIMAP4経由でアクセス出来ているので問題無いのだけれど、非常に気持ち悪い。。。

2009年2月12日木曜日

Emacsのエンコーディング設定

多分、随分と前にPHPをUTF-8で書きたくて行った以下の設定のせいで、EUC-JPのPHPを編集する際に難儀していた。記述場所は~/.emacsである。

(modify-coding-system-alist 'file "\\.php$" 'utf-8)
(modify-coding-system-alist 'file "\\.inc$" 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)

全て行頭にセミコロン「;」を付けてコメントアウトし、Emacsを再起動したところ解決。EUC-JPのPHPを読んでも、ちゃんとエンコーディングを自動判断する様になった。

MacOS Xのユーザ管理

MacOS XはBSD系のUNIXをベースとしているわけですが、かなりの改造が施されています。例えばファイルシステムの配置なんかもUNIXの標準からは随分と変わっていて、通常は/home配下に配置されるユーザのホームディレクトリは/Users配下にありますし、アプリケーションの設定ファイルも/etcではなく/Library等にあります。

さて、通常のUNIXでは/etc/passwdというテキストファイルでローカルシステムのユーザを管理していますが、基本的にMacOS Xではこのファイルを使っていません。通常のユーザ管理はシステム環境設定の「アカウント」で行いますが、ここに表示されないアカウントが実はいっぱいあります。それがどこにあるかを手探りで探してだいぶ苦労しました。

結論から言うと、アカウント情報は/var/db/dslocal/nodes/Default配下にあります。

このフォルダの下にあるusersというサブフォルダに、<ユーザ名>.plistという名前で幾つものXMLファイルが置かれています。

今回は、MacOS向けにポーティングされたPostgreSQL 8.3をうまくアンインストール出来ず、postgresユーザの設定が残ってしまっていたのですが、ここに設定されていたpostgresユーザのホームディレクトリがアンインストールによって削除されてしまった為、rootユーザからpostgresユーザにsuするとエラーが出る様になってしまっていたのです。

通常だと、/etc/passwdのホームディレクトリの設定を書き換えるだけで済むのですが、MacOS Xでは
/var/db/dslocal/nodes/Default/users/postgres.plistを修正する必要があります。

ただ、このファイルを編集しただけではシステムの設定に即時反映されるわけではないらしく、恐らくシステムを再起動すれば良いのでしょうけれど、今回はシステム環境設定の「アカウント」でダミーのユーザを作成し削除する、という作業でファイルの修正内容を反映させました。ここはもっとうまいやり方を知りたいところです。

ともあれ、postgresユーザのホームディレクトリを/opt/local/lib/postgresql83に変更し、無事rootからpostgresにsu出来る様になりました。

マイコンプログラムの修正対応

以前開発したPICマイコンのプログラムに修正依頼が来た。1つはロジック上の問題(抜け)で、もう1つはプログラム上の問題。

ロジック上の問題は、原因がすぐに分かったので対応も容易だった。1つ関数を追加して完了。

プログラム上の問題は、ロジックには問題が無いと思われたのでとりあえずシミュレータでプログラムを走らせてみて、挙動を確認してみることに。すると、4ビットの数値同士の比較で、ケアしていなかった上位4ビットに変な値が設定されている事が判明。比較時に上位ビットをマスクするマクロを書いて対応。

普段は4ビット数値の取り扱いなんてやっていないので、こういうところは非常に勉強になりますです。

このプログラムを仕上げる時は、試行錯誤で二日ほど徹夜仕事にもなったりして大変だったんだけれど、その時苦労した分上がってきたバグは非常に簡単なもので、その点では良かったと思う。まぁ、簡単なバグなんだから最初から潰しておけって言う突っ込みもありそうだけれど(^^

もうバグが無いと良いな~。

2009年2月9日月曜日

PHPでグローバル変数

かつて書いたPHPのコードが動かないなあ、と悩んでいたが色々調べて解決した。

PHPはバージョン4からクラスの概念が導入されて、バージョン5ではスコープも色々と使えるようになりました(public / protected / private)が、相変わらずグローバル変数を使うことも出来ます。

例えば、あるファイル(aaa.inc)に以下の様に書いておき、

$_VAR['key'] = 'val';

これを別のファイル(bbb.php)から読み込む。bbb.phpではクラスが定義されており、そのメソッドの中で上記のグローバル変数にアクセスする。

require_once("aaa.inc");

class Hoge
{
 public function fuga()
 {
  global $_VAR;
  echo $_VAR['key'];
 }
}

さて、以前PHP5で上記のコードを開発し実行したのだが、その時はうまく動いていた。PHPの細かなバージョンは覚えていないが。

しかし、久々にPHPの環境を変えてからこれを動かすと、うまく動かない。PHP5の環境は、MacOS XデフォルトからMacPortsの物に変えただけである。

何故だろうと色々と調べていたところ、「PHP5 CLI でのグローバル変数の扱い [PHP Tips]」を発見して、解決方法が分かった。

要するに、この様にスコープを飛び越えてグローバル変数にアクセスしたければ、そもそも変数をグローバル変数だと宣言しなければいけないということなのである。具体的には、上記のaaa.incで、

global $_VAR;
$_VAR['key'] = 'val';

という風に「グローバル変数でございます」と宣言してやれば良いわけだ。試してみたところ、確かにこれで動いた。

いつからこれが必要になったのか、正直良く分かっていない。。。

2009年2月6日金曜日

実家の無線LAN

実家の無線LANの調子が悪いと親がブツブツ言うのだが、私のMacBookで使っていたところやはり電波の強度が下がったり接続が切れたりと、確かに調子が宜しくない。

ちなみに、実家では元々光ファイバ(Bフレのファミリータイプ)を使う為にヤマハの有線ルータを使っていたので、それにadd-onする形でIOデータのWiFiブリッジを買ってきて使っていた。WN-A54 AXPという機種で、いわゆるWiFiブリッジとそれに対応したPCMCIAカードのセット販売である。

これ、よく考えたら11a (IEEE 802.11a) にしか対応していないアクセスポイントなんですね。買った当時は恐らく2002年末か2003年初め辺りとかだったと思うんですが、11Mbpsの11bはある程度普及し、54Mbpsの11aが出始めた頃だったんじゃ無かろうかと思います。調べてみると現在主流の54Mbps規格である11gは2003年半ばの規格化ですので、まだ存在しなかったわけです。

さて、今となっては11aなんて随分と珍しいわけですが、調べたところWN-A54 AXPが使用する無線チャネルを自動選択ではなく固定にすることで安定化するのではないか、という指摘があり、その通りにしたところ随分と安定しました。

ところで、そもそも実家の無線LANがこのままで良いのかという話は残ったままです。今のご時世なら11g、可能であれば11nのドラフト2.0辺りに対応したWiFiブリッジでリプレースする、というのも良いかも知れません。

まぁ、私の親はそれ程ネットワークのヘビーユーザではありませんので、速度的には11gでも十分かと思いますが、11nはいずれ標準化されると思いますので、11nのドラフトに今から対応しておくのも悪くはないと思います。まぁ、11nが完全に規格化されてから買い換えても良いのかも知れませんが。

それだけじゃなく、今のブリッジが対応している暗号化がWEPだけなので、WEPが無力化した今WPA2に対応していないのはちょっと都合が悪いんですね。このことも考えると、なるべく早く対応したいという気持ちはあります。

さてさて、どうするのが一番良いでしょうかねぇ。

Netbook

デルが放つ低価格スリムノート「Inspiron Mini 12」の中味を拝見した

最近はNetbookと呼ばれるジャンルのノートPCが非常に活気付いているけれど、このInspiron Mini 12はかなり注目株かも知れないと思える。

まず、Netbookにありがちな小さい液晶小さい解像度という制約が無く、12インチ液晶で1280x800ピクセルという実用に足りそうな画面サイズと解像度を実現している点が好感持てます。あと、Netbookのカテゴリと言いながらずるずると高価格帯にずれ込んでいく他の陣営を尻目に、Ubuntu搭載機であれば5万円を切る価格を実現している点も良いです。

# 今はキャンペーン割引で4万円を切るみたいです。
# 思わずオンライン注文しそうです。

Netbookじゃないんだと言い訳を言われそうですが、SONYのVAIO PなんてVistaだし10万越えるし、非常に中途半端な感じが否めないと個人的には思っています。

その点、Inspiron Mini 12は、Netbookである点も意識しつつ実用的なミニノートに仕上がっているのではないかと思えます。日本でUbuntuモデルが手に入る点も好感が持てますね。

2009年2月4日水曜日

オンラインストレージ

AmazonのS3が有名になって以来、オンラインストレージソリューションが色々と出て来ている様だ。たまたま知ったソリューションを備忘録代わりに書き留めておく。

  1. Dropbox
  2. Mozy

それにしても、2GB迄は無料で使えるというのが凄い。DropboxはMacOS Xにも正式に対応しているので、使ってみたい気もする。

IMAPのオフライン利用

IMAPのメールや添付ファイルをオフラインで利用できるOfflineIMAP

昔、似たようなことを考えたことがありました。

自分のメインで使っていたのがVine Linuxの搭載されたThinkpad A20m (CPU: Celeron 500MHz / RAM: 256MB / 15inch LCD)だった頃、IMAPへのオフラインアクセスを実現するIMAPキャッシュサーバみたいな物が無いかなあ、と。

しかし、実際に作った人がいるのは凄いですね。

今は、AppleのMobileMeやGMailなど、IMAPベースでASPタイプのメールサービスを利用するシーンが増えていますので、このOffline IMAPは思いの外役に立つかも知れません。