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 には連想配列の参照が格納されるという話。違いは、丸括弧か中括弧かということである。

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

非同期

PIC16のアセンブラをIDEでデバッグしててハマった。

ステップ実行しているのにサブルーチンに何故かジャンプ・インしない・・・と思って悪戦苦闘していたのだけれど、実はマシン語にアセンブルされたバージョンのアセンブラコードと、IDEのビューアでデバッグ用に見ていたアセンブラコードのバージョンが違ったというお粗末なミス・・・orz つまり、アセンブラコードとマシン語の実行コードが同期していなかったんですわ。

IDEが新しいバージョンのアセンブラソースをリロードしてくれるのに、マシン語への再ビルドはしてくれないのです。ちょっと不親切だな~とも思うんですが、ともあれミスはミスですわ。

寝る前に解決してくれて嬉しいんだけれど、しょーも無い話で1時間以上無駄にした感がある。ちょっと勿体無かった。まぁ、何事も経験と言えば経験なのですが。

今度はPICマイコン

8ビットPICマイコン (PIC16F874) 向けのコードを書いています。人生初PIC体験です。

と言いつつ、昨年まで書いていたH8 3069向けのコードでGPIOを使っていたので、そういった意味での敷居は高くありませんでした。

敷居が高いのは、アセンブラ!人生初アセンブラです。H8向け開発でもアセンブラコードを読む機会がありましたが(TOPPERS/JSPのモニタプログラムとか)、今回はまさに開発対象がアセンブラです。一応、Cライクな独自言語を書いてそれをコンパイラに掛けるというスタイルで開発しているんですが、出力されたアセンブラをPICベンダの配っているアセンブラ向けIDEでデバッグしてます。

う~む、どんどんとプリミティブになってきた。。。

それにしても、アセンブラ読むの大変です。かなり大変です。

2009年1月19日月曜日

Perl

なんか、久々にPerlを書こうとすると色々と敷居が高い。
連想配列の値に連想配列を入れる、という初期化の仕方が出来ないらしい。
つまり、

my %hoge = ("key1" => ("key11" => "val11", "key12" => "val12"), ...);

みたいな感じのコードが書けない。
う~、じれったい!

Perlは連想配列があるので構造体は無いらしい。
うぅぅ・・・クラスを作ってオブジェクト指向しろと、そういうことですか・・・。

あ、ちなみに処理系はCygwinのPerl 5.10.0です。。。

2009年1月18日日曜日

PHPのinclude_pathで

paperboy & co.のHeteml (ヘテムル) というホスティングサービスを個人的に契約して使っているのですが、ここのPHPがイマイチ使いにくい。とは言ってもPHPはPHPなのでどこで使おうが一緒なのだけれど、問題は各ユーザが個別にinclude_pathを設定できない点。

通常、.htaccessでphp_valueディレクティブを使ってinclude_pathを設定すれば、各ユーザが個別にinclude_pathの設定が出来るのだと思われるが、これが出来ない為にrequireやincludeに指定するパスをどうすれば良いのか、非常に悩ましいのだ。

ちなみに、今はrequire / include対象のファイルを絶対パスで指定することでこの問題を避けているが、これははっきり言ってダサい。あまりにもダサい。

もっとスマートにどうにか出来ないものかなあ。

2009年1月2日金曜日

久々のJava

久しぶりにプライベートでJavaコードを書いています。

ところが、Java SE 5を前提としたサンプルコードで未知のノーテーションを発見!

for(Folder f : fol.list()){
}

これって、いわゆるPerlやPHPのforeachなんだと思うんですが、Javaでは初めて見ました。ああ、私の知識はJ2SE 1.4で止まっている・・・orz 仕事でJavaのコードを読んでいたのは3年以上前なので、仕方のない事かも知れませんが。。。

それにしても、Javaはまだまだ進化し続ける言語なんですね。あらためて実感しました。