Hatena::ブログ(Diary)

hogeなlog

プロフィール

hogelog

hogelog

小室 直(こむろ すなお)。電気通信大学2003年入学。2010年修士卒業。プログラミングとかしてます。

カレンダー
1984 | 01 |
2006 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2010 | 01 | 06 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 12 |
2012 | 01 | 04 | 06 |

September 30(Sun), 2007

[] UECda-2007 TOP でもやっかなーと

SDKおっことしてきて動かしてみっと、サーバのGUIがメタメタのよーな。「再描画ってなにそれおいしいの!?」みたいな。X11のプログラミングとか知らんので適当に眺めながらいじってたけど、めんどくさいので以下のよーな変更だけでもういいやと思った。

--- xdaihu.c    2007-08-02 15:14:49.000000000 +0900
+++ xdaihu.c.new        2007-09-30 05:35:52.000000000 +0900
@@ -124,7 +124,7 @@
                //printf("debug: graph 1st\n");
        }

-       if(flag){
+       //if(flag){
                sprintf(value[0],"%.0fpt \0",(g_win_info->y_border)/g_win_info->y_scale/2);
                sprintf(value[1],"%.0fpt \0",(g_win_info->y_border)/g_win_info->y_scale);
                sprintf(value[2],"%.0f\0",1000/g_win_info->x_scale);
@@ -186,7 +186,7 @@

                XCopyArea(g_win_info->display, g_win_info->pixmap, g_win_info->window, g_win_info->gc,  // Copy pixmap to window
                        0,0, g_win_info->window_width, g_win_info->window_height, 0,0);
-       }
+       //}


        for(i=0;i<=4;i++){ // draw line

1ゲームごとにグラフを書き直してるだけ。あんまし解決にはなってない。でもまあそんなことよりクライアント書くかな。アルゴリズム考えんのめんどくさいから機械学習みたいな方法させてーなあ。

トラックバック - http://d.hatena.ne.jp/hogelog/20070930

September 29(Sat), 2007

[][] lisp処理系ぽいものを書く(その6くらい)

実装言語を何故かD言語からC言語へ移行してみました。かなりアッサリできました。いかに俺がD言語の機能を有効に利用していなかったかの証拠だと思った。

記号表は適当にオープンなハッシュテーブルで書いてみました。ハッシュ関数とか超適当。GCのタイミングはプログラムの終了時です。節子それGCやない、OSのメモリ管理や。

あとまあset!とlambdaをごにょごにょしてクロージャとか書けるようにしてみた。lambdaの実装がものごっそ適当。

> (define make-counter (lambda () ((lambda (c) (lambda () (set! c (+ c 1)) c)) 0)))
#closure
> (define c1 (make-counter))
#closure
> (define c2 (make-counter))
#closure
> (c1)
1
> (c1)
2
> (c1)
3
> (c2)
1
> (c2)
2
> (c1)
4
> ((lambda (f x) (f f x)) (lambda (f x) (if (zero? x) 1 (* x (f f (- x 1))))) (+ 1 2 3))
720
> Good-bye

一応アーカイブ。

http://konbu.s13.xrea.com/lib/scm/istsp-c-20070929.tar.bz2

以下にソースコードはっつけとく。1000行くらい。

続きを読む

[] 「初めての人のためのLISP」おもしろい

おもしろいらしいとの噂を聞いて、電通大の図書館で検索したらヒット、普通に開架であっさり見つかった。流石竹内先生在籍してただけあるなえらいぞ図書館!

ほんで内容ですが、かなりおもしろい。かつ、わりと重要なエッセンス詰まってるんじゃないかなあと思う。なんつーか「知ってる人」に聞けばごく簡単なんだけれども、なかなか形式知にするのは難しいような部分とかが。

以下にわりと序盤の気にいった部分を引用してみる。

コントラクト・ブリッジにフィネスという戦法があり、これについて優れた格言がある。

「まずフィネスすることを憶えよ。次にフィネスしないことを憶えよ。最後に、時々フィネスすることを憶えよ。」

これをパロディれば、こうなる。

「まずリストで対象世界を表現せよ。次にリストを使わないで対象世界を表現せよ。最後に、適切な場面ではリストで対象世界を表現するようにせよ。」

初めての人のためのLISP (ソフトウェアライブラリ (3))

初めての人のためのLISP (ソフトウェアライブラリ (3))

トラックバック - http://d.hatena.ne.jp/hogelog/20070929

September 25(Tue), 2007

[] wxDインストール。

tar.gzとってくる。

http://wxd.sourceforge.net/

% tar zxf wxd-0.11.tar.gz
% cd wxd
%make
なんか色々略
../wx/wxObject.d(32): Error: object.string at /usr/local/dmd/src/phobos/object.d(13) conflicts with wx.common.string at common.d(78)
そんな感じのエラー大量に

stringがコンフリクトしてるよー、とのことで$DMD_HOME/src/phobos/object.dとwxd/wx/common.dを見る。どっちにも

alias char[] string;

とか書いてる。common.dのそれはいらんのでコメントアウト。ほんで

% make
% sudo make install

でいけた。あとまあwxd/Samplesとか潜ってコンパイルとかできること確認。ものごっそコンパイル時間かかる。これはやっぱ wxD > wxc > wxGTK > GTK > X11 のよーにレイヤーが深いが故なのだろか。だったらWindows環境とかのが、ちょっと速いのかもしんない。

てかまあそもそもlinux環境だとリンカとしてgccを使ってるからまず間違いなくWindows環境よりコンパイル速度は遅くなるんだろうけど。うーん。Windows環境欲しくなってきたかも。

9/27 追記

同PCにてWindows、wxd環境構築してみた。コンパイル速度が比較にならんくらい速いです。重い腰あげてWindows構築した甲斐あった。

[][] ttyrecを使うときには端末のサイズを変更する

ttyrecで遊んでたら、なんかvimとかscreenの画面がちっちゃくて困った。ttyrecは端末のサイズに異存するとのこと。以下のようにすればいいらしい。

% resize
COLUMNS=120;
LINES=53;
export COLUMNS LINES;
% export COLUMNS LINES;
% ttyrec
色々する
トラックバック - http://d.hatena.ne.jp/hogelog/20070925

September 24(Mon), 2007

[] モンテカルロ法で円周率を求める

「モンテカルロ法を実装しなきゃ!」という気分になった。

まずモンテカルロ法がなんなのかわからんかったので、調べるところから。適当にぐぐった。「確率で積分がどうしたこうしてほげほげ」。よくわからんな。円周率を求めることができるらしい。なんか聞いたことあるねそれ! よくわからんまま適当にやってみよう。

マニュアルのstd.randomのページに「Cのrandよりランダム性高いよ!」と書いてあったので、Cのrandとphobosのrandを切り替えられるようにしてみた。

% repeat 5 (./pi 50000000 c)
testNum=50000000, mode=c,               pi=3.1419588000
testNum=50000000, mode=c,               pi=3.1416315200
testNum=50000000, mode=c,               pi=3.1417908000
testNum=50000000, mode=c,               pi=3.1414636800
testNum=50000000, mode=c,               pi=3.1417736000
% repeat 5 (./pi 50000000 phobos)
testNum=50000000, mode=phobos,        pi=3.1415154400
testNum=50000000, mode=phobos,        pi=3.1416636000
testNum=50000000, mode=phobos,        pi=3.1419204000
testNum=50000000, mode=phobos,        pi=3.1416398400
testNum=50000000, mode=phobos,        pi=3.1413786400

わーすげえや円周率っぽい!

うーん。っつーかこんなん、doubleとかintとかuintの長さとか、randの返す範囲とかそういうのも考慮に入れて考えなきゃいけないから、単純に「こっちのが円周率に近かったからよい擬似乱数!」って喜んでいいもん違うだろうし。以下ソース。

続きを読む

トラックバック - http://d.hatena.ne.jp/hogelog/20070924

September 22(Sat), 2007

[][] lisp処理系ぽいものを書く(その5くらい)

http://konbu.s13.xrea.com/lib/scm/istsp.d

http://konbu.s13.xrea.com/lib/scm/istsp-20070922.tar.bz2

パーサ部分の構成を考えなおしたら、コードがかなりあっさりめに。quoteも簡単にできました。

> (+ 3 2 1 . (4 5))
15
> '(1 2 3 '(1 2 3))
(1 2 3 (quote (1 2 3)))
> (define a '(1 2 3 . (4 5)))
(1 2 3 4 5)
> a
(1 2 3 4 5)
> #\c
#\c

quasiquoteとかvectorとか、色々な手続きとか全然作ってない。というかまあ、その辺は作れば作れるのでいいとする。

それよりもスコープ、マクロ、継続あたりを考える。

「スコープってスコープごとにハッシュテーブル作ったら効率わるいよな? どうすんべ」とか思ってたけど、「プログラミング言語処理系」*1読んでて気付いたけど、表は一つでいいんだなきっと。変数名と、スコープごとのユニークIDとかをくっつけて放りこんどきゃいけそう。

マクロはがんばればいいだけか? きっと。

継続は、もしかすっと処理系作る側からはそんなに難しくないのではないだろうか。わかってる人には。他の処理系とかのコードを眺めると、どうも継続まわりのコードにそれほど行数を費やしていない。たぶん、継続を扱いやすいような内部表現にしておいてるからか。minischemeは実行コードも何もかもリストだったりしたし。

*1:「岩波講座ソフトウェア科学」シリーズ5巻

トラックバック - http://d.hatena.ne.jp/hogelog/20070922

September 20(Thu), 2007

[] スパムコメント

「やたらスパムコメント多いなあ、はてな先生頼むぞおい」とか思ったら、スパム拒否設定OFFでしたすいません。

トラックバック - http://d.hatena.ne.jp/hogelog/20070920

September 19(Wed), 2007

[] Scalaさんクロージャ

適当に手を動かしてみる。文書はちゃんと読んでない。

scala> def makeCounter(): ()=>Int = {                              
     | var num = 0                                 
     | def counter(): Int = {                                  
     | num += 1
     | return num
     | }
     | return counter
     | }
makeCounter: ()() => Int

scala> val c1 = makeCounter
c1: () => Int = <function>

scala> val c2 = makeCounter
c2: () => Int = <function>

scala> c1()
res31: Int = 1

scala> c2()
res32: Int = 1

scala> c1()
res33: Int = 2

scala> c1()
res34: Int = 3

scala> c2()
res35: Int = 2

おもしろい。あと、Javaのライブラリにはそれなりに慣れてるから、便利に使えそうだ。

[][] ScalaでBrainf*ck

「言語の入門ではまずBrainf*ck処理系を作れ」なる持論を何故か若手の会で発表したこともあり、ScalaでBrainf*ckの処理系書いた。コンパイラ・インタプリタ方式。一回Scalaの () => unit な関数列にコンパイルしてから実行。なんか色々適当。

import java.lang.System
import java.io.FileInputStream
import java.io.InputStream
import java.io.File
import scala.collection.mutable.ArrayBuffer

object BFi{
  val in = System.in
  val out = System.out
  val mem = new Array[Byte](30000)
  var pt = 0
  def incExp(){
    mem(pt) = (mem(pt) + 1).toByte
  }
  def decExp(){
    mem(pt) = (mem(pt) - 1).toByte
  }
  def nextExp(){
    pt = pt + 1
  }
  def prevExp(){
    pt = pt - 1
  }
  def getExp(){
    mem(pt) = in.read.toByte
  }
  def putExp(){
    out.write(mem(pt).toChar)
  }
  def noneExp(){
  }
  def makeExp(input: InputStream, c: Int): () => unit = c match{
    case '+' => incExp
    case '-' => decExp
    case '>' => nextExp
    case '<' => prevExp
    case '.' => putExp
    case ',' => getExp
    case '[' => makeBlock(input)
    case _ => noneExp
  }
  def makeBlock(input: InputStream): () => unit = {
    var exps = new ArrayBuffer[() => unit]
    var c = input.read
    while(c != ']' && c!= -1){
      val exp = makeExp(input, c)
      if(exp != noneExp){
        exps + exp
      }
      c = input.read
    }
    def block(){
      while(mem(pt)!=0) exps.foreach(x => x())
    }
    return block
  }
  def compile(input: InputStream): () => unit = {
    var exps = new ArrayBuffer[() => unit]
    var c = input.read
    while(c != -1){
      val exp = makeExp(input, c)
      if(exp != noneExp){
        exps + exp
      }
      c = input.read
    }
    def block(){
      exps.foreach(x => x())
    }
    return block
  }
  def main(args: Array[String]){
    if(args.length>0){
      val sourceFile = new File(args(0))
      val input = new FileInputStream(sourceFile)
      val body = compile(input)
      body()
      out.flush
    }
  }
}

while(c!=-1) とかその辺、超ほげすぎる。

% cat echo.bf
+[,.]
% scala BFi echo.bf 
hogeghoge
hogeghoge
あいうえお
あいうえお
トラックバック - http://d.hatena.ne.jp/hogelog/20070919

September 17(Mon), 2007

[]2007年情報科学若手の会、かんそう

電気通信大学、学部三年生の小室直さんが情報科学若手の会に行ってきましたよ、と。

目的

  • 「ただでさえしょぼい俺が駄目じゃんちんたらしてたらうわー」という気分になってくる
  • せっかくだからしょぼい発表とかする

どっちも達成。

まず前者。色々な人が色々やったりしてる話を拝聴。首藤さんの話したP2Pストリーミング配信とかはおもしろそうだなあと。実際に動いてるシステム動いてる様子はすげえおもしろかったです。

Planetlabなるものが印象的。

http://internet.watch.impress.co.jp/www/article/2003/0626/planet.htm

リンク先は2003年で170台とあるけど、今(2007/09/17時点)じゃ808台くらいって話なのかな。

http://www.planet-lab.org/

あとゲームの話。学習のアルゴリズムとか真面目に調べてみよう思った。

とりあえずUEC コンピュータ 大貧民大会にプログラム書こうと思う。去年やってわりと注目集めたらしいんで、わりと強者が増えたりすんのかなーとも。

明日大学の図書館行っておもしろそなの捜してみよう。

とかとか、あと色々すげーやー、おもしれーやー、な話多かった。とかく、現在の大学3年生という立場の身軽さを考えるとこれを有効にしなきゃなあ!と。

ほんで後者。

でっちあげようとして前日から用意していたものが微妙すぎたんで、どうしたもんかなあ思ってたら、なんか行きの電車でわりといけそうなネタを思いついたんで、若手の会の間に資料作って喋った。

ツールはXUL Apps > Tiny Applications > 高橋メソッドなプレゼンツール in XUL リターンズ - outsider reflexを使用しました。作者さん言ってましたが、本当に速く作れます。

「読む」という用途をあまり考えずに書いたものですけど、一応資料置いときます。たぶんFirefoxでしか見れない。

http://konbu.s13.xrea.com/lib/funbf.xul

要は「Brainf*ck処理系書くの楽しいです!」ってだけの話。

若手の会中にScalaを始めて、BF処理系を書いてみようと試みるも、間に合わんかった。しかし、Scalaおもしれえかも。とりあえずBF処理系書く。

発表は、まず資料がいいかげんなのと、まわり見えねー状態で喋ってたなーとか反省。機会があればできるだけ人前で発表するようにしよう。

あー、あとグレンガランおもしろかった。見たことなかったけど、もう終わりに近いらしくいきなりかなり熱い展開かまされる。

えーとまあなんか全体通しての感想とか。

やっぱり実際に人と対面して会話するのは良いなあ、というかそうしないと駄目だなあと思った。みなさん修飾ことば無し、プレーンな「いなばさん」で通じるのがすげーなー思った。いやま、いなばさんがすげーのかな。あとは、優秀な日本人がぐぐるに奪われまくっててやばくね! やばくね! とか。


あー。眠くなってきた。そんなです。まったくおもしろかったので、できれば来年も参加しようかな、と。きっと研究も始めてるでしょうし。にしても、なんか全然別のこと発表したいかもなあ。

みなさまも是非参加をご検討ください。三年生とか二年生とか高校生とかも参加しまくりゃいいと思う。

September 15(Sat), 2007

[] あした若手の会

インターンシップおわた&せっかくなので恥でも晒しときたい。というわけでなんか発表しようかと思った。なんだろう。とりあえずnotavaCCとcoinsを利用して作るコンパイラ云々とか言えばいいかな?<それ電通大の情報工学実験第一J5課題じゃね?

んじゃ一応自分の作ったものも紹介することでお茶を濁すとかそんなで、coinsを使ったBrainf*ckコンパイラの解説とかすればいんじゃね?まじで?他になんか無いっけ。

そんなわけで昨日から眠っていたノートPCに火を入れて環境整備。しかしこいつ、CDドライブ壊れてて、OSがXP。Linux入れたいけど入れらんねー。なのでVMWarePlayer入れて、PC-BSDのvmware-imageにFreeBSDぶちこんでた。が、仮想イメージ置いてたドライブがFAT32だったせいでファイル4GB制限引っかかった。あがー。ノートPCのバッテリも無いしなあ。

あー、ノート環境整備と並行して資料作りやってみるかー。はて。発表てどうやるんだ。最悪でっかい紙に手書きでいいんじゃね。ぼくらは時々そういった純朴さを思いだす必要があると思うんだ。思いだすまえに、まず普通の発表用資料とやらを作れるようになってください。

プレゼンってどうやって書けばいいんだろう

プレゼンソフト書きたくなってきた!<落ちつけ。間に合わん

トラックバック - http://d.hatena.ne.jp/hogelog/20070915

September 13(Thu), 2007

[] インターンシップ終盤。

なんだか最近ぬるぽチェックしてif(hoge instanceof Hoge)してみてキャストしてほにゃららら、みたいなことを毎日してる気がする。instanceofを知る前、俺はどうやってJavaのプログラムを書いていたんだろう。でもinstanceofはなんかほげだなあと思う。知らんけど。

自分がなんか妙にstaticが好きらしいことに気付いた。あとライブラリが提供するクラスのオブジェクトとか継承したフィールドとかは、ほとんどデータの出力先としか考えてなかったらしいことに。

そんな感じでインターンシップしてるんですけどMS Wordがしょっちゅう落ちるのにはうんざりです。何故だ。俺が悪いのか。きっと玄人だけが知ってる落ちない裏技とかあるんだな。誰だLaTeXがWordより難しいなんて言ってるのは。

4月から5月ごろにかけてJavaをまったく知らん状態で書き散らしたドローソフトのコードとか整理してみようかと一瞬思ったけど、今はドローソフトに興味が沸かんのでやめる。あー。

デザインパターン本読むか。高いのでまずは図書館あたりで読みたいけれども、インターンシップ期間中は大学の図書館開いてる時間こっちの身体が空いてねー。そもそも図書館にあるかわからんけど。

その辺はまあどうでもいいことだったかなたぶん。手元のlisp処理系もどき、istspのコードを見たら、何か大幅な変更をしようとしてる途中らしく、なんか真面目に動いてくれない。あと何しようとしたんだったか思いだせない。てめえこの野郎そういうところで投げ出すなよと。まあローカルcvsで管理してるから適当に巻き戻せば済むんですけど。

あー、http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html でも読むかな。

わりとどうでもいいっちゃいいんだけど、スパムコメントが多いのはなんとかならんのだろか。

[] 窓使いの憂鬱せってーファイルをまた書いた。

ノートPCの環境ととのえるの巻。

めんどくさかったので、標準のemacsedit.mayuから引っ張ってきたキーバインドをべたべたにGlobalに書いちゃってます。そんで、それが嫌だなあというようなプログラムに対してあれこれ設定すると。

include "109.mayu"		# 109 キーボード設定


keymap2	EmacsC-X
# event prefixed		= &HelpMessage("EmacsEdit C-x-", "C-x u\tundo")
# event before-key-down	= &HelpMessage
 key *U			= C-Z					# UNDO
 key *C-S		= C-S			# 上書き保存(S)
 key *C-W		= LAlt F A		# 名前を付けて保存(A)...
 key *C-F		= C-O			# 開く(O)...
 key *K			= C-N			# 新規作成(N)
 key *C-C		= LAlt F X		# 終了(X)
 key *C-J		= &SetImeStatus(toggle)

 keyseq	$EmacsEdit/kill-word		= S-C-Right C-X
 keyseq	$EmacsEdit/backward-kill-word	= S-C-Left C-X
 keyseq	$EmacsEdit/transpose-chars	= S-Right C-X Left C-V Right
 keyseq	$EmacsEdit/upcase-word		= S-C-Right C-C *&Sync \
					  &ClipboardUpcaseWord C-V
 keyseq	$EmacsEdit/downcase-word	= S-C-Right C-C *&Sync \
					  &ClipboardDowncaseWord C-V
 keyseq	$EmacsEdit/kill-line		= &EmacsEditKillLineFunc S-End C-X \
			&Sync &EmacsEditKillLinePred((Delete), (Return Left))
 keyseq	$EmacsMark/cancel		= Left Right


keymap2	EmacsMark : Global = $EmacsMark/cancel &KeymapWindow

keymap2	EmacsMark
 key Home		= S-C-Home	&Prefix(EmacsMark)	# 文頭
 key End		= S-C-End	&Prefix(EmacsMark)	# 文末
 key C-A		= S-Home	&Prefix(EmacsMark)	# 行頭
 key C-B		= S-Left	&Prefix(EmacsMark)	# ←
 key C-E		= S-End		&Prefix(EmacsMark)	# 行末
 key C-F		= S-Right	&Prefix(EmacsMark)	# →
 key C-G		= $EmacsMark/cancel &Undefined		# キャンセル
 key C-N		= S-Down	&Prefix(EmacsMark)	# ↓
 key C-P		= S-Up		&Prefix(EmacsMark)	# ↑
 if ( !ZXCV ) key C-V	= S-Next	&Prefix(EmacsMark)	# 次頁
 key C-W		= C-X Left Right			# CUT
 key S-M-Comma		= S-C-Home	&Prefix(EmacsMark)	# 文頭
 key S-M-Period		= S-C-End	&Prefix(EmacsMark)	# 文末
 key Left		= S-Left	&Prefix(EmacsMark)	# ←
 key Up			= S-Up		&Prefix(EmacsMark)	# ↑
 key Right		= S-Right	&Prefix(EmacsMark)	# →
 key Down		= S-Down	&Prefix(EmacsMark)	# ↓
 if ( MAP-ESCAPE-TO-META )
   key Escape		= &Prefix(EmacsMarkEscape) &EditNextModifier(M-)
   if ( KBD109 ) and ( ! KBD104on109 )
     key 半角/全角	= &Prefix(EmacsMarkEscape) &EditNextModifier(M-)
   endif
 endif

keymap2 EmacsMarkEscape
 event prefixed		= &HelpMessage("EmacsMark ESC-", " ")
 event before-key-down	= &HelpMessage
 key M-C-G		= &Ignore

keymap Global
 mod Control += 英数
 mod Shift += 無変換 変換
 key *英数 = *LControl
 key *無変換 = *LShift
 key *変換 = *RShift
 key *ひらがな = *Esc

 key C-X = &Prefix(EmacsC-X)

 key Home		= C-Home		# 文頭
 key End		= C-End			# 文末
 key C-A		= Home			# 行頭
 key C-B		= Left			# ←
 key C-E		= End			# 行末
 key C-F		= Right			# →
 key C-G		= Escape		# CANCEL
 key C-L		= &WindowRedraw &Recenter # 再描画
 key C-N		= Down			# ↓
 key C-P		= Up			# ↑
 key C-S		= C-F			# 検索
 if ( !ZXCV ) key C-V	= Next			# 次頁
 key M-V		= Prior			# 前頁
 key S-Home		= S-C-Home		# 文頭(選択)
 key S-End		= S-C-End		# 文末(選択)
 key S-M-Comma		= C-Home		# 文頭
 key S-M-Period		= C-End			# 文末

 key S-C-A		= S-Home		# 行頭(選択)
 key S-C-B		= S-Left		# ←(選択)
 key S-C-E		= S-End			# 行末(選択)
 key S-C-F		= S-Right		# →(選択)
 key S-C-N		= S-Down		# ↓(選択)
 key S-C-P		= S-Up			# ↑(選択)
 key S-C-V		= S-Next		# 次頁(選択)
 key S-M-V		= S-Prior		# 前頁(選択)

 key C-Atmark	= &Prefix(EmacsMark)			# Mark
 key M-BackSpace	= $EmacsEdit/backward-kill-word		# BS(単語)
 key C-D		= Delete				# 削除
 key M-D		= $EmacsEdit/kill-word			# 削除(単語)
 key C-H		= BackSpace				# BS
 key C-J		= Return				# RETURN
 key C-K		= $EmacsEdit/kill-line			# 行末まで削除
 key C-M		= Return				# RETURN
 key C-O		= Return Left				# 一行増やす
 if ( !GANA ) key C-T	= $EmacsEdit/transpose-chars		# 文字入れ替え
 key C-W		= C-X					# CUT
 key M-W		= C-C					# COPY
# C-U 好きじゃないので。
# key C-U		= &Variable(0, 4) &Prefix(EmacsC-U)
 if ( !ZXCV ) key C-X	= &Prefix(EmacsC-X)
 key C-Y		= C-V					# PASTE
 key C-Slash		= C-Z					# UNDO
 key M-U		= $EmacsEdit/upcase-word		# 大文字
 key M-L		= $EmacsEdit/downcase-word		# 小文字

keymap2	DefaultC-X
 key *C-J		= &SetImeStatus(toggle)

keymap DefaultKeymap = &Default
 mod Control += 英数
 mod Shift += 無変換 変換
 key *英数 = *LControl
 key *無変換 = *LShift
 key *変換 = *RShift
 key *ひらがな = *Esc
 key C-X = &Prefix(DefaultC-X)

window	puttyjp /puttyjp.exe/ : DefaultKeymap
window	vmplayer /vmplayer.exe/ : DefaultKeymap
window	firefox /firefox.exe/ : Global
 key C-J	= C-J
 key M-D	= M-D
window	iexplore /iexplore.exe/ : Global
 key M-D	= M-D
window	explorer /explorer.exe/ : Global
 key M-D	= M-D

シフトが妙に増えてるのはSKK使いの性かと。あと漢字変換ONはいかなるときでもC-X C-Jです。「半角/全角」? なんですかそんなキー知りません。ブラウザ操作でAlt-Dは欠かせないよねー、とか。

トラックバック - http://d.hatena.ne.jp/hogelog/20070913

September 06(Thu), 2007

[] 台風なんですけど

こう、世の中的には不利益やらなんやらたくさん発生したりしてるのかもしれないけど、俺はやっぱり台風好きだなあと思った。いつも仏頂面して行列なしてる人らがなりふりかまわずなってたりするのを見てると、なんだか楽しくてしょうがなくなる。駅前あたりがいちばん楽しい。全員強制参加の馬鹿祭りっぽくて。次から次へと傘をぶっこわす人がいるのを見ると「君らは学習しないのか」などと笑えてくる。別に同じ人が続けて壊してるわけじゃないから、いいがかりなんだけど。

単に歩くだけでも風の抵抗で難しいとか、顔の向きによっては息するのも大変だったり、非日常極まれり感がおもしろくてしょうがない。暴風吹き荒れる中嬌声をあげて走ってる小学生集団なんて見るとやたらと親近感がわく。

一方で事故だのなんだの起こったりもするというのに、楽しんでもいいもんかねと思ったけど、台風みてえな天災は俺がおもしろがろうとどうしようと来るんだから別にいいかとも思った。

トラックバック - http://d.hatena.ne.jp/hogelog/20070906

September 02(Sun), 2007

[][] lisp処理系ぽいものを書く(その4くらい)

コンスセル(a . b)を読めるように。あと忘れてたquote。

> (+ 3 2 1 . ())
6
> (quote (1 2 3 . ()))
(1 2 3)

などと。ある程度できたんで、適当に演算実装してまわることもできるけど、まだまだ内部がいいかげんだらけなのでしない。でもやっぱりしたいような気もする。defineがグローバルにしか値を束縛できねえとかどうよ。あー、あと末尾呼び出しの最適化とか忘れてた。ほげ。そういえば'hogeも忘れてた。ねむいはらへった。

ふつーにバグってたこっそり直した。

直したというか字句・構文解析書き直したというか。っていうかわりと適当だったりとか。quoteの略記法'は使えません。

http://konbu.s13.xrea.com/lib/scm/istsp.d

トラックバック - http://d.hatena.ne.jp/hogelog/20070902

September 01(Sat), 2007

[] 最近とか。

インターンシップ研修やってると時間たつのはやく感じる。インターンシップ先では主にプログラム書いたり。「プログラム書くのって仕事になるんだなあ」と阿呆なことを思ったりした。だいたい一つのプログラムのコードを書くだけの日々を送ってるせいか、時間の流れがすごく早い。

げー、lisp処理系進んでねー。後々の継続とかの実装のしやすさとかを考えると、こういう構造にした方がいいんじゃねかー、とかの書き換えをちまちまとしたりしなかったり。めんどくさいからできるだけlispで実装しよう。というか今書いてるlisp処理系ではアトムかコンスセルしか使わないようにしてるし、lispで実装してんのとたいして変わらんのかもしれんけど。とかの話はどうでもいいから、実際に動くコード書けやダボが、とか思う。時間が無いというわけでもないんだけれど。次はS式パーサの書き直し。コンスセル読めるようにするの忘れてた。

あと「HLA一致したけーよろしく」なる書類が届いた。学生だし、断わる話はねーわな。社会人だったら断わるのかっつったら、そんなもん俺は学生だから知らんが。

いやしかし、あたりまえの話なんだけど、世の中に骨髄移植が必要な病気の人っているんだよなあと思った。

書類とか眺めてみっと、「いついつどこどこで提供したっす」とかインターネットなんかに書かないでねとのこと。これは気をつけないとやばい。今だったらmixiとかに書いちゃう人多そうだなと思った。あと書類が前の住所宛だった。このまえ住所変更届を送ったと思ったんだけど。確認いれなきゃなあ。

ドナー登録はすこし採血するだけです。献血センター的なところでできます。あんまし憶えてないけど、たしか献血より簡単。献血の前にする検査用の採血程度のもんだった気がする。

俺は確か吉祥寺の献血センターだったかな。ありゃいつだっけか。3年くらい前かな。さて書類書かにゃ。5000円も貰える*1みたいだし。やった!

あと腹が減った。

*1:入院中の細々とした物のためとかの支度金。あともちろんですけど入院費だとか通う交通費とかの負担はありません。

トラックバック - http://d.hatena.ne.jp/hogelog/20070901
最近のコメント
Connection: close