勝ちました pic.twitter.com/FlnyxJIDcE
— うたがわきき🔰💊 (@utgwkk) 2017年3月28日
パート分けされた歌詞からパート情報を削除するワンライナー
sed -re 's/(.+)(.)/\1/g' atapon.txt
こういう文字列置換,初めは慣れなくて perl -mutf8 -nle 's/(.+)(.)/\1/g' -p atapon.txt
とかやっちゃうけど,これぐらいならわざわざ Perl を使うまでもなくて,sed で十分という気づきを得られる.
-r
を付けると拡張正規表現が有効になり,これで我々にとって直感的な後方参照が有効になる.
以下は試行錯誤の過程です.
perl -mutf8 -nle '$_=~s/(.+)(.)/\1/g;print;' atapon.txt
— うたがわきき🔰💊 (@utgwkk) 2017年3月26日
perl -mutf8 -nle 's/(.+)(.)/\1/g;' -p atapon.txt まで短くできる
— うたがわきき🔰💊 (@utgwkk) 2017年3月26日
sed でよくない???
— うたがわきき🔰💊 (@utgwkk) 2017年3月26日
sed でよくない,と思ったけど,等価な置換の書き方が分からない……
— うたがわきき🔰💊 (@utgwkk) 2017年3月26日
sed -re 's/(.+)(.)/\1/g' atapon.txt でよかった
— うたがわきき🔰💊 (@utgwkk) 2017年3月26日
エディタの自動保存プラグインを有効にしてコードを書いている
エディタ(vim)の自動保存プラグインを有効にしてコードを書いている.今は 907th/vim-auto-save を使っている.
自動保存は賛否両論あると思うけど,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 が気になっているところです.
ログを残す文化
ログを残す文化は大事だけど,残し方をもっと気をつける必要があると日々思っている.
- 情報が散らばってしまわないか?
- 後から参照しやすいか?
- 所構わず書いてるとそのうち参照不可能になる
- 人間の記憶は思ったより弱い
- 検索機能が必要
- 障害に強いか?
- データ消滅して終了したらつらい
- どこかにミラーリングされてるとよい?
- そのメモで本当に分かるのか?
- 自明そうなことも忘れられる
- とにかく自明であっても全部詳細に書く
- 引き継ぎに使うこともできるかもしれない
- 解釈の余地が出てくるとキリがない
- 少なくとも,いつ,誰が書いた,の情報が残っているとよい
『知的生産の技術』に書いてあった気がするし,書いてなかった気もしていて,大昔に読んだので忘れてしまった.
- 作者: 梅棹忠夫
- 出版社/メーカー: 岩波書店
- 発売日: 1969/07/21
- メディア: 新書
- 購入: 34人 クリック: 460回
- この商品を含むブログ (299件) を見る
KMC の春合宿で Python の処理系の講座をした
追記: dict の実装で出てくる図が間違っています*1.あとで修正します.
スライドを差し替えました.変更点は次の2点です.
- dictの図を開番地(オープンアドレス)法のものに訂正
- バイトコードについて追記(2バイトで1つの命令と引数を表す旨)
先日 KMC で春合宿があり,そこで Python の処理系に関する講座をしました.
内容
プログラミング言語を実行体系で分類すると,次の2つに分けられるのではなかろうかと思います*2.
また,型付けで分類すると,次の2つに分けられます.
- 静的型付け言語
- 動的型付け言語
C言語のコンパイラの実装に関する情報は巷に溢れており,また書籍も数多くあります. 一方で Python のインタプリタに関する詳細な情報は,もちろんあるのですが,気にせずに使っている人が大半かと思われます*3.
そこで,Python の処理系がどう実装されており,どう動いているのか,をスライドにまとめ,春合宿の講座として行いました.
要点をまとめると,
になります. バイトコードにコンパイルして仮想機械で実行する,という体系は,最近のプログラミング言語の処理系に多いようです(Java, C#, Ruby など). しかしながら,インタプリタ言語は今でもコードを逐次実行しており,そのために遅いのではないか,と思っている方が少なくないと思います. そんな人にも資料を読んでもらい,実際の実行体型に肉薄してもらえればと思います*4.
反省とか
- 講座をした日に体調を崩していたので,はきはき喋れなかったと思う…….
- とりあえずC言語が分かればいいぐらいのつもりでスライドを作ったけど,numpy とか Cython が説明なしに登場していたし,もう少し説明を加えるべきだった.時間余ってたしなあ.
- 参考にしたページ,Scrapbox を見るとこれだけ記録されていた.
- http://postd.cc/python-internals-pyobject/
- https://tech.blog.aknin.name/2010/04/02/pythons-innards-introduction/
- https://www.slideshare.net/pfi/python-61443627
- http://svn.coderepos.org/share/docs/jbking/vmdoc/about_python_vm.html
- https://www.python.org/dev/peps/pep-0330/
- https://www.python.org/dev/peps/pep-0339/
- https://leanpub.com/insidethepythonvirtualmachine/read
- http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/PyVM.htm
YAPC::Kansai 2017 OSAKA 行った #yapckansai
下書きに残ってた.けっこう記憶から消えつつある.聞いたセッションの感想を書く.
メールフォームからメールを送る近代的な方法
/usr/sbin/sendmail
とか SMTP とかの話だった.最近だと AWS もメール送信 API とかやってるらしい.
ビットコインを5分で試す
ブロックチェーンとは何なのか知れたのでよかった.Docker 出てきてモダンな感じがした.
2017年春のPerl
最近の Perl 事情あまり知らなかったけど,Perl6 だと演算子がめちゃくちゃ自由に作れるのすごい.
Webアプリケーションのキャッシュ戦略とそのパターン
ISUCON でやろうとしてたことだなーと思いながら聞いてた.キャッシュする前の本質的な改善ができるようになりたい.
GUEST: 木本 裕紀
あまり覚えていない.Perl 製の WAF の話だったと思う.
GUEST: スペシャルセッション
dankogai さんのライブコーディング.めちゃくちゃでかつてない感じになっていた.cgi-lib.pl
はもう動かないと聞いて残念.
TRUNCATE user;に如何にして立ち向かうか
オペミスによる DB データ消失の対策みたいな話だったと思う.
はてなシステムの考古学
はてなは Perl の企業という印象が強いけど,ある時点での決断によるものだったのだと分かった.最近はいろいろ使ってるみたいだ.
LT
Acme モジュールの話がよかった.
Keynote: 竹迫 良範
60分あってけっこう長かったけど,マインスイーパを自動化するところと,USB の自動再生でマウスを止めるところが一番よかった.
総合
どの話も(ちゃんと聞いてたのは)面白かったと思う.Perl の会だと思って来ているけど,Perl 関係ない話もどんどん出てきて身近な感じがした.休憩時間なしでセッション詰めるスケジュールはけっこう大変そうな感じがした.