メモの日々


2010年10月01日(金) [長年日記]

[life] コンタクトレンズを紛失した

4月に買ったコンタクトレンズの片方を紛失してしまった!

夜にコンタクトを装着して外を歩いていて、左目をちょっと触ったら外れてしまったみたい。こういうときは大抵ずれただけで目の中に残っているんだけど、鏡で目の中をいくら探しても残っていない。人通りのある道で夜だったので地面を探すこともできなかった。

確か購入1年以内の紛失なら割引で買い直せた気がするけど、どうだったかなあ。

(追記)

調べたら、6ヶ月以内なら20%オフだとのこと。たいして安くならないし、あまり時間もない。

[book] 警官の紋章 (佐々木譲)

警官の紋章 (ハルキ文庫)(佐々木 譲) 読んだ。警察庁から来た男の次のやつ。視点の移動が激しく話を追うのが大変。なかなか事件が起こらないのも好きじゃない。3.3点。

佐伯が車を降りてあいさつすると、加茂は昔同様にほんの少しの偉ぶった様子も見せずに言った。

「そっちにおれのオフィスがある。入れ」

偉ぶってるよなあ。

やること

  • 請求書
  • 国勢調査
  • 請書
  • スーツ
  • コンタクト

2010年10月05日(火) [長年日記]

  • スーツの上着は修理してもらえた。費用は500円だった。
  • 国勢調査回答したー。

[windows][ruby] Ruby-1.9.2-p0 Microsoft Installter Packageをインストールした

[ruby-list:47363]でアナウンスされていたWindows用のRuby 1.9.2をインストールしたんだけど、gem installを実行したら

序数291がダイナミックライブラリSSLEAY32.dllからみつかりませんでした。

というエラーダイアログが出てきてしまった。

調べると、artonさんの日記

RubyGemなどを利用する場合は、お手数ですが、libopenssl-msvcr100をダウンロードして、インストールしたディレクトリ直下のbinディレクトリへコピーしてください。この時、特に管理者権限やインストール先ディレクトリを意識せずにmsiをインストールした場合は、Administrator用コンソールを利用したほうが良いと思います。

とあった。libopenssl-msvcr100.zipをダウンロードするとその中にssleay32.dllがあって、それらをbinにコピーしたら上のエラーは出なくなった。「Administrator用コンソールを利用」というのの意味が分からなかったので普通にエクスプローラからコピーしたんだけど、問題ないのかな。

[ruby][windows] Ruby 1.9だとNet::SSHとPageantの連携が動かない

Ruby 1.9でNet::SSH(net-ssh 2.0.23)を使ってみたら、以前できていたPageantとの連携ができなくなった。

net.ssh.authentication.agent[8f1f06]: connecting to ssh-agent
net.ssh.authentication.agent[8f1f06]: could not connect to ssh-agent

のように、ssh-agentとの接続でエラーになる。原因を調べると、

uninitialized constant Net::SSH::Authentication::Agent::Pageant

というエラーになっているからで、そうなる原因はssh/suthentication/agent.rbの最初に

if File::ALT_SEPARATOR && !(RUBY_PLATFORM =~ /java/) && RUBY_VERSION < "1.9"
  require 'net/ssh/authentication/pageant' 
end

とあるからだ。1.9でもpageantをrequireするようにしてみると

uninitialized constant DL::Importable

というエラーになった。Ruby 1.9ではDL::Importableはなくなっているみたい。

なので、Net::SSHのPageant連携機能はRuby 1.9では動かないようだ。

やること

  • 国勢調査
  • 請書
  • スーツ
  • コンタクト

2010年10月06日(水) [長年日記]

[dev][web][net] HTTPのchunkにはまった

分かってしまえばどうということはないが、はまったのでメモ。

ウェブブラウザとウェブサーバの間に割り込んで、HTTP応答の内容を一部変更するプログラムを書いた。が、変更されたHTTP応答を受信したウェブブラウザがHTMLの最初の方しかレンダリングしてくれない。なんでや。

HTTP応答を調べると、間に身に覚えのない数値が挟まっていた。この数値の所でブラウザのレンダリングが中断している。

この数値がTransfer-Encodingがchunkedの場合に付くchunk-sizeフィールドであることはわりとすぐに分かったのだけれど、何故それが付くとレンダリングが中断してしまうのかがなかなか分からなかった。

原因は、HTTP応答の一部を変更したことでchunkのサイズが変わり、chunk-sizeフィールドの値と実際のサイズが不一致になっていたから。応答の変更をchunkのサイズが変わらないように行うことで対処できた。

やること

  • コンタクト

2010年10月07日(木) [長年日記]

[dream] 宝くじの夢

見た夢のメモ。

会社で仕事をしていたら新沼くんにちょっと手伝って欲しいと言われる。上の階のPCでネットワーク図のようなGUIをカチカチクリックして、表示される数字がどうなるかを調べてくれとのこと。よく理解しないまま調べて結果を報告しに行ったら、忙しいらしくて担当者が西浦くんに交代。西浦くんと話していたら、総務部の人達がゾロゾロ入ってきた。先頭は芸能人だった気がするが誰だったか覚えていない。

総務部の人達は、宝くじに当たった人がいるから通知しに来たとのこと。おれは買っていなかったなあ、失敗したなあと思った。

このときには会社はデパートのように巨大になっており、各人に大きなロッカーが割り当てられていた。そのロッカー群を総務部の一団が順番に回っていき、遠くの方のロッカーの前で「はい、この方でーす」と発表された。当たったのは原田くんだった。一千万円くらい当たったみたい。皆で拍手。原田くんはちょっと泣いてた。おれも感動した。よかったねー。

こんな夢を見たので、リアルで宝くじを買うべき。今はオータムジャンボ宝くじを買えるみたい。今日は買い忘れた。

やること

  • コンタクト
  • 宝くじ

2010年10月09日(土) [長年日記]

[book] レガシーコード改善ガイドを買った

レガシーコード改善ガイド (Object Oriented SELECTION)(マイケル・C・フェザーズ/ウルシステムズ株式会社/平澤 章/越智 典子/稲葉 信之/田村 友彦/小堀 真義) 注文して買った。もっと本を読まなきゃな。

著者
マイケル・C・フェザーズ
価格
4410円
厚さ, ページ数
2.5cm, 449ページ
買った理由
仕事でレガシーコードを扱っており、今後もしばらく扱うことになりそうなので。

追記

もっと構成を整理して欲しい。いいことも書いてあると思うけど、面白くないんだよなあ。冗長に感じて、途中で飽きてしまった。

第3部の「依存関係を排除する手法」はリファレンス的に書かれているので、役に立つかもしれない。読み直した方がいい気がしてきた。3点。

「18.1 クラスの命名規則」をメモ

~Test
テストクラス。
Fake~
擬似クラス。テスト対象のクラスが必要とするクラスのニセモノ。
Testing~
テスト用サブクラス。テスト対象のクラスを、テストしやすくするためにサブクラス化したもの。

[game][hard][net] PSPの無線LAN設定

BUFFALO Air Station NFINITI 11n/g/b USB用 無線子機 WLI-UC-GN 大分前にバッファローのWLI-UC-GNという無線LANアダプタを買っていたのだけれど、それをやっと設定してみた。ドライバやら設定ソフトやら色々インストールさせられた。

で、これの親機モードを使ってPSPのインターネット接続を試してみた。AOSSで接続できるとあったのでまずそれを試してみたのだけれど、これだと接続方式がWEPになってしまうみたい。それは嫌なので、AOSSは使わずに手動設定でWPA-PSK(AES)方式での接続を行った。

無線LANの接続はわりとスムーズにできたのだけれど、インターネットへの接続はなかなかうまくいかなかった。DNSエラーになってしまう。調べると、IPアドレスの自動設定をやめれば解決するという例があったので、それを試したらインターネットへも接続できるようになった。PSPで設定したのは次の内容。

デフォルトルータ
PCで無線LANアダプタに割り当てられているIPアドレス
IPアドレス
デフォルトルータと同じネットワークになるIPアドレス
プライマリーDNS
PCで使っている、プロバイダのDNSサーバのIPアドレス

やること

  • コンタクト
  • 宝くじ

2010年10月14日(木) [長年日記]

  • ジャンボ宝くじ買った。10枚だけ。

[windows] Excelの「最後のセル」

Excel 2007を使っています。

最後のセルへのジャンプ

Ctrl-End 押下で「最後のセル」へジャンプできる。Excel で最後のセルをリセットする方法にはCtrl-Shift-End と書かれているけど、Shiftキー必要なのかなあ。

メニューからだと、[ホーム]→[検索と選択]→[ジャンプ]→[セル選択]→[最後のセル]で飛べた。

最後のセルのリセット

例えば10000行あるシートから後半5000行を削除したとき、「最後のセル」は5000行目にリセットされてほしいけど10000行目のままになっている。不便だなあと思っていたけど、保存を実行すると最後のセルがリセットされるみたいだった。Excel で最後のセルをリセットする方法にはブックを開きなおす必要があるように書かれているけれど。

[windows] Excelでグラフ専用のシートを作る

挿入メニューからグラフを作るとシート内にグラフが貼り付けられるけど、そのグラフを右クリックして[グラフの移動]→[新しいシート]を選ぶとそのグラフ専用のシートが作られる。

やること

  • コンタクト
  • 宝くじ

2010年10月15日(金) [長年日記]

[c++] C++でバックトレースを表示する

bkブログの

で全て語られているけれど、自分で使ってみたのでメモ。環境はUbuntu 10.04。

  • バックトレースはThe GNU C Libraryにあるbacktrace()とbacktrace_symbols()を使って取得できる。マニュアルはここ
  • C++の場合、backtrace_symbols()で得られる関数名がマングルされていて読みづらい。The GNU C++ Libraryにあるabi::__cxa_demangle()を使うと元の関数名を取得できる。マニュアルはここ

サンプルプログラムと実行結果をメモ。backtrace_symbols()のマニュアルにもあるけれど、関数名を得るにはリンカオプションとして -rdynamic を指定しないとうまくいかなかった。下に示すプログラムを -rdynamic なしでビルドしたときの出力結果は

Backtrace:
???: ./a.out() [0x8048e29]
???: ./a.out() [0x8049176]
???: ./a.out() [0x8049370]
???: ./a.out() [0x804937d]
???: ./a.out() [0x804938a]
__libc_start_main [error:status=-2]: /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb74dabd6]
???: ./a.out() [0x8048d71]

となり、-rdynamic ありでビルドしたときの出力結果は

Backtrace:
get_backtrace10(): ./a.out(_Z15get_backtrace10v+0x25) [0x8049e99]
f3(): ./a.out(_Z2f3v+0x14) [0x804a1e6]
f2(): ./a.out(_Z2f2v+0xb) [0x804a3e0]
f1(): ./a.out(_Z2f1v+0xb) [0x804a3ed]
main [error:status=-2]: ./a.out(main+0xb) [0x804a3fa]
__libc_start_main [error:status=-2]: /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb75d3bd6]
???: ./a.out() [0x8049de1]

となった。

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

// backtrace()とbacktrace_symbols()はこのヘッダ
#include <execinfo.h>

// __cxa_demangle() はこのヘッダ
#include <cxxabi.h>

using std::string;
using std::vector;

// バックトレース情報を文字列で取得する
vector<string> get_backtrace10() {
    // backtrace()でバックトレース情報を取得できる
    const int trace_size = 10;
    void* trace[trace_size];
    int size = backtrace(trace, trace_size);

    // backtrace_symbols()でバックトレース情報を文字列に変換できる
    char** symbols = backtrace_symbols(trace, size);

    vector<string> result(symbols, symbols + size);

    // symbolsをfreeする必要がある
    free(symbols);

    return result;
}

// 取得したバックトレース文字列から関数名部分を切り出す
string cut_function_name_part(const string& raw_text) {
    // '(' ~ '+' までを切り出せばいいみたい
    string::size_type left = raw_text.find("(");
    string::size_type right = raw_text.find("+", left + 1);
    return
        (left == raw_text.npos || right == raw_text.npos)
        ? ""
        : raw_text.substr(left + 1, right - left - 1);
}

// 関数名をデマングルする
string demangle_function_name(const string& mangled) {
    // __cxa_demangle()でデマングルできる
    int status = 0;
    char* demangled = abi::__cxa_demangle(mangled.c_str(), 0, 0, &status);

    // demangledをfreeする必要がある
    string result = demangled ? demangled : mangled;
    free(demangled);

    if (status != 0) {
        std::ostringstream oss;
        oss << " [error:status=" << status << "]";
        result += oss.str();
    }

    return result;
}

void f3() {
    vector<string> backtrace_texts = get_backtrace10();

    std::cout << "Backtrace:\n";

    for (vector<string>::const_iterator
            it = backtrace_texts.begin(), end = backtrace_texts.end();
            it != end;
            ++it) {
        string mangled_func_name = cut_function_name_part(*it);

        std::cout
            << ((!mangled_func_name.empty())
                    ? demangle_function_name(mangled_func_name)
                    : "???")
            << ": " << *it << "\n";
    }
}

void f2() { f3(); }

void f1() { f2(); }

int main() { f1(); }

[life] toto当選した!

第475回の3等が。当せん金はなんと250円。2口当たっていたので合わせて500円。買ったのは8口で800円だったから赤字だ。

5年前にtotoGOAL3に当たったことはあった。totoGOAL3は当せん金が少なすぎるので最近はtoto一本をほぼ毎週800円買っていた。今回は天皇杯でJ1vsJ2の試合が多くて予想は簡単だったんだよなあ。

今日もtoto買った。1億当たってくれー。

やること

  • コンタクト

2010年10月18日(月) [長年日記]

[life] コンタクトレンズを再購入

月初めにコンタクトレンズの片方を紛失後メガネで過ごしていたが、目が疲れる。今日眼科へ行って検査してもらい、その後コンタクトレンズを購入した。紛失した方は20%引きで購入、紛失していない方は無料で貰えた(古いものと交換と聞いていたが、古いものの提出を求められなかった)。11000円の出費。

病院は終わった後になってああ言えばよかったと色々後悔する。

やること

  • コンタクト