2010/05/07
ディーラー車検
そろそろ車検なので近所のディーラーで見積もりを出してもらった。
ディーラーで車検というと「割高」というイメージが一般的であり、
自分自身もそう思っていたのだが、
実際に見積もりを出してもらうと以外な結果に驚いている。
目立った問題もなく、殊更気になる不具合もないうえ、
結構気に入っているので当分買い替える予定はない。
ただし、普段はほとんど整備らしい整備もしていないので、
7 年目の車検を迎えるにあたって一度ちゃんとメンテナンスをしようと思い、
それならばという事でディーラーに車検見積もりをお願いした次第。
ゴールデンウィーク中という事もあり、
結構賑わった店内で見積もりが出来るまで 30 分程度待たされたのだが、
出てきた見積もりは非常に納得できる内容だった。
主立った項目としては、
- 年式・及び走行距離から考えての V ベルト交換
- リアブレーキパッドの交換を含むブレーキ系統のリフレッシュ
- エアエレメントの交換
- エアコンフィルタの交換
- 必要な油脂類の交換作業
これらの項目に車検を受けるうえで最低限必要な下回りの洗浄等の工賃、 法定諸費用、税金、自賠責保険などの費用の合算金額が見積もり金額なのだが、 街のガソリンスタンドや大規模な自動車用品店と同程度の金額か、 場合によってはそれ以下の金額だったのに非常に驚いた。
車検に 2日を要するというデメリットはあるものの、 車検期間中は代車を無償で提供して貰えるという事であるし、 何よりもディーラーに作業をお願いするという安心感を考えると、 非常に reasonable な金額であると思う。
ちなみに、今回車検の見積もりを依頼したのは近所にあるディーラーで、 2年ほど前に転居してきて以来、初めて訪れた店舗であるので、 いわゆる「お得意様」だからの料金ではない。
2010/04/28
PDF Browser Plugin
Mac OS X の Firefox は、
標準の状態だと pdf ファイルを直接ブラウザで表示する事が出来ず、
一度ダウンロードしてから Preview などで表示する必要がある。
この「一度ダウンロードする」という操作は、
safari や他の OS 上で動作する Firefox などの様に
ブラウザのウインドウに直接表示される動作に慣れていると
非常に面倒に感じてしまう。
そこでお勧めなのが
PDF Browser Plugin。
このプラグインをインストールすると、
pdf ファイルが Firefox のウィンドウに直接表示される。
表示している pdf ファイルをローカルディスクにセーブしたり、
印刷したり、table of contents が表示出来たりと機能も豊富でとても便利。
非商用の個人利用の場合は無料で利用できるのも嬉しい。
通常の方法でインストールすると safari でも利用できる様になるのだが、
Snow Leopard のデフォルト状態で起動される safari は
64bit モードなので PDF Browser Plugin は動作しない様だ。
そこで暫定的ではあるが、標準でインストールされる
/Library/Internet Plug-Ins/PDF Browser Plugin.plugin を
Firefox のパッケージ内
(/Application/Firefox.app/Contents/MacOS/plugins/)に
移動すると Firefox だけで有効になり、
safari は従来通り Preview で pdf が表示できるようになる。
2010/04/20
FreeBSD 上で動作する md5sum コマンド
Linux との互換性で割と問題になるのが、
date (1) や ls (1) コマンドの引数の相違や、
FreeBSD の md5 (1) コマンドと
Linux の md5sum (1) コマンドとの動作の相違など。
特に md5 (1) コマンドは出力形式に互換性がないので、
FreeBSD 上で取得したハッシュ値を Linux 上で簡単に検証できない。
通常の対話的用途での使用はともかく、
スクリプト中で利用する場合などでは問題が発生してしまう。
これらは Ports から sysutils/coreutils を導入すると、
/usr/local/bin/gコマンド という名称
(例えば /usr/local/bin/gmd5sum)でインストールされるので、
ファイル名を調整したりシンボリックリンクを利用するなどして
ある程度は問題が吸収できるだろう。
2010/04/14
2010/04/12
2010/03/27
mnews
随分と長い間 mnews というソフトウェアを愛用している。
名前の通り、元々は Net News Reader として開発されたのだが、
MUA としての機能も備わっていて割と使いやすいので、
随分と以前より(1990年代の中盤頃から)愛用している。
最近はあまりメンテナンスもされていない様なのだが、
たまにネットで公開されている機能拡張用のパッチを適用したり、
自分でも簡単な改造をしながら長年愛用してきた。
今ではオリジナルにはない mime マルチパートメイルの送受信機能なども加わり、
今時の MUA としては最低限の機能は備える程度には機能が充実している。
最近は UNICODE で送られてくるメイルも増えて来たので、
UNICODE メイルを表示するためのパッチを適用し、
ついでに html メイルを lynx などのテキストベイスのブラウザで
表示する機能を追加した。
これで現状必要と思われる機能はほぼ網羅したと思われ、
届くメイルのほぼ全てを閲覧する事が出来るようになった(多分)。
まだまだ mnews を愛用できそうで嬉しい限りだ。
2010/03/22
スモークハウス
葉山の方で偶然見かけたスモークハウス。
どうみても普通の住宅にしか見えない入り口から階段を登り、
本当にお店なのかな?と恐る恐る足を踏み入れてみると、
店に入った途端にとても香ばしいスモークの香りに包まれた。
お世辞にも広いとは言えない店舗で、
ご主人と会話をしながらおすすめのサバ、アジ、タコなどのスモークを購入。
自宅に戻って早速おすすめレシピのスモークタコとクレソンのサラダを作り、
その他にサバ、アジを食べてみる。
本当に言葉を失うくらいに美味しいスモークでむさぼり食べてしまった。
素材の表面のみならず中にまでしっかりと燻製の香りがしみこんでいるのは、
相当手間暇をかけて作られたんだろうと想像させられる。
良い意味でのこだわりとプライドを持った人が丁寧に作るモノは ジャンルを越えて素晴らしいと改めて認識した。
2010/03/18
GtkTwitter
FreeBSD 上で動作する twitter クライアントの GtkTwitter は 起動するたびにアカウント情報を入力する必要があり面倒だったので、 アカウント情報をファイルに保存して再利用するためのパッチを作成してみた。
自分が使う事だけを考えて適当に作ったので、
パスワードの暗号化すらしておらず、
シンタックスもセマンティックスもチェックしていない。
ただ単にアカウント情報を保存して再利用するだけの機能のみ。
ホームディレクトリに .gtktwitter があれば
保存されたアカウント情報を利用する。
$HOME/.gtktwitter がなければ
従来通りアカウント情報の入力ダイアログを表示し、
入力されたアカウント情報は $HOME/.gtktwitter に保存される。
$HOME/.gtktwitter は以下の書式なので、
アカウント情報は vi (1) を利用して入力する事も可能である。
勿論 cat (1) や echo (1) でも可。
ファイル中のスペースは文字そのものとして解釈されるので注意する事。
mail=ID pass=パスワード
diff -rc gtktwitter-0.0.4.orig/gtktwitter.c gtktwitter-0.0.4/gtktwitter.c *** gtktwitter-0.0.4.orig/gtktwitter.c 2007-05-10 00:50:02.000000000 +0900 --- gtktwitter-0.0.4/gtktwitter.c 2010-03-18 20:15:01.000000000 +0900 *************** *** 724,729 **** --- 724,783 ---- return FALSE; } + #define CONFIG_FILE ".gtktwitter" + + static gboolean getconfig(GtkWidget *window) + { + + gchar *config; + char buff[1024], + *m = NULL, + *p = NULL; + FILE *fp; + gboolean ret = FALSE; + + if((config = g_strdup_printf("%s/%s", getenv("HOME"), CONFIG_FILE))){ + if((fp = fopen(config, "r"))){ + while(fgets(buff, sizeof(buff), fp)) + if(!strncmp(buff, "mail=", 5)) + m = strdup(buff+5); + else if(!strncmp(buff, "pass=", 5)) + p = strdup(buff+5); + fclose(fp); + } + g_free(config); + + if(m && p){ + g_object_set_data(G_OBJECT(window), "mail", m); + g_object_set_data(G_OBJECT(window), "pass", p); + ret = TRUE; + } + } + + return (ret); + + } + + static void putconfig(const char *m, const char *p) + { + + gchar *config; + FILE *fp; + + if((config = g_strdup_printf("%s/%s", getenv("HOME"), CONFIG_FILE))){ + if((fp = fopen(config, "w"))){ + fprintf(fp, "mail=%s\n", m); + fprintf(fp, "pass=%s\n", p); + fclose(fp); + } + g_free(config); + + } + + return; + + } + /** * login dialog func */ *************** *** 735,740 **** --- 789,798 ---- GtkWidget* pass = NULL; gboolean ret = FALSE; + if(getconfig(window)){ + ret = TRUE; + } + else{ /* login dialog */ dialog = gtk_dialog_new(); gtk_dialog_add_buttons(GTK_DIALOG(dialog), *************** *** 804,812 **** --- 862,873 ---- char* pass_text = (char*)gtk_entry_get_text(GTK_ENTRY(pass)); g_object_set_data(G_OBJECT(window), "mail", strdup(mail_text)); g_object_set_data(G_OBJECT(window), "pass", strdup(pass_text)); + putconfig(mail_text, pass_text); ret = TRUE; } + } + if(dialog) gtk_widget_destroy(dialog); return ret; }