Rubyについての落書きなど

Ruby(1.8)についての雑感。というか落書き。 # 嘘を書いていたら、教えてください。 スクリプト言語で、かなり遅い(1.9で改善されたし、そもそも実行系が色々出てるので、もう触れなくていい問題かな)。制御構造は、ALGOL族の末裔なので、慣れてるはず。クラスベースのオブジェクト指向なので、慣れてるはず。ビルトインのライブラリが充実していて便利。破壊的なメソッドが区別されてて分かりやすい。全ての文法が互いによく考慮されており、非常に扱いが良い。Rubyは非常に動的な言語。Objective-Cに近い感じ(実はSmalltalkに近いのだろうか)。 たとえば、いわゆる「ダックタイピング」。型構造でメソッド呼び出しを縛るC++/Javaなどとは違って、その名前のメソッドがあれば呼んでやれ、ということ。 これはC++/Javaなどから見ると静的チェックがしにくいともいえる。ただ、ちゃんとテストをすれば潰せる問題のはず。 あとはちょっと細かいけど、 includeでインスタンスに特定の操作を追加できる。「import Math」とかにちょっと感激。selfにメソッドを追加するんだ!!既存のクラスライブラリもHackし放題。まあ、ほどほどにしとかないと。イテレータは強力。Javaのイテレータとはもちろん違う。ALGOL系言語の構文を利用して作っているけど、内容は高階プログラミング。関数型言語(LISPやML)などと同等のパワーを持つ。僕は頭が弱いので、うまく使えていないけど。 行末のセミコロンが必須じゃないのは良いかも。慣れてくると他の言語でセミコロンを打ち忘れそう。# セミコロンに関しては、C/C++/JavaとPascalでもどうせ違うし Perlとできることはそんなに変わらないかもしれないけど、よっぽど綺麗なコードが書けるんじゃないかな、と思う。 落書きついでに他の言語についてもちょこっと書いておくと、 C 今では、Cは普通のプログラミング言語では無いのかもしれない。OSとか制御とか特殊用途に使われる言語だ、とか書いてしまおう。 この頃はJavaとかRubyから入門する人も増えたと思う。とりあえず初学者がCをやって挫折、というパターンが減ってきたのは良いことと思う。 でも、一度は勉強しといた方が、いろいろな意味で理解が深まるとは思う。 C++ 機能豊富、なんでもできるかわりに相互作用が悲惨で、素人には使わせられない。 # なんと適当な書き方だろう、一時期ずっと使っていたクセに。 Java C++よりもランタイムで行なう部分が大きい(特にGC)し、プログラマの裁量も低いので、ずいぶん扱いやすい。もちろん見方によっては全く逆の意見になる。 単一継承/インタフェースを強要させられるため、どうにもコードがごてごてする。ただし、エンタプライズ開発では、これは悪いことばかりではない。 Perl Rubyの1ヶ月前らしい。ネイティブPerl人が書いたコードはまさに暗号文で、一行解読するのに一日かかったりする。ちょっと言い過ぎか。

2010年10月1日 · 1 分

Ruby技術者認定試験合格

もうずいぶん前の話になるけど、Ruby技術者認定試験に合格したので、その話を書く。 僕は未だにRubyはあんまり使ってないけど、今後は使うことも増えてくるだろうし、会社のプッシュ(=報償金)もあったので受験した。ちなみに合格は 2009/6/13 だから、今とは変わっている所があるかもしれない。Gold試験は昔は無かったし。なので、たぶんSilver試験(Ruby Association Certified Ruby Programmer Silver)の話になる。 他の試験との一番大きな違いは、届く認定証が「出雲民芸紙」という手漉き和紙なこと(これ本気)。風合いが良いし、地元志向感がとっても良いなあと思った。 これが認定証の「紙の説明書」。うちの安物スキャナでは色合いがきれいに出なくて残念。こんな認定証は初めてなので、大切に保存しておこうという気持ちになる。 試験の内容に触れておくと、Rubyをバリバリ使っているぜ、という人が落ちるようなものじゃないと思う。短いコード片や基本的な文法、ライブラリなどについて問われる。 受験料がもったいないので、絶対に一度で合格したい!という人は、以下の本をやると良いと思う。 どんな感じで出題されるか、非常によく分かる。というか、出題者とこの本の作者は同じなんじゃないかな。これをぱぱっと解ける人なら、よほどミスらない限り合格すると思う。 Rubyをまったく知らない人は、まずRubyを軽く勉強した方が良いと思う。上記の本でも文法の説明など少しはあるけど、そういう種類の本じゃない。 要注意なのは、試験は(たぶん)Ruby 1.8について問われること。もう既にRuby 1.9がリリースされていて、文法面でも色々改善された点が多いけれど、試験対策にはRuby 1.8の本を買うように気をつけよう。 僕が読んだのはこの「たのしいRuby」第2版。すでに第3版が出ていて、そちらはRuby 1.9にも触れているみたいなので、実用には第3版の方がいいかもしれない。 この本はどちらかというと初級者向けの本。なので、他言語の経験者は少しまどろっこしく感じるかもしれない。僕はこの本を一通り読んで、気になる所は実際にコードを書いて試して、軽く流した。その後上記の公式ガイド本を読んで、受験したという感じ。 その後、以下の本も買ってしまった。 「初めての」とあるけど、これは初級者向けではない。他の言語をちゃんと経験した人が「初めて」Rubyに向かうための本。だから記述もあっさりしている。こちらの本の方が薄くてページは少ないけど、情報量は多い。ちなみにRuby1.8とRuby1.9と両方に触れている。 どちらの本も内容は良いと思う。どちらか一冊にしようとして悩む人は、amazonで目次を見比べてほしい。後者の本の目次をみて「こっちの方が良さそう」と感じる人には、そっちの方が良いと思う。

2010年10月1日 · 1 分

ファンの清掃には気をつけよう

奥様のノートPCのメモリを増設しようとして、本体を半分解体したので、ついでにホコリも取っておこうと掃除機をかけた。 冷却ファンにも掃除機をかけようとして、掃除機を近づけるとファンが勢いよく回り、いい感じにホコリが取れた。ところが、うっかり掃除機の一部を回転中のファンにぶつけてしまい、ファンの羽根をかなり折ってしまった。下はその証拠写真。 こんな状況でもいちおうファンは回るのだけど、音もおかしいし、たぶん良くないと思うので、仕方なくパーツを購入することにした。 こうやってパーツを買いやすいのがThinkpadの良いところだけど、純正品は納期に時間がかかりそうなので、通販で再生品(たぶん中古PCから抜き取ったやつ)を買った。 届いたパーツが以下の写真。見比べると、どれだけひどく折れてたか分かるのではないかと。 ファンの交換後は快適(というか普通に)に使えている。 それにしても、ばかな失敗だった。みなさんもこういう部品には掃除機を近づけたりせず、エアダスターで吹くくらいにしましょう。

2010年9月21日 · 1 分

無線LANの電波干渉とinSSIDer

なんだか無線LANがあまり安定しないので、電波干渉を疑ってツールを探してみると、inSSIDerというツールがよくできていて感激した。 画面はこんな感じ。縮小したので、SSIDとかMACアドレスとか読めないよね?? 色々な機能があるけど、一番気に入ったのがチャネル・電波強度・SSIDをグラフィック表示してくれる機能。下半分がそれ。 ちなみに、右よりの大きな台形(?)がうちのAP。一番干渉しにくいかなあと思って10chに変えてみた。これまでは左側の大きな台形と思い切りぶつかっていたので不安定だったんだろう。強度的に、たぶん隣の家と思う。壁一枚しかないし。 なんだか無線LANが不安定、と思っている人は是非このツールを試して、干渉があればチャンネルを変えるか、変えさせる(笑)かしてみてはいかがでしょう。 このツールの動作には.net Framework 3.5(SP1もいるかも)が必要みたい。うちには入ってなかったので入れた。

2010年9月18日 · 1 分

PerlでJPEGのEXIFを取得してファイルを整理する

気づけば2月も半ばになり、新年とは言えない時期になってしまった。今年最初のネタはプログラマらしい話から。 僕はデジカメのファイルを溜め込みがち。ときどき意を決して、デジカメからファイルを全部パソコンに転送して、エクスプローラでEXIFをみながら、日付とイベントで名前をつけたフォルダを作ってその中に移動して整理する。 # 「溜め込むなよ」とか「もっとましなツール使え」とか言われそう この間もSDカードが一杯になったので整理をしていて、ふと「この作業ってプログラム向きだね」と考えてしまった。 というわけで、久々の日曜プログラマ。 CPANを探せば、EXIFをとってくるようなものがきっとあるだろうと思って探すと、いくつかありそう。今回はImage-ExifToolを使うことにした。Windows環境なので、ActivePerlを使って実装。 僕のカメラ(Canon PowerShot G7)だと「CreateDate」という属性に撮影日が入ってたので、それを使うことにした。EXIFの取り決めとかはあんまり興味ないので調べなかった。許して。 JPEGファイルを並べたフォルダ内で実行すると「YYYY-MM-DD」というフォルダを作ってその中にファイルを移動するように実装してみた。 実行環境やカメラによってはうまく動かないかも。なのでAS-ISということで。うっかりファイルが消えたりしても責任とれません。 use strict; use Image::ExifTool; use File::Copy; ExifToolの用意 my $exif_tool = new Image::ExifTool; my @file = glob(’*.jpg’); for my $file (@file) { exif情報の取得 my $exif_info = $exif_tool->ImageInfo($file); my $create_date = $exif_info->{‘DateTimeOriginal’}; 日付情報の切り出し if ( $create_date =~ /(\d+):(\d+):(\d+)/ ) { my $year = $1; my $month = $2; my $day = $3; ディレクトリの作成と移動 my $dir_name = “$year$month$day”; mkdir($dir_name); move($file, $dir_name); print “$file is moved.\n”; } else { print “$file is NOT moved.\n”; } } ...

2010年2月17日 · 1 分

Config::GeneralでUTF-8のファイルを読み込む方法

僕はPerlで設定ファイルなどを扱うのにConfig::Generalをよく使う。もっと良いものがあるのかもしれないが、特に難しいところもなく、直感的に使えるので気に入っている。 ところが、設定ファイル中に日本語(UTF-8)があると、期待通りに動作をしてくれないことに気がついた。文字によっては化けたりするのだ。今まで困らなかったのが不思議なくらいだが、これまで設定ファイルに日本語を埋めたことがなかったのだろう。 この現象を回避するには、Config::Generalを初期化するときに、-UTF8オプションを渡してあげれば良い。 例えば、こんな感じ(たぶん)。 my $conf = Config::General->new(-ConfigFile => 'xxx.conf', -UTF8 => 1); my %config = $conf->getall; ところが、少し古いConfig::Generalにはこの-UTF8オプションがない。例えばDebian 4.0の標準パッケージがそうなのだ。 しかたがないので、ファイルの中身をいったん読み込んで、読み込んだ内容をConfig::Generalに渡すことにした。これならうまく動いてくれる。 open(CONF, 'xxx.conf'); my $buf; while (<CONF>) { $buf .= $_; } close(CONF); my $conf = Config::General->new(-String => $buf); my %config = $conf->getall; もっといい方法がありそうだと思いつつも、それほど時間がないし、わりとどうでもいいツールだし、なので動けばいいやということで妥協しつつ、備忘録をかねてエントリにしておいた。 ちなみに、呼び出す側のPerlスクリプトもUTF-8で書くことと、以下の記述を入れておくことを忘れずに。 use utf8; binmode STDOUT, ":utf8"; use open IN => ":utf8"; Perl世界のことはまだよく分からないので、添削・批評など大歓迎です。

2009年6月25日 · 1 分

lenny登場

Debian GNU/Linux 5.0、コードネームlennyがリリースされました。 というニュースを数日遅れで知るなんて、もうダメダメ。 そういえば前バージョンのetchも、検証用のVMWareに何回かインストールしてみた程度で、あんまり真面目に使っていないな。 SI業してるとDebianよりはRHEL(しかも古いやつ)とかと仲良くなってしまうし。 関係者の皆様に感謝しつつ、またそのうち試してみます(永遠の先送り?)。

2009年2月18日 · 1 分

みずほ銀行のセキュリティ強化について

みずほ銀行から、インターネットバンキングのログイン時のセキュリティ強化についての連絡が届いた。 ところがこれ、中身を見てみるとどうなんだろうと思ってしまう。対策の主な内容は以下のとおり。 (1) 通常のログインパターンと違う場合、事前に登録しておいた合言葉も入力させる (2) パスワード入力画面に選択しておいた画像を表示することで、正規のサイトであることを確認できる (1)については、「合言葉」の詳細が分からないが、おそらく質問と解答を登録しておくことで、不審な利用者がログインを試みる場合に難易度が上がるという狙いなのだろう。このこと自体は悪いことではない。 ただし、実際にログインするときに聞かれる可能性もあるので、あまり答えにくい(忘れそうな)解答は登録しないのではないか。安易な質問・解答が登録できるのであれば、犯罪の抑止につながるとは考えにくい。なので、結局はパスワードが破られないように徹底してもらうほうがよいのではないだろうか。 (2)については、サイトの表現を引用する。 ログインパスワードの入力画面に、お客さまが事前に登録した「画像」(*3)が表示され、お客さまがアクセスしているサイトが正規のみずほダイレクトであることを画面上でご確認いただけます。 みずほ銀行というのは、日本有数の大銀行であって、システム作りについても大勢の「プロ」がかかわっているに違いないのだが、どうしてこんな馬鹿なことを平然と書くのだろう。 画像はみずほ銀行が用意したものの中からしか選べないということだから、特定の画像に決め打ちした偽サイトだけでも、引っかかる人は多数出てしまう。 さらに、偽サイトは正規のホストと中継を行うことも可能だから、「正しい」画像を表示することも技術的には難しくないだろう。「正しい」画像が表示されることと、そのサイトが本物かどうかは、本来全く関係がないことだ。 ところで、合言葉や画像を選ぶ時には、以下のような注意書きがされている。 登録の際は、フィッシング詐欺(偽の電子メールなどで、偽のウェブサイトに誘導して個人情報を搾取する詐欺)等にご注意いただき、必ずみずほ銀行の正規のウェブサイトであることをご確認のうえご登録ください。フィッシング詐欺についてご注意いただく点などくわしくはこちら。 この注意書きからのリンク先では、SSLの鍵およびURLを確認するように指示されており、この内容はまともと思える。なのに、なぜ「登録の際は...」と限定してしまったのだろうか。「インターネットバンクご利用の際は...」と書いておけば、今回の「セキュリティ強化」はあまり必要性がないだろう。 少なくとも、選んだ画像を表示させる機能については、必要がないどころか、偽サイトを正規のサイトと誤認させる可能性を高めており、むしろリスクを増やしていると言える。 なぜこのようなものが公になってしまったのだろうか。偉いさんが政治的な理由で「セキュリティを強化せよ」と指令を出したのか、それともお金の欲しいベンダー側から提案がされたのかは分からないが、事情を分かっている人はこんなものは止めさせるべきじゃないのか。それが技術者の良心というものだろう。 (2008/8/22追記) 先日ログインしたとき、実際にこの機能を使うことになってしまった。 「合言葉」機能については、あらかじめ用意された質問の中から選ぶ仕組みだった。 しかし「大学の研究室名」とか「母親の誕生日」とか、ちょっと調べればすぐにわかりそうで、パスワードを奪うよりも容易な気がする。 画像に関しては、自分の選んだ画像がログイン時に表示されるようになった。これをみて安心してしまう人が出てくるなら、本当に危険だ。

2008年8月2日 · 1 分

avast利用開始

ウイルスバスターの有効期限がもうすぐ切れるので、アンインストールしてavastを導入したら、超快適。 これまでスタンバイからの復帰に何分もかかったりしてたけど(そんな状態を放置する俺も俺だ)、これに限らずあらゆる動きが加速して快適になった。 というかバスター糞。ゴミ。悩んでる人は期限なんか気にせずに、即アンインストールした方がいい。間違っても、値引きにつられて3年版なんて買わないように(もっとも、次のバージョンで劇的に改善される可能性は無くはないけど…)。

2008年7月30日 · 1 分

英語キーボード

なんだか英語キーボードが復権しつつあるのだろうか。 少し前から、Thinkpadは英語キーボードのモデルを変えるようになった(一部モデル限定)。さらに、Let’s noteもW7は英語キーボードを選べるようになったようだ。 W7だけなのか、とかお金取るのか(\3,150-)とか、突っ込みたい点はあるけど、英語キーボードが入手しやすくなってきたのは良いことだ。良いというか、助かる。 そういえば最近流行のネットブックなどは、わざわざ日本向けにキーボードを変えずに、英語キーボードのものをそのまま売ったらいいのに(HPみたいに)。

2008年7月24日 · 1 分