Posts

Showing posts from 2014

第7回 ECMA-262 Edition5.1 読書会で発表してきました

月一くらいで開催されているECMA-262 Edition5.1読書会に第5回から参加させていただいていて、この度発表する機会をいただきました。

この勉強会は @takesako さんが翻訳なさった「ECMA-262 Edition 5.1を読む」を読み進めていく勉強会で、僕が今回担当したのは第10条 実行可能コードと実行コンテキストの10.4〜10.6のところです。


第7回 ECMA-262 Edition5.1読書会 from Shou Takenaka
文章だと分りにくいところが色々あったので、クラス図とかオブジェクト図とか描いてまとめてみました。

個人的には10.5の仮引数、関数、arguments、ローカル変数のバインド処理のところが、こんな感じで動いているのか〜って感じで面白かったです。

Gitのブランチ名とステータスをBashのプロンプトに表示する

GitHub Flow なんかを採用していると、ブランチを切り換えることがよくあるので、今どのブランチにいるのか頻繁に確認したくなります。

いちいち git branch で確認するのは面倒なので、僕はこんな感じでプロンプトにブランチ名を表示させています。ついでにワークツリーの状態(更新したファイルがあるか、新規ファイルがあるかどうかなど)も一目でわかるようにしています。

RedHatなプロンプトになっているので、他のスタイルが好きな場合はお好みでPS1をいじればOK。


(ブログで見つけたスクリプトをカスタマイズして使っているのですが、ソースがどこだったのかわからなくなってしまいました。検索しても見つからないので、ページ削除されたのかな?)

2014/11/6編集
元々72行目にあった tput sgr 0 0 を削除しました。
これがあると、vagrant等のシェルでこのスクリプトを読み込んでいる場合にscpができなくなり、provisionなどが行えなくなるという問題が発覚したためです。

ActiveGroongaを使ってみる (2)

今関わっている某プロジェクトでGroongaを採用したいと思って、色々と読んだりいじったりしています。
Railsアプリケーションに組み込みたいと思っているので、ActiveGroongaを使うのがよさそうだと思って試し始めたのですが、リファレンスがまだComing soonでわからないところがたくさんあったりするので、コードを読みながらちまちまと進めていることをまとめておくことにしました。
この検証では Rails 4.1.5 を使っています。別バージョンだとこの方法では動かないかもしれませんのであしからず。
今回はマイグレーションについて書いています。

マイグレーションスクリプトの定義マイグレーションスクリプトの実行テーブルスキーマの確認
マイグレーションスクリプトの定義前回 の手順でSampleモデルを生成すると、db/groonga/migrate ディレクトリにマイグレーションスクリプトが生成されます。
classCreateSamples< ActiveGroonga::Migrationdefup create_table(:samples) do |table| table.timestamps endenddefdown remove_table(:samples) endend create_tableの中の書き方(何メソッドを呼べばいいのか)がわからなかったのでGitHubの ActiveGroongaRroonga の中身を調べたところ、create_table のブロックの引数に渡される table には、Groonga::Schema::TableDefinition のインスタンスが入っている事が判明。Groonga::Schema::TableDefinitionのメソッド を呼び出してテーブルのスキーマを定義できるようです。
ということで色々なデータ型のカラムを追加してみました。
classCreateSamples< ActiveGroonga::Migrationdefup create_table(:samples) do |table| table.boolean :c01 table.integer8�������…

ActiveGroongaを使ってみる (1)

今関わっている某プロジェクトでGroongaを採用したいと思って、色々と読んだりいじったりしています。Railsアプリケーションに組み込みたいと思っているので、ActiveGroongaを使うのがよさそうだと思って試し始めたのですが、リファレンスがまだComing soonでわからないところがたくさんあったりするので、コードを読みながらちまちまと進めていることをまとめておくことにしました。この検証では Rails 4.1.5 を使っています。別バージョンだとこの方法では動かないかもしれませんのであしからず。今回はインストール〜モデル生成まで書いています。インストール設定データベース作成モデル作成 インストールまずはgroongaパッケージをインストールします。ちなみに、パッケージを入れなくてもActiveGroonga gemをインストールした時にソースからビルドしてくれるようですが、結構時間がかかるみたいです(参考: rroongaを最速でインストールするには)。パッケージをインストールしたらGemfileに以下を追加して bundle install します。gem "activegroonga", require:"active_groonga"設定config/groonga.yml にデータベース格納先を指定します。例えば下記のような感じ。2014/9/2 追記
コメントいただきました。自分で作らなくても、後述の bin/rake groonga:create 時に自動的にこのファイルができました。自動生成だとDBのパスが db/groonga/#{RAILS_ENV}/db になるので、パスを変えたい時は自分でこのファイルを用意する、という使い方をすればいいようです。development: database: "db/groonga/development/db"次に config/application.rb で ActiveGroonga の railtie を require します。require "rails/all" の下に下記の行を追加しました。require"active_groonga/railtie"データベース作成ActiveG…

Groongaドキュメント読書会#4参加レポート

2014/8/25に開催されたGroongaドキュメント読書会#4の参加レポートです。
今回初めて参加させていただきました。
読書会で学んだことのうち、ドキュメントに記載されていないことを中心にまとめています。
4.4.1. JavaScriptに似た文法での絞込・全文検索ドキュメント
queryとfilterは書き方の違いだけなのか?
書き方の違いだけで、処理的には同じ。filterの方が表現力が高い。 4.4.2. scorer を利用したソートドキュメント
–filter “1”
全てのレコードにマッチさせる、という意味。–filterすると結果として仮想テーブル的なものができる。仮想テーブル的なものに_scoreがついてるイメージ。–scorer “_score = rand()”
ランダム値を_scoreに代入。–scorerを使うと元々あるカラム(_score以外のカラム)の値を変えることもできてしまうが、基本的には_scoreの値を調整することを意図した機能。selectの結果で返されるデータの中で、最初の値が三つ入っている配列は何?
第一要素: 結果ステータス (0 = 正常終了)第二要素: クエリの実行を開始した時間第三要素: 開始したのにかかった時間 4.4.3. 位置情報を用いた絞込・ソートドキュメント
緯度、経度の区切り文字にはカンマも使える。距離計算や円の中にあるかどうか、矩形の中にあるかどうかなどが関数で計算できる。球面を考慮して計算するモードや平面と見なして計算するモードがある。Groongaは内部表現はできるだけ整数にしている(計算誤差を減らすため)。度数表記は60進数なので60をかけてミリ秒表記に変換できる。ミリ秒表記のデータをもっているならそのまま使った方がいい。 4.5. ドリルダウンドキュメント
ドリルダウンとはRDBのGROUP BYのような処理ができる機能。サンプルコードで指定している–limit 0とは?
出力件数を0にしている。drilldownは普通のセレクト結果+drilldown結果を返す。この例ではselectの出力は余計なので–limit 0で抑制している。_nsubrecsはエヌサブレックスと読む。Groongaは複数のGROUP BYを一回でできる = 効率よくクエリを実行できる。drilldown対象のカラ…

Bundlerでrmagicをインストール on Mac OS X Mavericks using Homebrew

Homebrewでimagemagickをインストールし、Gemfileに「gem "rmagick" require: "RMagick"」を追加してbundleを実行すると、rmagickのビルド中に

...
No package 'MagickCore' found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
...

というエラーが発生する。
このエラーは環境変数C_INCLUDE_PATHに"/usr/local/Cellar/imagemagick/6.8.8-9/include/ImageMagick-6" (imagemagick 6.8.8-9の場合)を設定すれば回避できる。
が、今度は

...
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Can't install RMagick 2.13.2. Can't find the ImageMa…

chef-rvmで作ったsudoできないユーザー用にRVMをシングルユーザーインストール

autolibsのところで少しはまったのでメモ。

ChefでRailsアプリを動かす専用アカウント(こいつにはsudoさせたくない)を作って、ついでにそのユーザー専用にRVMをインストールしたかったので、chef-rvmのrvm::userレシピを試してみたんだけれども、インストール途中で
xxx password required for 'apt-get --quiet --yes update': とか言って止まってしまう(xxxはアカウント名、Ubuntuなのでapt-getしようとしてる)。
これを回避するにはautolibsを無効にすればよい。
やり方は、Node Objectに "rvm": { "rvmrc": { "rvm_autolibs_flag": "disabled" } } と書いておけばOK。
こんな感じ。
{ "rvm": { "rvmrc": { "rvm_autolibs_flag": "disabled" }, "user_installs": [{ "user": "svc", "default_ruby": "ruby-2.1.0", "rubies": ["ruby-2.1.0"] }] },     "run_list": [         ...         "recipe[rvm::user]",         ...     ] }