私が歌川です

@utgwkk が書いている

パート分けされた歌詞からパート情報を削除するワンライナー

sed -re 's/(.+)(.)/\1/g' atapon.txt

こういう文字列置換,初めは慣れなくて perl -mutf8 -nle 's/(.+)(.)/\1/g' -p atapon.txt とかやっちゃうけど,これぐらいならわざわざ Perl を使うまでもなくて,sed で十分という気づきを得られる.

-r を付けると拡張正規表現が有効になり,これで我々にとって直感的な後方参照が有効になる.

以下は試行錯誤の過程です.

エディタの自動保存プラグインを有効にしてコードを書いている

エディタ(vim)の自動保存プラグインを有効にしてコードを書いている.今は 907th/vim-auto-save を使っている.

github.com

自動保存は賛否両論あると思うけど,git 管理下にあるなら git が自動的に diff をとってくれるし,vim なら gitgutter とかでどこが変化したかも見れるのでそんなに困らないと思う. ディスク書き込みがネックになるような環境にはいないので,どんどん保存させている.

ただ git 管理下にないファイルまで自動でどんどん保存されるのは怖いという思いもあるので,.vimrc をこのようにしている.fugitive が用意している関数でうまくやっている*1

" auto save
augroup autosave
  autocmd!
  autocmd BufEnter * let g:auto_save = (exists("*fugitive#head")&&""!=fugitive#head())
augroup END

バッファに入ったら自動保存するかどうかを切り替えるという作戦.見た感じだとうまく動いてそう.

ところで,みなさんの .vimrc が気になっているところです.

ログを残す文化

ログを残す文化は大事だけど,残し方をもっと気をつける必要があると日々思っている.

  • 情報が散らばってしまわないか?
    • DropboxEvernotewikiiPhone のメモアプリ,Slack,IRC……と散らばってしまうと,あとで探すのが面倒
    • 一箇所に集めておく
  • 後から参照しやすいか?
    • 所構わず書いてるとそのうち参照不可能になる
    • 人間の記憶は思ったより弱い
    • 検索機能が必要
  • 障害に強いか?
    • データ消滅して終了したらつらい
    • どこかにミラーリングされてるとよい?
  • そのメモで本当に分かるのか?
    • 自明そうなことも忘れられる
    • とにかく自明であっても全部詳細に書く
    • 引き継ぎに使うこともできるかもしれない
    • 解釈の余地が出てくるとキリがない
    • 少なくとも,いつ,誰が書いた,の情報が残っているとよい

『知的生産の技術』に書いてあった気がするし,書いてなかった気もしていて,大昔に読んだので忘れてしまった.

知的生産の技術 (岩波新書)

知的生産の技術 (岩波新書)

KMC の春合宿で Python の処理系の講座をした

追記: dict の実装で出てくる図が間違っています*1.あとで修正します.

スライドを差し替えました.変更点は次の2点です.

  • dictの図を開番地(オープンアドレス)法のものに訂正
  • バイトコードについて追記(2バイトで1つの命令と引数を表す旨)

先日 KMC で春合宿があり,そこで Python の処理系に関する講座をしました.

speakerdeck.com

内容

プログラミング言語を実行体系で分類すると,次の2つに分けられるのではなかろうかと思います*2

また,型付けで分類すると,次の2つに分けられます.

  • 静的型付け言語
  • 動的型付け言語

C言語コンパイラの実装に関する情報は巷に溢れており,また書籍も数多くあります. 一方で Pythonインタプリタに関する詳細な情報は,もちろんあるのですが,気にせずに使っている人が大半かと思われます*3

そこで,Python の処理系がどう実装されており,どう動いているのか,をスライドにまとめ,春合宿の講座として行いました.

要点をまとめると,

になります. バイトコードコンパイルして仮想機械で実行する,という体系は,最近のプログラミング言語の処理系に多いようです(Java, C#, Ruby など). しかしながら,インタプリタ言語は今でもコードを逐次実行しており,そのために遅いのではないか,と思っている方が少なくないと思います. そんな人にも資料を読んでもらい,実際の実行体型に肉薄してもらえればと思います*4

反省とか

*1:Python の dict では開番地(オープンアドレス)法が使われています http://dsas.blog.klab.org/archives/python-dict-internal.html

*2:どちらにも標準で対応している言語もあります.

*3:それはC言語でも同じ???

*4:遅い原因は他にありそう.