チューリング不完全

What are you afraid of? All you have to do is try.

momonga.vim #3 に行ってきました

Q. 既にmomonga.vim #4が終わっているのですが、それでもレポートが成り立つと思っているんですか?
A. お使いの時空間が最新ではありません。最新の時空間へアップデートすることをお勧めいたします。

はじめに

momonga.vim #3に行ってきました。(2ヶ月半ぐらい前に。)
私は普段emacsを使っており、vimは全然わかりません。しかし、最近ごくたまに小指が痛くなることがあったり(emacs小指)、仕事でいろんなLinuxサーバ上で作業するときはviを使ったりするため、ある程度のキーバインドは習得しておきたいということは前々から思っていました。
しかし、今まではvimtutorをやっても「Ctrlキーを押したい」という誘惑に耐え切れず、その度にvimがアアッということになり、私もアアッとなって「:q→emacs -nw」のコンボを決めるというのがお決まりでした。

これを解消しようというのが今回の目的です。

やったこと

ちなみに環境はCentOS 6.4です。

インストール

sudo yum install vim

インストールすらしていないという。

emacsを封印

emacsを使ってしまうからvimが覚えられないんだ、だから常にvimを開くようにしよう。

alias emacs='vim'

Neobundle

NeoBundleでモジュール入れるの便利すぎる。

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'

gips-vim

Emacsキーバインドを覚えた時は鬼軍曹.elを使っていました。vimでもそのようにしましょう。

NeoBundle 'modsound/gips-vim'

これにより矢印キーを無効にできます。
しかしこれだけではインサートモードで矢印が使えてしまいます。無効にしましょう。

inoremap <Right> <nop>
inoremap <Left> <nop>
inoremap <Up> <nop>
inoremap <Down> <nop>


それからあれこれ設定して、短い.vimrcができました。
dotfiles/.vimrc at master · aomoriringo/dotfiles · GitHub


ここまででとりあえず基本設定ができたので、しばらくあれこれ触りました。
この後はvimrc勉強会のログを参考にvimrcを育てようと思ってたんですが、vim-mathematicaというプラグインを見つけてしまいました。mathematica狂いとしては気になります。

vim-mathematica

vim-mathematicaでは数式に使う特殊記号を特殊記号の見た目のままで表示してくれるという機能があるらしく、これは見た目的にもきもいしやってみたいと思いました。
しかし調べてみるとconcealという機能が必要らしい。concealはvim7.3からの機能です。

$ vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:17:30)

oh...


ということでvimの最新版のビルドをしました。オプションの付け方でビルド自体が失敗したり、gvimが必要だったり、フォントが足りないのでインストールしたり・・・ということを繰り返してるうちにmomonga.vimが終わってました。
最終的にビルドとインストールはできたんですが、結局vim-mathematicaは意図通りには動いてくれず、またうまくいったビルドのオプションとかも全く覚えてないです。つらい。

まとめ

もう2ヶ月以上前だしあまり覚えていない。

momonga.vim #4 に行ってきました

f:id:aomori-ringo2:20140608233327j:plain
momonga.vim #4に行ってきました。


momonga.vim #3に引き続き2回目の参加です。前回は完全にvimがわからず、sudo yum install vimから始まりました。
前回のおかげでvim自体は入れられましたが、元々使用しているエディタはemacsです。vimを立ち上げても、「emacsだとこうなんだけど、vimだとどうすれば・・・?」というのをいちいち調べるのがめんどくさくなって、結局emacsを起動してしまうわけです。ダメなやつです。
というわけで、今回はそれを解消できるようにvimrc・・・というかそれ以前に今の疑問をちゃんと解消するということをしました。

やったこと

タブ

まずタブがよくわからんので調べました。
Vimの便利な画面分割&タブページと、それを更に便利にする方法 - Qiita
タブと画面分割のコマンドを覚えました。

Unite.vim

そういえばいれてなかったのでいれました。
unite.vim について語る - C++でゲームプログラミング
Unite fileとかUnite tabとか、ああ便利。

キーバインド

今使えているvimキーバインドはほんとに最低限で、hjkl, x, i, ESC, yy, p, dd, G, :q ぐらいでした。かなりやばさです。
(矢印キーはvimrcで無効にしてある)
以下のコマンドを覚えました。

コマンド
Ctrl + u 半画面分 上へ
Ctrl + d 半画面分 下へ
Ctrl + b 一画面分 上へ
Ctrl + f 一画面分 下へ
zz バッファ位置をカーソルが画面の真ん中に位置するようにする
zt バッファ位置をカーソルが一番上に位置するようにする
zb バッファ位置をカーソルが一番下に位置するようにする

前述のタブ、画面分割のコマンドは省略してます。
あ、そういえば矩形選択とか・・・ううっ

Pythonの設定

もともとemacsのelもそこまでもりもり設定を書いている方ではないし、とりあえずこのぐらいかな?ということでaomoriringo/number_bot · GitHubの進捗を出していました。
しかし、なにかおかしい。インデント幅が8だし、改行時に毎回カーソルが一番左にくる、これはめんどい。

そこでPython用の設定を書きました。

# ~/.vim/after/ftplugin/python.vim
setlocal shiftwidth=4 softtabstop=4 expandtab

この辺はthincaさんが教えてくれる通りに端末を打つだけのになりきっており、ファイルパスの意味とかよくわかってないです。

momonga.vim

momonga.vimの様子についても書いておきましょう。

開始前

momongaさん、thincaさん、rbtnnさんと一緒にお昼ごはんを食べました。thincaさんはラーメン大好きthincaさんと化していました。
(momonga.vim #4 に行ってきた - 永遠に未完成)

効果・効能

やったことを並べるとかなり大したことないのですが、momonga.vimでは周りが全員vimmerです。
Twitterで「これどうすればいいのかな・・・」とか書くと、replyが即座に3つぐらい飛んできて大変便利です。(マサカリではない)

momonga.vimにおけるマサカリ

thincaさんとLindanさんが「進捗どうですか?」という名のマサカリを満面の笑みで投げていました。

終了後

晩御飯を食べつつカラオケに行きました。しかしそこはやはりvimmerです、全員ノートPCを開いて進捗を出し、合間に歌うという状態でした。


まとめ

前回より実用的な進捗が出て大変有意義でした。
次回のmomonga.vimは7/26(土)予定です。

wgetでhttpsに接続すると証明書エラー

ハマったので書いておきます。

環境

現象

$ wget https://bitbucket.org/ringo/hogehoge/downloads/hoge.tar.gz
--2013-12-05 19:27:59--  https://bitbucket.org/ringo/hogehoge/downloads/hoge.tar.gz
bitbucket.org をDNSに問いあわせています... 131.103.20.168, 131.103.20.167
bitbucket.org|131.103.20.168|:443 に接続しています... 接続しました。
エラー: bitbucket.org の証明書(発行者: `/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV CA-1')の検証に失敗しました:
  発行された証明書はまだ有効ではありません。
bitbucket.org に安全の確認をしないで接続するには、 `--no-check-certificate` を使ってください。

wgetのURL、上記例ではbitbucketですが、https接続だとどこに接続してもこんなエラーが出る状態。

    • no-check-certificateを使えばダウンロードは可能ですが、そもそもなぜこれが出るのだろう、というお話です。

解決に向けて

  • ca-certificatesパッケージのインストール

2007/04/18-06、wget、証明書の検証エラー - debian-etch に関するメモ(後、lennyへアップグレード)

  • crtファイルの有無

githubで証明書エラー(certification error)になったときの対応 : : まめしみ


上記2点を確認しましたが現象は変わらず。頭をひねりながらエラーメッセージを眺めていたところ、変なメッセージが目につきました。

発行された証明書はまだ有効ではありません。

「まだ」有効ではありません・・・?

$ date
2013年  12月   5日 木曜日 18:30:11 JST
$ date -s "2014/05/23 10:58"
2014年   5月  23日 金曜日 10:58:00 JST
$ wget https://bitbucket.org/ringo/hogehoge/downloads/hoge.tar.gz
--2014-05-23 10:58:03--  https://bitbucket.org/ringo/hogehoge/downloads/hoge.tar.gz
bitbucket.org をDNSに問いあわせています... 131.103.20.168, 131.103.20.167
bitbucket.org|131.103.20.168|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 FOUND

(中略)

`hoge.tar.gz'に保存中

100%[===============================================>] 1,401,247     573K/s 時間 2.4s

2014-05-23 10:58:07 (573 KB/s) - `hoge.tar.gz' へ保存完了 [1401247/1401247]

時間かよ!盲点すぎた。

結論

エラーメッセージを良く読もう。

2013

そらはさんの記事Looking back at 2013を見て良いなと思い、マネ|パクリ|オマージュしました。


以前2013年第1四半期を振り返るという記事を書いており、四半期ごとに書ければよいと思っていたのですが、私の人生で3ヶ月の期間にあえて言うようなイベントはそうそう起こるものではないらしく、結果この体たらくです。

At the statistics

5 posts

ブログに関してはほとんど書けていなくて、ひどいとしか言い様がない。しかしMathematicaで任意画像の輪郭を数式に変換する記事がはてブの400以上のブックマークを頂きました。これまで自分の記事がこんな事になったことがなく、伸びまくるブクマをみてそわそわしていました。
大学時代にMathematicaを使ってGUIプログラミングしたりTwitterにPostしたりしていたせいで学内で「Mathematicaのヘンな人」と言われてしまったことがありましたが、結局大学を出ても私が一番言及できる言語はC#でもPythonでもなくMathematicaであるらしいです。2014年も機会があればMathematicaネタを投下したいです。

5651 tweets

Twitterをヘビーに使用している方から見るととても少ないかもしれませんね。
Twilogを見ても分かる通り、毎日10~30postあたりで安定しています。また、Twilog Statsによるとつぶやいた日数: 1723日、つぶやかなかった日数: 9日ということで、ほぼ毎日何かしら書いているようです。無理なく続いているとも言えるでしょう。

26 conferences/events

思ったより行っててびっくりした。
半分ぐらいは会社で主催している分散システム本読書会です。タネンバウムのDistributed Systemsを輪読する会で、日本語訳書籍の翻訳がとにかくひどいと話題になりました。そういえばこの本もピアソン桐原のアレで絶版になってしまいましたね。
その他はHaskell系、u-aizu系、Twilio系などに参加していたようです。
Haskell, 2013年の前半ははまってProject Eulerも30~40題ぐらい解いたのですが、最近めっきりやってませんね。

44 books, 366 comics

本については読書メーターで管理しています。
小説は筒井康隆、漫画は押切蓮介にはまった一年です。漫画以外の読了書籍44冊のうち、半分ぐらいが筒井康隆です。活字苦手の私としては結構読めたほうだと思います。
割と厚い本も読めており、例としてはゲーデル、エッシャー、バッハマルドゥック・スクランブルソドムの百二十日あたりです。
特にゲーデルエッシャー、バッハをきちんと読み終えることができたのはよかったです。



文学部唯野教授 (岩波現代文庫―文芸)でろでろ(1) (ヤンマガKCデラックス)ゲーデル,エッシャー,バッハ―あるいは不思議の環マルドゥック・スクランブル〈改訂新版〉ソドムの百二十日


24 amazon orders

本と他の方へのプレゼントがほとんどです。今年自分のために買った大きな買い物といえばScanSnap iX500ぐらいでしょうか。たまに思いついて自炊しまくっています。疲れます。

87 CDs imported

だいたいTSUTAYAレンタルのせいでかなりの数になっています。
今年のマイベストはdieTunes Label Sampler 01 / YOJI IN THE MIXでした、もうすぐ売り切れると思うのでみなさん買いましょう。



5 club events

HONDALADY, m1dy, DE DE MOUSE, m1dy, HONDALADYという感じでした。
今年もm1dyライブ行きたいです。

Activity

所属する会社の規模が6人になりました。大変ミニマルな構成で快適にお仕事しています。
問題としては、事務の方を除くと、私と10歳以上年が離れたメンバーしかいないという点です。たまには同世代の人と話したいなあと寂しくなるので、誰かご飯とか誘ってください。

2014?

てきとーにやります。
あと、Vim活を始めるかもしれません。

FAX画像で学ぶMathematicaワンライナー画像処理

FAX Advent Calendar2日目の記事です。
FAXをやっていくということなので、Mathematicaで例の画像をいじり倒して見たいと思います。

画像の読み込み

まずはMathematicaで画像を読み込みます。

img = Import["https://dl.dropboxusercontent.com/u/330501/resource/lingr.com/fax.jpeg"]

f:id:aomori-ringo2:20131225020142p:plain

URLやローカルのパスを書くことで取り込むことができます。
このImport関数はMathematica ver.9の時点で177個の形式に対応しており、Mathematicaで扱える形に変換してくれます。BMPJPEGはもちろん、PDF, AVI, LaTeX, MIDI, Maya, 3ds, QuickTimeなどあらゆる方面の拡張子に対応しており、完全に頭がおかしい。

ヒストグラム

まずはさくっとヒストグラムを出しましょう。

ImageHistogram[img]

f:id:aomori-ringo2:20131225015855p:plain


オプションを与えることで別々に表示したりできます。

ImageHistogram[img, Appearance->"Separated"]

f:id:aomori-ringo2:20131225015911p:plain

画像の変換

Binarize[img]

二値化です。オプションにより閾値をいじったり、閾値を決定する手法を選択することもできます。
f:id:aomori-ringo2:20131225022208p:plain



ImageTransformation[img, Sqrt]

与えられた関数(この場合はSqrt)によって、画素の位置を変換します。
自己主張強い感じになりましたね。
f:id:aomori-ringo2:20131225021452p:plain



f[x_, y_] := 
  With[{r = N@Sqrt[(x - .5)^2 + (y - .5)^2], 
    a = ArcTan[x - .5, y - .5], R = .5}, rn = r*r/R;
   {rn*Cos[a] + .5, rn*Sin[a] + .5}];
ImageTransformation[img, f[#[[1]], #[[2]]] &]

少しがんばることで魚眼レンズのような効果も作れます。
f:id:aomori-ringo2:20131226005141p:plain



ImagePerspectiveTransformation[img, {{0.9, 0.1, 0}, {0.3, 0.9, -0.1}, {0, 0.1, 1}}]

アフィン変換とか言うやつです。
f:id:aomori-ringo2:20131225021356p:plain

フィルタ

数が多すぎるので、適当にいくつか紹介。

Erosion(収縮処理)

Erosion[img, 2]

f:id:aomori-ringo2:20131226020046p:plain

Dilation(膨張処理)

Dilation[img, 2]

f:id:aomori-ringo2:20131226020058p:plain

木炭デッサン効果

ImageEffect[img, "Charcoal"]

f:id:aomori-ringo2:20131226020111p:plain

ポスタリゼーション

ImageEffect[img, {"Posterization", 5}]

f:id:aomori-ringo2:20131226020124p:plain



その他にもClosing, Opening, ガウシアンフィルタ、中央値フィルタ、油絵効果、ソラリゼーション・・・などなどとにかくいっぱいあります。
こんな感じで画像処理を簡単に書けるわけです。

特徴抽出

EdgeDetect[img]

エッジ抽出です。抽出手法はデフォルトだとCannyが使用され、Sobel, ShenCastanを選択することもできます。
f:id:aomori-ringo2:20131226014021p:plain



Show[img, Graphics[{Thick, Yellow, Line/@ImageLines[EdgeDetect[img]]}]]

ImageLinesは線分を抽出する関数です。上記コードは、エッジ抽出した結果から線分をもとめ、それを元々の画像と重ねあわせて描画します。
パラメータを変えることにより、線分がとれすぎたりとれなさすぎたりします。
f:id:aomori-ringo2:20131226013113p:plain



この他に交差点抽出、特徴点抽出などの関数があります。

文字認識

TextRecognize[img, Language="Japanese"]

画像から文字を抽出します。ファックス画像からは残念ながら抽出できませんでした。もともと英語圏のソフトですから、縦書きには弱いようです。
横書きの日本語が含まれた画像でやってみましょう。
f:id:aomori-ringo2:20131225004044p:plain

イラスト部分からヘンなものまで読み取ってしまっていますが、「進捗どうですか」が取得できていることがわかりますね。


おまけ: キャプチャ

CurrentImage[]

CurrentImageと書くだけでWebカメラの画像を取り込むことができます。


CurrentImageで取得した画像はこれまでの画像と同じように扱えるため、画像処理をかけていくことができます。

EdgeDetect[CurrentImage[]]

エッジ抽出された私です。
f:id:aomori-ringo2:20131226021003p:plain




これをDynamicに渡すと画像ストリーム取り込みとなり、Webカメラの画像をリアルタイムで表示します。

Dynamic[CurrentImage[]]

実行すると、Mathematica上でWebカメラの映像が見えるようになります。楽です。

まとめ