msconfig.exe

先日、ジャストシステムのxfy plannerを試用しました。タスク管理ソフトウェアとしては全体として好印象です。スケジュールはGoogle Calenderを離れられませんが、連携機能もあるし・・・と思っていたら、Google Calenderにタスク機能が付くらしい。そっちの出来をみてレジストするかどうかを決めようと思いました。

そこまでは良いんですが、使用期限が切れたxfy planner・・・というか、ジャストのライセンスチェックツールが1時間ごとに「ライセンス切れてるぜー」とツールバーで通知してくれます。xfy plannerを起動しているときに言うのならまだしも、もう起動できないのに言う。サービスを見てみるとなんかライセンス管理サーバみたいなのが動いてるので止めてみました。すると、「ライセンスサーバにアクセスできないよー」と1時間に一回言ってくれるようになりました。

がっかりだぜ、ジャストシステム!

タスクマネジャーから、それっぽいプロセスをkillったら止まりましたが、マシンをリブートするとまた出てくる。

Windowsでプログラムを起動時に立ち上げるには、いくつか方法があります

  • スタートメニューのスタートアップ
  • 古き良きsystem.iniファイル
  • レジストリのどこか

最近は大抵最後の奴です。止めるプロセスは判っているので、regedit.exeを起動してそのプロセス名で検索。Runというキーに紐付いていたらサクッと削除して止まりました・・・が、まあ、普通の人は出来ないよね、コレ。

ところが、今月のSOFTWARE DESIGN誌を見てたら、ウィルス関連の記事でmsconfig.exeというものの存在が。これで変なプロセスがブート時にあげられてないかチェックしようって記事だったんですが、なんとこんな便利なものがあるとは知りませんでした。

トレンドマイクロのサイトにも使い方が載ってたりします。あれー、有名なのかなー?

| | Comments (1) | TrackBack (0)

三項演算子の正しい書き方

訳あってKsh93について調べていたんですが、Ksh93には三項演算子があったりします。三項演算子でググっているとこんなページを見つけました

三項演算子?:の正しい書き方

条件演算子は、正しくは以下のように書く。

condition ? true-expression
          : false-expression

なるほど、知りませんでした。確かに上げられている例を見てもわかるとおり、三項演算子はそれ全体の値を使いたいから使うのだというのがこう書けば明確に理解できます。

はてブのコメントを見ると、三項演算子は「if文を1行で書きたいとき」に使うのに改行しちゃ意味がないという意見があるんですが、別にif文を1行で書きたいんなら

if(i > 0){
    printf("OK\n");
}else{
    printf("NG\n");
}

if(i > 0)printf("OK\n");else printf("NG\n");

にするだけでいいわけですよ。これを

i > 0 ? printf("OK\n") : printf("NG\n");

にしても長さは4文字分しか変わってません。これじゃ「三項演算子なんてイラネ」と思うのも当然のこと。しかし、「三項演算子は簡単なif文を書くときに使うモノ」というのはそもそも誤解なわけです。

というのは、

if(i > 0){
    a = 1;
}else{
    a = -1;
}

a = i > 0 ?  1
          : -1;

と書きかえるのは同じ処理でも、明確に意図が違います。三項演算子は「条件によって値が違う」ことを表現する記法だということですね。

それにしても、

a = i >  0 ?  1:
    i == 0 ?  0:
             -1;

こういう書き方もあるとは。驚きです。

| | Comments (0) | TrackBack (0)

イーモバイルD01NXが刺さるモバイルルータ「クティオ」

IIJとhi-ho、バッテリ駆動可能なモバイルルータ「クティオ」(ケータイWatch)

 動作確認済み端末は、CFカード型端末が下り最大3.6Mbps対応の「D01NX」と下り最大7.2Mbps対応の「D01NX II」で、USB端末は下り最大7.2Mbps対応の「D02HW」。IIJの高速モバイルデータ通信サービス「IIJmio高速モバイル/EMサービ ス」とハイホーの「hi-hoモバイルコース-EM7.2」に加え、同等端末を利用するイー・モバイルのサービスでも利用可能という。

わーい。D01NXユーザーの私は大喜びです。だって、絶対USBの端末よりCFカードの方が収まりがいいしね!

| | Comments (0) | TrackBack (1)

Javaの掟 Rubyの掟

池袋ジュンク堂のトークセッション「Javaの掟 Rubyの掟」を聞いてきました。

内容はたぶんそのうちニコニコ動画にでも上がるんじゃないかと思いますので、感想メインで書き連ねます。

まず、「コーディングの掟」の話。やっぱり盛り上がったのはバージョン管理の話。artonさんが「意外と使ってないところあるんだよ。(プロジェクトの)人数が多ければ多いほど使ってない場合が多い」という話をしてました。私もそれは実感があります。それは、要するに人数が多いほど単一の文化を浸透させるのが難しいってことに他なりません。

「書いたらコミットしてくださいよー」ぐらいまでは何とかなっても、ブランチとかリリースとかの文化は厳密にはプロジェクト依存になるのでなかなか・・・。台帳管理なんてのも結構あるよとartonさんが言って、周囲がびっくりなんて感じでしたが、私にとっては普通です(笑)。リリース管理台帳のExcelからcvs rtagを打つRubyスクリプトとか書いてますし。るいもさんがどういうことから台帳管理になるかという話で「リリースをミスってお客様に謝るときの"歯止め"として言い易い」というのは納得です。ついつい、ミスの防止策を「手順書作る」っていうのと「台帳管理する」ってのにしちゃうんですよね・・・

次に、「Ruby(1) はじめてのプログラミング」の話。この本はそもそも、「コンピュータって何?」っていう人がRubyを最初の言語としてプログラミングを学ぶというコンセプトの本。同時に「PHP版」と「Javascript版」もあるらしいです。「C版」も出るという噂が・・・。というわけで、artonさんとるいもさんがこれまでの初心者本の不満点を解消し、「このぐらいは常識としてしっとけー」と思いの丈をぶつけた本。なので、タイトルに「Ruby」とデカデカ出ているのに80頁目ぐらいからやっとRubyのインストール(笑)。そういう意味で型破りですが、artonさんは「これをやるためには、これを説明しとかなきゃいけない。でも何もかもいきなり説明してもわからない・・・」というのをパズルのように組み上げているわけで、たぶんそれはなかなか楽しいことだと思いますけど、まあ、大変ですよね。

思えば自分はそういう地味な話は何で覚えたかというと、私、大学の時になんとなくで情報処理2種試験を受けてるんですよね。その時の参考書を最初から最後までざっと読んで、それだけです。後は、当時「ざべ」とか「Cマガジン」を読んでいてちょいちょい拾ってるぐらい。ちゃんとした教育は受けてません。でも、逆にそれぐらいで十分だったような気もするんですよね。

最後に、高井さんがJRuby部分を補完したという「JavaプログラマのためのRuby入門」について。私は母国語がRubyでJavaは文法ぐらいは頭に入ってるけど日常会話にも事欠くというレベルで「RubyからJavaへ」が欲しいんですが、この本は実は、「Rubyではこう書く。Javaで同じことを書くとこうだ」という順番で書いてあるので、Rubyistの私が読んでもすごく勉強になります。

私は最近はRubyしか書かないので、空気を吸うようにイテレータを使いますが

def block_arg(x, &proc)
  proc.call(x)
end

block_arg('hello') do |x|
  puts x + ' world!'
end

をJavaで書くと、

interface Block {
    void call(String x);
}
static void block_arg(String x, Block b) {
    b.call(x);
}
public static void main(String[] args) {
    block_arg("hello", new Block() {
            public void call(String x) {
                System.out.println(x + " world");
            }
        });
}

だという部分とか、ものすごーく勉強になりました。でも書ける自信がないっす(笑)。というか、後者を書いてまでブロックを渡したいと思うかってことですよねえ・・・

ダックタイピングやmix-inの説明のところで

この例から、Rubyのプログラミング言語としてのパワーに比べて、Javaで同様のプログラムを開発するには設計力が要求されることが理解出来ると思います。逆に、ここで示したようなRubyの実装からJavaプログラムの設計へ落とし込みができれば、プロトタイピング言語としてRubyを利用し、プロダクト言語としてJavaを利用することも可能となります。

と書いてあります。

ホワィの(感動的)Rubyガイドで、「これはもうプログラミング言語じゃなくて、プログラマ言語だ」というくだりがありますが、RubyのRunableな仕様記述言語の可能性というか、Ruby脳だから有り得る理想的な設計とか、そういうものまで感じます。Lisp遣いの皆様には単に「視野を広くできただけじゃん?すべてLispにあるよ」ということになるのかもしれませんが(笑)

私は先日書いたみたいに、Cを勉強してC++がなんのこっちゃわけがわからずに、Delphiでやっとオブジェクト指向(で作られたクラスライブラリってどんなのか)を理解したんですが、Rubyをやって初めてオブジェクト指向のありがたみが本当の意味でわかりました。でも、単にRubyが協力にオブジェクト指向を体現する言語でRubyだけで考えていればオブジェクト指向が単純に見えるからわかったような気がしていて、Javaのような言語でオブジェクト指向で設計するというレベルは全然わかってなかったんだなあと思ってしまいました。

高井さんが、Javaの人がRubyのプロジェクトをやっても「わりとイケる」という話をしてましたが、そりゃそうでしょう。Rubyなんかより、よっぽどJavaの方が難しいってことですよね。

というわけで、思いの外(と言ったら失礼ですが)、この日紹介された本の中では「JavaプログラマのためのRuby入門」が面白かったです。

トークセッション全体も和気藹々で楽しかったです。また、機会があったら参加してみたいですね

| | Comments (0) | TrackBack (0)

宇野るいもさんのRuby本

無断で宣伝します。

去年、浜松でメモリ不足のJavaEEアプリをあやしながら途方に暮れていると、私のすすり泣く声を聞きつけた上司がどこかに手を回してくれたらしく助っ人が現れました。その助っ人は、月曜の朝、颯爽と現れてぱぱっと直して、水曜の朝から上海に出張していきました(笑)。

それが、Hさんでした(後で名前バラしちゃいますが)

Hさんはやってくるなり私のPCにRubyが入っていることに気づき、 ニヤリとなさいました。む?なんで?

そして、仕事終わりに 浜松の串ともで二人で串揚げを食べているときにHさんが言いました。

「今度、artonさんという人と共著でRubyの本を書くんですよ。 前もartonさんとは本を書いたことがあるんですけど」

おー、artonさんといえば、邪道編を読んで以来、密かにファンですよ。

artonさんのblogもよく見ています。artonさんの文章は面白いですな。 blogの方はなんのこっちゃさっぱりわからないことも多いですけど。

しかし、それならHさんの名前も知っていてもおかしくないよな・・・と後でいろいろ探ってみると、 実はHさんの正体は宇野るいもさんでした<言い方が逆だろう。

artonさんの共著というのは「コーディングの掟」のことだったんですね。 割と話題になったような気がしますが、私は読んでません。 だって、Javaわからないんだもの。

さて、そのRubyの本というのはもうすぐ発売のこれだったらしいです。Rubyで初めてプログラミングを学ぶ人の為の本だそうです。私はイマイチ対象読者から外れてる気もしますけど、そりゃあ買いますよ。買わないわけがありません。皆さん(誰?)も買いますよね?買わないわけがありません。

また、artonさんは「JavaプログラマのためのRuby入門」という本も書いているらしい。でもコレも私は対象読者から外れてます。それより「RubyプログラマのためのJava入門」が欲しいです。

JavaだってRubyやその他の言語からかなり影響を受けているハズで、正規表現もイテレーターもクロージャー・・・は落ちたらしいけど、いろいろと「もだん」な機能なり、書き方なり、APIなりがあるはずだと思うですが、プログラマ向けJava入門書の決定版みたいなものがない気がするのです。そろそろいい加減Javaのコアは落ち着いていると思うので、「ふつう、イマドキのJavaプログラマはこう書くよね」的な本が読みたいなあ。それこそ、「Apache Commons」ぐらいは前提で!みたいな感じ。

うーん?需要ないですか?るいもさんにリクエストしてみましょうか。迷惑がられますか、そうですか。


| | Comments (0) | TrackBack (0)

ポメラ

入力はテキストデータだけ――折りたたみ式キーボード搭載の「ポメラ」(IT media)

キングジムは、テキスト入力ツール「ポメラ」を発表した。折りたたみ式キーボードと4インチのモノクロVGA液晶画面を搭載。入力できるデータはテキスト(TXT形式)のみで、日本語入力環境は組み込み向けのATOK 2007を採用した

/.Jで「これを買わなきゃ嘘つき呼ばわりされる」とまで言われてます。確かに、「こんなのあったらいいよね~」というギークの妄想のかなりイイ線をついています。コンセプトとしては、「打った内容を覚えておいてくれる携帯キーボード」ですかね。面白い。ここへあえてATOKを積んできたところがニクい。「イマドキ、128kて!」「8000文字て!」「640×480あって、全角40文字の幅がないなんて!」と突っ込むところはいろいろありますが、心意気は素晴らしいです。それだけで買わないと!

でも、基本、フルサイズのキーボードですよね?それを、机の上に広げるけど、ノートPCを持っていないっていう状況は私にとってはちょっと考えられないかもしれない(笑)

それに、スタパトロニクスの記事をみて、MVPenを買っちゃったばっかりなんですよね。まだ届いてないんですけど。

| | Comments (0) | TrackBack (0)

Ruby版 sort |uniq -c

[ruby-list:45572]は、awkで

/t$ cat A
yahoo
goo
google
yahoo
msn
msn
/t$ awk '{ class[$1]++ } END { for (i in class){print i, class[i]}}' A
google 1
msn 2
goo 1
yahoo 2

の様にやるようなワンライナをRubyでやるにはどうすればいいかという話題です。

/t$ cat A |sort |uniq -c
      1 goo
      1 google
      2 msn
      2 yahoo

でいいじゃまいかという意見もありますが、例えば先頭1文字が同じものでカウントしたいなどいろんな場合があるでしょう。

私も同じようなスクリプトは毎日書いてます。Apacheのログからユーザーごとのアクセス数を出すとか普通のことですよね。スクリプト言語が書けない人はどうやって仕事してるのか、とても不思議です。

sortとuniqの結果と同じものをRubyで出すのは、こんな感じでしょうか。これぐらいなら特に何も考えずに書けます

/t$ cat hoge.rb
#!/usr/bin/env ruby

h = Hash.new(0)

while line = gets
  h[line.chomp] +=1
end

h.to_a.sort{|a,b| a[0] <=> b[0]}.each do |i|
  puts "\t#{i[1]} #{i[0]}"
end
/t$ hoge.rb A
        1 goo
        1 google
        2 msn
        2 yahoo

ワンライナと言われると、ちょっと悩んじゃうな。

るびきちさんが、まず、上のawkの直訳版を出してくれています。awk - Perl - Rubyというのは直系の子孫のようなものですからawkで出来るようなことは、大抵Rubyでも(ちょっとめんどくさくなるけど)出来るようになってます。普段、RubyをRubyらしく使っているとあまり使わない機能かもしれませんけど。

こんな感じらしいです。

/t$ ruby -lne '(h||=Hash.new(0))[$_]+=1;  <==実際には改行なし
END{for k,v in h do print k," ",v end}' A
yahoo 2
google 1
goo 1
msn 2

コマンドラインの-nはPerlゆずりのワンライナ支援機能。ループを勝手にやってくれます。-lは$_がchopした形で得られます。これは初めて知りました。見逃してるものが結構あるんだなあ。awkのBEGIN{},END{}もあったりします。まあ、普通にスクリプトを書いてるときは滅多に使うことはないかもしれません。

h||=Hash.new(0)

h = Hash.new(0) unless h

です。Perlっぽい書き方ですね(ほんとか?)

石塚さんの回答は、

/t$ ruby -e "puts ARGF.group_by{|w| w}  <==実際には改行なし
.map{|key, ary| [key.chomp, ary.size].join(' ')}" A
-e:1: undefined method `group_by' for ARGF:Object (NoMethodError)

ありゃ・・・?

/t$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin]

すいません。Rubyが古かったです・・・orz

めんどくさいのでcygwinを丸ごとアップデートしてっと、

/t$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
/t$ ruby -e "puts ARGF.group_by{|w| w}  <==実際には改行なし
.map{|key, ary| [key.chomp, ary.size].join(' ')}" A
google 1
msn 2
goo 1
yahoo 2

確かにできてますが、高階関数は頭を使います。えーっと・・・、わからん。irbで追っかけてみましょう。

/t$ irb
>> lines = File.readlines("A")
=> ["yahoo\r\n", "goo\r\n", "google\r\n", <==実際には改行なし
"yahoo\r\n", "msn\r\n", "msn\r\n"]

まず、各行の配列を作っておきます。ARGFはこれと同じ扱いが出来る組み込み変数です

>> lines.group_by{|w| w}
=> {"google\r\n"=>["google\r\n"],
    "msn\r\n"=>["msn\r\n", "msn\r\n"],
    "goo\r\n"=>["goo\r\n"],
    "yahoo\r\n"=>["yahoo\r\n", "yahoo\r\n"]}

それをgroup_byする。この例だと、group_byがどういう動作をするのはよくわからないですけど

>> lines.group_by{|w| w[0,1]}
=> {"m"=>["msn\r\n", "msn\r\n"],
    "y"=>["yahoo\r\n", "yahoo\r\n"],
    "g"=>["goo\r\n", "google\r\n"]}

こういう例だとわかりますね。確かに分類してます

>> lines.group_by{|w| w}  <==実際には改行なし
   .map{|key, ary| [key.chomp, ary.size]}
=> [["google", 1], ["msn", 2],
    ["goo", 1], ["yahoo", 2]]

そして、各組の数を数えて

>> lines.group_by{|w| w}  <==実際には改行なし
.map{|key, ary| [key.chomp, ary.size].join(" ")}
=> ["google 1", "msn 2", "goo 1", "yahoo 2"]

出力を作って

>> puts lines.group_by{|w| w} <==実際には改行なし
.map{|key, ary| [key.chomp, ary.size].join(" ")}
google 1
msn 2
goo 1
yahoo 2
=> nil

putsと。putsって配列に対して実行するとこうなるんですね。

なかなか面白いです

| | Comments (0) | TrackBack (0)

ホスト名に"_"を含んではいけない

高可用性システムを組んでいると、マシンに起動時に付いているIPアドレスと、サービス提供用のIPアドレスの二つをつけるなんてことは普通にあるわけです。

例えば、tokyo, osakaという二つのマシンがあって、こんな/etc/hostsを持っているという場合ね。

  tokyo 192.168.1.2
  osaka 192.168.1.3
  nippon 192.168.1.1

で、tokyoが本番機、osakaが待機機だとすると、192.168.1.1をtokyoにaliasとして付けて通常はnipponというホスト名でアクセスすると。

で、こういう構成の場合、私は今までこんなホスト名の付け方をすることがよくありました。

  websrv01_boot 192.168.1.2
  websrv02_boot 192.168.1.3
  websrv01 192.168.1.1

起動時についてくるアドレスには”_boot”を付けて区別しているわけです。今までこれで特に問題になったことはありませんでした。

ところが、ちょっと理由があって、この_bootが付いたアドレスでちょっとしたWebアプリを動かそうとするとセッションが使えないという問題が起きました。

どうも、"_"を付けたホスト名はイカンらしいです。

ホスト名(Wikipedia)

ドメイン名と違い、ホスト名のラベルはASCII文 字の'a'から'z'まで(大文字小文字は無視される)と、'0'から'9'の数字そしてハイフンだけを使うことが出来る。ラベルの最初と最後の文字にハ イフンを使うことは出来ない。ハイフン(そしてラベルの間に打つドット)以外の特殊文字は時に誤って使われるが許容されない。 また、アンダースコアはWindowsで構築されたシステムで一般に使われるが、RFC 952によれば許容されない。

あちゃっ!知らんかった・・・

もっとも、昔は動いちゃってたらしいです。

[PRB] Internet Explorer セキュリティ修正プログラム MS01-055 のインストール後、セッション変数が要求間で保持されない

現象 Microsoft Internet Explorer 5.5 または 6.0 用のセキュリティ修正プログラム MS01-055 のインストール後、次の問題が発生することがあります。
セッション変数が失われる。
要求間でセッション状態が維持されない。
クライアント システム上で Cookie が設定されない。

原因 セキュリティ修正プログラム MS01-055 では、不適切な構文を使用した名前のサーバーは Cookie 名を設定できません。Cookie を使用するドメインでは、ドメイン名およびサーバー名に英数字 ("-" または ".") だけを使用しなければなりません。サーバー名にアンダースコア ("_") など、その他の文字が含まれている場合、Internet Explorer は Cookie をブロックします。

これが、2005/07/11の記載です。あふん・・・

今後、気をつけますです

| | Comments (4) | TrackBack (0)

C++言語のカラクリ/επιστημη

επιστημηさんと言えば、その昔、「Cマガジン」で連載されていた印象が強いんです。ただ、あの頃、まるで連載の中身は理解できなかった覚えがあります。もちろん、C++も入門書ぐらいはちらちらと齧ってはみたんですが、全体を貫く思想がうまく見えない印象があって好きに慣れませんでした。その後のSTLなどの発展にはまるでついていってません。

そんな私がこの本を買ったのは、単なる郷愁。ちょっと懐かしかったんです。Amazonのレビューに、「面白いが雑誌の記事みたいで、それでこの値段は・・・」みたいな意見がありましたが、まさにそういうのが読みたかった(笑)。だって、今、コンピューター雑誌って「Web+DB Press」しか読んでませんよ。あの頃好きだった「ざべ」も「Cマガ」も「UNIX Magazine」も、ぜーんぶなくなっちゃいましたもの。

さて、中身ですが、最初は、なんでC++コンパイラを作るのにまず、Cで書いたC++インタプリタを書くところから始めるのかという「自己記述された処理系」の話。これは全然C++の話に限定されないので、ふむふむいいながら興味深く読みました。でも、ふむふむ言ったわりには多分、これは人には説明できないと思います(笑)

次に、C++でhallo.cppを書いたとき、coutはいつnewされたのかと言う話。いわゆるブートアップの仕組みの話ですね。ブートアップの話は無から有を生み出すための話なので、PC-ATも、Linuxも、Javaもどれも面白いですよね。ブートの話、大好きです。

この先、仮想関数の関数テーブルの話、テンプレートの実装の話と、ちょっとC++的にディープになって、最後にわんくま座談会です。こっぴどく理解しようと思わなければするすると読めて、2000円。まあ、びっくりするほど高くもないし、なんか懐かしかったです。別に読んだからといって、得られるのは雑学だけかもしんないけどね(笑)

| | Comments (0) | TrackBack (0)

hikiでエラー

最近は自分が管理する開発用サーバには勝手にWikiをつっこみ、開発者への連絡や環境のガイド資料を載っけておくのが常になっています。Wikiなんで勝手にページ作ってみんなにも利用して欲しいのですが、なかなかそこまでは行きません。

というわけで、以前はPerlで実装されたWikiクローンを入れていたんですが、最近はAIXにも気にせずRubyを突っ込んでしまうのでHikiを入れる事にしました。RD万歳!

ところが、Hikiで保存しようとするとエラーが・・・むむむ?

とりあえず

http://www.kurano.jp/blog/sadayuki/articles/search?q=flatfile
http://d.hatena.ne.jp/ke-k/20060626

この辺を参考にfileutil.rbにちょちょっと手を入れちゃいました。でも、ちょっとどうなのよ、これ

| | Comments (0) | TrackBack (0)

FF専用機定期更新

ここのところ忙しくて、ブログの更新もままならないTambourineです。まあ、年に1,2ヶ月ぐらいはこんなこともあります。後の10ヶ月はぼーっと暮らしていますから、仕方ないですね。

さて、そんな忙しい毎日を送っていると、ストレスが溜まります。ストレスが溜まると、衝動的な行動に出てしまいます。そんなこともあり、つい、深夜作業中に新しいPCを買ってしまいました。

むしゃくしゃして買った。今は反省している

というわけで、最近、不可解に動きが刺さったりHDDが足りなかったりしていていたFF専用PCの更新です。前回の更新が一昨年の6月なので、およそ2年。まあ、そんなものかな。それより、車を買い換えたのが丁度、去年の今頃。大体、連休のサービスイン前の忙しい時期に同じような行動にでていることがわかります(笑)

さて、前回買ったマシンのスペックは、こちらVAIOのType BX(VGN-BX90S)です。トラックポイント付きで、Thinkpad遣いには扱いやすいマシンでした。

今回求めるスペックの前提ですが、なによりFF XIをやるためのPCなので、GPUがチップセット内蔵ではないことです。その時点で選択肢はぐっと狭まります。最近の内蔵チップはそれなりに頑張るとか、頑張らないとか、ドライバーが一向にでないとかいろいろ噂はありますが(GMA X3100のことネ)、X3100でいいんなら迷わずにMac Bookを買うわけですよ(笑)

その他、求めるスペックは以下

  • 安いこと。なんせ使い方が乱暴なので2年ぐらいしか保ちません。高くても15万以下。そもそも高くていいのなら、Mac Book Proを買うのですよ(笑)
  • 軽いこと。今のVAIO Type BXは2.5kg。それでも毎週の家とホテルの往復で腕が抜けそうになります。仕事用のThinkpad X60も別に持ってますからね。金曜日の帰りは耐えかねて、名古屋駅からタクシーに乗ってしまうこともあります。3kgはありえねえな・・・
  • できればXPモデル。プリインストールにVISTA SP1が載ってくるのは夏以降らしいので、すくなくともそれまではVISTAは御免です

ということでざっと探してみるんですが・・・うーん、やっぱりVAIOしかないなあ。

VAIOにすればACアダプターを使い回せて荷物が少しへるとか、ケータイがW53S、動画ビューアーとしてPSPを持ち歩いている都合上、メモリースティックが読めるほうがいいとか、そういう個人的な都合もあるんですが、それを抜いて考えても、GPU付きのハイスペックモバイルPCって全然ないじゃないですか。探し方がよくなかったのかなあ。でも、日電、富士通、東芝、シャープ、松下と日本メーカーのサイトはざっと見たんですが、全滅。悲しいよ、おいらは。

というわけで、VAIO Type S。当然、XPモデルのVGN-SZ94PS。BTOで最小構成に引き絞って124,800円。ソニースタイルで注文しました。構成はこんな感じです。

Vaiotypes

さて、今使ってるマシンと比較すると

 VGN-BX90SVGN-SZ94PS
CPU Pentium M 740(1.73GHz) Celeron 530(1.73GHz)
Mem 512MB 512MB
GPU Mobile Radeon X700 GeForce 8400M GS
HDD 40GB 80GB
重量 2.5kg 1.75kg
\117,800 \124,800

あんまり変わらないね・・・

CPUはDothanコアからMeromコアへ変わったわけですが、偶然にもまったく同じクロック。かたや(たぶん)P6アーキテクチャ、かたやCoreアーキテクチャ。2年の進歩はいかほどなんでしょう。ちなみに、私にとってこのマシンをデュアルコアにする意味は皆無だったので、Celeronの設定があるのはありがたかったです。安いしな!

メモリは1GBにしてもよかったかもしれん・・・まあ、けちった(笑)

GPUもあんまり差がないかもしれません。まあ、どちらもそこそこ。

HDDは倍。これより小さいのないし。FFXIとiTuneのライブラリしか入れないので倍になれば十分でしょう。FFXIの拡張ディスクが毎回5GBぐらいあって、5枚で25GBまで増えたのが誤算でした。

そして、重量は大幅だーうん。ここがいちばん嬉しいです

そして、納期はなんとBTOなのに来週の日曜日。はやっ。ソニースタイル優秀だなあ

| | Comments (2) | TrackBack (0)

Ruby検定 答え合わせ

さて、答え合わせ

第1問

正解でした。Rubyがnilとfalse以外は正になるというのは、スクリプト全体でグローバルというか、いわゆるシングルトン的な扱いをする変数を使うときに便利ですよね。

とりあえず、hogeってハッシュに入った配列に次々にpushしておきたいときなんかに、そのキーに対応する配列がすでに作られているかわからないようなコードの場合に

hoge[name] = Array.new if hoge[name]

とか書いちゃう。

第2問

間違いました。予約語なんて意識したことないです。thisとgotoに特別な意味がないことはわかりますが、superってなんでしたっけ?他のも別にその名前のメソッド作れたりするような・・・

第3問

正解しました。!とnilがくっついてていいのかわからなかったんですが、!は演算子だからOKなのね?

第4問

正解しました。特に悩むことなし

第5問

間違いました。よくみたら、どっちもtrueのときにしかいかない(笑)

第6問

正解しました。これも悩むところ無し

第7問

間違いました・・・というか、これが1.9から変わるんじゃなかったっけか

第8問

正解しました。これも迷うことはなかったところです。

第9問

正解しました。変数とオブジェクトの関係がわかってますか?って奴ですね

第10問

正解しました。でも勘です(笑)

これは、オブジェクトが同一か同値かという話ですな。

Rubyでは同じか否を比較するのに

  • ===
  • ==
  • eql?
  • equal?

あたりが使われることになりますが、通常は==で問題ないはずです。

で、これ、Javaと違うから混乱するんですよねー

第11問

正解しました。これは普段から書いてれば迷う事はないでしょう。

第12問

正解しました。RangeはRubyを使っていて嬉しいクラスのひとつですね。とても便利です

第13問

間違いました。というか、BとC、どちらも正しいので悩んでいたら両方正解でした。ええーっ。この問題は「すべて選べ」って書いておかないとだめでしょー

第14問

正解しました。なぜかString#reverse再登場

第15問

正解しました。でも悩みました。(1..10)と(1...10)の違いは両端を含むかどうかだと勘違いしてました。右端だけかー

あと、解説にいちゃもんですが、単純に10回実行させたい場合は

10.times{ ... }

が普通だと思います。

第16問

間違いました。つか、勘違いです。代入が再定義できたら、ワケわからん!

逆に<=>の再定義は普通ですね。これをちゃんと定義しておくとsortが使えるようになるので嬉しいのです。自分でクラスを作って、後々よく使いまわせそうと思ったら

* ===
* each
* sort
* inspect
* to_s

あたりをちゃんと定義しておくとハッピーかも

第17問

正解しました。でも、配列の引き算ってどうなる?って聞かれると思い出すんですが、これで済むことに気がつかずに

ary1.delete_if{|i| ary2.include? i}

とか書いちゃうことがよくあります。 

第18問

正解しました。これも引き算と同じで、足してからuniqしちゃいそうです。

第19問

正解しました。でも、なんかトリビアル

第20問

間違いました。えー、requireぐらいしとこうよ。

で、和暦ってパースできるのかな?

>> require 'time'
=> true
>> t1 = Time.parse("S54.7.16 12:00")
=> Mon Jul 16 12:00:00 +0900 1979

うお、普通にできとる。


 

というわけで、正解は14/20でした。まあまあですか?

| | Comments (0) | TrackBack (0)

Ruby検定に挑戦してみた

2000年頃、1.4時代からのRuby遣いです。Tambourineです。

とはいうものの、毎日ちょっとしたスクリプトを書くのにもリファレンスマニュアルやrefeが手放せません。頭が悪いんでしょうか。でも、%記法とか、Fileクラスとか、標準添付ライブラリとか覚えられませんもの・・・ごめんなさい。嘘です。EnumerableもArrayもStringもしょっちゅう調べます。私がPerlをどうしても使えないのはオンラインの日本語のリファレンスが簡単に見られないからかもしれません。

そんな私ですが、ITProで公開になっているRuby検定予想問題をやってみました。

・・・んー、難しいなー

結果は70点でした。私の結果はこちらです。2/2の解説の公開が楽しみです。

| | Comments (0) | TrackBack (0)

Life12/30放送「文化系大忘年会」が面白い

前にもお気に入りのPodcastとして文化系トークラジオ Lifeについて書きましたけど、年末最後の放送の「文化系大忘年会」はすごく面白かったです。サブパーソナリティの方々が今年出た本から3冊選んで紹介するコーナーでは、気になっていながら手が出せていなかった本や、まったく知らなかった本がいろいろとあって、自分の勉強不足を思い知りましたし、その他、「ニコ動-アイマス-初音ミク」や、「電脳コイル」話、ヤンデレ話等、気になってるけど周りにこの話題で話が出来る人がいなくてつまんないなーと思っていた話題がいろいろと出て、お腹いっぱいになりました。しばらく、このブログで扱う話題も、この放送で出た話題にちょっと偏るかもしれません。それぐらい面白かったし、LifeのページのAmazonアサマシはいっぱい踏んじゃいそうです。

簡単に「オタクのヨタ話」と言い切れないけど、「文化人の語らい」とも言えない、まさに自分が居たい場所の語りだったのですよ。この場所に居られれば、絶対に毎日が楽しいというような。男も30過ぎて仕事に追いまくられてるとなかなか本を読んだり、アニメや映画を観たり、ネットをウォッチしたりって出来ないかもしれないですけど、試しにこの回のPodcastを聞いてみて楽しいなと思ったら、あなたには別の世界が待ってるかもしれないですよと、すべての同年代の人達に言いたいです。とりあえず、聞いてみて!

・・・といいつつ、どうもTBSのポッドキャストのサーバは能力不足のようで、夜は満足にダウンロード出来ないんですけど(笑)

| | Comments (2) | TrackBack (0)

Ruby1.9 リリース!

1年前の宣言通り、そして、おおかたの(遅れるだろうとの)予想通り、Ruby 1.9がリリースされました。おめでとうございます。

2007年クリスマスのリリースを予告していましたが、2007/12/26 0:02にリリースのメールが流れました。日付変わってるし(笑)。あー、まあ、日本以外じゃOKだし。私は単にファンの一人としてワクワクしながら見守ってただけですが、開発者のみなさんはホントにすげえと心から思います。

Rubyにとっては、1.0が出て以来、初めての大きな変化。まだ当分の間安定した動作が必要な場面では使われることはないでしょうが、私のような単なるファンはとっととドックフードを食べなきゃいけません。自分のマシンにはActiveScriptRuby版とCygwin版が入っていますが、Cygwinの方だけでも1.9にしちゃおうかな。でも、ruby-devの12/25をちらちらと読んでいたら、リリースぎりぎりのTODOに「Cygwinでmake通らないらしい」なんてのが載ってたりして。まあ、いいか(笑)

それにしても、ブロックパラメータの変更は、普段、意識もしないで使っちゃってるので、間違えそうだなあ・・・

| | Comments (0) | TrackBack (0)

Prototype.jsをやっとこ触ってみたり

プロジェクト内で使用するちょっとしたCGIを書いています。んで、ボタンを押すと画面内の表示が出たり消えたりするようなものを書きたかったのです。

実は、入社当時にちょっとしたプロジェクトで書いたことがあったので、コピペしました。動いた。私のJavaScriptの知識はこの頃が最高です(笑)。

こんな感じ

<style  id=stl name="stl">
.sample {display:none;}
</style>

<script>
<!--
var cssStyleSheet = document.styleSheets["stl"];

function showBlock(paramClass){
  var myStyle;
  for(i=0; i < cssStyleSheet.rules.length; i++){
    if(cssStyleSheet.rules.item(i).selectorText==paramClass){
      myStyle=cssStyleSheet.rules.item(i);
    }
  }

  if(myStyle.style.display == "none"){
    myStyle.style.display = "block";
  }else{
    myStyle.style.display = "none";
  }
}
// -->
</script>

<div class="sample">ここが出たり消えたりする</div>

<input type='button' value="click"
         onClick='showBlock(".sample");'/>

ドキュメントではなく、スタイルシートの方を変えに行ってしまうところがバッド(笑)

ところが、IEでは動くけど、Firefoxでは動きません。ま、今回の目的には別に構わないんですけどね。しかし、なんとなく釈然としないし、これを書いた2001年当時ならいざ知らず、今はブラウザの差を吸収するコードはライブラリに任せるのが当たり前という世の中です。

というわけで、JavaScriptをRubyに近づける為のライブラリ(違)であるPrototype.jsをちょっとだけ勉強してみました。ほう、$$関数というのを使えば同じclass属性の要素を取ってこられるんですな。そして、取ってきたものにイテレーターで処理できると・・・ふむ、toggleなんてメソッドが要素に追加されるんですか・・・。

・・・えーっと 

<script type="text/javascript" src="prototype.js"></script>
<div class='sample'>ここが出たり消えたりする</div>
<input type='button' value="click"
         onClick='$$(".sample").invoke("toggle");'/>

ぐはっ、これだけで終わりなのか!

すごいな、Prototype.js。こんなの知ったら、もう、素のJavaScript書けんじゃないか・・・。やっぱ、常に勉強はしてないとだめだなあ・・・

| | Comments (1) | TrackBack (0)

TVClock

プロジェクトルームで席替えがありまして、自分の席から部屋の時計が見られなくなってしまいました。

もちろん、腕に時計もしているし特に不便というわけでもないのですが、ちょっと悲しい。目の前に、稼働監視用のディスプレイがどーんとあるので、ここに時計を表示させておくのがよいでしょう。

さて、デスクトップ用の時計といっても、Windowsのプログラマが一番最初に作ろうとするのが時計だというぐらいポピュラーなものですから嫌になるぐらいの種類があります。定番ものって何になるんでしょう・・・EmiClock?(笑)

久しぶりにEmiClockも見てみましたが、さすがに稼働監視端末で

「みゅっ!」

って言わせてる場合でもない気がします<当たり前です

というわけで、窓の杜に行ってみました。PCの画面の端っこにTVみたいな時刻表示字幕を出せるソフト、TVClockが気に入りました。ばかばかしくていいですね。

| | Comments (0) | TrackBack (0)

WPA2-PSKとBK893357

Wiiと同時に無線LANを(再)導入して、その時に認証をWPA2-PSK(AES)にしました。で、出張先のホテルからFF XI専用として使っているVAIOを持って帰ってきたので繋げてみることにしました。

・・・あら?設定項目にWPA2-PSKがない。

BX90Sにはインテルの2200BGというチップが乗ってるみたいなんだけど、コイツが対応してないのかな?とりあえず、インテルのサイトから最新のドライバを入れてみる。うーん、変わらない。

なおも調べてみる。インテルのサイト(http://support.intel.com/jp/support/notebook/sb/CS-006109.htm)に、

WPA2 機能を Windows XP サービスパック 2(SP2) で使用するために、マイクロソフトはアップデートファイルを提供しています: 893357

ワ イヤレスアダプターを管理するため、インテル® PROSet/Wireless ソフトウェアを使用している場合は、このパッチはオプションです。アダプターを管理のために Windows を使用しており、 Windows オペレーティング・システムに WPA2 サポートを追加する場合に、このパッチをダウンロードしてください。

ふにゃ。そういうこと?というわけで、マイクロソフトのサイトに行ってBK893357を導入して、無事繋がりました。

| | Comments (0) | TrackBack (0)

ExcelのCSV読み込み001問題

散発的なデータ変換やデータ移行はRubyistが最も輝く場面かもしれません。

使い捨てのスクリプトならば「Rubyなんて誰も知らん。一生お前がメンテしろ」と言われることもありませんし、とにかく時間がない場合が多いなかExcelのVBAと格闘している人を横目にRubyのパワーを見せつけることが出来ます。新人の女の子がちまちまデータの手直しをしているところへ救いの手をさしのべた日には「Rubyを使ってモテました」報告ができるぐらいです。まあ、懐かれて酷い目にあっても知りませんが。

特に、cliputilとの合わせ技のコピペワンライナは強力で、セルをコピーして

  cpaste |ruby -pe 'なんかワンライナ' |ccp

を実行してまたExcelに貼り付けると、いちいちマクロを書いているのすらアホらしくなる便利さです。テストデータの作成なんかの時には、欠かせないテクニックです。規模が大きくなってきたら require 'win32ole'もありますし。

というわけで、今日はとあるプロジェクトの移行データ作成を手伝ってました。Excelに入っている元データをテキストにして、ちょちょいとしたスクリプトで変更をかけて、またExcelに読み込みます。

Rubyで読ませる場合には意外に仕様がめんどくさいCSVより、タブ区切りの方が便利。何も考えなくても手が

while line = gets
  data = line.chop.split("\t")

と書き始めてしまうぐらいです。ちょっちょーいと・・・あれ?

あ、改行が入ってるセルがある・・・だみだ・・・しょうがない、CVSにするしかない。Rubyスクリプトの方も行単位の処理じゃだめだから、これはCSVモジュールの出番かな・・・使ったことないんだけど。どれどれ・・・

require 'csv'

csv = CSV::Writer.create(open(ARGV[1],"w"))

CSV.foreach(ARGV[0]) do |data|
  #ここでdataに対して処理をして・・・

  csv << data
end

csv.close

こんな感じで使うみたい。CSV::Writer#createにIOオブジェクトを渡さなきゃいけないらしいことと、dataはArrayが入るんだけど、空のセルに相当する要素には""じゃなくてnilが入ってくることに気がつかなくてちょっと手間取っりましたが、さくさくと。

出来上がったCSVファイルをExcelに読み込ませて、確認。あれれ?"0538"という処理IDが"538という数字になっちゃってます。もー。Excel君はだからキライよ。依頼元の後輩の○9君に相談。

「ああ、それは拡張子を.txtに変換して、Excelにテキスト形式だと思わせてから読み込みの時にデータ形式を文字列に指定すればいいんですよ」

ほっほう、なるほどね。やってみた・・・ら、今度はせっかく" "で囲まれてた改行を理解しなくなって、1レコードが複数行になってしまったぞ。

さて、困った。もちろん、こういう時には解析機関Gの出番である。「VBA 大文字 変換」でググったら、引っかかったのが、このページ

CSV 形式ファイルを Excel で開く際の "001" 問題を回避する方法

○9が教えてくれた方法も含めて、正攻法、裏技等いろんな方法が載ってます。素晴らしい。そこに、「データの先頭にタブ記号(Chr$(9))を付加して CSV に出力すると、Windows XP 上の Excel で開いたときにのみ、文字列として認識されます。」とあります。

なんてバッド!まさにBK(Bad Know-How)!!

しかし、こりゃいいや(笑)

というわけで、ループの前の方に

data.map! do |a|
  "\t" + a if a
end

を突っ込んで無事に出来ました。うーん、ばっどだ

| | Comments (0) | TrackBack (0)

3rdRail発売!・・・3rdって?

CodeGear、Ruby on Railsの統合開発環境「3rdRail」が発売(マイコミジャーナル)

米Borland Softwareの開発ツール部門であるCodeGearは17日(現地時間)、オープンソースのWebアプリケーションフレームワークであるRubyお よびRuby on Rails用の統合開発環境(IDE)「3rdRail」を発売した。本製品は、初心者から上級者までの幅広い開発者が利用しやすいよう、開発されている という。

うーん、さんまんろくせんえん・・・VCLが付いてれば迷いなく買うんだけど(しつこい)・・・うーん

| | Comments (0) | TrackBack (0)

アプリケーションサーバで1分間隔の処理をする

相変わらずJavaはさっぱりわからないのにJavaのWebアプリでインフラをやってるわけですが、アプリチームのOK-Bayさんからこんな相談をされたわけです。

「アプリケーションサーバの中で、定期的にDBのテーブルにデータがあるかどうかウォッチしたいんだけど」

-後半は別に普通なんですが、何でそれをアプリケーションサーバの中でやるんです?

「アプリケーションサーバの中にあるアプリの機能を呼びたいから。理由は恥ずかしくてとても口に出せない」

今回のアプリはEJBなしのStrutsベースです。もちろんブラウザ越しのアクセスがトリガーにならないと処理は動きません。なんか方法があるのかなあ?近所にいた同期のSEQちゃんに聞いてみました。

「昔、やったプロジェクトではループになるサーブレットを書いて、アプリケーションサーバが起動したあとにそいつに一度だけアクセスしてやるって方法をやったことありますね」

なるほどね。でも、それなら一定間隔ごとにServletにアクセスしてやるほうがいいんじゃないか?

「それでもいいと思うよ。止めたいときに自由に止められますしね。ただし、アプリケーションサーバを止めてる間はアクセスエラーになるから、そのあたりをうまくハンドルしないと運用がめんどくさそう」

もっともな意見だ。アプリケーションサーバの中でクローズすればそれに越したことはない気がします。

一定時間ごとの処理ねえ・・・昔、VBをやっていたときにはタイマーをぷちっと貼ってたなあ。Javaにもタイマーってあるのかな?・・・java.util.Timerってのがありますな。これを使えばいいのか?ちょっと詳しそうな奴に聞いてみましょう。後輩の破老酒がいいかな?ちょっと相談にのってくれー

「ふむ。でも、これって独自のスレッドを作っちゃうからアプリサーバの中で動かすのはあんまり良くない気がしますよ?それに、今使ってるアプリサーバはWAS(Websphere Application Server)ですけど、これの管理コンソールにスケジューラーってリソース項目があるんですよね・・・。あんまり使ってるって聞いたことないですけど」

なるほど・・・。確かに自前でTimerオブジェクトを作ったとしても、そのライフサイクルは親スレッドに依存しちゃう。それでは無限ループのServletを作るのと本質的に変わらないわけですから、アプリケーションサーバが管理してくれる仕組みがあれば、それはそっちの方がいいですよね

というわけで、例によって解析機関Gに問い合わせ。するとcommonj.timers.TimerManagerなんてのがあることがわかりました。CommonJってのはTimer and Work Manager APIのことで、アプリケーションサーバでエンタープライズアプリケーションを動かそうとするBEAとIBMが考えたAPIのことらしい。IBMも絡んでるので、当然WASでも使えます(v6からだけど)。管理コンソールの項目はきっとコレのことにちまいない。

使い方は、この辺を見てもらえばいいと思うんですが、アプリケーションサーバに定義をしておいた上で

  1. TimerListenerを初期化。コールバック先はここに登録
  2. JNDIを使って呼び出して、TimerManagerを初期化。その際にTimerListenerを渡す
  3. TimerManagerにスケジュールを登録

という手順です。クラスターでの動作も、ジョブを入れるDBを用意してやれば可能らしい。ほうほう

でも、結局、OSのスケジューラーを使ってServlet呼んじゃいそうな気がしています。だってそっちのほうが簡単だし、Javaわからないし~

誰か、「そういうときはこうやってやるのが普通じゃ!」というやり方を知ってたら教えてくださいませ

| | Comments (0) | TrackBack (0)

一手間加えるだけで

JavaとCの実行速度 (reconpile.net)

自家製のプログラムを題材に、JavaとCの速度比較をしてみました。アクセスログからトップへのアクセスだけを切り出すという処理です。

(中略)

まずは、単純にgrepをかけてみましょう。

% time grep 'GET /[ ?]' access_log > /dev/null
grep 'GET /[ ?]' access_log > /dev/null  1219.31s user 7.65s system 99% cpu 20:33.59 total

さすがに8.9Gのファイルを相手にすると時間がかかります。

この後、JavaとCで同様の処理をするソースと、実行結果が示されます。それはこのエントリを見てもらうとして、最後にこんなことが

Rubyで書いてもみました。

#!/usr/bin/ruby

REGEXP = /GET \/[ ?]/

STDIN.each do |l|
  print l if REGEXP === l
end
% time ruby mygrep.rb < access_log > /dev/null
ruby mygrep.rb < access_log > /dev/null  95.02s user 7.98s system 49%

うわ、このケースだとRubyってJavaよりも速い……。

えっと、これってつまり

% grep 'GET /[ ?]' access_log

って書くかわりに

% ruby -ne 'print $_ if /GET \/[ ?]/' < access_log 

って書いたら、12倍早かったってことですよね。

大きなファイルをgrepすることって日常の場面でけっこうあるものですけど、これは頭の片隅に入れておくといいかもしれない情報ですな

| | Comments (2) | TrackBack (0)

少年の夢は生きている

ニコニコおもしれー

これをみて大爆笑出来るだけで、私の少年時代は無駄ではなかったと思いました

| | Comments (1) | TrackBack (0)

IronRubyリリース

マイクロソフト、Ruby言語インプリ「IronRuby」をリリース(@IT)

マイクロソフトは7月23日、オレゴン州ポートランドで開催中のO'Reilly Open Source Conventionにおいて、「IronRuby」(Ruby言語のマイクロソフト版インプリメンテーション)のコア機能セットをRubyForge上で提供し、コミュニティのフィードバックを受け付けると発表した。RubyForgeは、プログラミング言語のRubyに関連したプロジェクトを対象とした協調型ソフトウェア開発管理システム。

IronRubyはMatz Ruby、YARV、JRubyに続く新しいRubyの実装。Windowsで動くRubyの決定版になるのか、ユーザーとしてもかなり注目してます。Silverlightも、普段、日常的に使っている環境での実装だけに興味津々ですなー

| | Comments (0) | TrackBack (0)

Delphi for Rubyではない・・・(T-T)

CodeGear、Ruby統合開発環境の詳細を明らかに (@IT)

odeGearは旧ボーランドから引き継いだ“Delphi”ブランドを、PHPについては適用し、Delphi for PHPの製品名を付けたが、Ruby IDEのほうは「Delphi for Ruby」とならない可能性もあるという。「Ruby IDEでサポートするのはRoRというフレームワークです。DelphiではVCL(Visual Component Library)を提供してきましたから、Ruby IDEではDelphiというブランド名が適切ではないと考えています。現在、RoRではDelphiが提供してきたようなドラッグやクリックで使える GUIのコンポーネントが欠けているからです。今のところ、それをわれわれが提供することは考えていません。われわれが何かを押しつけるということはしま せん。RoRコミュニティから自然と出てくるもの、開発者の方々が使いたいと思うものをサポートしていくのがわれわれの立場です」。

VCLが使いたいですぅ~(T-T)

一気に購入意欲を失いました

| | Comments (0) | TrackBack (0)

3項演算子

FizzBuzz問題について書いたエントリーに、コメントをもらいました。その中で、「C版で3項演算子使わないのはなぜ?」と突っ込まれてますが、私の中では3項演算子を使う上でのルールがあります。それは

「3項演算子の中で処理は行わない」

ということ。つまり

printf("%s", hoge == "HOGE" ? "OK" :"NG");

はおっけーだけど

isNumber(i) ? printf("%d",i) :printf("%s",Error);

はやらないってことですね。理由は単に見やすさの好みだけです。

| | Comments (0) | TrackBack (0)

FizzBuzz問題

遅ればせながら。というか、まあ、特に参加する気もなかったんですが。

(FizzBuzz問題については「どうしてプログラマに・・・プログラムが書けないのか?」を参照してください)

ずいぶんと前にRubyの本を紹介したYukaさんから、「面白そうだからやってみる。添削して」と送られてきました。さすがに、そういうことだと先に自分の回答を用意しとかないとだめですよね。というわけで、ちょちょいと。実際に割り算をするのはつまらない。ルールに従った文字列が出ればいいということで、こんな感じでコーディングしました。

f = ["","","Fizz"] * 34
b = ["","","","","Buzz"] * 20

Array.new(100){|i| f[i] + b[i] == "" ? (i+1).to_s : f[i] + b[i] }.each{|i| puts i}

nacに見せたら「富豪だね」とのことでした。

ちなみに勝手に載せちゃうけどYukaさんのは、こう

i = 1

while i <= 100
  amari_3 = i.modulo(3)
  amari_5 = i.modulo(5)

  if amari_3 == 0 && amari_5 == 0
    print("FizzBuzz \n")
  elsif amari_3 == 0
    print("Fizz \n")
  elsif amari_5 == 0
    print("Buzz \n")
  else
    print(i, "\n")
  end

  i = i + 1
end

過不足なく、非常に素直。人柄が偲ばれます。Rubyっぽくはないけど、かえって汎用的でよく見えますね。

さすがにRubyなら2分で書けるわけですが、これをCで・・・と言われると、ちょっと時間がかかりますなあ。20分ぐらいかけて、えいやっ

#include <stdio.h>

int main(int argc, char **argv){
    char f[] = "Fizz";
    char b[] = "Bazz";
    char n[] = "";
   
    char **p3,**p5;
   
    int i;
   
    char *factor_3[] = {n,n,f,NULL};
    char *factor_5[] = {n,n,n,n,b,NULL};
   
    p3 = factor_3;
    p5 = factor_5;
   
    for(i = 0; i < 100; i++){
        if(*p3 == NULL){
            p3 = factor_3;
        }
       
        if(*p5 == NULL){
            p5 = factor_5;
        }
       
        printf("%s%s",*p3,*p5);
        if(*p3 == n && *p5 == n){
            printf("%d",i+1);
        }
        printf("\n");
        p3++;
        p5++;
    }
}

いや、割り算使えばもう少し早いよ、多分(笑)

| | Comments (3) | TrackBack (0)

AIXのmksysbからboot可能なテープを作る

私は普段、AIX遣いですが、LinuxやWindowsのシステムも管理することがあります。Windowsは論外として、AIX遣いがLinuxを使っていて「がっかり」するのは、下の二つの機能がないことです。

  • mksysb
  • LVM

LVMは実はLinuxにも(カーネル2.4の時代に)追加されています。でも、あまり使われてるところを見ません。LVMさえあれば、ディスクがいっぱいになっても新しいHDDを付けられさえすれば、パーティションを切り直すことなく回復させることが出来ます。つか、もうなしでシステム復旧させられませんよ、あたしゃ。

そして、もう一つがmksysb。コマンド一つでDATに完全なシステムバックアップを取ることが出来ます。しかも、ブータブルのインストールイメージなので、複数のマシンに戻してクローンのサーバをどんどん作ることも可能。ハードのスペックが違っても、デバイスドライバも全部持っているので問題なし。さらにはNIM(Network Install Management)を使うことで、複数台のマシンのシステムイメージをファイルの形で1台のサーバから取得できます。今の私の様に、一つのプロジェクトが16台のマシンで構成されてるなんてときに、いちいちテープで取っていたらシステムバックアップが大変過ぎます。NIMサーバさえ作っておけば余裕。もちろん、マシンがクラッシュしても、ハードを直してbootpでインストールが走るようにしてマシンを立ち上げれば(この辺はコツがいる)、NIMサーバから自動的にインストールが出来ます。素晴らしい。

ただ、一つ不満だったのは、ファイルに取得したバックアップイメージから、ブータブルのテープを作れなかったこと。いや、作れなくはなかったんだけど。rewindとかddとかを駆使すれば(笑)。

AIX5.3TL05移行では以下のコマンドが使えます

mksysb –F <mksysb_image> -t <tmp_dir> /dev/rmt0

これで何も考えずにバックアップを、ぽいぽいとファイルサーバにつっこんだりしても平気。やあ、ほんとに便利だー。

・・・でも、-Fなんてman mksysbしても出てこないな。要テストだな、これ。

| | Comments (3) | TrackBack (0)

YARV上のJRuby?

YARV上での性能を40%改善 - JRuby 0.9.9がリリース (マイコミジャーナル)

The JRuby Communityは23日(米国時間)、JRubyの最新版となる「JRuby 0.9.9」を公開した。JRubyはJavaで開発されたRuby実行プラットフォーム。JavaからRubyスクリプトを実行できるほか、RubyスクリプトからJava APIを活用できる。

おー。着実に進歩しているらしい。素晴らしい。Ruby 2.0がタダのリファレンス実装になる日も近いか(笑)

それはそれとして、この記事のタイトルはおかしくないか?YARVはYet Another Ruby VMなので、JVMの上で走るJRubyとはまったく無関係のハズだ。

http://jruby.codehaus.org/ のリリースを見ると

Performance has improved by 40% over 0.9.8 based on YARV benchmarks

記事では

0.9.8と比較した場合、YARVを使用したベンチマークで40%ほどのパフォーマンス改善を実現

ここの訳は間違ってない気がするんだけど、YARV benchmarksって何だべ?はて・・・?

ぐぐってみたら、こんなエントリが

JRubyのYARVバイナリサポートを試してみる (recompile.net)

あまり知られていないことなのですが、JRubyの最新版ではYARVバイナリのサポートがされています。まだ実験的な機能ではあるのですが、簡単なものであれば動作するようです。

ほおお・・・ちなみにこのエントリで使っているのは0.9.8みたい。うむむ、なかなか面白そうですな。

| | Comments (0) | TrackBack (0)

Antのjavacタスクのドキュメントが変

大分前から、Antを使った自動ビルドをしているんですが、SystemOut.logでスタックトレースにソースの行番号が出ないという問題があります。

おかしいな・・・。javacのdebugオプションは付けているはずだぞ?

<javac srcdir="hoge" destdir="fuga" debug="on" debuglevel="lines,vars,source">

マニュアルを見てみましょう。使ってるAntは1.5なので、Ant 1.5のマニュアル

debug:Indicates whether source should be compiled with debug       information; defaults to off.

デバッグ情報を付けてコンパイルするかどうかを指定します。 デフォルトはoffです

普通、この文章を見たら、デバッグ情報が欲しいなら"on"を指定すればいいと思うよね?ちなみに、Ant1.6.1のマニュアルはこうなってます

Indicates whether source should be compiled with     debug information; defaults to off.  If set to     off, -g:none will be passed on the     command line for compilers that support it (for other compilers, no     command line argument will be used).  If set to true,     the value of the debuglevel attribute determines the     command line argument.

デバッグ情報を付けてコンパイルするかどうかを指定します。 デフォルトはoffです。 off-g:noneに設定すると、 コンパイラのコマンドラインの通過をサポートします。 (他のコンパイラで、コマンドライン引数がない時に使われます。)  trueを設定すると、debuglevel属性の値は、 コマンドライン引数を決めます。

え?

offの反対が、trueなのか?

というわけで、スクリプト変えてみました。今晩のリリースから反映。結果は如何に?!

| | Comments (2) | TrackBack (0)

ECUもオープンソース

自動車用基本OS開発 アイシン精機など、世界標準視野」(asahi.com)

トヨタ自動車グループのアイシン精機や名古屋大学などの研究チームは17日、自動車の複数の機能をまとめて管理する基本ソフト(OS)を開発したと 発表した。自動車の高性能化につれて部品の電子化が進み、ブレーキやアクセルなど各機能を個別に管理する電子制御装置(ECU)は高級車には50個以上、 大衆車でも30個程度搭載されている。開発された基本ソフトを使えば搭載するECUを減らし、コストを削減して軽量化もできるという。

 研究チームは年内にもソフトをインターネット上で無料開放し、国内自動車メーカーなどと連携して各社が共通で使用できる国内初の標準化を目指す。

うーん、トヨタ関連企業のようなT企業ではない大きな会社が自社のソフトをオープンソースにするという選択を、そもそも考慮に入れるという事実が、時代は変わったんだなあと思わせますね。

| | Comments (2) | TrackBack (0)

RubyがJavaを猛攻撃?

2007 年の Java: この 1 年を占う (dW)

2006 年も、Java プラットフォームが大発展するうちに終わりました。Java 言語は、Microsoft (C#) とスクリプト・コミュニティー (Ruby) というライバルからの猛攻撃にもかかわらず、世界で最も使われているプログラミング言語としての地位を維持しました。

海外でのRubyは、すごい勢いでメジャーになってる気がする。私なんかは「日本人なんだから、Ruby選ぶでしょ」って感じなんだけどなあ・・・

| | Comments (0) | TrackBack (0)

Delphi for Ruby !?

Delphi for PHPが先日、発表されたばかりですが

「Delphi for Rubyも出します」、CodeGear副社長 : @IT

Web開発者の間ではライトウェイトのスクリプト言語が人気だが、CodeGearでは今後、PHP以外の言語についても対応製品を拡充していく予定だ。 「具体的な製品についての話はまだできませんが、2007年内にもDelphi for Ruby、Delphi for Pythonを出すつもりです。RubyはPHPほど広範には使われていませんが、今後、重要な言語になるポテンシャルがあると見ています。Ruby on Railsについても、われわれはRubyと一体のものとして興味深く見ています」。

うわわ!そうきたか!

私が初めてちゃんといじった言語はDelphiでした。Object PascalとVCLでオブジェクト指向を学んだんです。今でこそ、RubyでDuck Typing万歳な私ですが、Pascalの厳密さもキライじゃなかったです。VCLがすごくいい出来だったから、JavaのAPIを見るとやる気がなくなるんですよねえ・・・。

Delphi for PHPの発表にも「VCL for PHP」なんて文字があります。RubyからVCLを触るにはApolloもありますが、やはりRADがついてくるのは大きい。うれしいなあ。久しぶりにわくわくです。

| | Comments (0) | TrackBack (0)

syslogで遊ぶ

今のシステムには何故かAIXが16台もありまして、全員元気に動いているのか、甚だ心許ないのです。監視しなけりゃなりません。

例えばTivoliで言うところのTEC(Tivoli Enterprise Console)のようなものがあればいいわけですが、ありません。買ってくれぇ。

しかし、無いものはしょうがないので手作りせねば。まずは、16台のログを一つにまとめることを考えねばなりません。16台にログインして確認するわけにはいかんですからね。何を使うのかと考えましたが、ここは王道にsyslogでしょう。うむ

ちなみに、AIXにはerrlogという標準のエラーシステムがありまして、大抵はこちらを使います。syslogも入っててデフォルトで起動してますが、/etc/syslog.confには何も書いてありません。使われてないsyslogちゃんを使ってあげましょう・・・とはいうものの、私はAIXしか触ったことがないので、syslogは初めて。

勝手機能として使うので、facilityはlocal1を使います。なぜ0を使わないのか。理由はありません(笑)

ログを集めるサーバの/etc/syslog.confに

local1.info    /usr/local/admin/syslog_local1.log    rotate size 1m compress

と記述。最後のはAIX独自なのかな?マニュアルによるとログのローテートもしてくれるみたいなので、付けておきました(動くかどうか未確認)

ログを送る方のサーバの/etc/syslog.confで

local1.info    @hogeserv

としておいて、両方のサーバで

refresh -s syslogd

します(kill -HUP `cat /etc/syslog.pid`と一緒のこと。これもAIX独自?)

で、送る方のサーバから

logger -p local1.crit hogehoge

すると、うける側のサーバに

Feb 19 15:40:46 fugaserv local1:crit Message forworded from fugaserv: tumbler: hogehoge

と出てきます。うーむ、よしよし。ここまで出来ちゃえば後は根性ですな。

| | Comments (1) | TrackBack (0)

昨日の日付

後輩のかわうそがシェルスクリプトで悩んでるので、何を悩んでいるのか聞いてみた。

-Tambourineさん、昨日の日付ってどうやったら取れます?dateコマンドの結果から1引いたりとかしてドツボなんですが・・・

「あー。昔、同じ目的で悩んだわ。そんときは自信なかったから、結局、Perlでyesterdayってコマンドを作った」

-え~

というわけで、自分のディスクの中をあさってみたけど、yesterday.plは発見できず。じゃ、Rubyで書いたげよ

#!/usr/bin/ruby
require 'date'

format = "%Y%m%d"
before = 1

unless ARGV.empty?
  before = ARGV.shift.to_i
end

unless ARGV.empty?
  format = ARGV.shift
end

today = Date.today
yesterday = today - before

print yesterday.strftime(format)

いささか手抜きだけど、まあ、こんなモンでしょ。

AIXにデフォルトで入ってるものでやるとなると、Perlで出来ることはわかってるけど、あとはどうなんでしょう。awkならどうなのかな・・・ぐぐってみた。こんなのみつけた。

awk 'BEGIN{print strftime("%Y%m%d",systime()-24*60*60)}'

ほっほう。素晴らしい。なるほど。やってみました。

awk: 0602-502 関数 strftime は定義されません。

ああん・・・、gawkじゃないとダメみたいです。

| | Comments (3) | TrackBack (0)

Antでローカルプロパティ

今日もAntをいじってます。

とある理由で、タスクローカルなプロパティを定義したくなりました。こんな感じでいいのかな?

<?xml version="1.0" encoding="Shift_JIS" ?>
<project name="hoge" default="hoge">

  <target name="init">
    <property name="a" value="A" />   
  </target>

  <target name="hoge" depends="init">
    <echo>${a}</echo>
  </target>

</project>

実行します。

Buildfile: H:\eclipse\ant_test\hoge.xml
init:
hoge:
     [echo] A
BUILD SUCCESSFUL
Total time: 156 milliseconds

だだ漏れだ(T-T)

こうすればいいのかな?

<?xml version="1.0" encoding="Shift_JIS" ?>
<project name="hoge" default="hoge">

  <target name="init">
    <antcall target="fuga">
      <param name="a" value="A" />
    </antcall>
  </target>

  <target name="fuga">
    <echo>${a}</echo>
  </target>

  <target name="hoge" depends="init">
    <echo>${a}</echo>
  </target>

</project>

どうだ!

Buildfile: H:\eclipse\ant_test\hoge.xml
init:
fuga:
     [echo] A
hoge:
     [echo] ${a}
BUILD SUCCESSFUL
Total time: 172 milliseconds

うん。出来た・・・けど、これが正しいやり方なのかどうかわからないんですが(笑)

| | Comments (0) | TrackBack (0)

Antの依存関係の疑問

Javaがキライでしょうがないと言ってたら、じゃあ、せめてAntでやらなきゃいけない仕事があるから、これをやれと言われました。しょうがないので、Ant学んでます。いまいちかわいくないです。

さて、以下の様な処理がしたいのです。

  1. CVSからCheck Out
  2. javac
  3. jar
  4. アプリサーバにデプロイ

当然、四つタスクを書けばいいわけですね。試しにガワだけ書いてみましょう。

<?xml version="1.0" encoding="Shift_JIS" ?>
<project name="hoge" default="deploy">

    <target name="cvs_co">
        <echo>check out</echo>
    </target>

  <target name="javac" depends="cvs_co"  >
    <echo>compile</echo>
  </target>

  <target name="jar" depends="javac" >
    <echo>jar</echo>
  </target>

  <target name="deploy" depends="jar" >
    <echo>deploy</echo>
  </target>

</project>

やってみると、上から順番にタスクが流れます。うむうむ、よしよし。

当然、依存関係のチェックもしてくれます。すでにコンパイル済みだったら、javacターゲットは実行されません。試しに止めてみましょう

先頭近くに

<property name="class_exist" value="true" />

を入れた上で、javacターゲットを

<target name="javac" depends="cvs_co" unless="class_exist" >

とすれば、このターゲットは実行されなくなります。さて、試しましょう

Buildfile: H:\eclipse\ant_test\hoge.xml
cvs_co:
     [echo] check out
javac:
jar:
     [echo] jar
deploy:
     [echo] deploy
BUILD SUCCESSFUL
Total time: 141 milliseconds

ほら、javacは実行されません・・・

アカンがな

当然、ここで実行が止まって欲しいわけですが、依存タスクのcvs_coが実行されてしまってます。これじゃ、毎回全部CVSから取り直しです。


makeの時はどうなるんだけっけな。 こんなmakefileを書いてみます。

hoge.java:
    echo "cvs co"

hoge.class: hoge.java
    echo "javac"

hoge.jar: hoge.class
    echo "jar"

hoge: hoge.jar
    echo "deploy"

ここで、

touch hoge.class
make hoge

すると、

/t/mktest$ make hoge
echo "cvs co"
cvs co
echo "javac"
javac
echo "jar"
jar
echo "deploy"
deploy

全部流れちゃう。そうか・・・makeの場合はなけりゃターゲットを作るんだから、当然、hoge.javaのタスクも動くし、それが動いた以上、それに依存してるものは全部動くわけですな。ここで、

touch hoge.jar

すると・・・

/t/mktest$ touch hoge.jar
/t/mktest$ make hoge
echo "cvs co"
cvs co
echo "javac"
javac
echo "deploy"
deploy

jarは作らなくなるけど、無いファイルは作りにいくからhoge.javaタスクとhoge.classタスクは実行されるんですね。アレ?そうだとすると、hoge.jarもやらないと不味くないか?

ま、結論としては、makeでこういう場合には制御用のフラグファイルを作るわけで、同じことするにはbuild.xmlの止めたいところに、if/unlessを仕込みまくるしかないのかなあ。

うーん、ターゲット・タスクとファイルが紐付かないのは、イマイチわかりづらい。Antってのは、結局、ターゲットはすべて実行されて、タスクが依存関係を理解するだけだと思ってればいいのかな?

ふーむ・・・なかなか悩ましいです。


| | Comments (0) | TrackBack (0)

IEのバグ?

Internet Explorerを使ってFTPしましょう。見ているディレクトリは空です。

Ie_1_1

このディレクトリにファイルを作りましょう

Tt_1

さて、IEで見てみましょう

Ie_2

はい。出来ました。1年も前に。

・・・どして、日付が2006年!?

IEのバージョンは6。上の例のFTPサーバはAIX5.3ですが、試しに@niftyのFTPサーバで実験してみたけど、再現しました。

いろいろ試してみたんですが、昨日の日付のファイルはちゃんと2007年と表示されます。もちろん、同じファイルはFirefox、FFFTP、コマンドラインのftp.exeなどでは正しく表示出来ます。

なんなんでしょうね、これ

| | Comments (1) | TrackBack (0)

今日もJavaがキライ

あいかわらずJavaがキライです。

Javaの言語的な特徴はある程度知ってますし、文法もなんとなくはわかりますが、キライだから書かないためイディオムやクラスライブラリを全く知りません。だから、Javaのプログラムは書けません。ま、読めるのはなんとか読めると思いますけど。

仕事で、チームメンバが書いたJavaプログラムをセットアップする必要がありました。DBを読んでその情報を元に別のプログラムを起動するだけの単純なプログラムで、たかだか500行ぐらいのソースです。ところが、うまく動きません。しぶしぶ、原因を調べることにしました。

出てるエラーから察するに、問題はDBから意味のある値が戻ってないことのようです。まず、それを確かめることにします。HogeChecker.javaという名前のファイルなので、HogeChecker_tam.javaと名前を変えて、一行、デバッグプリントを仕込んでコンパイル。

・・・エラーだし。ああ、そうか。ファイル名とクラス名が一致しなくなったからか・・・

バカじゃねえの?そんなんでエラーにすんなよ!!

しょうがないから、クラス名をファイル名にあわせます。main()の中でnewしてるのが前の名前だから、またエラー

ああ、もう。融通のきかん!!

DBにアクセスして、ResultSetを取るところまで動いていることはわかりました。次は、SQLか仕込むデータが間違って0件なのか、値は取れているがその後の処理に問題があるのか、それを確認したいですね。

  System.out.println(rset.size());

とか、書いてみた。コンパイル

そんなメソッドはねえだと?馬鹿融通のきかねえクソクラスがよ!!

相変わらず、一貫性のないクラス設計に悪態をつきつつ、APIリファレンスを見ます。んー、件数を取れそうなメソッドがありません。ResultSetMetaDataってクラスがあるな・・・。列数取れるのね(<この時点で、Tambourineは行と列を取り違えてます。欲しいのは行数です)。

  ResultSetMetaData rsmd = rset.getMetaData();

また、そんなクラスは見つからねえと言われました。import見ると、

  import java.sql.ResultSet;

・・・。しょうがないから下に、java.sql.ResultSetMetaDataのimportも付け足します。あー、何のためにクラス階層とファイルシステムを一致させてるのか意味がわからねえよ、これじゃ。

やっぱ馬鹿なんじゃないの?

もしかしたら、書いた人が馬鹿なのかな?なんでjava.sql.*としないんだ?なんかデメリットがあるのかな?教えて、偉い人。

いやあ、とにかくJavaでプログラム書くのはストレスが溜まる。こんなものを毎日使わなきゃいけない状況になったら、転職するかも~。

| | Comments (7) | TrackBack (0)

メモツール

仕事用のPCには、ローカル専用のApacheをインストールして、その上のtDiaryで仕事上のメモを取っています。ToDoはcheck*pad、スケジュールはGoogle Calendarへと、ネット上のサービスへ移行しましたが、セキュリティの問題もあって仕事のメモだけはローカルへ残してあります。

入力はWebではなく、使い慣れた秀丸を使ってます。テンプレートのファイルを作って、決まった名前で保存する秀丸マクロを呼び出し、それをtDiaryに投稿するRubyスクリプトをスタートメニューに登録して、ホットキーを割り当ててあります。

こんな感じのスクリプト



body = ""
body = File.read(logfilename)

require 'cgi'
require 'nkf'
data = "title="
data << "&body=#{CGI::escape NKF::nkf( '-eXd', body )}"
data << "&append=true"

now = Time::now

data << "&year=#{now.year}"
data << "&month=#{now.month}"
data << "&day=#{now.day}"

require 'net/http'
Net::HTTP.start("localhost") do |http|
    res, = http.post( "/tDiary/update.rb", data)
end

ところが、新しいマシンではこれではうまく投稿できません。Apacheのアクセスログを見ても、ちゃんと200を返してるし、はて、さっぱりわからん。

悩むこと1時間。いろいろ試してるウチに2.0.2からのCSRF攻撃対応の影響を受けてることがわかりました。あー、いろいろややこしいんですねえ、世の中。

というわけで、最後から2行目を

res, = http.post( "/tDiary/update.rb", data,
                 {"Referer" => "http://localhost/tDiary/update.rb"} )

に直して、完了です

| | Comments (0) | TrackBack (0)

X60のキーマップ変更

ウチの会社では、社員が使うPCは2年ごとの更新です。補助もらって自分で買うんですけどね。というわけで、今まで使っていたThinkpad T42はごくろうさん。Thinkpad X60いらっしゃい。

T42を買った当時は車通勤だったので大きなTシリーズでも不満はなかったんですが、今は新幹線なのでXに戻しました。それに、なんとなくXのほうがTより頑丈な気がします。

というわけでセットアップ。いろいろ入れなきゃ仕事にならないので大変。で、とりあえず、キーボードのレイアウトを変更せねば。

第3世代Thinkpadからキーボードの配置がすこし変わって、WindowsキーとApplicationキーが追加されてます。長らく無変換キーをWindowsキーにして使っていましたが、これから・・・も要りそうですね。Windowsキーの位置が押し辛すぎ。

右側はApplicationキーのせいでAltがなくなってしまいました。許せないので復活。

また、配置上、すごくEscが遠く見えたので、半角/全角キーをEscキーに。半角/全角キーは変換キーへ持ってきます。変換キーは右手の親指で押しやすいので、この位置でIMEが切り替えられるととてもラクです

と言うわけで、以下の5つの変更をしました

無変換キー => Windowsキー
Applicationキー => 右Altキー
半角/全角キー => Escキー
英数キー => Ctrlキー
変換キー => 半角/全角キー

これにより、英数、無変換、変換はなくなっちゃいますが、困ったことないですな(笑)

regeditで

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

にScancode Mapというエントリを作り

00 00 00 00 00 00 00 00
06 00 00 00 1D 00 3A 00
5B E0 7B 00 29 00 79 00
38 E0 5D E0 01 00 29 00
00 00 00 00

を設定して、完了です。

| | Comments (0) | TrackBack (0)

こんにちは、せかい

Binary2.0カンファレンスの発表資料が高林さんのblogに上がってます。

"Hallo, binary world"の資料をみて、ゲラゲラ笑いました。おもしれ~

| | Comments (0) | TrackBack (0)

最初からCで書いておけば・・・

で、さっき、久しぶりに「Practical C」をぺらぺらめくって、さっきのVBScriptのC版を書いてみました。

#include <stdio.h>

int main(int argc, char **argv){ char buffer[1024]; char sCrLf[2]; FILE *fIn,*fOut; int rlen; sscanf(argv[3],"%d",&rlen); sCrLf[0] = 13; sCrLf[1] = 10; fIn = fopen(argv[1],"rb"); fOut = fopen(argv[2],"wb"); while(fread(buffer,1,rlen,fIn) == rlen){ fwrite(buffer,1,rlen,fOut); fwrite(sCrLf,1,2,fOut); } fclose(fIn); fclose(fOut); return (0); }

最初はgetc,putcでやる方法を考えていたんですが、せっかくだからCっぽくfreadで。実行するまで、引数の一つめがargv[0]ではなくて、argv[1]に入ることをすっかり忘れていました(笑)

| | Comments (2) | TrackBack (0)

VBScriptでバイナリファイルを読み書きする

後輩のBANGから相談を受けました。

「Tambourineさんは、VBは得意ですか?」

むむっ?僕様ちゃんがVBを使っていたのは遙か昔、まだ16bitだった頃であるがそれでもお役に立てるかの?そもそも、なんでVB?

「いや、Windowsで実行出来るものだったら、何でもいいんですけど」

ふむふむ。やりたいことはなんじゃ?

「あるファイルに決まったバイト数ごとに改行を入れたいのです」

なるほど。自称Rubyistに聞いていることはわかっておるのじゃろうな?

  #!/usr/bin/ruby
  f = open(ARGV[0],"r")
 
  i = 1
  rlen = ARGV[1].to_i
 
  f.each_byte do |b|
    print b.chr
    if i < rlen
      i += 1
    else
      print "\n"
      i = 1
    end
  end

どうじゃ、もってけ。礼なら晩飯をおごる以上のことは要らんぞ?

「Rubyはお客様のPCに入っていないからダメです」

わがままじゃの・・・。Exerbでruby.exeをくっつけたろか・・・。まあ、そんならCででも書いたらよかろう。getchしてputchして、時々、13とか10とか書き込んで終わりじゃ。

「コンパイラ、持ってません」

GCCぐらい自分のPCに入れておくのがSEのたしなみだぞ?いざというときのメイキンストールに困るジャマイカ。まあ、実は私も今、そらでCを書くのは大変、自信がないのじゃが。随分、書いてないからのぉ・・・

そうじゃ、ここの所、バイトでVBScriptをいじっていたのだが、あれなら良かろう。動かす予定のPCにWSHは入っているな?

「なんですか、それ?」

知らぬか・・・。とりあえず、コマンドプロンプトでcscriptって叩いてみんしゃい

「あ、なんか出ました」

なら、大丈夫。ちと、10分ほど待っててね・・・うんとしょぃ!

  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f1 = fso.OpenTextFile(WScript.Arguments(0))
  rlen = CInt(WScript.Arguments(1))
 
  Do Until f1.AtEndOfLine
    line = f1.Read(rlen) & Chr(13)
    WScript.StdIn.Write line
  Loop

これでよかんべ。

「Tambourineさん、ダメっす。日本語が入るとずれます」

なんじゃと?むむむ・・・、2バイト文字もひっくるめて文字数を数えて、バイト数とはずれるのか。しまった・・・。しかも、Excelとかと同じように、この時点ですでにUNICODEになっているんじゃろうなあ。

「Excelで同じことになったことがあります。Excel VBAではこんな感じで解決出来ました」

strOut = StrConv(MidB(StrConv(strTmp, vbFromUnicode), pos, rlen), vbUnicode)

えーっと、読み込んだ文字列を一度、UNICODEからSJISに変換して、MidBでバイトごとに切って、さらにUNICODEに戻すのか。

・・・BAD!

ばーーーーっど!!こんなはしたないコードは認めん!

そもそも、テキストだと思ってファイルを開くのが良くないんじゃな。・・・FileSystemObjectを使う限りはだめみたいだ。

ここから、解析機関Gを叩きまくり。ふむふむ、ADODB.Streamってのを使えばいいらしいぞ。どうやってもADODB.Streamのメソッド一覧とかが見つからないのは、何故だろう。

ちょちょいと実験。

  Dim sIn,sOut
 
  inputfile = WScript.Arguments(0)
  outputfile = WScript.Arguments(1)
  rlen = CInt(WScript.Arguments(2))
 
  Set sIn = CreateObject("ADODB.Stream")
  Set sOut = CreateObject("ADODB.Stream")
 
  sIn.Type = 1 ' バイナリーモード
  sOut.Type = 1
  sIn.Open
  sOut.Open
 
  sIn.LoadFromFile(inputfile)
   
  Do Until sIn.EOS
    line = sIn.Read(rlen)
    sOut.Write line
  Loop
 
  sOut.SaveToFile outputfile, 2 '上書きモード

うむ。とりあえず、inputfileとoutputfileで同じ物は出てくる。この間に改行を出せばいいんだな

とりあえず、最後のループをこんな感じにしてみた。Byte型だったら書けるだろうと思って、CByteしてみる。

  Do Until sIn.EOS
    line = sIn.Read(rlen)
    sOut.Write line
    sOut.Write CByte(13)
  Loop

どうだっ!

ADODB.Stream: 引数が間違った型、許容範囲外、または競合しています。

お前の日本語が間違っとる!

ま、型が違うというとるんだから、違うんだろうなあ・・・。えと、そもそもADODB.Streamで読み込んだら、どんな型なんだ?

  Do Until sIn.EOS
    line = sIn.Read(rlen)
    WScript.Echo TypeName(line)
    sOut.Write line
  Loop

Byte()と表示される。なるほど、Byte型じゃなくて、Byte型の配列じゃないとダメなんだな。んじゃ、配列に突っ込んでみよう。

  Dim bCr(1)
  bCr(0) = CByte(13)
 
  Do Until sIn.EOS
    line = sIn.Read(rlen)
    sOut.Write line
    sOut.Write bCr
  Loop

うりゃ!

ADODB.Stream: 引数が間違った型、許容範囲外、または競合しています。

強情だというのは、臆病だということですよ・・・((C)鴻上尚史)

また、解析機関Gに聞いてみる。こんなサイトがみつかった

http://sei.qee.jp/program/hta/sample/bstream.html

WindowsXPの標準機能だけで生のバイナリデータを扱いたくて調べたら、ADODB.Streamというオブジェクトが使えるとわかりました。ところが喜んだのも束の間。確かにファイルからの読み書きはできますが、自分で新規にデータを作れないようなのです。何しろTypeNameで調べたデータ型 (右図) が、VBScriptにはないのですから……。

がふっ。作れないのですか。そうですか

しかしここでくじけては技術屋ではない!というわけで、Byte()型の0x00~0xFFを配列に持つクラスを強引に作りました。理論上は、これでどんなデータでも生成できることになります

ぐれいと!

どらどら・・・。むう、要するに一つADODB.Streamをテキストモードで開き、そこに欲しいデータをChr()して書き込んで、今度はバイナリモードで読み出しちゃうんですな。なるほど、読んできたらByte()になってるんだからそれでいいわけだ。

というわけで、完成版はこちら

  Dim sIn,sOut
 
  '改行コードを作成
  Set sTmp = CreateObject("ADODB.Stream")
  sTmp.Type = 2 'テキストモード
  sTmp.Charset = "shift_jis"
  sTmp.Open
 
  sTmp.WriteText vbCrLf
 
  sTmp.Position = 0
  sTmp.Type = 1
 
  bCrLf = sTmp.Read(2)
 
  Set sTmp = Nothing
 
  '本体処理
  If WScript.Arguments.Count = 3 Then
    Set sIn = CreateObject("ADODB.Stream")
    Set sOut = CreateObject("ADODB.Stream")
 
    sIn.Type = 1
    sOut.Type = 1
    sIn.Open
    sOut.Open
 
    sIn.LoadFromFile(WScript.Arguments(0))
    rlen = CInt(WScript.Arguments(2))
   
    Do Until sIn.EOS
      line = sIn.Read(rlen)
      sOut.Write line
      sOut.Write bCrLf
    Loop
 
    sOut.SaveToFile WScript.Arguments(1), 2
  Else
    WScript.Echo "引数エラー"
  End If

ばっちりだぜ!・・・しかし、ここまで時間をかける意味があったかどうかは謎だなあ。

| | Comments (3) | TrackBack (0)

メイリオ

メイリオ入れてみました。メイリオってのは、時期Windows OSであるWindows Vistaで標準採用となるフォントです。

入れた直後は、「なんか、字がぼやけた?」ってな感じだったんですが、あっという間に慣れました。で、MS UIゴシックに戻したら「きちゃない!ナニコレ!!」な感じです。雰囲気も大きく変わるし、綺麗だし、いいね。

いくらか不具合もあります。どうも、このフォントは幅の計算を失敗させることが多いようです。エクスプローラーで名前の表示がさほど長くないのに...にされてしまったりします。

Pic ここで、[E...]になっちゃってるフォルダの名前は[ELT]で、[F...]は[FAQ]です。わからへんがな(笑)

あとは、ATOK13のインライン変換部分がおかしくなりました。字が縦に半分上に表示されてしまい、上半分が表示されず、読めません。まあ、イマドキATOK13かよ!ってことで、せっかくなので一太郎+花子2006を買ってATOK2006(=ATOK19)を入れてみたら、治りました。一太郎も起動してみました。面白そうではあるが、さっぱり使い方がわからん。

あと、Javaで作られた社内ツールがCore吐いて落ちる様になりました(笑)。ま、そんな日常的に使うわけではないので、使うときにフォントを戻すようにしています。

| | Comments (0) | TrackBack (0)

クロネコ@ファックス

メールを出すと、それをコンビニのプリンターから出力してくれるサービスがあるらしい。

クロネコ@ファックス

待ち合わせの地図を印刷するなんて目的にはすごくいいかも。ただ、1枚100円ぐらいなので、出先でプレゼン資料を出すなんてのは、ムリかも知れないなー

| | Comments (0) | TrackBack (0)

なんでもlinuxって呼ぶ人

最近のAIXには、Linux Tool Kit というCDがついて来ます。

中にはinstallp形式のrpmコマンドと、各種rpmが入ってます。フリーものをインストールするときには、ここからGCCやmake、autoconfなんかをインストールしてmakeするわけ。cvsやpython、rsync、emacs、bashやzshなんかはあらかじめrpmが入ってます。うお、Gnomeもあるね。でも、別にLinuxカーネルが入ってるわけじゃないんで、これを"Linux"と呼ぶのはおかしいよなあ。ま、ツールキットだから、要するに「Linuxっぽい環境にAIXをするためのTool Kit」ってことか?でも、どっちかというとGnuっぽい環境だと思う。Cygnusの方がいい名前ですなあ。ま、もうCygwinになって久しいが、gは残ってるし(笑)

で、導入ドキュメントを書くのに、diff -uが使いたかったので、diffutilsを導入。ぽいぽいって入れてみた。さて、どこにインストールされたんだ?

/usr/linux/bin/diff

でした。なんか、/usr/linux/bin/emacsなんてパス名をみたら、RMSがIBMに怒鳴り込みにきそうな気がするんですけど・・・

| | Comments (0) | TrackBack (0)

Lightweight Language Ring そのに

随分、タイミングを逸したそのに、です

なみに、発表資料は、ここで公開されてます。

LLで関数プロぐらいミング

Haskellに風が吹いているということもあって、関数型プログラミングについてのパネルディスカッション。でも、リングの上の人はまだしも、下はどれだけついて行っていたのか・・・? こんな話題が

副作用について
  • ホントにないと、やっぱりどうしても書けない(書きづらい)というものはある。
  • Haskellのモナドはそれを非常にうまい具合に隠蔽しているが、その結果、モナドはやっぱり難しい
  • ま、あるならある、ないならないとはっきりして置いた方が心構え的には、ラク(?)
高階関数
  • 関数型がどうのこうのというより、イマドキないと困るでしょ。 mapがないからJava書いてるとイライラする
  • むしろ、OOに親和性のある概念なんじゃないの?
  • 型がない言語でやると酷い目に合うよね
型について
  • 型有りいいでしょ?型を書くのがめんどくさいっていうけど、型を書くのがむしろプログラミングの本質じゃないの?型を考えてると、処理がまとまってくるんだけど
  • でも、duck typeしたいことも多いじゃない?
宣言的記述
  • 要するに、抽象度を上げるってことだよね? (パラダイムが変わってるわけじゃないってこと?)
  • 行き着く先は、仕様記述言語。絶対にバグを出せない、しょーもないバグでも出したら億単位で金が飛んでいくところは、仕様記述言語で書いてるらしい。それで成立しかけてるぐらい、もう計算機は速くなった。具体的な手続きなんて人間が書くべきじゃない
  • 仕様記述言語、いいよね~(憧れの眼差し)
Lazyな評価
  • 別に関数型に必要な機能じゃない
  • ここぞというときに使えればいいと思う。常にLazyだと頭がついていかない
  • デバッグが大変。printfデバッグはほとんど意味がない
その他
  • OZって言語にちょっと注目してる
  • (会場からの質問)C++のテンプレートとかを見ると、C++は関数型言語になったと思うが?
  • C++いいよね~。でも、本が分厚いから・・・

じゃんけん2.0

LL Saturdayのときの「じゃんけんでLLの王者を決めよう」企画の第2段。 TCP/IPでサーバとやりとりしてじゃんけんをするクライアントをいろんなLLで書いて対決しようという企画。出場した言語は

  • Ruby
  • Action Script
  • Javascript
  • awk
  • Python

の5言語。ただし、ネットワーク周りも別にどの言語もすごく簡単に実装してしまっていて(いや、awkはそうでもないかも)、なかなか仕様が決まらなかったにも関わらず、ほぼ1、2日で作っちゃったらしい。じゃあ、どこに凝るかというと戦略か、表示部分か・・・ということになりますわな。Action Scriptはマイク入力で手が変わるというような仕掛け。awkは読み込ませるテキストで手が変わるような仕掛け。実戦では「走れメロス」を使用(笑)。Rubyは表示部分をRuby/DLでメモ帳に出すように前の晩に仕込んだらしい(その際、バグを入れてしまったらしく、じゃんけんはすごく弱かった)。

いろいろとみんなが趣向を凝らす中、抜群のウケをさらったのはPython。なんと、作ったスクリプトをワンライナ化してしまったのです。いや、これがPerlやRubyならさほど驚かず、「アホやなー」で済んだかもしれないのですが、インデントが構文に含まれるPythonとなると・・・。これは是非、発表資料を見てください。

| | Comments (0) | TrackBack (0)

気難しいWindows

こう見えて、私はコンピューターのプロです。いや、そう見えるかもしれませんが。

基本的に、UNIX系のエンジニアですが、Windowsもそれなりにわかります。そんなわけで、知人からパソコンに関する質問を受けることも、しばしば。

こんな相談を受けました。2台のPCがあり、1台に入っているiTunesをもう一台に移したいとのことです。

-マイドキュメントの下のMy Musicの下にiTunesってフォルダがあるから、それを丸ごとコピーすればOKだよ

「でも、容量が大きすぎてUSBメモリには入らないんだけど」

-部屋にルータがあって、2台はLANで繋がってるんでしょ。フォルダ共有したら?

「どうやるの?」

・・・さて、これが意外に難しい。手順としては、2台のマシンのWORKGROUPを揃えて、フォルダをEveryoneにフルコントロールで共有にしちゃえば、嫌でも見えちゃう・・・・ハズ。

なのに、これで一発で見えたことなんてないもんね、あたしゃ(笑)

net viewコマンドからしか見えなかったり、ブラウズは届かないけど\\machine_name\folderを直指定したら開いたり、なぜかLMHOSTS書いたら動いたり、いつのまにかファイアウォールが邪魔してたり・・・うぜー

そして、うまくいかなくても、error logが何処にでるのか全く謎。イベントモニタ?マジ?

2台のマシンでファイルをやりとりする方法なら、ftpでもWebDAVでもNFSでもなんでもやりようはある。Linuxならinetdをちょちょっと変えてftp動く。NFSだって、ま、exports書いたりでちょっと面倒だけど、ちゃんと動く。Apache入ってりゃ、WebDAVもいい。いや、そんな難しいこと考えなくても、.rhostsに悪さしちゃえばrcpだって出来る。ぶっちゃけ、sambaとsmbclientだって間違いなく動く。Mac OS Xは、これらがもうちょっと簡単にできる(らしい)。

そう考えると、最悪だよ、Windows・・・

で、悪戦苦闘した結果、最悪の事態になりました。2台のパソコンはAdministrator権限をつけた同じ名前のユーザー(両方のパスワードは異なる)で使っていたんですが、どうも試しているウチにログイン試行が複数回失敗したと見なされて、アカウントをロックしてしまったのです。でも、それならユーザー名とパスワードのダイアログを出せよ・・・。勝手に失敗しまくるんじゃない!

こうなったら、Administratorでログインしてロックを解除するしかありません。Windows XPのGUIからこれが出来るのかどうか、私は知りません。以前はどうやっても発見出来ませんでした。というか、いつから[コントロールパネル]の[ユーザーアカウント]はこんなどうしようもないインターフェースになったんだ?Administrator権限を持ったユーザーから見ても、登録されてるユーザーが全部見えないってどういうことなんだ!

で、イマドキは[コントロールパネル]の[管理ツール]-[コンピュータの管理]からしかユーザー管理が出来ませんから。ここから出来るはず。もしくは、

net user USERNAME /active:on

で終わりですけどね。ところで、Administratorのパスワードって・・・えーっと、覚えてる?

「わかんなーい」

・・・あはれ、PCは再インストールと相成りました。Yukaさん、ホント、ゴメン。

| | Comments (4) | TrackBack (0)

Lightweight Language Ring そのいち

2年ぶりのLL*に行ってきました。今年はLL Ring。いやもう、今回の一番の呼び物はこの会場自体(笑)。だって、ほんとに普通のプロレス小屋なんだもん。発表者の中には、プレゼンなんてお手の物の歴戦の強者も多いわけですが、いくらなんでもリングの上でやったことはないよね。それだけでなんだかおかしい。

というわけで、発表のときにはテーマソングにのって花道をリングまで移動するし、プレゼン開始の合図はゴングだし、椅子が足りなくてパイプ椅子を持って入場した人はリングの手前でパイプ椅子をうれしそうに大きく掲げるし、みんなそれを羨ましそうに見てるし(笑)

しかし、ま、見にくいっちゃ見にくい。こんな感じです↓(リンク先にいっぱい写真があります)

でも、面白いからいいや

さて、印象に残ったことのメモ書きを幾つか

Language Update

Haskell
明らかに、Haskellには風が吹いていることを感じる。新しいHaskell'(Haskell Prime)という規格も出来るらしいし。でも、とりあえず、まずUNICODE化してくれないと、日常使うには辛いなあ
Scheme
新しいR^6RSという規格がもうすぐでて、そこでモジュールの仕組みが入るんだそうな。 でも、あたし、LISPは・・・
awk

ノートの調子が悪そうで、いきなりリブートしてました。awkを今さら使おうとは思わないんだけど、でも、kshで出来ないことをちょろっとやるのに、ときどき便利だったりはするかなー。え?TCP/IP使えるの?

ちなみに、国内のポータルサイトがないので最近作ったそうです。でも、サーバは今、まさにプレゼンに使っているマシンらしく(!)、「今日はつながりません」だそうです(笑)

OCaml
なぜか、馬のかぶりもの(実はラクダらしい)で登場。息苦しいのか、途中ではあはあ言ってます(笑)。OCamlって知らないんだけど、MLの一種だそうです。フランス産で、メインのサイトも.fr。「でも、英語でも読めるから平気です」って、私にとってはあんまり平気じゃない(笑)
Common LISP
中村正三郎見参!生showを見られて、ちょっと感動。「LISPは東洋哲学を・・・」とかなり飛ばしてました。さすが、エンターテイメントになっていましたが、Language Updateではなかった(笑)
Scripting for Java Platform

手書き風文字のアニメーションと、ウクレレによるプレゼン。

 

Javaの中から、scriptを呼び出そうという話で、 言語を指定してengineをnewし、engine.eval(...)で実行。うーん、ださくない?

でも、Java7でJVM自体を動的言語を サポートしやすいように変えるつもりだそうだ。ふーむ・・・

PHP
6でUNICODE化らしい。PHPはどーも触る気にならないのお
Perl
ほぼすべてネタだった(笑)
Javascript

間違いなく実装系がたくさんある言語だな(笑)。

次のバージョンの話があるんだけど、 Netscapeが健在だった時代に一度、ECMAscriptの 次のバージョンの仕様はあるらしい。 ところが、「そんな古いもん、使ってられるかー」と Mozillaは自分のとこの仕様で突っ走ってて(Python風味になるんだそうな)、 また、IEとは互換性がなくなっちゃいそうらしい。どーなのよ?

また、ライブラリも百花繚乱。 プレゼンしてる人のお薦めは、jQueryだそうです。

サーバサイド方面ではAJAJAってのがいいらしい

Python

GuidoはGoogleに行っちゃったんだそうです。Ploneの人もGoogleだそうです。 IronPython(Pythonの.net実装)の人はMicrosoftに行っちゃったんだそうです。

Python Foundationなんかできちゃって、 Pythonはそういうものになっちゃったのね。

Pythonの後方互換を意図しない次期バージョンの名前はPython3000で、 西暦3000年にリリース予定だそうです(笑)。良いセンスだね。 その頃にはPerl6もでてると思うよ<ヲイ

Ruby

前日に1.8.5をリリース。おめでとうございます。 でも、まつもとさんは1.8から手を引いて(Riteの開発版としての)1.9に 専念したいらしい。引退宣言してました。 「ああ、リングの上で引退宣言できるなんて、なんて幸せな」って(笑)。 でも、だれも1.8系のリリースを引き受けてくれないので引退はできなさそうです

Action Script

Flashを動かすものらしい。 新しいバージョンはECMAScript(できるだけ)準拠だったり、 絵がなくても動いたりするらしいです。 すごく簡単にGUIが作れるなら、面白いかもね。 ちなみに、開発環境は高い(6万ぐらい)だそうで・・・

FORTH
凄く古い言語らしいです。 もともとスタックマシンなVMのアセンブリのような言語で、 軽いっちゃ、軽いんだそうな
Squeak

Squeakは見るたびに凄いと思うんだけど、 今回もまったく独自の世界だった・・・。 凄いんだけど、私の生きている世界とは違う異世界が(笑)

あと、継続ベースのアプリサーバは面白いと思う。 戻るボタンが使えるのね。ただ、凄い数の接続数になったら エラいことになっちゃいそうだけど。 でも、どうせ継続なし(つまり、普通のステートレスHTTPベースのWebアプリ)も えらいことにはなるんだから、構わないのかも知れない

ああ、Language Updateだけでこんなに・・・。 続きはまた・・・書くかもしれないし、書かないかもしれない

| | Comments (0) | TrackBack (0)

ハスケ部をつくろう

Rubyインタープリターのソースコードを解説するRHG(Ruby Hacking Guide)の著者として名高いRubyist 青木峰郎さんがHaskell本をだしてます

#ちなみに、RHGはRubyを齧ったことがある人にとって
#最高のCの教材です。すごく分かり易いソースです。凄いなあ、まつもとさん

結城浩さんが、この本の献本を受けてHaskellの勉強を始めたみたい

そこで、この結城メソッドを使って、私もHaskellの勉強をしてみようかと思います。一人では心許ないので、nacと後輩のかにかにくんに声をかけました。Haskell部、通称、ハスケ部。

ハスケ部では、自身のITスキルを間違った方向に伸ばしたい人の入部をお待ちしています。入部の条件は

  • 部員の誰かと面識がある
  • 「ふつける本」を持っている
  • GHCを自力でインストールできる程度のスキルと環境を持っている
  • Wikiの使い方ぐらいは、自分で学ぶ

です。部室は、nacが自分のサーバにWikiを用意してくれるということなので、そこを使います。

入部希望者は、部員の誰かに「安西先生・・・・、ハスケがしたいですっ」と書いたメールを送ってください。

あ、全然Haskellが何かの説明をしていませんが、そんなことも調べられないクリック力の低い人は部員として認めませんので、よろしくっ!

---
追記:nacが部室を作ってくれました!

| | Comments (1) | TrackBack (0)

Martin Fowler、Rubyをべた褒め

かのMartin FowlerがRubyをべた褒めしてます(「Rubyの評価」)。幾分、RubyとRailsの評価が混然としているけど、実際、RubyはRailsのための言語のように見えているのかも知れません。

まつもとさんのバイブルが出て、それを感心して読みながら覚えていた大学院生時代(5,6年前ぐらい?)とは、変わったもんだと思います。Ruby自体はその間、驚くほど変わってないけど。まあ、Railsの出現というのは事件だったかな。

何より、RubyやRailsがいいなあと思うのは、革新的な考え方や超絶的な技術が評価されてるんじゃなくて、スタイルやカルチャーが評価されてるってこと。自分の仕事の能率を変える秘訣も、そういうとこにあるんだろうなとか、思ったり、思わなかったり

| | Comments (0) | TrackBack (0)

日本政府謹製OS誕生の日

コデラノブログで取り上げられてて、小寺さんもどこからツッこんでいいのか困ってます(笑)。ニュースソースは産経新聞

政府は28日、ファイル交換ソフト「ウィニー」を通じた情報流出が相次いでいる事態を踏まえ、コンピューターのウイルス感染、情報流出を防ぐ高度な情報管理機能を備えた次世代基本ソフト(OS)の独自開発に取り組む方針を決めた。

ぶわっはっは。思わずいろんな事を確認しちゃったよ。例えば

  • とりあえず、記事の日付(4/1じゃなかった^^;;;)
  • サイトURL(sanpei.co.jpとかじゃないよな)
  • マイクロソフトが日本政府を買い取ったという記事の有無(これからは、政府といったらMSのことなのかと)

いやー、有識者にあげられてる村井純さんとか、KDDIや日電の偉い人とかが、誰かを後から羽交い締めに行ってるか、産経新聞の記者が首絞められてるか、いったい何がどうなっているのやら(笑)

イソプレスうおっち
を作ってる人達が、このネタを思いつかなかったのが残念なぐらいですよ

| | Comments (0) | TrackBack (1)

ハッカー養成塾の高林さんの回

OSMに載ってた「ハッカー養成塾」の高林さんの回が公開されてます 。キーワードは

  • 「深追い」
  • 「佳境」
  • 「バッドノウハウ」

相変わらずの筆のノリ。素晴らしいセンス。素敵です。

| | Comments (0) | TrackBack (0)

アジャイルとセキュリティの両立

高木浩光さんが「「高橋メソッド」的突貫工事と、脆弱性を排除する構造設計は両立するか」という、面白い記事を書いてます。日本Rubyの会の高橋会長が「陳腐化が早いWebアプリにはRubyのようなぱLLが向いているが、Javaの様なヘビーな言語ではしっかりした設計や構造のもとで作ってしまうことになり、お金がかかる」というような主旨の記事を書いていて、それに対して高木さんは、「しっかりしてて何が悪いのか。そうやってLLでやっつけでつくるから、いい加減な設計のセキュリティの甘いWebサイトができることになるのではないか」という指摘をしてる。セキュリティの人らしい、鋭い視点ですな

とはいえ、問題の本質は「アジャイルじゃないと、Webアプリの開発なんてやってられねえよ」とか、「クライアント配布が要らないのがメリットなんだから、変更して当たり前でしょ?」というところへ、Javaを使ったら酷い目にあうということなんじゃなかろか?

でも、Javaってどんどんエンタープライズな方向へ行っちゃってて、それがよろしくないのかも。もともと、そんな気張ったもんじゃなかったような気がするんだけど。

それはそれとして、こんなこと書いてる

ところで、私もRuby on Railsには大変興味がある(PHPやPerlは死滅すればいいのにと思っている)

ぶはははっ!

| | Comments (0) | TrackBack (0)

はすけるぼん

こんな本が書かれつつあるらしい

読んでみたい

| | Comments (0) | TrackBack (0)

C Magazine、休刊

お昼に本屋に立ち読みに行ったら、C Magazineの最終号が売ってた。こないだは、Ashahiパソコンの最終号を見かけた。今日、UNIX Magazineを買ったら、もう季刊になってた。

パソコンがイカす遊びだった時代は、遠くなったんだなあ・・・

| | Comments (2) | TrackBack (0)

RailsによるアジャイルWebアプリケーション開発

初の日本語Rails本。書いているのはあの達人プログラマーです

とりあえず、これを機に日本でのRailsの認知度がぐぐっと上がるに違いない。StrutsばりばりなMarcoさんとかに読んでもらって、感想を知りたいですな(明らかな釣り)

えーっと、Railsって何って人は、「Railsな考え方」(by 高橋メソッド)とかを見てください。もっとも、ここみてRailsより高橋メソッドのほうに興味もっちゃう人も多いけどね

| | Comments (0) | TrackBack (0)

Rubyでアジャイル

@ITのRubyでアジャイルプロトタイピングという記事が面白い。遊びで触ってる限り、アジャイルであればあるほど面白いに決まってる。

| | Comments (0) | TrackBack (0)

Amazon ECS

本棚.orgを使ってみて、ISBNを入れただけでびょんびょん本の表紙が並ぶのを見て、感心。

ここで、本の感想を書くときは、いちいち手でAmazonのサイトからにアクセスして、画像のURLを調べてる。結構面倒。ココログも、この手のPlug-inを入れてくれたらいいのに・・・って、プロなんだからそのぐらいのフロントエンド書いちゃえばいいのだ

・・・とつぶやいてたら、nacが

「どーせなら、ASINをうまーく使えるようにクイックハックしてください」

なるほど

というわけで、いじってみる。tDiaryのAmazonプラグインをダウンロードして眺めてみると・・・なるほど。ちょちょいといじってみる。昼休みの間に画像のURLが取れるとこまではいったw

というわけで、整理してこんな感じ

#!/usr/bin/env ruby

require 'open-uri'
require 'timeout'
require 'rexml/document'
require 'getopts'

@amazon_access_key_id = '1Z2WBVE13037BDJ4YRG2'
@amazon_require_version = '2005-10-13'
@amazon_ecs_url = 'http://webservices.amazon.co.jp/onca/xml'

getopts("ml")

@img_size = $OPT_l ? "Large" : "Medium"
@img_style = 'margin:5px;float:left;'

def amazon_call_ecs(asin)
  url =  @amazon_ecs_url.dup
  url << "?Service=AWSECommerceService"
  url << "&AWSAccessKeyId=#{@amazon_access_key_id}"
  url << "&Operation=ItemLookup"
  url << "&ItemId=#{asin}"
  url << "&ResponseGroup=Medium"
  url << "&Version=#{@amazon_require_version}"

  timeout(10) do
    open(url) {|f| f.read}
  end
end

def amazon_get(asin)
  asin.strip!
  begin
    xml =  amazon_call_ecs( asin )
    doc = REXML::Document::new( xml ).root
    item = doc.elements.to_a( '*/Item' )[0]
  rescue
    print "ERR!"
  end
end

def mk_html(item)
  url = item.elements["DetailPageURL"].text
  img = item.elements[@img_size+"Image"]
  src = img.elements["URL"].text
  height = img.elements["Height"].text
  width = img.elements["Width"].text

  html =  %|<a href="#{url}" >|
  html += %|<img src="#{src}" height="#{height}" |
  html += %|width="#{width}" style="#{@img_style}" /></a>|
end

print mk_html(amazon_get(ARGV[0]))

実行すると、こんな感じ

/t$ asin.rb 4757141297
<a href="http://www.amazon.co.jp/exec/obidos/redirect?tag=ws%26link_code=xm2%26c
amp=2025%26creative=165953%26path=http://www.amazon.co.jp/gp/redirect.html%253fA
SIN=4757141297%2526tag=ws%2526lcode=xm2%2526cID=2025%2526ccmID=165953%2526locati
on=/o/ASIN/4757141297%25253FSubscriptionId=1Z2WBVE13037BDJ4YRG2" ><img src="http
://images.amazon.com/images/P/4757141297.01._SCMZZZZZZZ_.jpg" height="160" width
="111" style="margin:5px;float:left;" /></a>
/t$

うーん、便利じゃないか

| | Comments (0) | TrackBack (0)

きちゃないHFS

ユニマガがなくなるなんてヒドいわ!

それはともかく、UNIX USER改めOpen Source MagazineのMac OS Xの連載が面白い。NeXTはよく考えられたシステムで、さらにOS Xになって磨きがかかっている気がするね

で、今月号はHFS plusの話。こいつはNeXT由来じゃなくて、死んでしまったcoplandの遺産らしい。元々、完全にMac OSの世界。で、コイツの上でBSDを動かそうとすると、なんかきちゃなーいことがいっぱいあって、なんかセキュリティ的にヤバげなこともいろいろあるぞーって話。

うー、carbonとかOS 9互換とかぜーんぶ捨てていいから、標準のFSは変えた方がいいんじゃないのか~

でも、面白い話だった

| | Comments (0) | TrackBack (0)

iTMS

昨日、iTuneを(久しぶりに^^;;;)立ち上げたら「5.0にする?」って聞いてくるので、UPDATEしました。で、ふと思いたって、話題のiTMS(iTune Music Store)に繋いでみることにしました。

うーん、英語だー(笑)

いろいろいじっていると、"90年代 一発屋"特集を見つけました。いや、もちろん英語で書いてあったんだけど、英語でなんて書いてあったかは忘れた(笑)。買える曲は全部視聴できて、「ああ、あったあった、こんなの」と。で、欲しくなったら99セント出せば買えちゃう。うーん、このバラで曲を買うって仕組みはいいですね。ぶっちゃけアルバムだったらAmazonで買う方がいいもんな。

でも、最近はアルバムを買う人ってマイノリティなのかもしれないなあ。カラオケがコミュニケーションツールとして定着して、新しい曲はカラオケで歌えるようになるために消費されるという流れがもうずいぶん前から有りますが、着うたとかiTMSがその流れを加速していくんでしょうね。

というわけで試しにいくつか懐かしいものを見つけて、買おうと思ったんだけど、アメリカのクレジットカードがないとアカウントが作れないんだな(笑)。で、いろいろいじってたら、アカウントを作る最初のページで、「他の国の人はこちら」みたいな英語のリンクをめっけ(これが、めっちゃ小さい字なんだわ)。

そこでJapanを選んだ途端に繋がってるiTMSも全部日本仕様になりました。ほほー・・・さっきのページどこかわかんなくなっちゃったよ(笑)

でも、せっかくなので、試しに何曲か買ってみました。気志団とか。うーん、やっぱこのしくみは面白いぞ

| | Comments (0) | TrackBack (0)

こんなLLはXXだ

高橋メソッド版

あはは。腹イタイ。こりゃとても(仕事中は)読めない。ので、ここにメモ

普通のはこっち

| | Comments (0) | TrackBack (0)

きょうぽん

新型京ぽん  今日発売だー

でも、売り切れてるにちまいない・・・orz

| | Comments (0) | TrackBack (0)

LL D&N

今年も来ましたLL祭り。今年はLL Day and Nightだそうです。行くしか。

| | Comments (0) | TrackBack (0)

Ruby on Rails

仕事にちょっと余裕がでたので、Railsであそんでみることにする

るびまの記事を読みながら、ちまちま。MySQL 4.1を入れて(DBなんて普段触らないから、勝手がよくわからないなあ・・・)、rubygemsを入れて、gemsからRailsをインストール。おお、gemsべんりだなあ・・・

そして、テストDBを作ってまずActive Recordのテスト。

C:\Program Files\ruby-1.8\lib\ruby\gems\1.8\gems\activerecord-1.10.1\test>ruby -
I "connections/native_mysql" base_test.rb
./../lib/active_record/base.rb:225: uninitialized constant ActiveRecord::Base::C
lassInheritableAttributes (NameError)
        from c:/progra~1/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require
.rb:18:in `require__'
        from c:/progra~1/ruby-1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require
.rb:18:in `require'
        from ./../lib/active_record.rb:35
        from ./abstract_unit.rb:5:in `require'
        from ./abstract_unit.rb:5
        from base_test.rb:1:in `require'
        from base_test.rb:1

だめじゃん・・・。もりきゅうさんのところに対処法が。なるほど・・・

C:\Program Files\ruby-1.8\lib\ruby\gems\1.8\gems\activerecord-1.10.1\test>ruby -
I "connections/native_mysql" base_test.rb
Using native MySQL
Loaded suite base_test
Started
...............................................................................
Finished in 6.189 seconds.

79 tests, 169 assertions, 0 failures, 0 errors

これで動いた。うむうむ

| | Comments (0) | TrackBack (0)

Rubyで書く人工無能の本がでるらしい

むむむ、これは興味があるところ。

恋するプログラム~Rubyでつくる人工無脳

| | Comments (0) | TrackBack (0)

ホゲゆに

また師匠が本を出しました。今度は趣味丸出しの様です。でも、最近、こういう読み物が少なくなって寂しいなあ

| | Comments (2) | TrackBack (0)

MSがGrooveを買収

ITmedia エンタープライズ:「仮想オフィス」をMS Officeに統合――Groove買収の狙い

Grooveの「Virtual Office」製品は、Windows PCのユーザーが仮想的なワークスペースを作れるようにする。この仮想ワークスペースでは、世界中のインフォメーションワーカーが、あたかも同じオフィスにいるかのように同じ文書を使って作業できる。これを集中管理型の業務システムに統合するに当たり、Grooveは顧客とのプロセスを合理化できるP2P レイヤーを加えている。

うーん・・・MSにこれをもっていかれてるようじゃあ、オープンソース陣営もなんかだっさいねえ。MS Office互換のものなんてそんな後ろ向きなものを一生懸命こさえてないで、もっと新しいものをつくろうよ

| | Comments (0) | TrackBack (0)

rd2html-ext-lib.rbの修正

るびきちさんのrd2html-extを愛用させてもらってるんだけど、ちみっと改造

  • <h1>にTitleと出なくする
  • <h2>,<h3>のみ章番号を表示する

v1.5(2003/10/30)に対するぱっちをそのうちのっけるつもり

| | Comments (0) | TrackBack (0)

Shellで複数行をコメントする

わたなべひろふみさんの日記より。

こういう風にすればよいとのこと

 

: << 'COMMENT'
this is a comment
I can write anything here
COMMENT

にゃるほど・・・

| | Comments (6) | TrackBack (0)

Newマシン来る

2年に一度のお仕事パソコン更新。何も12/30に来なくてもいいと思うんだけど、久しぶりの休みはちまちまと環境移行。でも、まだまだ終わりそうにないです

いまはまってるのはローカルのtDiaryの移行。どーもうまく動かない。MSWIN版のrubyを呼んでるつもりでcygwinを呼んでたり・・・。MSWIN版のRubyは、artonさんのASR配布版を愛用させてもらっているんだけど、どういう事情か1.8移行はRDtoolが含まれなくなってしまったのです。うむむ・・・

以前はRuby1.8(mswin)+Apache(win32)で動かしていたんだけど、いっそ両方cygwinへ持っていこうかなあ・・・。そのほうが帰って楽かもしれない。ただ、ここにWebsphereを突っ込んだときに何が起こるか・・・うう・・・

あと、いつのまにか起動時にMS-IMEが毎回落ちるようになりました(笑)。いや、ATOK使うからいいんだけど、でも気持ち悪いや

| | Comments (0) | TrackBack (0)

最近のRD

こんなことしてるひとがいる

VirtualRD

うむむ

| | Comments (0) | TrackBack (0)

るびまのWin32OLEの記事

毎回、勉強しては忘れることがここにまとまっているっぽい。

Ruby使い以外にも有用な文章だと思われる。というか、Rangeオブジェクトの使い方に結構クセがあるんだよね

| | Comments (0) | TrackBack (0)

xfytec.com

xfytec.com

ためしてみなくてわ

| | Comments (0) | TrackBack (0)

recommuni

ここのところ、NWをつかった音楽配信の在り方について、しばしば考える。突然、レッシグなど読み始めたのは、実はそのためだったりする。

個人的には、IT mediaの小寺氏の

僕に一つ提案があるんです。もっと、個人認証技術を進めるべきだと思うんです。要するに、このコンテンツが誰の物であるかを明確にできれば、その人が持ち出す限りはOKであるという、そうした考えで世界を変えていかないと。誰がコンテンツを触るかに関係なく、回数だけで制限するというと、なんだか、もう、訳の分からない制限になっていっちゃうじゃないですか

という主張が一番すんなりと理解できる。これを、正しく運用できる技術やシステムが考案できるかどうかはわからないが、理想の形はこうあるべきだろう。

が、これは認証技術に詳しい友人からの猛反発を招いた。彼曰く、コンテンツと個人を結びつける仕組みは、トレーサビリティーの観点から非常によろしくないらしい。でも、私にはそれが、「仕組みとして本質的にマズい」のか、「個人情報がトレースされてしまうような技術を使うからマズい」のかが理解できない。マズいものを作ってしまう可能性は否定しないが、そこをうまくやれるように考えるのが技術者という奴だろう。

そんななか、Matzさんの日記recommuniというものが取り上げられていた。P2Pでの音楽の共有をソーシャルネットワーキングにより制限されたコミュニティで行うことにより、権利者から許可をもらおうという仕組みらしい。これはこれで、アリな考え方だ。うまく運用できるかどうかはわからないけど。がんばれー。そして、試しにだれか私を紹介してくれ(笑)

さて、この記事を書こうとおもって小寺さんの記事をあたってたら、やっぱり個人認証の話はおもいっきりツッコまれたらしく、弁明記事が出てる。ここに書いてあることも前回同様真っ当だ。私は小寺さんと同じ思考パターンを持っているようなので、前回の説明で、ネットのリポジトリに個人情報の問い合わせをするとはとても思えないんだが、まあ、そうではない人はいっぱいいるらしい。まあ、この記事では、わざわざ「指紋」なんて物議を醸しそうなものを例にしているが(指紋アレルギーの人だっていっぱいいるだろうに)、この記事にも示されているように、本質的にはクレジットカードと同じでいいのだ。クレジットカードは、「持っている人は本人」という、実にアバウトなルールで運用されている(ので、いろいろ問題が起こっている)が、別にこのレベルでも誰もやめようとは言い出さない。

だから、キーは指紋の様にめっちゃ確実性の確かなものでなくても、複製が容易に作れないものであればいい。それこそ、クローン携帯電話の問題が話題になった程度にケータイの複製は難しいのだから、赤外線ついたケータイから認証キーを送ってもいいわけである。ケータイもってないと音楽が聴けない?ケータイをリモコン代わりにして、外出時はケータイにヘッドホン差せばいいのだ(笑)


| | Comments (0) | TrackBack (0)

iPod mini

新幹線通勤が増えたので、携帯音楽プレイヤーが欲しくなった。NetMDを持っていたので、復活させて使ってみたのだが、どうも、充電出来たり出来なかったりへんてこな動きをする。ほったらかしていたら、壊れたっぽい

というわけで、iPod mini。実物を見ると、gigabeatも決してデザインは悪くなったのだけど、やっぱりiPodのデザインはすごい。それに、音に聞くiTuneをいじってみたかったというのもある。

でも、まだあんまり使ってません。単なるストレス解消の衝動買いで終わる可能性も、大(笑)

| | Comments (0) | TrackBack (0)

Rubyコーディング規約

Matzのblogで紹介されていた。Rubyコーディング規約。ほほーと思うが、Rubyはそれほど書く人によってスタイルが変わらないかもしれないね。

この中で

     
  •     メソッド定義の中にはコメントは記述しない。(コメントが必要だと思われるようなコードにはリファクタリングを行う。)  

という1文には考えさせられるね。うむむ~

| | Comments (0) | TrackBack (0)

師匠が本をだした

「UNIXシェルスクリプト逆引き大全 333の極意」がそれ。私は義務として購入します。つか、マジメに仕事の役に立ちそう

| | Comments (0) | TrackBack (0)

ぽえりな

また、ダメな本を買ってしまいました

こんなサイトが・・・

しかし、デスクトップLinuxが下火なイマドキ、なかなか愉快な本である。
個人的にはLCARSがほしいんじゃが・・・

| | Comments (2) | TrackBack (0)

機種変してきた

昨日の帰りに調子の悪かった403Cを見捨てるべく、大須へ。機種変してきました。

これでh2210では、ネットにつなげられなくなってしまったわけですが、
ほっとんど使ってないからいいよね(笑)

で、今日、使っているんですがアンテナを収容した状態でも普通の環境なら問題なく使えます。
新幹線の中でも、ときどきパケットが届かなくなることはありましたが、回線が切れることはありませんでした。
徐々によくなっているのは素晴らしいぞ、がんばれDDI!

| | Comments (0) | TrackBack (0)

Meadow 2.0

7/7にリリースされてた。知らなかった

なんかかっこいいWikiサイトもできてる

さっそく遊んでみなければ!

| | Comments (0) | TrackBack (0)

Air H":AH-H407P

愛用していたAH-H403Cが(たぶん)壊れた。デバイスとしてはちゃんと認識している見たいなんだけど、動かない。ちゃんと動作確認するにはどうしたらいいのかは、よくわかんない。

で、修理に出そうかと思ったんだけど、この際、機種変しちゃうのもアリかなーと思ってH"のサイトを見かけたら、AH-H407Pという新しい端末が出てた。PCカードスロットにすっぽりと収まるらしい。これいいね!

ただ問題はiPAQで使えなくなることなんだけど、現状では全然使ってないしなあ・・・うーむ。実際はスケジュールだけ確認できればいいので問題ないんだよなー。うむむ・・・

| | Comments (0) | TrackBack (0)

無線LAN対応ランプ

VIOLETの「La lampe "Dal"」。一見は普通のイルミネーションだが、実は世界初という無線LANに対応したランプ。あらかじめPC側で株価情報や天候、メールの受信など任意のトリガーを設定しておくことで、イルミネーションの点灯が多彩に変化して状況を知らせる。ユーザーはそれを見て、株価の上昇や下落、天候の変化などを理解するという仕組み、もちろん点灯パターンを自分で覚える必要はある。739ユーロで販売

FF XIの競売に出してるモノが売れたら色が変わるランプを希望(笑)

| | Comments (0) | TrackBack (0)

tDiaryをインストール

ここには、公共性はないが公共にさらしてもいいものをうだうだと書いているが、それとは別に自分の作業記録の管理や、仕事上で得たTipsなどを溜めておく場所が必要だ。

以前はRDでメモして、RDtoolでHTMLにして見るシステムを作っていたんだが、全部バッチとRubyスクリプトで作った柔軟性のかけらもないシステムでメンテがメンドくさかった。で、mswin版Rubyを1.8にしたら、なんかうまく動かなくなっちゃったので放置してた。

代わりのモノが欲しかったんだけど、すでにRDじゃないと書く気がしない・・・

で、これに替わる仕組みとして、tDiaryを導入。前の仕組みに比べて、常時Apacheを動かしておくのは何だかなあって感じだが、まあ、それはしょうがない。その分、楽させてもらうわけだし。

で、さくっとローカルへインストール。当然、localhostからのアクセスしか受け付けません。
さらに、いちいちブラウザから書いてられないので、記入用ツールを作成。
要するに、秀丸で書きたい(笑)
posttdiary.rbをパクりつつ、バーミヤンで晩飯食いながら出来た(笑)

というわけで、とても便利になった。うむうむ

| | Comments (0) | TrackBack (0)

レベルゲートCD

先日買ったCDなのだが、レベルゲートCD2というモノらしい。CDDAじゃない音楽CDを毛嫌いする向きもあるみたいだけど、個人的にはあんまり困ってないのでどっちでもいい。ただ、掃除してる間、DVDプレイヤーに突っ込んでテレビで聞いていたときに、最後のトラックの次にホワイトノイズが再生されてしまった(つまり、データ域も再生しちゃった)。これは、どうなのよ。つか、何事かと思ったよ。

で、このCDの中身をPCへ移そうとすると、専用のアプリがいるらしい。CDを買うと中に入っているほか、もちろんネットから落としてくることも出来る。で、CDをPCへ突っ込むと例によってAutorunするんだけど、Buleのほうはバグってるのか、私のCDかPCがおかしいのか、エラーで落ちる。Redの方からインストール出来て、そのアプリからHDへ移すのは問題なかったんだけどね。

さらに、今度はこのCDの中身をひさびさ登場のNetMDへ移したい。レベルゲートCDはソニーの仕組みだから、もちろん出来ないわけはない・・・んだよねぇ。ほんとかどーかはしりませんよ。3年前に買ったMDだし・・・。ヘルプを見て、書いてあるとおりにOpenMG Jukeboxへ曲を転送・・・できんし(^^;

転送のボタンを押すと、「転送できる曲はありません」。さっぱりわからん。で、そのあとOpenMG Jukeboxを何度か再起動してると、いつの間にかプレイリストに曲が・・・。でも、普通はアルバム=プレイリストなのに、アルバムに入ってる曲の数だけプレイリスト出来てるし(T-T)

いやね、私はソニーさんの「現状はたぶん変えられないけど、でも、ウチラがいいと思うのはこれなんじゃい!」と次々に敗北していく姿はキライじゃないし、Hi-MDなんかも買っちゃいそうな勢いですけど、さすがに途中で「ちくしょう、MP3にリッピングするぞ、コラァ」と思いましたよ。いや、マジで

| | Comments (0) | TrackBack (0)

久しぶりに秀丸をチェックしたら

秀まるおのホームページを確認したら、3日前に秀丸がバージョンアップしてた。4.12らしい。今、自分のPCにあるのは4.07

へー、4.1で何が変わったんだ・・・むむ、「文字コードの自動判別が賢くなった」とな?「バイナリ編集できるようになった」とな?!「テキストブラウザになった」とな!!

うーむ、秀さんマメでえらい・・・というか、10年前に払った4000円でずーっと使わせてもらってて申し訳ないような気持ちに・・・

| | Comments (0) | TrackBack (0)

Momonga Linux 1 リリース

コが死んで、2年。やっとリリースになったそうです。

ひさしぶりにmph-getしてみようかのぅ

| | Comments (0) | TrackBack (0)

LL侍

LL Weekendでの早川さんの芸

ここにあがってた。聞き取れなかったのもあったから、うれしい

| | Comments (0) | TrackBack (0)

Javaはう○こ

私はJavaがキライだ

なんでJavaがキライかというと、Javaがダサイから。どのぐらいJavaがダサイかというと、Groovyなんてもんが作られるぐらい。Groovyというのは、JVMの上で動くRubyとかPythonみたいなものらしい。JVMやJava APIをLL(Lightwight Language)のインフラとして使おうという試みらしいが、ぶっちゃけ

Javaのクソな文法を使わずに.classつくりてぇ

という意図のような気もする。

だって、上原さんの紹介記事の「便利なコレクション」の部分でGroovyで2行で書かれているものが10行以上になっているのを見ると、そりゃ、もう同じことが出来るんなら、Javaでなんて書くものかと思いません?

いや、片方は動的なLLで片方は静的な強い型付だから比較は意味がないとあなたは言うかもしれない。でも、はじめて覚えたプログラミング言語がPascalで、もうずいぶん触ってないけどDelphi大好きの宣言原理主義からみて、とにかくJavaはダサくみえるのよね。なんか、書かなくていいことをいっぱい書かされるし、回りくどいし、クラス設計ださいし!!

もー、中身が空の( )とか、ダセェ~!!思わずvoidとか書きたくなるじゃん【違 】

| | Comments (0) | TrackBack (0)

山田祥平のRe:config.sys

山田祥平のRe:config.sys

どうしてあれだけの繁栄を勝ち取ったワープロ専用機が消え去ってしまったのか。それは、ワープロでは役に立つことしかできなかったからであり、役に立たないことをするためには、ワープロ専用機は、汎用機としてのパソコンになるしかなかったのだと思う。
ワープロ専用機がなくなったのは、「日本人にはワープロが役にたたなかった」からではないかと思う。というのも、私の周りでワープロを使って文書を書いている人を見かけないからだ。私の周りでは、文書はほぼ80%がExcelとPowerPointで作られている。

結局、日本人は書類を作っているときに、「印刷したら何枚になるか」ということがとても大事なんじゃないか。それは日本の帳票文化と大きくつながっている面である。ノートPCの解像度でVGAが当たり前になり、印刷イメージが見渡せる広さになると同時に、ワープロは、Excel(ただし、どのセルまでが印刷に入るかが人目で、罫線が簡単に引ける報告書作成ソフトとして)とPowerPoint(プレゼンを見ても、同じモノが手元に入らないと気にくわない心配性)に負ける運命だったのではないかと思う

しかし、それにしても、ExcelやPowerPointで文書を作るときのめんどくささといったらないね。でも、改ページを気にしてつくるWordより全然楽なのは認める。でも、やっぱ、Excelはやだー!
というわけで、やっぱ日本人にとっての最強ワープロはDTPなんじゃなかろか(笑)

| | Comments (0) | TrackBack (0)