2012年09月09日

ぼくはEvernoteが大好きで、長年使っている。
そして、vimのカスタマイズが徐々に楽しくなってきている今日この頃である。
そこで考えるのが、vimからEvernoteを使いたい、という発想。
当然、偉大な先人がいて、Evervimというツールを作ってくれていた。
@kakkyz81さんに感謝。

サーバ作業中のログやコマンドのリストなど、テキストを一時保存する機会は多い。ひととおり作業が終わると、その結果や途中のログなどを、ブラウザのEvernoteにコピペしていたが、これで直接vim上からEvernoteに記録することができる。なんて便利!

早速、Mac OSX Mountain Lionに入れてみるものの、なかなか苦労した。 こちらのドキュメントには、

 python及び+pythonでコンパイルされたvim及び
pythonのmarkdownパッケージが必要である。 

とあるが、vimでpythonがちゃんと動いてくれなかったので、結局パッケージ管理のhomebrewを導入し、pythonを入れ、vimも入れることとなった。

ついでにOpenBrowser.vimも入れる。これはvim上からURLやメールアドレスの文字列にカーソルをおき、このプラグインを起動すると、ブラウザでそのURLを開いてくれる機能を追加する。便利だ。
これを入れておくと、Evervimからノートをブラウザで開くことができるようになる。

Evervimでできることは、とてもシンプルであり、必要最小限である。
主たる機能は、以下の6つ。(全ての機能は、上記ドキュメントを参照のこと)

:EvervimNotebookList ノートブックの一覧を表示する。
:EvervimListTags タグの一覧を表示する。
:EvervimSearchByQuery {query} 検索文字列を指定して、ヒットしたノートの一覧を表示する。
:EvervimCreateNote 新規ノートを保存するためのバッファが開かれる。
:EvervimOpenBrowser ノートをブラウザで開く。
:EvervimSetup アカウントのセットアップを行う。

これらのコマンドを、.vimrcにショートカットに定義する。 ぼくは"\"のあとのアルファベットとした。
検索文字列は、\sと打ったあと、続けて入力するようにする。

" Evervim
nnoremap <Leader>l :EvervimNotebookList<CR>
nnoremap <Leader>s :EvervimSearchByQuery<Space>
nnoremap <Leader>c :EvervimCreateNote<CR>
nnoremap <Leader>b :EvervimOpenBrowser<CR>

" open browser
nnoremap <Leader>o <Plug>(openbrowser-smart-search) 

これで環境設定は終了であるが、これはEvernoteクライアントのエディタを変更したと解釈してもよい。なんてすばらしいのでしょう。

こんどはubuntuのvimも同じ設定をしておこう。

余談であるが、vimでyankしたときに、ウィンドウシステムのクリップボードに入ってくれるといいと思ったが、今回vimを入れ直したことで、それも可能となった。 詳しくは、こちらの解説を。

vimエディタからクリップボードを利用する。

OS Xの標準vimは、+clipboardのオプションを付けてコンパイルされていなかったが、homebrewでhomebrew/dupesのリポジトリから入れたvimは、+clipboardになっていた。嬉しい。



sylphide_ffr31mr at 00:24コメント(0)トラックバック(0)技術 

2012年09月05日

OSXにpythonは入っているが、pipがちゃんと動かない。
homebrewを使って、改めて入れ直すことにする。
OS標準では、/usr/bin/pythonであるが、homebrewは/usr/local/binに入れてくれるので、後でpathを登録する必要がある。

1.HOMEBREWのインストール

 $ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go)

インストール後の自己診断

 $ brew doctor
Warning: You have Macports or Fink installed.
This can cause trouble. You don't have to uninstall them, but you may like to
try temporarily moving them away, eg.

  sudo mv /opt/local ~/macports 

macportsが入っているから、消せといわれる。
ま、ディレクトリ名を変えておけばいいだろう。

 $ brew doctor
Your system is raring to brew.  

ちゃんと通った。

2.pythonのインストール

早速インストールをする。

 $ brew install python
Unsatisfied dependency: XQuartz 
Please install the latest version of XQuartz:
  https://xquartz.macosforge.org
Error: An unsatisfied requirement failed this build.  

XQuartzがないと怒られる。
pythonでX11がいるとは、驚きだがしかたない。以下からダウンロードして入れる。

3.XQuartzのインストール

以下らからISOをダウンロードして、インストーラを起動。

http://xquartz.macosforge.org/landing/

4.pipの修正

再度pythonのインストールをトライ。

 $ brew install python 

またエラーが出た。

 ==> Downloading http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/pip-1.1.tar.gz
config.log was copied to /Users/terauchiyasuyuki/Library/Logs/Homebrew
Error: SHA1 mismatch
Expected: 842c4e2aff3f016feea3c6e992c7fa96e49c9aa0
Actual: 3b002db66890880ee776bbe199c3d326d8fe3d6f
Archive: /Library/Caches/Homebrew/pip-1.1.tar.gz
(To retry an incomplete download, remove the file above.) 

pipをダウンロードしたtar.gzが違うという。
いろいろ試行錯誤をしたが、結局、homebrewに登録されているハッシュ値が間違っているという結論。
以下のコマンドで、ハッシュ値を修正する。

 $ brew edit python 

変更前の23行めから26行め。

 23 class Pip < Formula
 24   url 'http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz'
 25   sha1 '842c4e2aff3f016feea3c6e992c7fa96e49c9aa0'
 26 end 

以下のように変更。

 23 class Pip < Formula
 24   url 'http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz'
 25   sha1 '3b002db66890880ee776bbe199c3d326d8fe3d6f'
 26 end 

5.最後、ほんとのpythonインストール

これで再度 $ brew install pythonをすると無事終了した。
PATHを/usr/local/binを優先させて。 

 $ which python
/usr/local/bin/python

$ python --version
Python 2.7.3 


sylphide_ffr31mr at 23:55コメント(0)トラックバック(0)技術 

2012年08月29日

windowsでは秀丸、ubuntuではgeditをキーバインドをカスタマイズして使っているが、OS Xでメインとするテキストエディタを決めかねていた。
mi(みみかきエディタ)をしばらく使っていたが、ほんのわずかにキーバインドが合わないで、困っていた。
プログラムを書く時はvimでいいのだが、日本語での文章書きにvimを使うと、日本語のON/OFFとインサートモードとコマンドモードのON/OFFを二重に行うのが面倒だった。

で、textmate2やらvicoやらを調べていて見つけた、この情報。


日本語のOFF/ONの手間が軽減されれば、vimでも文章扱う常用テキストエディタになるのではないか。
ということで、このブログを書いてみた。
なかなかいい感じ。

ただ、ぼくは英数キーをcommandキーに置き換えて使っているのだが、terminal内だけはcommandキーに置き換えできなくなるのが、ちょっとおしい。
このあたりは、また何か別の手を考える。

追記:
ちゃんと使えました。


sylphide_ffr31mr at 23:51コメント(0)トラックバック(0)技術 

2012年08月18日

sinatraを一から勉強し直している。
Ruby on Railといったフレームワークをちゃんと使ったことがないから、理解していないことが多すぎる。 ということで、sinatraの基本的な使い方として、以下をまず始めに学ぶことにした。

  1. deply環境の切り替え方法
  2. auto reloadを使えるようにする方法

auto reloadは、ソースコードを変更したとき、アプリケーションサーバを起動し直さなくても、自動的に再読み込みをしてくれるので、try&errorをするときの作業効率が全く違う。是非早めにマスターしておきたい。
deploy環境の指定ができるようになると、プログラム中で環境に応じた処理を分岐させることができる。
開発環境では、reloaderを有効にするが、本番環境では無効にするとか、開発環境の場合にdebug用の出力を出す、とかを簡単に切り替えられて楽になる。

で、いきなりつまずいた。

sinatraでのdeploy環境は、以下の3つから選択することとなる。

  • 開発環境:development
  • テスト環境:test
  • 本番環境:production

環境を指定するには、コードの最初の方で以下のように宣言しておく。

set :environment, :production

環境の指定は、rubyを実行する時の-eオプションで指定することもできる。

ruby app.rb -e production

使い方は、それ以降でdevelop?もしくはproduction?メドッドで判別し、trueかfalseが返るので、それで条件分岐させる。

@debug="checkpoint通過" if development?

このdevelopment?やproduction?やtest?というメッソッドは、sinatra/base.rbの中で以下のように定義されている。

def development?; environment == :development end
def production?;  environment == :production  end
def test?;        environment == :test        end

さて、このenvironment変数に入っている環境指定のシンボルをどうやって参照するかも試した。
マニュアルによれば、settings.environmentで取れるはずだ。

しかし、settings.environmentで得た結果と、production?で得た結果が異なるのである。
例えば、以下のようなコードでは。

# encoding: utf-8
require 'rubygems'
require 'sinatra'

set :environment, :production

class App < Sinatra::Base

  configure :development do
    require 'sinatra/reloader'
    register Sinatra::Reloader
  end

  get '/' do
    @messages="hello world with sinatra/reloader"
    @mode="environment is " + settings.environment.to_s
    @debug1="debug: production?="  + production?.to_s  if production?
    @debug1="debug: development?=" + development?.to_s if development?
    erb :envtest
  end
end

App.run!

出力はこうなる。

environment is development
debug: production?=true

一方、以下のようにclass定義内にset文を入れると、

# encoding: utf-8
require 'rubygems'
require 'sinatra'

class App < Sinatra::Base
  set :environment, :production

  configure :development do
    require 'sinatra/reloader'
    register Sinatra::Reloader
  end

  get '/' do
    @messages="hello world with sinatra/reloader"
    @mode="environment is " + settings.environment.to_s
    @debug1="debug: production?="  + production?.to_s  if production?
    @debug1="debug: development?=" + development?.to_s if development?
    erb :envtest
  end
end

App.run!

このようになる。

environment is production
debug: development?=true

この違いがわからないまま、今に至る訳である。
class定義の外でsetしたものはクラス変数に入り、内側でsetしたものはインスタンス変数に入るのだろうか。 そして、settingsはインスタンス変数を見ているが、?メソッドはクラス変数を見ていると考えれば、合点はいくが、なぜそんなふうになっているのかは謎。
実用上は、production?メドッドで分岐させることが多いはずなので、classの外側で定義しておけば問題ない。

また、ruby起動時の-eオプションで指定した場合も、前者(classの外側で定義)と同じ動きをする。
ややこしいことに、configure 〜 do は、内側で定義した:environmentで判断されるようだ。

では、外側で定義した:environmentの値を、内側の:environmentに代入するような仕組みにすればいいかと思ったが、どうもそれもうまく動かない。
結局、rubyの思想に反するが、両方で定義しておくのが安定しそうだ。
 

ちなみに、reloaderの読み込みは、上記コード内のconfigureブロックの中で書いてあるとおり。
参考は以下。



sylphide_ffr31mr at 20:12コメント(0)トラックバック(0)programing 

2012年07月30日

OS Xでgem installをしようとすると、以下のようなエラーが出てしまう。 調べてみると、gccを入れるとか、Xcodeを最新にするとか、いろいろ対策がでてくる。 入れようとするgemも、mysql関係や、hpricot関係やらと、千差万別だが、エラーメッセージは 同じようだ。

$ sudo gem install evernote
Building native extensions.  This could take a while...
ERROR:  Error installing evernote:
	ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/thrift-0.8.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/thrift-0.8.0/ext/gem_make.out

結論としては、XcodeでCommand line toolsを入れれば、必要なライブラリが入るようだ。 入れ方は、Xcodeを起動して、Xcodeメニューから。

Xcode-->open developer tool-->More developper tool-->safariが開く-->OSに合わせたCommand line toolsをインストール

このインストールが終わると、以下が実行可能となった。

$ sudo gem install evernote
Building native extensions.  This could take a while...
Successfully installed thrift-0.8.0
Successfully installed thrift_client-0.8.1
Successfully installed evernote-1.2.1
3 gems installed
Installing ri documentation for thrift-0.8.0...

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known
Installing ri documentation for thrift_client-0.8.1...
Installing ri documentation for evernote-1.2.1...
Installing RDoc documentation for thrift-0.8.0...

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known

Enclosing class/module 'thrift_module' for class BinaryProtocolAccelerated not known
Installing RDoc documentation for thrift_client-0.8.1...
Installing RDoc documentation for evernote-1.2.1...


sylphide_ffr31mr at 23:33コメント(0)トラックバック(0) 
記事検索
最新コメント
livedoor プロフィール
月別アーカイブ
  • ライブドアブログ