|
|
||
我々は、幸福になるためによりも、幸福だと人に思わせるために四苦八苦しているのである
というか、今やっておきたいと思っていることなんですが、プログラミング。もっと時間数を増やして、同時に集中してやりたいのだけど、なかなか……。
要するに自分はもうこれ以上は仕事できない、というところから5回くらいは壁を越えられる気がする - jkondoの日記と同じ主張なのだけれど、他人を儲けさせる為にそうするのは大っ嫌いなので、ニートでいられるうちに頭が爆発するぐらいにプログラミングしておきたい。
年をとると分かりますが、自分が集中できない状況や怠けてしまう理由というのがいくつか存在し、それらは列挙することが可能です。
これらをきちんと分析しうまく取り除けば、ある程度の集中は得られるようになりました。
若いころに云々 - ひげぽん OSとか作っちゃうかMona-
おぉ。今度やってみます(この今度というがダメなんだけど、今はプログラミングしたいんだ……!)。
ちなみに本当に楽しいときの集中にはもちろん敵いません。(今がそうですが)
若いころに云々 - ひげぽん OSとか作っちゃうかMona-
ですよね!
俺は Type 2 か……。つまり「便利な Web を支える人柱の一人です」とかそーゆーの。本当は Web 以外のこともやりたいし、そうするつもりなんだけど。
# ニートなので、よく説明を求められる。何かひとつでもプロダクトをリリース出来ればぐっと対応しやすくなるんだけど(eg. 「こういうの作ってるの」といって Web サイトを見せる)
他人に対して誇れるかどうかが重要なんじゃない。自分が納得できるかどうかが重要なんだ。by 黎明日記 in Twitter
2007-11-18 (Sun) 20:20 - まなめはうす
ヤッター!
しかしまあ、真顔でいうのは気恥ずかしいけれども、このくらいぶっ飛んでないと人のカネでニートはやれん……。こう書いただけで胃が……。
リンクしようと思ったけれど、そういやうちの Twitter は非公開だったんだ。公開しておこう。
検索できないものを検索するには wget して grep すると便利だと気づいた。
「おうおうニイちゃん。こちとら公開されたら商売あがったりなんだよ!」という報告をもらいましたので、非公開にしました。
同じ方から「おどりゃ、よかったら貼っとけやワレ」といわれたので貼っておきます。
まなめはうす経由。
私は叩かれないことよりも、好かれることを選びたい。
304 Not Modified: 嫌われないようにするか、好かれようとするか。
ですねぇ。
ただ、ミューを今までより右にずらすことはできると思うんだ。あんまりやりすぎると書き手が潰れてしまうけれども。
フック付きメソッドをデバッグしていて気づいたこと。
(compute-cpl (class-of 123+i)) ;; => (#<class <complex>> #<class <number>> #<class <object>> #<class <top>>)
となっているのだけれども
(for-each describe (compute-cpl (class-of 123+i)))
しても complex が object を継承しているというような情報はない。ちなみに
(slot-ref (class-of 123+i) 'cpl) ;; => (#<class <complex>> #<class <number>> #<class <top>>)
である。
謎だ……。もしかして何か勘違いしているのだろうか……。
あろはさんがコメント欄で教えてくださった言葉が大変素晴らしいので、戒めを含めてしばらくヘッダに記載しておく。
結局のところ、よい方向に考えるのも、悪い方向に考えるのも、他人のことを気にすることに変わりはない。ならば、もう少しよい方向に考えよう。
去年、このSugarのイメージファイルがリリースされたときから、 このLinuxくさいのをどうにかならんのかと思ってましたが、やっぱり そのまんまでした。今のケータイや家電の組み込みLinuxみたいに 美しい形にしようという努力をもうちょっとしてほしかったように 思うのは、ぼくが家電メーカー出身だからでしょうか?
OLPCの量産が始まるらしいので、今さらOLPCエミュのパッケージを作ってみた。 - CNET Venture View
発展途上国の子供たちにとっては Linux くさい方がよいのではないかと思います。子供時代からガチの Linux を触っていれば将来専門職で大活躍と。あと発展途上国というものはとにかくお金がないので、市場から Windows が減ることによる経済効果も期待できそう(流石にそれは無理か?)。
時々デバッグしていたのだけれど、今回仕様もいじったので公開。
これは一つのジェネリックファンクションにメソッドをまとめておかないと、 compute-applicable-methods をうまく適用できない為です。
あと、今日気づいたことなんだけど、 CL だとプライマリーメソッドで call-next-method した時はフックを呼ばないんだな……。てっきり呼ぶもんだと思っていた。いずれにせよ、うちは呼ぶつもり。
(define-module mistilteinn.mop.hook ;(use mistilteinn.util) (export-all)) (select-module mistilteinn.mop.hook) (define (symbol-append . rest) (string->symbol (string-join (map x->string rest) ""))) (define (keyword->symbol kwd) (string->symbol (keyword->string kwd))) ;; ** Specialized <generic> (define-class <with-hook-generic> (<generic>) ((before :init-value #f :accessor .before) (after :init-value #f :accessor .after) (around :init-value #f :accessor .around))) (define-method write-object ((obj <with-hook-generic>) out) (format out "<with-hook-generic ~s :before (~s) :primary (~s) :after (~s) :around (~s)>" (slot-ref obj 'name) (length (slot-ref obj 'before)) (length (slot-ref obj 'methods)) (length (slot-ref obj 'after)) (if (slot-ref obj 'around) (length (slot-ref obj 'around)) 0))) (define-class <hook-before-generic> (<generic>) (())) (define-class <hook-after-generic> (<hook-before-generic>) (())) ;; ** Method application with hook (define (call-hooks type gf args) (let1 hook-gf (slot-ref gf type) (if hook-gf (let1 methods (compute-applicable-methods hook-gf args) (unless (null? methods) (apply-methods hook-gf (sort-applicable-methods hook-gf methods args) args)))))) (define-method apply-method ((gf <hook-after-generic>) methods build-next args) (let loop ((methods methods)) (unless (null? methods) (apply (build-next gf methods args) args) (loop (cdr methods))))) (define-method apply-method ((gf <hook-before-generic>) methods build-next args) (let loop ((methods methods)) (unless (null? methods) (loop (cdr methods)) (apply (build-next gf methods args) args)))) ;; ** Macro (define (%expand-define-method-specs specs) (let loop ((ss specs)) (cond ((null? ss) (values '() '() (list 'next-method))) ((not (pair? ss)) (values '() ss (list ss 'next-method))) ((pair? (car ss)) (receive result (loop (cdr ss)) (apply values (map cons (list (car (cdar ss)) (caar ss) (caar ss)) result)))) (else (receive result (loop (cdr ss)) (apply values (map cons (list '<top> (car ss) (car ss)) result)))) ))) (define-macro (define-method-with-hook name specs . body) (receive (specializers lambda-list body-args) (%expand-define-method-specs specs) (receive (true-name getter-name) ((with-module gauche.object %check-setter-name) name) (let ((method (gensym))) `(begin (unless (symbol-bound? ',true-name) (define ,true-name (make <with-hook-generic> :name ',true-name))) (let1 ,method (make <method> :generic ,true-name :specializers (list ,@specializers) :lambda-list ',lambda-list :body (lambda ,body-args (cond ((slot-ref ,true-name 'around) ((slot-ref ,true-name 'around) ,@lambda-list)) (else (call-hooks 'before ,true-name (list ,@lambda-list)) (receive result ,@body (call-hooks 'after ,true-name (list ,@lambda-list)) (apply values result)))))) (add-method! ,true-name ,method) ,@(if getter-name `((unless (has-setter? ,getter-name) (set! (setter ,getter-name) ,true-name))) '()) ,true-name)))))) (define-macro (define-hook-method name type specs . body) (define (%hook-type true-name type) (case type ((:around) (values #t (symbol-append true-name "-" type) '<generic>)) ((:before) (values #f (symbol-append true-name "-" type) '<hook-before-generic>)) ((:after) (values #f (symbol-append true-name "-" type) '<hook-after-generic>)) (else (error "Bad hook method type : " type)))) (receive (specializers lambda-list body-args) (%expand-define-method-specs specs) (receive (true-name getter-name) ((with-module gauche.object %check-setter-name) name) (let1 aux-method (gensym) (receive (around? aux-generic-name aux-generic-class) (%hook-type true-name type) `(begin (unless (symbol-bound? ',aux-generic-name) (define ,aux-generic-name (make ,aux-generic-class :name ',true-name))) (let1 ,aux-method (make <method> :generic ,aux-generic-name :specializers (list ,@specializers) :lambda-list ',lambda-list :body (lambda ,body-args ,@body)) (add-method! ,aux-generic-name ,aux-method) ,(if around? `(slot-set! ,true-name 'around ,aux-generic-name) `(slot-set! ,true-name ',(keyword->symbol type) ,aux-generic-name)) ,aux-generic-name))))))) (provide "mistilteinn/mop/hook")
ハードウェア/コンパイラ/オペレーティングシステムは三位一体で,お互いがお互いにフィードバックをあたえる MAGI SYSTEM.全部知らないと理由がわからないことが多く,奥が深い世界である.
ホワット・ア・ワンダフル・ワールド Optimizing direct threaded code by selective inlining
結局 FastCGI 経由で動かなかったのですが、難儀していたバグを幾つかとれて、コンポーネントの改良も行えました。
Gauche:GenericFunctionとModuleに書かれている問題にひっかかったと思ったけれど、そんなことはなかったようです。以下メモの意味も込めて掲載。こういう構造でうまくいかなかったのだけれど原因は別のところにあるのではないかと思います。
(define-module A (export foo) (define-method foo ((obj <top>)) (format #t "Module A ~s\n" obj))) (define-module B (import A) (export foo) (define-method foo ((obj <number>)) (format #t "Module B ~s\n" obj) (next-method))) (define-module C (import A) (export foo) (define-method foo ((obj <string>)) (format #t "Module C ~s\n" obj) (next-method))) (select-module user) (import A) (import B) (import C) (foo 1) (foo "abc")
実行例。
Module B 1 Module A 1 Module C "abc" Module A "abc"
(via http://www.meigensyu.com/happiness/index1.html )
自分のためだけに,純粋にがんばりたいってのは,言うは易しですが,一番難しいです.
黎明日記のエントリ全体に言える感じだと思いますけど,theoria さんは dankogai さんとかと同様に,無意識のうちの自分の経験を自慢をしてしまうタイプの人のように思います.まぁ,誰しもがそういう傾向は一定あるのですが,おそらく自分のプライドと自信,そして無意識のコンプレックスから感じる不安感の裏返しなのだと思います.それが,この間のような炎上の火種となったのではないでしょうか.なかなか難しいとは思いますが,自分でそこに気付かない限り,また無意識のうちに他人に不快感を与えてしまう結果になるのではないかと思います (僕もわりと昔はそういうトゲトゲした,自分が正義というタイプの人だったらしく,いろいろな人を傷付けてしまいました.今もですが).
「〜しないなんて,馬鹿じゃないの ?」 とかいう 2ch 的な言い方ってのは,わりと残酷だと思いますよ.あんまり褒められたものじゃないと思います.例えば,僕はずっと北国育ちですが 「北国に住んでる奴って馬鹿じゃないの ? 冬に何もできなくて効率悪すぎ.マゾなの ?」 とか言われたら,何も言い返せずに苦笑するだけです w
人間ってのは,配られたカードで勝負するしか無いんですよね.良いこともあれば,悪いこともあって,常識とか絶対ってのは,世の中にはあんまりありません.いろんな人がいて,その多様性が世の中を面白くするのだと思います.
そこらへんのやさしさというか,配慮ができるようになると良いのではないかと思いました.
>「〜しないなんて,馬鹿じゃないの ?」 とかいう 2ch 的な言い方ってのは,わりと残酷だと思いますよ.あんまり褒められたものじゃないと思います.例えば,僕はずっと北国育ちですが「北国に住んでる奴って馬鹿じゃないの ? 冬に何もできなくて効率悪すぎ.マゾなの ?」 とか言われたら,何も言い返せずに苦笑するだけです w
ですねぇ。よく口にする自分ですが、親しい人から「そんな(脳味噌で|性格で|実力で)よく生きていられるね」なんて言われたら、その一言で少なくとも三日ぐらい立ち直れないでしょうね……。気を付けます。
>そこらへんのやさしさというか,配慮ができるようになると良いのではないかと思いました.
ええ。その方向に向かっていきたいと思います。
<complex>はCレベルで定義されてて継承も不可なクラスなので、<object>は継承していません。ただそれをcompute-cplに渡せば、compute-cplは律義に<complex>のdirect-supers (<number>) を参照してcplを計算します。つまり、もし(define-class <complex> (<number>) ()) と定義されていたらcplはこうなるであろう、という値を返します。実際には<number>も<complex>もSchemeによる継承不可のフラグがついているのでそういう定義はできませんが。
あくまでcompute-cplはcplを計算するための補助手続きにすぎなくて、その結果を使うかどうかはシステム次第、というふうに考えてもらうとよろしいかも。
# これだけではなんだと思ってソースコードで組込みのクラス( <complex> など)の初期化を調べようと思ったのですが、流石に無理でした。 builtin_initialize や cpa が匂うというところまでは突き止められたのですが、その先が一向に……。精進します。