さくらのレンタルサーバ
SSH周り
公開鍵の登録
毎回、sshでログインするたびにパスワードを打つのは面倒なので、公開鍵を登録する。
local$ ssh-keygen -t rsa local$ scp ~/.ssh/id_rsa.pub mzp.sakura.ne.jp: local$ ssh mzp.sakura.ne.jp remote$ cat id_rsa.pub >> ~/.ssh/authorized_keys remote$ rm id_rsa.pub remote$ exit
で、あとは毎回
ssh-agent zsh
とかで起動するようにすれば、パスワード無しで入れる。
ファイルの同期
rsync -avz -e ssh . mzp.sakura.ne.jp:www/wiki/
とかね。
hparserの使い方
Wikiに書き込むための下書き。
はてな記法をHTMLに変換するプログラム(make_hatena)を作ってみる。
前提
- RubyGemsのための設定が終了している
- hpaserがインストールされている
仕様
引数がある場合は、そいつをhtmlに変換して標準出力に出力する。
$ make_hatena sample.html <html> <body><p>Hatena Format Paser Sample.</p></body> </html>
引数がない場合は、標準入力から受け取る。
$ echo "foobar" | make_hatena <html> <body><p>foobar</p></body> </html>
引数の処理
引数のファイルを開くか、標準入力を使うかを決めるための処理をまず行う。
ここは本質じゃないので、さくっと終わらせる。
#!/usr/local/bin/rubyrequire 'hparser'def to_html(input)
# ...endif ARGV.length == 0 then
puts to_html(STDIN)
else
open(ARGV[0]) { |io|
puts to_html(io)
}
end
HTMLの変換
HParser::Parser#parseにはてな記法を渡すと、はてな記法が各要素に分解されます。
たとえば、
というふうに分解されます。
parser = HParser::Parser.new
parser.parse("hoge") # -> [#<HParser::Block::P>]parser.parse("*head") # -> [#<HParser::Block::Head>]parser.parse("*head\nfoo") # -> [#<HParser::Block::Head>,#<HParser::Block::P>]
あとは、HParser::Block::P#to_html
などのto_html
と名前の付いたメソッドを呼び出すことで、HTMLに変換することができます。
なので、HTMLの変換は次のようになります。
def to_html(input)
parser = HParser::Parser.new
node = parser.parse input.read
"<html><body>\n"+node.map{|x| x.to_html}.join("\n")+"\n</body></html>"
end
結果
最終的に次のようになります。
出力例:
#!/usr/local/bin/rubyrequire 'hparser'def to_html(input)
parser = HParser::Parser.new
node = parser.parse input.read
"<html><body>\n"+node.map{|x| x.to_html}.join("\n")+"\n</body></html>"
end
if ARGV.length == 0 then
puts to_html(STDIN)
else
open(ARGV[0]) do |io|
puts to_html(io)
end
end
$ cat sample.txt *Hello,world!! test - foo -- bar -- baz --- bar $ ruby make_hatena.rb sample.txt <html><body> <h1>Hello,world!!</h1> <p>test</p> <ul><li>foo</li><ul><li>bar</li><li>baz</li><ul><li>bar</li></ul></ul></ul> </body></html>