海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
「あいつは嫌いだから(あいつとは仲が良くないから)、協力しません。」 というのは、コドモじみた意見だと思う。思うよねー。
であれば、こういうのはどうだろう。 「協力していかなければならないのは確かなんだから、仲良くしましょう。」
おお、おとなっ。
……まてまて、ほんとか?おとなか、それ?
「『協力する』なら『仲良くする』」は、「『なか良くない』なら『協力しない』」と同じじゃないの?
Win-Win の関係を築くことが両者にとって必要だとしても、 仲良くする必然性なんて、ちっとも無いんじゃないかな。
「全体最適をめざしましょう」なんて言っても無駄だ。
奴(ら)は、奴(ら)のことだけ考えて、局所最適戦略をとるんだよ、どうせ。
その戦略と、こちらの戦略が meet するように調整するのが、 いま考えるべきことなんじゃないか。
「Win-Win の関係を!」とか言って、相手に善意を期待する(または要求する)のは、 ナイーブなんだよ、きっと。
「嫌いなやつに協力したくないよなぁ」とか、 「『協力はするけど、仲良くはしない』って言われたら、きっと、むかつくなあ」とか思った。
むー、どういうことなんかな。
どうしようもないってことなのかも知れんね。
http://www.doblog.com/weblog/myblog/32167/805683#805683
子供たちに、どうやって数学や理科を学んでいってもらおうかというのが、 最近の僕にとって、ひとつの関心事になっている。
どこで読んだのか、だれの意見だったのかも忘れてしまったんだけど、 子供に本を読んで欲しいと思っている大人に対する警告として、次のようなものがあった。 曰く、子供に本を読ませたいからといって、他の娯楽(テレビやゲームなど) を禁止するようではいけない。 本当に、読書がそれらの娯楽よりも楽しいというのであれば、 その「面白い本」さえ示してあげれば、頼まれなくても子供たちは本を読むだろう。 そのためには、大人が本を読んでいなくてはならない。 自分達は本を読まないくせに、子供から本以外を取り上げることで本を読ませようなんて、 むしが良すぎるのだ。
まあ、たしかに。
ただし、僕自身の体験をふりかえってみると、 大人に示された「面白い本」を、面白がってよむようなことは、あんまりしてこなかったと思う。 どちらかというと、天邪鬼だから、他人から勧められると読みたくなるなるというか……。
幼いころの僕にとって、本なら買ってもらえたというのが、要因として大きかったように思う。 おかしとか、おもちゃとかは、なかなか買ってもらえないんだけど *1 「本が欲しい」というと、ほぼ無条件で買ってもらえた。
本っていっても、「機関車トーマス」だったり、「エルマーとりゅう」だったりしたわけだけど、 「おお、本が読みたいのかぁ、えらいなぁ」みたいな感じで。 子供ごころに、いままでの絵本とは違う、ハードカバー(笑)の本を手にするのが嬉しかったような。
つまり、僕の親は、本以外を禁止したりはしなかったけど、 流量と「報酬」に差をつけていたんだな。 本を読むことには、一切制約はなかったけど、 テレビを際限なく見続けることは許されていなかった。 テレビを見ても褒めてもらえないけど、小さな子が「本が読みたい」というだけで、 子供にとっては、それが、「親が喜んでくれること」だったよ。
というわけで、今のところ、子供たちが欲しがる「本」が 「炎神戦隊ゴーオンジャー」だったり「仮面ライダーキバ」だったりしても、 いやな顔をしないでおこう。実際、写真がいっぱい載っていたり、 シールがついていたりして、楽しいからね。
リンク先の10カ条は、プロの教師むけなんだけど、 そうでない人にとっても耳の痛いアドバイスだと思う。
あと、実際に教科書を執筆している側の人からの、 教科書をバカにしてはいけないという主張は貴重だ。
その通り。教科書は、けっこうすごいぞ。
*1 いま冷静に考えると、この言い方はフェアではないようだ。自分では、あまりおもちゃを買ってもらえない子供だったと思い込んでいたんだけど、最近プラレールのカタログをみる機会があって、意外にたくさんのパーツを自分が「知って」いて、驚いた。
# よこ [読めと言われたわけじゃないけど、母が子供一人に一冊ずつ、ハードカバーの偉人伝を買ってきて。 読んでたなぁ。]
http://plaza.rakuten.co.jp/overlook/diary/200802010001/
いちど、ええかげんに Scheme もどき処理系を作ろうとして、 「何かが根本的に足りない」という気になって、いま Tiger book をぼちぼち読んでいるんですが……
悪いことに、処理系を自分なりに書いてみる方がストップしてしまっています。
やっぱり、これは、いかんな。
「勉強してから」は、常に悪い兆候なのだ。
かくぞー!
めちゃくちゃなもん書くぞー!おー!
http://www.amazon.co.jp/Fundamentals-Musical-Acoustics-Arthur-Benade/dp/048626484X
2,020円!ぐおぉ、安いじゃないか。 (野尻ボード経由)
「勉強する前に書け!」 ということで、 Scheme もどき処理系を書いてみた。
きちんとした処理系を書くだけの能力がないことは自覚していて、 だからこそ、ぼちぼち勉強しているつもりなのですが。 じゃあ「きちんとしてないやつなら書けるのか?」というと ……うーん、書いたことがないなぁ。
これは、まずい。というわけで、書いてみた。
なるべく手を抜けるところは手を抜いて、小さいコードにしたかったんだけど、 500 行は切れなかったよ:
% wc -l iscm0.[hyl] main.c eval.c 36 iscm0.h 20 iscm0.l 28 iscm0.y 176 main.c 390 eval.c 650 合計
iscm というのは、integer くらいしかサポートしていない スキーム(笑)くらいのつもりです。 国際現代音楽協会とは関係ないと思います。
いちおう、動作サンプルは以下のような感じ:
(display "Hello!\n") (define x 2) (define y 3) (display (+ x y)) (display "\n") (define f (lambda (x y) (define pow (lambda (x) (* x x))) (+ (pow x) (pow y)))) (display (f x y)) (display "\n") (set! x 4) (display (f x y)) (display "\n")
を実行すると:
% ./iscm0 < sample1.scm Hello! 5 13 25
となります。
(define mkf (lambda () (define ct 0) (lambda () (set! ct (+ ct 1)) (display ct) (display "\n")))) (define gg (mkf)) (define g (mkf)) (g) (g) (g) (gg) (g) (gg)
なら、
% ./iscm0 < sample2.scm 1 2 3 1 4 2
です。いわゆるクロージャってやつ?
(define f (lambda (x) (define f_loop (lambda (x result) (cond ((= x 1) result) (else (f_loop (- x 1) (* result x)))))) (f_loop x 1))) (display (f 2)) (display "\n") (display (f 3)) (display "\n") (display (f 5)) (display "\n")
のような、再帰関数も一応動く:
% ./iscm0 < sample3.scm 2 6 120
ほかにも、書いているときにはいろいろ思ったような気がするんだけど。 思い出したら書き足そう。
とにかく、いまの僕に書けるものを、なるべく思い込みに基づいて書きました。 「Lisp の必須要素は、えーと、なんだっけ?」というのも調べずに書く(笑)! 動くものをつくってから、どこがダメなのかを理解していこうと。
これを触りつつ SICP を読んでいくと、よく解りそうだ!
今後は、これを徐々にまともにしていこう。 iscm8 くらいで、見られるものになる筈(←言うだけならタダ!)。 それに、ほんとは、インタプリタじゃなくて、コンパイラが書きたいんだよなぁ。
*1 「メモリリーク」と呼ぶ人もあるでしょう。
できたてほやほやの iscm0 を使いつつ、SICP の練習問題でもやってみるかなと思っ……て……、 あら?
整数の四則演算 (+, -, *, /) と比較演算 (=) は、built-in 関数として実装したのに、 不等号をわすれた!!
ぎぃやぁん!
しばらく遊べるかなと思ったら、いきなりのバグフィックス。
不等号も欲しいねというのがいっこ。
もういっこは、スコープが変で、 関数のなかからグローバル?(一番外の)環境が見えなかったバグを直した。 ちぃ、これは、わかってたのに、いろいろ書いている途中で劣化してしまったもの。 スコープの理解が変で、実装がまちがっているところは、あるんじゃないかと思っているんだが、 今回のは、単なるミスです。くやしい。
というわけで、SICP の練習問題 1.3 はこんな感じでしょうか:
ex1_3.scm:
(define f (lambda (a b c) (define g (lambda (x y) (+ (* x x) (* y y)))) (cond ((and (<= a b) (<= a c)) (g b c)) ((and (<= b a) (<= b c)) (g a c)) (else (g a b))))) (display (f 1 2 3)) (display "\n") (display (f 4 2 3)) (display "\n") (display (f 4 5 3)) (display "\n")
iscm0 (version 0.0.1) で動かすには、さらに、
lib4iscm0.scm:
(define and (lambda (a b) (cond (a b) (else ())))) (define not (lambda (a) (cond (a ()) (else 1)))) (define <= (lambda (a b) (not (> a b))))
が必要。
実行結果:
% cat lib4iscm0.scm ex1_3.scm | iscm0 13 25 41
lambda の仮引数部の形式を一種類しかサポートしてなくて、 引数を可変個数にできないのが、いきなり目障りになってきた(and が二項しかとれない!)。
(追記:and については、二項の場合しかサポートしていないことよりも、 致命的な問題があります。and のセマンティクスを実現するには、 and は特殊形式である必要があります(筈)。or も同様。SICP 問題 1.6 近辺)
おっと、そうそう。論理については、() が偽、それ以外が真という体系になってます。
Unnamed union がお行儀わるくて、 gcc でもバージョンによってはコンパイルできないようだった。 他にも、いくつか警告メッセージを頼りに修正した。
やはり、警告メッセージを無視しちゃいけませんでした。
http://www.phs-mobile.com/black/black33.html (Playnote News Clip 経由)
こ、このグラフは!!
日本図表審査機構 (JGRO) に通報せねば!
ソフトバンクが自社ユーザへの値下げのリスクを 他社ユーザにのっけているんではないかという話自体は、ちょっと面白いだけに、 もったいないなぁ。
こんな印象操作バリバリのグラフはいただけないよ。
それに、書かれている範囲では、競争におけるルール違反はしてないようなので、 書かれていることを根拠にソフトバンクを非難するのは筋違いって気もする。
ちなみに、僕にとっての「ソフトバンク」は、出版社ですが、何か?
# よこ [こことは全然関係ないんですが、昨日どこぞで書き込んだ「サーフセラ」という野菜洗剤、 もうちょっとイロイロ調べていたら..]
sample4.scm:
(define f (lambda (x y) (display (op x y)) (display "\n"))) (define g (lambda (a b) (define op (lambda (a b) (+ (* a a) (* b b)))) (f a b))) (define h (lambda (a b) (set! op (lambda (a b) (+ (* a a) (* b b)))) (f a b))) (define op +) (f 2 3) (define op *) (f 2 3) (g 2 3) (h 2 3)
実行例:
% ./iscm0 < sample4.scm 5 6 6 13
g の中で define した変数は f からは見えない。
% gosh sample4.scm 5 6 6 13
ほっ。
ちなみに、このサンプルコードを動かすためには、バグをちこっと直す必要があった。
(define op +) じゃなくて (define op (lambda (x y) (+ x y))) のように書けば、 古いバージョンでも動きます(つまり、こういうバグでした)。
http://madscientist.jp/~ikegami/diary/20080213.html#p01
うぅ、また読まねばならぬ本がふえた…。
未入手本スタック:
http://d.hatena.ne.jp/m-hiyama/20080213/1202860045
笑。
兄上が書き換えパターンを示し、 弟君が素晴らしいパターン認識能力でもってそれを即座に理解。
なんとか + パン + マン → ジンメン なんとか パン
「人面」という単語を知らなくても可能なところが素敵だ。
ヒーローモノを見ていて、ヒーローをやっつけられる筈の方法を探すというのは、 みんなやってることなんじゃないかなぁ。
ところで、子供のころの疑問といえば、 「なぜ最初から必殺技を繰り出さないのか」というのがありましたが、 こういうことだった (Playnote News Clip 経由) らしい。 どうりで子供にはわからないわけです。
「ナイーブな実装」というのは、これより数段まともなものを指すに違いない。
ともかく、
(define-syntax let (syntax-rules () ((let ((name val) ...) body1 body2 ...) ((lambda (name ...) body1 body2 ...) val ...)))) (let ([x 42] [y 100] [z (* 3 3)]) (display (* x y z)) (display "\n"))
が動くようになりました。
ところで、上の let の定義は R5RS に書かれているものの一部なんですが、 どうして body1 body2 と二つかかれているのか不思議だったんですよねー(←素人)。
これは、「body は一個以上必要」というのを表現しているんですね。 パターン言語の説明を読んで、なっとく。
まだいろいろいい加減なのにくわえ、まだ健全じゃない。 マクロを展開した結果が lambda になったときに、 束縛変数のリネーム処理を行ってやれば良いんじゃないかと思っている。
ところで、マクロつくりたてほやほやの iscm0 で
(let ([a 1] [b (/ 3 0)]) (display a) (display "\n"))
を実行しようとすると「ゼロでわったよ」と言って止まるんだけど*1、 gauche は平気そうだ!……遅延評価?!
一瞬うろたえたんですが、もちろん、んなわきゃなかった。
gosh> (display (/ 1 0)) #i1/0#<undef> gosh>
*1 iscm は「Integer くらいしか扱えないスキーム(笑い)」の略ですからなぁ、わっはっは。
SICP 練習 1.6 相当
(define-syntax if (syntax-rules () ((if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))))) (if (= 1 1) (display "eq1\n") (display "neq1\n")) (define new-if (lambda (predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause)))) (new-if (= 1 1) (display "eq2\n") (display "neq2\n"))
これを実行してみましょう。
% iscm0 < ex1_6mod.scm eq1 eq2 neq2
マクロで書かれた方の if は、ちゃんと特殊形式になっていて、 意図通りの動作となっています。 (iscm0 では、cond が built-in な特殊形式となっています。 if じゃなくて cond の方を組み込みにしたのは、僕が cond の方が好きだから! ってか、僕は if なんて使わない (使えない))
よかった。
一見まともに動いている iscm0 のマクロですが、 ちょっと想定から外れたコードを食わせると死亡するので、 その辺をまともに*1 していこう。
でもって、健全に*2する!
あ、そういや、syntax-rules のリテラル部の働きがよーわかってない。 Hygienic にするための処理にかかわってんじゃないかと思っているんだけど、 理解しようとすること自体を後回しにしている。
いま作って遊んでいるのが iscm0 です。 実行部に関しては「ナイーブ」を通り越してアホみたいなんですが、この点については反省しない。 とにかく僕はまだ Scheme について知らないことが多すぎるので、 Scheme 実行系を作りながら、Scheme について理解しましょうというのが iscm0 の主な目的になりそうです。
僕がどのくらい Scheme 素人かというと、
という感じである。でも、自分で作ってみると、よくわかるんだよねー……という作戦である。
なので、実行系が非効率だったりするのは、別にいいのだ。 この版では、とにかく、Scheme のセマンティクスをきっちり実現していくことを目指す、 それを僕が理解するために。
で、ほんとに作りたいのはネイティブコンパイラなんだけど、 iscm0 の、中間言語すらもたないナイーブな(を通り越してアホな)実装から、 一足飛びでネイティブコンパイラは無理げなので、あいだに挟まるのがこれ。
iscm0 の作成で、Scheme 言語についてのお勉強はできてしまっている筈なので、 こんどはコンパイラ技術の方に力をいれましょうというバージョンである。
別に作りたくもないインタプリタをまじめにつくるためには、 何かモチベーションの源が要るんだよなぁ (できあがるのが、単なる 「Gauche の劣化コピー」 では面白くない)というのが悩みだったんだが……。
実行部のバイトコードマシンのアーキテクチャを、Verilog でも実装しよう! そうしよう!
Very small computer を Verilog で書いてみようという遊びは、それはそれで面白く、 かつ、お手軽な遊びなんです。 僕自身、この遊びはちょっと前に済ませているんですが、 その very small computer をターゲットにしたコンパイラを書こうとして頓挫した経緯がある (アセンブラしか書けなかった)。
その、一度頓挫した計画と iscm1 をリンクさせてしまおうというのだ。
僕が一度つくった very small computer は、命令セットを絞りまくった RISC マシンで、 僕はこれを Bold と命名した。 この名前は、「おもしろいほどよく落ちる」と揶揄される SPARC に対抗して、 日本で有名な洗濯洗剤 の名前から拝借したものだ *2。
この Bold の ISA を大幅に変更して、iscm1 の VM と同一アーキにしちゃおうと。 ちょっと前、この日記でフリーの Verilog 処理系についてメモってたのは、Bold 向け だったんですよねー。
ネイティブコンパイラに挑戦。
型推論しなあかんのやろか、とか、eval に対処するには、 結局インタプリタをくっつけとかなあかんのやろか、とか、 GC なしにすることは可能なんだろうか、とか、 SML# の内部データではタグなしで double が生とか いってたなぁ、とか、 わからないことだらけですが、心配するのはもうちょっと先の話。
ターゲット言語は、x86, x86_64, sparc_v9 の assembly language とする。 いままで全く興味をもてなかった x86 のマシン語とか application binary interface について勉強する良い機会だろう。
以上、妄想じみてますが、本人は本気です。
アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアルの上、中A、中B、下あたりか。 すげーページ数だなぁ。
なんでもディスプレイ上で読めちゃう人もいるのかもしれませんが、 僕はけっこう印刷して読みたい。
プログラムソースなんかも、紙に印刷したいなぁと思うことがあるんですが、 出来ればハイライト(フォントロック)されたカラーのを読みたい (せっかくカラーのインクジェットプリンタがあんなに安く手に入るんだし)。
コード群をまとめて印刷するような場合には、目次もあるといいなぁ。
というわけで、このような望みを実現するスクリプトを書きました。 latex + listings パッケージに丸無げしているだけですが。
#!/bin/env ruby # -*- mode:Ruby -*- EXT2LANG = { 'c' => 'C', 'h' => 'C'} def pcode(f) ext = f.slice(/\.(\w+)$/, 1) if ext.class == String l = "language={#{EXT2LANG[ext]}}" end puts "\\newpage" puts "\\section{#{f}}" puts "\\begin{lstlisting}[#{l}]" puts open(f, 'r').read puts "\\end{lstlisting}" end puts DATA.read ARGV.each {|f| pcode(f)} puts '\end{document}' __END__ \documentclass{jsarticle} \usepackage{listings} \usepackage[dvipdfmx]{color} % \definecolor{hellgelb}{rgb}{1,1,0.8} \definecolor{colKeys}{rgb}{0,0,1} \definecolor{colIdentifier}{rgb}{0,0,0} \definecolor{colComments}{rgb}{1,0,0} \definecolor{colString}{rgb}{0,0.5,0} % \lstset{% float=hbp,% basicstyle=\ttfamily\small, % identifierstyle=\color{colIdentifier}, % keywordstyle=\color{colKeys}, % stringstyle=\color{colString}, % commentstyle=\color{colComments}, % columns=flexible, % tabsize=2, % frame=single, % extendedchars=true, % showspaces=false, % showstringspaces=false, % numbers=left, % numberstyle=\tiny, % breaklines=true, % backgroundcolor=\color{white}, % breakautoindent=true, % captionpos=b% } \begin{document} \tableofcontents
あ、このスクリプトに pcode という名前を付けました。
で、
% pcode iscm0.[hc] main.c eval.c > hoge.tex % platex hoge % platex hoge % platex hoge % dvipdfmx hoge
すると、こんなの が手に入る。
こんなのを手に入れて喜ぶのは僕だけかも知れないけど。
# あー、ハードタブが残念なことになっとるなぁ。あり? tabsize=2 の指定(どっかからコピペ)がよくないのかな?
やっぱり、tabsize=2 なのが僕の使っている環境(8タブ)と食い違っているのがだめだった。 tabsize=8 にして、ついでに showstringspaces=true にして作りなおしてみたのが これ。
店員に「ありがとう」と言う人が大嫌い。おかしいのでしょうかが炎上しているらしい。
僕は、なんとなくわかるような気がするよ。
あ、誤解の無いように一応付け加えておくと、僕自身がバイトしてたとしたら、 「ありがとう」とお客さんに言われたら嬉しいですよ。 ただ、そこでイラっとする若者がいるってことも、わかるような気がする。
kikulog コメント 経由で読んだ 技術開発者さんの話 を読んで、思い当たるフシがあったからです。
若いころの、融通の効かない心理的推論機構によると、 自分が行わない「善行」を許容することは、 その善行を行わない自分を否定することに繋がってしまうので嫌なんじゃないかな。
つまり、「店員に『ありがとう』と言う」を良いこととして認めてしまうと、 それをしない自分は「『良いこと』をしない人」になってしまう。 店員に「ありがとう」なんて言わなくていいじゃん、どうして言うんだそんなこと。 偽善者め!みたいな。
なんか、語るほどに「それじゃない症候群」に陥りそうですが、 こんな感じの感情には僕自身も覚えがある。
いじめられっこを庇うと、庇った子まで攻撃対象になってしまうという同調圧力にも、 このような心理が影響しているような気がする。 自分ができなかった「善行」を目の当たりにすると、イラっとするという。
だから、べつにおかしくないと思うよ。 別に特別なことじゃなくて、そのうち直るというか、(店員に「ありがとう」という他人と、 言わない自分の両方を)許せるようになるんじゃないのかなぁ。
「大阪弁で『ありがとう』と言われるのが特にイラつく」とかいわれると、 傷ついちゃうけど(笑)。
先日、うちの親がくもんの New スタディ将棋 というのを送ってきてくれた *1。 「まだ早いかもしれないけど、」4才の長男向けということらしい。
新しいおもちゃに早速興味を示した長男と、将棋を指してみた。 それぞれの駒自体に進める場所が書いてあるので、4才児にも、 なんとか駒を進めることが出来るようだ。 桂馬の動きがわかりにくいとか、「角は斜めに進める」というので、適当に斜めの方に行こうとしたり (正確に45°方向しか行けないのに、「斜め」ならどこでも行きたくなるらしい)、 相手の駒の効きが見えなくて自殺的動きをしたり*2、難はいろいろあるけど、なんとか終局まで指すことはできた。
一局めは、わざと負けてあげた。 集中力を切らさずに、最後まで指せただけで十分だと思ったよ。
またやりたいというので、二局目。 6枚落ちで、かつ、僕は取った駒を再利用できないというルールでやった。 こども相手にさりげなく手加減するなんて出来そうになかったので、 ハンデを十分につけた上で普通に指してみようかなと思って指したら、勝ってしまった。
が、長男は、負けた直後、少し黙った後に泣きだしてしまった。
うう、むずかしいなぁ。可哀想なことしたかなぁ。
将棋は面白いゲームだと思うし、せっかく興味をもってくれたようなので、 興味が続くように、うまく対戦相手をつとめたいと思うんだけど。
本将棋以外にも、はさみ将棋とか、将棋くずしとかもやってみたら、どれも気に入った様子。 なんとなく、いかにも「子供向け」 ではない高度な遊びっぽいところに魅力を感じているんじゃないだろうか。 僕と長男が将棋をしているときに、次男(一才六ヶ月) がさみしそうな空気を発しているところも気になる。
将棋セットについていた説明書には、初心者向けの特別ルールとして、「歩無し将棋」 が紹介されていた。 大駒の動きを体験しながら理解するために、歩をすべて取り払って指してみようというもので、 なるほどと思うんだけど……4才の「幼稚園年少組さん」には、それでもレベルが高すぎるような……。
ためしに、「歩無し+6枚落ち+上手は取った駒を使えない」で指してみたんだけど、 相手が4才児であることを差し引いても、これでもなかなか難しい。 「駒の動きを知っているだけ」というレベルでは、どんどん大駒を捨ててしまうし、 上手(うわて)の戦力が少ないといっても、広大な盤上にある玉を寄せるのは、そんなに簡単そうには見えない。
そういえば……小さい盤をつくってやってみようという話を、 昔黒木ボードで見かけたような気がするなぁ。あとで探してみよう。
それはさておき、久々に「はさみ将棋」をやってみたんだけど、細かいルールがわからない。 はじめ、歩は香車と同じ動きなのかなと思ったんだけど、それだとすぐに行き詰まってしまう。 それではというので、後ろにも進めるようにしたけど、それでもいまいち。 どうやら、飛車と同じで、前後左右に進めるんですね。それだとゲームが続くかも。
過去の発言集に 囲碁・将棋ってのが あるんだけど……。
はじめは九路盤でやってみようという話を、僕が不完全に覚えていただけかな。
子供相手に勝ってしまうのは大人げないと思われるかもしれないが… いや、それはその通りなんだが、手加減すればいいってもんではないと思っている。
手加減するんじゃなくて、駒落ちなどでハンデを付けた上で、 ちゃんと指す方がいいのではないかと。
手加減による調整じゃなくて、ハンデをきちんとつけて差した方が、
ただ、駒を大量に落とすだけでは、まったくの初心者にとっては、まだコツをつかみにくいと思った。 まったくの初心者にとって、9×9の盤は広すぎるんじゃないかと思うんですよね。
ロト15代 を読んでいたら、自分もなにか書いてみたくなってきたよ(悪い癖)。
こういうのは、どうだろう:
舞台はγ線バースト後の地球。
γ線バーストにより、地上で暮らしていた肉体人 (flesher) たち、特に、 旧来の「人類」的生活を堅持していた者たちの大半は死滅してしまった。 だが、全てが死に絶えてしまったわけではなかった。
肉体人と接触をもち、彼らを救おうとした変わり者の「市民」は、 ヤチマたちだけではなかったのだ。
自力で「バースト」を乗り越えた者達もいた。 彼らは、「人間らしさ」に執着することなく、自らの肉体を強化し、また、 ポリス由来の文明を使用することにもためらいがなかった。 そのためバーストを(被害が甚大だったのは確かだが)乗り越えることができたのだ。
バースト以後の地上には、彼ら生き残りの末裔達が満ちつつあった。 ポリス市民の保護により生き残った「人類」と、 強化された肉体を頼りに生き延びた種族達……
彼らの先祖を襲った「バースト」そして、その一部を救った「市民」とその文明について 直接知っている「第一世代」はもはや生き残っておらず、物語の多くは伝説として 片鱗をとどめているだけだった。
……という設定で、前近代的な人類、モンスター的強さを持つ種族、 十分成熟して魔法と区別が付かないポリスの科学が揃うことになるのでは。
もちろん、バースト後の地球には、地上の主たる彼ら以外にも、ポリスの「市民」たちが くらしているわけだが、地上の民がその存在に気づく機会はほとんどない。
移入ウェアの亜種が一つか二つだけ現存しているというのは、どうかな。
勇者には、移入ウエアを改造した、「勇者は死なない装置」がぴったりくっついていて、 常に勇者の肉体をスキャンしている。
そして、勇者がまさに死んでしまう直前に破壊的スキャンを実行して、 勇者の肉体を情報化し、後に復元すると。
プレイヤーである勇者は、死なない装置による破壊的スキャン→復元のプロセスを認識することは ないのだが、もう一つの死なない装置を装備した者が「死ぬ」ところを初めて目撃したときに、 ショックを受けるというエピソードも考えられる。
グレイズナーは?
やっぱり、天空の城ラピュタにいたあれみたいな?
RPG だと、レベルがあがるにつれて、高度な魔法が使えるようになるんだけど、 あれをどう実現するか。
本当の魔法はどうだか知らないけど、十分成熟した科学技術の方だとすると、 熟練者の方が初心者よりも高級な魔法が使えるというのはありそうにない。
むしろ逆で、熟練者の方が、お仕着せ機能の「高級」な魔法によらず、 プリミティブを組み合わせて効率良く目的を達成できるような感じになるだろう。
例えば、回復呪文なんかだと、初心者向けのものは、フルオートで全身スキャン→悪いとこを検出 →修復を行うので、簡単お手軽なんだけど、消費魔法素あたりの回復量が少ない。
上級者になると、黙視で悪いところが解るようなら、スキャンには魔法素を用いずに、 修復のみに魔法素を用いることができる(それには、具体的な手順を術者があたえる必要があるので、 難しい)ので、消費魔法素あたりの回復量は大きい。
魔法素ってのは、実は消費型ナノマシーンなのかも知れないけど、当面はそんなの関係ない。
初級回復呪文(ホイミ相当):全身スキャンからフルオートで回復まで。簡単だけど、 魔法素あたりの回復量は小さい。
中級:初級呪文(ホイミ相当)の直後に用いると、スキャンフェイズをスキップして回復のみ行える。 スキャンを省略する分お得。
上級:術者がすべてのフェイズをプログラミングすることで、最小限の魔法素で回復を行う。 全てのプロシージャをその場で指定するのは困難なため、 あらかじめプログラミングしておくことが多い。
http://freedomorita.web.fc2.com/orita_sense12.html
かわいい!
そういや、こないだ「それいけ!あんぱんマン」を見ていたら、 テンドンマンとカツブシマンが出てくる回でした。
テンドンマンの天丼がバイキンマンに食べられてしまって、テンドンマンぐったり。
↓
それを見たカツブシマンは、テンドンマンに教わった通り海老天を揚げてみたのだが、 ごはんがない。
↓
仕方がないので、ありあわせの蕎麦と合わせて天ぷら蕎麦をつくって テンドンマンの丼部分に充填。(この時点で、おれ爆笑)
↓
しばらくして目を覚ましたテンドンマンは、なんと、テンプラソバマンとして大活躍! 普段はお調子者の彼も、今日ばかりはバリバリの剣客だぁ!
もー、たまらん漫画だと思いました。
http://d.hatena.ne.jp/propella/20080211/p1
shiro 2008/02/14 14:05 正確に言うと、 + をdefine-methodで再定義できる ← 仕様どおり で、それでは遅いので object-+ をdefine-methodすると、数値計算の速度を落とさずに’+’の意味を拡張できる ← ハック ということです。
へー。
lazy 関連記事 も面白そうなので、チェック(あとで読む)。
以前、ここ で見かけたような気がするんだけど、 はやみずさんのプロフィール画像 は差しかわっていて、見付からなかった。
ので、記憶を頼りにつくってみた。
こんなんだったかな。
手元にコピーを置いておきたかったのと、印刷して読みたかったので、 こちら にコピペしました。ここにコピペしておくと、 勝手に latex 経由で作成した pdf が出来るのがジマンだったり(右上メニューにある)。
まずは、英語で読むぞなんて力まずに、 邦訳 で読まれてみるのがいいのではないでしょうか (この邦訳は Seiten's Blogs > Mac Diary が元のようです)。
(いくつか部分的に抜粋して感想を述べていたんですが、削除。 まだ通読してない人に対するネタバレ(ってのはちょっと違うような気も)は良くないので)
まだ観てないんだけど、 字幕つき動画も。
スティーブ・ジョブスにしても、大クヌース先生にしても、 カリグラフィやコンピュータフォントに大きくコミットしているところが面白い。
それが未だなかったという時代の要請が大きいのかも知れない。
それは、幸か不幸か。
ああ、そうか。 普通の人にも理解できる仕事をしているというところが、 スターたる所以だったりするのかなぁ。
おお、すごい。「動画で案内」 で、浮島、空港中央に旗を立てて(ルートを指定して)検索すると、 入り口(浮島ジャンクションすげーややこしそう!)からルートに乗るまでの動画が見られる。
# よこ [昔、指揮者の先生がこんなことをいっていた。 「隣で楽器吹くヤツが大嫌いなヤツでも、犯罪者だったとしても、音楽は別だ。..]