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 ディレクトリにマイグレーションスクリプトが生成されます。 class CreateSamples < ActiveGroonga::Migration def up create_table( :samples ) do |table| table.timestamps end end def down remove_table( :samples ) end end create_tableの中の書き方(何メソッドを呼べばいいのか)がわからなかったのでGitHubの ActiveGroonga と Rroonga の中身を調べたところ、create_table のブロックの引数に渡される table には、Groonga::Schema::TableDefinition のインスタンスが入っている事が判明。 Groonga::Schema::TableDefinitionのメソッド を呼び出してテーブルのスキーマを定義できるようです。 ということで色々なデータ型のカラムを追加してみました。 class CreateSamples < ActiveGroonga::Migration def up create_table( :samples ) do

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&quo

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で抑制して

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. C

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]",         ...     ] }