やばいです。14.1型SXGA+、重量1499g。まじほしーー。。買って下さい。
2004年1月28日水曜日
2004年1月27日火曜日
pg_atoi: zero-length string
僕はDBMSというとPostgreSQLを主に使っているのですが、このPostgreSQL、バージョン間で互換性のない変更点というのが結構あって、これを知らないと、データベースの移行作業とか、テストサーバで開発したものを本番サーバにアップしようとか言うときに、この違いのせいでトラブるなんてことになりかねません。
「pg_atoi: zero-length string」なんていうエラーもほとんどが7.2から7.3への互換性のない変更点に書かれている、
整数型の読み込みで、空文字列が禁止されました。 この結果、整数型フィールドに対し、COPY 文での入力フィールドの空指定や VALUES 句での空文字列 '' 指定などで、0 入力とはならず、エラーとなります。
が原因でしょう。
例として、名前と年齢をフォームから入力させて裏でDBに保存するようなWebアプリケーションを考えてみましょう。
名前と年齢を保存しておくテーブルを次のように定義します。
CREATE TABLE user_master(
name text,
age int
);
そしてこのDBにデータを保存するためのPerlスクリプトを次のように書いたとしましょう。
#! /usr/local/bin/perl
use strict;
use warnings;
use CGI;
use DBI;
my $query = CGI->new;
my $dbh = DBI->connect('dbi:Pg:dbname=testdb', 'username','passwd');
my $name = $query->param('name');
my $age = $query->param('age')
$dbh->do("INSERT INTO user_master (name,age) values(?,?)",$name,$age);
このスクリプトは7.2では問題なく動きますが、7.3だとエラーになる可能性があります。
エラーになるのはageに値が入力されなかった場合です。いつからだったか忘れてしまいましたが、(2.7xくらいからだったような。。)CGI.pmではparam('key')の値が空だった場合、空文字列を返すので、もしageの値が空だと$ageには空文字列が代入されます。それをそのままPostgreSQLのint型のカラムに入れようとしているので、pg_atoi: zero-length string」というエラーがでてしまうわけです。このエラーを回避するために修正したスクリプトは以下のようになります。
#! /usr/local/bin/perl
use strict;
use warnings;
use CGI;
use DBI;
my $query = CGI->new;
my $dbh = DBI->connect('dbi:Pg:dbname=testdb', 'username','passwd');
my $name = $query->param('name') || undef;
my $age = $query->param('age') || undef;
$dbh->do("INSERT INTO user_master (name,age) values(?,?)",$name,$age);
param('key')の値が偽だった場合(空文字も偽になります)、undefを代入するようにしました。入力データが多い場合は、mapを使って一括処理してやるのが効率的でしょう。
my @keys = qw(name age kana birth_year birth_month birth_day);
my %params = map {$_ => $query->param($_) ? $query->param($_) : undef} @keys;
2004年1月24日土曜日
MyIE2いいです!
hail2u.net - Weblog - MyIE2
に紹介されていたMyIE2。Googleツールバーを使えるということでここ何日か試しに使ってます。
- 気づくとIEが起動していることがある。(広告?)
- SELECTフィールドからTABで次のフィールドにうつれない。
- Googleツールバーの設定で検索結果を新規ウィンドウで開くにしておくと検索結果を表示するためにIEが起動しちゃう。
というような微妙に使いにくい点もありますが、今まで使っていたSleipnirと比べても見劣りしないっていうのが僕の感想です。
2004年1月23日金曜日
僕のLet'sノートが壊れた!?
ここ数日、修士論文を書き上げるべく研究室に泊まり込んでいたのですが、2日も満足に寝ていないとさすがに眠気に勝てず、軽く仮眠をとることにしました。すぐに再会するつもりだったのでノートの電源は入れっぱなしで寝たんですが、それがいけませんでした。。。
軽い睡眠のあと眠気眼で、ノートの前に座っていざ執筆再会と思ったのですが、どうもノートの調子がわるい。。ずっと起動しっぱなしだったのが悪いのかなと再起動することにしました。若干時間のかかる起動画面の後、いつものログオン画面が表示されパスワードを入力しようとキーボードをたたいたのですが反応なし。。???なにがどうなったのかわからずパスワードを何度も連打するものの何も反応しません。。途方にくれつつも原因を探していると、左のShiftキーのあたりがなんか濡れているのを発見。これは下手にいじるとショートすると思ったのでノートでの執筆は断念し、研究室のUNIX端末で作業を再開しました。結局論文の提出期限には間に合ったのですが危機一髪でした。
論文提出後、そろそろ乾いたかなとノートの電源を入れてみましたがまだキーボードはうんともすんとも反応してくれません。最悪の事態が頭をよぎりましたが、とりあえず、濡れた部分がどうなっているのか見るためにキーボードを引っぺがしてみました。水がかかったと思われる部分が黒く変色していることはわかったんですがだからといってどうすることもできず、記念写真だけ撮ってもとにもどしました。以下そのときの写真です。こういうときカメラ付き携帯は便利ですね!
元に戻した後、あきらめきれず試しに電源を入れてみるとあら不思議、今までのことが嘘のようにキーボードで入力できるようになってました。うーん、結局原因は何だったんだろう?まあ直ったからよしとしましょうか。
2004年1月18日日曜日
CPANでWebからDiffとGrepが利用可能に
use Perl | Diff and Grep Now Available on search.cpan.org
samtregar writes "I'm proud to announce that search.cpan.org now includes two new tools of my creation: diff and grep. To get to these tools, go to a distribution page (ex. HTML-Template-2.6) and click on the "Tools" link. This will bring you to the tools page where you can run diff and grep on the module's source code.
search.cpan.orgでGrepとDiffを利用できるようになったそうです。さっそく試してみましたが、Diffはいいですね!モジュールのバージョンアップがあったときにこれを使えばどこをどう変更したかが一目瞭然です。一方Grepはちょっとどう使うか利用シーンがぱっとは浮かびませんねぇ。モジュールをハックするときはemacsで直接ファイルを見る方が効率的だと思いますし。
それにしてもDiffとGrepの実行時のレスポンス、かなり速いです。裏でどんなことをやっているのか非常に気になります。
2004年1月17日土曜日
Perl5.8.3
use Perl | Perl 5.8.3 Released
5.8.3 is a maintenance release for perl 5.8, incorporating various minor bugfixes, including eliminating a couple of errors in Perl's UTF8 handling. Please see the perldelta for the full details.
Perl5.8.3がでてました。メンテナンスリリースでUTF8系のバグフィックスがメインのようです。