--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2009/01/28

Haskell で赤黒木

赤黒木 - Programming 玉手箱

写経したりしたんだけど、こりゃ綺麗だなと思った。

しかしなんというか、Haskell プログラムにはよく見られる(と思ってる)んだけど、一文字の型名とか変数名が多い。変数名はともかく、型名くらいはあんまり略せず書いたほうがいいんではないのかなぁ。Haskell に限らずだと思うけど、略語の意味が分からないとサッパリ読めない。サッパリは言いすぎか。

2009/01/28

GADT - Haskell

Haskell/GADT - wikibooks を読んだ。まだピンと来ないところもある。リストの例を見るに、ある型の具体的な値を、型で表現できるという感じ? で、それを利用して例にある safeHead みたいなことができると。

リストの要素数を型レベルで制限できたりするのかなと思いこんでたんだけど、そういう用途じゃないのかなぁ。

2009/01/27

今日の vimrc 注ぎ足し

ghci を起動する map を追加。

autocmd MyAutoCmd BufEnter *.hs
\       :nnoremap ,r :execute '!ghci' expand('%')<Return>

2009/01/27

木の走査法

深さ優先探索とか幅優先探索とかよく見るけど、理解してなかったので wikipedia で調べた。

木構造(データ構造) - 走査法 - wikipedia

要は、

深さ優先探索
浅いところから順に探索。現在位置→左→右
中間順
左から順に探索。左→現在位置→右
幅優先探索
深いところから順に探索。左→右→現在位置

ってことでいいんだろうか。

2009/01/25

座椅子と座布団

無印で買ったやつを8月から使ってるんだけど、2時間も座ると腰と尻に痛みがくる。安物買いの銭失いとはこのことか。もうちょっといいやつを探そう。

2009/01/25

vimrc いじり

しばらくほぼデフォルト、もとい set cpして使ってた vim をカスタマイズしたい気分になった。それで help の引きかたやら公開されてる vimrc を見ながら勉強しつつ、vimrc いじってたら夜遅くなってしまった。

help の引きかた覚えると、ほとんど一人で頑張れるってのを実感したのが一番でかい成果物。

現段階での vimrc。

" -----------------------------------------------------------
" File Edit
" -----------------------------------------------------------
" tab/indent/syntax
set autoindent
set expandtab
set ts=8 sw=4 sts=4
syntax enable

" formatting
set formatoptions& formatoptions+=mqM

" search
set incsearch



" -----------------------------------------------------------
" File Encoding
" -----------------------------------------------------------
" encoding
set fileencoding=utf-8
set encoding=utf-8



" -----------------------------------------------------------
" Commands
" -----------------------------------------------------------
"" Blog post
command! Post
\        :!post.sh %

"" Reload $HOME/.vimrc
command! ReloadVimrc
\        :source $HOME/.vimrc

"" Open new or selected entry
command! -nargs=?
\        Blog
\        :execute 'edit' EntryPath()

function! EntryPath(...)
    let l:dir = $HOME . '/record/blog/private'
    let l:today = strftime('%Y%m%d')
    let l:base_path = l:dir . '/' . l:today
    let l:entry = 0
    if a:0 == 1
        let l:entry = a:1
    else
        while filereadable(l:base_path . '-' . l:entry)
            let l:entry += 1
        endwhile
    endif
    return l:base_path . '-' . l:entry
endfunction



" -----------------------------------------------------------
" Keyboard Mapping
" -----------------------------------------------------------
"" swap ; and : only on normal mode
nnoremap ; :
nnoremap : ;

"" shortcut to open help
nnoremap  :help



" -----------------------------------------------------------
" Auto Commands
" -----------------------------------------------------------
augroup MyAutoCmd
    " reset all my autocmd configurations
    autocmd!
augroup

autocmd MyAutoCmd BufEnter *
\       :execute 'lcd' expand('%:h')

一番最後の lcd がかなりいい。あとは encoding まわりをちゃんと調べて、もうちょっとどうにかしたい。

参考にしたサイト: Vim の極め方

2009/01/24

ant の java タスクで Swing アプリケーション

単純に java タスクを設定するだけだと、実行直後にウィンドウが閉じる。これを防ぐには、fork="true" を設定するといい。

理由を知るためにマニュアルをざっと見たのだけど、Java タスクの説明の冒頭に、

If odd things go wrong when you run this task, set fork="true" to use a new JVM.

Java Task - Apache Ant User Manual

とあった。よくわからんことが起こったら、とりあえず fork="true" しとけと。

2009/01/24

飲み会

帰りたいときにはさっさと帰るにこしたことはないな。

2009/01/23

ghc 6.10.1

cabal upgrade で require base >= 4 されまくるようになったから ghc を 6.10.1 にアップグレードした。

ghc 6.10.1 にして cabal upgrade すると、/usr/bin/ld: cannot find -ledit というエラーが出るようになった。おそらくは ghci で readline の代わりに editline が使われるようになったことに関係してるのだろう。apt-get install libedit-dev して解決。

2009/01/20

vimperator 2.0 a3 - qmark と feedSomeKeys_2 plugin

久しぶりにブラウザ環境をカスタマイズした。vimperator 本体を 2.0 の alpha 版に更新したのと、設定をカスタマイズ。設定しなおしたタイトルの2つ。なかなか快適になった。

.vimperatorrc は最後。

vimperator 2.0 alpha 3

1.2 だと feedSomeKeys が動かないぽかったので思いきって alpha 版に更新。Windows だと起動ごとにエラーコンソール出てたんだけど、Ubuntu だと出ない。これいかに。

qmark

おそらく Quick Bookmark の略。go + アルファベットで設定した URL にジャンプするというもの。今まで o + URL 直打ちしていただけに、かなり楽になった。

feedSomeKeys_2

Gmail と Google Reader に設定。Gmail は設定例をそのまま拝借。Google Reader は t だけ抜いてる。t を防さがれるのはなにかと不便だし、Google Reader の t は使わないから。

本当は Google Calendar にも設定したいのだけど、思うようにいかず。今は自動 PASS THROUGH で代替している。

.vimperatorrc

map j 3<C-e>
map k 3<C-y>

:autocmd LocationChange .* :fmapc
:autocmd LocationChange mail\\.google\\.com/mail :fmap -depth 4 c / j k n p o u e x s r a # [ ] z ? gi gs gt gd ga gc
" t を削ってる
:autocmd LocationChange www\\.google\\.co\\.jp/reader :fmap -vkey j k n p m s v A r S N P X O gh ga gs gt gu u / ?
" うまく設定できない
" :autocmd LocationChange www\\.google\\.com/calendar/render :fmap 1 t a d w m x c e z / + q s ? <C-p> <Delete>
:autocmd LocationChange .* :js modes.passAllKeys = /www\.google\.com\/calendar/.test(buffer.URL)

qmark m https://mail.google.com/
qmark r http://www.google.co.jp/reader/view/
qmark c https://www.google.com/calendar
qmark b https://www.google.com/bookmarks
qmark d http://dic.yahoo.co.jp/

2009/01/18

Xnest

X の中で X を起動するアプリケーション。xmonad の中で fluxbox を使いたい場合などに利用する。

ubuntu なら apt-get でインストールできる。

# apt-get install Xnest

fluxbox を Xnest 上で使いたいのであれば、当然 fluxbox もインストールする。ubuntu ならこれも apt-get で。

# apt-get install fluxbox

起動はターミナルから。通常はディスプレイ名を指定する。

$ Xnest :1 &

:1 というのが、立ちあげた X のディスプレイ名になる。これで何も立ちあがっていない、素の X のウィンドウができる。

もちろんこのままでは使いものにならないので、立ちあげた X 上に fluxbox を起動させる。

DISPLAY=:1 fluxbox &

DISPLAY 変数に :1 を指定した状態で、fluxbox を起動するというコマンド。これでディスプレイ :1 の X に fluxbox が走る。

毎回こんなコマンドを打つのは億劫なので、起動スクリプトを書く。標準出力、標準エラー出力に出力されるログはファイルへリダイレクトする。

#!/bin/sh
Xnest :1 -geometry 1024x752 >> ~/.xnest.log 2>&1 &
DISPLAY=:1 fluxbox >> ~/.xnest.fluxbox.log 2>&1 &

リダイレクトについては、先日の記事に付けられたトラックバック記事や、シェルのリダイレクトにまつわる失敗 - Landspaceが詳しい。解説ありがとうございました >odzさん

ちなみにこれ、Swing の勉強したいときに使ってる。xmonad だとウィンドウサイズが勝手に変わる関係で、思ったように描画されなそうだし。

Xnest はこれだけの用途のアプリケーションではなくて、もっと色んなことができる。らしい。

2009/01/18

blog デザイン

タイトル下のカテゴリタブと、その下線を消そうかな。カテゴリは今まったく機能してないし。

追記

消した。いい感じの殺風景。

2009/01/18

FF12

12月末くらいから棚の奥深くに眠っていたFF12掘り起こしてやり始めて、今日ようやくストーリーをクリアした。

全くやってなかったアイテム掘りやら mob 討伐は、これからちょこちょこやっていく。ゲームは1日1時間。

2009/01/14

bash - リダイレクト

2>&1 を書く場所にも意味があるらしい。Xnest の起動スクリプトを書いてて、

#!/bin/sh
Xnest :1 -geometry 1024x752 2>&1 >> ~/.xnest.log &
DISPLAY=:1 fluxbox 2>&1 >> ~/.xnest.fluxbox.log &

では思いどおりにリダイレクトされなかった。しかし、

#!/bin/sh
Xnest :1 -geometry 1024x752 >> ~/.xnest.log 2>&1 &
DISPLAY=:1 fluxbox >> ~/.xnest.fluxbox.log 2>&1 &

では、うまくいった。理由はよくわからない。

2009/01/14

残業

今年の初残業。明日の朝一までにやらなきゃいけないことを、前日の夕方に伝えるとかどういうことかと。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。