2011年1月31日月曜日

Common Lisp からUDP通信


このエントリーをはてなブックマークに追加


REPLからIP Messengerにメッセージを送信してみる。

CL-USER> (ql:quickload "usocket-udp")
To load "usocket-udp":
  Load 1 ASDF system:
    usocket-udp
; Loading "usocket-udp"
.
("usocket-udp")

CL-USER> (usocket:socket-send
              (usocket:socket-connect "localhost" 2425 :protocol :datagram)
              "1:100:shirouzu:jupiter:32:Hello"
              (length "1:100:shirouzu:jupiter:32:Hello"))

これで送信はOKだった。
ただ、UDPを受信することはできないっぽい?(usocket:server-listenにdatagramを受信する手段がないっぽい)

参考>> http://smart-pda.net/isourou/ipmsg/doc/ipmsg_protocol.html


2011年1月30日日曜日

算数オリンピック 教室1-Q1


このエントリーをはてなブックマークに追加


http://www.sansu-olympic.gr.jp/class1/q1.html

に挑戦。
A0=1999,     B0=0
A1=A0-A0/2,  B1=B0+A0/2
A2=A1+B1/3,  B2=B1-B1/3
A3=A2-A2/4,  B3=B2+A2/4

n=偶 An=A(n-1) + B(n-1)/(n+1), Bn=(1-1/(n+1))B(n-1)
n=奇 An=(1-1/(n+1))A(n-1),     Bn=B(n-1)+A(n-1)/(n+1)

覚えたての再起処理でよゆーw かとか思って、
(defun beakera (n)
        (cond
          ((= n 0) 1999)
          ((evenp n) (+ (beakera (- n 1)) (/ (beakerb (- n 1)) (+ n 1))))
          ((oddp  n) (* (- 1 (/ 1 (+ n 1))) (beakera (- n 1))))
          (t nil)))

(defun beakerb (n)
        (cond
          ((= n 0) 0)
          ((evenp n) (* (- 1 (/ 1 (+ n 1))) (beakerb (- n 1))))
          ((oddp  n) (+ (beakerb (- n 1)) (/ (beakera (- n 1)) (+ n 1))))
          (t nil)))
とか書いて、REPLで (beakera 1999) としたら固まった。。。ポカーン


アレ?と思って手で解いてみると。。。
A0=1999=t,   B0=0

A1=A0-A0/2,  B1=B0+A0/2
  =t/2         =t/2

A2=A1+B1/3, B2=B1-B1/3
  =t/2+t/6    =t/2-t/6
  =2t/3       =t/3

A3=A2-A2/4,  B3=B2+A2/4
  =2t/3-t/6    =t/3+t/6
  =t/2         =t/2

A4=A3+B3/5,  B4=B3-B3/5
  =t/2+t/10    =t/2-t/10
  =3t/5        =2t/5

A5=A4-A4/6,  B5=B4+A4/6
  =A3t/5-t/10  =2t/5+t/10
  =t/2         =t/2

って、奇数回目は必ず同じ数になるのか。
ということで、1999回目は奇数回目なので答えは1999/2

これをプログラムで効率よく解くにはどうすればよいんだろう??

算数恐るべし。。。
そして自分の頭のへぼさに絶望。。


M-99 Q4


このエントリーをはてなブックマークに追加


M-99 マクロ99問
http://common-lisp-users.jp/index.cgi?M-99

問4:Common LispのUNLESSを作成せよ
テーマ:制御構文の自作
(my-unless (> 1 2)
  (print "hello"))
;->
;   "hello"
;=> "hello"

解4:
CL-USER> (defmacro my-unless (condition &body body)
                   `(if (not ,condition)
                        (progn
                             ,@body)))
MY-UNLESS

CL-USER> (my-unless (< 2 1) 10)
10

展開系
(IF (NOT (< 2 1)) (PROGN 10))


数学ガール


このエントリーをはてなブックマークに追加


【送料無料】数学ガール
【送料無料】数学ガール
価格:1,890円(税込、送料別)


何この本。めちゃ面白い。
漠然と使っていた数式の「意味」をストーリー形式で教えてくれる。

数学の面白さにちょっとだけ触れられた気がする。


マネジメント信仰が会社を滅ぼす


このエントリーをはてなブックマークに追加



【送料無料】マネジメント信仰が会社を滅ぼす


要約するなら「実」の無いマネジメントに精を出す暇があったら、本業に専念せよ、という内容。

マネジメントの全てが無駄だとは思わないけど、企業なんかでよくある

「仕事ができない人に、形だけでも仕事をさせるために作った、大して意味のない管理業務」

なんかは、本当に無駄なのでさっさとやめた方がいいと思う。


The Survivors 宇宙の漂流者


このエントリーをはてなブックマークに追加




http://blog.livedoor.jp/aamatome/archives/cat_45865.html

http://sfclub.web.infoseek.co.jp/roman23.htm

AAストーリー見て、原書を手に入れたかったけど駄目だった。もう古すぎて和書はどこも在庫切れ状態。
子供向けのSF小説らしいけど。。。Kindle版があれば洋書でも読んでみたい。

惑星間の戦争で捕虜となった4000人の地球人。
解放という名のもとに未開の惑星「ラグナロク」に十分な物資も与えられず置き去りにされる。
それから200年の間、残された人々がどう生きていくか、というストーリー。


2011年1月23日日曜日

M-99 Q3


このエントリーをはてなブックマークに追加


LISPど素人が挑むM-99

M-99 マクロ99問
http://common-lisp-users.jp/index.cgi?M-99

問3:Common LispのWHENを作成せよ
テーマ:制御構文の自作
(my-when (< 1 2)
  (print "hello"))
;->
;   "hello"
;=> "hello"

解3:
CL-USER> (defmacro my-when (condition &rest body)
        `(if ,condition
          (progn ,@body)))
        
MY-WHEN

CL-USER> (my-when (> 2 1)
            (print "hello1")
            (print "hello2"))

"hello1" 
"hello2" 
"hello2"

CL-USER> (my-when (< 2 1)
            (print "hello1")
            (print "hello2"))
NIL

補足3:展開されたS式
(IF (< 2 1)
    (PROGN (PRINT "hello1") (PRINT "hello2")))


M-99 Q2


このエントリーをはてなブックマークに追加


LISPど素人が挑むM-99

M-99 マクロ99問
http://common-lisp-users.jp/index.cgi?M-99

問2:INC1を作成せよ
テーマ:変数の捕捉
(let ((x 0))
  (inc1 x)
  x)
≡ (let ((x 0))
     (setq x (+ x 1)))
;=> 1

解:
CL-USER> (defmacro inc1 (x)
               `(setq ,x (+ ,x 1)))
INC1
CL-USER> (let ((x 0))
               (inc1 x)
               x)
1
CL-USER> (let ((x 10))
               (inc1 x)
               x)
11


M-99 Q1


このエントリーをはてなブックマークに追加


LISPど素人が挑むM-99

M-99 マクロ99問
http://common-lisp-users.jp/index.cgi?M-99

問1:与えられた引数を全てQUOTEしてリストとして返すLISTQを作成せよ

解:
(defmacro listq (&rest body)
        `',body)

CL-USER> (defmacro listq (&rest body)
                  `',body)
LISTQ
CL-USER> (listq a b c d)
(A B C D)
REPLって便利だなーっと改めて認識。
あってるのか不安。。。


Veritas Storage Foundation Basic の使い方


このエントリーをはてなブックマークに追加


商用UNIXでかなり使われたVERITAS製品。
対応プラットフォームも豊富で、Linux,HP-UX,Solaris,AIX,Linux,その上Windowsまでサポートされている。

HP-UXではVxFSは標準ファイルシステム、SolarisもZFSが出るまではかなり使われていた、Linuxでもクラスタ構成なんかで使われるケースもまだ多い。
またインフラをやっていれば、過去構築されたこれらの環境を触る機会もあるかもしれない。
(最近ではAmazon EC2上でVxVM/VxFSを使えるらしい)

最近は触る機会が減ってきたので、使い方を忘れないように、一通りの機能を復習しておく。
使うのはVeritas Storage Foundation Basic で、Veritas Volume ManagerとVeritas File Systemをくっつけて機能制限したもの。

VERITAS製品の良いところは、プラットフォームに依存せずほぼ一貫した使用感が保たれている事だと思う。
バックアップ製品のNetBackupも好き。クラスター製品なんかも考えられて作られている感じがあって結構好き。


Table of Contents
=================
1 Storage Foundation のコンポーネントと機能
2 テスト環境
3 インストール
    3.1 入手方法
    3.2 インストール方法
4 インストール後にやる事(PATH/MANPATHの追加)
5 VxVMの重要なコマンド
    5.1 vxdisk -o alldgs list
    5.2 vxdg list
    5.3 vxprint -hrt
6 VxVMのボリューム管理
    6.1 VM diskの操作
        6.1.1 VM diskへ変換する
        6.1.2 VM diskから通常ディスクへ戻す
    6.2 disk group 操作
        6.2.1 disk group の作成
        6.2.2 disk group の破棄
        6.2.3 既存DGへディスクを追加
        6.2.4 DGからディスクを取り外す
    6.3 対話的なVM disk 変換とdisk group 作成
    6.4 volume 操作
        6.4.1 ボリュームの作成
            6.4.1.1 Concatination(連結ボリューム)
            6.4.1.2 Stripe
                6.4.1.2.1 2面ストライプの作成
                6.4.1.2.2 3面ストライプの作成
            6.4.1.3 RAID1
                6.4.1.3.1 2面ミラーの作成
                6.4.1.3.2 3面ミラーの作成
                6.4.1.3.3 ログデバイスの追加
            6.4.1.4 RAID5
                6.4.1.4.1 RAID5ボリュームの作成
                6.4.1.4.2 ログの削除(RAID5、ミラー共通)
                6.4.1.4.3 ログの追加(RAID5、ミラー共通)
            6.4.1.5 RAID1+0、RAID0+1
        6.4.2 ボリュームを削除する
        6.4.3 volume を拡張・縮小する
        6.4.4 volume 内のディスクを入れ替える(障害)
            6.4.4.1 新しく追加したディスクを認識させる
            6.4.4.2 ディスクを入れ替える
        6.4.5 OFFLINEのボリュームを復旧する
            6.4.5.1 ミラーの場合
            6.4.5.2 RAID5の場合
            6.4.5.3 Stripe、Concatinationの場合
7 VxFSの管理
    7.1 フォーマットする
    7.2 マウントする
    7.3 スナップショット
    7.4 オンライン拡張する
    7.5 FSCKする
    7.6 バックアップする
8 その他、参考文献等