2011年06月


コード共有サイトのGitHubを最近使い始めて、その素晴らしさは感じてたんですが、スニペット用(?)のGistというのもあるのを今日知りました(恥)GitHubはプロジェクト単位で、Gistは単体のコード単位で使い分けるという感じなのでしょうか。

で、言いたいことは、WordPressでシンタックスハイライトしてコードを載せたい場合はGistを使えばいいんじゃないかということです。百聞は一見になんちゃらなので、Gistを使用しのコードを載せてみます。

[gist id=1048563 file=app.rb bump=3]

うん、とても見やすいです。カラーリングもいい感じの色合いで、行間も広いので見やすい見やすい。

Gistにコードをアップロードすると、埋め込み用のコードを発行してくれます。でもこのコードをWordPressの投稿で貼りつけても表示されないのでプラグインが必要になります。幾つか種類あるみたいなのですが、Embed GitHub Gistというのを使いました。通常のプラグイン同様にインストールするだけですぐに使えます。

使い方は以下のように簡単です。どれも表示される結果はほぼ同じ。


[gist id=546764]
[gist id=546764 file=file.txt]
[gist id=546764 file=file.txt bump=1]
[gist]http://gist.github.com/546764[gist]


これがあればシンタックスハイライトのプラグインいらないじゃん!

ちなみにGistへはコマンドラインからpushすることもできます。コマンドのインストールと使い方はコチラを参照。まぁ、一応書いておくと、


$ sudo gem install gist
$ git config --global github.user "GitHubのユーザ名"
$ git config --global github.token "GitHubのトークン"


でOK。2,3行目はすでに設定してあればしなくてもいい。逆にこの設定がないとanonymousでpushされるから絶対に必要。

Gistにpushする時は下記のようにする。-tでファイルタイプを指定しないとシンタックスハイライトはしてくれない。


$ gist < aaa.rb
$ gist -t ruby aaa.rb


シンタックスハイライトのWordPressプラグインはもう使いませんね。

このエントリーをはてなブックマークに追加

PHPのPaaSサービスであるPHP Fogを試してみました。サイトがとってもカッコイイです。

事前にアカウントは作成しておいてください。あとgitも必須ですのでインストールしておきましょう。

アカウント作成後、ログインしたらMy Account画面からLaunch new appを選択します。



次にアプリケーションをどのようにデプロイするかを選択します。WordPressとかのアプリケーションを選べたり、CakePHPなどのフレームワークも選べるようになってますが、今回はCustom Appを選んでみます。ドメイン名は「.phpfogapp.com」の前に適当な名前を入れます。最後にCreate Appをクリックします。



あ、sshのパブリックkeyを登録するのも忘れずに。もしパブリックキーを生成してない場合はコチラが参考になります。



gitを使ってアプリケーションのクローンをローカルに生成します。クローン生成のコマンドは丁寧にも用意してくれているのでそれをコピペして実行しちゃいましょう。



実行すると、ドメイン名のディレクトリが出来るのでそこに移動します。


$ git clone git@git01.phpfog.com:fujitaiju.phpfogapp.com
$ ls
fujitaiju.phpfogapp.com
$ cd fujitaiju.phpfogapp.com


ディレクトリの中を見てみると、index.phpがすでに用意されてます。この時点でブラウザからアクセスしてみると「hello world」が表示されます。


$ ls -la
total 8
drwxr-xr-x 4 user staff 136 6 24 18:22 .
drwxr-xr-x 3 user staff 102 6 24 18:22 ..
drwxr-xr-x 13 user staff 442 6 24 18:22 .git
-rw-r--r-- 1 user staff 30 6 24 18:22 index.php


これを表示させるのもなんだかという感じなので違うのを作ってpushしてみましょう。次のようなコードを作ってみました。

[php]
echo "今日は" . date("n") . "月" . date("j") . "日" . "です!"
?>
[/php]これをコミットして表示させてみましょう。


$ git add .
$ git commit . -m "first commit"
$ git push


http://自分のドメイン/today.phpにアクセスすれば表示されるはずです。

操作性はHerokuとほぼ一緒。料金体系もすごく似てますね。スケーリングが自由にできるというのはすごく魅力的です。VPSやめてこっちにしようかな。

このエントリーをはてなブックマークに追加

知ってる人にとってはなんだそんなことでという内容なんですが、インストールしたいgemの最新版がリポジトリにない場合にどうやってインストールするかという話です。

AmazonのAPIを簡単に扱えるライブラリであるruby-aawsはリポジトリにあるのはバージョンが0.7.0で、公式サイトからダウンロード出来る最新版は0.8.1が最新版です。

一番簡単なやり方はライブラリをダウンロードしてきて、フォルダに突っ込んでgem installする時に--localオプションつければいいと思うんですが、Herokuに上げたかったのでこのやり方はできません。


$ gem install ruby-aaws --local


HerokuではGemfileに書いたgemをインストールしてくれるので、どうしてもGemfileで完結させたかったのですが、そこでちょっとハマったので手順をまとめておきます。

まず、公式サイトからgemファイルをダウンロードしてきてunpackします。


$ gem unpack ./ruby-aaws-0.8.1.gem


すると、解凍されたみたいにディレクトリといくつかのファイルが生成されます。次にGemfileを書きます。


#Gemfile
gem "ruby-aaws", "=0.8.1", :path => "ruby-aaws-0.8.1"


ここで、"=0.8.1"のように必ずバージョンを指定しないと下記のようなメッセージが出てbundle installでこけます。どうやら.gemspecファイルがない時はバージョン指定は必須のようです。


Could not find gem 'ruby-aaws (>= 0)' in source at ruby-aaws-0.8.1.
Source does not contain any versions of 'ruby-aaws (>= 0)'


以上で準備OK。これでbundle installすればインストール完了です。


$ bundle install
Installing ruby-aaws (0.8.1) from source at ruby-aaws-0.8.1
Using bundler (1.0.15)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.


これでHerokuに上げられる。。。

このエントリーをはてなブックマークに追加

iPhoneとiPadにBluetoothキーボード欲しいと前から思ってたんですがついに買ってしまいました。ELECOMのTK-FBP017EBK。

[tmkm-amazon]B004I8V6Q2[/tmkm-amazon]

これ、リュウドから出ているコチラ↓の製品に似ていますが、リュウドからELECOMへのOEMなので同じものです。なぜか値段は違いますが。今はELECOMの方が安いです。

[tmkm-amazon]B00405DR8I[/tmkm-amazon]

iPhoneやiPadに最適化されてるということで英字配列のものを買ったんですが、通常使ってるキー配置と異なるので若干戸惑いました。でもキーに書いてある字を打てばそのまま入力されるので問題ありません。実際に慣れたら何も困りませんでしたね。

ハマるとすれば「全角/半角」の切り替えでしょうか。ボタン自体がありません。これは「Command + スペースキー」で切り替えられます。

電源のON,OFFもあるので、電池の無駄な減りを心配することもないし、ペアリングも3つまでOKとこの値段では十分満足できる品だと思います。軽いので折りたたんでバッグに入れてということもできますしね。

以下ギャラリー的な感じです。

箱には折りたたんでない状態で入っていました。


折りたたんだ状態の本体です。たたんで小さくなっているからか、見た目より少し重い気がします。


こちらが開いたところ。全体的に丸みをおびたデザイン。


値段の割には質感はそれなりにあります。


これは付属のケース。合皮なのか、若干臭いです。気になるほどではないですが。


ちゃんと単四電池が付属していました。


iPhoneを置く台がシャキーン☆と出てきます。さすがにiPadは置けませんね。


iPhoneをのっけてみました。


なかなかキマッてます!


iPadと一緒に。


久しぶりにいい買い物ができました。外でiPadを使う機会がどんどん増えそうです。これだとノートPCいらないですね。
[tmkm-amazon]B004I8V6Q2[/tmkm-amazon]

このエントリーをはてなブックマークに追加



RubyのDBアクセスライブラリSequelを使ってみました。

インストール


インストールはgemで一発。


$ sudo gem install sequel
Password:
Fetching: sequel-3.24.1.gem (100%)
Successfully installed sequel-3.24.1
1 gem installed
Installing ri documentation for sequel-3.24.1...
Installing RDoc documentation for sequel-3.24.1…


使ってみる


テーブルを作ってレコードを挿入します。プログラムがあるディレクトリと同じ場所にSQLiteのDBファイルmydb.sqlite3を事前に作っています。

[ruby]
require 'rubygems'
require 'sequel'

DB = Sequel.sqlite('mydb.sqlite3')

DB.create_table :items do
primary_key :id
String :name
Floot :price
end

#データセットを作る
items = DB[:items]

#テーブルに行を挿入
items.insert(:name => 'abc', :price => rand * 100)
items.insert(:name => 'def', :price => rand * 100)
items.insert(:name => 'ghi', :price => rand * 100)
[/ruby]挿入したレコードを取得してみます。実行結果はハッシュ形式で返ってきます。

[ruby]
require 'rubygems'
require 'sequel'

DB = Sequel.sqlite('mydb.sqlite3')

dataset = DB[:items]

#全レコード取得
all_record = dataset.all
all_record.each do |item|
puts item[:id]
puts item[:name]
puts item[:price]
end

#最初のレコード取得
first_record = dataset.first
p first_record

#条件指定
p dataset.filter(:name => 'def').all

p dataset.where{(price >= 50) & (price <= 100)}.all
[/ruby]一瞬ハマったんですが、Sequelにはデータセットを返すメソッドと、SQLの実行結果を(ハッシュ形式で)返すメソッドがあります。

データセットを返すメソッドは一見、SQLを実行しているように見えるため実行結果が返ってくると思ってしまったのですが、実際はそうではありません。このコードを見てください。

[ruby]
require 'rubygems'
require 'sequel'

DB = Sequel.sqlite('mydb.sqlite3')
dataset = DB[:items]

#これは実行結果を返す
p dataset.where{(price >= 50) & (price <= 100)}.all
# =>[{:price=>69.9397131681343, :name=>"abc", :id=>1}, {:price=>52.4180253208447, :name=>"ghi", :id=>3}]

#これはデータセットを返す
p dataset.where{(price >= 50) & (price <= 100)}
# => = 50) AND (`price` <= 100))">
[/ruby]all、each、firstなどは実行結果を返しますが、上記例のようにwhere、filter、selectはデータセットを返します。Sequelで使える他の関数については下記を参照。


データセットを返すメソッド

















SELECT:select, select_all, select_append, select_more

FROM:from, from_self

JOIN:join, left_join, right_join, full_join, natural_join, natural_left_join,
natural_right_join, natural_full_join, cross_join, inner_join,
left_outer_join, right_outer_join, full_outer_join, join_table

WHERE:where, filter, exclude, and, or, grep, invert, unfiltered

GROUP:group, group_by, group_and_count, ungrouped

HAVING:having, filter, exclude, and, or, grep, invert, unfiltered

ORDER:order, order_by, order_append, order_prepend, order_more, reverse,
reverse_order, unordered

LIMIT:limit, unlimited

compounds:union, intersect, except

locking:for_update, lock_style

common table expressions:with, with_recursive

qualification:qualify, qualify_to, qualify_to_first_source

inserting:set_defaults, set_overrides

other:clone, distinct, naked, server, with_sql



実行結果を返すメソッド










SELECT (All Records):all, each, map, to_hash, select_map, select_order_map, select_hash, to_csv

SELECT (First Record):first, last, get, []

SELECT (Aggregates):count, avg, max, min, sum, range, interval

INSERT:insert, <<, import, multi_insert, insert_multiple

UPDATE:update, set, []=

DELETE:delete

other:columns, columns!, truncate



今回はSQLite3を使いましたが、MySQL、PostgreSQLを始めDB2、FireBirdなど見たことないDBとまでつなげるようです。スゴイ!

このエントリーをはてなブックマークに追加

↑このページのトップヘ