4.30.2009

ふっふぅ~おやすみタイマーWindows版

ニコニコ生放送の中でも数少ないLinux関連放送の主である、いな氏が作られた「ふっふぅ~おやすみタイマー」のWindows版を作りました。

入手はこちらから。

3分に一度、ふっふぅ~が聞こえてきます。それだけです。
ソースもパッチ形式で公開しています。

本家はこちら。

※ VC++2008(Pro)で開発してますが、MinGW + Debian(以下略 の変態環境でもビルドできることを確認しました。

4.27.2009

ゴールデンウィークの予定決定&模様がえ

ゴールデンウィークの予定が確定しました。
5日まではカレンダー通りお休みで、6日はファミリーそろってお出かけ。
んでもって、7日以降は通常に戻るという予定になりそうです。
遊びに誘ってくれる型は、5日までにお願いします。


あと、部屋の大幅な模様替えをしました。
ゴールデンウィーク中、誰も遊びに誘ってくれなかった場合を考慮して、ガンプラを準備してあるので、案外充実した休暇が過ごせそうです。

それではみなさんも、Enjoy!

4.25.2009

私の.zshrcと.emacs―― 一番大切なファイル。

coLinuxを起動しようとしたら、どういう訳かブルースクリーンに。
ものすごく久しぶりに遭遇した青一面の画面だっただけに少々驚いたが、そういえばcoLinuxはこういうリスクもはらんでいるんだったと再確認。

そんでもって、やっぱりバックアップしておいた方が良さそうだと思うファイルをブログに貼り付けて保存しておこうと決意したワケ。
以前のソフトサポート用ブログは既に削除してしまったので、あちらに取ってあったバックアップが無いのだということに気づいたってのも一つの理由だけれども。

まずは.zshrc。
環境変数は.zprofileで設定してあるけど、それほど複雑じゃないから省略。

autoload -U compinit
compinit
bindkey -e
setopt auto_cd
setopt auto_pushd
setopt correct
setopt list_packed
setopt nolist_beep
setopt hist_ignore_dups
setopt share_history
export LSCOLORS=ExFxCxdxBxegedabagacad
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:o
w=43;30'
zstyle ':completion:*' list-colors 'di=;34;1' 'ln=;35;1' 'so=;32;1' 'ex=31;1' 'bd=46;34' 'cd=43;34'

# Lines configured by zsh-newuser-install
HISTFILE='/home/hogehoge/.histfile'
HISTSIZE=10000
SAVEHIST=10000
PROMPT='[%D{%Y/%m/%d(%a)} %T <%(5~,%-2~/.../%2~,%~)>]
[%n@%m]%# '

# command aliases
alias ls='ls -B --color=auto'
alias ll='ls -ABl --color=auto'
alias la='ls -al --color=auto'
alias less='lv'
alias rm='rm -rf'


つづいて.emacs
(setq inhibit-startup-message t)
(setq scroll-step 1)

(set-locale-environment nil)
(coding-system-put 'utf-8 'category 'utf-8)
(set-language-info
"Japanese"
'coding-priority (cons 'utf-8
(get-language-info "Japanese" 'coding-priority)))
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(global-font-lock-mode t)
(setq backup-inhibited t)
(setq delete-auto-save-file t)

;;Anthy
(load-library "anthy")

;;uim
(setq default-input-method "japanese-anthy-uim")
(setq uim-default-im-prop '("action_anthy_hiragana"))
(setq uim-candidate-display-inline t)

;;slime
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
(add-hook 'lisp-mode-hook (lambda ()
(slime-mode t)
(show-paren-mode)))

(require 'slime)
(setq inferior-lisp-program "clisp")
(slime-autodoc-mode)

;; scheme-mode
(autoload 'scheme-mode "scheme-mode" "scheme" t)
(setq auto-mode-alist (cons '("\.ss$" . scheme-mode) auto-mode-alist))

;; html-helper-mode
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '("\.html$" . html-helper-mode) auto-mode-alist))

;; css-mode
(autoload 'css-mode "css-mode" "Editing CSS" t)
(setq auto-mode-alist (cons '("\.css$" . css-mode) auto-mode-alist))

;;cedet
(require 'cedet)
(global-ede-mode t)
(semantic-load-enable-code-helpers)
;; region
(setq transient-mark-mode t)

;; show clock
(display-time)

;; show column number
(column-number-mode t)

;; scheme
(setq process-coding-system-alist
(cons '("gosh" utf-8 . utf-8) process-coding-system-alist))

;; gosh interpriter path. -i option is interactive mode
(setq gosh-program-name "/usr/bin/gosh -i")

;; scheme-mode and run-scheme-mode use to cmuscheme.el
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)

;; pair of brace
(show-paren-mode)

;; indent
(put 'and-let* 'scheme-indent-function 1)
(put 'begin0 'scheme-indent-function 0)
(put 'call-with-client-socket 'scheme-indent-function 1)
(put 'call-with-input-conversion 'scheme-indent-function 1)
(put 'call-with-input-file 'scheme-indent-function 1)
(put 'call-with-input-process 'scheme-indent-function 1)
(put 'call-with-input-string 'scheme-indent-function 1)
(put 'call-with-iterator 'scheme-indent-function 1)
(put 'call-with-output-conversion 'scheme-indent-function 1)
(put 'call-with-output-file 'scheme-indent-function 1)
(put 'call-with-output-string 'scheme-indent-function 0)
(put 'call-with-temporary-file 'scheme-indent-function 1)
(put 'call-with-values 'scheme-indent-function 1)
(put 'dolist 'scheme-indent-function 1)
(put 'dotimes 'scheme-indent-function 1)
(put 'if-match 'scheme-indent-function 2)
(put 'let*-values 'scheme-indent-function 1)
(put 'let-args 'scheme-indent-function 2)
(put 'let-keywords* 'scheme-indent-function 2)
(put 'let-match 'scheme-indent-function 2)
(put 'let-optionals* 'scheme-indent-function 2)
(put 'let-syntax 'scheme-indent-function 1)
(put 'let-values 'scheme-indent-function 1)
(put 'let/cc 'scheme-indent-function 1)
(put 'let1 'scheme-indent-function 2)
(put 'letrec-syntax 'scheme-indent-function 1)
(put 'make 'scheme-indent-function 1)
(put 'multiple-value-bind 'scheme-indent-function 2)
(put 'match 'scheme-indent-function 1)
(put 'parameterize 'scheme-indent-function 1)
(put 'parse-options 'scheme-indent-function 1)
(put 'receive 'scheme-indent-function 2)
(put 'rxmatch-case 'scheme-indent-function 1)
(put 'rxmatch-cond 'scheme-indent-function 0)
(put 'rxmatch-if 'scheme-indent-function 2)
(put 'rxmatch-let 'scheme-indent-function 2)
(put 'syntax-rules 'scheme-indent-function 1)
(put 'unless 'scheme-indent-function 1)
(put 'until 'scheme-indent-function 1)
(put 'when 'scheme-indent-function 1)
(put 'while 'scheme-indent-function 1)
(put 'with-builder 'scheme-indent-function 1)
(put 'with-error-handler 'scheme-indent-function 0)
(put 'with-error-to-port 'scheme-indent-function 1)
(put 'with-input-conversion 'scheme-indent-function 1)
(put 'with-input-from-port 'scheme-indent-function 1)
(put 'with-input-from-process 'scheme-indent-function 1)
(put 'with-input-from-string 'scheme-indent-function 1)
(put 'with-iterator 'scheme-indent-function 1)
(put 'with-module 'scheme-indent-function 1)
(put 'with-output-conversion 'scheme-indent-function 1)
(put 'with-output-to-port 'scheme-indent-function 1)
(put 'with-output-to-process 'scheme-indent-function 1)
(put 'with-output-to-string 'scheme-indent-function 1)
(put 'with-port-locking 'scheme-indent-function 1)
(put 'with-string-io 'scheme-indent-function 1)
(put 'with-time-counter 'scheme-indent-function 1)
(put 'with-signal-handlers 'scheme-indent-function 1)
(put 'with-locking-mutex 'scheme-indent-function 1)
(put 'guard 'scheme-indent-function 1)

;; memo
(setq user-full-name "hogehoge")
(setq user-mail-address "e-mail@example.jp")
(defun memo ()
(interactive)
(add-change-log-entry
nil
(expand-file-name "~/.memo/memo.txt")))
(define-key ctl-x-map "M" 'memo)

;; password hide
(add-hook 'comint-output-filter-functions
'comint-watch-for-password-prompt)

;; c-mode hook
(add-hook 'c-mode-hook
'(lambda ()
(c-set-style "BSD")))

(add-hook 'c++-mode-hook
'(lambda ()
(c-set-style "BSD")))
;; ls color mode off
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

;; w3m
(require 'w3m-load)

;; wget-el
(load "w3m-wget")


.emacsが長いのはご愛敬。

# ブルースクリーンになった原因が、昨日のお引っ越しじゃなきゃいいんだけど……。

4.24.2009

coLinuxのディスクを拡張

これまで4GBのディスクイメージを割り当てて動かしてきたけれど、使用率が90%を超え、いい加減足りなくなる気配が見えてきたので、足りなくなる前に増設することに。

これまで何度も経験しているから、もう慣れたもんだね。

下準備として、10GBのブランクイメージ(hogehoge)を用意。今回はfsutilでやったけど、ネット上で適当に拾ってきても良いと思う。

拾ってきたら、coLinuxを止め、設定ファイルを書き直す。
具体的には、
cobd2="C:\coLinux\hogehoge"
のような感じで、今持ってきたイメージを適当な番号のcobdデバイスに割り当ててやる。

ここまでできたらcoLinuxを起動。
(心配ならシングルユーザモードでやるべし)

coLinuxコンソールからrootでログインし
# dd if=/dev/cobd0 of=/dev/cobd2
とかして、古いディスクの内容を新しいディスクに書き込んでやる。

書き込みが終わったら(我が家の環境では20分ぐらいかかった)、新しいディスクに対して
# e2fsck -f /dev/cobd2
とかしてディスクチェックを書ける。

ディスクチェックがすんだら、
# resize2fs -p /dev/cobd2
とかしてディスクサイズをリサイズしておく。
リサイズ後には、もう一度ディスクチェックをかけてcoLinuxを終了。

今度は設定ファイルのプライマリディスクに新しいディスクを持ってきて起動検査をする。
うまくいけばそれでよし。
古いディスクは、しばらくバックアップのためにとっておいて、トラブルがあったらいつでもリストアできるようにしておいた方が良さげ。

4.23.2009

Codezineに記事が掲載されました。

wxJavaScriptを使ったデスクトップアプリケーションの作成
と題して、wxWidgetのJavascript向け実装である、wxJavaScriptに関する記事を掲載していただきました。

また、手元の環境でより詳細なベンチマークができないか検討した上で、いつものトコロにて以下の記事を公開しております。
ご参考までにご活用ください。
モンテカルロ法による円周率の計算を用いたベンチマークスクリプト

4.16.2009

Logicool Wireless Mouse M305を買ってみた。(写真アリ)

これまで使ってきた、ビックピーカン(池袋本店)で購入した500円マウスが、USBポートに差し込んでいるのに認識されないとか、使っている最中に突然抜けたことにされちゃうとかで、いい加減使い物にならなくなってきたので、マウスを買い換えることに。

これまで500円代のマウスしか使ったことが無かったけれど、それで何度も買い換えている現状を鑑みると、多少高くとも、ある程度長く使える製品を購入した方が、結果として出費は少ないのではないかと考えられた。

そこで、今回は人生初のワイヤレスマウスにチャレンジ。
購入したのはLogicool Wireles Mouse M305という、4月10日に発売されたばかりの新製品。

ブラックが安かったけれど、今使っているPC本体の色がホワイトであることと、今後も黒いPCを買う予定は無いことを考えてシルバーをチョイス。
いずれの色も3000円以下で購入できるので、ビックピーカン店頭で5000円などと謳われているワイヤレスマウスを見てきた者としては、大変お得感がある。




さっそく箱をあけて、内容物を確認。
電池が付属していないと不安だったのでエネループを一緒に購入した。



パッケージ裏面。
従来の300倍のデータ転送速度なんだとか。
たぶん、1000dpiのセンサを搭載した光学マウスは、自宅で使う者としてはハジメテかも。



保証書。
これまでマウスをほぼ1年ごとに買い換えてきた身としては、3年も保証してくれるのは、飛び上がるほどにうれしい。


さっそくパッケージを開封。
あけ口がどこか分からなくて困ったけれど、5分ほど格闘してようやくあけることができた。



開封後、内容物を並べてみると、なんと単3電池が付属している……。
エネループを買う必要が無かったとは……orz

まぁ、今後バッテリーを交換しなければ居なくなったときに備えているということで納得するか。

それにしても、最近の製品じゃ電池付属って当たり前なんだろうか?(´・ω・`)
少なくとも、子どもの頃ハマったミニ四駆は電池別売りだったぞ。

気を取り直して内容物を確認。

  • マウス本体

  • ナノレシーバー

  • 単三電池×1

  • クイックスタートガイド


ドライバやら、クイックスタートよりも詳しい取扱説明書の類は入っていないらしい。

小型ワイヤレスマウスってのがウリらしかったので、大きさが気になっていたけれど、単三電池より一回り大きいぐらいで、以前使っていたものとそう変わらなくて安心した。

ナノレシーバーには、Logicoolのロゴが印字されている。


マウス後部の電池カバーを開けてみたところ。
電池がやや入れづらい印象を受けた。
ただ、重さについてはAmazonで表示されていた輸送重量が500グラム弱だったので、重たいかな?と思っていたけれど、いざ電池を入れて持ってみると、重さもストレスになるほどのものではなく、コンパクトデジカメと大差なかったので安心。



マウス前面。
画像だとわかりにくいけれど、チルトホイールを搭載している。
以前使っていたマウスが、500円にしては珍しくチルトホイールを搭載していたので、これは譲れないポイントだった。
一度この使い心地になれると、なかなか他に乗り換えられないと思う。



パッケージ裏面で強調されていた、ソフトラバーの側面。
確かに触り心地はいいかも。



本体底部。
スイッチと電池カバーを開けるためのボタンが付いている。
使わないときは電源OFFにしとけば、電池の持ちも良くなるって事か?
一点だけ、マウス上部後方にロゴが印刷されているのに、底面にまでロジクールのロゴが必要なんだろうかとは思ったけれど、きっと自己主張の強い会社なんだろうね。



一通り眺めたところで、さっそくパソコンにつないでみる。
使い方は至ってシンプルで、

  • 電池をマウス本体に入れる

  • PCの電源を入れる

  • ナノレシーバーをPCに差し込む

  • マウスの電源をONする


という4ステップで使える。
マウスのボタンに機能を割り振るには専用のソフトを落としてくる必要があるけれど、そうでなければ特別ドライバをインストールするような作業も必要ない。
こういう所は、最近の高機能化が進むマルチボタンマウスに比べたら、断然使いやすい所だと思う。

電源を入れると、マウス上部のバッテリ残量ランプが緑色に光る。
でもこのランプ、電源ONの時に10秒ぐらい光るだけで、その後はほとんど活躍する場が無い。
バッテリ残量が少なくなったら、赤く点滅して警告してくれるらしいので、その時の働きに期待。


ナノレシーバーを差し込んでみたところと、大きさの比較。
横に刺さっているのは、HHK Lite2のUSBケーブル。(要するにプリンタなんかにも使われている普通のUSBケーブル。)
こうしてみると、ナノレシーバーは1/5ぐらいしか飛び出してないことが分かる。
小さいとは聞いていたけれど、ここまで小さいとは思わなかった。





実際にGIMPやIllustratorを使ったデザインチックな作業とか、プログラミングをするときのコンポーネント配置とか、Flashを使ったウェブゲームに使ってみたけれど、非常に快適に動いてくれている。
専用のソフトを入れればゲーミングマウスとしてゲーム起動時だけボタンの役割を変えるようなこともできるみたいだし、かなり使い勝手はいいと思う。
左右のボタンのクリック感も良く、ホイールも狙ったところにビシっと決められてストレスがない。

本体のサイズだけ合って、チルトホイールが若干使いにくいと感じる場面もあったけど、それ以外は100点な製品だと思う。もしかしたら、マウスにこだわるユーザにしてみたらダメなところがあるのかもしれないけれども。

また、マウスのように良く動かす製品について、ケーブルの取り回しがないことがこれほど楽なことだとは予想谷しなかった。
おそらく、今後買い換えるときもワイヤレスマウスにするだろうと思う。

これに感動したあげく、M305オーナーの会でも立ち上げてしまいそうな勢いだ。
ちょっと使えるマウスを探している方がいたら、一緒にM305オーナーになりませんか?

4.13.2009

本を読む。

これは技術書というのか、雑学書というのか……。
一言で言えば、数学の式とプログラムのコードが出てこない(実際には出てくるけど、内容の本質的な部分には絡んでこない)遺伝的アルゴリズムの入門書といった感じ。

ちょうど一般書と技術書の中間ぐらいに位置する、面白いポジションの本だと思う。
著者はゲームクリエイターで、人工知能を使った様々なゲームを提案しているのだという。
中には、この人の作ったゲームを知っている方も居るかもしれない。

内容は、マッチ箱を使って遺伝的アルゴリズムを体験するという異色の一冊。
けれども、概念的な説明を丁寧にして、その後でマッチ箱による実践とステップアップしていく構成だから、遺伝的アルゴリズムの概念をやさしく理解したいと考えているならオススメできるかも。



ただ、登場しているマッチ箱を使ったAIは、とても個人のレベルで実現できないから、私はExcelを使って実現したので、マッチ箱でやりたい!と思っている方はそれなりの覚悟がいるかも。
(仕組み的には、棒と小箱で代用できるので、マッチ箱AIベースの面白い「何か」を作った方は教えてください)

乱数発生の方法が分かっていれば、簡単なスクリプト言語でやっても実現可能だと思う。
自分で作った人工知能が、(選択問題とは言え)難しい問題を解いてていく様は、やっぱり感動するものがある。

ちなみに、購入した動機は人工知能系科目のレポート用で、その時はきちんと読んでいませんでしたが、今読むととても面白いことに気づきました。
まぁ、そういう不純な動機で購入しても、面白い本には出会えるってことだね。
逆に言えば、そういう目的の人にもお勧めできる一冊だと思う。

人工知能に興味があるなら、一度読んでみるといいかも。

4.12.2009

読書。

しばらくぶりの技術書。
あんまり読書に割ける時間がないから、できるだけ薄い本をチョイスした。
今回読んだのは、入門 Common Lispという書籍。



でも、この本、「入門 Common Lisp」とは名ばかりの本で、とてもじゃないけどLisp初心者に勧められる本じゃないと思う。

というのも、内容は「Lispらしいプログラムをいかにして書くか?」に重点が置かれていて、なおかつ(筆者の考える)Lispらしさを実現するための4つのポイントというのが主題になっているから。

サブタイトルにある、「関数型4つの特徴とλ計算」って方が主題だと思う位、Common Lispの入門書としてはオススメできない。

むしろ、入門書の次に読む本という位置づけで、Lispでプログラムを書いても、どうしても手続き型言語っぽくなってしまうと悩んでいるプログラマにもってこいの書籍だと感じた。

薄い本を選んだだけあって、1日で読んでしまったので、時間は無いが関数型言語の空気に触れたいと考えている人にもお勧めかなあ。

実行環境についてはxyzzyというEmacsライクなエディタ上で実行することを前提になんて書かれてるけど、文を読む限りじゃGCLをメイン環境として選んでいるように感じた。まぁ、一部取り扱い方の違う関数についてはきちんと明記してあるから、どの環境でLispをやっていても、サンプルの実行には困らないと思う。

個人的に面白いと思ったのは、随所にC言語との比較があるところ。
関数型ってこんなところに影響を及ぼしているのか!という再発見的な楽しみがあるのはGoodだと思う。

8章をまるまる割いて解説されているλ計算については、数学的な背景のある人ならば楽しめると思うけど、やっぱり入門書と銘打った書籍で解説する内容じゃないよなと感じた。(もちろん、網羅的な内容の書籍なら話は別だけど。)

いろいろと文句は書いたけど、総合的に見て、内容はよくまとまっていて読みやすかった。
きっと、筆者はこんな風な講義をするんだろうなと思えるところが随所に見られて、これもまた面白かった。

Lispの文法は覚えたけど、はて次は?と思っている方、ご一読ください。

4.05.2009

壁紙検索の小技。または壁紙検索の方法。

当たり前だと思ってやってたんだけど、友人宅でやったらやたらと驚かれたので、ここにメモったら誰かの参考になるかと。

1.Google イメージ検索にいく(http://images.google.co.jp/imghp)
2.検索窓に、探したい壁紙の縦横サイズを入力
ex) 1024x768, 640x480
※ 特殊なピクセル数の画面を使っていても、案外うまく検索できる。まずは試してミソ。
3.んで、画像検索をする

すると、希望サイズの画像ばかりが得られるという寸法。
何かの折にはお試しあれ。

4.03.2009

さっと一品:肉うどん

携帯カメラによる撮影&撮影者の腕がカスなので、写真ではあまりうまそうじゃないけど、小腹が空いたときにさっと食べられる、肉うどんの紹介。

というか、今日は何もなかったので、夕食にこれを食べました。
ちょっと濃いめの味付けなので、疲れてるときとか、飲んだ後のシメにもGoodだと思う。

そう、理系×物理系÷情報工学系=アレゲ人間なおいらでも、料理ぐらいするのです。
もっぱらお手軽料理ばっかりだけど。



材料:
・ うどん……1玉
・ 豚肉(肩ロース切り落とし)……お好みの量
・ ネギ……適量(今回は7センチぐらい)
・ うすくち醤油……大さじ1
・ みりん……大さじ1/2
・ 昆布だしの素、鰹だしの素……適量(スティックタイプで半分ぐらい)
・ 砂糖、塩……適量

作り方:
鍋にお湯を400cc用意。ちなみに俺は深めのフライパンでやりました。
(水からわかすときは、450ccの水をわかせば、だいたい良い量になる。)
お湯が沸いたら、だしを投入。
スティックタイプのもので半分ぐらい入れる。
割合については、俺は1:1でやるけど、好みに合わせて。(もちろん、入れる量もお好みで。)
だしが溶けたら、豚肉を投入。
豚肉に火を通している間に、ネギを切る。
7センチのものを3等分ぐらいにしたけど、お好みの大きさにすると良い。
ただ、あまり大きいと火の通りも香りの出も悪いので、一口大ぐらいにしておくと良いと思う。
ネギを切ったら、鍋のアクを取り、うどんを投入。アクの取れ具合はアバウトで。
(くしゃくしゃにしたアルミホイルを落としぶたのようにして落とすと、一発で取れてGood。)
一煮立ちしたら味付け。
火を弱くして、うすくち醤油→みりんの順に入れたら、味を見ながら砂糖と塩で調整する。
(うすくち醤油は色の割に濃い味が出るので、色を目安に入れてはいけない。)
味が調ったら、最後にネギを入れて一煮立ちさせれば完成。
お好みで一味唐辛子や七味唐辛子を加えるとなおウマイ。
調理時間にして、お湯を沸かすところからはじめて20分弱ぐらい。
小腹が空いたときにさっと作れてうまいので、お試しあれ。