VMware に Vine 4.1 をインストール

次回のシステム開発に必要な環境を構築するため、Vine Linux 4.1 の仮想マシンを作成した。
RedHat系とは若干異なるため、少々手間取ったのでメモしておく。

1. VMwareToolsのコンパイルに必要なパッケージ

gcc
kernel-devel

2. Apache + PHP + PostgreSQL

apache2
mod_ssl-apache2
php
php-pgsql
php-domxml
php-apache2
postgresql
postgresql-server
(RedHat系の php-mbstring, php-gd は標準でインストールされる)

3. サービスの設定

apache2 (RedHat系の httpd)
postgresql

サービスやパッケージ名が異なるので、けっこうはまってしまう。
少し前にタイムトリップした感じになる。
レガシーな環境を作るにはいいかも。

魂は存在するらしい

ふっと、思い出した。

母方の祖父は、肝臓ガンでもうこの世にはいない。

祖父は鳥取県の青谷(あおや)で、炭焼き職人で生計を立てていたらしい。良い炭を作るための研究をこつこつしていたそうだ。
また、ビリヤードなどを趣味にしていたようだ。

老後は長女といっしょに大阪で暮らしていた。

亡くなる一年前ぐらいからは、鳥取市の我が家で同居していた。
「かゆい」と言って、薬湯に入っていたが、思えば肝臓を悪くした事が原因だったようだ。

最期は、母と看護婦さんにみとられ、この世を去った。

その後、ある夜、いとこは仏壇の前で火の玉を見た。火の玉はスーっと仏壇に消えて行ったそうだ。

生前に「もしも魂が存在するなら、なにか証拠を見せるからな」と、いとこに言っていたらしい。

やっぱり、魂は存在するらしい。

Web技術者募集!

結構仕事がキツくなってきました。

ご多分に漏れず、予定がタイトなのも理由のひとつですが、仕事を受けた以上、言い訳はできません。
(本当は結構言い訳してます…)

考えてみたのですが、SOHOなどで開発をされている方は、同じような状況の方が多いのではないでしょうか?
また、ややこしい仕事をしている最中に魅力的なお話があっても、断らざるを得なかったり…

そこで、「Web技術者募集!」です。

Perl・PHPなどの技術者で集まってチームを作りませんか?
また、Rubyのできる方がおられるなら、勉強会を開いても良いですね。

今は米子市に住んでいるので、鳥取・島根の方であれば打ち合わせ可能です。

お付き合い先からPerl・PHP共に案件をご相談頂いているのですが、一人ではこなせそうにありません。
また、お互いに仕事をストックして、収入を安定させられるかも知れませんね。

気軽にメールをください。待っています。

Vista で VMwareServer

現在の開発マシンは、2年前に組み立てた物だが、既に非力なマシンと化している。
Athlon 64 x2 +4000 な格安マシンがあったので、今後の顧客サポートも考慮して購入した(ローンです…)。

当然、OSは Windows Vista Home Premium.
Aeroじゃないと話が合わない可能性が高いため。

なんとかVista環境に移行できないか検討していたが、VMwareがまともに動かないのがネックだった。

具体的には、ゲストのSAMBAにホストからアクセスできなかった。

いろいろ調べて、以下を参考に Vistaの設定を行った。

VMware on AMD Athlon 64 X2のブリッジ接続時の通信性能

画像(177x180)

ネットワーク接続

ローカルエリア接続のプロパティーで「構成」をクリック。

画像(180x161)

詳細設定で「TCPチェックサム オフロード(IPv4)」を「Rx 有効化」
(デフォルトは「Tx & Rx 有効化」だった。)

画像(180x161)

詳細設定で「UDPチェックサム オフロード(IPv4)」を「Rx 有効化」
(デフォルトは「Tx & Rx 有効化」だった。)

Vistaの場合、再起動しなくてもネットワーク設定の変更が有効となる。これは改良点と認める事ができる。

結局、このネットワークカード固有の問題だったようだ。

やっと環境移行のめどがついた。

Vista で VMware

この前から デスクトップの Vista への移行をテストしている。
ちょっと忙しいので、一日1時間程度しかできない。

あきらの開発環境で欠かせないのが VMware だ。
家も狭いので、ごろごろマシンを置けるはずも無く、便利に使っている。

せっかくなので無料の VMware Server を試してみた。

…ブリッジ接続でホスト・ゲスト間の通信が出来ない。
正確には SAMBA のゲスト名が解決されない。

ゲストは CentOS 5 で、アップデート済み。
そのままで Vista と繋がるはずだ。

ファイヤウォールやプロトコルを調べてもダメだった。

結局、アンインストールして VMware Player を試してみた。
2.0 から Vista 対応らしい。

おぉ!すんなり出来た!

VMware Server が正式に Vista 対応するまではこれで行こう!

fgetcsv の代替関数を改良

fgetcsv の代替関数を作成したが、どうも件数が一致しない。
原因は、最後の改行から EOF までを1行として入力していたからだった。

入力長が 0 で EOF だったら EOF として false を返すように改良した。

    
    // File Get CSV
    
    function fgetcsv( &$fh, $test = false ) {
        if ( feof( $fh ) ) return false ;
        
        $csv = '' ;
        
        while ( ! feof( $fh ) ) {
            $csv .= mb_convert_encoding( fgets( $fh ), 'UTF-8', 'SJIS-win' ) ;
            if ( ( ( preg_match_all( '/"/', $csv, $matches ) ) % 2 ) == 0 ) break ;
        }
    	
        if ( ( $csv == '' ) and ( feof( $fh ) ) ) return false ;  // <-- ここを追加
		
        $values = array() ;
        
        $temp = preg_replace( '/(?:x0Dx0A|[x0Dx0A])?$/', ',', $csv, 1 ) ;
        
        preg_match_all( '/("[^"]*(?:""[^"]*)*"|[^,]*),/', $temp, $matches ) ;
        
        for ( $i = 0 ; $i < count( $matches[ 1 ] ) ; $i++ ) {
            if ( preg_match( '/^"(.*)"$/s', $matches[ 1 ][ $i ], $m ) ) {
                $matches[ 1 ][ $i ] = preg_replace( '/""/', '"', $m[ 1 ] ) ;
            }
            
            $values[] = $matches[ 1 ][ $i ] ;
        }
        
        return $values ;
    }

fgetcsv の代替関数

fgetcsv は便利な関数だが、Windowsデータとの連携に問題がある。

WindowsからCSVをアップロードする場合、Shift-JIS がほとんどだと思われる。
一方、fgetcsv関数はロケール設定を考慮するため、システムのロケールとCSVファイルの文字コードが一致していないと正しく解析されない。

色々調べたが、レンタルサーバでもしっかり動かすため、代替関数を作成した。

あきらはメインコントロールのクラスに定義している。

    
    // File Get CSV
    
    function fgetcsv( &$fh, $test = false ) {
        if ( feof( $fh ) ) return false ;
        
        $csv = '' ;
        
        while ( ! feof( $fh ) ) {
            $csv .= mb_convert_encoding( fgets( $fh ), 'UTF-8', 'SJIS-win' ) ;
            if ( ( ( preg_match_all( '/"/', $csv, $matches ) ) % 2 ) == 0 ) break ;
        }
    	
        $values = array() ;
        
        $temp = preg_replace( '/(?:x0Dx0A|[x0Dx0A])?$/', ',', $csv, 1 ) ;
        
        preg_match_all( '/("[^"]*(?:""[^"]*)*"|[^,]*),/', $temp, $matches ) ;
        
        for ( $i = 0 ; $i < count( $matches[ 1 ] ) ; $i++ ) {
            if ( preg_match( '/^"(.*)"$/s', $matches[ 1 ][ $i ], $m ) ) {
                $matches[ 1 ][ $i ] = preg_replace( '/""/', '"', $m[ 1 ] ) ;
            }
            
            $values[] = $matches[ 1 ][ $i ] ;
        }
        
        return $values ;
    }

クラス内で以下の様に使う。

    $fh = fopen( $path ) ;

    while ( ( $data = $this->fgetcsv( $fh ) ) !== false ) {
        ...
    }

    fclose( $fh ) ;

参考サイト :
Perlメモ – 値に改行コードを含む CSV形式を扱う
EthnaWiki – php/Tips/csv