水曜日, 2月 25, 2009

Perl学習中 「モダンPerl入門」誤字

「モダンPerl入門」の103ページにある、DBIx::Class::Schema::Loaderを使うためのコマンドの3行目と、4行目の末尾のバックスラッシュは余分。少なくとも私の環境では。

というか、行が連続している事を示すためのバックスラッシュであって、実際には一行で書けということなのかもしれない。だとしたら誤字じゃないですね。

まあ、再びひっかかるかもしれない未来の自分へのメモということで。


追記:
誤字で良いそうです(コメント参照)。それに合わせタイトルの「?」を外しました。


これだけでは何なので、sqliteの場合の同コマンドの書き方。

perl \
-MDBIx::Class::Schema::Loader=make_schema_at \
-e 'make_schema_at("Hoge::Schema",
{debug => 1, dump_directory => "lib" },
[ "dbi:SQLite:dbname=hoge.db","","" ])'

最後の配列のところは、要するにDBI->connectの引数なんですね。
これは一度覚えれば忘れないかも。

日曜日, 2月 22, 2009

Perl学習中 ファイルハンドルをサブルーチンに渡す

ファイルハンドルをサブルーチンに渡す一連の流れ。他の書き方も出来るのだろうけど、今の知識で理解出来るのはこの書き方だけ。

Perlのコードはこんな感じ。test.plという名前で保存。バージョンは5.10。
use strict;
use warnings;

use IO::File;

my $file = IO::File->new();
$file->open( 'data', 'r' ) or die $!;
my @hoged = hoge($file);
print $hoged[0];
print $hoged[3];

sub hoge {
my $file = shift;

my @lines = ();
while (<$file>) {
push(@lines, $_);
}
return @lines;
}

dataの中身はこんな感じ。
data1
data2
data3
data4

で、実行

$perl test.pl
data1
data4


書き方は分かったけど、これのテストの書き方が分からない。
擬似ファイルを作るか、Mockを作ればいいんだろうけど。
眠いので寝る。

木曜日, 2月 19, 2009

Perl学習中 その2

サブルーチンに引数として配列やらハッシュをそのまま渡すと展開されてしまうというのに3時間ハマった。リファレンスとして渡してやる必要があるらしい。
引数として渡されるとき、@_ = (@array, %hash);という風に配列コンテキストで渡るのかな?

ちょっと実験。
%hash = ('key1' => 1, 'key2' => 2);
@array = (7, 8, 9);

@arg1 = (%hash, @array);
@arg2 = (\%hash,\@array);

print "@arg1\n";
print "@arg2\n";

こんなのを書いて実験すると。
$perl test.pl 
key2 2 key1 1 7 8 9
HASH(0x9771088) ARRAY(0x9771108)

どうやら想像通りらしい。

リファレンスを受け取ったサブルーチン側では、デリファレンスしてやる必要があるので、そのあたりで使われる記号が増えるという印象を生むのかな?
改めて自分の作ったサブルーチンを見ると、確かに$記号はやたら使ってるし、デリファレンスの辺りは、一週間前の自分には読めないだろうなとは思う。
ただ、書いているときはそれほど気にならなくて、それよりmyを忘れちゃうことの方が多い。javascriptのvarとか、VBAのDimみたいなものなので、そのうち慣れると信じることにしよう。

あとテストは重要。
詳しくない言語ほどテストの価値は上がるのかも。

金曜日, 2月 13, 2009

Perl学習中

お手伝いのために、Perlを覚える必要があるので、オライリー「初めてのPerl 第2版」と翔泳社の「モダンPerl入門」を横において少しずつ慣れるようにしている。

今のところ、最大の壁は文末のセミコロンを忘れることで、Perl批判にありがちな記号多すぎとかは感じない。そこに不満を持つようになるのは、過去の自分のソースを読むようになってからなのかも。

CPAN便利とは良く聞くけど、素直に依存性を解消してくれないケースもままあるので、あまりありがたみを感じない。環境設定が悪いのかもしれないが、面倒なのでubuntuパッケージからモジュールを拾うようにしている。それで駄目なら、そのモジュールには縁が無いということで深追いしない。

本当はTDDとかをやってみたいけど、Perlを使いこなせない状態ではちょっと難しい。テストは書くようにしているので、段々とテストを先に書くようにしていくのを目標にしてみる。

今週末にはそこそこ大きめの機能を組んでみよう。

日曜日, 2月 08, 2009

パソコンは使いにくい

パソコン(Windows Vista)の操作を教える機会があった、そしてこれからも教えることになりそうなので初心者を観察して気付いたことのメモ。

0.教える相手の方について


年は、そこそこ年配。
初心者と言ったけど、キーボード操作時にキーを探すようなことはないし、メールソフトも使えている。
でも、新規フォルダを作ったり、Wordで作った文書を任意の場所へ保存したりは出来ない、もしくは自信が無い。
ケータイはそれなりに使っている模様。

1.マウスより、トラックパッドの方が使いやすいらしい


マウスだとクリックのタイミングでカーソルがズレるそうだ。そのためダブルクリックの成功率が下がるらしい。
トラックパッドだと、カーソル操作とボタン操作が独立しているので「カーソルを置く」「クリックする」を独立出来る。

ちなみに誤操作防止のために、トラックパッドを叩いてのクリック機能はオフにした。

2.機能の抽象化ができていない


Wordファイルを削除すること、画像ファイルを削除すること、フォルダを削除することが全て、同じ「削除」であると直観出来ない。
やりたいことを聞いて、それを教えるという形式だったので、仕方ないかも。系統立てて教えれば、すぐ理解できるはず。
Wordの文書を削除する際「Wordから削除出来るんでしょ?」と聞かれたけど、これは盲点だった。
確かに新規作成できるなら、削除が出来ても不思議は無いですね。むしろ自然なこと。

3.マルチタスクで使えない


マルチタスクといっても、あるフォルダを開きながら、Wordで作業するとかのレベルなんですが、一つの作業をするとき、他のウィンドウを全部閉じてしまう。
これも教える側の都合上、今やっている作業に関係ないウィンドウを常に閉じていたせいかも。覚えるまでは、私の操作を完全トレースするつもりらしいし。
複数の窓を開きながら作業している様子は見せているので、慣れてきたらそういう使い方をするようになるはず。

4.ネットワークは難しい


IPアドレスなんかは、DHCPにおまかせでいいんだけど、メールが大変だった。
正直、POP3だとかSMTPだとかポートの変更だとかを初心者にやらせるのは難しいです。
このあたりもっとこなれないかな。
popやsmtpの設定を1ファイルに閉じ込めて、それを配置すれば後はidとパスを入れるだけ、みたいな仕組みを標準化すると良いのかも。
もう既にあるかな?

5.困ったらヘルプ、ネットに聞く


Windowsの使い方ならともかく、個々のアプリケーションの使い方なんてさっぱりわからないので、その時は悩まずにヘルプを使いました。昔はともかく最近のMSアプリのヘルプはかなり良くなっているので、基本的な操作(縦書きモードにするには?とか)を知るには一番手軽です。
分からないことがあれば、まずヘルプという姿を戦略的に見せるという意味もありましたが、あまり伝わっていないかも。
その他、頼りになったのは、「教えてgoo」や「okwave」などの質問サイト。大概の疑問は既に誰かが質問しているので、多くの問題を素早く解決出来ました。

とりあずこれだけ。後で追記するかも。

火曜日, 2月 03, 2009

typeZのバックライト設定

コメントでshinoさんに教えていただいたことを整理。


1.以下のコマンドを実行
xrandr --output LVDS --set BACKLIGHT_CONTROL native

2.以下のコマンドで、明るさを設定。数字が大きいほど明るくなる。
xbacklight -set [数値(0 - 100)]

3.電源の管理の設定で画面の明るさの設定を、2で設定した値にする。
xbacklightの設定と、電源の管理での設定が食い違うと、電源の管理側の設定値に近づくらしい。

今のところ、上記で何とかなっている模様。
後はいろいろ工夫してみよう。

shinoさん改めてありがとうございます。