2009年12月14日月曜日

Excelのユーザ定義関数

どうやら、ユーザ定義関数の引数や返り値の型を指定するとややこしいっぽい。ワークシート内で使うと!NUMエラーが出る。

Function XXX (arg1 AS KKK, arg2 AS LLL) AS MMM
End Function

とかやらずに、

Function XXX (arg1, arg2)
End Function

とやったら普通に動いた。とりあえず動いたので、時間も無いしこれ以上の追跡は止める。


2009年11月28日土曜日

Adobe CS3 crash on SnowLeopard


ようやっと時間を見つけてAdobe CS3をインストールしたのだけれど、DreamweaverやFireworksの起動直後にこの様なダイアログが表示され、すぐにクラッシュしてしまいます。原因は不明。

どうやら、AdobeはSnowLeopardにCS3を公式に対応させる気は無いようですが、使えないと困ってしまうので何とかしたいところ。

とりあえずCS3のユーザの方は、SnowLeopardにしない方が無難っぽい。


2009年11月25日水曜日

SnowLeopard再インストールその後

とりあえず快適に使えてますです。

ふと気付いたのだが、Adobe Readerを入れてなかった。
なので早速ダウンロード&インストール。
これも特に問題なし。

さて、明日も仕事だもう寝よう。。。

2009年11月22日日曜日

SnowLeopard再インストール

その後、一旦はSnowLeopardを上書インストールしたのだけれど、やはりOS起動途中で問題発生。

仕方なく、腹を決めてHDDをフォーマットすることに。データは基本的にTime Machineに入っているので、データロストの懸念は無し。問題は再セットアップに要する時間かな。特にアプリの再インストールが面倒。

ということで、今回は少し趣向を変えた。

  1. HDDをフォーマット
  2. パーティションを2つに分割
  3. 第1パーティションにSnowLeopardをインストール
  4. 第1パーティションにTime Machineから一部データをリカバリ(←パーティション分割したせいで第1パーティションには全データをリカバリする空きが無いため)
  5. 第1パーティションのデータのうちサイズが大きいものを第2パーティションに移動
  6. 第1パーティションにTime Machineから残りデータをリカバリ
  7. アプリケーションをセットアップ(←今ココ)

全アプリを戻さなくても使えるので、Norton AntiVirusとATOK2009だけ入れて、後はとりあえずOSデフォルト状態で暫く運用。その後、必要に応じてアプリをチョコチョコとインストール。

現在の所、Adobe CS3以外は基本的に全て復旧しています。ただ、MacBook購入時にプレインストールされていたiLifeと、後で買ったiWorkがまだ入ってない。iLifeはMobileMeのウェブサイトをいじるために必要かも知れないので、いずれ入れたいかも。

何だか、SnowLeopardを入れ直したら、アプリの起動/停止がめちゃくちゃ早くなった気がする。何でだろう。

2009年11月12日木曜日

SnowLeopard起動不能!

確か一昨日(11/9)のことだったのだが、例によってソフトウェアアップデートを促されたので実行したところ、「アップデートに失敗した」という様なメッセージが表示され、その後再起動するもSnowLeopardが起動不能に(涙)!!

具体的には、起動中の画面でスタックしてそこから先に進まない感じ。スクリーン中央下部でグルグル回ってるやつが表示されているんだが、何がおきているか不明。

ということで、SnowLeopardのCD-ROMでMacBookを起動し、ディスクのチェックを実行。アクセス権に問題はあったが、修復できた。またディスク自体には問題がなかった模様。

仕方なく、上書きインストールを実行。どうなることやら ← 今ここ

2009年9月26日土曜日

MobileMeのアカウント情報についてキーチェーンアクセスエラー(その後)

なにやら、キーチェーンアクセスの左上にある鍵マークを一旦ロックし、その後解除すると、問題は解決するらしい。また発生するかどうか、一旦様子見。

2009年9月23日水曜日

MobileMeのアカウント情報についてキーチェーンアクセスエラー

なぜか、MobileMeのアカウント情報をキーチェーンに保存する際にエラーが出た、みたいな感じのエラーメッセージが表示され問題発生。

全く理由が分からず、試行錯誤して問題を(一応)回避。以下、(恐らく)回避手順。

  1. キーチェーンアクセスを起動してMobileMeのアカウント情報を削除
  2. キーチェーンアクセスの鍵マーク(左上)を設定してキーチェーンをロック
  3. システム環境設定からMobileMeを開いてアカウント情報を設定

多分これで直ったのだと思う。それにしても、突然こんなエラーが発生した理由が不明。

*****

と思ったらまたエラー出た。。。orz

もしかするとMobileMeでキーチェーンも同期しているのがいけないのかも。と思ってキーチェーンを同期キャンセルして様子見。

*****

やはりダメか・・・orz

2009年9月12日土曜日

MacOS X 10.6 Snow Leopard (2)

そう言えば、その後を書いていませんでした。

Snow Leopardのインストールに一度は失敗しましたが、MacBook再起動後に再度インストールを試したところ難なく成功しました。ちょっと拍子抜け。インストーラがTime Machineのバックアップからリストアする様に促すので、言われるがままにリストアしてファイルの殆どはすんなり復旧。

さて、アプリを入れなければということでインストールを開始。

  • 手持ちのNorton AntiVirus 10.0を入れるとAutoProtectの起動でエラー
  • 更新版が無いかNortonのウェブサイトを探すが「Snow Leopard未対応」とつれないので諦める
  • アンインストールを試みるがうまく行かず
  • 仕方ないのでHDDを再フォーマット(涙)
  • Snow Leopardを三度目のクリーンインストール
  • NAVは止めてATOK2006をインストール
  • 今度はATOKも動かず(号泣)
  • 仕方ないのでアップグレード版のATOK2009をダウンロード購入してアップグレードインストール。今度はちゃんと動く(喜)
  • 更にAdobe Creative Suite 3をインストール。これは特に問題なし
  • 更にAdobe Readerをインストール。これもOK
  • 更に更にNeoOffice (OpenOfficeのCocoa版)をインストール。これは最新版パッチを当てれば問題なし
  • そしてCarbon Emacsをインストール。これもバッチリ
  • Time Machineでバックアップ出来ていなかったファイルを外付けHDDからマニュアルで復旧
  • Time Machineで(システムを除いて)フルバックアップ

NAVとATOKが問題だっただけで、アプリはほぼOKでした。後は、MacBookを買った時に付いてきたiLife07と、後から買ったiWork08をどうしようかなって感じです。あまりurgentではないので、とりあえず様子見ですね。

Snow LeopardになったMacBookは快適そのものです。全てのアプリが以前より速く動いている気がします。やったぜ!


2009年9月5日土曜日

MacOS X 10.6 Snow Leopard

Snow LeopardはSafarが完全64ビットモードで稼動してかなり速い等といった話を聞いて、どうやら入れても良さそうだということで早速手に入れました。

  • 既存のLeopard環境にアップグレードインストールしたところ、インストールに失敗したとの表示が出てインストーラが中断
  • その後、内臓HDDにインストールされた元のLeopardで起動するも、何故か起動せず電源断
  • 仕方なくインストーラディスクのSnow Leopardで起動して再度インストールを試みるも失敗
  • これはどうやら雲行きが怪しいなと思い、取り急ぎTime Machineで使っている外付けHDDを接続&自動マウント
  • インストーラのユーティリティメニューからターミナルを起動し、直近にTime Machineを使って以来バックアップされて無いであろうファイルをfind -mtimeでチマチマ探しながら手作業で外付けHDDにコピー
  • ディスクユーティリティで内臓HDDをチェックしたところ、フォーマットしろとのご宣託。なので容赦なくフォーマット
  • 再起動して再度インストーラを起動するも、何故かインストール途中でまたもや失敗
  • しつこく再起動して再度インストールを試みる ←今ココ

本当にこの状況はきつい。
いくらTime Machineでバックアップしているとは言え、あとでリストアする手間を考えると気が重い。

ちなみに、内臓HDDは120GBなのに外付けHDDは60GBしかないため、Time MachineのバックアップはHDD丸々のバックアップではなく、主にユーザディレクトリだけをバックアップしてある。

今度は安い外付けHDDを買ってきてフルバックアップしようと心に誓いつつ、とりあえずSnow Leopardのクリーンインストールに成功して欲しいと思う夏の夜。

2009年8月29日土曜日

愛車維持管理

そう言えば、8月前半に愛車が入院しました。

理由は、エンジン稼働中にカラカラと異音がするのが気になったこと。普段はしていなかった音が急にし出すと非常に気になります。アクセルを踏むとエンジン回転数に比例して異音の感じが変わるので、駆動系に関係しているだろう事は薄々感じました。すると、一昨年のエンジン&タービンのブローが思い起こされます。急に背筋が寒くなって、自宅近くのディーラーで見てもらう事にしました。

早速調べてもらうと、エンジンとオルタネータを繋ぐベルトのゴムが劣化していて、ヒビが入っていました。通常5年程度で交換する消耗品パーツだそうですが、6年半を越えたこの時期に劣化が表面化してきた様です。それに加え、そのゴムに繋がっているホイール(?)のベアリングがヘタっていて、これが件の異音の原因となっていた模様。結局、ベルトの交換やオルタネータのオーバーホールをしてもらい、おかげさまですっかり異音は消え快適なエンジン音が戻ってきました。

ところで、今のクルマの前に乗っていたクルマでは、こんなトラブルはありませんでした。そこでその点を聞いてみたところ、メカニックさん曰く以前のクルマと違って今のクルマでは、
  1. エンジンとオルタネータ、エアコンを繋ぐベルトが一本に集約されている(以前は各一本ずつ計二本だった)
  2. バッテリーの容量を減らし小サイズ化した結果、頻繁な充放電が発生し、かつより大容量の発電量がオルタネータに求められるようになった
等の理由により、オルタネータ周りへの負担が増加しているそうです。

そんなことちっとも知りませんでした。ちょっと勉強になりました。

Mac OS X 10.6 Snow Leopard発売

MacOS X 10.6 Snow Leopardが発売になりましたね。
最近仕事で有楽町のビックカメラをよく通るので、機会があったら買おうかなと思っているんですが、まずは何がLeopardからアップデートされたのかを調べてみることに。

Snow Leopardが切り開く、Macの新時代


なかなか良さそうです。
プラグインの対応/非対応はあるかも知れませんが、64bitモードで作動するSafariがパフォーマンス向上している点も気になります。

Leopardと比べてお手頃価格ですし、買ってみようかなあ。。。

2009年7月25日土曜日

Safariが不安定

最近、Safariが凄く不安定な気がするんですが、気のせいでしょうか。。。
明らかにクラッシュの頻度が上がりました。

ちなみに、最新版にアップデートされてるんですが。

2009年7月20日月曜日

Google OS

Chrome OSアーキテクチャの“本命”

GoogleがChrome OSを発表して少し経ちますが、振り返ってみると2年半ほど前にこんなブログエントリを書いていました。

この時はGoogle OSに搭載されるWeb BrowserとしてFirefoxを挙げていますが、この後Googleが独自BrowserであるChromeを発表したのはご存じの通りです。

ただ、肝心なところはそれ程変わっていなくて、超軽量の(恐らく)LinuxをベースとしたBrowserが稼働するだけのOS、という点でChrome OSは私の想像したGoogle OSそのものです。

私の(ある意味)妄想的ブログエントリから2年半を経てGoogle OSがデビューしたわけですが、Googleにとってこの期間はちょっと長いかも知れません。かの企業であれば、本気になればこの程度のソフトウェアは1年もあれば作ってしまいそうです。2年半という期間には、ビジネス上の判断や市況、他の企業とのアライアンスなど、技術とは違う理由が働いたのかも知れません。

ともあれ、あちこちで語られている様に、Googleのスタンス(全てのアプリケーションをクラウドで提供する)は非常に注目され、段々と採用されていきそうです。それに伴い、Chrome OSの存在感も増していく事と思われます。

矢野研からはこんな調査結果が出ていますが、個人的にはこの結果を額面通り受け取るのは少し気が引けます。勿論リサーチの結果に異を挟むものではありませんが、何かしらの起爆剤によってSaaS (もしくはASP)が爆発的に流行するのではないかという気がしてなりません。

その為に取り除くべき障壁は何なのか、見極める必要がありそうです。

ベクタとスケーラ

「京速計算機」は最速SPARCベース スカラー単独に決定

日経新聞を読んでNECと日立のプロジェクトからの撤退は知っていましたが、そもそもベクタ型のスーパーコンピュータとスケーラ型のスーパーコンピュータの違いがよく分からないので、調べてみることに。


ベクタ計算というのは、要するにSIMDの様ですね。

以前大学の授業でTI社のDSPについて学んだのですが、DSPは畳み込み演算を1命令で行える機能があって、この演算がまさにSIMDでした。よく覚えてないんですが、確か実際のDSPボードを使ってFFT演算をやった気がします。

最近耳にするベクタプロセッサとしては、CELLのSPEがありますね。IBMがロスアラモス研究所に納めたスパコンであるRoadRunnerは、CELLをベースにしているそうです。

やはり、スパコンの世界ではベクタ演算が強いという事なんでしょうか。

スケーラ演算をメインにする場合は、どちらかというとコモディティのプロセッサを使ったクラスタ構成になるということなのかな。

2009年6月17日水曜日

部下のいない管理職は何を管理し何を見ているか

下のいない管理職は何を管理し何を見ているか

なるほど、非常に納得です。

後輩や部下に教えることは、実は教えている自分自身が成長することでもあるんですよね。適切な年齢、年次に適切なポジションで適切な行動をし、適切に学ぶ。このことが非常に重要であるということを再認識しました。

2009年6月15日月曜日

メインフレーム

わけあってメインフレームについて調べていたところ、非常に参考になるサイトを発見しました。

「メインフレーム・コンピュータ」で遊ぼう

メインフレームはその性質上あまり情報がネット上に出回っていない(と思う)ので、こういったサイトは貴重です。

2009年6月12日金曜日

備忘録

最近仕事が変わってすっかりTechyな記事を読み漁れなくなりました。
ニュースとかは一応チェックしているんですが、ちょっと長い記事なんかだと中々読めなくて。

ということで、備忘録代わりに後で読みたい記事をメモっておきたいと思います。


あと、なんだか面白いサービスが始まりましたので早速使ってみました。

blogram.jp

ブログの成分を分析してくれるそうで。
なんだか面白そうですね。

2009年6月10日水曜日

先日、家で夕飯を食べていたら昨年根治療をした奥歯のがサクッと取れた・・・orz
慌てて歯医者さんに行き、付け直してもらった。
特に虫歯の進行などが原因では無かった模様で、ほっと一息。

それにしても、歯に何か起こると本当にビクッとします(ToT)

あ、でも親知らずの抜歯跡は順調です。

2009年5月16日土曜日

MacOS Xのソフトウェア・アップデートで問題

3月に実行して以来MacOSのソフトウェア・アップデートが動かなくなっていた(正確に言うと、ソフトウェア・アップデートは起動するのだが、プログレスバーが20%くらいの所で止まってしまい、いっこうに進まない)ので、意を決して以下のURLからアップデートのインストーラをダウンロードして実行。

アップル - サポート - ダウンロード

ちなみに、今回は以下をインストールした。

  • iTunes 8.1.1 for Mac
  • Mac OS X 10.5.7 統合アップデート

インストール後は無事にソフトウェア・アップデートが機能する様になり、ホッと一息。原因は何だったのだろうか。。。

2009年5月8日金曜日

寝言NIC

PCがスリープ中でもIMに応える・ダウンロードを続ける「寝言」NIC

見た瞬間に良い発想だと思いました。

昔、まだGMail等のIMAP4 enabledなフリーのメールサービスが無かった頃、ロケーション透過性を求めて自宅でIMAP4サーバを立ち上げたことがありましたが、PCをその為に立ち上げっぱなしにするのは消費電力や騒音の観点から好ましくなかったので、敢えて玄箱を買ってきてサーバに仕立て上げたことがありました。

しかし、この「寝言NIC」があれば普通のPCを省電力IMAPサーバに仕立て上げることも可能かも知れませんね。勿論、この記事にあるP2Pクライアントとしての活用も有効な利用法の一つのように思えます。

久々に面白い製品が出て来たって感じです。

2009年4月11日土曜日

親知らず抜歯(5)

その後、抜歯跡は左右共に順調に塞がっている感じです。
痛みも全くなくなり、良い感じです。

2009年4月4日土曜日

CTとMRIの違い

「CT」と「MRI」の違いって何?

私もうすうす感じていた疑問が激しく分かり易く解説されていました。

MRIのMRがMagnetic Resonanceの略だとは分かっていたのだけれど、CTのCがコンピュータだとは思わなかった。CTは広義にMRIを含んでいるわけですね。狭義のCTはX線CTである、と。なるほど分かり易いです。

どちらも一長一短があることも分かりました。とってもバリューのある記事です。

2009年3月30日月曜日

配列型のカラム

そもそも、配列型のカラムなんてものを初めて知ったのですが、、

新しい業界標準「SQL99」詳細解説 - 第二章 柔軟さを増したデータ構造(1)

PostgreSQL v8では、このSQL99に準拠して配列型というカラムが使えます。例えば、あるカラムが整数値の配列を持つ場合、

CREATE TABLE hoge
(
....
fuga INTEGER[],
....
)

みたいに書けるのです。この場合、普通にコマンドラインクライアント(PostgreSQLであればpsql)からこのカラムをSELECTすると、"{val1,val2,...}"という様に、整数値がカンマ区切りで繋がれ、中括弧でくくられた文字列値として見えます。

プログラムからデータを取得する場合は、例えばPerlのDBI/DBD::Pgの場合、このカラムを取得したデータ型は、Perlの無名リストへの参照として自動的に展開されます(注1)

正直言って、SELECT文一発でカラムデータが検索出来なそうな感じがするので、あまり使いたい気はしないんだけれど、こういうデータ型が便利なシチュエーションもあるのかも知れないなあとも思う。

(注1) ちなみにこの挙動はDBD::Pgのバージョンが2.0以上でないと利用できないっぽい。バージョン1.4では、単なる"{val1,val2,...}"という文字列を取得してしまった。。

PHP5のPostgreSQLバインドは、まだこの配列型に対応していないっぽいです。いちいち"{val1,val2,...}"をパースして配列に展開する作業が鬱陶しいです、正直なところ。

*****

その後、色々とテストしてみると、DBD::Pg v2.0以降であればINSERT/UPDATE/SELECTにおいて、配列型カラムの値はPerlのリストへの参照と等価であることが分かりました。両者の変換はドライバによってシームレスに行われます。

これはちょっと便利かも。

親知らず抜歯(4)

左上の親知らずは、右上の親知らずと比べて抜く際に少し手こずったのですが、そのせいもあって先生から「左上の親知らずは根っこが大きく張っていて抜くのに手こずったので、抜いた後も痛むかも知れません」と言われていました。

そして、昨日その予言通りというか、右上の親知らずの時には鈍痛程度で収まっていた痛みが、ほんの少し強くなりました。抜いた場所そのものが痛いというか、周りの歯茎やその奥が腫れて痛んでいる様な痛みです。

今朝起きても痛みは引かなかったので、仕方なく奥の手を繰り出すことに。

今朝、万が一痛みが出たときの為に処方されていた鎮痛剤を1錠飲みました。すると、、、何とも物凄い効き目、20分もしたら痛みが全くなくなりました。そして、薬を飲んで以来7時間が経っても、まだ効き目は持続している様です。

この痛み止め凄いです。また痛みが出たら使おうかと。

2009年3月24日火曜日

OpenSolarisのデスクトップ進化形 Jaris

OpenSolarisのデスクトップ進化形 Jaris

そう言えばこの記事にもある様Linuxが知られ始めた1995年頃には、確かにLinuxPoor man's Solarisと呼ばれていました。大学ではSolarisのワークステーションを使っていることが多かった様ですが、私の大学でもご多分に漏れずSolaris (古いものではSunOS 4.1.xなど)を使っていたため、自宅のPCでLinuxを使うことは「大学のSolarisで使っているアプリケーションが自宅でも使える」的な喜びをもたらしたのでした。とは言っても、Mule上でmh-eを使うとかそういう程度のことだったんですが。

それはともかくとして、Jarisはなかなか面白そうです。特にZFSが気になります。手元にある程度パワーのあるPCがあれば、入れてみたい気がします。

親知らず抜歯(3)















お待たせしました(←誰も待ってない)
昨日、左上の親知らずも抜いてきました。右上の時に比べて、少し抜くのに手こずった感じがありましたが、それでも抜歯は約2分、麻酔の時間を含めても5分以内で終了したそうです。まさに秒殺ならぬ分殺ですね。

折角なので左上の親知らずの写真も載せてみます。歯に付いていた血管(?)の名残のようなものが見えますね。ちょっとグロくてすみません。

ところで、こちらの歯も軽く虫歯になっている(黒い所)様子ですが、右上の親知らず程では無かった模様です。

ともあれ、また3日間ほど抗生物質を飲み続け、傷口が塞がるのを待ちたいと思います。ちなみに、前回抜いた右上の親知らずの跡は傷口も塞がって順調の模様です(by先生)。

前回に比べ、今回は抜いた後に少し鈍痛がしました。でも激痛ではないし、痛くないと言っても過言ではないです。改めて良い先生に巡り会えたなあと思います。

2009年3月22日日曜日

IBMがSunを買収するかも

[WSJ] IBMのSun買収、メリットと課題は?

旅行に行ってる間に面白いニュースが飛び込んできました。確かに、ハードウェア事業を買収してきたIBMにとって、Sunの買収は流れに逆行することかも知れませんね。

2009年3月14日土曜日

親知らず抜歯(2)















右上の親知らずを抜いて以来、抗生物質を3日間ほど飲んで、その後は特に薬も飲まずに順調に経過しております。折角なので(!?)、抜けた歯の写真でも載せておこうかと。

ご覧の様に、歯茎から上に出ていた部分はだいぶ虫歯になっており、黒くなっております。これも、抜くのを決心した理由のひとつでした。

昨年まで虫歯治療に通っていた医院の先生曰く、「虫歯が進んで歯が欠けるとペンチで抜けなくなって大変」であり、かつ「親知らずには治療器具が届かないので虫歯治療できない」とのこと。要するに「早く抜け」というお告げだったのだな。

ちなみに、まだ抜いていない左上の親知らずについても、ご多分に漏れず虫歯だそうだ。こちらは再来週抜歯予定なので、抜き次第報告する(←誰も待ってない)。

じゃらん

じゃらんのウェブサイトで会員登録してログインしようとすると、[ログイン]ボタンを押した後にJavaScriptが暴走(?)してFirefoxが警告ダイアログを表示してしまう。そしてログインできない。

ちなみに、Safariだと問題無くログイン出来る。不思議だ。

環境は:

OS: MacOS X 10.5.6 Leopard
ブラウザ: Mozilla Firefox 3.0.7 / Safari 3.2.1

FirefoxのJavaScriptエンジンに特有の問題でもあるのだろうか。

2009年3月13日金曜日

AppleがNetbookを出すとの噂

Appleのエキスパート、「Netbookは気が早い」

Netbookは、要するに

  • 安くて
  • 小さくて
  • 非力な

ラップトップで、どこのメーカーが出そうと正直なところ大差はない。少なくとも、ただのNetbookにAppleがガチンコで取り組む価値は無さそうに思える。もしAppleがNetbookの様なデバイスを本気で検討しているとしたら、それはきっとNetbookと呼ばれるカテゴリのステレオタイプからはかなり掛け離れた物になるのではないかと思う。

個人的には、iPhone 3Gが結果的にNetbookと競合している様に思えるので、AppleはNetbookの様なタイプのデバイスには手を出さないのではないか、という気がしている。

2009年3月11日水曜日

Encode - Perlモジュール

私のPerl知識はPerl5のごくごく初期のレベルで止まっているわけだが、今日もまた新たな発見があった。

かつてはPerlで日本語文字コードを変換を行うには、jcodeモジュールを使う(明示的にjcode.plをどこからか持ってきてrequireしてた気が)のが一般的だったが、今やPerl5標準でEncodeというモジュールがあるようだ。

use Encode;

my $decoded = Encode::decode("euc-jp", $target);
my $encoded = Encode::encode("shiftjis", $decoded);

とかっていう風に使う。ここで「decode」や「encode」の概念がイマイチ分かりにくいが、要するに「内部エンコーディングであるUTF-8へdecodeするからencodeする」という事のようである。

ちなみに、上記の2つの処理をいっぺんに行うfrom_toという関数もあるのだが、どうも上手く動かないようだった。環境はMacPortsのPerl5 (MacOS X 10.5)及びActivePerlのPerl5 (Windows XP Pro)であった。理由は不明だ

2009年3月10日火曜日

CPAN (1)

Perlのアドオンモジュール集であるCPANを使ってみることに。ちなみに、MacOS XデフォルトのPerlにもCPANモジュールは入っているが、MacPortsで入れたCPANモジュールを使うことにする。

% su -
% /opt/local/bin/cpan

ここで設定をゴチャゴチャと行う。ほぼデフォルトでOKだが、MacOS Xの端末アプリはUTF-8がデフォルト文字セットなので、文字セットを「ISO-8859-1?」と聞かれたらnoと答える。CPANアーカイブは、Asia→Japanと指定し、適当にアーカイブサイトを選ぶ。これは恐らくネットワーク的な距離と好みによって変わって良いと思う。

さて、色々と答えるとCPANの設定が完了してプロンプトが返ってくる。

cpan>

ここでまずは以下のコマンドを叩く。正直、意味は良く分からない(←おい)

cpan> install Module::Install
Running install for module Module::Install

Running make for A/AD/ADAMK/Module-Install-0.79.tar.gz
Is already unwrapped into directory /var/root/.cpan/build/Module-Install-0.79
Makefile.PL returned status 65280
Running make test
Make had some problems, maybe interrupted? Won't test
Running make install
Make had some problems, maybe interrupted? Won't install

ああ、、、なんかエラーが。。。激しく意気消沈。

気を取り直して、本来入れたかったLWP::UserAgentを入れてみることに。

cpan> install LWP::UserAgent

あれ、なんかフツーに入った。何故だろう(汗
更にCrypt::SSLeayを入れる。

cpan> install Crypt::SSLeay

SSLがある場所を聞かれただけで、フツーに入った。Live testも問題なし。

親知らず抜歯(1)

先日、知人から腕が良いと紹介された歯医者さんで右上の親知らずを抜きました。

虫歯治療にはすっかり慣れた(あのドリルの音は未だに大嫌いですが・・・)私ですが、親知らずの抜歯だけは怖くて避けて回っていたのでした。しかし、今月は仕事の谷間というタイミングでに時間が採れることもあり、一大決心をして抜くことに。

当該の歯医者さんは初診だったので、まずは歯を診て頂きレントゲンを撮りました。その後、「じゃあ抜きましょうか」ということに。私の上の親知らずは左右共に既にしっかりと生えていて(先生曰く「にょきにょきと生えている)、隣の臼歯よりも飛び出してきている位なので、抜くのは難しくないそうです。

今回は表面麻酔をせず、いきなり歯茎の外側に麻酔注射をブスリ。まぁ、俗に言うところの「チクッとする」というやつです。さらに、丁度反対側くらいの歯茎の内側にもう一本麻酔注射をブスリ。麻酔が効くまでの間、上下の歯の噛み合わせについて色々と説明して頂き、準備は完了。

先生: 「お昼が近いので麻酔は弱めにしてあります。痛かったら言って下さいね」
おれ: 「はい (まじかよ。。。痛いのは嫌だぁ〜)」
先生: 「(抜歯対象の歯をグイグイ押しながら)これ、痛みますか〜?」
おれ: 「いいえ」
先生: 「じゃあ、抜きますね。まずはグイグイ押しますから」
おれ: 「はい (痛くしないで〜)」
先生: 「(かなり強くグイグイ押した後)じゃあ、次は引っ張りますよ〜
おれ: 「(ああ、歯がミシミシ言ってる・・・泣きそう)」
先生: 「(ガッツリ引っ張った後)はい!取れました
おれ: 「はあああ??マジですか!?」

あまりに速攻で抜けてしまった(所要時間約1分)ので、本当に拍子抜けした。暫くは信じられなかったが、抜いたばかりの歯(@血だらけ)を見せて頂き、さすがに納得した。

麻酔が確実に効いていたのだからだろうけれど、全く痛くなかったのにはビックリ。その後麻酔が切れる前に痛み止めを飲む様には言われたが、麻酔が切れても特に痛みは無く、非常に順調に経過している。

暫く時間を空けた後次は反対側を抜く予定になっているが、いくら痛くないとは言えまた抜くときにミシミシいうのを聞くのは嫌だなあ。。。この先生の腕が確かだということは非常に良く分かったのだけれど。

新幹線でWiFi

新幹線で無線LAN 3月14日から

N700系限定ですが、ようやく新幹線車内でのWiFiアクセスが可能になりました。ソフトバンクのBBモバイルポイントにも対応していますので、つまりiPhoneユーザはWiFiが使えるということですね。

2009年3月9日月曜日

DELL考

母親がPCを買い換えた。

正確に言うと、確か私が就職して2年ほどした頃に、命と引き替えに(←大げさ)残業しまくって稼いだ残業代がだいぶあったのでスリムノートPCをプレゼントしたのだが、それを今まで5年ほど使い続けていたのだ。しかし、さすがにスペック的にもきついし、最近は実用上問題のないスペックのノートPCが非常に安価に売られているので、買い換えも良いかなと思っていた。

今回は選定を私が行い母親自身が購入したのだが、随分と良いPCが安く手に入る時代になったのだなあと感心してしまった。

ちなみに、以前プレゼントしたPCは東芝 Dynabook SS S6という機種で、超低電圧版Pentium III 866MHzに標準256MBのRAMを512MBにアップグレードして購入したものだった。OSはWindows XP Homeなので、まぁスペック的には最低限のラインはクリアしているといった感じだ。とは言いつつ、クロックが1GHzにも満たないCPUでのWindows XP使用はキツいのも正直なところ。更に、まだこの頃はWiFi標準搭載ではないノートPCも多く、このノートも例に漏れずWired LANのみ標準搭載だった。その為、後付で802.11aのPCMCIA WiFiカードを挿して使っている。ちなみに、
液晶は12インチでいわゆるスリムノートのカテゴリ。

今回購入したPCは、DELLのVostro 1510という法人向けモデルで、BTOでCPUをCore2 Duoの2.1GHzにアップグレードしてあるが、RAMはデフォルトの2GB、HDDもデフォルトのまま160GBになっている。OSはWindows Vista BusinessをダウングレードしたWindows XP Proがプリインストールされている。多分価格は8万を切っている。勿論、802.11a/b/gに対応したWiFiチップが
内蔵されている。

Vostro 1510は15.4インチ液晶のごっついA4ノートだが、外見はだいぶ洗練されている気がする。特に、1年半ほど前に業務で買ったLatitude D520に比べると、随分と綺麗に出来上がったという感じ。Latitude D520はCore2 Duo 1.6GHzにBTOで増設した1GBのDRAMだったが、当時の価格で10万円位したものだ。外見は無骨で、業務用じゃなかったら絶対買わないな、と思わせてしまうデザインだった。

半導体(CPUとRAM)の進歩は目覚ましく、1年半も経てば以前としては破格の値段で素晴らしいスペックが手に入るのは当たり前なのだけれど、Vostro 1510のコストパフォーマンスはかなり良いのではないかという気がする。

もっとも、OSをWindows Vistaにした途端にこの評価は変わってしまうのかも知れないが、そういった意味で5年前のPCと変わらず今でも現役を張っているWindows XPは優秀なOSなのかも知れない。かつてはWindows 2000に比べて重たいというイメージのあったXPだけれど、今となっては最新のハードウェアでだいぶサクサク動く様になり、ましてやVistaと比べたら相当にベターな選択肢になっている。

勿論、軽さで言ったらWindows XPよりもLinuxの方が更に優秀だ。最近流行りのUbuntu Linuxは、実用性という点では全く問題無いし、日本発としてはVine Linuxという選択肢もある。Windows XPを完全に捨ててしまうのに問題があれば、これらLinuxとのデュアルブート環境なんかも良いかも知れない。

2009年3月2日月曜日

NECがクラウド上に基幹システム再構築へ

NECがクラウド上に基幹システム再構築へ

お客さんに売る前に自分たちで作って使ってみる、というのは良いアイデアだと思いますが。。。

なぜWindowsでクラウドなんだろうか。それとも、クラウドのプラットフォームはWindows以外のOSを使うのだろうか。ユニシスと共同開発するとなると、恐らくハイエンドIAサーバ(しかもIA32)っぽいのだけれど、であるならばLinuxという選択肢もあると思うのだが。

クラウドのOSとしてWindowsを選択するメリットが良く分からない。MSは、クラウド用OSとして何か特別なWindowsを隠し球に持っている、ということなのだろうか。

イマイチしっくり来ない決断ですな。。。

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は思いの外役に立つかも知れません。

2009年1月30日金曜日

PHPスクリプトの出力が文字化け

EUC-JPで書かれたPHPスクリプトの出力が文字化けしました。mbstring関係の設定をいじっても効果がありません。ApacheのAddDefaultCharsetディレクティブも記述されていないし、何でだろうと思って色々と調べたら分かりました。/opt/local/etc/php.iniのdefault_charset設定が悪さをしていた模様です。

default_charset = "utf-8"

という行をコメントアウトして文字化けは解消しました。

OID

OIDというのはObject IDの略で、PostgreSQLに特有の機能(?)です。どのテーブルのレコードにも暗黙裏にoidという名前のカラムがあります。どんな使い方をするかと言うと、INSERT文発行時に関数(例えばPHPのクエリ発行関数)がOIDを返却してくるので、INSERTされたデータをOIDで特定出来るわけです。

ところで、このOIDというカラムがデフォルトで作られる機能が、何故かバージョン8.1からオフになりました。中途半端なマイナーバージョンアップでこういった変更を加えるのは謎ですが、ともかく昔のプログラムでOIDを読んでいる物は全て動かなくなります。

この後方互換性を考慮するオプションが、postgresql.confに書かれる

default_with_oids = on

という物で、デフォルトではこのオプションはコメントアウト(従って非アクティブ)になっています。これをオンにするには、/opt/local/var/db/postgresql83/defaultdb/postgresql.confの中を変更し、コメントアウトされた上記オプションをアクティブ化して更に値をoffからonに書き換えます。

上記のパスの中にあるdefaultdbという部分は環境によって違うかも知れません。

以上、備忘録まで。

MacPortsのApacheでVirtualHost

とりあえず、MacOS XデフォルトのApacheで設定したVirtualHostの設定ファイルとMacPortsのApacheの設定ファイルを比較してみる。

% diff /opt/local/apache2/conf/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf

見たところ、自分が追加したVirtualHostの設定以外は違いが無さそうなので、採用。オリジナルをバックアップして、設定ファイルをコピーする。更に、メインの設定ファイルhttpd.confも比較してみる。

% diff /opt/local/apache2/conf/httpd.conf /etc/apache2/httpd.conf

こちらは、DSOモジュールへのパスなどの違いから沢山の差分が表示されるが、肝は恐らくIncludeディレクティブの部分かと。

% diff /opt/local/apache2/conf/httpd.conf /etc/apache2/httpd.conf | grep Include
< #Include conf/extra/httpd-mpm.conf
> Include /private/etc/apache2/extra/httpd-mpm.conf
< #Include conf/extra/httpd-multilang-errordoc.conf
> #Include /private/etc/apache2/extra/httpd-multilang-errordoc.conf
< #Include conf/extra/httpd-autoindex.conf
> Include /private/etc/apache2/extra/httpd-autoindex.conf
< #Include conf/extra/httpd-languages.conf
> Include /private/etc/apache2/extra/httpd-languages.conf
< #Include conf/extra/httpd-userdir.conf
> Include /private/etc/apache2/extra/httpd-userdir.conf
< #Include conf/extra/httpd-info.conf
> #Include /private/etc/apache2/extra/httpd-info.conf
< #Include conf/extra/httpd-vhosts.conf
> Include /private/etc/apache2/extra/httpd-vhosts.conf
< #Include conf/extra/httpd-manual.conf
> Include /private/etc/apache2/extra/httpd-manual.conf
< #Include conf/extra/httpd-dav.conf
> #Include /private/etc/apache2/extra/httpd-dav.conf
< #Include conf/extra/httpd-default.conf
> #Include /private/etc/apache2/extra/httpd-default.conf
< #Include conf/extra/httpd-ssl.conf
> #Include /private/etc/apache2/extra/httpd-ssl.conf
> Include /private/etc/apache2/other/*.conf

色々と違うなあ。。。httpd-vhostsとhttpd-manualについては自分でコメントアウトを外したから良いとして、httpd-mpmとhttpd-autoindex、httpd-languages、httpd-userdir辺りがMacOS XデフォルトのApacheではアクティブになってますな。後は、最後のother/*.confのところか。まぁ、MacPortsのApacheにはotherというディレクトリがそもそも存在しないですからね。この辺りをMacPorts版Apacheにも反映する事にします。

とりあえず、MacOS XデフォルトのApacheを止めます。

% /usr/sbin/apachectl stop

更に、MacPortsのApacheの設定ファイルをテストします。

% /opt/local/apache2/bin/apachectl configtest
Syntax OK

次に、PHP5用のmod_phpの設定をチェックします。設定ファイルは/opt/local/apache2/conf/extras-conf/mod_php.confです。とりあえずデフォルトで良さそうです。あと、PHP絡みでメインの設定ファイルを修正します。

  1. DirectoryIndexにindex.phpを追加
  2. Include conf/extras-conf/mod_php.confを最後尾に追加

PHPに関してはPHP自体の設定も必要です。php.iniファイルがありませんので、サンプルからコピーします。

% cp /opt/local/etc/php.ini-dist /opt/local/etc/php.ini

PHPの設定で変更する箇所は以下の通り。

short_open_tag = Off (デフォルトのOnから変更)
default_charset = "utf-8" (デフォルトの"iso-8859-1"から変更)
mbstring.language = Japanese (コメントアウトされているので先頭の";"を削除)
mbstring.internal_encoding = utf-8 (コメントアウトを解除しデフォルトの"EUC-JP"から変更)

じゃあ、Apacheを起動しますか。

% /opt/local/apache2/bin/apachectl start
% netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
(snip)
tcp46 0 0 *.http *.* LISTEN
(snip)

ちゃんと80番ポート(http)をバインドしてますね。良さそうです。最後に、MacOS Xデフォルトではユーザ毎に保持されている設定ファイル/etc/apache2/users/.confの記述を移植します。

XSLT

言語コンパイラーとしての XSLT

IBM developerWorksはいつもいつも秀逸な記事が多くて、内容も濃いので時々どっぷり浸かって読むのに良いんですが、これまた面白い記事です。

JavaBeanの定義を書いたXMLファイルからXSLTでJavaBeanのソースコードを生成する、というのは面白いなと思いました。

最近はJavaはあまりやらなくて、ウェブ系はもっぱらPHPなんですが、データベースに関してはテーブル定義のXMLからMySQL or PostgreSQLのDDLやPHPのクラスを自動生成するXSLTがあっても良いなって思いました。

2002年頃の案件以来XSLTはご無沙汰なんですが、久しぶりに使ってみたいです。XSLTのランタイム(何て呼ぶんでしたっけ??忘れちゃいました)は今だと何が主流なんですかね。以前は確かXalan (=ザランと読む)だった気が。。。

.NETのiPhoneアプリ!?

普通に聞くと「何じゃそりゃ!?」と思ってしまうのだが、記事によると色々特殊なやり方はしているものの事実の模様だ。

iPhoneでC#アプリが審査に通るワケ

イメージとしては、昔懐かしいVisual J++でJavaのバイトコードをネイティブコードにコンパイルしてしまうというアプローチが存在した(Sunに禁止される前の)頃の(Windows上の)Javaみたいなものだろうか。

それにしても、.NET Frameworkのオープンソース実装であるMONOの存在は聞いていたけれど、ここまで実用的だとは知らなかった。意外といけそうだ。

MacPortsでPHP5 (リベンジ編)

というわけでMacPortsでMySQL 5もPostgreSQL 8.3も入れてしまいました。

いよいよPHP5のインストールを再決行します。今回もまた前回の試行の残骸が残っていて悪さするので、とりあえず綺麗にするところから。

% port clean php5
---> Cleaning php5

さて、色々とvariantsを指定してインストール開始。
さっきは気付かなかったけど、PEARもオプションに入れてみました。

% port install php5 +apache2 +mysql5 +postgresql83 +pear
Error: Target org.macports.fetch returned: fetch failed Error: The following dependencies failed to build: apache2 curl pkgconfig freetype gd2 autoconf help2man p5-locale-gettext perl5.8 perl5 automake fontconfig jpeg libpng libtool libmcrypt mhash tiff

なんか、httpdをfetchしようとして失敗してる・・・。やっぱりapacheすらもMacPortsじゃないといけないのかな。と思ったらこちらのサイトが。早速参考にさせて頂き、apache2をfetchしてみる。

% env MASTER_SITE_LOCAL=http://distfiles.macports.org/apache2 port -v fetch apache2

なんか、あっさりfetch出来た。何かデフォルトのPortsのサイトにトラブルがあるのかな?改めてapache2のインストールだけを試みる。

% port install apache2

今度はうまく行きました。更に本命のPHP5に掛かります。

% port install php5 +apache2 +mysql5 +postgresql83 +pear

依存関係絡みで、pkg-configやcurl、freetype、perl、gettextといったパッケージも入る模様。何故Curl?、しかもperl既に入ってるんですが、って感じもするんだけれど。まぁ、PATHがちゃんとしてればMacOS Xデフォルトのバージョンとはかぶらないから大丈夫なのかな。それよりもMacPortsで入れたApache2をどうするかの方が気になる。

と思ったらエラーで停止。しかも、Perl 5.8.8をPerl 5.8用とPerl 5用と、二つの目的で二回別々にビルドして入れようとしてる。何かおかしくないか??

---> Fetching perl5.8
---> Attempting to fetch perl-5.8.8.tar.bz2 from http://www.cpan.org/src/5.0/
---> Verifying checksum(s) for perl5.8
---> Extracting perl5.8
---> Applying patches to perl5.8
---> Configuring perl5.8
---> Building perl5.8 with target all
---> Staging perl5.8 into destroot
---> Installing perl5.8 5.8.8_3+darwin_9
---> Activating perl5.8 5.8.8_3+darwin_9
---> Cleaning perl5.8
---> Fetching p5-locale-gettext

これと、

---> Fetching perl5
---> Attempting to fetch perl-5.8.8.tar.bz2 from http://www.cpan.org/src/
---> Verifying checksum(s) for perl5
---> Extracting perl5
---> Applying patches to perl5
---> Configuring perl5
---> Building perl5 with target all
---> Staging perl5 into destroot
---> Installing perl5 5.8.8_0+darwin_9
---> Activating perl5 5.8.8_0+darwin_9
Error: Target org.macports.activate returned: Image error: /opt/local/bin/a2p is being used by the active perl5.8 port. Please deactivate this port first, or use the -f flag to force the activation.
Error: The following dependencies failed to build: gd2 autoconf help2man perl5 automake fontconfig jpeg libpng libtool libmcrypt mhash tiff Error: Status 1 encountered during processing.

これ。当然同じ物だからかち合うよね。。。とりあえずエラー発生後にインストール済パッケージを調べると、

% port list installed
(snip)
perl5 @5.8.8 lang/perl5
perl5.8 @5.8.8 lang/perl5.8
(snip)

そりゃあ当然入ってるよね。エラー出た割にちゃんと入っているみたいなので、しつこくPHP5のインストールを再実行してみる。

% port install php5 +mysql5 +postgresql83 +pear

すると、何事も無かったかの様に(笑)、help2manautoconfautomakefontconfigjpeglibpnglibtoolgd2libmcryptmhashtiffphp5とインストールを続行する。依存パッケージ大杉。全部ソースのtar-ballダウンロードして展開してビルドしてインストールだから、めっちゃ時間掛かるしCPUも喰う。(コンパイラのCPU負荷は高いですから・・・)グラフィックス描画のgdライブラリをビルドするから画像系のパッケージが要るのかな?それにしても、さっきのエラーは何だったんだろうか。。。

さて、時間は掛かったものの無事インストールは終了。最後に以下のコマンドを実行することを進められたので、実行しておく。

% cd /opt/local/apache2/modules
% /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

するとエラーが・・・

% cd /opt/local/apache2/modules
% /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
apxs:Error: Config file /opt/local/apache2/conf/httpd.conf not found.

で、件の/opt/local/apache2/confディレクトリ以下を見ると、httpd.confは無く、httpd.conf.sampleがある。そこで、サンプルをコピーして上記のコマンドを再実行。

% cp httpd.conf.sample httpd.conf
% cd /opt/local/apache2/modules
% /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
[activating module `php5' in /opt/local/apache2/conf/httpd.conf]

今度はうまく行きました!

今回はMacPortsでもApache2を入れ、PHP5はそちらに設定しました。MacOS XデフォルトのApacheでMacPortsのPHP5を参照しても良いんですが、今日は水入りとしまして・・・

それにしても、ホントMacPortsって何でも出来ちゃいますね。元々のPortsシステムも凄いけれど、それをMacOS Xに移植してくれた人も凄いです。先人の知恵と努力の結晶に感謝しつつ、今日も何とか作業が完了しました。

MacPortsでMySQLとPostgreSQL

とりあえず、普通にMacOS X向けインストーラでインストールしてあったPostgreSQL 8.3をアンインストールし、更にMySQL5もアンインストール。ただ、こちらは手動であれこれやる必要有り。

  1. アプリケーションの"MySQL Tools"はそのままゴミ箱へ
  2. システム環境設定に残っているMySQLサーバの起動設定は/System/Library/PreferencePanes/配下のMySQL.prefPane(だったかな?うろ覚え)ディレクトリをrm -rfして削除
  3. MySQLの実体は/usr/local/以下にあるのでこれもディレクトリを丸ごとrm -rfして削除

こんな感じでとりあえずMySQLは片付いた。

PostgreSQLは/Library/PostgreSQL/8.3/配下にアンインストーラのアプリケーションがあったのでそれを実行。データベースファイルとpostgresユーザだけは消しませんよ、という警告メッセージと共にアンインストーラ終了。データベースファイルは/Library/PostgreSQL/8.3/dataディレクトリ配下にあるので、これはrootにsu -してrm -rfで削除。ユーザ云々に関しては/etc/passwdを見るが、どうやらこれはシステムでは参照していない模様。

さて、先ほどMacPortsからPHP5を入れようとした際の残骸が問題を起こすので、一旦mysql5関連のportsの残骸を削除。

% port clean mysql5

ちなみに、さすがに/opt/local/binにパスを通しました。rootユーザの場合~/.bash_profileは読まれない模様。代わりに.profileは読んでくれますね。

さて、この上でmysql5をインストール。

% port install mysql5 +server

今度は無事入りました。MySQL5をデーモンとして起動するスクリプトは"/opt/local/share/mysql5/mysql/mysql.server"ですので、これに"start"引数を渡して起動してみる事に。しかし、、、

% /opt/local/share/mysql5/mysql/mysql.server start
Starting MySQL
... ERROR! Manager of pid-file quit without updating file.

というわけでエラーが。ネット上の情報などを調べてみて、この辺を参考にさせて頂きMySQLを初期化する。すると、、、

% mysql_install_db5 --user=mysql
Installing MySQL system tables...
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
OK
Filling help tables...
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
090130 1:37:12 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
OK
...
(以下、沢山の参考情報が表示されるが初期化とは無関係)
...

といった感じで初期化は無事終了。再度MySQLのデーモンを起動する。

% /opt/local/share/mysql5/mysql/mysql.server start
Starting MySQL
. SUCCESS!

今度は無事成功!なお、コマンドインタプリタがmysqlじゃなくてmysql5なので注意。異なるバージョンのMySQLを共存できる用にする為の配慮かな?

さて、次はPostgreSQLへ。

% port install postgresql83 +perl

普段PerlでもDBI/DBDでデータベースアクセスするので、一応Perlサポートも入れておく。何やら、依存関係でlibxml、libxsltそしてuuidなるパッケージも同時にインストールしているっぽい。ここで、この辺を見てびっくり。パッケージ"postgresql83"はクライアントだけだそうだ。どうりでインストール後の/opt/local/share以下を漁ってもpostmasterが無いわけだ。じゃあ、ということで早速サーバもインストールする。

% port install postgresql83-server

今度はクライアントの10倍くらいのスピードでインストール完了。共通しているソースがビルド済だったとかかしらん?MacOS起動時に自動でPostgreSQLを起動したいなら以下のコマンドを実行しろ、とご丁寧にインストーラがメッセージを吐いています。

% sudo launchctl load -w /Library/LaunchDaemons/org.macports.postgresql83-server.plist

今回はとりあえずスキップして、更にインストーラのメッセージにあるデフォルトDBの作成を行います。


% mkdir -p /opt/local/var/db/postgresql83/defaultdb
% chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
% su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'

ここまでつつがなく完了。上記の3つのコマンドのうち最後のひとつが更なるメッセージを表示。

% /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb

これでpostmaster (PostgreSQLのデーモンプロセス)が起動するらしい。早速やってみる。

% /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb
"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise. See the documentation for
more information on how to properly start the server.

rootで起動しようとしたら怒られた・・・orz
じゃあ、って言うんでpostgresユーザで起動してみる。

% su postgres -c "/opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb"
LOG: database system was shut down at 2009-01-30 02:20:36 JST
LOG: autovacuum launcher started
LOG: database system is ready to accept connections

とここで止まる。シェルプロンプトが返ってこないので、フォアグラウンドでプロセスが起動しているみたいだ。早速別のターミナルを上げてコマンドインタプリタを実行してみる。ちなみに、コマンドインタプリタはMySQLの時と同様にバージョン番号がくっついているので注意。コマンドはpsqlじゃなくてpsql83です。

% psql83 -U postgres -l
List of databases
Name | Owner | Encoding
-----------+----------+-----------
postgres | postgres | SQL_ASCII
template0 | postgres | SQL_ASCII
template1 | postgres | SQL_ASCII
(3 rows)

うまく行きました!

さて、この後PHP5をいよいよ入れるわけですが、一息入れましょう。。。

2009年1月29日木曜日

MacPortsでPHP5

JavaFlavor Blogさんの「MacPortsでApache2+PHP5」を参考にさせて頂き、MacPortsからPHP5を入れることにする

既にMacPortsは導入済みなので、早速以下のコマンドラインを試してみることに。

% /opt/local/bin/port variants php5

すると、上記のblogエントリにあるよりももっと多くのオプションが利用可能に。。。凄い、凄いよMacPorts!

というわけで、現在MySQL5を使っていて、今後はPostgreSQL 8.3を使いたい(というか既にインストール済)な私は、以下のコマンドラインでインストールにトライ。

% /opt/local/bin/port -v install php5 +apache2 +mysql5 +postgresql83

しかし残念ながらエラーで止まる。エラーメッセージはこんな感じ。

Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_databases_mysql5/work/mysql-5.0.67" && make all " returned error 2

もしかして、MySQLはMacPorts経由じゃなく入れているからだろうか。

ApacheはMacOS Xのデフォルトでインストールされているのでそちらを使うとして、MySQLとPostgreSQLはMacPorts経由で入れ直した方が良いかしら。

ApacheでVirtualHost

プライベートも含めて幾つかのウェブサイトを開発しているので、開発機のMacBook君にVirtualHostを設定することに。

以下、備忘録です。

  1. まずhostsファイルを編集して必要なドメインを登録
    /etc/hostsに"127.0.0.1 hoge.com"みたいな記述を追加
  2. 次にApacheのVirtualHost用設定ファイルを編集
    /etc/apache2/extra/httpd-vhosts.confを編集
  3. 更にApacheのVirtualHostを有効化
    /etc/apache2/httpd.conf内のhttpd-vhosts.confに関するIncludeディレクティブを有効化
  4. 設定ファイルのチェック
    % apachectl configtest
  5. そしてApacheを再起動
    % apachectl restart
VirtualHostの設定ではIPではなくホスト名ベースの設定を採用。適宜VirtualHost毎にDocumentRoot, ErrorLog等を設定。

元々のVirtualHost設定ファイルには"CustomLog /path/to/log common"みたいな記述があるが、これがチェックで引っ掛かる。ここは"TransferLog /path/to/log"と書き直して対応。最後の"common"が残らない様に注意。ここの記述って、Apacheのバージョンによって違うのかな??

とりあえずこれでVirtualHostの設定が完了。

次はPostgreSQL対応のPHP5を入れます。

2009年1月28日水曜日

MacOS XのPHP

いわゆるLAMP (Linux, Apache, MySQL, and PHP) ならぬMAMP (MacOS X, Apache, MySQL, and PHP) な環境でソフト開発をしていたんですが、今度はMySQLの代わりにPostgreSQLを使うことになり、早速MacOS X用のインストーラを落としてきて入れました。

ところが、何とMacOS XデフォルトのPHP5はPostgreSQLに対応していません。phpinfo()で見ると、ビルド時のconfigureオプションでPostgreSQLを有効にしていないのです。

何たる割り切り・・・orz

というわけで、何とかしてMySQLもPostgreSQLも使えるPHP5を導入しなければいけなくなりました。MA(M|P)Pって感じです。(←分かり辛っ)

2009年1月23日金曜日

PIC開発完了

昨日PICプログラムの開発が何とか完了しました。

初めての経験だったので色々とはまりましたが、これで一息といったところです。今回の経験で得られたTIPSは以下のような感じでしょうか。

  • 変数を使い過ぎてバンク0の空き領域を使い切らない様にする
  • MPLAB IDEのエディタはアセンブラのソースファイルが更新されている事は検知してくれるが、再ビルド(=アセンブル)はしてくれない

いやいや、それにしてもアセンブラをステップ実行してデバッグするのは本当にしんどいです。。。

2009年1月21日水曜日

Perl連想配列の入れ子

Perlの連想配列が入れ子に出来るかもって話を仕入れた。

具体的には、

%hoge = (x => y, ...);

と書くと hoge には連想配列の実体が格納されるが、

$hoge = {x => y, ...}

と書くと hoge には連想配列の参照が格納されるという話。違いは、丸括弧か中括弧かということである。

まだ実際にコードを書いて試してみたわけではないが、備忘録代わりに書いておくことに。