荷造り半分

本の約80%の段ボール詰めが終わった。全作業の半分くらいが終わったように見える。あと二週間。
ADSLの移転申し込みをした。2-3週間かかるらしいので、空白期間が出る恐れがある。ネットに接続できないと仕事ができない。
時間が無くなってきた。


カビ

本を段ボールに詰めていたとき、カビに浸食されて清掃しても取れない本が2冊もあり、泣く泣く処分することになった。
その本が入っていた本棚を処分ために移動すると、裏側にビッシリとカビ、カビ、カビ!1時間ほど、家中カビの臭いだらけになった。4年間、湿気の多い部屋に置き続けた結果だった。もし家が見つかっていなかったら、この本棚に入っている本は全滅だったかもしれない。恐ろしい。
しばらく掃除して、今は家の外にある。明日、粗大ごみの券を貼り付けてゴミ置き場まで持っていく。


新居

新居に行って各部屋のサイズを測り、気になる点をチェックした。
都市ガスを導入している物件には、ガスストーブを使うために、部屋にガス栓があることがある。この物件にはなんと2つもガス栓があった。ガスストーブは一気に温まって便利だけれど、ガス代は跳ね上がり月1万円程度のプラスになる。ここ最近の円安と原料高騰、消費税UPのせいでもっと高くなっているだろう。
でも今の物件のガス代月5万よりはマシなんだろうけど。二度とプロパンガスの物件には住みたくない。
今回、5年前に住んでいた場所とほぼ同じ場所に引っ越す。物件は大通りに面していて、ひっきりなしに人が通る。歓楽街ではないので、通行人は親子連れかサラリーマンがほとんど。夜でも安全だ。車の音が始終するけれど、トラックがほとんど通らない道なので排気ガスは気にならない。以前、環八の近くに住んだ時は本当に空気が悪かった。郊外なのに環境が悪くてどうする。
東京は店の新陳代謝が激しい。5年も経つとマンションは増えてるし店も増えたり入れ替わったりしている。レンタルビデオ屋が服屋に、モスバーガーが不動産に、近くのマンションの一階が薬局に、、などなど。一番心配だったのは、東京を離れる直前にできた自然食品店が潰れていないか、だった。前を通ったら、無事営業中だった。ちょっとした不足の食料品を買うのに重宝していたので、助かった。


ごみ

段ボール2個分と思っていた紙・新聞・本のゴミが結局段ボール4杯分くらいあった。
マンションの3階から1階まで下りて、100mほど先のゴミ置き場まで重い紙類を抱えて、引き返す。10往復して75分、アルバム1枚聞けてしまう時間がかかった。運動不足なので、明日は筋肉痛で激痛になることが予想される。
明日、新居を一人で見に行くことになった。カギを不動産屋にもらって、部屋のあちこちのサイズを測る予定。家のある辺りに行くのは久しぶりだ。どんな風に変わっているのだろう。あの頃の自分とは違う自分が、どんな印象を受けるのだろう。


保険の解約

火災保険を去年の12月に更新したばかりなので、退去日付で解約した。2年契約なので、2/3ほど帰ってくる予定。
明日は大量の新聞・紙ゴミを捨てる。不要なのによくもまあこんなに取っておいたものだ。段ボール2杯分くらいありそうだ。
明日を逃すともう引っ越しまで1回しか回収がない。紙ゴミの回収は1月に2回しかない。日常でも不便だったけれど、引っ越しの時はもっと不便だ。ビンごみは月に1回だから、もう回収はない。毎日インスタントコーヒーを飲んでどんどん増える空きビンは引っ越し先に持っていってそこで捨てることにした。東京は何でも最低週1回は回収してくれるので助かる。


二帖

新居の部屋の使い方を考えている。3LDKが3SLDKになり、若干広くなる。今仕事をしている六畳の部屋は、使い方を失敗した。本を大量に詰め込んだものの、廊下側で冬に湿気る部屋で、しかも風の通りが悪い。そのため、一部の本がカビてしまった。新居ではカビ対策をしないといけない。
で、新居では3SLDKのSが仕事部屋になりそうだ。六畳から二畳になる。狭いけれど、PC1台あれば事足りるので、一畳でもやっていけるくらいだ。幸い窓もあるし、暗くふさぎ込むこともないだろう。


FareMap3 運賃一覧表示

FareMap更新。
・同一名の乗換駅はひとまとめにして表示するようにした。
・運賃一覧表示に対応した。駅をダブルクリックすると他の全駅への運賃が表示される。計算はほぼ正しいようだ。
・駅、駅名をドラッグできるようにした。保存はまだできない。

残り作業
・路線図の保存、読み込み、駅の大きさなどの変更
・同一駅間に複数の路線がある場合は線をずらして表示する
・計算の進捗を表示したい
・路線追加
・速度増加


田舎の欠点

昨日、腹立たしい出来事があった。
2月から下の子2人がある書道会の教室に通っていた。もう引っ越すので昨日が最後のレッスンとなった。この教室は、この界隈では有名なとある書家が会長の書道会で、西湘地域ではそこそこ大きな会だった。こどもたちを見てくれる先生はご高齢の女性で、その会長の奥さんだった。
月に1度会報が発行され、級位・段位別の順位が掲載される。その会報によると、どうも会長はごく最近に亡くなったらしく、会長は別の人に変わっていた。
最後のレッスンのとき、先生が「ちょっとひどいわよねぇ」とこどもたちに話しかけた。なんと、一番下の子の順位が不当に下げられたというのだ。先の新会長が「これは大人が手伝って書いたに違いない」と言いがかりをつけたという。もちろんそんなはずはない。先生も抗議したという。
手前味噌だが一番下の子の字は書道を初めて3か月なのに上手い。今回の課題は「は」だったのだが、見事な太く力強い字なのだ。その字が、何故か下から数えたほうが早い順位に落とされている。一番になった人の字は会報に写真で掲載される。のだが、その「は」は下手だった。曲がっているし、細くひょろひょろだった。ちなみに会長の娘はなぜかいつも1位で、必ず写真が掲載されている。今回の字は一人だけかすれていて、決して上手ではない。
こんなことがあると、田舎がますます嫌になる。異質なもの、脅威と感じたものをすぐに排除する。曇りの無い目で見ようとしない。先生はいい人だったのに、最後の最後でケチがついてしまった。
妻がこの気持ちを最も表現できる言葉がなにか探していた。
「バカヤロウ」
この5年間数々の習い事をこどもにさせてきたが、どれも見学だけでやめてしまったり、長続きせずすぐやめてしまっていた。いずれも理由は「他のこどもが騒ぐ、ふざける、真面目に取り組まない」。毎日富士山が見えるし海も近いし景色はいいのにね。人間が悪い。


.NETアプリケーションで遅延バインディングを使ってExcelのオートシェイプをコピー

Excelで画面上の文字にマルを付ける依頼があった。
それも、VBAからではなく、C#の.NETアプリケーションから。
しかも、バージョン違いを吸収するために、遅延バインディングを使え、と。
いろいろ試したところ、シートにマルのオートシェイプを作っておいて、それをコピペする方法でないと不可能と分かった。ところが参照したネット上のTipsは間違っていて、時間を食った。結局、素直にコピペ(Shape.Duplicate + Shape.Cut + WorkSheet.Paste)するのが一番良いとわかった。恐ろしく面倒なコードになった。


// Excelアプリケーションオブジェクト
private object xlsApplication = null;
// Workbooksオブジェクト
private object xlsBooks = null;

// Excelアプリケーションオブジェクト
protected object XlsApplication
{
get
{
// 存在しない場合は作成する
if (xlsApplication == null)
{
Type classType = Type.GetTypeFromProgID(“Excel.Application”);
xlsApplication = Activator.CreateInstance(classType);
}
return xlsApplication;
}
}

// Workbooksオブジェクト
protected object Workbooks
{
get
{
if (xlsBooks == null)
{
xlsBooks = XlsApplication.GetType().InvokeMember(“Workbooks”,
BindingFlags.GetProperty, null, XlsApplication, null);
}
return xlsBooks;
}
}

//あらかじめshapeSheetNameシートにitemNameというオートシェイプが作成されているものとして、
//sheetNameシートにnewItemNameという名前でオートシェイプを座標(x,y)にコピーする
public void CopyShape(int bookIndex, string sheetName, string shapeSheetName,
string itemName, string newItemName, float x, float y)
{
object book = null;
object sheets = null;
object sheet = null;
object shapeSheet = null;
object shapesFrom = null;
object shapesTo = null;
object shape = null;
object newShape = null;
object newShape2 = null;

try
{
// WorkBooksは
// WorkbooksオブジェクトからBookオブジェクトを取得
book = Workbooks.GetType().InvokeMember(“Item”, BindingFlags.GetProperty,
null, Workbooks, new object[]{ bookIndex });

// BookオブジェクトからSheetsオブジェクトを取得
sheets = book.GetType().InvokeMember(“Worksheets”, BindingFlags.GetProperty,
null, book, null);

// SheetsオブジェクトからSheetオブジェクトを取得
sheet = sheets.GetType().InvokeMember(“Item”, BindingFlags.GetProperty,
null, sheets, new object[]{ sheetName} );

// Shapeのあるシートをゲット
shapeSheet = sheets.GetType().InvokeMember(“Item”, BindingFlags.GetProperty,
null, sheets, new object[]{ shapeSheetName} );

//Shapeをゲッツ
shapesFrom = shapeSheet.GetType().InvokeMember(“Shapes”, BindingFlags.GetProperty,
null, shapeSheet, null);
shape = shapesFrom.GetType().InvokeMember(“Item”, BindingFlags.InvokeMethod,
null, shapesFrom, new object[] { itemName });

//コピペする
newShape = shape.GetType().InvokeMember(“Duplicate”, BindingFlags.InvokeMethod,
null, shape, null);
newShape.GetType().InvokeMember(“Name”, BindingFlags.SetProperty,
null, newShape, new object[] { newItemName });
newShape.GetType().InvokeMember(“Cut”, BindingFlags.InvokeMethod, null, newShape, null);
sheet.GetType().InvokeMember(“Paste”, BindingFlags.InvokeMethod,
null, sheet, null);

//配置
shapesTo = sheet.GetType().InvokeMember(“Shapes”, BindingFlags.GetProperty,
null, sheet, null);
newShape2 = shapesTo.GetType().InvokeMember(“Item”, BindingFlags.InvokeMethod,
null, shapesTo, new object[] { newItemName });
newShape2.GetType().InvokeMember(“Left”, BindingFlags.SetProperty,
null, newShape2, new object[] { x });
newShape2.GetType().InvokeMember(“Top”, BindingFlags.SetProperty,
null, newShape2, new object[] { y });
}
finally
{
//COMオブジェクトの掃除
ReleaseComObject(newShape2);
ReleaseComObject(newShape);
ReleaseComObject(shape);
ReleaseComObject(shapesTo);
ReleaseComObject(shapesFrom);
ReleaseComObject(shapeSheet);
ReleaseComObject(sheet);
ReleaseComObject(sheets);
ReleaseComObject(book);
}
}