merb.jpを取得してmerb wiki for japaneseを開始しました

なんかmerbが0.5だったときのエントリが地味にはてブされていて、しかもgoogleでググったらそのエントリがかなり上位に来てしまっていたので、今のうちにmerbを本格的に取り扱おうと思い、merb.jpを取得しました。
http://wiki.merb.jp/
今後merbに関する情報はこっちを中心に書いて、ブログにはちょっとしたメモ程度を書いて行こうと思います。

gyazoはてなフォトライフ版でもpostした画像をクリップボードにコピーするようにしてみた

はてなフォトライフにpostするgyazoを書いた on Mac OSX - Post-itみたいなで書いたものをちょっと改造してみた。

改造箇所

  • idファイルは不要なので削除
  • オリジナルサイズの画像URLをクリップボードにコピー
  • オリジナルサイズの画像URLを開く

ソース

#!/usr/bin/env ruby

require 'rubygems'
require 'atomutil'

tmpfile = "/tmp/image_upload#{$$}.png"
imagefile = ARGV[1]

if imagefile && File.exist?(imagefile) then
  system "sips -s format png #{imagefile} --out #{tmpfile}"
else
  system "screencapture -i #{tmpfile}"
end

imagedata = File.read(tmpfile)
File.delete(tmpfile)

atom_uri = 'http://f.hatena.ne.jp/atom/'
post_uri = atom_uri + 'post'
userid = '****'
pass = '****'

entry = Atom::Entry.new({
  :title => 'post by gyazo',
  :updated => Time.now,
  :content => Atom::Content.new { |c|
    c.body = [imagedata].pack('m')
    c.type = "image/png"
    c.set_attr(:mode, "base64")
  },
})

auth = Atompub::Auth::Wsse.new :username => userid, :password => pass
client = Atompub::Client.new :auth => auth

res = client.create_entry(post_uri, entry, "post by gyazo")

# アップした画像のURIを作成する
head = userid.slice(0,1)
date = res.slice(-14,8)
num = res.slice(-14,14)
url = "http://img.f.hatena.ne.jp/images/fotolife/#{head}/#{userid}/#{date}/#{num}_original.png"

system "echo #{url} | pbcopy"
system "open #{url}"

gyazo.app/Contents/Resources/scriptの中身をこれに置き換えて、Mac標準のRubygemsでatomutilをインストールすると使えます。
もしサイズの関係でオリジナルサイズを使用したくない場合は、最後辺りのurlにある"_original"を削除してください。

変更したい点

画像のURLの取得の仕方がとても気に入らない。
はてなAtomAPIはてなが拡張しているものなので、atomutilではうまく扱えなかった。この辺ちゃんと書いてやればきれいになるんだろうけど、休憩時間にちょっぴり時間を使って書くつもりだったので今回は見送り。
いつかもっときれいな形に書き直したいなー。

11/13 Update

コメントにて id:edvakfさんに指摘されて気づいたのですが、画像をpngで保存しているのにjpgで送ってました。なんでシラフで弄っていたときにも気づかなかったんだろう......。
id:edvakfさん、ご指摘ありがとうございます。

Apache 2 + mod_dav_svnでSVNParentPath以下の特定レポジトリにのみBasic認証を噛ます方法

アホみたいに1時間ぐらい時間をつぶしてしまったので、忘れないようにメモメモ。

構造

  • repos
    • project1
    • project2

この状態でproject2にのみBasic認証を噛ます。 http://svn.hogehoge.jp/ にアクセスすると repos 以下のレポジトリ一覧が見れて、ここには大本のBasic認証を噛ましてある。でも特定レポジトリにのみユーザーを追加したい、という場合。

Locationを増やす

<VirtualHost *:80>
  ServerName svn.hogehoge.jp
  <Location />
    DAV svn
    SVNListParentPath on
    SVNParentPath /opt/svn/repos
    AuthType Basic
    AuthName "Authorization Realm"
    AuthUserFile /opt/svn/repos/.htpasswd
    Require valid-user
  </Location>
  <Location /project2>
    AuthType Basic
    AuthName "Authorization Zone"
    AuthUserFile /opt/svn/repos/.htpasswd.another
    Require valid-user
  </Location>
</VirtualHost>

Locationの中身は / で終わらせない。終わらせるとやっかいなことになる。
DAV svnやSVNPathを書かない。書くとやっかいなことになる。
AuthNameを変更しておいた方がどっち読んでいるのか分かりやすいと思って変更している。特に他意はない。
project2 のみ読み書きできるユーザーを /opt/svn/repos/.htpasswd.another に追加する。ただこの方法だと大本の .htpasswd と .htpasswd.another に重複しているユーザーが出てくるはずなのでちょっと管理しづらいなー、とか思っているところ。仕方がないのかな。

iPhotoからGoogle Picasaに写真をアップロードする

なんかあっさり出来たのでエントリ書くまでもないかなー、とか思いつつ手順を残す。

Picasa Web Albums Uploaderのダウンロード

http://picasa.google.co.jp/intl/ja/web/mac_tools.htmlからdmgファイルをダウンロードしてくる。

Picasa Web Albums Uploaderのインストール


dmgファイルをマウントするとPicasaWebAlbumsUploader.mpkgが入っているので、こいつを実行して手順通りに進めていく。基本はすべて「続ける」でOKだと思う。

iPhoto起動

インストールが終了すると /Applications ディレクトリに Picasa Web Albums Uploader.appが入っているけど、こいつを無視してiPhotoを起動する。

書き出し


おもむろにメニューのファイルから「書き出し」を選ぶ。
出てきたウィンドウの"Picasa Web Albums"を選ぶとIDとPassを入力するよう促される。何度も入力したくなければ"Remember password in keychain"にチェックを入れる。

アルバム情報の入力


新規アルバムを作成する際は"New Album"で、既存アルバムに追加する際は"Existing Album"を選択。TitleとDiscriptionを適当に埋める。公開の場合は"Public Album"を、非公開や特定の人にのみ見せたい場合は"Unlisted Album"を選択。写真サイズを適当にリサイズしたければ"Scale large photos for..."のリストをほげほげいじる。

複数svnレポジトリをgit-svnで使用する

今までdotfilesの類いをcodereposにコミットしていたのですが、codecheck.inにもコミットしたくなりました。でも複数svnレポジトリをトラックとかできんの?ということでとりあえずmanpageを見る事に。

man git-svn

Specify the [svn-remote ""] section to use, this allows SVN multiple repositories to be tracked. Default: "svn"

git-svn(1)

という事が書いてあったので、できそうな気がします。

git-svn initしてみる

何も考えずにgit svn initしてみよう。

git svn init http://hogehoge.com/
git svn init http://fugafuga.com/ --svn-remote another-svn

この時点で .git/config を覗いてみる。

[svn-remote "svn"]
url = http://hogehoge.com/
fetch = :refs/remotes/git-svn

[svn-remote "another-svn"]
url = http://fugafuga.com/
fetch = :refs/remotes/git-svn

2種類の設定ができている。でもfetchの部分がどちらもgit-svnなので、ちょっと問題あり?

git-configで設定を弄る

という訳でconfigファイルを設定する。直接変更した方が早い気もするけど、git-configを使ってみる。

git-config --unset svn-remote.another-svn.fetch
git-config --add svn-remote.another-svn.fetch :refs/remotes/another-svn

この時点で .git/config を覗いてみる。

[svn-remote "svn"]
url = http://hogehoge.com/
fetch = :refs/remotes/git-svn

[svn-remote "another-svn"]
url = http://fugafuga.com/
fetch = :refs/remotes/another-svn

これで良さげ?

git-svn fetch

設定を終えたのでgit-svn fetchで取ってきてみる。

git-svn fetch anotehr-svn

fetchの後ろに設定した名前を指定すると、そこを使うっぽい。デフォルトではsvnなので、何も指定しなければsvnを指定したのと同じらしい。

git-svn dcommit

同様に後ろに --svn-remote で設定した名前を指定すればいい。

git-svn dcommit another-svn

Subversionを$HOME以下にビルドする(またはmod_dav_svnをビルドしない)

管理権限を持っていないサーバでsvnを使いたいなー、とか考えていたのですが、どうもsvnが入っていないご様子。なのでsvnを$HOME以下にビルドしようと考えました。

subversion-1.5.2.tar.gzとsubversion-deps-1.5.2.tar.gzの取得

wget http://subversion.tigris.org/downloads/subversion-1.5.2.tar.gz
wget http://subversion.tigris.org/downloads/subversion-deps-1.5.2.tar.gz
tar xvf *.tar.gz

Subversionと、依存パッケージ詰め合わせを持ってきて展開する。subveresion-1.5.2といディレクトリができる。

configure

./configure --prefi=$HOME/local --without-apxs --without-apache

オプションを見ると、--disable-mod-activationとかいうそれっぽいオプションがありますが、これはhttpd.confにmod_dav_svnを書かないというだけで、mod_dav_svn自体インストールしようとします。書き込み権限を持っていなければ当然Parmissionうんたらとかいうエラーが出てインストールが止まります。
configure中にmod_dav_svnコンパイルするには --with-apsx か --with-apacheが必要だよー、とかいうWARNINGが出ます。どちらかでいいのかなー、と思ってひとつしか指定しなかったら見事にmod_dav_svnをインストールしようとしやがったので両方指定します。

make && make install

make && make install

注意

svn: 'http://svn.hogehoge.com/fugafuga' 用の URL スキームを認識できません

subversion-deps-1.5.2.tar.gzを展開し忘れるとこのようなエラーが出たりします。svnでhttp(s)のレポジトリにアクセスするにはNeonとかSerfとかいうライブラリが必要なようです。subversion-deps-1.5.2.tar.gzにどちらも含まれているので、ちゃんと入れておきましょう。
INSTALLにはこう書いてあります。

* libneon or libserf (OPTIONAL for client)

The Neon and Serf libraries both allow the Subversion client
to send HTTP requests. This is necessary if you want your
client to access a repository served by the Apache HTTP
server. There is an alternate 'svnserve' server as well,
though, and clients automatically know how to speak the
svnserve protocol. Thus it's not strictly necessary for your
client to be able to speak HTTP... though we still recommend
that your client be built to speak both HTTP and svnserve
protocols. Your client can be compiled against either
libneon or libserf (or both), as they offer competing
implementations.

sshで設定をバックアップ/リストアできないのかな

DD-WRTssh接続できるようになったので早速ほげほげと弄ってみましたが、設定云々が全然分かりません。Webインターフェイスから 管理 -> 設定保存/復元 -> 設定の保存 で保存はできるみたいなんですが、これをsshからできないものかなぁ、と考えています。シェルで弄れるなら設定のバックアップをスクリプトで自動化とかできそうなので、とってもやってみたいんですが......。