2009年1月30日金曜日

schemeでラムダ式をちょろっと勉強する

最近ちょこちょこschemeの勉強をしてる。
以下のコードなんだけど。

リスト ls から指定した値 x を除去する関数 remove-x

(define (remove-x x ls)
(if (null? ls)
'()
(let ((h (car ls))) ; ls のheadの値をhに束縛
(if (eqv? x h) ; 引数xとhは同じ値か?
(remove-x x (cdr ls)) ; 同じならlsのtailを引数にして再帰
(cons h (remove-x x (cdr ls))) ; 違うならhを再帰処理の結果と結合する
))))

上の例だと再帰関数であるremove-xを,if文の結果がtrueのときとfalseのときとで2回書く必要がある。これをラムダ式を使うと、以下のように書き換えることができる。

(define (remove-x x ls)
(if (null? ls)
'()
(let ((h (car ls)))
((if (eqv? x h)
(lambda (y) y)
(lambda (y) (cons h y)))
(remove-x x (cdr ls)) ;; ラムダ関数の引数yに束縛する関数
))))

こう書くことで (remove-x x (cdr ls)) がラムダ関数の手続き中の変数 y のところで展開され、処理としては最初に示したコードと同じになる。再帰関数の記述の箇所が1箇所で済むようになった。

ラムダ式、おもしろっ。

schemeのレキシカルクロージャとかラムダ式とかが何となく分かった気がしてくると、これまで今いち掴めなかったJavasScriptについても何だか腑に落ちてきた気がする。anonymous関数とかね。

2009年1月12日月曜日

年末の電気屋にて

会社の同期が最近流行りのネットブックを見たいってんで、秋葉原のヨドバシカメラへ

ネットブックのコーナーへ行ってみると、まあ知らない間にいろんなメーカーから出てること出てること。
こっちに出てくる前にPCが壊れて急場しのぎで初代EeePCを買った訳だけど、今更ながらにもう少し様子を見れば良かったって思ったりする。
後の祭りだけどね。

EeePCだけ見ても、
こんなんとか、http://eeepc.asus.com/jp/products101-spec.html
こんなんとか、http://eeepc.asus.com/jp/product1000h.html?n=0

S101など結構良い感じっすね。軽いし。お洒落だし。キーボードも初代に比べて打ちやすいし。ちなみに同期はS101をご購入されたようです。

でも多分今使ってるEeePCが壊れたら、次はiPhone 3Gあたりになると思います。ぶっちゃけ、何のためにネットブック持ってるかって言ったら、主に帰省したときのWebブラウズ用ですから。PCである必要も実はあまりないのです。



そんな話。

2008年12月23日火曜日

Macのアンチウィルスソフトについて

Macのアンチウィルスソフトとして、今まではClamXavを使っていたが、今回iAntiVirus(http://www.iantivirus.com/)なるものに乗り換えてみた。
UIが分かりやすく作られており、インストール、アンインストールも簡単に行える。ウィルス定義ファイルの自動アップデートや定期スキャン、常駐保護等のアンチウィルスソフトが持つべき基本的な機能が備えられており、導入から利用までが簡単にできるってことで良い感じだと思う。

このソフトの評価や感想について色々検索してるいると、気になる記事を見かけた。

追記:コメントで教えていただいたのですが、TimeMachineでバックアップがうまくできなくなる不具合があるようです。TimeMachineのバックアップが失敗してしまう方は疑ってみると、いいかも知れません。

パワフルなウィルス除去ソフト『iAntiVirus』 | Macの手書き説明書より引用】


しかし、サポート掲示板をチェックしてみると最新の1.2版では上記の問題は修正されているようだ。
実際に自分の環境でもiAntiVirusを導入しているが、TimeMachine及びTimeCapsuleは問題なく動作している。

2008年12月15日月曜日

TimeCapsuleを導入した。

さーて久々にブログでも更新してみるか、って思ってみたら最後の更新からもう3ヶ月経とうとしてるじゃないですか。
もう少し、頑張ろうか。


自宅に無線LAN環境が欲しかったのと、データのバックアップとか、サブPCとのファイル共有とかがやりたかったのでTimeCapsuleを導入した。その際にあれこれしたことを備忘のために残しておく。

■初期設定
ネットワークの設定はラクチン。
勝手にTimeCapsuleの設定ウィザードが立ち上がるので、言われるがまま入力していくだけ。

■TimeMachineでバックアップ
最初のバックアップはPC内のデータを全部(60Gほどあった。)転送するため、一晩中PCの電源をつけっぱなしにするはめに。ただ、翌日会社で同期に「そんときだけ有線にすれば良かったのに」って突っ込まれた。確かにその通りだと思った。

■ファイル共有
サブPCであるEeePC(xubuntu)とのファイル共有。ここで若干手こずった。以下、その手順。
まず、TimeCapsuleの設定を少し変更する。
・Application → ユーティリティ → AirMacユーティリティを起動
・手動設定を選択 → 上側の「ディスク」アイコンを選択 → 「ファイル共有」のセキュリティ保護の「アカウント」を選択
・アカウント作成(ユーザ名、パスワード、アクセス権限の設定)

EeePC(xubuntu)側の設定

[smbfsをインストール]
$ sudo apt-get update
$ sudo apt-get install smbfs

[マウント]
$ sudo smbmount //<IP>/<Remote Directory> /<Local Directory> -o username=<yourname>,iocharset=utf8

[備忘録] Time CapsuleのディスクをLinux (Ubuntu)でマウントする方法 « 爽やか日記より引用】


これでTimeCapsuleのデータにEeePCからアクセスできるようになった。
ところが・・・
TimeCapsuleのアクセスの方式を変更してしまったがために、最初に作ったTimeMachineのバックアップデータにアクセスできなくなっちまったよ。orz

仕方ないのでTimeMachine用のアカウントを設定し、再びバックアップデータを作り直した。

2008年9月28日日曜日

達人プログラマーを読んだ。

1ヶ月ちょいほど、放置してました。
何となく気が向いたので放置してたネタをここいらで投稿してみる。


おっそろしく前の話になりますが、達人プログラマーを読みました。やたら読むのに時間がかかっちゃったけど、英語を翻訳して書いた日本語と、日本人が書いた日本語じゃ、読みやすさはやっぱ違うよね。じゃあ、原文を読めっつー話になるかもしれませんが、私にそこまでの英語力はない。

内容としては、システム開発の仕事を行っていく中での、いろいろなシーンにおけるノウハウ集といったもの。
かなり納得できる話もあったり、未経験故に今いちピンとこなかった話もあったけど、著者の方が全編通して強く主張していたことは次のこと。

・知識の二重化をしないこと。(DRY原則)

似たような処理は共通化してまとめた方が、構造としてきれいになるという話は、大学などでプログラムを勉強してる人にしてみれば、当たり前のことと思う。しかし、ここで二重化すべきでない知識とは、ソースコードに限らず、そのドキュメント等をも含めたものであった。

先日、仕事で実装とドキュメントの整合性がとられていないことによる弊害をもろに受けたばかりなので、この話はすごく参考になる。
大抵のIT企業がそうだと思うけど、うちの会社はドキュメント類はMicrosoft Officeで作成するのが主流だ。よって、作業プロセス的に実装とドキュメントの整合性がとれなくなるっていうリスクはどうしても含んじゃうんだよね。

本書で紹介されてるやり方を職場で実践できれば良いのかもしれないけど、できるかなぁ。

2008年8月4日月曜日

今日は研修だった

Linux技術認定試験。通称LPICの試験対策研修だった。内容はコマンドの使い方とか、カーネル、ブートローダ、OSの仕組みとか。おおよその部分についてはそれなりに知ってたんだけど、オプションのつけ方による細かい動作の違いとか、知らないこともチラホラ。

勉強になる部分もあって、まあ良かったんだけど、本試験が夏休み明けてすぐなんだよね。・・・orz
ちなみに納期もそのへん。

レベル1の試験だから、難易度的には決して高くない。合格率は60%くらいらしい。だからと言って、素の状態で受験してもさすがに通らない。過半数の人間が合格するような試験で不合格になるわけにはいかないからな。

今までの俺の行動傾向からして、ぜってー実家で勉強しねーよ。きっと、本持って帰っても無駄だろうな。まあ、まだ時間あるし。試験まで何とか一通り問題解きましょうか。



という愚痴。

2008年8月2日土曜日

iPodの調子悪かったんだけど

先日iMacを導入してからというもの、iPod nanoの調子が悪くなっていた。症状としては、iTunesとSyncするためにiPodを接続するとフリーズしてしまい、一切の操作を受け付けなくなるというもの。その状態になると、最早バッテリー切れを待つ以外にとれる手段はない。

その症状が2回目に起きたときにふと冷静になってあることを思い出した。

そういや、iPodのフォーマットWindowsのままだ・・・。

iPod復帰後、即ファームウェアを入れ替えて無事解決。