2008年11月18日火曜日

postfixの設定メモ

ddns環境でのpostfixの設定
op25bの為に送信メールがisp(biglobe)のサーバを中継するように設定する
1. biglobeに中継サーバの利用申請をするhttp://support.biglobe.ne.jp/faq/settei/op25b/relay.html
2. main.cfの設定
2.1. relayhost に1.でもらったサーバのFQDNを設定する
2.2. 送信時にSMTP AUTHを使うように設定する
2.3. 送信時にemvelope fromを書き換える
3. libsasl2-modulesをinstall

# diff main.cf.old main.cf
40a41,56
> relayhost = [example.com]:25
>
> smtp_sasl_type = cyrus
> smtp_sasl_auth_enable = yes
> smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
> smtp_sasl_security_options = noanonymous
> smtp_sasl_mechanism_filter = cram-md5, login, plain
>
> sender_canonical_classes = envelope_sender
> sender_canonical_maps = regexp:/etc/postfix/sender_rx
# cat /etc/postfix/sasl_passwd
[example.com]:25 mailaddress:password
# cat /etc/postfix/sender_rx
/^.*/ mailaddress
# postmap /etc/postfix/sasl_passwd
# aptitude install libsasl2-modules
# /etc/init.d/postfix restart
example.com: biglobeの中継サーバ
mailaddress: biglobeのメインメールアドレス
password: メール用のログインパスワード

2008年8月13日水曜日

ubuntuのupgradeがこけた

gutsyからhardyにupgrade。
アップデートマネージャーを立ち上げると8.04にアップグレードのボタンが表示されるので押す。
質問に答えつつしばらくすると下の出力の後止まる。
Generating locales...
en_AU.UTF-8...

locale-gen が固まっている様子。
シェルからlocale-genを殺すと、アップデートマネージャーの方で何か失敗した旨のメッセージが出るが、メッセージを閉じれば次のパッケージのアップデートに進んでゆく。localesがこけたのに引っ張られてlanguage-pack等々の更新もこけるが気にせず進む。終わるまでに何回かlocale-genで固まるが、そのたびプロセスを殺して進む。
locale-genが固まるのは2.6.22-15カーネルの問題らしいので、アップグレードが完了したら再起動し、新しいカーネルで起動した状態にてlocalesの更新をやり直すと、連鎖的にこけたパッケージも無事に更新され、アップグレード完了となりました。

2008年8月4日月曜日

grub

メモメモ
  • update-grubで作られるエントリは Default Options と書かれているコメント内の kopt や groot 等を元に作られる。
  • なので、/や/bootなんかのパーティションを変えたときはそこも変える必要がある。
  • savedefault 行が気になっていたが、これだけならdefaultがsaveされるだけでloadはされないので影響はない。
  • 字面のイメージ通り、最後に起動したエントリで次回も起動させるには、default行を"default saved"とする必要がある。
  • savedefaultはサブオプションで一回のみとか次回は何番目のエントリを起動させるとか細かい制御ができるらしい。

KILKENNY

売り場に見慣れない缶が置いてあったので買ってみました。
IRISH BEERだそうです。
GUINNESSみたいにフロートが入ってます。
というか、フロートの説明文も、輸入元も、HPのURIもおなじなわけでGUINNESSの仲間なんでしょう。
クリーミーな泡立ちですが、色は朱い感じです。
飲んでみた感じ、何というか・・・味が無いかな・・・。
こくというか苦みというかなんかそういう物がほとんど感じられなくて、口に入れてる間は確かにビールなんですが、飲み込んだ後に何も残らない。
かなり物足りない感じで、残念でした。

2008年7月17日木曜日

auoneメールあれこれ

  • ezwebメールの自動保存で送信メールも受信箱に
  1. “ラベル「EZ送信ボックス」を付ける”の方のフィルタを編集して受信トレイをスキップのチェックを外す
  • IMAPでアクセス
  1. 設定>メール転送のところでIMAPを有効に
  2. アカウントの設定>パスワードの変更からメールパスワードを設定する
  3. 設定手順にあるとおりにクライアントを設定
  • 送信メールの転送
  1. 送信ボックスの方のフィルタを編集して転送先を設定
  2. subjectの先頭にゴミ(送信箱の絵文字?)が勝手につけられてるのでMDAからフィルタを呼ぶなりして
    =?iso-2022-jp?B?GyRCeDEbKEIg?=
    の部分を削る

たいていのメールクライアントにある“常にbccに特定のアドレスを追加する”という機能が、ケータイのメール機能にはないのが前々から不満だったのですが、これで(PCのメールクライアントで見る分にはですが)受信メールも送信メールも同じフォルダで並べて見られるようになり、多少快適になりました。

2008年6月30日月曜日

6月のお買い物

@comics

  • 死がふたりを分かつまで #7
  • 蟲と眼球とテディベア #4
  • 涼宮ハルヒちゃんの憂鬱 #1
    • 笑いのツボが合わなかった。表紙のはいいんだが、中のハルヒがあんま可愛くない。のいじのほうがいい。
  • はじめの一歩 #84
  • エア・ギア #21
    • ↑2つは最近マガジンを買うのやめたので単行本買い始めた。
  • アライブ最終進化的少年 #15
  • XBLADE #4
  • ダンス イン ザ ヴァンパイア バンド #5
  • 緑の王VERDANT LORD #8 : 未読
  • Rozen Maiden 新装版 #2 : #1が売り切れてるので未読
  • FRONT MISSION DOG LIFE&DOG STYLE #1
  • FRONT MISSION DOG LIFE&DOG STYLE #2
    • 登場人物がことごとく死んでいく感じがいいです。熱い。
  • とある科学の超電磁砲 #2
    • 黒子たんかわいいです。トゲトゲ頭が出てこなければもっといいのに。
  • DOGS/BULLETS&CARNAGE #3

@novels

  • fate/zero #1,2,3,4
    • これアマだと何であんな高いのだろう?マーケットプレイスじゃないのに新品で1冊2千円とか3千円とか。定価千円位なのに。しょうがないから公式のところで購入。
    • 2巻まで読了。読みやすくて暇つぶしには良いが、まぁ文章はラノベですね。この内容だとあの値段は高いなぁ。
    • アドベンチャーゲームというのかビジュアルノベルというのか、あの形態のゲームは受け付けないので本という媒体なのはうれしいです。

@PSP

  • Yggdra Union
  • 無限回廊
  • R-TYPE TACTICS : 未開封

@DS

  • The Tower DS : 未開封
    • タワーは大好きです。アドバンスで出てることを知って、それをやるためにDSを買ったくらい。
    • 見つけた瞬間に予約してて、発売日気にしてなかったらPSP購入したすぐに重なってしまった。

PSPを衝動買い

尼に珍しく在庫があったのでついポチってしまった。
セラミックホワイト。
衝動買いなので本体とメモリだけしかかってないw。

ユグドラユニオンと無限回廊を近所のヨーカドーで買ってきた。
ユグドラは期待してたよりおもしろい。
無限回廊は・・・正直間違えて買った。
inteligent license2が体験版割とおもしろかったんで
買ってみようかと思ったんだがタイトルとか全く覚えて無くて
それらしかったので間違えてしまった。
1500円くらいだったら満足できてたかもなーって感じです。

モグナボンザ

購入数30(本体+倉庫x2)

5等4本。(全部倉庫w)
4等1本。
3等以上無し。

1億ゲットならず・・・無念。
1等個数56ということは鯖に一人か二人なのか・・・

まぁ、元が取れたからよしとしよう。
4等、ギルだと10万だが素材系は最終25万くらい。
ベヒ皮とか40万ついてる。
しかし、当選個数60461ということは鯖あたり2000位出てるわけで
当然のごとく超値下がり&&買い控えが起こるはず。
この素材達は数百個単位で需要のある物なのだろうか?
直接ギルを貰う方が賢いのかなぁ・・・

2008年6月13日金曜日

竜虎相搏つ

フェロー限界4。
微塵が怖いので忍はやめ、復帰してから1度も使ってない赤を引っ張り出す。赤/忍。適当に装備を鞄に入れ、OPでフェ・インへ。ダッシューズが割とありがたい。ソロ用のマクロが無いが、めんどくさいのでまぁいいか。
BFに入り、強化し殴り装備に変えていざ!ご飯は食べるの忘れた。
ディアパラスロウブラインとレジは無し。サイレスはレジ。マネラス+ダイセクで一撃40くらい。半分くらいまではノーダメで順当に削る。ここでフェローが連続魔。みるみる蝉ははがされるし、張り直したらディアガとかもぅ…。フェローの蝉とかストスキも地味にうざい。いったん退くなり、こっちも連続魔するなりすればよかったと思うけど、このときは何も思いつかず終始がち殴り。フェローたんの短剣も一撃で130とか食らうのでかなり痛い。パライズ食らって泣きそうになりながらも何とかクマを耐えきれば、あとは、ケアル4で粘るのをうざすとか言いつつ順当に撃破。クリアタイム9分14秒。ぎりぎりでしたが。

まぁ、なんというか、フェローたん。その3000万山分けのお仕事こっちにも回してくださいお願いします。

2008年6月10日火曜日

uploader cgi

知り合いにこないだの写真送ってとメールしたら、CD-Rで送るねと返信が来た。いやいや、オンラインで頼むよといったらオーバーフローしてしまったようだ。説明するのはめんどくさいので自宅のサーバにuploaderを置いて、ここにアップロードして!と頼むことにした。

そんな感じでコードは下に。ダウンロード用のリンクはあえて作ってない。悪意のあるファイル名を入力されたら不安だけど、まぁ大丈夫でしょう…。これより凝ったことしようと思ったらrailsかな。
#!/usr/bin/env ruby
require 'cgi'
require 'kconv'
DataDir='data'
MaxSize=250*1024*1024
StoreLimit=20*1024*1024*1024
PageTitle='file uploader'

def commify(numstr)
int, frac = *numstr.split('.')
int = int.gsub(/(\d)(?=\d{3}+$)/,'\\1,')
int << '.' << frac if frac
return int
end

cgi=CGI.new

print cgi.header("type"=>"text/html", "charset"=>"Shift_JIS")
puts '<html>'
puts '<head>'
puts "<title> #{PageTitle} </title>"
puts '</head>'
puts '<body>'
puts "<h1>#{PageTitle}</h1>"

fb = Dir.glob(DataDir+'/*')
total=0
if fb.length > 0
fb.each{|f|
total+=File.stat(f).size
}
end

if (cgi['file'] != "")
file = cgi['file'].original_filename.chomp
if file.length>0
file = file.toutf8
file.gsub!(/\\/,'/')
file.gsub!(/\s/,'_')

if total+cgi.content_length>StoreLimit
print 'sorry. disk full. cannot upload the file.'
elsif cgi.content_length<MaxSize
ofn = sprintf("%s/%d.%s.%s",DataDir,$$,Time.now.to_f.to_s,File.basename(file))
begin
f = open(ofn,"wb")
rescue
print 'upload failed with unexpected error. please contact to server administrator.'
else
f.write cgi['file'].read
print 'upload succeessfully completed: '
print file.kconv(Kconv::SJIS,Kconv::UTF8)
ensure
f.close
end
else
print 'filesize error. you can upload up to '+MaxSize.to_s+'Bytes'
end
print '<hr />'
end
end

puts '<form method="POST" enctype="multipart/form-data">'
puts 'file: <input type="file" name="file" size="50">'
puts '<input type="submit" name="upload" value="upload">'
puts '</form>'
puts '<hr>'

files = Dir.glob(DataDir+'/*')
if files.length > 0
puts 'uploaded files:<br />'
puts '<table border=4>'
print '<tr><th>'
print 'date uploaded'
print '</th><th align=right>'
print 'file name'
print '</th><th align=right>'
print 'bytes'
puts '</th></tr>'
files.each{|f|
s = File.stat(f)
print '<tr><td>'
print s.ctime
print '</td><td align=right>'
print CGI.escapeHTML(f.sub(/\A#{DataDir}\/[0-9]+\.[0-9]+\.[0-9]+\./,'').kconv(Kconv::SJIS,Kconv::UTF8))
print '</td><td align=right>'
print commify(s.size.to_s)
puts '</td></tr>'
}
puts '</table>'
else
puts 'no files uploaded'
end

puts '<a href="./"> refresh </a>'
puts '</body>'
puts '</html>'

2008年6月9日月曜日

ノールの爪

5月の真ん中頃1年ぶりくらいに復活して、ちょこちょこ踊り子あげたりしている。
過去バスクエで爪がほしい。割と高いからちょっと倒してみる。
とりあえずバタで。忍/白。
モンスター___ ___累計 __割合 __総戦闘時間 ____平均 __標準経験値 __平均[最大/最小]
Gnole_______ ____17 100.0% ___1h9m44s ____4m6s _______842 __49.5[_120/__44]

ドロップ0/17。出ない。

日を改めてサポシ。またもバタ。
Gnole_______ ____23 100.0% __1h16m27s ___3m19s ______1060 __46.1[__47/__44]

サポシでも0/23。自分の中でバタでは出ないという結論に。結局買いました。

さらに後日、力王を拾ったので、潜在がてらジャグナーでリベンジ。スキル上げの人を拉致して、忍/白+暗/侍。後からもう一人侍/踊が合流。
Decrepit Gnole_ ____30 100.0% __1h41m50s ___3m23s ______1415 __47.2[__62/__40]

トレハン無しで2/30。爪がほしいならジャグナーに行けという結論でした。

2008年6月6日金曜日

spam blogってなんだろう?

1個前のrubyスクリプトの記事投稿してしばらくしてから、2・3日blogを止められてました。何でも、spam blog の検出に引っかかりました、利用規約違反の可能性があります、違う場合は解除(審査?)を申請してくださいみたいな感じでした。解説して1記事投稿しただけで引っかかるとはどないやねん、失敬だな!と憤ることしかりな訳ですが、spam blog って何だろう?と思ったわけです。
spam mail, spam comment, spam tackback ここら辺はよく聞きます。しかし、blog はこれらと違い、誰かに送りつけるものではありません。適当に記事を公開しておいて、たまたま迷い込んできた人がそれを見るだけの物だと思うのです。それなのにどうしてspam?と思い検索してみました。
どうやら、他人のblogやwikipediaなどを勝手にコピーするなどして自動的に記事を作成し、それにアフィリエイトを貼り付けるなどして収入を目論んだりするような物を指すようで、割と認知されている言葉のようです(googleの日本語検索で1万件引っかかった)。
しかし、ここにはアフィも貼ってないし、怪しげなサイトにリンクしたわけでもないしどうして引っかかったんだろう。一応、申請したら解除されたので規約違反ではなかったようですが、どこが引っかかったのかは知っておきたいところです。

2008年5月30日金曜日

rubyでメールを送る

時間のかかるスクリプトとか、タスクスケジューラとかで動かしてるスクリプトとかは、終了時にメールを飛ばすようにできると無事に終わったことが確認できてうれしい。そんなわけでやり方を調べてみた。追加ライブラリを拾ってきたりとかしたくないので、標準のNet::SMTPでやる。ActionMailerでも使ったらいいのにね。
仕様は、本文に適当なメッセージを入れてログファイルを添付する。ログはテキストだから本文に貼り付けてもいいのだがせっかくだから添付の仕方を調べてみた。ただ、ヘッダのMIMEエンコードはめんどくさかったのでSubjectにはASCIIしか使わないことにした。コードは下の方に。
net/smtpだとヘッダを1から全部かかなきゃならんのが大変。multipartの肝はboundary。ヘッダには境界として使う文字列を記入。無駄にsha1とか使ってるがランダムな文字列である必要も毎回変化する必要もなく、本文中に出てこないならなんでもいい(使えない記号とか70文字までとかのルールはある)。実際にメール中で境界としてかくときは、ヘッダで指定したboundaryの頭に--をくっつける。そして、メールの最後には頭とおしりの両方に--をくっつけたboundaryを置く。というルールになっているようです。
参考:http://suika.fam.cx/~wakaba/-temp/wiki/wiki?boundary
自分しか使わないからさぼってるけどFile.openの例外はちゃんと拾うべきですね。

#!/usr/bin/ruby -Ks
require 'kconv'
require 'net/smtp'
require 'digest/sha1'

LogFile='log.txt'
MailFrom='mailfrom@example.com'
MailTo='mailto@example.com'
MailSubject=File.basename($0)+' finished'
SMTPHost='smtp.example.com'
SMTPPort=25
HELODomain='myhostname.example.com'
Boundary=Digest::SHA1.hexdigest(Time.now.to_f.to_s)
EncodeBlocksize=45

def send_mail
tmp=Array.new
tmp<<sprintf("Message-ID: <%f_%d@%s>",Time.now.to_f,$$,HELODomain)
tmp<<'Date: '+Time.now.strftime("%a, %d %b %Y %X")+' +0900 (JST)'
tmp<<'From: '+MailFrom
tmp<<'To: '+MailTo
tmp<<'Subject: '+MailSubject
tmp<<'MIME-Version: 1.0'
tmp<<'Content-Type: multipart/mixed; boundary='+Boundary
tmp<<''
tmp<<'--'+Boundary
tmp<<'Content-Type: text/plain; charset=ISO-2022-JP'
tmp<<'Content-Transfer-Encoding: 7bit'
tmp<<''
tmp<<Time.now.to_s.tojis
tmp<<'おわったよー'.tojis
tmp<<''
tmp<<'--'+Boundary
tmp<<'Content-Type: application/octet-stream;'
tmp<<' name="'+File.basename(LogFile)+'"'
tmp<<'Content-Disposition: attachment;'
tmp<<' filename="'+File.basename(LogFile)+'"'
tmp<<'Content-Transfer-Encoding: base64'
tmp<<''
File.open(LogFile){|fin|
src=fin.readlines.join('')
enc=[src].pack('m')
tmp<<enc
}
tmp<<'--'+Boundary+'--'
mailbody=tmp.join("\n")
Net::SMTP.start(SMTPHost,SMTPPort,HELODomain){|smtp|
smtp.send_mail mailbody,MailFrom,MailTo
}
end

send_mail