細かきこと

書いたり書かなかったり

Error: GitHub API rate limit exceeded for xxx.xxx.xxx.xxx の対処方法

brew で searchとかしてたら、「Error: GitHub API rate limit exceeded for xxx.xxx.xxx.xxx」というエラーがでた。

ググったら、http://memo.saitodev.com/home/mac/#homebrew-github-api-token がヒット。 GitHub APIのlimit にひっかかったのが原因。 そりゃそうだわということで、GitHubのAccount Setting -> Applications -> create new token でPersonal Access Tokensを生成して、.bashrcにでも下記を設定する。

export HOMEBREW_GITHUB_API_TOKEN=Personal Access Tokens

解決!

migrationのchangeの話

久しぶりにrailsで開発することになって、久しぶりに「rails g model hoge」 をしたら、upじゃなくてchangeを実装するようになっていた。

でも、今まで通り、upも使える。

changeの中でcreate_tableを実行するように書くと、「rake db:rollback」でdownでdrop_tableを書かなくてもdropしてくれる。

upのときにテーブルやカラムにコメントを設定するようなsqlを実行したい場合changeでどうやるかというと、「reversible」を使うとよい。

def change
  create_table :hoges do |t|
    t.string :name, null: false
    t.references :foos
  end
  reversible do |rv|
    rv.up do 
      execute <<-SQL
        comment on table hoges is 'ほげ';
        comment on table hoges.name is '名前';
      SQL
    end
    rv.down do
      # down 時に流したいSQLをながす
      execute <<-SQL
         ...
      SQL
    end
      add_column ...
      rename_column ...
  end
end

reversibleに渡すブロックの中で、add_column,rename_columnを実行するように書くとup/downでスムーズに処理されるようになる。

詳しくは、本家で。

http://guides.rubyonrails.org/migrations.html

rbenvとrbenv-gemsetでgemをよろしく管理する

同じgemでもアプリによって依存するバージョンが違ったりする場合やちょっと試したい場合に、rbenv-gemsetをつかって、gemsetを分けておくと便利。

例えば、bundlerとかpryとか共通に使うgemは、globalと名付けたgemsetにして、railsとかsinatraとかのgemはアプリごとにgemsetを作るとはかどる。

まず下のようにglobalなgemsetを作る。 当然ながら、gemsetはrubyのバージョンごとに作る決まり。

$ rbenv gemset create 2.0.0-p247 global

作ったgemsetを確認

$ rbenv gemset list
2.0.0-p247:
  global

現在有効なgemsetを確認する

$ rbenv gemset active 
global

globalが印字されれば,上で作ったglobal用のgemsetが有効となっているので、bundlerとかをインストールすればよいと。

次にアプリ用のgemsetをつくり、存在するgemsetを確認。

$ rbenv gemset create 2.0.0-p247 example
reated example for 2.0.0-p247
$ rbenv gemset list
2.0.0-p247:
  example
  global

でもこの時点でactiveなのはglobalのみである。

$ rbenv gemset active 
global

共通用途として作ったglobal gemsetとアプリ固有の者として作ったexample gemsetの両方を使うようにするためには、アプリのルートディレクトリに.rbenv-gemsetsファイルを作り、そのなかに「exmaple global」と記載すればOK。 そうすることで、exampleディレクトリにいるときだけexample gemsetが有効になる。

$ cd example/
$  echo example global > .rbenv-gemsets
$ cat .rbenv-gemsets 
example global
$ rbenv gemset active 
example global

gem envで確認するとexample,globalがGEM PATHSに設定されている。

- GEM PATHS:
     - /Users/hoge/.rbenv/versions/2.0.0-p247/gemsets/example
     - /Users/hoge/.rbenv/versions/2.0.0-p247/gemsets/global

gemをinstallするとexmaple gemsetにinstallされ、globalを汚さない。

$ bundle init
Writing new Gemfile to /Users/salza/Documents/ruby-works/example/Gemfile
$ echo gem \"mechanize\" >> Gemfile 
$ cat Gemfile 
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
gem "mechanize"
$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Installing unf_ext (0.0.6) 
Installing unf (0.1.2) 
Installing domain_name (0.5.13) 
Installing http-cookie (1.0.1) 
Installing mime-types (1.25) 
Installing net-http-digest_auth (1.4) 
Installing net-http-persistent (2.9) 
Installing mini_portile (0.5.1) 
Installing nokogiri (1.6.0) 
Installing ntlm-http (0.1.1) 
Installing webrobots (0.1.1) 
Installing mechanize (2.7.2) 
Using bundler (1.3.5) 
$ gem list -l

*** LOCAL GEMS ***

bigdecimal (1.2.0)
bundler (1.3.5)
coderay (1.0.9)
domain_name (0.5.13)
http-cookie (1.0.1)
io-console (0.4.2)
json (1.7.7)
mechanize (2.7.2)
method_source (0.8.2)
mime-types (1.25)
mini_portile (0.5.1)
minitest (4.3.2)
net-http-digest_auth (1.4)
net-http-persistent (2.9)
nokogiri (1.6.0)
ntlm-http (0.1.1)
pry (0.9.12.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
slop (3.4.6)
test-unit (2.0.0.0)
unf (0.1.2)
unf_ext (0.0.6)
webrobots (0.1.1)

でexampleディレクトリの外でgemの状態を確認すると、globalを汚してないことが確認できる。

$ cd ..
$ gem list -l

*** LOCAL GEMS ***

bigdecimal (1.2.0)
bundler (1.3.5)
coderay (1.0.9)
io-console (0.4.2)
json (1.7.7)
method_source (0.8.2)
minitest (4.3.2)
pry (0.9.12.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
slop (3.4.6)
test-unit (2.0.0.0)

という感じに便利だなと。

perl環境の構築

perlbrewのインストール

perlのrbenvのようなもの。

複数のバージョンをインストールできて、使い分けできる。

\curl -L http://install.perlbrew.pl | bash

上記コマンド実行後、

Append the following piece of code to the end of your ~/.bash_profile and start a
new shell, perlbrew should be up and fully functional from there:

source ~/perl5/perlbrew/etc/bashrc

とコンソールに表示されるので、指定されたようにシェルの環境設定ファイルでperlbrew用の設定を読み込むようにする。

で、再読み込み

source ~/.bash_profile

perlのインストール

perlbrew available

でバージョンを確認して、欲しいのを入れる

perl install perl-5.18.0

インストールが終わったら、入れたバージョンのperlにスイッチする

perlbrew switch 5.18.0

cpanmのインストール

CPAN::Shellを楽に使えるようにしたもの。

perlbrew install-cpanm

cartonのインストール

perlのBundlerみたいなもの。

cpanm Carton

とりあえず、Plackをいれてみる。

mkdir ~/hoge
cd hoge
echo 'requires "Plack";' > cpanfile
carton install

Plackの起動

下記のように、carton経由でplackupする

carton exec -- plackup -e "use Plack::App::Directory; Plack::App::Directory->new({root=>'./docs'})->to_app"

感想

perlの環境構築、特にcpanでモジュールをインストールしたり、アップデートしたりするところですごい苦労した記憶があるが、ずいぶんと楽になったものだ。

参考URL

BUFFALO WZR-D1100HのNASでtimemachine

主に http://d.hatena.ne.jp/daidai7/20130225/1361806444 で説明されている通り。

他のブログ等の情報によれば、イメージ作成+「$ sudo defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1」でいい感じに書かれているが、 どうももうまくいかなくて、上記ブログにたどり着いた。

いめーじをマウントした状態で、

$ sudo tmutil setdestination /Volumes/バックアップをぶちこむイメージファイル

とやると、timemachineが認識してくれた。

sambaかafsかって話なようだ。よくわからん。 まあ、バックアップをとる必要があるような人生になってきたんだなと作業をしながら思った次第です。

調べもの

ずいぶんと離れていたので、最近のJavaの動向を調べてみる。

  • trailsはなくなって、Tynamoになった。

    • Tynamo is model-driven, full-stack web framework based on Apache Tapestry 5.

    • tapestryってまだ生き残ってるんだ。
  • gradle

    • Gradle can automate the building, testing, publishing, deployment and more of software packages or other types of projects such as generated static websites, generated documentation or indeed anything else.

    • ant, mavenのいいとこ取り
    • DSLにgroovyを採用

MOGOK に登録してみた。

この前参加した mrubyの夕べ で紹介されていた MOGOK に登録してみた。

気になったこと

  • Ruby 1.9.3
  • DBはMySQLのみ
  • 独自ドメインでは使えない
  • パスワードに記号が使えないっぽい

railsを試すのにはお手軽そうだが、果たして使うかな?