haya14busa

haya14busa’s memo

[Vim]strdisplaywidth({expr}[, {col}])のcolがよくわかってなかった

strdisplaywidthのhelpよくわからん

{col}が何を指しているのか、どういう作用を及ぼすのかhelp読んでもいまいちわかりずらく実際に調べてみました。

準備

set noexpandtab
set softtabstop=8
set shiftwidth=8
set tabstop=8

結果の見方の説明

. -> col_numをドット(.)で擬似的に表す .から:まで -> TAB文字 :の次 -> :echo strdisplay("\t", {col})の結果

結果

<br />        :8
.       :7
..      :6
...     :5
....    :4
.....   :3
......  :2
....... :1
........        :8
.........       :7
..........      :6
...........     :5
............    :4
.............   :3
..............  :2
............... :1
................        :8
.................       :7
..................      :6
...................     :5
....................    :4
.....................   :3
......................  :2
....................... :1

colを指定しない別の結果

:echo strdisplaywidth("\t") -> 8
:echo strdisplaywidth(".\t") -> 8
:echo strdisplaywidth("..\t") -> 8
:echo strdisplaywidth("...\t") -> 8
:echo strdisplaywidth("....\t") -> 8
:echo strdisplaywidth(".....\t") -> 8
:echo strdisplaywidth("......\t") -> 8
:echo strdisplaywidth(".......\t") -> 8
:echo strdisplaywidth("........\t") -> 16

つまり…?

strdisplaywidth({expr}[, {col}])のcolは{expr}の{col}文字目以降を返すという意味ではなく、スタートするスクリーン上のカラムの位置を表す。

完全にTAB文字専用の引数って感じでした。

Helpに書いてあることがイメージできなかったっぽいのでHelp解読力あげたい。

vimdoc

strdisplaywidth({expr}[, {col}]) strdisplaywidth()
The result is a Number, which is the number of display cells
String {expr} occupies on the screen.
When {col} is omitted zero is used. Otherwise it is the
screen column where to start. This matters for Tab
characters.
The option settings of the current window are used. This
matters for anything that’s displayed differently, such as
‘tabstop’ and ‘display’.
When {expr} contains characters with East Asian Width Class
Ambiguous, this function’s return value depends on ‘ambiwidth’.
Also see |strlen()|, |strwidth()| and |strchars()|.

:h strdisplaywidth()

vimdoc-ja

strdisplaywidth({expr}[, {col}])                        strdisplaywidth()
                文字列 {expr} のスクリーン上での表示セル幅を返す。
                {col} が省略されたときはゼロが使われる。{col} には計算を開始す
                るスクリーン上の列の位置を指定する。これはタブ文字の幅の計算に
                影響する。
                計算にはカレントウィンドウのオプションが使用される。’tabstop’
                や ’display’ のような表示を変更するようなオプションが影響す
                る。
                {expr} に幅が曖昧 (Ambiguous) な東アジアの文字が含まれていると
                きは、文字幅は ’ambiwidth’ の設定に依存する。
                |strlen()|, |strwidth()|, |strchars()| も参照。

:h strdisplaywidth@ja

Git Mergetoolでvimdiffを便利に使う

Mergeしんどい

今までConflict起きたら直接コンフリクトしたファイルを編集して完全手動で直してたんですが、mergetoolの存在とかvimdiffとかで出来そうと思って調べました。

Gitの設定

git config –global merge.tool vimdiff
git config –global mergetool.prompt false
git config –global mergetool.keepBackup false

git config --global merge.conflictstyle diff3も紹介されていたけど共通祖先を表示する必要性を感じなかったので無視した。

promptをfalseにすることでmergetoolした時のpromptを省略して編集を始めるようにし、keepBackupをfalseにすることでmergetoolがデフォルトでは自動的に生成する*.origファイルを生成しないように出来る。

Vimの設定

“ Mapping for vimdiff
” for git mergetool
if &diff
  map <Leader>1 :diffget LOCAL<CR>
  map <Leader>2 :diffget BASE<CR>
  map <Leader>3 :diffget REMOTE<CR>
  map <Leader>u :<C-u>diffupdate<CR>
  map u u:<C-u>diffupdate<CR>
endif

左から1,2,3って覚え方でよさそう。Local,Base,Remoteの頭文字とかでもKeymapに余裕があるならよさそう。

一度diffgetしたあとUndoするとdiffがうまく効かないのでuにdiffupdateを噛ませてる

]c,[cで次/前のConflict箇所にジャンプするので気に入らなければお好みでキーマップ書くとよさげかも。

終了時には:wqa or :qaあたりを使うのでこれもキーマップしたほうがストレス減るかも知れない。

vimdiff or vimdiff2 or vimdiff3?

$ git config –global mergetool.gvimdiff3.cmd ‘gvim -f -d -c “wincmd J” “$MERGED” “$LOCAL” “$BASE” “$REMOTE”’
$ git config –global mergetool.vimdiff3.cmd ‘vim -f -d -c “wincmd J” “$MERGED” “$LOCAL” “$BASE” “$REMOTE”’

toofishes.net - Three-way merging for git using vim

git config --global merge.tool [toolname]で設定

最初はvimdiff3の記事を見つけてやってみたんだけど、共通祖先がない場合にBASEがないだけでなく、diffの挙動がちょっとおかしい。
おそらく存在しないBASEと比較してしまうのでファイル全体がdiff1つ分の対象となってしまっている。

git/mergetools/vimdiff at master · git/git

そこで調べてみるとそもそもデフォルトで提供されているvimdiffが3-way mergingに対応してるっぽい。どっかのタイミングで受け入れられたのかな?

そちらを試してみると、共通祖先(BASE)がある場合は3-way(3-column and MERGE)になって、共通祖先がない場合は2-way view(3-column LOCAL, MERGED, REMOTE)として正しく表示される。

場合によってUIが変わってしまうのは良くないとはいえ、正しくdiffれることが優先なのでvimdiffを標準で使うことにした。

$ git config --global merge.tool vimdiff

MERGED、つまりコンフリクトを解消する実際に扱ってるファイル(バッファ)を2-wayの時でも下の段に持って行きたい場合は<C-w>Jで出来る。(自動化するためにラッパー書きました↓)

vimdiff2は強制的に2-wayにするっぽいのでとりあえず却下。

vimdiffのwrapper書こう

vimdiffのUIが3column(中心がMerged)だったり、3column(LOCAL, BASE, REMOTE) + Marged でBaseの有無で変わってしまうのはどうかと思うので対応したかった。

haya14busa/git-mergetool-vimdiff-wrapper

シェルスクリプトよくわかんなくてつらい。 引数で渡されたBASEをtest -sで調べて条件分岐させてます。

必ず実際に作業するMERGEDペインが一番下に来るのでよさげ

git-merge-sandbox

haya14busa/git-merge-sandbox

調べている間にeiel/git-merge-sandboxを見つけて便利だった(& 若干の不満があった)ので自分でも作ってみた。

wrapperの(完全手動)テストもこれを使った

変更点

  1. Merge後にコミットしてしまっても動く
  2. BASE(共通祖先のファイル?)の有無でdiffの種類が2つに分かれている

Git tag

ちょうどgitのtagを使えてないなーと思っていたのでtagを使う練習にもなってよかった。

$ git tag -a [tagname] -m'Comment' (checusum)
$ git push origin –tags

Link

Vimでマルチバイト文字を座標によって一括置換したときにハマらないようにするメモ

Vimでマルチバイト文字を座標によって一括置換したときにハマらないようにするメモ

Vim-easymotionのマルチバイト文字対応でハマってた

haya14busa/vim-easymotion

Vim-easymotionの動作は基本的に正規表現でマッチする文字列を探して、その座標(cooridinate)としてline番号とcolumn番号をリストに追加し、それをあとからターゲット文字列に一括置換してHighlightさせるという手順を取ります。

Multibyte文字を扱わないときはこれで一切問題ないのですが、日本語の文字列やTab文字など、column番号に使われるbyte数と、実際に表示される文字列の長さが違う場合にバグが起こります。

表示位置がずれる

設定にもよりますが、Tab文字列は4文字分表示させていますが、1byteです。これをターゲットである”f”や”j”といった1byteで置換してしまうと3byte分表示列がずれてしまいます。

解決法

表示がずれる問題は置換した時の文字列の差分の分だけスペースを足せばいいということになります。

strdisplaywidth()関数を使い文字列の長さを取り、repeat(' ', target_char_len -1)を置換する文字に足します

Byte数のズレによって置換、ハイライトができなくなる

日本語はもっと厄介で、表示される1文字の長さは2byte分でさらに実際のbyte数は3byteです。vimで一括置換するといっても、ターゲットにマッチする座標のリストをループしながら置換していくだけなので、行ごとに最初のmultibyte文字を置換した瞬間、その後のbyte数がずれてしまい(日本語の3byte -> 1byte + 日本語の長さ2byte分を埋め合わせるためのスペース1byte)で1byteずつずれてしまいます。

これによって次の3byteの日本語文字列の2byte目がターゲットになってしまい、置換もできなければ、highlightも動かなくなってしまいます。

Example

あ あ あ あ あ あ
1  5  9  13 17 21  <- col('.')の結果かつ、置換するリストのcolumn数
↓ 1文字目を'a 'に置換
a  あ あ あ あ あ
1  4  8  12 16 20  <- 置換後のcol('.')の結果

このように座標が置換するごとにずれてしまい、うまく動かなくなります

解決

Loopごとに置換前と置換後の行全体の文字列のbyteの長さの差を記憶しておき、そのぶん指定するcolumnに足して置換していく

あ あ あ あ あ あ
1  5  9  13 17 21  <- col('.')の結果かつ、置換するリストのcolumn数
↓ 1文字目を'a 'に置換
a  あ あ あ あ あ
1  4  8  12 16 20  <- 置換後のcol('.')の結果。
残りの[5,9,13,17,21]はそれぞれ差分の1を引いて[4,8,12,16,20]になる

結論

すごいわかりづらい感じになったし、わかりやすく書く努力すらできていないけど、何が言いたいかってvim-easymotionにmigemo機能を実装して日本語でもeasymotionするのなかなか捗りを感じる。

ちょっと重いけどおすすめ。

(もとから実装されてた単語移動などによってずれる問題も解決ってことなのでmigemoなしでも便利)

数学ガール第1巻読んだメモなど

数学ガール

結城 浩
ソフトバンククリエイティブ 2007-06-27
¥ 1,890

Notation

Π(Product)

積(Product)の頭文字Pをギリシャ文字にしたものがΠ

The upper-case letter Π is used as a symbol for: The product operator in mathematics, indicated with capital pi notation ∏ (in analogy to the use of the capital Sigma Σ as summation symbol).

Pi (letter) – Wikipedia, the free encyclopedia

Σ(Sum)

和(Sum)の頭文字Sをギリシャ文字にしたものがΣ

Upper case Σ is used as a symbol for: the summation operator

Sigma – Wikipedia, the free encyclopedia

MathisFun

Sigma is the upper case letter S in Greek. And S stands for Sum.

Sigma Notation

Discrete mathematics(離散数学)におけるギリシャ文字のΣと、Continuous(連続)的な世界におけるローマ字のS、「∫」が対応する

ωのワルツ

Ω – Wikipedia

振動 -> 回転

ド・モアブルの定理

(cos θ + i sin θ)n = cos nθ + i sin nθ

フィボナッチ数列と母関数

フィボナッチ数列の一般項を母関数を使って捕まえる

級数 -> Series 無限級数 -> Infinit Series

無限級数を使って無限に続く数式をxの閉じた式で表せる

数列 -> 母関数 -> 母関数の閉じた式 -> 数列の一般項

相加相乗平均

実数r(real number)の2乗から相加相乗平均の関係を導く

連続(continuous)と離散(discrete)

微分演算子D <-> 差分演算子Δ
冪 <-> 下降階乗冪(falling factorial)
ex <-> 2x
積分∫ <-> 和文Σ

コンボリューション

ハーモニックナンバー

いくらでも大きくなる -> M (Magnitude)

連続 <-> 離散
logx = ∫1/tdt <-> Σ1/kδk

ゼータ関数とオイラー積

調和級数の発散が、素数の無限性の証明に結び付けられる

テイラー展開とバーゼル問題

sinxのテイラー展開を使って、バーゼル問題(ζ(2)の値を求める)を解く

n次方程式の解と係数の関係

分割数

ついでにNumdot問題

ちょっと前にCodeIQで開催されていたNumdot問題。締め切り前日にはじめて見てちょっと考えたけど時間なくて挫折した。解説もらえるのは挑戦者だけのようだったのでわからなくても出せば良かったか…

参考文献・読書案内のうち読みたいものPick up

数学:物理を学び楽しむために[Web Page]

G. ポリア
丸善 1975-04-01
¥ 1,575

『プログラマの数学』

結城 浩
ソフトバンククリエイティブ 2005-03-24
¥ 2,310
ロナルド・L. グレアム,オーレン パタシュニク,ドナルド・E. クヌース
共立出版 1993-08
¥ 9,975

The Art of Computer Programming

奥村 晴彦
技術評論社 2010-07-07
¥ 3,339

Phrase

  • <<当たり前のところから出発するのはいいこと>>
  • <<例示は理解は試金石>>
  • <<変数の導入による一般化>>
  • <<分けっこ>>
  • <<数式は言葉>>

Cognitive Neuroscience: Definitions, Themes, and Approaches#01

Cognitive Neuroscience: Definitions, Themes, and Approaches#01

Introduction

Cognitive neuroscience seeks to build on its parent fields by developing new models of cognitive functions that integrate ideas from both neuroscience and cognitive science.

Michael S. Gazzaniga,Geoffrey Davies,Richard B. Ivry,George R. Mangun
WW Norton & Co 2008-09-05
¥ 6,713

Cognition

Cognition

Cognition
a Latin term that means “the faculty of knowing”

set of processes(cognitive functions) that allow humans and animals      1. to perceive external stimuli   2. to extract key information and hold it in memory   3. to generate thoughts and actions that help reach desired goals

Mind
 the subjective sense of self
(近年ではCognitive NeuroscienceでもMindの方面にも手を伸ばしている)
Cognition, Cognitive functions
to describe the specific sorts of information processing studied by cognitive neuroscientists

Natural philosophy and early psychology

The phenomenology of cognition

  • philosophical -> psychopysical (19th)
  • intorospection, reasoning -> behavioral observation, experimental manipulation

Pioneer

なぜCognitive Scienceが科学たり得るか。主観(subjective)ではなく客観(objective)

Behaviorism

Psychology came to be dominated by a new emphasis on highly controlled experiments that matched objective external stimuli to measurable behavior

Behaviorists

How changes in stimulus presentation could shape How individuals adapt their behavior to the demants of the environment(Subsequent behavior)

Behaviorists extended or applied basic processes of learing from non-human animals to human

including

  • education
  • treatment of addiction
  • criminal rehabilitation

and grounded Psychology firmly in an objective experimental approach

Behaviorismの限界

The focus of behaviorists on learning from rewards let them to ignore other cognitive functions

operationism
Psychological concepts could be discussed only in terms of the experimental manipulations that evoked them

Ignoring complex mental states made experiments more tractable But needlessly reduced the scope of psychology by excluding the study of cognitive functions other than learning

Cognitive science

  • in the mid-twentieth century

A confluence of factors revived the legitimacy of psychological research on cognitive functions

One factor: The advent of computational science

Information theory gave new insights into perception, memory, and motor performance

George Miller

情報処理という観点から認知プロセスをみる

Information theory

Computers provided a new model for mental processes

The metaphor of “mind as computer” became a staple in psychology

Explore more complex aspects of mental life

behaviorism was too simple. Open the Blackbox(Cognitive function)!

Behaviorism
Stimulus -> Black box -> Response
Cognitivism
Stimulus -> Cognitive functions -> Response

Cognitivism (psychology) – Wikipedia, the free encyclopedia

Noam Chomsky

Cognitive Science unifies research on mental process regardless of

  • the specific topic
  • experimental approach
  • method
  • discipline

intersted in 

  • characterizing the phenomena and behavior associated with specific cognitive functions 
  • creating cognitive models that describe the underlying psychological processes

Cognitive model

  • make some sense of complex cognitive phenomena
  • provide insights into the common outcomes
  • facilitate generalizations about experimental results
  • Cognitive models nealy equal Psychological constructs
  • 内部モデル
  • brain mappingをしようと思っているわけではない(それを通して人間の認知過程を理解するところに重点を置いている)
  • Neuro biology との関連
  • 認知過程がprimilyで、あとからbrainとintegrateする試み

Neuroscience

Nervous systems

Neuroscience
 how the nervous systems of humans and other animals are organized and function

Cerebral cortex

Phrenology

Phrenology made an important contribution to modern neuroscience: it introduced the idea that different parts of the brain contribute to different sorts of information processing.

phrenology -> localization of function

The identification of neurons

The neuron
 a cell body
 an axon
 multiple dendrites

Cognitive Neuroscience: The Neurobiological Approach to Cognition

Cognitive neuroscience

The Intersection of cognitive science and neuroscience

Cognitive neuroscience combines all the difficulties of measuring brain function with all the problems of trying to accurately assess cognition and behavior as well as the complexities of trying to link them together.

Cognitive neuroscience’s goal is distinguished from

  • chemistry
  • physics
  • molecular biology   – whose boundaries are better defined

Misconception about Cognitive neuroscience research

Misconception: cognitive neuroscience simply maps the brain regions -> Neural correlate

Neural correlate - Neural correlate – Wikipedia, the free encyclopedia - Neural correlates of consciousness – Scholarpedia - Neural correlates of consciousness – Wikipedia, the free encyclopedia   – 意識に相関した脳活動 – Wikipedia - pooneilの脳科学論文コメント: Neural correlate - What is a Neural Correlate of Consciousness? (前半) – y_yossarianの日記 - What is a Neural Correlate of Consciousness? (後半) – y_yossarianの日記

Nonetheless, understanding the neural correlates of a function plays an important role.   The ambitions of cognitive neuroscience go beyond creating maps of brain function.

ブレインマップを作るのが目的ではなく、認知過程(cognitive process)がどのように機能しているかに重きを置いている(といってもマッピングが重要じゃないというわけではない)

Cognitive research combines information about brain structure and function to create neurobiologically grounded models of cognition

Indivisual differences

Summary

Cognitive neuroscience seeks to create biologically grounded models of cognitive function

Methods: Convergence and Complementarity

Using multiple methods provides two critical advantages:

  1. Convergence(収斂性or統合)
  2. Complementarity(相補性)   – 相補性 – Wikipedia

Convergence

Convergence
the approach of combining results from multiple experimental paradigms to illuminate a single theoretical concept

Convergenceによってbehaviorithmからshiftできた

Convergence made it possible to demonstrate the existence of internal mental states that could not be measured directly.

別々のstimuliとmethodsでそれぞれ似たような結果がでれば、一つ一つは疑問符がつくようなものでも、合わせて(Convergence)考えれば信頼性の高いものになる。

Complementarity

Conclusions