basyura's blog

あしたになったらほんきだす。

TweetVim 2.3 Release !!

TweetVim 2.2 Release !! から 8 ヶ月も経ってしまった。なにかしら大きな機能を入れようと思いつつこれといって思い浮かばないまま今日に至る。主に pull request からなるリリースだけれども、ありがたくマージ&リリース。

  • 文字数カウント時に url 短縮を考慮 thanks! thinca
  • user stream の status_withheld でエラーになっていたのを修正 thanks! ompugao
  • TweetVimUserStream! で track ワードにかかるツイートだけを表示
  • 140 文字を超えた場合にポストするかを確認する
  • list へのメンバ追加がこけていたのを修正
  • vital のアップデート
  • numberwith 指定時のレイアウト修正 thanks! itchyny
  • readme の改善 thanks! Masahiro Saito
  • 該当ツイート周辺のツイートを表示する around action を追加

リリースのきっかけともなった thinca さんの コミット は本気すぎてあまり理解してない (遠い目)。今までは url を入力すると実際にはポストした際に短縮されるのに、ポスト前に単純に文字数でチェックしていたのでツイートできないメッセージが出てしまってた。これが実際の文字数にそってチェックされるように改善。すばらしい。

次のバージョンに向けては、地道にやる。なにかを。

Yokohama.vim #5 に行ってきた

f:id:basyura:20140406204248p:plain:w500

直前まで主催者合わせて 4 人。それはそれで面白いかもなぁと思いつつ当日を迎えたら何の心配もなかった。
会場のアットウェアさんは横浜からみなとみらいに移転済み。新しいオフィスがすばらしい。社員さんでアイデアを出しあって作ったとか。綺麗だし、壁一面のホワイトボード(ホワイトウォール?)があるし、電話部屋に、集中部屋もあるとか。外の景色も綺麗。いいなぁ。うちは普段からガヤガヤしてて全然集中できないのが辛いんだよ。

Vim 捗る Ruby 開発 @ srockstyle

tweetvim に unite-rails を使ってらっしゃると。自分が作ったプラグインの紹介を聞くのは初めてに近い経験なのでちょっと汗をかいた。チラチラと「使ってる」ツイートを見かけたりはしていたのだけど、自分が作ったものを仕事で使っているというのはなかなか嬉しいものがある。
自分は rails 書く書く詐欺をしてて、ちょろちょろとは書くのだけど書き始めるとファイルの行き来がめんどくさくなる。めんどくさいので vim plugin を作り始める or バージョンアップし始める。この繰り返しで rails スキルは上がらないし unite-rails はごくたまーにしか使わない状態なう。今年こそは rails と思ってたけど、もう時期も選択肢としても優先度としてマストじゃない感じしてるし必要になれば使うぐらいでいい気がしている。redmine のプラグインを書いたりソースいじったりはしてるし。

今の時点ではてブ 87 とは・・・脅威の伸び。会場から帰るときは 4 〜 9 ぐらいで伸びてきたねーだったのに。
飛び込みに近い資料作成&発表ということだったけど、この発表があったことで今回の yokohama.vim がビシっとなった感があるので非常に良かと思う。個人的には chef 等々を使ったデプロイが見たかった。

ライブコーディングで unite-chef を作ろう

srockstyle さんの発表を受けての神マンボウの登場。あの安定感は見習いたい。
時間をかければできるのと、人に見られながら短時間で成果を出せることの差はかなりでかい。僕は完全に前者(できるかどうかは置いといて)。かなりトライアンドエラーで実装していく派。マンボウさんみたいにゴールにまっすぐ進んで行けるのは素晴らしい。

Vim養成講座

恒例の? Vim レベルに並んだ上での 3 グループ分け。マンボウの次に並ばされてしまったのだけど、上に書いたとおりトライアンドエラー派なので混みいったことを聞かれると辛いなぁーと思いつつ始まる。
グループで Vim レベルの一番低いかたが、まだインストールして使ってみたばっかりの状態ということだったので「家に帰っても自分で Vim を育てられるようになってほしい」という思いで

  • .vimrc の作成
  • .vimrc を一発で開くマッピング
  • .vimrc を一発で source するマッピング
  • neobundle のインストール
  • unite.vim のインストール

までを約 1 時間で走破。
.vimrc を開くマッピングと .vimrc を source するマッピングにピンとこられる方は多いんじゃないでしょうか。

そう、Vim 神とこと kana さんの記事「Vimの流儀」。以前から vim は使っていたのだけど、これが僕にとってかなりの Vim (ライフ) チェンジングな記事でした。なので、これだけは最低しっておいてもらえればなんとかなるんじゃないかなということでした。勝手ながら。
あとは neobundle を使えれば plugin をインストールすることができるので vim の幅が広がるという思いでしたが、いろいろ知識をスキップしてる感は否めないので plugin を入れた後にそれをどう使いこなすかは砂漠に放り投げられた感じだろうな・・・と思う。強く育ってください。

懇親会

立ちっぱなしが腰に来てましたが・・・・ビールもご飯も美味しく、話も盛り上がったので楽しい時間を過ごすことができました。

gu4 さん

いろいろお忙しいと思いますが yokohama.vim を開催して頂いた上、さりげないファシリテートで引っ張って頂いてありがとうございました _(_ _)_

豆知識

「コーギー   おしり」で検索するといいよ (UΦωΦ) (ΦωΦ=)フムフム

vimrc を分割

colorscheme を wombat から newspaper に変えて 1 年ちょい経過。飽きてきたので新しい colorscheme をと思って探したのだけどコレといったものが無いので再度 wombat に戻ることにした。
colorscheme を変えるのはコマンド一発なのだけど、plugin で定義されてる色とか wombat そのままじゃなくて一部変えたいとかあるので直し始める。g:colors_name を if 文で判断して colorscheme 個別の設定を上書きしていたのだけど、if 文構造がものすごく読みづらいので colorscheme ごとに定義を分割しはじめる。現在の colorscheme によって読み込む定義ファイルを切り替えることで vimrc をスッキリさせることに成功。ついでに plugin ごとの設定や、platform ごとに固有に書いていたものも気になって分割し始める。

分割しまくった結果。

.vim
 └ rc
    ├── gvimrc
    ├── highlight
    │   ├── newspaper.vim
    │   ├── solarized.vim
    │   └── wombat.vim
    ├── plugin
    │   ├── autogroup.rc.vim
    │   ├── highlight.rc.vim
    │   ├── kwbd.rc.vim
    │   ├── misc_command.rc.vim
    │   ├── neocomplete.rc.vim
    │   ├── neosnippet.rc.vim
    │   ├── openbrowser.rc.vim
    │   ├── quickrun.rc.vim
    │   ├── rmine.rc.vim
    │   ├── setting.rc.vim
    │   ├── tweetvim.rc.vim
    │   ├── unite.rc.vim
    │   ├── vimfiler.rc.vim
    │   └── vimproc.rc.vim
    ├── starting
    │   ├── mac.vim
    │   ├── unix.vim
    │   └── win32.vim
    └── vimrc

プラグインごとの設定読み込み

for rc in glob('~/.vim/rc/plugin/*', 1, 1)
  execute "source " . rc
endfor

platform ごとの設定読み込み

if has('vim_starting')
  for platform in ['win32', 'mac', 'unix']
    if has(platform)
      execute 'source ~/.vim/rc/starting/' . platform . '.vim'
      break
    endif
  endfor
endif

colorscheme ごとの highlight 設定読み込み

execute 'source ~/.vim/rc/highlight/' . g:colors_name . '.vim'


:Scouter ... ピピピピ ... 戦闘力 200 か、ゴミめ。

vim から pocket

呼ばれた気がしたので調査してみる。

認証

function! s:auth()
  " https://getpocket.com/developer/ から取得
  let consumer_key = 'YOUR CONSUMER KEY'

  " code を取得する
  let res = webapi#http#post('https://getpocket.com/v3/oauth/request', {
            \ 'consumer_key' : consumer_key,
            \ 'redirect_uri' : 'YOUR SITE'
            \ })
  let code = split(res.content, '=')[1]
  " ブラウザからアプリケーションを認証(許可)する
  let url = 'https://getpocket.com/auth/authorize?' . 
               \ 'request_token=' . code .
               \ '&redirect_uri=YOUR SITE'
  execute 'OpenBrowser ' . url
  " ブラウザで認証したら Enter
  let ret = input("please enter key after authorize in browser")
  " access_token を取得する 
  let res = webapi#http#post('https://getpocket.com/v3/oauth/authorize', {
            \ 'consumer_key' : consumer_key,
            \ 'code'         : code,
            \ })
  " レスポンスをパース
  let param  = {}
  for value in split(res.content, '&')
    let pair = split(value, '=')
    let param[pair[0]] = pair[1]
  endfor
  " アクセストークン
  echo param.access_token
  " ユーザ名
  echo param.username

endfunction

call s:auth()

追加してみる

function! s:add()
  let consumer_key = 'YOUR CONSUMER KEY'
  let access_token = 'ACCESS TOKEN'

  echo webapi#http#post('https://getpocket.com/v3/add', {
                        \ 'url'          : 'https://github.com/basyura/TweetVim',
                        \ 'consumer_key' : consumer_key,
                        \ 'access_token' : access_token,
                        \ })
endfunction

call s:add()

まとめ

CONSUMER KEY を基本的に各自に用意してもらうという方針にすれば割と楽にいけそう。
これなら pocket.vim つくっちゃおうかなぁと思ったらすでにあったわーわーわー 。

とはいえ、ちまちまやってみるか・・・な?

いつか何かを作るために勉強するよりも、最初に作りたい目的があると捗るので作りたい物ドリブンでいろいろ手を動かしたいと思い直した今日このごろ。

Vim の左端のマージンがなくて見づらい気がしたのでいじってみた

f:id:basyura:20140125001635p:plain

端にぴったりでなんか窮屈。mac はまだいいのだけど、windows だとウインドウの幅が更にある。文字を見たいのだけどウインドウが気になってしまう(幅 0 にして今はしのいでる)。気になってはいたのだけどどうすることもできないので・・・と思っていたけどやっぱ気になるので魔窟を眺めてみることにした。

homebrew のソースをいじる

もともと MacVim のインストールを試してたりしてたので、そのソースをいじることにする。

  • /Library/Caches/Homebrew/macvim-7.4-72.tar.gz

これを解凍してソースを弄る。画面に表示する位置をずらせばいいのかなとか思いつつ眺めてみた・・・けど・・・なるほど。分からん。そもそも C が読めない。しばらく頑張って眺めてたら閃いた。

行番号の幅が 1 になるようにすればいいじゃないか と。

  • screen.c
 #if defined(FEAT_LINEBREAK) || defined(PROTO)
 /*
  * Return the width of the 'number' and 'relativenumber' column.
  * Caller may need to check if 'number' or 'relativenumber' is set.
  * Otherwise it depends on 'numberwidth' and the line count.
  */
     int
 number_width(wp)
     win_T	*wp;
 {
+    return 0;
     int		n;
     linenr_T	lnum;

行数の桁数 + 1 の値で表示されるようになってるっぽかった。初めて知った。なので幅を 0 で返すようにしてみた。

brew install

再度固めて、 brew edit MacVim で sha1 をコメントアウト。
(ソースを編集したい場合にどうするのが正解なのか分かってない)
そしてインストール

brew install MacVim

できた。

f:id:basyura:20140125001653p:plain

これだけでは行番号が表示されてしまうので、ハイライトでごまかす。

:hi LineNr guifg=bg
:hi LineNr guibg=bg

f:id:basyura:20140125001703p:plain

こんどこそできた。けど、これが見やすいかって言われると・・・うーん。これの 50 〜 70% ぐらいの幅にしてみたいところ・・・

比較

f:id:basyura:20140125001635p:plain:w420 f:id:basyura:20140125001703p:plain:w420

ん〜・・・続かない。

mono で async/await

Mono is a software platform designed to allow developers to easily create cross platform applications. Sponsored by Xamarin, Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.

Mono

いつのまにか 3 系にアプデートされて C# 5.0 相当になり、async/await が使えるようになってた。

using System;
using System.Threading;
using System.Threading.Tasks;

class Class1 {

  static void Main(string[] args)
  {
    new Class1().Invoke();
    for (int i = 0 ; i <= 5 ; i++)
    {
      Console.WriteLine("●-" + i);
      Thread.Sleep(1);
    }
  }

  public async void Invoke()
  {
    await Hello().ContinueWith(x => Console.WriteLine("   3 - ◯ => " + x.Result));
    Thread.Sleep(1);
    Console.WriteLine("   4 - ◯ ");
  }

  private async Task<bool> Hello()
  {
    bool ret = await new TaskFactory().StartNew(() => {
                 Console.WriteLine("   1 - ◯ ");
               }).ContinueWith(x =>{
                 Console.WriteLine("   2 - ◯ ");
                 return true;
               });
    return ret;
  }
}

コンパイル時のデフォルトは .Net4.0 になっているようなので、4.5 を指定する必要がある。この指定方法が分からずにだいぶハマった・・・。

dmcs -sdk:4.5 TestAcync.cs

実行

$ mono TestAsync.exe

   1 - ◯ 
●-0
   2 - ◯ 
●-1
   3 - ◯ => True
●-2
   4 - ◯ 
●-3
●-4
●-5

無事できましたっと。

vim-quickrun

くいっくるんで実行したい場合の設定。

let g:quickrun_config['cs'] = {
   \   'exec': ['%c -sdk:4.5 %o -out:%s:p:r.exe %s', 'mono %s:p:r.exe %a'],
   \ }

システムデフォルトの設定を変更できる方法があるのかもしれないけどよく分からない。

Xamrin Studio

f:id:basyura:20140112110806p:plain

visual studio なくてもできそう。プロジェクトファイルも visual studio 2012 相当で作るっていう設定もある。試しに開いてみる

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "HelloWorld\HelloWorld.csproj", "{18672E83-0FC4-4D27-BB55-E4BDF76A651A}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|x86 = Debug|x86
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Debug|x86.ActiveCfg = Debug|x86
		{18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Debug|x86.Build.0 = Debug|x86
		{18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Release|x86.ActiveCfg = Release|x86
		{18672E83-0FC4-4D27-BB55-E4BDF76A651A}.Release|x86.Build.0 = Release|x86
	EndGlobalSection
	GlobalSection(MonoDevelopProperties) = preSolution
		StartupItem = HelloWorld\HelloWorld.csproj
	EndGlobalSection
EndGlobal

その他、.csproj とか AssemblyInfo.cs も見たことある感じ。iOS と Android のプロジェクトも作れるようだからすごいなぁ。
visual studio バカ高いし、Mac や Linux でも動作する環境というのはうれしいなぁ。機能的にはまだまだなのかもしれないけど。
開発するためだけに年間いくらお布施するんだってのが・・・辛い。高い。

OmniSharp

久々に導入してみたけど、sntax エラーは教えてくれるけど、クラス名が違うとかは教えてくれないし、:OmniSharpBuild すると必ず Build Failed って出るし・・・・よくわからないので保留・・・

ぼくの vimconf 2013

もう 2 ヶ月近く経っていたのか・・・。

情報をうまく拾えてなくて English Only という思い込みがあって発表枠にエントリしなかったのだけど、普通に日本語発表だった (;´Д`) なにかやっとけばよかった。

顔が見れるとアイコンと発言とのヒモ付がよりしっかりする。不思議なことに発言も頭に入って来やすい。
その分野に対してさらに興味をもつ、のめり込む、より面白くなるのはその分野の人達に会って会話するってことが重要だなぁと改めて思った。
最近プロジェクトにこもりきりで、いろんな人には会うし優秀人も沢山いるんだけど刺激の大きさがぜんぜん違うなぁ。惰性で仕事をやってるからなんだろうか。

kaoriya さんのパッチを出す時に必要なものの話で

  • problem
  • solution
  • evidence
  • strategy

を挙げられていたのだけど、仕事もその通りだなぁと。
暗黒美夢王はいつもどおり。だった。