query: git

まずはGithubからcloneしてくる。

pre>>
git clone https://github.com/Homebrew/linuxbrew.git ~/.linuxbrew
<<--

あとは .zshrc などで

sh>>
export PATH="$HOME/.linuxbrew/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/.linuxbrew/lib:$LD_LIBRARY_PATH"
<<--

以上で完了。使い方は homebrew とだいたい同じ

posted by genki genki on Sun 11 May 2014 at 20:40 with 0 comments
posted by genki genki on Sat 5 Apr 2014 at 23:31 with 0 comments

のメモ

sh>>
git reset --hard
git merge -s ours origin master
git push -f origin master
<<--

posted by genki genki on Wed 16 Oct 2013 at 17:58 with 0 comments

top コマンドでいうところの %sy、つまりカーネルプロセスによる
CPU使用率が高まってきた場合、以下の様な方法で原因を調査することができます。

sh>>

strace -c -p

<<--

CPU使用率が高くなっているプロセスのPIDを指定します。
これにより、指定のプロセスから呼び出される system call の回数や消費CPU時間の集計が始まります。
10〜30秒程度たったら、Ctrl+Cで集計を終了します。
そうすると、以下の様な集計結果が得られます。

pre>>
% time seconds usecs/call calls errors syscall


100.00 1.470463 63933 23 munmap
0.00 0.000000 0 12 read
0.00 0.000000 0 24 write
0.00 0.000000 0 23 mmap
0.00 0.000000 0 24 rt_sigprocmask
0.00 0.000000 0 6 writev
0.00 0.000000 0 36 gettimeofday
0.00 0.000000 0 6 getppid
0.00 0.000000 0 18 clock_gettime
0.00 0.000000 0 12 epoll_wait
0.00 0.000000 0 12 epoll_ctl
0.00 0.000000 0 12 ppoll


100.00 1.470463 208 total
<<--

munmap 遅いですね。

それから、munmap の内部のどこが遅いのか、更に細かい粒度で原因をしらべるには、ftrace が使えます。

ftrace が利用可能かどうかは以下のようにして調べられます。

sh>>
cat /proc/sys/kernel/ftrace_enabled
1
<<--

ftraceはソースコードで配布されているので、以下から git clone してきます。

sh>>
cd /usr/local/src
git clone git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git
cd trace-cmd
make
make install
<<--

例えば、以下のようにls コマンドを実行してkernel関数がどのように呼ばれているかを調べられます。

sh>>

trace-cmd record -p function_graph ls

<<--

実行が終了するとカレントディレクトリに trace.dat が作成されます。
これを

sh>>
trace-cmd report | less
<<--

のようにして確認します。

posted by genki genki on Sun 25 Aug 2013 at 00:20 with 0 comments

Are there the servers at home, or the on-premise servers at office?
If no, the mosh is your best friend and this article is just a waste of time.

But if yes, the Rosh might help your life.
Rosh is the roaming shell like the mosh.
But it can track the server even if its IP address change.
It reconnects to the server by resolving the hostname each time.

You can use the local DNS such as the dnsmasq for your on-premise servers so that you can resolve the server by same name no matter where you are.

The usage of Rosh is simple, like this

sh>>
gem install rosh
rosh yourserver.com session-name
<<--

It installs the nested GNU screen session remotely at the given server.
You can omit the session-name, "default" is used as the name.
Then, Rosh connects to the session via the SSH.

If you want to detach the session, type Ctrl+t d.
On the second time you connect, Rosh reuses the remote session.

Requirements

  • SSH
  • Ruby at your machine (2.0.0 or later. Sorry, I don't have 1.9.x or older)
  • GNU screen at remote servers
posted by genki genki on Thu 22 Aug 2013 at 17:16 with 0 comments

git でリモートに push したコミットが間違いだったと気づいた場合、

pre>>
git reset --hard <戻したいコミット>
<<--

で一旦手元の環境を正しい状態に戻し、あとは

pre>>
git push -f origin HEAD:master
<<--

でリモートに反映さればok

posted by genki genki on Fri 9 Aug 2013 at 21:35 with 0 comments

特に環境の変化は無かったのですが、突然 gem search が応答しなくなったので原因を調べてみたところ、gem sources を

にしたら直った。

posted by genki genki on Wed 7 Aug 2013 at 03:57 with 0 comments

昔何かをしようとしてforkしたリポジトリの内容を、
現在の upstream の内容でリセットしたい場合、以下のようにすると良いようです。

pre>>
git remote update
git reset --hard upstream/master
git push origin +master
<<--

posted by genki genki on Sat 6 Jul 2013 at 16:08 with 0 comments

MontainLionではgccがllvmベースに切り替わったようで、古き良きgccはお亡くなりになったようです。
もうちょっとお世話になりたいので、homebrewを使ってgcc-4.2を使えるようにします。

pre>>
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
<<--

これで gcc-4.2 で旧来のgccにアクセスできます。
ちなみにg++-4.2もあるよ。

あとはこれを使って kyoto-cabinet をインストールしてみます。

pre>>
brew install kyoto-cabinet --use-gcc
<<--

これでok

posted by genki genki on Thu 9 Aug 2012 at 17:42 with 0 comments

久々にrubygemsをリリースしました。

Rack::Requestで検索エンジンのbotからのアクセスかどうか判定します。

ruby>>
request.bot? #=> true or false
<<--

これだけ。

githubで検索してみたら、個別に実装している例がたくさん見つかったわりに、単体で切り出されているものがあまりなさそうだったので作ってみました。

posted by genki genki on Sun 25 Dec 2011 at 06:00 with 0 comments

brew upgrade groonga しようとしたら、以下のようなエラーが出てきました。

pre>>
Error: undefined method `include?' for nil:NilClass
<<--

これはbrewのバージョンが古いのが原因らしい。

pre>>
cd brew --prefix/Library/Contributions/examples
git clean -n
rm brew-upgrade.rb
<<--

して再挑戦したら上手く動きました。

posted by genki genki on Sun 4 Dec 2011 at 02:22 with 0 comments

新しい環境に移行すべく、ruby-1.9.3, rails-3.1.3 で作ったwebアプリをherokuにデプロイしてみたりしています。
いくつか注意点があったのでメモ。

application.css isn't precompiled

手元の環境で動いていても、いざデプロイすると以下のようなエラーが出ることがあります。

pre>>
ActionView::Template::Error (application.css isn't precompiled):
<<--

事前に bundle exec rake assets:precompile してから生成物をgitに含めてデプロイすればいいのですが、自動的に生成して欲しい場合には、
config/environments/production.rb

ruby>>
config.assets.compile = true
<<--

を指定します。これで勝手に生成してくれます。

Could not find a JavaScript runtime

これもassetsの生成に関する問題なのですが、jsファイルを生成するにあたって、jsのランタイム環境が必要になります。
これもherokuの環境でやるためには、Gemfile に以下を追加します。

ruby>>
group :production do
gem 'therubyracer-heroku'
end
<<--

これでok

posted by genki genki on Thu 1 Dec 2011 at 04:07 with 2 comments

slimの記法を見やすくカラーリングしてくれるvimプラグインはこちらです

git clone して ~/.vim 以下にコピーすればokです。

posted by genki genki on Thu 1 Dec 2011 at 03:46 with 0 comments

普段はPostgresqlのサイトで配布されているMac用のインストーラを使っているのですが、どうやらLionはまだサポートされていないようです。

ということで、homebrewを使ってインストールすることにしました。

Homebrewをインストール

以下を実行すればok

pre>>
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
<<--

あとは

pre>>
brew install postgresql
<<--

でインストールし、以下でdbを初期化します。

pre>>
initdb /usr/local/var/postgres
<<--

最後に、自動起動の設定を行います。

pre>>
cp /usr/local/Cellar/postgresql/9.0.4/org.postgresql.postgres.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/org.postgresql.postgres.plist
<<--

brewでインストールした場合、postgresユーザは作成されないようです。
$USERがスーパユーザとして作成されます。

posted by genki genki on Thu 18 Aug 2011 at 17:56 with 0 comments

kyotocabinet用のRubygemがbuildできない状態になっていたので、
配布元のkyotocabinet-rubyからgemを書き起こしました。

Gemfile

ruby>>
gem 'kyotocabinet-ruby', '~> 1.27',
:require => 'kyotocabinet'
<<--

posted by genki genki on Mon 1 Aug 2011 at 04:10 with 0 comments

ActiveRecordを使っている場合、
YamlDb
を使うと比較的簡単にデータの移行ができるようです。
script/consoleあたりから、

ruby>>
YamlDb.dump "/path/to/data.yml" # dump
YamlDb.load "/path/to/data.yml" # load
<<--

という感じに使えます。structureは作ってくれないので、migrationなどであらかじめ用意しておきます。

posted by genki genki on Mon 20 Jun 2011 at 16:04 with 0 comments

route53 は、名前のとおり
AmazonのRoute 53 を使うためのCLIユーティリティです。
これを使えば面倒な設定が簡単になります。

例) CNAMEレコードの中身を変更する

sh>>
route53 --zone xxx.xxx. -g --name "*.xxx.xxx." --type CNAME --values xxx-xxx.ap-xxx-1.elb.amazonaws.com.
<<--

今までスルーしてましたが、Route53を使えば
ELBでZone Apexが使えるようになったので非常に面白いです。

posted by genki genki on Sun 19 Jun 2011 at 23:03 with 0 comments

Rails-2.3.11用のExceptionNotificationプラグインは以下にあるようです (via
@a_matsuda

基本的にはこれを script/plugin install -r 2-3-stable
すれば良いのですが、ConsiderLocalの実装にバグがあるので
直す必要があります。

具体的には、以下のファイルの self.included の場所をConsiderLocalモジュールの直下に移動します。

あとはREADME通りに設定して、ConsiderLocalをApplicationControllerからincludeすればok

posted by genki genki on Sat 11 Jun 2011 at 06:46 with 0 comments

GitリポジトリのRailsプラグインをインストールするときに、
標準では master ブランチがインストールされますが、
特定のブランチの内容をインストールしたい場合には、以下のように -r オプションを使用します。

sh>>
script/plugin install --force https://github.com/rails/exception_notification.git -r 2-3-stable
<<--

上記の例では 2-3-stable ブランチをインストールします。

posted by genki genki on Sat 11 Jun 2011 at 05:18 with 0 comments

古いRailsアプリをBundler仕様にする場合、

ruby>>
config.gem "foo",
:version => "0.0.1",
:lib => "bar",
:source => "http://gems.github.com"
<<--

と等価なGemfileの記述方法は

ruby>>
source "http://gems.github.com"
gem "foo", "0.0.1", :require => "bar"
<<--

で良いようです。バージョン指定をしない場合は第二引数を省略可。

posted by genki genki on Wed 25 May 2011 at 08:26 with 0 comments

monk-glue-0.0.1
に含まれている Monk::Glue::Reloaderには微妙な
バグがあり、developmentモードでソースコードを更新したときに
自動リロードが上手くかからない事があるようです。

Rack::Reloaderの問題かと思っていたのですが、
調べてみると Monk::Glue::Reloader の処理に問題があることがわかりました。

reload!メソッドを以下のように修正したところ正常に動作することが確認できました。

ruby>>
def reload!
expanded_loaded_features = $LOADED_FEATURES.map do |path|
File.expand_path(path)
end
hash = Hash[expanded_loaded_features.zip($LOADED_FEATURES)]
deletes = []
files.each do |file|
if path = hash[File.expand_path(file)]
$LOADED_FEATURES.delete(path)
end
end
<<--

$LOADED_FEATURESに絶対パスと相対パスが混在していることがあるようで、
その場合にうまく処理できていないようでした。

$LOADED_FEATURESは全て絶対パスで保持するようにしたほうが良い気がします。

posted by genki genki on Fri 22 Apr 2011 at 15:27 with 0 comments

DHHがGithub上でrubygemsがデフォルトで--no-ri --no-rdocになるように
しようという
運動をしている
ようです。
やっぱみんなそう思うよね!

ss

すでに結構賛同者がいる模様。

訂正
git request-pull はメールを送信する機能は無いらしい。

http://rubygems.org にいけば rdoc は読めるし、デフォルトですべての環境にインストールされる必要なんてないよね。

Let's join!

posted by genki genki on Fri 25 Feb 2011 at 18:40 with 0 comments

I added a new feature to irb_rocket.
It's a simple utility for ease of daily irb use.
Have you ever felt annoying for typing left cursor to enclose exprs by parens to be receiver like this?

ruby>>
irb> 1 + 2 + 3 # Oh, I want to call "to_s"
irb> (1 + 2 + 3 # back to the head
irb> (1 + 2 + 3).to_s # return to the tail
<<--

I've experienced stuffs like this very often.
Very annoying.

So I added the new feature named "irb_dollar"
Its usage is simple, like this.

ruby>>
irb> require "irb_dollar"
irb> 1 + 2 + 3 $ to_s #=> "6"
<<--

Nice!

You can use "$" sign to make the left hand statement be receiver by installing irb_rocket version that is newer than 0.2.0

Enjoy :)

Links

posted by genki genki on Mon 3 Jan 2011 at 18:56 with 0 comments

まずはローカルブランチを削除して

pre>>
% git push origin :hoge
<<--

でok。

posted by genki genki on Mon 22 Nov 2010 at 20:11 with 2 comments

手元のファイルは残しておきたいけれど、インデックスからは削除したいという場合には、以下のように --cached オプションをつけるとうまくいきます。

pre>>
% git rm --cached /path/to/files
<<--

ディレクトリをインデックスから削除する場合は -r オプションを忘れずに。

posted by genki genki on Tue 15 Jun 2010 at 01:52 with 0 comments

ざっと調べてみた感じでは

posted by genki genki on Mon 3 May 2010 at 09:58 with 4 comments

普段のコミットログから作業日報的なものを生成したい場合、
以下のようなコマンドでそれらしいものが出力できます。

pre>>
% git log --author=takiuchi --format="%ad %s" --date=short
<<--

posted by genki genki on Wed 21 Apr 2010 at 08:46 with 0 comments

git svnを使っていると、何度conflictを解決しても SVNに
"Your file or directory '***' is probably out-of-date"
と冷たく拒まれることがあります。
これを解決するには、XXXXにSVNのHEADに相当するコミットハッシュを指定して以下を実行します。

pre>>
% git checkout -b merging
% git checkout trunk
% git reset --hard
% git svn fetch
% git rebase trunk merging # コンフリクトするので解決してコミット
% git checkout -b merging2
% git checkout trunk
% git merge merging2
% git svn dcommit
<<--

結構面倒です。git-svnが賢くなってくれることに期待します。

posted by genki genki on Thu 15 Apr 2010 at 03:14 with 0 comments

git svn rebaseを行って conflict が発生した場合、
(no branch) になってしまいます。

この場合、手動でconflictを解決してcommitしたあと、

pre>>
% git log -1 --pretty=oneline
<<--

でコミットのハッシュを確認し、git checkoutでmerge先のブランチに
移動してから git merge <commit hash> すればokのようです。

posted by genki genki on Wed 14 Apr 2010 at 08:16 with 2 comments

macportsでインストールしたパッケージのvariantsを後で変更したくなることがありますが、そのような場合には --enforce-variantsオプションが利用できます。

例)

pre>>
% sudo port upgrade --enforce-variants git-core +svn
<<--

posted by genki genki on Mon 29 Mar 2010 at 05:38 with 0 comments

git submodule update を行ったときに

pre>>
fatal: reference is not a tree: dfae...
<<--

というようなエラーが出ることがありました。
これを解決する方法は、
submoduleのディレクトリに移動し、

pre>>
% git reset --hard
<<--

で親ディレクトリに戻り、コミット & push

あとは普通に git submodule update をすればok.

posted by genki genki on Sun 28 Mar 2010 at 18:44 with 0 comments

git svnを以下のような構成で使っていた時に、git svnのリモートトラッキングブランチのpointerがtrunkに代わってしまい、いつのまにかブランチにcommitしたつもりのものがtrunkにcommitされるという事があり、困りました。

ss

gitから.gitにpushしたものを git-svnからpullしたタイミングで発生するようです。
解決策としては、git-svnでgit pullをせずに、

pre>>
% git fetch remote-name
% git merge --no-ff remote-name/branch-name
% git svn dcommit
<<--

でok. アクシデンシャルなdcommitを防ぐには、--dry-runが便利です。

posted by genki genki on Fri 5 Mar 2010 at 11:16 with 1 comment

git-svnを使っていて、git svn dommitするときに、
掲題のようなエラーメッセージが出た場合、リモートリポジトリとローカルリポジトリのトラッキングブランチの同期が取れていない事が原因かもしれません。

例えば、SVNリポジトリ上で削除されているブランチが、ローカルのgitリポジトリに残ってしまっている場合、以下のようにリモートトラッキングブランチを削除する事で問題を解決できる可能性があります。

pre>>
% git branch -D -r
<<--

posted by genki genki on Fri 5 Mar 2010 at 02:38 with 0 comments

しばらく前にインストールしていた git-1.6.0.4 には無かった機能なのですが、最近のGit (1.6.4.4で確認) には git svn branch というSVNリポジトリのブランチを作成する機能がついているようです。

pre>>
% git svn branch
<<--

これで指定したbranchがリモートで作成されます。
あとは、こんな感じでリモートトラッキングブランチをチェックアウトすればOK.

pre>>
% git checkout -b --track
<<--

便利ですね。

posted by genki genki on Tue 8 Dec 2009 at 07:38 with 2 comments

しばらくGemを作ってなかったので気がつかなかったのですが、
Gem作りを取り巻く環境が結構変わっているようですね。

まず、newgemやcutagem, hoeのようにgemのひな形を作ってくれる
jeweler
というtoolが結構使われているようです。これはgithubにインテグレートされていて非常に便利です。

githubはちょっと前からgemをホストするgemリポジトリサービスをやめてしまったようで、代わりに
Gemcutterを使うようになっています。
jewelerを使う事で、gemcutterやrubyforgeにgemをpushする事ができます。

posted by genki genki on Sat 17 Oct 2009 at 09:15 with 0 comments

Railsにおけるrestful_authenticationやMerbのビルトイン認証機構に比べると、Sinatraには「とりあえずこれを使っておけ」というような認証ライブラリが無いような気がします。強いて言えばRack::Auth::Basicかな。ちょっと機能不足のように感じます。
という事で、Sinatraで使える認証用ライブラリをリストアップ。

その他、関連する面白そうなもの。

posted by genki genki on Sat 10 Oct 2009 at 17:58 with 0 comments

ちょっと前になりますが、Snow LeopardでTerminalCopyOnSelectが動かないというレポートを頂いておりました。
まだSnow Leopardへの移行ができていなくて放置状態だったのですが、
Nyahoさんがgithubでpull requestを送ってくれたのでmergeしてみました。

TerminalCopyOnSelect.bundle.zip

手元の環境では動作検証できていないのでSnow Leopardで動くかどうかは未確認ですが、環境をお持ちの方はお試しあれ。

See Also

posted by genki genki on Wed 23 Sep 2009 at 10:10 with 1 comment

gitリポジトリに間違って追加してしまったファイル等を完全に消去する方法を紹介します。

pre>>
% git filter-branch -f --index-filter 'git update-index --remove "filename"' HEAD
% git push --force
<<--

ディレクトリを削除したい場合は、ディレクトリの中身のファイルを1つずつ全て削除します。

ポイント

  • 上記のコマンドはワーキングディレクトリのROOTで実行する必要があります。
  • "filename"はワーキングディレクトリのROOTからの相対パスで記述します。
  • "-f" オプションはつけておいた方が良いです。
posted by genki genki on Sun 30 Aug 2009 at 08:44 with 0 comments

gitを使ってリモートリポジトリからfetch&mergeする場合、
git pullを使う事ができます。
git pullは

pre>>
% git pull origin master
<<--

のようにリモート名とブランチ名(正確にはrefspec)を指定して使うのですが、以下のような設定を行うと、これを省略できます。

.git/config

pre>>
[branch "master"]
remote = origin
merge = master
<<--

posted by genki genki on Thu 27 Aug 2009 at 16:19 with 0 comments

Sinatraのインラインテンプレート(__END__以降に記述するテンプレート)が真っ青になって見難かったので、インラインテンプレートだけHamlとしてシンタックスハイライトするようにしてみました。

Before

ss1

After

ss2

見やすいですね。

INSTALL

Vimに
sintax/haml.vim
などをインストールした上で、以下のような設定を記述します。

.vim/ftdetect/ruby.vim

pre>>
" Sinatra
au BufNewFile,BufRead *.rb set filetype=ruby | unlet b:current_syntax | syn include @rubyData syntax/haml.vim | syn region rubyDataHaml matchgroup=rubyData start="^END$" keepend end="%$" contains=@rubyData | syn match inFileTemplateName "^@@\w+" containedin=rubyData | hi def link inFileTemplateName Type
<<--

See Also

posted by genki genki on Sat 22 Aug 2009 at 20:44 with 0 comments

最近Twitterクライアントとして
Termtter
を使っています。
適度に見づらいのが、かえって邪魔にならなくて良い感じです。

発言中のURLを開くときに、$ab のような識別子を指定して開くプラグインを作りました。

open.rb

pre>>
USAGE

open $dq
open 1st URI in $dq
open $dq 2
open 2nd URI in $dq
<<--

posted by genki genki on Sat 15 Aug 2009 at 03:53 with 4 comments

Today, there are many web application frameworks such as RoR, Merb, Ramaze, Sinatra and so on.
And then, most of them have original plugin system respectively.
It opens curtain of the tragedy entitled "Combinatorial explosion" upon plugin developers.

Just think.
FW hackers tend to be opinionated.
It is obvious. Because it is the source of energy of his/her great works.
But it is a reason of the tragedies as well.
Is that a fate of us? It would never be changed?

No, it isn't.

There is a hope we already have. Its name is Rack.
Rack is called meta-framework. Most of FWs exploit it today.
It saved tons of time of FW hackers to make original HTTP interface for their FW.
It must happen for also plugin developers.

I think what they need is not another meta-framework.
meta-framework is for FW hackers.
Abstract framework is for plugin developers.

I began to make an abstract framework on github.
Here is.

http://github.com/genki/agnostic/tree/master

If you have idea, please let me know.

posted by genki genki on Thu 23 Jul 2009 at 18:00 with 0 comments

Rub
はHaml的なEndless Rubyを気軽にはじめるために作ったGemです。
GitHubをsourceに追加して以下のようにインストールできます。

pre>>
% sudo gem install genki-rub
<<--

ソースコード
を見るとわかりますが、非常に短いので現時点では、if文の複数行にまたがる条件文などには対応していません。気が向けばそのうち対応するかもしれません。

Rubを使ってSinatraアプリを作るには以下のようにします。

config.ru

ruby>>
require "rubygems"
require "rub"
rub "app.rb"
run Sinatra::Application
<<--

app.rb

ruby>>
require "sinatra"
require "dm-core"
require "haml"

DataMapper::setup(:default, ENV['DATABASE_URL'] || 'sqlite3://db.sqlite3')

class Post
include DataMapper::Resource
property :id, Serial
property :content, Text
auto_upgrade!

get "/" do
@posts = Post.all(:order => [:id.desc])
haml :index

post "/" do
Post.create(params)
redirect "/"

END
@@ index
%h1 Hello, Sinatra!
%ul

  • @posts.each do |post|
    %li= post.content
    %form{:method => :post}
    %textarea{:name => :content}
    %input{:type => :submit, :value => "Post"}
    <<--

面白い点として、
Endless RubyでもVimやこのブログのSyntaxハイライトはちゃんと機能してくれます(Emacs使いのレポート求む)

必要なファイルはこれだけです。あとはおもむろにshotgunしましょう。

pre>>
% shotgun
== Shotgun starting Rack::Handler::Mongrel on localhost:9393
<<--

あとはhttp://localhost:9393にアクセスするだけです。
app.rbを適当に書き換えてリロードすると、変更が反映される事が確認できます。

shotgunは
pre>>
% sudo gem install shotgun
<<--

でインストールできます。

posted by genki genki on Mon 20 Jul 2009 at 04:55 with 2 comments

Gemを作るのが面倒になってきたので、githubから直接requireできたら楽になるかもしれないと思い、試してみました。

ruby>>
def git(uri, sha1, options = {})
require "tmpdir"
basename = File.basename(uri)
outdir = File.join(Dir.tmpdir, basename, sha1)
unless File.exist?(outdir)
sh = proc{|command| IO.popen("#{command} 2>&1"){|io| io.read}}
sh["git clone #{uri} #{outdir}"]
sh["cd #{outdir}; git checkout #{sha1}"]
end
$:.unshift File.join(outdir, 'lib')
require options[:require_as] || basename.split(/.git$/)[0]
end
<<--

Dir.tmpdirを使ってOSのテンポラリディレクトリの下にリポジトリをクローンしてきて、指定したリビジョンをcheckoutし、LOAD_PATHに"lib"を加えて、リポジトリ名のファイルをrequireしています。

意外と普通にgemの代わりに使える感じです。

posted by genki genki on Thu 16 Jul 2009 at 17:34 with 0 comments

Gist
はちょっとしたコードの切れ端を貼付けておくのに便利です。
先日紹介したEndless RubyのコードもGist上でのみ公開されていました。
Gemを作るまでもないコードをGistに貼付けて、そのままrequireして使えると便利そうだと思ったので、試してみました。

ruby>>
module Gist
module_function
def require(id, sha1 = "HEAD")
Kernel.require "open-uri"
gist = "http://gist.github.com"
eval(if sha1 == "HEAD"
open("#{gist}/#{id}.txt").read
else
Kernel.require "tmpdir"
cache = File.join(Dir.tmpdir, "gist-#{id}-#{sha1}")
if File.exist?(cache)
open(cache).read
else
open("#{gist}/raw/#{id}/#{sha1}") do |i|
code = i.read
open(cache, "w"){|o| o.write code}
code
end
end
end)
end
end

Gist.require("148479", "a59ea9ec3e865bafd1e4413b43b6ccb7a38d76fc")
#=> Hello, world!
<<--

Hash値で内容の変更が検出可能なので、md5のチェックサムを信用している人にとっては同程度の安全性で利用できそうです。

posted by genki genki on Thu 16 Jul 2009 at 16:57 with 0 comments

GoogleDocs OutlinerはGoogleDocsを使って長文を書く人のためのブックマークレットです。

ss

インストール

以下のリンクをブックマークに登録してください。

GoogleDocs Outliner

使い方

  • Googleドキュメントを開いて、ブックマークレットを実行します。
  • 上図の右側にでているようなアウトラインが表示されます。
  • アウトラインは内容の変化にあわせて自動的に更新されます。
  • "GoogleDocs Outliner"をクリックすると開閉が切り替わります。
  • [X]ボタンをクリックするとアンインストールされます。

動作環境

Firefox 3.0でのみ動作確認をしています。

ライセンス

ソースコードは http://gist.github.com/132009 にあります。
著作権表示を変更しない限り改変、再配布などは自由に行ってください。
本ブックマークレットに関するお問い合わせは http://twitter.com/takiuchi まで。

posted by genki genki on Thu 18 Jun 2009 at 19:22 with 0 comments

gitを使っていてローカルでつけたタグを、リモートにpushする場合は、

pre>>
% git push --tags
<<--

逆に、リモートのタグ情報をローカルに持ってくる場合は

pre>>
% git pull --tags
<<--

これでok

posted by genki genki on Wed 20 May 2009 at 12:20 with 0 comments

行末に|を記述するHamlの複数行記法が書きにくかったので、
Vimで整形出来るようにするための外部プログラムを作ってみました。

http://gist.github.com/112140

pre>>
set fp=/path/to/haml_formatter.rb
<<--

して、visualモードで選択してgqで整形です。

posted by genki genki on Sun 17 May 2009 at 07:32 with 0 comments

dm-is-remixable
は、Commentなどの複数のリソースにまたがって共用されるがちなリソースをDRYにするためのDataMapperプラグインです。

しかし、Validationのためのコードを記述しても、正常に動作しないという問題がありました。これは、以下のようにすれば解決できます。

ruby>>
module Commentable
include DataMapper::Resource
is :remixable, :suffix => "comment"

(..snip..)

def self.included(base)
base.class_eval do
validates_present :message
end
end
end
<<--

See Also

posted by genki genki on Tue 5 May 2009 at 01:54 with 0 comments

例えばJavaScriptだと"\u3000"と書けば良かったのですが、少なくともRuby-1.8系ではこれに相当する記法が無さそうだったので、いつも困ってました。
色々調べてみた結果、以下のようにすれば良さそうです。

ruby>>
[0x3000].pack("U") == " " #=> true
<<--

長い事迂回していた問題だったのでスッキリしました :-)

Special Thanks

  • @yukiko pack("U")が使えそうという情報をありがとうございます。
posted by genki genki on Fri 24 Apr 2009 at 06:20 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
memogitrubygempluginsvnsinatravimrailstipsauthAWSbookmarkletbrewbundlerDMfixFWgistgithub
Comments rssrss
https://master-vodoved.ru/nastennye-gazovye-kotly-otopleniya/page/2 https://master-vodoved.ru/nastennye-gazovye-kotly-otopleniya/page/2: Смонтированные системы и выполненные работы: В сме... 05/02 18:00
https://www.dokuclinic.com/sac-ekimi https://www.dokuclinic.com/sac-ekimi: We stumbled over here from a different page and th... 05/02 12:14
https://xn--krken21-bn4c.com https://xn--krken21-bn4c.com: Как отличить поддельный Kraken: типичные ошибки ве... 05/02 00:52
https://u2vyzx.lomza.pl https://u2vyzx.lomza.pl: در جمع‌بندی کلی برای کسایی که دنبال پیش‌بینی... 05/01 17:52
https://xn--krken21-bn4c.com https://xn--krken21-bn4c.com: Как отличить настоящий маркетплейс от подделки Kra... 05/01 12:20
https://example.com/xkkpsk https://example.com/xkkpsk: Great blog you have here.. It's difficult to find ... 05/01 09:31
https://onlinemo.ir https://onlinemo.ir: جمع‌بندی برای اون گروه از کاربرا که سیستم‌ها... 05/01 00:58
https://xn--mgmarkt9-9db.com https://xn--mgmarkt9-9db.com: Как обезопасить MEGA: настройка менеджера паролей ... 04/30 20:14