haya14busa

haya14busa’s memo

Vim-Easymotionを拡張してカーソルを縦横無尽に楽々移動する

Vim Advent Calendar 2012の363日目の記事です。 昨日はthincaさんの本当にキモい Vim script – . 演算子編 – 永遠に未完成でした。

あと3日でVAC2013になるということですが、いまさらVAC2012の99人目として記事を書いてみたいと思います。

僕は今年の1月か、2月あたりからVimを使い始めたので、自分のVim歴よりも前に始まったAdvent Calendarに参加すると思うと歴史を感じます。すごい。

Vimで最初に習うのはhjklによるカーソル移動です。
その後w,bなどたくさんの移動コマンドを覚えると思います。
またVimを使っているとき、その7,8割はカーソル移動してるんじゃないでしょうか???
カーソル移動大事。

ということでカーソル移動系プラグインであるvim-easymotionの話をします。

vim-easymotionとは

任意の場所や単語の先頭などをハイライト&アルファベットなどの候補キーを出して、その行きたい場所のキーを押すことによってその場所にジャンプするプラグインです。今回、これを一から作ったというわけではなく、フォークして便利にしたという話とおすすめの使い方書くよという話です。その辺よろしくお願いします。

easymotion_demo

もっとvim-easymotionしよう

Github: haya14busa/vim-easymotion

Install

NeoBundle 'haya14busa/vim-easymotion'

本家: Lokaltog/vim-easymotion

なるべく本家Easymotionからの移行時にびっくりしないよう、新規機能は基本的にデフォルトでオフになっていて、オンなのは候補の2キー表示と双方向サーチである<Leader>sの追加、バグフィックスあたりだけなのでぜひ気軽に試してフィードバックorプルリクください。

以下面倒なのでデフォルトのprefixキーである<Leader><Leader><Leader>に変更しているとして解説します。(特に機能名がないので機能をMappingで表したりします)

:h easymotion-default-mapping

よくわかる拡張機能

  • 最初から候補画面で2キー表示する!
  • fやFの双方向バージョンが追加され、画面内ならどこでも飛べる!(<Leader>s)
  • Smartcase機能でもっと楽々移動!
  • 1文字migemo実装で日本語でもeasymotion!
  • その他もろもろ
  • バグフィックス
    • マルチバイトバグ
    • バッファ名バグ(今までuniteやref-vimでバグってました)
    • その他いろいろ

最初から2キー表示する!

おそらくVim-Easymotionを使ったことがある人であれば必ず思うであろう、

「2回キー押すとき面倒くさい…」

これが改善されています。2回以上押さなければならない場合は最初から2つ分表示されてストレス90%減です(当社比)

easymotion_two_key_combo

双方向サーチでカーソル位置を気にせず使う

これも使ったことがある人なら面倒くさいと思ったことがあるんじゃないでしょうか?

<Leader>f<Leader>Fのどっち使うか決めるの面倒くさい。

飛びたい場所が現在位置の上下近くだったりすると意外とめんどくさくて脳のリソース消費します。これが<Leader>sで双方向サーチするという新機能で解決です。また、ひとつのマッピングでほぼすべての移動を補えるようになるところが見逃せないポイント。

Smartcaseでもっと楽々移動したい!

正直Shift押すのも面倒くさい。

vimrc

" smartcase
let g:EasyMotion_smartcase = 1

上記の設定で<Leader>svvimにもVimにもマッチして移動できます。楽。勿論smartcaseなので<Leader>sVだとVimだけにマッチします。

1文字migemo実装で日本語でもeasymotion!

migemo一回使ってみたら、日本語移動でかなり便利だったのでeasymotionでも実装したいなーと思っていました。そこで探してみると、rhysd/clever-f.vimですでに擬似migemo実装されてる事案があったのでclever-fの作者であるLindanさんに許可とってパク…参考にして実装しました。

cmigemoなしでも動きます。

vimrc

let g:EasyMotion_use_migemo = 1

Vimで日本語書くときになかなかいいです。

注意事項として候補が多すぎたりスペック低かったりすると、ちょっと遅くてイラッとするかもしれません…もうちょっと改善したい。ちなみに<Leader>wなど単語移動モーション使うと必ずしも行きたい場所には行けませんが移動はかなりサクッと行きます。

easymotion_demo

だいたい主な拡張機能はこんな感じです。

以下元からあった機能も適当に解説しながらなんやかんやしていきます。

Find Motion

新機能である<Leader>s<Leader>fなどがこのFind Motionに当たります

  • s{char}
    • 新機能: 画面内すべてを対象として{char}にマッチ
  • f{char}
    • カーソルより右側を対象として{char}にマッチ
  • F{char}
    • カーソルより左側を対象として{char}にマッチ
  • t{char}
    • カーソルより右側を対象として{char}の1文字手前にマッチ
  • T{char}
    • カーソルより左側を対象として{char}の1文字後にマッチ

おそらく基本的に使うのは<Leader>s{char}で、オペレーション待機モードで<Leader>t{char},<Leader>T{char}使うかもといった感じです。

おすすめは<Leader>s{char}が便利すぎるので、sキーをマップしてs{char}で動作するようにするとたった3(or4)キー(s{char}{target})で任意の場所に一瞬で移動できるので非常に捗ります。

vimrc

" もっともよく使うであろう'<Leadr><Leader>s'motion を`s`に割り当てます"
nmap s <Plug>(easymotion-s)
vmap s <Plug>(easymotion-s)
omap z <Plug>(easymotion-s) " surround.vimとかぶるので`z`

Word Motion

  • w
    • カーソルより右側の単語(word)の先頭にマッチ
  • W
    • カーソルより右側の単語(WORD)の先頭にマッチ
  • b
    • カーソルより左側の単語(word)の先頭にマッチ
  • B
    • カーソルより左側の単語(WORD)の先頭にマッチ
  • e
    • カーソルより右側の単語(word)の後ろにマッチ
  • E
    • カーソルより右側の単語(WORD)の後ろにマッチ
  • ge
    • カーソルより左側の単語(word)の後ろにマッチ
  • gE
    • カーソルより左側の単語(WORD)の後ろにマッチ
  • S
    • 新機能: 画面内すべてを対象として単語の先頭にマッチ

好みによりますが、Findモーションよりも移動したいのは基本単語の先頭だし、Wordモーションのほうが好きという方もいると思います。こちらのほうがキー入力が抑えられます。

またもう一つの優位点としてターゲットとして入力できない単語の移動(日本語など)で使えます。

あと堂々とSと書いてありますが、挙動を変えて単語の先頭、後ろ、その他いい感じの場所にマッチさせて、なるべくどこでも移動できるという挙動に変えるかもしれません…すいません。(本家easymotionのissueでjump-to-anywareみたいなものがあったのでそれを意識。)

Search Motion

  • n
    • カーソルより右側の検索結果にマッチ
  • N
    • カーソルより左側の検索結果にマッチ

意外と使われてないんじゃないかと思われる検索結果にマッチする機能です。/vim<CR>などしてから<Leader>nor<Leader>Nを押すと検索結果がハイライトされて移動できます。

検索してからマッチするところが多すぎてn連打つらい!というのが解消できます。僕はあまり使っていませんが

JK Motion (行移動)

個人的に<Leader>sの次に気に入っているのが、Easymotion#JKモーションという行移動機能です。

もう一度言います。JK Motionです!

<Leader>jでカーソルより下の行、<Leader>kで上の行に飛べます。だいたいこれくらいかなーと適当に10jしてから違ってたら調節というわずわらしさとはおさらばです。

また個人的に、UniteやVimfiler、Gundo、Gitvなどなどの行によって何かしら行うUIを持つPluginとJKモーションの親和性が高くておすすめです。

Vimfilerでeasymotion easymotion-vimfiler

ちなみにVimのset relativenumberを使うとデフォルトでも似たようなことができます。

参考: ‘set relativenumber’ で Vim のカーソルの縦移動とかを改善する – 反省はしても後悔はしない

こちらだとデフォルトで使用できるのが強みですが、数字がアルファベットよりも打ちにくいこと、各種プラグインで行番号が表示されていない時に役に立たないのが少し痛いですね。そんなときでも使えるJKモーション。おすすめです。

それと、JK Motionはデフォルトでは行の先頭に移動するのですが、カラムが同じ位置に飛ぶようになるオプションがつきました。(よりデフォルトのj,kの挙動に近づきます)

vimrc

let g:EasyMotion_startofline=0

<C-v>の矩形選択時などにこの設定をしておくと幸せになります

Example: keep_cursor_motion

まとめvimrcの例

NeoBundle ‘haya14busa/vim-easymotion’

“ vim-eazymotion ” デフォルトだと<Leader><Leader>となってるprefixキーを変更 let g:EasyMotion_leader_key = ‘;’

“ 候補選択: 候補が最初から2キー表示されるので大文字や打ちにくい文字は全面的に消す ” なお、最後の数文字が2キーの時の最初のキーになるので打ちやすいものを選ぶとよさそうです。 let g:EasyMotion_keys=‘hklyuiopnm,qwertzxcvbasdgjf;’

“ 拡張版機能

“ もっともよく使うであろう'<Leadr><Leader>s'motion をsに割り当て nmap s <Plug>(easymotion-s) vmap s <Plug>(easymotion-s) omap z <Plug>(easymotion-s) ” surround.vimとかぶるのでz

“ keep cursor column let g:EasyMotion_startofline = 0

“ smartcase let g:EasyMotion_smartcase = 1

“ Migemo let g:EasyMotion_use_migemo = 1

雑感

まとめると、キーマップすれば s{char}{target}の3キーで任意の場所に飛べる ので捗っておすすめってことです。おそらく、他のプラグインとしても画面内全体を対象として、この数のキーで移動できるのはほぼ最小じゃないでしょうか。

ujihisa.vim#3のderisさんのスライドHow to move cursor more effectively(for Beginner):h motion.txtを読んでるとたくさん移動コマンドがありすぎて正直考えるの面倒です。これを画面内移動だけでも一つに集約できるとかなり楽な感じがしませんか?

ただ、勿論easymotion好きじゃないって人もいて欠点として

  1. {target}がVimから提示されるのを待つしかない
    • (思考の流れを止めてしまう)
  2. デフォルトのVimモーションの挙動と全然違う
    • clever-fやvim-sneakはデフォルトの挙動を拡張してるという感が強い
  3. リピートめんどい
    • そもそもリピートせずに飛ぶというのがコンセプトですが
  4. 近くに移動する場合に近い割にキー入力多くて特にめんどくさい

この辺が考えられます。他のプラグインと併用するなどして自分にあったカーソル移動を考えるとよさそうです。

そしてこのフォークしたeasymotion,実はまだまだ改善途中といったところで、Vim Scriptアンチパターンのようなものに当てはまっている部分もほとんど直せてません。すいません。ぜひぜひ、アドバイスとプルリクお待ちしています。みんなでカーソル移動を考えましょう。

VAC2012

明日のVim Advent Calendar 2012の364日目の記事を新規の人が書くと100人目のようです。興味ある方はぜひ書くとみなさん喜ぶと思います。

VimConf2013に参加してきました!

VimConf2013!

VimConf2013に参加してきました!Vim!

How to suggest new features for Vim (by @kaoriya さん)

Vim本体に取り込まれるためにはどうやってpatchを投げればいいかという話だったけど、Vimに留まらずいろんなところで応用が効く話だった。ただ便利じゃん、といった思いつきでなく、しっかりストーリーを組み立てるのが大事。

  1. Strategyを組み立て
  2. Problemを共有してきちんと理解してもらい
  3. シンプルなSolutionを作って
  4. やっとPatchを書く

最近vim-devの1日のabbrev.版のメールを読んだり(読まなかったり)してるのだけど、まさにvim-devのVimのパッチはProblemが何かから始まり、そしてそのSolutionについての文章が続き、その後にPatchの内容が続くという流れになっている。パッチを受け入れられるために、その流れに従うというある意味当たり前のことをちゃんと意識して、実践することが大事。

Vimはテキストエディタ(再確認)なのでエディタに要らない機能は取り込まれないし、Vimの思想(:h development)を理解することが大事とあとの発表で@k_takataさんもおっしゃっていた。

ところで、@k_takataさんはHow to write patchという話で、どちらかといえば具体的・実践的な話だとしたら、@koronさんの話は抽象的・理論的なHow to suggestという話だったので、同じPatchの話でもそれぞれ非常におもしろかった。

Evil is justice (by @esehara さん)

VimConf2013はインターナショナルなVimカンファレンスを志向するためにスライドは英語推奨だったりしたのだけれど、@eseharaさんのプレゼンは特にインターナショナルだった(エディタ間で)。Vim国とEmacs国の宗教戦争をEvilで終わらせるべく参上したという感じで、ネタを交えつつEmacsでVimのキーバインドを使えるEvilを紹介してくださって、おもしろい発表だった。

Emacsで小指云々は親指Ctrlや特殊な配列のキーボードで解消できるらしい(by @kiwanamiさん)。VimでもCtrlは重要なキーなので親指Ctrlそのうちやってみたい。

How to use git from vim @vim conf2013(by @cohama さん)

個人的にGitをVimから便利に使おうとして、何度も挫折して、結局tmuxの別ペインでGitという選択肢を使っていたので、発表前から気になる内容だった。

VimデフォルトのGitの機能が思ったよりも高機能。:DiffGitCache, K etc…

Pluginではvim-fugitive, vim-gitvを紹介されていて、特に:Gdiffgit add -pのようにインテラクティブにaddできたりするのvim-fugitive入れてるのに全然しらなくてちゃんとドキュメント含め読んどこうと思った。

またAdvancedとしてgitのSHA-1 hashを使えば自由自在にBranchきったりいろんなことができて便利なのでキーマップとか定義して便利そうだった。

関係ないけど

git stashとかせず、ReadOnlyでいいから別ブランチやコミットのコードを参照したいってとき結構あるんだけれどどうすればいいかわからないので、誰か教えてください:-)

あと紹介はされてなかったけど、最近git mergetoolをvimdiffで便利にするとなかなかにbenriだったので感動しました。 git mergetoolでvimdiffを便利に使う » haya14busa

Vital.ProcessManager (by @ujihisa さん)

vimprocのwrapperとなる(?)Vital.ProcessManagerの話。正直内容についてはVim力低すぎてよく理解できなかった…勉強しよう

途中で全く別の発表を始めて間を開けたり、周りの人に質問(確認)投げかけながら会場全体を巻き込んでプレゼンしていてujihisaさんの発表力を感じて感極まった。

Do You Know about Vim Runtime Files?(by @Linda_pp さん)

Vimがデフォルトで提供されてる機能をいろいろ紹介して下さった。正直matchit以外知らなかったと言っても過言じゃないくらいなので、発見が多くておもしろかった。

maze.vimや、hanoiの塔, Lifeゲームなど遊び心もあってそのへんのコード読んでみたい。

How to write patches for Vim(by @k_takata さん)

自称Vim Beginner(年間採用パッチ数75)のパッチ職人、@k_takataさんの発表はその経験を活かしてどのようにVimのパッチを書くかということを実践的・具体的に話していてパッチ職人の世界を垣間見れる興味深い話だった。

お気に入りのパッチとして最近マージされたspelllang-cjkやbreakindentについて紹介をしていた。お気に入りのパッチとか言ってみたい。

LT

iVimConf(by @dictav さん)

VimConfのiPhoneアプリ、iVimConfを作ったというお話。Lingrで話題になってから試作するまでめっちゃはやくてすごい。

duzzle.vim(by @deris さん)

Portalに触発されて作ったというVimでできる迷路パズルのお話。Demoを見ていると面白そうだし、確かにカーソル移動の勉強になりそうでよさそうだった。

Emacsの紹介(by @kiwanami さん)

タイトルがとってもストレート。Emacsの方とも仲良くしたい。

About of neocomplete(by @Shougo さん)

暗黒美夢王さんからのneocompleteについての話。初っ端からダークビムマスターが覚醒してネタを交えて会場を沸かせながらも、しっかりneocompleteを中心として補完やif_luaの効率などためになる話をしていて聞いてて飽きない発表だった。if_luaはかわいい。

そして暗黒美夢王の真髄は懇親会で遺憾なく発揮され、4曲もVim曲を聞くことができて感極まりました。鋼のメンタルは伊達じゃなかった。

まとめとか

VimConf2013最高でした!次の機会があったらただ参加するだけでなく、ぜひ発表したりしたいと思った。

主催のujihisaさん、VimConf2013運営の方々、Vim熱をひしひしと感じるカンファレンスでした。
会場を提供して下さったCOOKPADの方々、無限コーヒーめっちゃ美味しくて3杯くらい飲みました。おいしい。
発表者の方々、どの発表も面白くて勉強になりました。お疲れ様です!
参加者の方々、Vimmerがこんなに集まってVimについてわいわいがやがやできて感極まりました。

みなさん本当にお疲れ様でした && ありがとうございました!

:wqa!

他の人の感想記事

発表資料

数学ガールフェルマーの最終定理読んだメモ

Web連載『数学ガールの秘密ノート』

プロローグ

「整数は神の作ったものだが、他は人間の作ったものである」(Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk.)

レオポルト・クロネッカー – Wikipedia

無限の宇宙を手に乗せて

時計の巡回

「ではみなさんは、そういうふうに川だと云われたり、乳の流れたあとだと云われたりしていたこのぼんやりと白いものがほんとうは何かご承知ですか。」

宮沢賢治 銀河鉄道の夜

ピタゴラスの定理

pytagorean_proof_by_gif

Card: Tetra

  1. <<例示は理解の試金石>>
    • 具体的に探してみる
  2. 偶奇を調べる(パリティチェック)
    1. a,bが偶数の原始ピタゴラス数は存在するか
    2. a,bが奇数は?
    3. c2は4の倍数
    4. 背理法
  3. <<和の形>>から<<積の形>>へ
    1.  <<整数の構造は、素因数が示す>>
    2. b2 = (c-a)(c+a)とa,b,cの偶奇を組み合わせる
  4. 互いに素
    1. <<わかりきっていることでも、きちんとまとめるのがいいんだよ>>
    2. a,c,b、A,B,Cについて互いに素であるか?
    3. aを奇数として
    4. 2A = c – a
    5. 2B = b
    6. 2C = c + a
    7. Pattern: 互いに素の証明は、背理法で同じ倍数になるという矛盾を導く
  5. 素因数分解
    • 素因数分解の一意性 -> A,Cは平方数
  6. 原子ピタゴラス数の一般形

    • 無数にある素数から無数の原子ピタゴラス数を作り上げる
  7. <<偶奇を調べる>>

  8. <<整数の構造は、素因数が示す>>
  9. <<積の形>>
  10. <<互いに素>>

Card: Milka

  1. <<有理点が無数にある>>という命題は、方程式x^2 + y^2 = 1が<<無数の有理数解を持つ>>という命題と同値
  2. P(-1,0)を通り、傾きがtの直線l: y = tx + tと単位円x^2+y^2=1のもう一つの交点Qをtで表す
  3. 点Tがy軸上の有理点ならば、点Qも有理点になる

原始ピタゴラス数の問題との関連

ピタゴラスの定理を変形

a^2 + b^2 = c^2
(a/c)^2 + (b/c)^2 = 1 -> 単位円

<<有理数の構造は、整数の比が示す>>

<<原始ピタゴラス数が無数にある>>と<<単位円周上に有理点が無数にある>>は同値

Link

互いに素

自然数a,bの最大公約数をM、最小公倍数をLで表すと、このとき

a \* b = M \* L

が成り立つ

  • a * b : <<aの素因数すべて>>と<<\bの素因数すべて>>
  • M * L :   – M : <<aとbでだぶっている素因数すべて>>   – L : <<aとbでだぶりを除いた素因数すべて>>

素数指数表現

n = 2^n_2 \* 3^n_3 \* 5^n_5 ....
  = <n_2, n_3, n_5, ....>
  • 無限次元のベクトルとみなして考えることができる
    • 互いに素のとき、ベクトルが直交する
  • mとnが互いに素のとき m⊥nと表す

背理法

矛盾
Pを命題とする。 矛盾とは、<<\Pである>>と<<\Pでない>>の両方が成り立つこと

√2が有理数でないことを、背理法以外に素因数の個数のパリティで証明できる

<<素因数分解の一意性により、素因数の個数は、素因数ごとに両辺で一致する>>

砕ける素数

1次元から2次元への飛躍

<<二乗して-1になる数>>を幾何の目で見るなら、
二回行うと-1になる拡大・回転は何か?

(-1) * (-1) = 1は-1の偏角180度を二倍することに相当する -> 360度の回転

回れ右を二回行えば元の向きに戻る

代数 <-> 幾何 複素数全体の集合 <-> 複素平面 複素数a+bi <-> 複素平面上の点(a,b) 複素数の集合 <-> 複素平面上の図形 複素数の数 <-> 平行四辺形の対角線 複素数の積 <-> 絶対値の積、偏角の和(拡大・回転)

格子点

鳩の巣原理
n個の鳩ノ巣にn+1羽の鳩が入ったら、
少なくとも1個の巣には、2羽の鳩がいる。
ただし、nは自然数とする。

砕ける素数

砕ける素数を4で割った余りは3にならない。

p = (a + bi)(a - bi)

pを奇数の素数にすると、

p = (a + bi)(a - bi) <-> pを4で割ると余りは1

アーベル郡の涙

素数 (Prime number)の全体、射影空間など

自然数 (Natural number)の全体

整数 (独: Zahlen)の全体

有理数 (Quotient)の全体

実数 (Real number)の全体

複素数 (Complex number)の全体

四元数 (Hamilton number)の全体

数学記号の表 – Wikipedia

集合に対して演算を入れる

集合Gに対して、演算☆が定義されるとは、集合Gのどんな要素a,bに対しても、

a ☆ b ∈ G

が成り立つということ。これを<<演算☆に関して集合Gは閉じている>>と呼ぶ

  • a ∈ G
    • aはGの要素である
    • a is an element of G
    • a belongs to G
    • a is in G
  • G -> Group

結合法則

(a ☆ b) ☆ c = a ☆ (b ☆ c)
単位元の定義(単位元eの公理)

集合Gの任意の要素aに対して、以下の式を満たす集合Gの要素eを、演算☆における単位元と呼ぶ。

a ☆ e = e ☆ a = a

<<公理が定義を生み出している>>
最も厳密な言葉である数式を使い、公理という名の命題を使って定義する
逆元の定義(逆元の公理)
aを集合Gの要素とし、eを単位元とする。aに対して、以下の式を満たすb∈Gを、演算☆に関するaの逆元と呼ぶ。 ~~~ a ☆ b = b ☆ a = e ~~~

郡の定義(郡の公理)

以下の公理を満たす集合Gをと呼ぶ。

  • 演算☆に関して閉じている
  • 任意の元に対して、結合法則が成り立つ。
  • 単位元が存在する。
  • 任意の元に対して、その元に対する逆元が存在する。

かくのごとき集合をと呼べ

<<例示は理解の試金石>>

  • <<整数全体の集合Ζは、演算+に関して郡をなすか?>>
  • <<奇数全体の集合Ζは、演算+に関して郡をなすか?>>
  • <<偶数全体の集合Ζは、演算+に関して郡をなすか?>>
  • <<整数全体の集合Ζは、演算×に関して郡をなすか?>>

  • 最小の郡
    • {e}
  • 要素が2個の群
    • {e,a}

演算表

|☆ | e a|
|---+----|
|e  | e a|
|a  | a e|
  • <<同じ>>郡のことを<<同型>>な郡と呼ぶ
  • <<要素が二つの郡は本質的に一つ>>
    • 公理によって与えられる制約が構造を生み出している

アーベル群

交換法則

a ☆ b = b ☆ a

<<無矛盾性は存在の礎>>

ヘアスタイルを法として

modの定義(整数)

a,b,q,rは整数で、b≠0とする

a mod b = r ⇔ a = bq + r (0 ≤r < |b|)

合同(congruent modulo)

a ≡ b (mod m) ⇔ a mod m = b mod m ⇔ (a-b) mod m = 0

郡・環・体

環の定義(環の公理)
以下の公理を満たす集合をとよぶ
  • 演算+(加法)に関して
    • 閉じている
    • 単位元が存在する(0と呼ぶ)
    • すべての要素について結合法則が成り立つ
    • すべての要素について交換法則が成り立つ
    • すべての要素について逆元が存在する
  • 演算×(乗法)に関して
    • 閉じている
    • 単位元が存在する(1と呼ぶ)
    • すべての要素について結合法則が成り立つ
    • すべての要素について交換法則が成り立つ
  • 演算+と×に関して
    • すべての要素について分配法則が成り立つ

厳密に言えば乗法の単位元が存在する可換環を述べている

  • 環と郡
    • 環は、加法に関してアーベル群である。
    • 環は、乗法に関してアーベル郡とは限らない。

整数環と剰余環

体の定義(体の公理)
環の定義プラス、演算×に関して0以外のすべての要素について逆元が存在する

剰余環Ζ/mΖは、mが素数のとき体になる

pを素数とし、剰余環Ζ/mΖを体と見なすとき、それを有限体F_pと呼ぶ

F_p = Ζ/pΖ

合同を使って<<無限を折りたたむ>>

無限降下法

次の方程式は、n ≥3で自然数解を持たない。

x^n + y^n = z^n

私は驚くべき証明を見つけたが、
それを書き記すには、この余白は狭すぎる。

FLT -> Fermat’s Last Theorem

Card: Tetra

三辺が自然数で面積が平方数である直角三角形は存在するか。

無限降下法
  1. 自然数に関する数式を作る。
  2. その数式を操作して、同じ形をした別の数式を作る
    • このとき、小さくなる自然数を含む
  3. 同じ操作を繰り返すと自然数が無限に小さくなる -> 矛盾

Card: Milka

FLT(4)の証明

Card: Tetraの解答を使って矛盾を示す

最も美しい数式

Euler’s identity

e^iπ = -1

Euler’s formula

e^iθ = cosθ + isinθ

最も美しい数式

“Is the term ‘well-defines’ well defined?”

  1. 指数を指数法則を満たすものと定義
    • 自然数以外への拡張
  2. exを冪級数で表す
  3. テイラー展開
  4. テイラー展開の結果をexと定義
    • 複素数への拡張
  5. eiθを<<大胆な代入>>
  6. cosθとsinθのテイラー展開の結果と比較する

フェルマーの最終定理

JavaScriptでグローバル領域を汚染しているプロパティを見つけるブックマークレット

JavaScript でグローバル領域を汚染しているプロパティを見つける – Null.ly

上記記事のコードをブックマークレット化しました。おもしろい!

元記事のコードはこちら -> javascript global leak detector

jsGlobalLeakDetector

jsGlobalLeakDetector

上記リンクをブックマークバーにドラックなどして登録して好きなサイトで実行してください。

iOS登録用: jsGlobalLeakDetector

上記リンクをクリックしてから、ページをブックマークして、?以前の文字を消去してください。

手軽に見れて楽しい。

Google,Amazon,楽天,Twitter,自分のサイト,クッキークリッカーなどなど試してみると面白いかも?

(クッキークリッカーはJavaScriptでチート出来るっていっても基本Global領域の関数使わずにGame.なんちゃらでアクセスするはずなのであんまり面白くなかった。)

コード

// https://gist.github.com/nulltask/7412711#file-index-js
javascript:(function() {

var leak = []; var iframe = document.createElement(‘iframe’);

iframe.style = ‘display: none;’; document.body.appendChild(iframe);

var window = iframe.contentWindow;

for (var p in this) { if (void 0 === window[p]) leak.push(p); }

document.body.removeChild(iframe);

alert(leak);

}).call(this);

見たらわかるけど無圧縮版で既存のコードをブックマークレットで楽に使えるようにしただけです。(冒頭のリンクは圧縮してます)

一応GitHubにもあげてて変更もあるかも知れないのでGitHubリンク↓

misc/JavaScript/detect-global-properties.js at master · haya14busa/misc

iframeってこんな使い方があるんですね。iframe作って、display:none;してごにょごにょしてremoveしてる。

発見だ。

全く関係ないけど、iframeを普通に使ったブックマークレットの例↓

Aggressive Engineer: 便利ブックマークレット その12: Iframeで外部ページを表示させる

クリックで消す動作とかちゃんと実装すれば面白そう。サイトにiframe埋め込むなんてしたら今じゃプギャーされるはずだけど、ブックマークレットとして使うなら問題ないよね♡

Vimのhelpをブラウザで見るときのためのブックマークレット作った

Vimのhelpをブラウザで見るときのためのブックマークレット作った

vimdoc便利

haya14busa/vimdoc-marklet

  1. vimdoc@en
  2. vimdoc@ja
  3. vimdoc-en-to-ja

リンクをドラックするなどしてブックマークに登録してください。

iOS用

  1. vimdoc@en
  2. vimdoc@ja
  3. vimdoc-en-to-ja

iOSなど直接登録できない場合はリンク先をブックマークして”?”以前を削除してください。

つかいかた

vimdoc@enとvimdoc@jaは実行してプロンプトに検索文字列を入力するか、事前に検索したい文字列を選択してから実行するとその文字列を検索文字列として検索します。

vimdoc-en-to-jaはsourceforgeの英語版vimdocを読んでる時に実行すると日本語版の同一のhelpを新規タブで開きます。日->英も対応してます。

It’s so benri

ブラウザでもvimのhelpみれて便利。vim記事を見る時やvim記事を書くときにhelpへのリンク貼りたいな〜ってときに使えそうです。

vimdoc@jaの方が構成が見やすくていいけど、検索は英語版のsourceforgeの方が自前で検索対応していて(日本語版はGoogleカスタム検索)検索精度はvimdoc@enのほうが良さげ。

vimdoc@enを最初に使って、日本語版はvimdoc-en-to-jaを使って開くなどするとスムーズかもしれない。

Link