トップ 追記

Route 477

過去の日記


2015-02-20

[ruby][memo] Sinatraでundefined method join for stringが出る

ちょっとSinatraでアプリを書いているのだけど、undefined methodjoin' for String`みたいなエラーでちょっとはまってしまった。

Slim

原因の一つ目は「テンプレートエンジンにSlimを使っていて」「partialをレンダリングしようとした(?)」ときに出るもので、slimとtempleを最新版(slim 3.0.2, temple 0.7.5)に上げたら直った。

Sinatra

で、実は同じエラーが出るケースがSinatra本体にもある。こちらは「例外が発生し、show_exceptionで例外ページを表示しようとしたとき」に起こる。

とりあえずこのコミットで治るらしいので、Gemfileに以下のように書いて凌ぐことにした。

gem 'sinatra', git: 'https://github.com/sinatra/sinatra.git',
               ref: '5f6168bfc92280892e819df524d4508cf9032f6d'
               # for https://github.com/sinatra/sinatra/issues/961

2015-01-06

[github] GitHub Wikiを全画面表示する

GitHub Wikiは便利だけど、ページ幅がけっこう狭いので、表とか入れるとちょっと見づらかったりする。
これをChrome + CSSでなんとかする方法。

  1. Stylishという拡張を入れる
  2. Github - Remove wiki page list and whitespaceを追加
  3. GitHub Wideを追加

これでGitHubの表示幅が広くなって、かつサイドバーも無くなるのでWikiコンテンツが画面いっぱいに表示されるようになった。

ただサイドバー無くすのはちょっとやりすぎで、ページ間移動がめんどい。クリックでトグルできたりする方がほんとは良い。
まあ印刷時だけ有効化するとかが良いかも。


2015-01-05

[vim] Vimでペースト→インデントする方法

Vimで、「いまペーストした範囲を全体的に右にずらしたい」みたいなときがたまにある。
vim usersに何か書いてあったような…と思って調べてみたところ、それっぽいものを見つけた。

]という特別な名前のmarkが、「直近に変更またはyankしたテキスト範囲の末尾」を指すようだ。
なので、pとかでyankしてから>']とタイプすることで、ペーストした範囲の最後までを対象にインデント(>)できると。なるほど。

いつも設定したマークに飛ぶときは「」の方を使っていたけど、「'」というのもあるらしい。「」はマークしたその位置に飛ぶけど、「'」はマーク箇所の行頭(=その最初の非空白文字)に飛ぶようだ。今回はインデント(>)なのでどっちでもよさそう。


2014-12-09

[types] MacでSML#を動かす

ちょっと手元でSML#を動かしたかったのだけど、オフィシャルにはMacPortsのパッケージしかなかった。
そこでhomebrewと組み合わせて自前でのコンパイルを試みた。

brew + コンパイル

SML# 2.0.0のコンパイルにはLLVM 3.4が必要である。普通にbrew install llvmすると3.5が入ってしまうので、何らかの工夫が必要になる。
brewで古いバージョンを入れる方法はいろいろあるようだが、ここではhomebrew-versionsを使ってみた。

$ brew install homebrew/versions/llvm34
$ cd /usr/local/opt/llvm34/bin/
$ ln -s llvm-config-3.4 llvm-config
$ cd ~/somewhere/smlsharp-2.0.0
$ ./configure --with-llvm=/usr/local/opt/llvm34 --enable-native=x86-darwin && make
(中略)
g++  -L/usr/local/Cellar/llvm34/3.4.2/lib/llvm-3.4/lib \
      src/runtime/smlsharp_entry.o \
      precompiled/x86.o \
      src/llvm/main/llvm_support.o src/llvm/main/SMLSharpGC.o \
      src/runtime/libsmlsharp.a \
      -ldl -lgmp -lm  -lLLVMLTO -lLLVMLinker -lLLVMipo -lLLVMVectorize -lLLVMBitWriter -lLLVMTableGen -lLLVMDebugInfo -lLLVMOption -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMIRReader -lLLVMBitReader -lLLVMAsmParser -lLLVMMCDisassembler -lLLVMMCParser -lLLVMInstrumentation -lLLVMInterpreter -lLLVMMCJIT -lLLVMJIT -lLLVMCodeGen -lLLVMObjCARCOpts -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore -lLLVMSupport -lz -lpthread -lffi -lcurses -lm \
      -o minismlsharp
ld: warning: ignoring file precompiled/x86.o, file was built for i386 which is not the architecture being linked (x86_64): precompiled/x86.o
Undefined symbols for architecture x86_64:
  "__SMLmain", referenced from:
      _main in smlsharp_entry.o
  "__SMLstackmap", referenced from:
      _sml_control_init in libsmlsharp.a(control.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [minismlsharp] Error 1

うーん、うまく行かない。

Ubuntuを試す

VMWare上にUbuntuの環境があるので、そっちも試してみた。

  • Ubuntu 14.04 trustyを使っている
  • smlsharp-2.0.0-2_ubuntu-amd64.debを入れようとするとlib32gmp-devが必要と言われる
  • そのようなパッケージは見つからない

ということで

ちょっと触りたいだけならDockerで動かすのが一番簡単っぽい。

$ docker run -i -t mzpi/smlsharp  /bin/bash
(イメージのダウンロード部分は中略)
root@528ee3cd7f3e:/# smlsharp 
SML# 2.0.0 (2014-04-04 11:47:08 JST) for i686-unknown-linux-gnu with LLVM 3.4
# 1;
val it = 1 : int 

2014-11-05

[memo][mac][docker] MacにDockerを入れた

まだ入れただけ。

  • とりあえずbrew install docker boot2docker
  • boot2docker initしてみたけど、VirtualBox 4.2だとなんかうまく動かなかった
  • Virtual 4.3を入れて、boot2docker delete → boot2docker init → boot2docker up でうまく行った *1
% VBoxManage -v
4.3.18r96516

boot2docker upが成功すると以下のようになる。

% boot2docker up
Waiting for VM and Docker daemon to start...
.o
Started.
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/yhara/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/yhara/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

ので、下の3行のexportを~/.zshrcに追加してsource ~/.zshrcする。このIPはboot2dockerで起動したVirtualBox VMのもの *2

docker versionで以下のような表示が出たら、ちゃんとVirtualBox VM上のdocker serverに接続できている。

% docker version
Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): darwin/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

*1 間でbrew uninstall/installとかしたかも

*2 なのでlocalhostとかに書き換えてはいけない


過去の日記