メモの日々


2007年02月04日(日) [長年日記]

[life] 図書館へ行く

  • 鉄道員 (浅田次郎)
  • 虚数の眼 (湯川薫)
  • サッカーマガジン 2006.12.5 「Climax! J」

を借りた。ちょっとだけストゼロ3をやった。


2007年02月11日(日) [長年日記]

[service][life] ADSLのコース変更 (2)

ちょっと前に新しいADSLモデムが送られてきたんだけど、機種は4年前と全く同じFLASHWAVE 2040 M1だった。交換する必要あるんかいなと疑問に思ったが、本日一応交換。

オートマ設定機能対応版というのになっているのかも、とも思っていたけど、そんなこともなく、全く同じだった。毎月の料金が安くなるんだからいいんだけど。ネットワーク接続の体感速度も変化なし。

[book] 鉄道員 (浅田次郎)

鉄道員(浅田次郎/著) 短編集。直木賞受賞作だがどうということはなかった。「悪魔」とか意味分からん。幽霊の出てくる話が多い。3点。

やること

  • 確定申告
  • 年金

2007年02月13日(火) [長年日記]

[soft] Firefox 2でタブの縦置き

3ヶ月前の続き。

羊堂本舗にTab Mix Plusを使いつつタブを縦置きする方法が書かれていた。

試してみて縦置きできた!が、このままだと画面の左側に表示されてしまう。右側に表示するようカスタマイズしたい。

あと、リンクをミドルクリックして別のタブで開くと、画面がページの先頭までスクロールしてしまうようだ。む、タブを閉じたときにもそうなる。これはおれだけかしら。

翌日へ続きます。

やること

  • 確定申告
  • 年金

2007年02月14日(水) [長年日記]

  • だいぶ安定してきたと思ったが、ここにきてややこしい問題を色々発見。もうひと踏ん張りが必要。
  • 職場にマスクをしている人が多い。早くも花粉症らしい。

[soft] Firefox 2でタブの縦置き (2)

昨日の続き。

昨日のsheepmanさんのエントリを読んで、おれもTab Mix Plus Forumを検索してみた。そして、この投稿からWidefox 2.0というページでタブの縦置きが紹介されていることを知った。

このページに書かれているuserChrome.cssの内容はsheepmanさんの書かれていたものとほぼ同じ。で、どちらのuserChrome.cssを使っても、このページに説明されているようにTab Mix Plusの設定で[表示]→[タブバー]→[タブバーの位置]の値を「下部」に設定するとタブを右側に表示できた。ばんざい。

昨日悩んだページの先頭へスクロールしてしまう問題も、Tab Mix Plusの設定を色々といじっていたら直ってしまった。

これでタブ縦置きで生活できるぞ。

[soft][dev] userChrome.css さっぱり分からん

分かるようになりたくてちょっとだけ調べたけどやっぱり分からん。一応メモ。

が関係ある気がしたが違うのかもしれない。

Chrome element names and IDs

The best way to discover how to select an element in the user interface is to use the DOM Inspector.

とあるのでDOM Inspectorを活用すると分かるのかもしれない。

DOM Inspectorについて調べると、

が見つかった。

やること

  • 確定申告
  • 年金

2007年02月18日(日) [長年日記]

[work] 2006年分の確定申告書作成した

去年より8日早い。税額はかなり増えた。定率減税が半分になったのが大きい。個人型401kを急ぎたい。けど億劫。

[net] select()を通過したのにrecvfrom()でブロック

Fedora Core 5でUDPを扱っていて、select()は通過したのにその後のrecvfrom()でブロックしてしまいプログラムが止まってしまうという現象に遭遇した。

selectのバグ?

selectのmanに、

Linux では、 select() がソケットファイルディスクリプタで "読み込みの準備ができた" と報告した場合でも、この後で read を行うと停止 (block) することがある。このような状況は、例えば、データが到着したが、検査でチェックサム異常が見つかり廃棄された時などに起こりえる。他にもファイルディスクリプタが準備できたと間違って報告される状況が起こるかもしれない。 したがって、停止すべきではないソケットに対しては O_NONBLOCK を使うとより安全であろう。

というバグの記述がある。検索すると、天泣記でこの件について少し調べられていた。

はじめはLinuxのこの問題を踏んでしまったのかと思ったが、調べた結果、今回遭遇したのはこの問題ではなかったようだ。

IP_RECVERRソケットオプション

件の問題が起こるプログラムでは、IP_RECVERRソケットオプションが使われていた。このオプションの説明はip(7)のmanにある。この説明を読んだだけではよく分からなかったが、試してみたところ次のように動作するようだ。

  • このオプションを設定していると、そのソケットから送信したメッセージに関するICMPエラーを同ソケットで受信できるようになる。
  • ICMPエラーを受信した後でそのソケットに対しrecvfrom()やsendto()を呼び出すと、この呼び出しは1度だけエラーになる。このときのエラーコードは(後で書く)。
  • 受信したICMPエラーは、recvfrom()やrcvmsg()の呼び出し時に MSG_ERRQUEUE フラグを指定すると読み出すことができる(recvのmanに説明あり)。ソケットには通常のメッセージ用とICMP用の2つの受信用キューがあり、recvfrom()やrcvmsg()はMSG_ERRQUEUEフラグがオフだと通常メッセージ用キューから、オンだとICMP用キューから読み出すという動作をするようだ。
  • recvfrom()やrcvmsg()は到着メッセージが無い場合に通常はブロックするが、MSG_ERRQUEUEフラグがオンの場合は到着メッセージが無いとエラーでリターンする。このときのエラーコードは(後で書く)。
  • ICMPエラーメッセージをソケットから読み出さない限り、そのソケットに対するselect()はブロックしなくなる。

で、元のプログラムは

  1. select()
  2. MSG_ERRQUEUEフラグオフのrecvfrom()
  3. 上のrecvfrom()がエラーだったらMSG_ERRQUEUEフラグオンのrecvmsg()

という流れになっており、selectを通過した原因がICMPメッセージの到着だった場合にブロックしてしまっていた。これを、

  1. select()
  2. MSG_ERRQUEUEフラグオンのrecvmsg()
  3. 上のrecvmsg()がエラーだったら(ICMPエラーが到着していなかったら)、MSG_ERRQUEUEフラグオフのrecvfrom()

という流れに変更し、対処したつもり。エラーが無い場合にrecvが2回呼ばれるので効率が悪いけれど、この直し方しか思いつかない。

ああ、ソケットをノンブロッキングにすればこんな無駄な処理はしなくていいのか。先に書いたバグの件もあるので、ノンブロッキングI/Oを使うべきなのかなあ。

やること

  • 確定申告
  • 年金
  • 税務署へ行く
  • PDF生成

2007年02月21日(水) [長年日記]

  • 朝の6時過ぎまで眠れなかった。仕方ないから起きるか、と思ったら眠ってしまったようだ。

[ruby] Ruby on Railsを使ってみた

次の仕事で使えるかもしれないので試してみた。15分でサクッと動かせるのかと思ったら、全然スムーズにいかない。

インストール

Fedora Core 5にインストールした。RPMにはなっていないようなので、RubyGemsを使ってインストールする。

$ sudo yum install rubygems

としてRubyGemsをインストールし、

$ sudo gem install rails

としてRailsをインストールした。依存するパッケージのインストールに存外に時間がかかった。Railsはバージョン1.2.2がインストールされたようだ。

アプリケーションの作成

とりあえず、WEB+DB PRESS vol.28に載っていたRuby on Rails入門の最初に書かれていることをやってみようと思った。

$ mkdir ~/rails
$ cd ~/rails
$ rails gagaga

とすると色々とファイルが作られた。これだけでブラウザからアクセスはできるとのこと。

$ cd gagaga/script
$ ./server

でウェブサーバを起動しブラウザでポート3000にアクセスするとWelcome画面が表示された。

データベースの作成

ここでつまずいた。config/database.ymlを編集せよとのことなので開いてみたが、書かれているのはmysqlの設定だけ。SQLiteを使いたいのだけれど、どう書けばよいのかわからない。勘で修正して先に進んでみたが、結局うまく動かなかった。

検索するとまちゅダイアリー

-d オプションでデータベース (sqlite3) を指定している。

という記述を見つけた。むむ、そうなのか。

アプリケーションの作成からやり直す。

$ cd ~/rails
$ rails -d sqlite3 uma

これでconfig/database.ymlはSQLite用の設定になった。特に編集すべき所はなさそうなので、続いてsqlite3コマンドを使って db/development.sqlite3 ファイルにusersテーブルを作った。

アプリケーションのscaffoldを生成

次はgenerateコマンドを実行せよとのこと。

$ cd uma
$ script/generate scaffold user

を実行する。が、

      exists  app/controllers/
      exists  app/helpers/
      create  app/views/users
      exists  app/views/layouts/
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/user.rb
      create    test/unit/user_test.rb
      create    test/fixtures/users.yml
Couldn't find 'user' generator

とエラーになってしまう。謎のエラーで困ったが、同様のエラーで困っている人へのアドバイスを読んでsqlite3-rubyパッケージがインストールされていないのが原因だと分かった。

気を取り直してsqlite3-rubyをインストール。なにやらSWIGが無いとうまく動かないという情報も得たので、

$ sudo yum install swig
$ sudo gem install sqlite3-ruby

を実行した(Fedoraにはruby-sqlite3というRPMファイルが用意されていたがこれは使わずRubyGemsからインストールした)。

これで再度 script/generate コマンドを実行すると今度はエラーなく完了。

ブラウザからアクセス

これでブラウザからusersテーブルを更新できるようになっているとのことなので http://hostname:3000/users/ のようにしてアクセスしてみたが

`/users/' not found.

とエラーになってしまう。

これはウェブサーバの起動方法を間違えていたのが原因。上に書いたようにscriptディレクトリの中でserverコマンドを実行してしていたが、これでは駄目なようだ。

$ cd ~/rails/uma
$ script/server

として起動するとうまく動いた。わーい。

今日はここまで。

参考サイト

まだRailsのことは全然分かってない。参考になりそうなページをちょっとメモ。

やること

  • 年金
  • 税務署へ行く
  • PDF生成

2007年02月24日(土) [長年日記]

  • 頭が痛い。

[soft][windows] ExcelファイルをPDFファイルに変換する

たくさんのExcelファイルをPDFファイルに変換しなければならなくなった。次のサイトでPDF作成について色々なソフトが紹介されていたので参考にした。

なかなかうまくいかなくて、色々なソフトを試した。

ライブPDFプリンタ」を試す

できれば日本で作られたソフトの方がいいので、最初にこれを試した。使ったのはバージョン1.17。

仮想プリンタとして動作するソフト。綺麗でいい感じのPDFファイルを生成できたので満足していたのだけれど、ファイルをいくつか変換していると

  • エラーになってしまいPDFファイルを生成できないことがある
  • Excelのブック全体を1つのPDFファイルに変換したいのに、複数のPDFファイルに分割されてしまうことがある
  • 稀に、丸数字が正しく変換されないことがあった

という問題が発生。エラーになるのは複数のPDFファイルに分割されるときだけかもしれないが、そこの相関はきちんと調べていない。エラーになるファイルは必ずエラーになってしまうので、これは困る。別のソフトを試す。

PrimoPDF」を試す

インストーラのサイズが14MBもある巨大ソフトだった。バージョンは3.0。

これも仮想プリンタとして動作する。こちらだとエラーにはならなかったが、複数のPDFファイルに分割されてしまうのは同じ。

Excelファイルが複数のPDFファイルに分割されるのは避けられない?

なんで分割されてしまうのか。検索すると

というページがあった。ここに書かれている対処法は「印刷品質」をデフォルトの600dpiよりも小さくするというもの。試してみると分割されるPDFファイルの数は減ったが、1つのファイルにはならなかった。

複数のPDFファイルになってしまうのは、Excelの問題、あるいは仮想プリンタとして動作して変換するという仕組みだと避けられない問題なのかもしれない。

PDFファイル結合ソフトを試す

分割されてしまうのは諦めて、それらを1つにまとめることを試みる。

まず

を試そうとしたが、Visual J# .NET用のライブラリをインストールする必要があるようで、ちょっと面倒なのでやめた。Visual J#なんてあるの知らなかった。

で、

というソフトをインストールして使ってみた。シンプルなソフトだが、問題なくファイルを結合できた。

PDF reDirect v2」を試す

もう少し探しているとPDF reDirectというソフトがあり、これはPDFを作成する機能と結合する機能の両方があるようだった。こういうのを待っていた。

これも仮想プリンタとして動作するソフト。確かにファイルの結合ができそうなのだが、最後の所でエラーになってしまう。むむむむむ。

どうやら、日本語ファイル名で保存しようとするとエラーになるようだ。英数字のみのファイル名を使ったらエラーにならずにPDFファイルを生成できた。

OpenOffice.org」を試す

あと、OpenOffice.orgのCalcで開いてPDFに変換するのも試してみた(OpenOffice.orgにはPDF変換機能がはじめから付いている)。あまり期待していなかったんだけど、Excelファイルは問題なく開け、普通に一つのPDFファイルに変換できた。

が、改ページ位置がどうしてもずれてしまう。これをいちいち調節するのは面倒すぎるなあ。

結局

PDF reDirectを使うのがよさそう。ファイル名をいちいち変更しなければならないのが面倒だけれど、他のアプローチよりはましかな。

[life] 図書館へ行く

  • 王妃の館 上・下 (浅田次郎)
  • Quick Japan Vol.67 「長澤まさみ」
  • サッカーマガジン 2007.1.2 「我が心の「高校選手権」」

を借りた。帰りに優しいRailsの育て方を購入。

「Suhosin」 (Hardened-PHP Project)

Suhosin is an advanced protection system for PHP installations. It was designed to protect servers and users from known and unknown flaws in PHP applications and the PHP core.

PHPのセキュリティを強化するパッチと拡張みたい。ITpro

PHPを使っているのにSuhosinを知らないとしたら,それは大きな損失だ。なぜなら,Suhosinが提供する素晴らしいセキュリティ拡張機能を使っていないからだ。

とあり知らなかったのでメモ。PHPを使う予定はないけれど。

やること

  • 年金
  • 税務署へ行く
  • PDF生成

2007年02月26日(月) [長年日記]

  • Railsでプログラミング開始。まだ手探り。
  • 昼にカレー食べた。いつもながらナンが熱くて持てない。

[work][life] 確定申告に行く 2007

去年より1日早く確定申告へ。どうということはない、並んで紙を出しておしまい。

去年は控除の証明書類を取り戻せずイラついたようだが、今年は提出するつもりで行ったので何ともなかった。持っていても意味ないもんな。

やること

  • 年金
  • 税務署へ行く