大人買い

今日は日中はほとんど寝ていた。
日も傾いてからバイクでらくだ書店へ。
いろいろ本を買ってきました。
積読にならないようにせねば。
そしてコンピュータ関係の書籍については、必ずアウトプットすることを、自らに課す。
そうそう、『まるごとPerl! Vol.1』が無かった・・・。『博士の異常な健康』も・・・。



WEB+DB PRESS Vol.34

WEB+DB PRESS Vol.34

id:kopugさんは既に読破とのこと。
読んでみて解らないことはどんどん訊くことにしよう、そうしよう。




Perlベストプラクティス

Perlベストプラクティス

Perl::Criticをちょっとだけ - ほぼ30歳からはじめるWEBプログラム
でも触れたものの邦訳版。
やっぱり英語版よりも頭に入ってきますよ、当たり前だが。
ちょっとした記述法や、ビジネスロジック以外のことに時間と脳を浪費しそうなヤバイ雰囲気になったときには利用しよう、そうしよう。




日経ソフトウエア 2006年 10月号 [雑誌]

日経ソフトウエア 2006年 10月号 [雑誌]

Javaの10倍の生産性を体感せよ」というRuby特集の触れ込みに思わず手にしてしまった。
Rubyも少し覚えよう、そうしよう。




Software Design (ソフトウエア デザイン) 2006年 09月号 [雑誌]

Software Design (ソフトウエア デザイン) 2006年 09月号 [雑誌]

  • 出版社/メーカー: 技術評論社
  • 発売日: 2006/08/18
  • メディア: 雑誌

LAMPシステム再強化計画」「CentOS徹底活用」など、
弱いところを強化したい。
眠っちゃってるFedora入りのサーバマシンをCentOSで復活させよう、そうしよう。



久しぶりにどっぷり本屋に長居して、
つくづく感じたのはいわゆるライトウェイト言語を特集した雑誌の多さ。
昨今はRuby On Railsの登場によりRubyを初めとしたライトウェイト言語が隆盛してきているのだな、と。
せっかく業務でPerlを利用している身としては、この期を逃さず、吸収できるものはどんどん吸収しよう、そうしよう。





以下は趣味本。



クワイエットルームにようこそ

クワイエットルームにようこそ

芥川賞候補にもなった本作。
松尾スズキの小説は『宗教が往く』以来か。
精神病院の閉鎖病棟という松尾スズキの得意そうなフィールドが舞台。
楽しみです。




クイックジャパン (Vol.67)

クイックジャパン (Vol.67)

  • 出版社/メーカー: 太田出版
  • 発売日: 2006/08/10
  • メディア: 単行本

クイックジャパン買うなんて何年ぶりだか・・・。
森達也が責任編集する政治特集に興味を持って。
森達也の『A』や『A2』を扱ってるレンタル屋さんがあったら教えてください!




クイックジャパン (Vol.66)

クイックジャパン (Vol.66)

  • 出版社/メーカー: 太田出版
  • 発売日: 2006/06/10
  • メディア: 単行本

大好きな「ピタゴラスイッチ」を初めとするNHK教育の特集や筒井康隆菊地成孔の対談が読みたくて。
筒井作品がまた読みたいな〜。LAへの飛行機の中で読もうかな・・・。
菊地成孔が名古屋ブルーノートでDUBを!!
行きたい!

漏洩には気をつけろ!

Subversion がファイルのテキストかバイナリかを判断する際のバグ(?)に遭遇。

漏洩には気をつけろ!

以上を記述しただけのファイルを仮に leak.txt として任意リポジトリのワーキングコピー配下に保存。
該当リポジトリに追加する。

$ svn add leak.txt
A  (bin)  leak.txt

ちょwwwおまwwww
なんでバイナリなの?



文脈マージが可能かどうかを決めるのに、Subversionsvn:mime-type属性を調べます。もしファイルが svn:mime-type属性を持たないか、テキストを示すような内容であれば(たとえば、text/*)、Subversion はそれをテキストであると判断します。それ以外の場合、ファイルはバイナリであるとみなされます。Subversionsvn import とsvn add 実行時に、バイナリ検出アルゴリズムを実行することでユーザを助けます。これらのコマンドは、良い推測を行い、(可能なら)バイナリのsvn:mime-type 属性を追加されるファイルに設定します。(もし Subversion の推測が間違っていた場合は、ユーザはいつでも手でその属性を削除することができます)

上述の内容から、
leak.txt のsvn:mime-type属性を調べてみる。

$ svn propget svn:mime-type leak.txt
application/octet-stream

・・・とにかく Subversion が leak.txt をバイナリデータとしてみなしていることは明白。
理由はわからんが、このままでは気持ち悪い。
こう、
なんか、
バイト中、小学生に
「あのヒト髪型変!!」
と大声で言われてもなお、
笑顔でいたあの頃の自分くらい気持ち悪い。
svn diffも取れないし。
で、
ひとまず対処療法。
Subversion によるバージョン管理::バイナリファイルと変換」の内容にあるとおり
この svn:mime-type 属性を手で変えてやりましょう。

$ svn propset svn:mime-type text/plain leak.txt
property 'svn:mime-type' set on 'leak.txt'
$ svn propget svn:mime-type leak.txt
text/plain

これで悲劇の leak.txt のテキスト化が高らかに宣言されました。
もしくは、

$ svn propdel svn:mime-type leak.txt
$ svn propget svn:mime-type leak.txt
$

これで svn:mime-type 属性を消しちゃっても svn diff を取ることができるようになります。

ちなみに、

洩に

だけで Subversionがバイナリと判断することが判明。
なぜか?
その理由はあなたが解き明かしてください!

htmlファイルにおけるインデント

業務では専らLinux上でvimを使って慣れているため、
Windowsでもgvimを落としてきて使っています。
たまに。


で、Windows上でコーディングってあまりしないんだけど、
gvimはhtmlファイルをごにょごにょするときに使うことが一番多い。
でもそんなときに、

^^^^function hoge() {alert()}【Enter】

とすると(「^^^^」部分は半角4文字分のインデント、【Enter】はここでEnterキーを押したことを意味します。)、

function hoge() {alert()}

って、勝手にインデントが消えちゃったり、

^^^^^^^^function hoge() {alert()}

って、勝手にインデントが増えちゃったりする。


自分で意図的にインデントして書き終わった行を、改行しようとするたびにコードが動かされてストレスがたまっちゃいます。
どーしてかなー、といろいろインデントの設定変えてみても、動作に変化なし。
どうやら増減は前後の文脈によって変わってるっぽい。
試しにPerlのコード書いてみると、ストレスなし!つまり上記の動作は起きない。
で、
たどり着いたのがこれ、


C:\Program Files\vim\runtime\indent\html.vim


どうやら「.html」拡張子のついてるファイルのインデントの動作を設定しているファイルらしい。
中をチラッと見たところ前後のhtmlのタグのネストの関係を割り出して自動的にインデントしてるんじゃないかと結論。
こんなファイル、僕の手ではとても触れないし、何も拡張子によってインデント具合を変えて欲しいとも思わなかったので、


html.vim → _html.vim


にリネーム。
ようやくストレスなしのhtmlおよびJavaScriptコーディングができるようになりそうです。


ま、htmlファイルの話なのにコードがJavaScriptなのはご愛嬌☆

WEB+DB PRESS Vol.31



Ajax&prototype.jsの特集記事とのこと!
買わなきゃ。



それよりid:naoyaさんがPerlの連載をされるということが一番熱いニュースだ!
待ち遠しい。



にしても、
WEB+DB PRESS」の表紙はダサくなったと思うがどうでしょう?




【追記】
買って来ました。
id:naoyaさんの文章はやっぱ解りやすいなー。
ただ、typoが多かった。




perlだと、配列やハッシュの要素の後ろにカンマを付けても問題ないのですが、JavaScriptだと、そこでコケるようです。


となるJavaScriptコードが多数。

Perl::Criticをちょっとだけ

まだまだ初心者な僕はコーディング規約的なことをしっかりしたい。
ので、はてな技術発表会日記で拝見しましたるPerl::CriticをCPANより落としてきて早速試す。
ちょっとだけ。

まず、以下のコードをtest.plとして作成。

#!/usr/bin/perl -w

use strict;
use lib qw(../myperl/lib);
use Readonly;

Readonly my $BIRTH_YEAR     => 1975;
Readonly my $BIRTH_MONTH    => 10;

MAIN :
{
    &main;
    exit;
}

sub main
{
    print $BIRTH_YEAR. "\n";
    print $BIRTH_MONTH. "\n";
}

__END__

引き続き、
以下のコードをcritique.plとして作成

#!/usr/bin/perl -w

use strict;
use lib qw(../myperl/lib);
use Perl::Critic;

MAIN :
{
    &main;
    exit;
}

sub main
{
    my $critic = Perl::Critic->new;
    my $source = './test.pl';
    print $critic->critique($source);
}

__END__

で、critique.plを実行すると・・・

Code before warnings are enabled at line 7, column 1. See page 431 of PBP.
Code not contained in explicit package at line 3, column 1. Violates encapsulation.
No 'VERSION' variable found at line 0, column 0. See page 404 of PBP.
Hard tabs used at line 7, column 24. See page 20 of PBP.
Hard tabs used at line 8, column 25. See page 20 of PBP.

って。
Perl::Criticによると


Most Policies are based on Damian Conway's book Perl Best Practices.
ってことなんで、
Perl Best Practices: Standards and Styles for Developing Maintainable Code

Perl Best Practices: Standards and Styles for Developing Maintainable Code

買うしかないですかねー。

クラスメソッドとインスタンスメソッド

  • クラスメソッドとは第一引数にクラス名をとる関数である。
  • インスタンスメソッドとは第一引数にクラスのインスタンスをとる関数である。

っちゅうことで。



package Hoge;

sub new {
my $class = shift;
my $self = {};
return bless $self,$class;
}

sub name {
my $self = shift;
my $name = shift;
if(defined($name)){
$self->{"name"} = $name;
} else {
return $self->{"name"};
}
}

sub say_hello {
print "Hello!!";
}

1;

てなときには、


use Hoge;

# new()はクラスメソッド
my $obj = Hoge->new();

# name()はインスタンスメソッド
my $name = $obj->name('summersoldier');

# say_hello()はクラスメソッド的
Hoge->say_hello();

でよいのでしょうか?

.cshrcの編集

プロンプト表示が

%
だけで寂しい。
ターミナルの全画面表示したときも入力しづらい。
また、lsしたときにディレクトリとファイルの違いがわかりづらいので色づけもしたい。
よって$HOME/.cshrcを以下のように編集。


# lsの色付き表示
alias ls ls -G

# プロンプトの表示
set prompt = '%n@%m:%~$ '

編集内容を適用するには

%source .cshrc

これでプロンプトは

username@hostname:~$ 
てな感じになりました。

http://iris.homeunix.net/yayoi/freebsd.asp
この辺参考にしました。