tekkoc'blog

tek_kocとかtekkocとか名乗っています。
株式会社インフィニットループ所属。新人プログラマです。
3度のプログラムよりも飯が好き。
Recent Tweets @tek_koc

遠くに行きたいと思うことが、僕にもある。

ここでないどこか。例えば海外とか、例えば本州とか。例えば小樽なんかでもいいかもしれない。出掛けるときに、少し乗る電車を変えれば、自分が思っているよりもずっと簡単にどこかに行ける。

旅行は趣味じゃないが、たまには観光もいいかもしれない。心の洗濯みたいなものだ。それこそ温泉なんかもいいかもしれない。

ただ、所詮は気晴らしだ。気晴らしは最高だが、根本的な解決にはならない。「どこか遠くに行きたい」という気持ちは、またいずれ湧き上がる。

遠くとはどこなのか。

どんなに場所を移しても、環境を変えても、誤魔化しても、自分からは離れられない。

今の自分から遠く離れた場所へは、行けない。

行きたい”遠く”はどこか。なぜ遠くへ行きたいのか。それは、一時的にどこかへ行けば解消されるのか、場所さえ変えれば済むのか、それとも、自分を変えないといけないのか。

遠くへ行きたい。惨めな気持ちにならない、どこか、遠くへ。

ふと、自分が昔に書いたブログを見てしまうことがあります。

検索経由とか、ブクマ通知とか、あるいは単なる衝動とか。

一秒前ですら黒歴史と感じるような自分としては、とても正視出来るものではないのですが、恥しさをぐっと堪えて読むと、何というか意外と悪くなかったりするんですよね。

自分が書いたものだから当然なんですが「考えが似てるわー」「気持ちわかるなー」みたいな気持ちになる。「あー、俺こういう事言うわー」みたいな。

書くっていう行為は覚えるためよりも、むしろ忘れるためにあると思っていて、実際昔に書いたことなんて綺麗に忘れてるんですが、その根底にあった思想とか、漠然とした経験みたいのは、頭に薄らと残っていて、そういうのが呼び起こされるのが、恥しくも気持ちいい。

忘れるために書くというよりは、書くことによって消化をしてるんだな、と思う。

口の中、胃袋の中に残留する「考え」や「知識」を消化して、取り込む。不要なものはいずれ排泄物として忘却し、必要なものは血肉となる。

消化の仕方は人それぞれだけど、きちんと消化しないといつまでも残留して気持ち悪くなったり、あるいは単に全てを忘れてしまうかもしれない。

つい消化することを忘れがちだけど、後で恥しがるためにも、小まめに消化するようにしたいな。

僕は折り畳みベッドを折り畳まずに使っている。いざというとき、折り畳めれば運びやすく、スペースも作れると思ったからだ。

そう、いつの日か。まだ来ないいつの日か。

一方、年の離れた弟もベッドを新しくした。親と決める際、どうせ折り畳まないからと、普通のベッドを希望したらしい。

それは当然部屋を占有し、配置変更もしにくいが、同じ安物でもずいぶんと寝心地が違う。ふかふかで、気持ちがいい。

折り畳めないベッドと、折り畳まないベッド。本当に必要なもの、本当に欲しかったもの。

せっかくだから、もったいないから、という思考は、時にとてももったいないと思う。

安くてもいいから、ベッド買い替えようかな。

「いつやるか? 今でしょ」で話題の東進ハイスクールさんのCM、聞いていると受験生じゃない自分もやる気が出て来るので、最近よく作業用BGMとして聞いています。

せっかくなんで、テキストに起こしました。先生別に引用してあります。これでより作業が捗りそうです。


成績を伸ばす一番簡単な方法は「一、音読」

私は硬派な人間ですから、あんまり甘やかしません。でも、絶対わからせますから。本当に呆れるほど分かるほど分からせますから。

達成感の積み重ね。達成感をひたすら積み重ねていくっていうのが、成績を上げる唯一の道です。

音読を通して5回、10回やったらもう全部頭の中入ってるから。

とにかく音読ですよ。10回じゃ足りない。20回くらい音読。

血も筋肉も英語になるぐらいに徹底的にやろうぜ。

「綿密にして熱い講義に死角なし。」今井 宏 先生 (英語)


「俺には英語が出来ない。」「僕は英語が苦手だ。」そんなのは思い込みだよ。英語なんて言葉なんだ、こんなもんやれば誰だって出来るようになる。

間違う事は良い事なんです。間違う事は良い事だ。人間間違わなかったら進歩がないでしょ。出来る事ばっかりやってたって意味ないでしょ。

過去の成績なんか関係ない。

やるのかやらないのか。そんな事を考えている時間が一番勿体無い。

魂を込めて誰かに伝えようという気持ちで英文を読む。

悩んでばかりで、やらない奴が多すぎる。

「毎年3万人の偏差値を大改造。」安河内 哲也 先生(英語)


問題文をどう読んでくかということ

数学の力を上げてく事が目的だから、答えだけ出すことにこだわっちゃいかん。

一つの問題を違う見方で捉える。

式で追ってくんじゃなくて、自分が書いてある式が感覚的に分かるように。

考える力を付けてかないと、数学っていつまでも出来るようになんないからね。

物事の根幹にある仕組みをどれだけ理解するか。

「数学的思考力を高い次元へ。」志田 晶 先生(数学)


公式は全て瞬時に導ける

公式なんていうのは忘れたって導けると。

まず敵を知ること。

因数定理を考えればこれx-αを因数に持つに決まってる訳だよね。

「東大など、難関大合格者が続出。」長岡 恭史 先生(数学)


定義がちょっとでも曖昧になってくると途中で間違ってくるんだよな

物理っていうのは実態を分かる事なんです。何をやってるのか分かれば良いんです。

数式は言葉です。計算じゃない。

解けなくても現象が分かる、っていうことは大事な事なんです。

頭の中で見えてなきゃいけないんですよ、こういうのは結局。

「あれ、これ本当かな」と思ったら自分でチェックする。

「東大理系合格者からの圧倒的支持。」 苑田 尚之 先生(物理)


基礎の基礎が恐いってことを今日何度も言っておきます。

頭には知識はあるの。あとは、訓練と、引っ張り出す練習と、スピードの問題です。

「過去20年の入試分析に基づく「マドンナ古文」。」 荻野 文子 先生 (古文)


じゃあいつやるか? 今でしょ。

もちろん、受かる事が大事だけど、受かって満足なんかしてもらいたくない。あくまでも通過点に過ぎない。

ほっといたら二年後にこれ出来るようになるんですか?

「東大・京大の記述問題を突破せよ。」 林 修 先生 (現代文)


正確に読んでいくんです。必ずそのメッセージは届くように書かれてます。

「明晰な論理と感動の涙。現代文に新たな風を巻き起こす」宗 慶二 先生 (現代文)


人に教えられるぐらい復習をすることによって、本当に自分のものになる訳です。

英語が出来れば世界中どこででも仕事が出来るじゃないですか。

自分の限界に挑戦してね、それを乗り越える。

「どんな問題にも通用する本物の実力を。」福崎 伍郎 先生 (英語)


我々の目標は、平均点などではなく、満点だ。

たった今スタートを切ることによって、大きく人生は変わってくるだろう。

「やる気と自信を引き出す熱血授業。」 渡辺 勝彦 先生 (英語)


常識だと思われていることを常に疑ってかかること。

「難関大を突破する高度な論述力を。」野島 博之 先生 (日本史)


親しんでください。 楽しんでください。 好きになってください。 愛してください。

「数学がわからない苦しみを、わかる喜びに。」大吉 巧馬 先生 (数学)


Vim Advent Calendar 2012 95日目の記事です。

ついに3月、100日目も目の前です。 迂闊な発言をしたため2週目を書くことになりました! まだまだ続いて欲しいので、皆さんもどんどん迂闊な発言をしましょう!

さて、今回はあまり時間を確保出来なかったので、友人の作ったとあるカラースキームを紹介しようと思います。

その名も「color_blind」です。

名前の通り、色弱用のカラースキームで、通常のカラースキームでは見えにくい彼が、見やすい色のみで構成して愛用しているカラースキームです。

仕組み的には特筆するようなものはない、ごく単純なカラースキームですが、初めて見たときは驚きました。こういう考え方もあるのか、と。

色弱用のカラースキーム、という点でももちろん驚きましたし、これがプラグインを自分で作るってことなんだな、とも思いました。

自分の困っていることに向き合い、可能な手段で解決を試みる。当たり前のことと言えば当たり前なんですが、Vimの設定はコピペや安易なプラグイン導入だけでも解決出来るため、こういう発想にはなかなか至れないと思うんですよね。

また、彼の設定ではフォントサイズを極端に大きくしているのも印象的でした。

横に80文字しか表示出来ないくらい、文字を大きくしているそうです。自分の手元で試してみましたが、この画像で43ptです。この方が集中出来るし、見間違いがないし、横に長いコードを書かなくて済むから、だそうです。

設定自体は簡単ですが、とても参考になる設定です。 分割を多用する僕は流石にこのサイズだと辛いですが、僕も見習ってフォントサイズを大きくしました。

「color_blind」は色弱用のカラースキームという、とても特殊で興味深いプラグインです。それでいて、カスタマイズするということそのもの大事さを再確認させてくれる素敵なプラグインだなと思います。 皆さんももっとたくさんカスタマイズしましょう!

先日「AtCoder Regular Contest #012」に参加しました。

初参加。惨敗です。

C問題をある程度問いたものの、提出まで届かず。というか終了後に問題を勘違いしていたことに気付いたりして、まあ駄目駄目でした。

でも、面白かった。

限られた時間で頭を絞って問題を解く感覚。とても久しぶりで刺激的でした。いやー悔しいな。何より、こう数値として自分がどれだけ出来ないかを認識出来るのはとてもいいですね。うん、悔しい。

あと、今回全然書き慣れないPythonで挑んだのですが、それも良かったです。一応さらっと文法一覧は眺めてから挑戦したのですが、やはりこうやって実際に書いてみるのが一番ですね。何がわかっていないかが分かったり、人の解法見て便利なイディオムを覚えられたり。

次回も参加出来たらしてみようと思います。せめてC問題くらいは時間内に解きたいな……。

思うところあって、Pythonを始めてみることにしました。

そのために環境を整えていたのですが、いじりだすと色々と気になって、結局まだPythonそのものは全然書けていないですw

ただ、その代わりそこそこいい感じになったので、何をしたのかまとめてみました。

あ、OSは「OS X 10.8 Mountain Lion」です。OSに依存するような話はないと思いますが、念の為。

Pythonそのものの環境設定

まずはPythonそのものの環境構築です。本題ではないですが、別記事にするほどでもないので、備忘録を兼ねてここに。

PythonそのものはMacにデフォルトで入っているものを使います。2.7.2が入っていました。

そしてvirtualenv環境を構築するのがいいらしいので、早速構築します。virtualenvとは、Pythonのいろいろな実行環境を仮想的に構築出来るもの、だそうです。

まずはeasy_installというPythonのパッケージ管理ツールを入れます。

$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py

そしてeasy_installを使って、easy_installより便利なパッケージ管理ツールであるpipを導入。

$ sudo easy_install pip

pipを使って、virtualenvを導入。

$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

virtualenvで使うパスの指定と、virtualenvwrapperのスクリプトにパスを通すため、.zshenvや.bash_profileに、↓を追加。

# python
export WORKON_HOME=~/.virtualenvs
. /usr/local/bin/virtualenvwrapper.sh

これだけでvirtualenvを使う準備が整いました。

環境を作るにはmkvirtualenvコマンド

$ mkvirtualenv study

環境を切り替えるにはworkonコマンド

$ workon study

デフォルト環境に戻すならdeactivateコマンドです。

補完プラグイン

ここからはVimの話。

こんなん出来ます。速いし構文解析してて精度がかなりすごいし、とっても便利。pydocを開く機能とか、正確に変数名の変更が出来たりとか、とにかくオススメ。これが使いたくてPythonを選んだというのも、正直あります。

インストールは他のプラグイン同様にNeoBundleなどを使えばいいのですが、更にjediそのものを入れる必要があります。

ただjedi.vimの中でgitのsubmoduleとして管理さているため、.vim/bundle/jedi-vimの中で、

$ git submodule update --init

とするだけで、jedi-vimを使えるようになります。

色々と便利なプラグインなんですが、デフォルトだと余計な設定もされるので注意が必要です。色々マッピング設定している人は、一度確認した方がいいです。

自分の場合、quickrunが使えなくなったり、Kのマッピングが潰されて困ったり、あるいはvim-refと同等の機能があるのでマッピングを上書きしたかったり……。

結果こうしました。

" rename用のマッピングを無効にしたため、代わりにコマンドを定義
command! -nargs=0 JediRename :call jedi#rename()

" pythonのrename用のマッピングがquickrunとかぶるため回避させる
let g:jedi#rename_command = ""
let g:jedi#pydoc = "k"

rename_commandをまず使わないようなマッピングに退避。その代わりrename機能を:JediRenameで呼び出せるようにして、pydocの呼び出しコマンドをあえて普段vim-refの呼び出しに使っているkに変更しました。

詳しくはこちらも参照。

構文エラーの検出

多言語に対応した構文エラー検出プラグインSyntasticが、Pythonに対応しています。なので、それをそのまま使ってもいいのですが、自分は「pyflakes-vim」というプラグインを使うことにしました。

このように、構文エラーがあるところに赤線が出ます。保存したタイミングではなく、コードを書いているときに自然と出てくる感じがいいです。

jedi-vimと同じくインストールのために「git submodule update —init」をします。

また、Syntasticを無効にするため、以下のように変更しました。

他の言語の設定もあるため分かりにくいですが、passive_filetypesとしてpythonを指定しています。

let g:syntastic_mode_map = {
            \ 'mode': 'active',
            \ 'active_filetypes': ['php', 'coffeescript', 'sh', 'vim'],
            \ 'passive_filetypes': ['html', 'haskell', 'python']
            \}

文法チェック

pep8(Pythonのコーディング規約)やpyflakes(未定義変数の使用などの検出)の機能を包括したプラグイン。pyflakes-vimの機能と若干かぶってますね。 これを入れることで、簡単にコーディング規約に違反してないかのチェックが出来ます。

flake8を別途入れる必要があるので、冒頭で紹介したpipを使っていれました。

sudo pip install flake8

自分の場合、次のようにして「l」で呼び出せるようにしました。

nnoremap  l :call Flake8()

一通り動くコードが出来上がったあとに、pep8に違反してないかチェックするのにいいかなと。

もちろん保存時に自動で動くようにしたりも出来ますが、ちょっとした実験コードを書くときとか、必ずしも綺麗にコードを書きたい訳じゃないときもあると思ったので、必要な時に呼び出すようにしようと思います。

無駄な空行があるとか、コンマの後にスペースがないとかも警告されてビビります。Pythonっぽい感じがしていいですね!

インデント表示

Python向けのプラグインではないですが、インデント可視化プラグインがまたいい感じです。

他の言語を書くときもあると便利なのですが、インデントが重要な意味を持つ言語ではなおのこと便利ですね。

この手のプラグインで定番なのは「Indent Guides」です。

ただ、今さっき知ったのですが「indentLine」というプラグインもあるみたいです。

試していないので分からないですが、GitHubに載っているスクリーンショットは「indentLine」も負けないくらい格好いいので、あとで試してみようと思います。

まとめ

ということで、なかなか良さ気な環境が出来ました。

最後に今回いじった範囲のvimrcをまとめて載せておきます。

土曜の朝、腹に激痛を感じて目が覚めてから、ずっと腹を下しています。 みぞおちへの痛み、下痢、食欲不振。

一日経った今、ようやく刺すような痛みが収まり、こうやってブログを書けるようにはなりました。まだ食事は出来てないです。

身の回りでも流行っているみたいなので、みなさん気をつけてください。つれーわー

この記事は、 Vim Advent Calendar 2012 63日目の記事です。


みなさん、vimにちは! いよいよ二月になりましたね。自分もクリスマスが待ち遠しくて、今更ながら参加してしまいました。

秒速でメモを書く条件

今回は「秒速でvimでメモを書く条件」ということで、普段の自分のvimでのメモ環境を紹介しようかなと思います。

EvernoteでもなくSimplenoteでもなくDropboxを使う

はい、これで話の8割は終りました。まさに秒速ですね!

メモのクラウド化はとても需要の高い分野で、例えば「Evernote」なり「Simplenote」なり様々なサービスがあります。 当然ながら、それらを扱うためのvimプラグインも充実しています。

でも、Vimで扱うのに一番自然なのはやっぱりシンプルなテキストファイルです。なので、メモはあくまでテキストファイルに行って、それをDropboxで同期する、という方法でメモを残しています。

ちなみに、自分はメモファイルは全てDropbox内のMemoディレクトリ以下に配置しています。つまり「~/Dropbox/Memo/」です。

また、中身はMarkdownです。拡張子がtxtなのは、iPhoneで使っているメモアプリで開けるようにするためです。

1.inbox的メモファイル

とりあえず何も考えずに書き込む用のメモファイルが一つあります。 GTDなどでいうinboxがイメージとしては近いでしょうか。

歴史的経緯により、僕は「todo.txt」というファイル名のファイルを使っています。本当の最初のころは、メモといえばこのファイルだけで、しかもTODO管理のみに使っていたからです。

このファイルはとにかく即座に開きたいので、専用のコマンドを用意しています。

" TODOファイル
command! Todo edit ~/Dropbox/Memo/todo.txt

これで「:Todo」とするだけで、いつでもすぐにメモファイルを開けます。秒速です。

2.拡張子付きメモファイル

↑の方法だけでも便利だったのですが、

  • コードをちょろっと書いて試したい
  • ちょろっとブログを書きたい
  • 使い捨てのSQLを流すのに、まずはVimで編集したい

なんて時に、一つのファイルだけでやるのは辛いです。 関係ないものまで書いてあると邪魔くさいですし、ファイルタイプも手動で変えないといけないし、そのままquickrunも出来ない。秒速じゃないです。

そこで「tmp.拡張子」というファイルにメモしています。

" 一時ファイル
command! -nargs=1 -complete=filetype Tmp edit ~/.vim_tmp/tmp.<args>
command! -nargs=1 -complete=filetype Temp edit ~/.vim_tmp/tmp.<args>

「:Tmp sql」もしくは「:Temp sql」とすると、「tmp.sql」が開かれます。 tempとtmpのどちらか片方だと打ち間違いが多発したため、今は両方で同じファイルを開くようにしています。

拡張子付きのメモファイルになったので、適切なファイルタイプでメモを開けるようになりました。つまり、シンタックスもquickrunでもばっちりということです。秒速ですね。

なお、このファイルはあえてDropboxには入れないようにしています。好みの問題なので、どちらでもいいと思います。 名前の通り一時的なメモに使うことが多いため、わざわざ同期するよりも、環境別に違うファイルの方が楽かなと思っているからです。

3.長期保存用メモ

カテゴリと日付を元にファイルを作成し、それをDropboxに保存。メモしたファイルの一覧から選んだり、grepしたりして、メモを再利用しています。

これを達成するためのプラグインとして「memolist.vim」があります。

ただ、Unite.vimとさえ連携させてしまえば割と簡単に出来そうだったこと、微妙に「memolist.vim」とは違う形式にしたかったことから、勢いでvimrc内でメモ用コマンドを自分で定義しています。

相当コードは汚いですが、何分勢いで作ったのと、それでいてこれを修正していると本日中に投稿が間に合わなさそうなので、そのままです。

function! s:open_memo_file()"
    let l:category = input('Category: ')
    let l:title = input('Title: ')

    if l:category == ""
        let l:category = "other"
    endif

    let l:memo_dir = $HOME . '/Dropbox/Memo/vim/' . l:category
    if !isdirectory(l:memo_dir)
        call mkdir(l:memo_dir, 'p')
    endif

    let l:filename = l:memo_dir . strftime('/%Y-%m-%d_') . l:title . '.txt'

    let l:template = [
                \'Category: ' . l:category,
                \'========================================',
                \'Title: ' . l:title,
                \'----------------------------------------',
                \'date: ' . strftime('%Y/%m/%d %T'),
                \'- - - - - - - - - - - - - - - - - - - - ',
                \'',
                \]

    " ファイル生成
    execute 'tabnew ' . l:filename
    call setline(1, l:template)
    execute '999'
    execute 'write'
endfunction augroup END"


" メモを作成するコマンド
command! -nargs=0 MemoNew call s:open_memo_file()

" メモ一覧をUniteで呼び出すコマンド
command! -nargs=0 MemoList :Unite file_rec:~/Dropbox/Memo/ -buffer-name=memo_list

" メモ一覧をUnite grepするコマンド
command! -nargs=0 MemoGrep :Unite grep:~/Dropbox/Memo/ -no-quit

" メモ一覧をVimFilerで呼び出すコマンド
command! -nargs=0 MemoFiler :VimFiler ~/Dropbox/Memo

" メモ関連マッピング
nnoremap Mn :MemoNew
nnoremap Ml :MemoList
nnoremap Mf :MemoFiler
nnoremap Mg :MemoGrep

" シフト押したままでもマッピングが起動するように
nnoremap MN :MemoNew
nnoremap ML :MemoList
nnoremap MF :MemoFiler
nnoremap MG :MemoGrep

こんなのをvimrcに定義しています。

具体的には、

  • Mnで新規ファイル作成。カテゴリ名とファイル名を指定。
  • MlでUnite.vimでファイル一覧。
  • MfでVimFilerを起動
  • Mgでメモ全体からUnite.vimでgrep

出来るようになっています。 テンプレートまでvimrcに直書きなんて、素晴しいですね。秒速で作った匂いがします。あー死にたい。

前の二つほどお手軽ではないものの、秒速でメモファイルを作れますし、秒速で目的のファイルを開けます。

おわりに

Vimでメモを書くの、おすすめです。 編集しやすい……というのももちろんありますが、コードを書いているときにサッとメモ出来て、ウィンドウ分割を駆使してメモを見ながら作業出来たり、当然メモを2つ見ることも、同じメモの離れた箇所を一度に表示しつつ作業することも、何だってありな訳です。

何というか、いたって単純な内容で申し訳ありませんでした。これでもこの文章を書くのは秒速じゃないので、これでご勘弁を!

明日は@syuiさんの記事です。お楽しみに!

もう早いもので2013年1月も終わりが近づいています。

まあきっと、今年の終わりもすぐ近づくでしょう。経験則ですが、どうやら時間は逆向きには進まないようなのです。

でまあ、いつもこの時期に感じることは同じで、

「あれとかこれとか目標立てたのに、まだ全然出来てないじゃん。今年も俺駄目じゃん」

だったりします。

こういうのもまあ、人生に焦りを感じる上では悪くないとは思うんですが、実際にはただただ精神を不安定にするばかりで、出来れば避けた方がいいと思うんですよね。

じゃあどうするか。

一月から完璧超人になるのが分かりやすい対策なのですが、残念ながら僕には出来そうにない。

なら、しっかりした一年の目標を持たなきゃいいんじゃね、と。

こんなこと言うと意識高い人々から白い目で見られそうですが、別に目的を持たない、って訳じゃないです。目的を持たないのではなく曖昧に持とうよと僕は思うのです。

「大人っぽくなる」とか「社交的になる」とか、そんな感じの、ふわっとした目標。

これなら捉え方次第で成功や失敗を決めれるし、小さく前進することも出来れば、途中から挽回も出来る。

具体的な数値目標は、もっと短いスパンで持てばいいのです。期間さえ短かければ、失敗から調整することも、再挑戦も出来る。

だからまあ何というか、今年も例年通り冴えないんですが、それでもまあ「この一年も駄目じゃん」みたいなネガティブな気持ちになってないだけいいかなと、そんなことを1月の終わりに思っているのです。