メモの日々


2009年10月01日(木) [長年日記]

  • 粗大ゴミは無事に処理できた。

[c++] C++のストリームに精度を設定する

C++のストリームは苦手だ。小数などの精度を設定するには std::setprecision() を使えばいいということを覚えられそうにないのでメモ。<iomanip> に色々なマニピュレータが宣言されている。

#include <iomanip>
#include <iostream>

int main() {
    double a = 2.0 / 3.0;
    std::cout << a << std::endl;
    std::cout << std::setprecision(10) << a << std::endl;
}

実行結果は次の通り。

0.666667
0.6666666667

やること

  • tDiaryバージョンアップ
  • エプソンのポイント

2009年10月04日(日) [長年日記]

[life] 久しぶりに図書館へ行った

引っ越してから図書館へ行かなくなってしまっていた。すごく近くにあるのにもったいない。重い腰を上げ行ってみた。

  • 笑わない数学者 (森博嗣)
  • Rによる統計解析 (青木繁伸)

を借りた。カウンターのお姉さんが優しかった。

やること

  • tDiaryバージョンアップ
  • エプソンのポイント

2009年10月05日(月) [長年日記]

  • OTが東京にきたのでHZIさんら8人で飲み会。焼肉屋へ行ったのだけれどわりと不評でHZIさんかわいそう。でもおれも焼肉は好きじゃないんだなあ。焼くのめんどくさい。

やること

  • tDiaryバージョンアップ
  • エプソンのポイント

2009年10月06日(火) [長年日記]

[soft][unix] rsyncがエラーになって困った

rsyncでの転送が問題なくできていた環境で、昨日の夜から

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Connection reset by peer (104)
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [sender=3.0.6]

というエラーになり転送できなくなって困った。

rsyncのオプションを色々変えて試した所、「--whole-file」オプションを付けるとエラーにならないことが分かった。rsyncは仕組みを理解せず使っていたが、ファイル内の差分だけを転送するのがデフォルトの動作で、このオプションを付けると差分ではなくファイル全体を転送するように動作するみたい。

元々エラーになっていたのは数メガバイトのzipファイルで、丁度このファイルを更新した後からエラーになっていた。だから、このファイルの差分の転送がうまくいかないということなのだろう。

ということで、転送先で件のファイルを一旦削除してからrsyncを実行すると、「--whole-file」オプションを付けずとも転送できるようになった。

[life] 甘しょっぱいお菓子嫌い

最近買った甘そうなお菓子が立て続けにしょっぱくてガッカリしたのでメモ。それは

だ。全然おいしくない。気をつけろ。

やること

  • tDiaryバージョンアップ
  • エプソンのポイント

2009年10月08日(木) [長年日記]

[life][hard] エネループを注文した

PCを買ってから1年経つ。エプソンダイレクトで購入したのでポイントが2000円分くらいついていて、その期限がもうすぐ切れる。なので何か買おうとしたが品揃えが少なすぎて買うものがない。エプソンのプリンタを持っているとよかったのだけれど。

その少ない品揃えの中にエネループがあったので、それを買うことにした。単三4本と充電器のセットのやつ。どうせなら残容量チェック機能付きの充電器が欲しいがそれは売ってないみたい。3980円でAmazonに比べるとだいぶ高い。

やること

  • tDiaryバージョンアップ
  • エプソンのポイント

2009年10月12日(月) [長年日記]

[tdiary] tDiaryを2.3.3.20090826へバージョンアップ

Amazonプラグインが動かないのが不便なのでやっとバージョンアップした。スピードアップする変更が入っていそうなスナップショット版へ。

2.2系から2.3系へのバージョンアップはUTF-8へ移行が発生するので心配だったが、意外とあっさり動いた。でもダメな所もあって、気づいている点をメモ。

おいおい対応していく予定。

前回バージョンアップしたときのメモが役に立ったので、今回もメモ。

ダウンロードと展開

  • ダウンロードページから適当なバージョンのフルセット版アーカイブをダウンロードし、適当なディレクトリに展開する。
  • テーマは使わないので、themeディレクトリにあるサブディレクトリを全て削除する。themeディレクトリ直下にあるファイル(base.cssなど)は削除しない。

トップディレクトリの調整

  • バージョンアップ前のトップディレクトリにある.htaccess、tdiary.conf、tdiary.common.conf、mimetex.xcg、index.rdfをそのままコピーする。
  • index.rbとupdate.rb内の最初の行を「#!/usr/local/bin/ruby」に修正する。
  • index.rbとupdate.rbをそれぞれindex.cgiとupdate.cgiという名前のファイルにコピーする。スレッドメモから参照されるので.rbの方も残しておく必要がある。
  • misc/plugin/trackback/tb.rbをtb.cgiという名前でトップディレクトリにコピーし、最初の行を「#!/usr/local/bin/ruby」に修正する。

プラグインの追加

misc/plugin/ に、以下のプラグインファイルをコピーする。

  • tdiary-contrib.tar.gz内にあるjdate.rb
  • よたらぼ保管庫にあるrefedit2.rb
  • バージョンアップ前の misc/plugin/ にあるmimetex.rb

カテゴリプラグインの修正

category.rbに、新しい順表示にする修正を行う。category.rbが変わっていて以前のdiffが使えなかったので改めて差分をメモ。

--- category.rb.org	2009-09-28 06:45:24.000000000 +0900
+++ category.rb	2009-09-28 06:46:35.000000000 +0900
@@ -125,7 +125,7 @@
 	<div class="body">
 		<ul class="category">
 HTML
-		v.to_a.sort_by{|e| e[0]}.each do |ymd, ary|
+		v.to_a.sort_by{|e| e[0]}.reverse.each do |ymd, ary|
 			text = Time.local(ymd[0,4], ymd[4,2], ymd[6,2]).strftime(@conf.date_format)
 			ary.sort.each do |idx, title, excerpt|
 				r << %Q|\t\t\t<li><a href="#{h @index}#{anchor "#{ymd}#p#{'%02d' % idx}"}" title="#{h excerpt}">#{text}#p#{'%02d' % idx}</a> #{apply_plugin(title)}</li>\n|

アップロードと実行権限付与

サーバにある古いバージョンのtDiaryを退避し、代わりに上の修正を行った新バージョンのtDiaryをアップロードする。そして、tdiaryディレクトリにあるtdiary.cgi、update.cgi、tb.cgi、mimetex.xcgに実行権限を付与する。

やること

  • tDiaryバージョンアップ

2009年10月13日(火) [長年日記]

[tdiary][javascript] tDiaryの各日に編集用リンクを追加するGreasemonkeyスクリプト (4)

tDiary用に作ったGreasemonkeyスクリプト

が、tDiaryを2.3にバージョンアップしたら動かなくなってしまったので修正した。

原因は、一日をあらわすdivが「<div class="day autopagerize_page_element">」のようになっていて、複数のclassが指定されるように変わったから。これが想定外だったので、classが複数指定されても大丈夫なように修正したつもり。


2009年10月21日(水) [長年日記]

[ruby] 文字列が数値かどうかのチェック

文字列が数値を表わすかどうかをRubyの正規表現でチェックしようとして少し悩んだのでメモ。小数もOKにしたい。できたのは

/\A[+-]?\d+(\.\d+)?\z/

だ。(自分で考えたのは「/\A[+-]?(\d+\.\d+|\d+)\z/」だったのだけれど、この日記を書いている途中に[ruby-list:15007] Re: 文字列から数値への変換失敗を検出したいを見つけてそれを参考に変更した)

以下動作確認プログラムと実行結果。

def decimal?(str)
  if str =~ /\A[+-]?\d+(\.\d+)?\z/
    puts "o '#{str}'"
    true
  else
    puts "x '#{str}'"
    false
  end
end

decimal?("1.0")
decimal?("0")
decimal?("-10")
decimal?("+0.123000")
decimal?("00001.00099")
decimal?("0.")
decimal?(".0")
decimal?("1..0")
decimal?("1+2")
decimal?("55a")
o '1.0'
o '0'
o '-10'
o '+0.123000'
o '00001.00099'
x '0.'
x '.0'
x '1..0'
x '1+2'
x '55a'

2009年10月24日(土) [長年日記]

[book] 笑わない数学者 (森博嗣)

笑わない数学者―MATHEMATICAL GOODBYE (講談社文庫)(森 博嗣) 読んだ。プラネタリウムのある館でのクリスマスパーティにて起こった殺人事件の話。事件の真相は不可解で謎が残る。わりと面白かった。4点。

[life] 図書館へ行った

閉館が近い夜に行ったらガラガラだった。雨降ってたからかなあ。

  • 天国までの百マイル (浅田次郎)
  • 入門 OCaml (OCaml-Nagoya)
  • 日経マネー 2009.8 「サラリーマンのためのお金持ち養成大学」

を借りた。


2009年10月26日(月) [長年日記]

  • 「めざせ皆勤賞!」ってのは部外者から見てもどうかと思う。学生じゃないんだから。
  • コストが増えるだけで利益に貢献するとは思えない。もっと儲かる会社になって欲しいんだけど難しそう。

[web][tdiary] HTMLフォームと文字コード

tDiaryをバージョンアップしてから、右上にある検索フォームに日本語のキーワードを入力したときに正しく検索できなくなっていた(遷移先の画面からなら検索できるので、そこでキーワードを入力し直せば検索できる)。

原因は、日記のページは文字コードがUTF-8だが検索機能はEUC-JPにしか対応していないため。pnamazuのソースを見るとNKFを使って変換しているようなのでUTF-8でも大丈夫そうに思うんだけれど、うまくいっていない。

それで、HTMLのFORM要素にはaccept-charset属性があるので、ここにEUC-JPを指定すればうまく動くはず。ということで右上のフォームにはもうこれを設定してあり、Firefoxからならちゃんと検索できるようになった。

が、IE8では依然としてうまくいかない。検索すると、IEは昔からずーっとaccept-charset属性に対応していないようだ。何故対応しないのか。

IEがaccept-charsetを見るのは現在のページの文字コードで表せない文字を送信されるデータが含んでいるときだけだからのようです。

とあって、「現在のページの文字コードで表せない文字」をhiddenに仕込めればaccept-charset属性が使えそうなんだけれど、UTF-8で表せない文字なんて仕込めそうにない。元ページがEUC-JPなどなら使えるBKなんだろうけどなあ。

仕方ないので文字コードを変換するCGIを作ろうとしたが、生産性の低さにより時間切れ。わりと面倒そうなのだ。

(追記)

pnamazuがなぜ変換してくれないのかをもうちょっと調べてたら怪しい所があったので、pnamazuを修正してみたらIEからでも検索できるようにできた。NKFモジュールを読み込むタイミングを変えたのだけれど、これで別の問題が発生する可能性はある。