04_08_02


昨日は不思議のドルアーガやってた。 実はドルアーガって一回もプレイしたことないので全然知らない。

--

Lispと文法と。たまに辛い。

Lispの素晴らしいところのひとつに文法がほとんど無いっていうのがある。

そのへんS式の強力さとか、そういうはなしなんだけど、 まあ、細かい話はいいとして、覚えないといけない言語仕様を 最小限に抑えながら、表現できるものは大きいとか、そんな感じだ。

でも、やっぱり、関数定義とリスト定義の方法だけでは表現できないものも あるので、単純に「知っておかないといけない」特殊な部分があるわけだ。 例えば、一文字を表現する場合には、elispなら"?c"、schemeなら"#\c" と、いうふうな記法を用いる。というような部分だ。

で、Lispはなんかどういうポリシーかわからんのだけど、そういう、細かい言語仕様の 特殊な部分に、キーワードじゃなくて、「一文字か二文字くらいでなんとかする」っていう 風習があって、そいつが話をややこしくするのだ。

たとえば、Lisp初心者が、

`(nanika ,x ,@y z)

っていうコードに出会ったとして、これが理解できるだろうか。 まあ、理解できなくても仕方ないだろう。バッククオートまわりっていうのは、 Lisp言語仕様でもかなり特殊な部類に入るだろうし。

で、Lispに手を染めるくらいのレベルの人だったら、人に聞いたりせずに、 そのくらい自分でなんとか調べようとするだろう。多分。けど、そういう時、 調べようが無いのである。「コンマ(,)ってなんじゃい」ってどうやって調べろというのか。 "@"の使いかたってどういうキーワードで調べるんだろうか?

まあ、そんな感じ。scheme勉強するときは、いつも「"#f"ってなんじゃい。」 ってところから入る駄目Lisp使い。

04_08_04


cedet がちょい便利そう。

今度C書く時にでも試してみるか…

make して、.emacsに

(setq semantic-load-turn-useful-things-on t)
(load-file "/path-to-cedet/common/cedet.el")

って書いて、

struct nanika
{
	int xxx;
	int yyy;
};

struct nanika naika_obj;

nanika_obj.x*

で、*のあるところで"\C-c , TAB"ってやるとインテリ補完。 インクルードしてるのをなんとかするにはどうしたらいいのかはまだ知らない。

--

eshellを使ってみようと思う。

manual-entryで文字が変になるのは(setq Man-fontify-manpage-flag nil)しておけばとりあえず大丈夫。 あと、man.elで、\e[22mとか解釈するようにすれば解決できそう。やる気がでれば。

ていうわけで、今日は久し振りにemacsいじってた。いや、実際、 「そろそろeclipseかなぁ…」とか、そんなこと考えてたけど、 やっぱemacsだ。emacs。

--

で、なんかこういうのはやっぱ楽しいなぁ…って話で、 もう、最近なんか色々あれだ。アレ。なんかよくわからないんだけど、 何やってても時間がもったいないような気がして、むしろ何もやりたくない。 もう、PCと適当にゲーセンあったら人生十分です。

「一生何もしないで暮らすにはどのくらいの貯蓄があったら大丈夫だろうか…」 とか考える社会人一年生。NEETっていうのが流行りらしい。ああ、いいなぁ。NEETへの憧れが芽生える8月4日。

04_08_05


あー、今日中に書きあげる予定だったけど、間に合わなかったので明日にする。さすがに4時半 過ぎるのは無理だ。色々。

おかげでschemeはだいぶ分かってきた。色々。 けど、今日はHaskellとかから影響受けたのでなんかよくわからん。とにかく寝る。

04_08_06


あーケツイやりたい分が溜まってきたので、 明日は虫姫さまやるためだけにわざわざHeyまで行く。予定。

いや、適当に本とかも買ってくる。ゲームとかも買ってくる。そんな感じで。

#!/usr/bin/gosh


;; orz     increment 
;; or2     decrement
;; JTO JTO forward
;; OTL OTL backward
;; JTO OTL input
;; OTL JTO output
;; _no     jump forward
;; on_     jump backward

(if (< (length *argv*) 1) (error "usage: orz progfile-name"))
(define progin (open-input-file (car *argv*)))

(use text.parse)


(define-constant symbol-table (make-hash-table 'string=?))

(define (col-elem-op op col index) (set! (vector-ref col index) (op (vector-ref col index))))

(define (1+ i) (+ i 1))
(define (1- i) (- i 1))

(define (build-computer memsize)
  (let ((databuf (make-vector memsize 0))
        (data-index 0))
    (list
     (lambda () (col-elem-op 1+ databuf data-index))
     (lambda () (col-elem-op 1- databuf data-index))
     (lambda () (set! data-index (1+ data-index)))
     (lambda () (set! data-index (1- data-index)))
     (lambda () (set! (vector-ref databuf data-index) (read-byte)))
     (lambda () (write-byte (vector-ref databuf data-index)))
     (lambda (block)
       (define (loop)
         (if (eq? (vector-ref databuf data-index) 0) ()
             (begin 
               (eval block (current-module))
               (loop))))
       (loop))
     (lambda () (print databuf))  ;最後に付けとく
     )))

(define-values (orz or2 JTOJTO OTLOTL JTOOTL OTLJTO _noon_ orz-end) (apply values (build-computer 64)))

(define blank-chars-list (cons '*eof* (string->list " \t\n")))

(define (get-next-token) 
  (cond
   ((eof-object? (peek-char progin)) 'EOF)
   (else (next-token blank-chars-list blank-chars-list "eof" progin))))


(define (get-next-func get-token)
  (let ((prog-map `(("orz" . ,orz) 
                    ("or2" . ,or2)
                    ("JTO" . (("JTO" . ,JTOJTO) 
                              ("OTL" . ,JTOOTL))) 
                    ("OTL" . (("OTL" . ,OTLOTL)
                              ("JTO" . ,OTLJTO)))))
        (tok (get-token)))
    (define (next tok prog-map)
      (cond ((eq? () prog-map) #f)  ; なんかよくわからないトークン
            (else (let ((cur (car prog-map)))
                    (if (equal? tok (car cur))
                        (let ((func (cdr cur)))
                          (cond ((list? func) (next (get-token) func))
                                (else (cons func ()))))
                        (next tok (cdr prog-map)))))))

    (cond ((eq? tok 'EOF) 'end) 
          ((equal? tok "_no") (list _noon_ `(quote (begin ,@(compile compiler-get-func)))))
          ((equal? tok "on_") 'end)
          (else (next tok prog-map)))))

(define (compile get-func)
  (define (impl tail)
    (let ((func (get-func)))
      (cond ((eq? func #f) (impl tail))
            ((eq? func 'end) tail)
            ;;((eq? func 'end) (cons (cons orz-end ()) tail))
            (else (impl (cons func tail))))))
  (reverse (impl ())))



(define (compiler-get-func) (get-next-func get-next-token))

(define program `(begin ,@(compile compiler-get-func)))

(eval program (current-module))
(orz-end)

できた。条件ジャンプあたりが変に凝ったことやろうとして失敗して汚い。

JTO JTO orz orz orz _no OTL OTL orz orz orz JTO JTO or2 on_ 
OTL OTL orz orz _no JTO JTO orz orz orz orz orz orz orz orz
orz orz OTL OTL or2 on_ JTO JTO orz OTL JTO orz orz orz
OTL JTO orz orz orz orz orz orz orz orz OTL JTO

これの出力が、

orz

こうなる。説明とかは明日書く予定。というか、今日書こうと思ってたけど面倒になったのでやめた。 on_ _no の対応がおかしいと、動作が怪しいので注意。

04_08_08


なんか、家のなかで、蜘蛛の糸の気配を感じるのだけど。

--

迎撃されてきました

名古屋がブームだとかそうじゃないだとか。

で、虫姫さまやりにはるばるHeyまで行ったんだけど、 昨日は人だかりができてたので全然できなかって、で、 今日の朝一でやることにした。 で、今日は開店待ってたんだけど、開店と同時に20人くらい台のまわりに 集ったりして(なんか柵みたいなのが設置してあった)、 暇人多過ぎですよ。10時からならんでたのに、プレイできたのが11時。 一回だけやったけど、もう一回一時間待つ根性も 無かったので一回しかやらなかった。

弾がはやい。stage3で終わった。 動きのせいで虫というか、虫の形したロボットっぽい。 まあ、そのへんは仕方無いけど。 てんとうむしの羽をまわしてるっぽい風車は 虫なのだろうか。

--

おとといに「説明はあした書く」とか書いてんだけど、 気分が乗らないので、また今度。二度と書かないかもしれない。 とりあえず書きかけの分

04_08_09


最近、またRefererをとりたくなってきた。 何回か書いているとおり、僕はRefererをとられるのが嫌いだという適当な 理由でそういうのを記録してないんだけど、なんとなく。

ほら、IP垂れ流すのはどうしようもないわけで、 それとRefererが漏れてるっていうことは、その気になったら、その人の 巡回とか調べられるわけで、まあ、そんなことありえないんだけど、 まあ、とにかくなんとなく嫌なんだけど、やっぱ、文章書いてる側に回ったら、 どういうところから来るかとか、 検索単語見ながらひとりニヤついたりしたいとか、そういう話で、 ひょっとしたらある日とつぜんRefererをとったりしてるかもしれないので注意。

参考: Mozillaのカスタマイズ-マニアックな設定編

--

さて、「このサイト見てたら仕事してないんとちゃうか。と思ってしまう」 とか、そういう感じで誤解を受けているようです。

なので、ちょっとした仕事の話というか、文章の書きかたとかの話。

まず、文章書きというのは非常に辛く、つまらなく、その上、高度な技術が要求 されるという、できれば関わりたくない作業だ。 しかし、会社に行けば、とにかく文章を書くことを要求される。

まあ、そのへんは「そういうのが辛い」っていうただの愚痴で、 会社はそれなりのリソースを使ってその人を雇っている以上、頭の中だけではなくて、 なにか物体として残るものを生産してほしいというのは当然のことで、 理不尽なことはなにも無い、と、思うようにしている。

で、問題は、やっぱり文章の書きかた、 特に、今日感じたのはプログラムで処理するような 流れを「ことば」で書き表すということの難しさ。だ。

たとえば、なんでもいいから適当に自分で書いたプログラムを、 そのコードを見せないで他人に説明することができるだろうか。 そして、その結果としてその人は多少の違いはあれど、同じような プログラムを書くことができるだろうか。

今日、悩みに悩んだのは、ある処理の一部分が データの状態、コンテキストとか呼ばれるものに依存するような処理を記述する必要 があったときだ(QRコードでモジュールを配置する処理なんだけど、)。 プログラムで記述する場合は簡単だある数値(ID)に状態を割りあてて、変数にその数値を入れ、 あとは条件分岐で分けたらいい。(と、いうか、プログラムは書き上げていた) けど、これを文章では記述できない。「もし〜なら」というのは、インデント無しでは読みにくい。 文章で書く以上、それなりの抽象度を持って書く必要があるわけなんだけど、「変数に状態を入れる」 という処理はあまりにもコンピュータっぽい処理で、抽象度のレベルが他の部分と異なってしまう。

で、そんなふうなことを考えてるうちに、結局何も書けないまま終わって、無力感を感じたりもするわけだ。 なんていうか、その説明は他の人に話すときに使うかもしれないような感じだったので、 さすがに「ソースコード読んだらわかる」っていうふうな感じにはできなかった。

僕はどうするべきだったろうか。勇気を出して「ソースコード読んだらわかる」っていうことに してしまえばよかっただろうか。擬似コードにして適当にごまかすべきだっただろうか。 わかりにくくても文章で流れを書くべきだったのだろうか。 それとも、そもそも僕に文章書く能力が足りないのある以上、 「どうしようもない」という選択肢以外存在しなかったのだろうか。

まあ、そんな感じで考えてたんだけど、家に帰ってきたらどうでもよくなった。 学校と違って会社では宿題というものはあまり良しとしない考え方があるので、 家では色々忘れて非常にくつろげるわけだ。 まあ、学校行ってたときも宿題なんてやったことなかったけど。 そのへんは、心の負担とか、そういう感じの言葉でなんとでもなる。

04_08_12


盆休み

休み中の時間を過ごすために、 だらだら何も考えないで、それでいて、それなりに頭使って、 一日やり続けても精神的に疲れないというゲームを求めて、 「カルドセプトII」を選択したら正解だった。

--

愚痴の続き。もはや、読む価値も書く意味も無いんだけど。

僕が知りたいは、処理を記述する技法だ。 プログラムがやること、やっていることを漏れ無しに 表現できる技法。

シーケンス図とかじゃ、ある一状況にしか対応できない。 UMLとかで処理を書けるのかどうかは知らない。 フローチャート書く時間があるんだったらプログラム書いたほうが早いし。

そもそも「処理」っていうのはなんだ。 あるデータを別のデータに変換する、っていうような感じでいいんだろうか。 もし、そうだとしたら、処理っていうものを漏れなく記述するには 「入力:出力」対応を全部書くわけだ。で、まあ、範囲とか表現したりして うまくごにょごにょやって。で、ただ単に対応を書くだけだったら、なんか 流れが並列してしまうから、それを直列できるように、範囲に入ってるかどうか とかを一回一回チェックして…って、そういうふうにやったら、 結局条件の羅列になって、それだったらやっぱりプログラムで書いたほうが早いんじゃないんか?

ようするに、 「プログラムはアルゴリズムを記述するための道具なんだから、 アルゴリズムを説明するんだったらプログラムで書くのが一番早い。」 っていうなんか、ありがちな結論なわけで。

なんかよくわからん。ただの愚痴なんだけど。この話になると、どうしても愚痴っぽくなるよなぁ…

えーと、

アルゴリズムを記述するにはプログラムが一番、という説は結構知られている。(と思う)

でも、実際には、説明が無いプログラムっていうのは絶対に禁止されている。 なんらかの方法で、プログラムは説明されていないといけない。

こういう矛盾。なんか、色々書きたいんだけど、まとまらない。 結論としては、「結局のところ何をどうやってもどうしようもないんじゃないのか」 っていう気がする。

世間の人たちはこういう問題に対してどういう方針でやってんの?とか、そんな感じで。

ああ、いや、違う。最初に書きたかった話はそういう話じゃなかったはずなんだけど。 なんか、わからん。なによりもまず、根本的に僕の文章力が足りないというのが問題なのではないだろうか。 最初に言いたかったことっていうのが貫き通せていない orz

--

「ICO」を全部読んだ。読むのが遅い。ヨルダのセリフ逆再生っていう話は有名なんだろうか。最近知ったんだけど。

--

「子供って何でもすぐ覚えるよねぇ」
「脳がスポンジみたいっていうしねぇ」
「狂牛病って恐いねぇ…」
「脳がスポンジみたいっていうしねぇ」

「俺の脳はスポンジみたいだぜ!!」って言うときは 前後の会話に注意したほうがいい。

04_08_13


大阪に帰るつもりなかったけど、急遽やっぱり帰ることになる優柔不断、 一貫性の無さ、信念のなさ、中途半端、なんとなくいきあたりばったり人生。

最近そんなんばっかり。明日のこと考えるので精一杯。

--

processingが気になったので触ってみた。非常にいい感じだ。

参考: チュートリアル(日本語訳)

04_08_16


移動

はてなをためしてみることにした。まあ、日記ツールを自分で作るのは飽きただけなんだけど。