Home » [Tech]

2008.05.23

[ Tech]   VAIO延命処置

猫も杓子もMacな世の中で、未だに2004年に発売されたVAIO T90PSを使い続けています。
別に不満はなかったのですが、最近ハードディスクが変な音を出すようになってまずいなーとか思ってました。
んで、重い腰を上げてハードディスクの換装に乗り出したのですが、こいつにくっついてるのは巷で出回ってる2.5インチではなく、iPodとかで使われている1.8インチという事実上東芝しか作っていない特殊なやつ。
しかも、コネクタが現行のものは使えず、最大容量でMK8007GAHという80GBの物を最後にモデルが生産終了になってるんですね。
しかもこいつが高い。このご時勢で80GBで2万円前後。
とはいえ、生産終了ってことは在庫にあるものがはけたら入手困難必至になり、新しくノートを買う羽目になるので、背に腹は変えられんってことで購入したわけです。

VAIO HDD換装

とにかくちっちゃい。

で、本体ばらして乗せ換え。

VAIO HDD換装

途中、部品が余ったりして冷や汗でましたが、なんとなく完了。

んで、容量増えて密度が上がったので多少はパフォーマンス上がるかなと、とりあえずWinXP入れてみたら、何となく体感でわかる程度に上がった気がします。
少なくとも異音がしなくなったので快適。

っつーわけで、容量増えて20GBくらいWindowsに割けるようになったのでPCDJでも始めようかなとか思ってます。

2007.09.03

[ Tech]   codereposに参加

typesterさんが言い出しYappoさんが提供しているcodereposはcommit権を得れば、公開されているコードを誰でもいじくれるステキプロジェクトです。
こういうフルオープン全開な試みはときめきます。
ときめいているだけではダメなので、早速お願いしてcommit権を頂きました。

で、せっかくなので何か提供しようと思ったので、行き場に困っていたけど常々使っているDBIx::Class::InflateColumn::DateTime::Autoをとりあえずあげてみました。

じゃんじゃんばりばり添削していただきたいと思います。

で、みんなもっともっとソースを晒せばいいんだと思います。

追記:

2007.08.10

[ Tech]   vimでJavaScriptを整形

最近猛烈にJavaScriptを書く機会が増えたのでvimで整形ツール欲しいなと思っていました。
で、YappoさんJavaScript::Swellを使ってみることにしました。

CPANでインストールしてこんなラッパー作って ~/bin/js_swell.pl
#!/usr/bin/perl

use strict;
use JavaScript::Swell;

my $data;
while (<>) {
    $data .= $_;
}
close IN;

print JavaScript::Swell->swell($data);
.vimrcかなんかにこんな風に書いたら
map ,jt <Esc>:%! ~/bin/js_swell.pl<CR>
こんなコードが
var i=0;if(i++){var a=-1;}
vimから:,jtでこんな風になりました
var i = 0;
if (i++) {
  var a = -1;
}

便利。

2007.08.03

[ Tech]   ustreamの小ネタ

ustreamの[My Shows]の[Embed]にあるタグをそのままblogのHTMLとかに貼り付けると、いきなり再生が始まってしまいます。
ボクみたいに音を配信してる場合、いきなり音が鳴るのでえらい迷惑です。
前は違ったのですが、リニューアルでデフォルト自動再生になったんですね。

<embed width="360" height="261" flashvars="autoplay=false" src="http://ustream.tv/yoP4a3TvpHYY37xGGJS1p68pa3k2rY3j.usc" type="application/x-shockwave-flash" wmode="transparent" />

とかすればよろし。

2007.07.27

[ Tech]   CentOSにRed5を入れてみる

そろそろみんな飽きてきた観もあるustreamです。

で、これと同じようなサービスをやるにはFlash Media Serverが必要なんでしょうが、むちゃくちゃ高いです。

で、これとほぼ同じ機能を提供してくれる(正確にはRTMPサーバーになるんだろうか)OSS、Red5をCentOS 5に入れたので、メモ。

antのインストール

makeにantを使うのでantをyumでインストール。

$ yum install ant

JDKのインストール

antをインストールするとjava-1.4パッケージがインストールされるけど、コンパイルと実行にはjdk1.5以上が必要なのでSunからJDK 5以上をダウンロードしてインストールしてデフォルトのVMを1.5に切り替え。

詳しくはこの辺。

JAVA_HOMEの指定をしないとコンパイルでこけるので注意。
JAVA_VERSIONの指定はしてもしなくてもよさげ。

Red5のコンパイル

ここからred5-0.6.2.tar.gzをダウンロードして適当なディレクトリで展開してコンパイル。

$ wget http://dl.fancycode.com/red5/red5-0.6.2.tar.gz
$ tar xzvf red5-0.6.2.tar.gz
$ cd red5-0.6.2
$ make

山のようなメッセージが出るけど最後にBUIDL SUCCESSFULが出てればおっけー。

Red5の起動

このままmake installしてもいいんだけど、とりあえず実行してみる。

$ ./red5.sh

これでサーバーが起動するのでブラウザからhttp://[host]:5080/にアクセスしてページが表示されればオッケー。

/adminはid: admin password: adminで入れるけど、何ができるのかよくわからんかった。
/demos以下にいろんなデモがある。
このページにリストされているもの以外にもwebapps/root/demosにいろいろある。

/demos/othello.swf - ネット対戦オセロ
/demos/FITCPresentation.swf - プレゼンテーション
/demos/videoConference.swf - 複数ビデオチャット

サーバーの実装は基本的にはJavaだけど、./webapps/oflaDemo/WEB-INF/src/applicationsに.rbや.pyや.jsや.groovyなファイルがあるのでRuby, Python, Javascript, Groovyで実装できそう。

ちなみにmakeしたソースディレクトリは

doc - ドキュメント(APIドキュメントあり)
src - 本体のソース
swf/DEV_Source - デモクライアントのFlashのソース
webapps/*/WEB-INF/src - デモサーバーのソース

で、サンプルをいじった感じでは個人ユースでは結構いける感じです。
ただ、クライアントのソースがみんなflaなんでちときつい。
使いこなすにはRTMPの仕組みとRed5のAPIドキュメントを読んで勉強する必要がありそうです。

2007.06.12

[ Tech]   Safari 3 Public Beta for Windowsを試してみた

ITMedia News: 米Apple、Windows版Safariをβ公開
 米Appleのスティーブ・ジョブズCEOは6月11日に開催された開発者会議、Worldwide Developers Conference(WWDC)基調講演で、自社のWebブラウザSafariをWindows Vista、XP向けに投入すると宣言した。即日同社のWebサイトから公開β版がダウンロード可能になった。

というわけで、早速試してみた。

Apple - Safari 3 Public Beta 3

で、こんな感じ。

2007061201.jpg

2007061202.jpg

日本語は設定で日本語フォントを指定してもレンダリングされず。
検索フォームとかも崩れてるのが嫌な感じ。
ついでにadsenseもうまくレンダリングしてくれてない感じ。

ま、betaですから。

で、機能や特徴のほうですが

一般的なブラウジングがIE7より2倍、Firefox 2より1.6倍速く、JavaScriptの実行に至ってはIEの2.8倍、Firefox 2の1.6倍速いと豪語してますが、よくわかりませんでした。
でも起動は気持ち速い気がしました・・・とはいえIE7入れてないのでIE6とエクステンション山ほど入ったFirefoxと比べてですが。

そのほかの特徴もIEやFirefoxと比べて取り立てて珍しい機能はないようですが、面白いと思ったのがSnap BackとResizable Text Fields。

Snap Backは例えばGoogleで「apple」を検索をして、結果をクリックしてappleのトップに行ってから、クリックしまくっていろんなところに行っても

2007061203.jpg

2007061204.jpg

2007061205.jpg

このボタンで検索結果に一発で戻れるかゆいとこに手が届いた機能。

Resizable Text Fieldsはテキストエリアを自由にリサイズできる機能。

2007061206.jpg

2007061207.jpg

結構まともにできてて、テーブルタグのセルの中のテキストエリアをリサイズするとテーブルのセルもリサイズされました。

あと、プラグインはいわゆる大御所は揃ってます。

Apple - Safari 3 Public Beta - Download - Plug-ins for Safari on Windows

今のところ
  • Adobe Flash Player
  • Adobe Reader
  • QuickTime
  • Java
  • Real Player
  • Windows Media Player
があります。 FirefoxのextensionやIEのActiveXとは違い、インストーラーをダウンロードして実行する、ちょっと古めかしい感じ。

まぁ、大方の期待はクロスブラウザのチェックにいいなぁと思ってるのでしょうが、Safari 2なんかと表示違うだろうから、そんなうまい話はない気がします。


頼むからSafari 2 hackとかやる羽目にならんことを祈ります。

2007.06.09

[ Tech]   日本Ruby会議2007

2007060901.jpg

何故か知らないけど日本Ruby会議2007に来ています。

  • 聴衆がPerlな人より品がいいかも
  • JRuby面白い
  • 来れなかったYappoさんがircでぼやいてるのが会場中に流されてた
  • 相変わらず無線LANのIPの取り合い
  • でもYAPCよりはましになってるかも
  • 椅子が硬くて午後になって尻が痛い 椅子重要

久々にPerl以外の言語のカンファレンスに来てるのでとっても新鮮です。

2007.03.13

[ Tech]   Office Picture Managerの起動が遅くなる件

blogに載せるなど、ちょっとしたイメージのサイズ変更やクリッピングにMicrosoft OfficeにくっついてきたPicture Managerっていうソフトを使ってます。
フォルダ内のイメージをまとめて編集するときとか、結構軽くて重宝しているのですが、たまに起動がバカみたいに遅くなります。

で、いっつも対応方法を忘れて困るのでメモ。

原因: すでに接続されていないネットワークドライブを参照するのにタイムアウトを待つから

対応:
  1. c:\Documents and Settings\[ユーザー名]\LocalSettings\Application Data\Microsoft\OIS\OIScatalog.cag をノートパッドとかで開く(隠しフォルダなのでエクスプローラからたどるときは[ツール]-[フォルダオプション]-[表示]の[ファイルとフォルダの表示]を[すべてのファイルとフォルダを表示する]に選択しておく必要があります)
  2. <mru path="~の行のうちでネットワークドライブであろう行を全て消す
  3. 普通に起動してみる

参考:
Microsoft: Office Picture Manager は、開くの低速になります。

2007.03.06

[ Tech]   Flex2でFileRefクラスを使ったファイルアップロード

Flex2でとりあえずやってみたかったのがこれ。

* ファイルサイズは5Mbytesが上限です。
* 実際にはファイルの保存などは行ってません。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
  layout="absolute" 
  width="400" 
  height="120" 
  creationComplete="initApp()">
  <mx:Script>
  <![CDATA[
    import flash.events.*
    import flash.net.FileReference;
    import mx.controls.Alert;
    
    private var max_size:int;
    private var post_url:String;
    private var fileRef:FileReference;

    private function initApp():void{
      max_size = Application.application.parameters.maxSize;
      post_url = Application.application.parameters.postURL;
      fileRef = new FileReference();
      fileRef.addEventListener(Event.SELECT,fileSelectEvent);
      fileRef.addEventListener(Event.OPEN,fileOpenEvent);
      fileRef.addEventListener(Event.COMPLETE,fileCompleteEvent);
      fileRef.addEventListener(ProgressEvent.PROGRESS,progressEvent);
      btn_browse.addEventListener(MouseEvent.CLICK,selectFile);
      btn_upload.addEventListener(MouseEvent.CLICK,upload);
      btn_cancel.addEventListener(MouseEvent.CLICK,cancel);
    }
    
    private function fileSelectEvent(event:Event):void {
      progress.label = "";
      if(fileRef.size > max_size) {
        Alert.show("Size over");
        btn_upload.visible = true;
        btn_upload.enabled = false;
        btn_cancel.visible = false;
        btn_cancel.enabled = false;
        btn_browse.enabled = true;
        return;
      }
      progress.setProgress(0, 0);
      text_file.text = fileRef.name;
      btn_upload.visible = true;
      btn_upload.enabled = true;
    }
    
    private function fileOpenEvent(event:Event):void {
      btn_upload.visible = false;
      btn_upload.enabled = false;
      btn_cancel.visible = true;
      btn_cancel.enabled = true;
      btn_browse.enabled = false;
    }

    private function fileCompleteEvent(event:Event):void {
      progress.label = "Completed";
      btn_upload.visible = true;
      btn_upload.enabled = false;
      btn_cancel.visible = false;
      btn_cancel.enabled = false;
      btn_browse.enabled = true;
    }

    private function progressEvent(event:ProgressEvent):void {
      progress.setProgress(event.bytesLoaded, event.bytesTotal);
    }
    
    private function selectFile(event:MouseEvent):void {
      fileRef.browse();
    }
    
    private function upload(event:MouseEvent):void {
      var param:String = "file";
      var req:URLRequest = new URLRequest(post_url);
      req.method = URLRequestMethod.POST;
      fileRef.upload(req, param, false);
    }

    private function cancel(event:MouseEvent):void {
      fileRef.cancel();
      progress.label = "Canceled";
      progress.setProgress(0,0);
            btn_upload.visible = true;
            btn_upload.enabled = true;
            btn_cancel.visible = false;
            btn_cancel.enabled = false;
            btn_browse.enabled = true;      
    }
  ]]>
</mx:Script>
  <mx:Panel x="0" y="0" width="400" height="120" layout="absolute">
    <mx:TextInput x="10" y="10" width="180" id="text_file"/>
    <mx:Button x="198" y="10" label="Browse" width="80" id="btn_browse"/>
    <mx:Button x="286" y="10" label="Upload" width="80" id="btn_upload" enabled="false"/>
    <mx:Button x="286" y="10" label="Cancel" width="80" id="btn_cancel" visible="false" enabled="false"/>
    <mx:ProgressBar x="10" y="40" width="356" id="progress" label="" mode="manual"/>
  </mx:Panel>
</mx:Application>

ちょっと長く見えますが、ほとんどがボタンを見せたり隠したりと機能とは関係ないところです。
ちゃんとした人が書いたらもっと綺麗にまとまると思います。

AJAXでもできるんだろうけど、結構面倒ですがFlex2だとあっという間です。
もちろんアップロードされたファイルを保存するなり加工するなりのCGIは必要です。

で、FileRefクラスを使ってみた感想は

いいとこ
・アップロードの状態を簡単に表示できる
・アップロードさせる前にファイルサイズをチェックできる
・キャンセルが簡単

わるいとこ
・アップロードが終了したときの返り値がHTTPステータスしか取れない

てな感じです。
もちろんAJAXなアップローダーを実際に触ったわけでも、FileRef自体(というかFlex自体も)まともに触り始めて間もないので間違っているかもしれません。ツッコミ歓迎です。

2007.02.25

[ Tech]   Fedora Core 6にFlex2をインストールして遊ぶ

最近、仕事でFlex2を触り始めました。結構楽しいです。
Flashアプリケーションが無料で、しかもタイムラインとか意味不明なことを考えずに作れるのがとっても魅力です。

で、Fedora Core 6にインストールしたのでその手順のメモ。

まずはJavaの環境が必要なので整えます。
せっかくなのでJDK 6をインストール。(日本語フォントの設定などは今回関係ないので省きます。)

SUNからパッケージを持ってきてインストール。
$ sudo ./jdk-6-linux-i586-rpm.bin

Javaの環境設定。

.bash_profile
export JAVA_HOME=/usr/java/jdk1.6.0
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
既存のインストール済みVMの確認。
$ rpm -qi java-1.4.2-gcj-compat
java-1.4.2-gcj-compatパッケージが入ってる場合はalternatives機能を使ってVMをスイッチ。
$ sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.6.0/bin/java 2
$ sudo /usr/sbin/alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
   2           /usr/java/jdk1.6.0/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
VMの確認。
$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

続いてFlex SDKのインストール。

AdobeからFlex SDKとFlex Language Packを適当なところにダウンロード(Adobe IDの登録が必要です)して適当なところに解凍。
$ mkdir -p ~/sdk/flex2
$ cd ~/sdk/flex2
$ unzip ~/tmp/flex_sdk_2.zip
$ unzip ~/tmp/flex_sdk_2_ja.zip

PATHにflex2/binを通しておく。

.bash_profile
export PATH=$PATH:$HOME/sdk/flex2/bin

ようやくアプリケーションの開発。とりあえずmxmlで書いてみました。

/home/hide/public_html/flex/hello.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
	xmlns:mx="http://www.adobe.com/2006/mxml"
	width="300" height="150"
	>
    <mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        private function initApp():void {
		}
        private function sayHello():void {
            Alert.show("Hello World");
        }
    ]]>
    </mx:Script>
    <mx:Button width="80" label="Say" click="sayHello()" />
</mx:Application>
コンパイル。
$ mxmlc hello.mxml
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
/home/hide/public_html/flex/hello.swf (138266 bytes)

hello.swfが出来てるのでブラウザから確認。

おぉ。初めてのFlash。

でもコンパイルが非常に遅い。ちょっと変更したくらいでいちいち時間かけてらんないのでsecondlifeさんのこの記事を見てfcshをインストール。

rlwrapでラップするとreadlineが効いてお得なので、ついでにインストール。
$ sudo yum install rlwrap
fschをここからダウンロードしてインストール。
$ cd ~/sdk/flex2
$ unzip ~/tmp/flex_compiler_shell_012307.zip
fcshでコンパイル
$ rlwrap fcsh
Adobe Flex Compiler SHell (fcsh)
Version 2.0.1 build 155542
Copyright (c) 2004-2006 Adobe Systems, Inc. All rights reserved.

(fcsh) mxmlc -benchmark hello.mxml
fcsh: Assigned 1 as the compile target id
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
最初の設定 : 479ms
8 個の SWC がロードされました : 887ms
ファイル :286 時間 : 3713ms
リンクしています... 79ms
最適化しています... 354ms
SWF エンコーディング中... 65ms
/home/hide/public_html/flex/hello.swf (138266 bytes)
合計時間 :5586ms
ピークメモリ使用量 :50 MB (ヒープ :27, ヒープ以外 :23)
以降は返されたtarget idを使用してコンパイル。
(fcsh) compile 1
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
最初の設定 : 7ms
8 個の SWC がロードされました : 36ms
Nothing has changed since the last compile. Skip...
合計時間 :57ms
ピークメモリ使用量 :51 MB (ヒープ :28, ヒープ以外 :23)
リンクしています... 22ms
最適化しています... 116ms
SWF エンコーディング中... 41ms
/home/hide/public_html/flex/hello.swf (138266 bytes)
合計時間 :183ms
ピークメモリ使用量 :53 MB (ヒープ :30, ヒープ以外 :23)
(fcsh)

んむ。速い。
vimから使えるようになるとさらに便利になりそうけど、この辺はいずれってことで。

AJAXも楽しくていいのですが、クロスブラウザなんかいちいち考えるのが非常に面倒だったりすするのでFlashもいいかなぁなんて最近思ったりします。

参考: WEB+DB PRESS Vol.37にFlex2の特集があります。
WEB+DB PRESS Vol.37
WEB+DB PRESS Vol.37
posted with amazlet on 07.02.25
WEB+DB PRESS 編集部
技術評論社 (2007/02/23)
売り上げランキング: 293

2006.12.01

[ Tech]   VMwareのゲストOSの時計が狂う件

前にやっていたのに忘れていたのでメモ。

vmware-toolsをインストールした状態でゲストOSの*.vmxファイルをエディタで開いて

tools.syncTime = "FALSE"

tools.syncTime = "TRUE"

にすればOK。

2006.11.11

[ Tech]   パスワードの保存方法

お仕事でパスワードによる認証があるサービスを立ち上げるにあたって、お客さんがパスワードを忘れたときのパスワードの救済措置(いわゆる、「パスワードを忘れましたか?」とか「パスワードリマインダ」ってやつです。)をどーするか、ちょっとした議論(そもそも要件で決めて置けという話もありますが)になったのでまとめてみました。

パスワードの保存方法として大きく三つ考えられます。

1. そのままの文字列として保存

・認証
ユーザーが入力した文字列と同じかどうか比較するだけです。

・リマインダ
文字列がそのまま保存されているのでそのまま送ればユーザーはそれを使ってログインできます。

・問題点
パスワードがそのまま保存されているのでデータベースなどを盗まれたらだだ漏れします。

2. 秘密鍵を使って復号可能なアルゴリズムで暗号化して保存

・認証
復号できるので保存されているパスワードを復号化してユーザーが入力した文字列を比較するか、ユーザーが入力した文字列を同じ秘密鍵で暗号化して比較すれば認証できます。

・リマインダ
復号化してからユーザーに送れば1.と同じです。

・問題点
秘密鍵と暗号アルゴリズムが漏れれば1.と同じリスクの可能性があります。また秘密鍵を忘れた場合認証そのものが出来なくなるし、秘密鍵を変更する場合は既存のパスワードを全て暗号化しなおす必要があります。

3. ハッシュ関数を使ってハッシュ値を保存

・認証
ハッシュ関数を使うと元の文字列を復号化するのは不可能なので、ユーザーが入力した文字列を同じハッシュ関数でハッシュ値を計算して保存されているハッシュ値と比較して認証します。

・リマインダ
復号化できないので、現在のパスワードを送ることは出来ません。代替策としてパスワードの再設定ページへのURLをワンタイムパスワードと絡めて生成して送るか、新たにランダムなパスワードを作成して送る必要があります。

・問題点
パスワードを忘れたユーザーはパスワード再設定を行う必要があります。(自動生成されたパスワードもランダムで覚えられないので、これも普通は変えるでしょうから同じです。)

こんな感じでしょうか。
他にもあったら教えてくださいな。

2006.10.25

[ Tech]   Windows Live Messengerでサインインできなくなった

先週末辺りから特に環境をいじってないのにWindows Live Messengerがサインインできなくなりました。

現象としてはサインインすると延々とサインイン中になってしまい、エラーも帰ってこないという感じです。なんかチラホラ同じ状況の人がいたみたいだったので、個人的な問題ではない感じ。

再インストールやセキュリティソフトの見直しなどを試みてダメだったのですが、ようやく解決できました。

なんてことはない。

  1. 一旦アンインストールして
  2. レジストリエディタで[HKEY_CURRENT_USER] - [Software] - [Microsoft] - [MSNMessenger]以下を全部削除
  3. インストールしなおし

これでOKでした。

それにしても、再現されるPCとされないPCがあったのは一体なんなんだろう。

[ Tech]   Firefox 2で互換性のないエクステンションを有効にする


Get Firefox

Firefox 2がリリースされたので何も考えずにインストールしたのですが、Add & Edit Cookiesが互換性の問題で無効になってしまいました。

結構便利なエクステンションなので、色々調べてみるとMR Tech Local Installというエクステンションでエクステンションのインストール時のバージョンチェックを無効にできるみたいので使ってみると無事有効にすることができました。

Add & Edit Cookiesに関してはバージョンチェックの問題だけだったようなので特に問題なく動いています。

詳しくはこの辺で。

2006.01.27

[ Tech]   faviconを作ってみる

IEを使っていたときにはfaviconを設定しているサイトでもキャッシュをクリアしてしまうと表示されなくなってしまうので、あまり気にも留めていなかったのですがFirefoxを使うようになってからツールバーをすっきりさせる意味でもいいなぁと思い、このサイトのfaviconを作ってみました。

favicon.jpg

で、iconファイル形式にどうやって変換しようと思って検索してみたらFavIcon from Picsというサービスを見つけました。要は画像ファイルをアップロードするとicon形式に変換してくれるWebサービスなんですが、とっても便利です。

いちいちlink relで指定させようとも思いましたが、面倒だったのでルートディレクトリにfavicon.icoを置いたら無事反映されました。16X16ってことで解像度が高いと潰れてしまってる感じですが、まぁこんなもんでしょう。

あと、bloglinesではキャッシュしているらしく表示されていないのがちょっと不満です。

2005.06.16

[ Tech]   僕がLAMPを触って思うこと

注目集める「LAMP」--Javaや.NETに次ぐ第3の潮流になるか - CNET
 ビジネスソフトウェア開発の世界には、Microsoftの.NETツールセットとJavaの2つの大きな流れがあるが、ここへ来て、3つ目の潮流が生まれる可能性が出てきた。  企業コンピューティングの主役の座を狙っているのは、「LAMP」と呼ばれるオープンソースソフトウェアスタックである。LAMPには、LinuxオペレーティングシステムやApacheウェブサーバ、MySQLデータベース、さらにスクリプト言語であるPHP、Perl、Pythonなどが含まれている。

偶然にも最近LAMPなお仕事が増えつつある環境におかれたので大変タイムリーな記事でした。

僕はもともとVBな人でASPなんかを触ってたわけで、言うならばWISV (WindowsOSでIISサーバー、SQLサーバーで言語にVBScriptでASPって感じ。こんな言葉はありません。)な人だったわけです。もちろんその間もJavaやPerlやPHPなんかも触ってましたが、マザーランゲージとしてはVBだったんですね。

当時、Microsoftのプラットホームを選んだ経緯は色々あるんですが、独立を契機にLinux + Apache(Tomcat) + PostgreSQL + Javaというプラットホームに移行しました。まぁこれが表題にあるLAPJなわけです。(勝手に命名してますが)

僕の場合、この環境に移行したときに大きかったのがもちろんプラットホームのコストダウンです。ノウハウを得る金額と時間は別にして、ソフトウェアにかかる金額が限りなく0になりました。しいて言えば、Visual Studioに代わるよい開発環境がなかったため、快適なコーディング環境を得るにはEclipseの出現を待つ必要がありました。

ちなみになぜLAPJな環境を選択したかというと、コストを0に近づけるといった意味でOSにLinuxを選択したのは必然な流れでした。そうなるとWebサーバーとしてはApacheということになります。

当時は企業の社内システム開発が多かったのでDBには読み取りパフォーマンスよりもトランザクション管理などに一日の長があるPostgreSQLを選択しました。

選択の順番の前後はともかく、言語にはJavaを選択したのですが、これについては・・・趣味です

Javaのサーバーサイドアプリケーションとなるとアプリケーションサーバーが必要になりますが、J2EEを覚えるつもりはなかったのでTomcatを選択しました。

こんな感じで始めたわけなのですが、特に不満もなく淡々と過ごしてたわけですが、ここにきてLAMP環境に大きな魅力を感じています。

僕の場合、記事中にあるようなコスト問題はないし、企業による機能追加の問題もLinuxにしろ、Perlにしろコミュニティ間での意思決定に時間がかかったりするわけで、あまり関係なさげです。

では何に魅力を感じているかというと、一言で言うとGeekな香りです。

このことはCPANを覗いてみると一目瞭然です。Net::AmazonだとかNet::GoogleだとかApache::iTunesだとか、見てるだけでウハウハです。

以前はPerlの型やスコープのあいまいさ(VB使ってて何を言うと言われそうですが)や、MySQLの機能の乏しさやなどには辟易させられることも多かったのですが、一旦触れてみるとそこには一種の潔ささえ感じられてきます。

というわけでこれからは個人の趣味でも積極的にLAMPしてみようと思います。

でもJavaも好きだからこっちも追っかけます。
二兎追うものは一兎をも得ずにならないようがんばります

2005.05.16

[ Tech]   郵政省の郵便番号データ

以前、AJAXのサンプルとして作った郵便番号検索なぜ町域名まで表示しないのか?という質問を何度か受けたのでその説明です。

元データは郵政省の郵便番号データを使っています。(ちなみにデータは当時後悔されていたものです。)
このデータは補足にある通り、以下のフォーマットになっています。

  1. 全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
  2. (旧)郵便番号(5桁)……………………………………… 半角数字
  3. 郵便番号(7桁)……………………………………… 半角数字
  4. 都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
  5. 市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
  6. 町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
  7. 都道府県名 ………… 漢字(コード順に掲載) (注1,2)
  8. 市区町村名 ………… 漢字(コード順に掲載) (注1,2)
  9. 町域名 ……………… 漢字(五十音順に掲載) (注1,2)
  10. 一町域が二以上の郵便番号で表される場合の表示 (注3) (「1」は該当、「0」は該当せず)
  11. 小字毎に番地が起番されている町域の表示 (注4) (「1」は該当、「0」は該当せず)
  12. 丁目を有する町域の場合の表示 (「1」は該当、「0」は該当せず)
  13. 一つの郵便番号で二以上の町域を表す場合の表示 (注5) (「1」は該当、「0」は該当せず)
  14. 更新の表示(注6)(「0」は変更なし、「1」は変更あり、「2」廃止(廃止データのみ使用))
  15. 変更理由 (「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、「2」住居表示の実施、「3」区画整理、「4」郵便区調整、集配局新設、「5」訂正、「6」廃止(廃止データのみ使用))

で、このデータはとても頭の悪いデータでして、そのまま使うには以下の問題を抱えています。

1つの住所が複数レコードにまたがる
26102,"602  ","6028062","キョウトフ","キョウトシカミギョウク","カメヤチョウ","京都府","京都市上京区","亀屋町(油小路通上長者町下る、油小路通下長者町上る、油小路通",0,0,0,0,0,0
26102,"602  ","6028062","キョウトフ","キョウトシカミギョウク","カメヤチョウ","京都府","京都市上京区","中長者町上る、油小路通中長者町下る、上長者町通油小路西入、上長者町通油小",0,0,0,0,0,0
26102,"602  ","6028062","キョウトフ","キョウトシカミギョウク","カメヤチョウ","京都府","京都市上京区","路東入)",0,0,0,0,0,0
これは1つのレコードにまとめる必要があります。
町域の()内に番地範囲が含まれる
01226,"07301","0730177","ホッカイドウ","スナガワシ","ソラチブト(1-349バンチ)","北海道","砂川市","空知太(1~349番地)",0,0,0,0,0,0
01226,"07911","0791181","ホッカイドウ","スナガワシ","トミヒラ(331、459-4、543バンチ)","北海道","砂川市","富平(331、459-4、543番地)",1,0,0,0,0,0
01226,"07301","0730177","ホッカイドウ","スナガワシ","ソラチブト(1-349バンチ)","北海道","砂川市","空知太(1~349番地)",0,0,0,0,0,0
01226,"07301","0730106","ホッカイドウ","スナガワシ","ソラチブト(ソノタ)","北海道","砂川市","空知太(その他)",0,0,0,0,0,0
町域の()内にビルの階層範囲が含まれる
04101,"980  ","9800021","ミヤギケン","センダイシアオバク","チュウオウ(ツギノビルヲノゾク)","宮城県","仙台市青葉区","中央(次のビルを除く)",0,0,1,0,0,0
04101,"980  ","9806190","ミヤギケン","センダイシアオバク","チュウオウアエル(チカイ・カイソウフメイ)","宮城県","仙台市青葉区","中央アエル(地階・階層不明)",0,0,0,0,0,0
04101,"980  ","9806101","ミヤギケン","センダイシアオバク","チュウオウアエル(1カイ)","宮城県","仙台市青葉区","中央アエル(1階)",0,0,0,0,0,0
04101,"980  ","9806102","ミヤギケン","センダイシアオバク","チュウオウアエル(2カイ)","宮城県","仙台市青葉区","中央アエル(2階)",0,0,0,0,0,0
・・・
04101,"980  ","9806130","ミヤギケン","センダイシアオバク","チュウオウアエル(30カイ)","宮城県","仙台市青葉区","中央アエル(30階)",0,0,0,0,0,0
04101,"980  ","9806131","ミヤギケン","センダイシアオバク","チュウオウアエル(31カイ)","宮城県","仙台市青葉区","中央アエル(31階)",0,0,0,0,0,0
町域の()内に別称が含まれる
01214,"097  ","0970034","ホッカイドウ","ワッカナイシ","サカノシタ(ルエラン)","北海道","稚内市","坂の下(ルエラン)",0,0,0,0,0,0
町域に「以下に掲載がない場合」を含む
01101,"060  ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
これは町域を空にしてしまえばいいと思います。
町域に「~一円」を含む
10361,"37013","3701301","グンマケン","タノグンシンマチ","シンマチイチエン","群馬県","多野郡新町","新町一円",0,0,0,0,0,0

「一円」を削除する必要があります。ただし次のように「一円」という町域も実在するので注意です。

25443,"52203","5220317","シガケン","イヌカミグンタガチョウ","イチエン","滋賀県","犬上郡多賀町","一円",0,0,0,0,0,0
町域に「~の次に番地がくる場合」を含む
08546,"30604","3060433","イバラキケン","サシマグンサカイマチ","サカイマチノツギニバンチガクルバアイ","茨城県","猿島郡境町","境町の次に番地がくる場合",0,0,0,0,0,0
「の次に番地がくる場合」を削除する必要があります。

というわけでまとめると

  1. 複数レコードにまたがる住所を1レコードにまとめる
  2. 町域の()部分は削除する。
  3. 「以下に掲載がない場合」を含む町域のカラムを空にする
  4. 「~一円」を含む町域のカラムから「一円」を削除する
  5. 「~の次に番地がくる場合」を含む町域のカラムから「の次に番地がくる場合」を削除する

こんな感じで整形できると思います。事業所個別の郵便番号はチェックしてないし、まだ他にもあるかもしれません。

がんばってください。

2005.04.17

[ Tech]   AJAXで郵便番号検索

最近何かと話題のAJAX(AJAXの詳しい説明はこちらが非常にわかりやすいです。)で何か良いお題はないかと思い、ありがちな郵便番号から住所を補完するのを作ってみました。

郵便番号を入れると該当する住所を検索して画面遷移をせずに表示します。エラーハンドリングやIE以外での動作確認は行っていないので動かなかったらゴメンナサイ。

2005.01.20

[ Tech]   Flashを触ってみて思ふこと

というわけで、最近仕事と趣味を兼ねてFlash漬けな毎日です。Windowsのスタートメニューの使用頻度の履歴を見ても今まで常に立ち上がっていたEclipseを抑えてFlashが毎日立ち上がっている状態です。Flash自体使い始めたのは最近なのですが非常に面白いですね。

面白いですが・・・
確かに例によって昔から"RTFM!"とよく怒られる僕の場合でもドキュメントも一切読まずにチャレンジしてある程度のところまではサクサクつくれちゃいます。ところが一転、ちょいと小難しいことをやろうとするととたんに袋小路に叩き込まれます。

特に僕の場合いわゆる2chネタ的なアニメを作るわけではなく、リッチクライアントのプラットホームとして考えているためフレーム?ムービークリップ?ということになるわけです。

ActionScriptなるJavaScriptライクな言語を実装してるわけですが、こいつもちょっと分かりづらいです。まぁスクリプト言語ってことで変数スコープや型宣言が緩やかなのはいいとしても、それのおかげで入れ子なムービークリップなんかを作った日にはとたんにスパゲッティコードが仕上がります。

とはいえ、全体的には非常によくできたプラットホームであるし、Java appletのように環境の違いで苦しむようなことはなさげなので当面の間、リッチクライアントインターフェースの王道ではあるんでしょうね。

それにしても、ちょこちょこいじってて思ったんですけどFlashって言うとCoolなデザインってイメージに縛られて、それがプレッシャーになっているせいかデザインに時間を割かれがちですね。今後の開発者は美術センス(いわゆるインターフェースデザイニングではなく)まで問われるのかと、美術2の僕は鬱になりました

Profile

About

Information