日々

link permalink

家探しその 2

先週に引き続き、住む場所探し。前回訪れた不動産屋さんの高槻支店があるそうなので訪ねました。

前回は吹田市でしたが、やや予算オーバーでした。今回は高槻市近辺を探しました。

高槻市で JR と阪急双方が利用可能な地域というと JR 高槻駅&阪急高槻市駅と JR 摂津富田駅&阪急富田駅の 2カ所があります。

高槻駅近辺

高槻駅近隣は非常に便利な場所なので、築年数の少ない新しい建物を選ぼうとすると家賃がべらぼうに高いです。かといって安い家賃となると大阪万博の頃の(築 30年突破)設備がモロに昭和な物件くらいしかありません。いくら安くても昭和にタイムスリップするのはご勘弁…。

というわけで高槻駅近辺は厳しいです。ペーペーでも借りられるような物件となると、徒歩 15〜20分くらいの高台か、もっと離れた平地の物件になります。そんな距離を出勤していたら、確実に心が折れます。

富田駅近辺

富田駅近辺は JR <-> 阪急間がわずか 2分のため、駅の間に土地がほとんどありません。従って JR の北側か、阪急の南側に借りることになります。

ベッドタウンだけあって物件はたくさんありますが、どれもそこそこ距離(15分くらい)があります。

一カ所だけ駅近の物件があったのですが、真西に窓があって西日が全力で入っていました。所詮西日だろと思ってなめていたのですが、この季節にも関わらず、めちゃくちゃ暑い部屋でした。夏の電気代がかなりヤバいことになりそうです。

距離は捨てて、快適さと家賃を

おそらくこれ以上駅近にこだわってもろくな目に遭わないでしょう…。ここはひとつ、駅からの距離を諦め、ある程度快適さを確保する方向に倒すしかありません。

というわけで今のところ JR 北側の徒歩 15分くらいの物件を第一候補に考えています。せっかく買った自転車もこれで活躍できることでしょう。

[編集者: すずき]
[更新: 2010年 6月 8日 00:05]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

今更なんだけども

東プレ Realforce 108UBK を使い始めてから半年が経ちました。作りはしっかりしていて、キーボードがずれていってしまうこともないし、キーの表面が剥げたり、削れてぴかぴかになることもありません。

私のようなへっぽこタイパーにはもったいないくらいのキーボードですが、以前と比べてたった 1つだけ難点があります。キーボードの打鍵音がかなり響くのです。

夜は特に打鍵音が気になります。以前使用していたパンタグラフ式と比べると、Realforce のキーストロークはかなり深く、その分だけキーが勢いよく土台にぶつかって盛大にガシャガシャ音がするのです。

気になる時間帯

とはいえ、キーの打ちやすさのためにはストロークを浅くするわけにはいかないでしょう。それに業務用のキーボードですから、元から静音性は必要とされていません。家庭で使っているホビーユーザには悩ましいところです。

一番良いのは、夜中にキーボードなんて打ってないで、さっさと寝る&朝起きてやることなんだろうな…。

[編集者: すずき]
[更新: 2010年 6月 8日 01:04]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

noncopyable を継承したクラスを継承するとエラー?

(説明は後述)link コードと VC++ のプロジェクトファイルを固めたものへのリンク。

C++ の超有名ライブラリ boost に、デフォルトのコピー操作をコンパイル時点でエラーにしてくれる boost::noncopyable という便利クラスがあります。

C++ ではコピー操作(コピーコンストラクタや operator=)が未定義のクラスでコピー操作を行うと、デフォルトのコピーが働きます。しかしポインタをコピーしてしまうなど、デフォルトのコピーでは困るケースがあります。boost::noncopyable を使うと、気づかないうちに意図しないコピーを使っていないかどうかを、コンパイル段階で検出できるのです。便利でしょ。

前置きが長くなりましたが、私もこれはいいなと思って使ってみたのですが、g++ 4.3.2 では何も言われないのに、VC++ 2010 だとエラーになってしまい困っています。

私の使い方が何か間違っているだけかもしれませんが、同じコードをコンパイルしても g++ 4.3.2 は何も言いません。しかも VC++ 2010 の出すエラーメッセージが意味不明すぎてどこをどう直せばいいのかわからんのです…。

やりたいこと

コピー OK なクラス A と、コピー NG な(Uncopyable(※1)を継承)クラス B を多重継承した、クラス C を定義(※2)します。このオブジェクトを例外で投げる(main() の throw C(); の部分)ということがしたいのです。

その際 g++ 4.3.2 は何も言わないし、できた実行ファイルも正常に動作もしますが、VC++ 2010 は「そんなことはできねーよ!」とお怒りになり、コンパイルエラーにされてしまいます。

パターン 1(g++ は OK、VC++ はエラー)

A <-----------------+-- C
Uncopyable <-- B <--'

しかし、クラス B を取っ払って、下記のように多重継承したクラス D を使うと VC++ も文句を言わなくなります。

パターン 2(g++ は OK、VC++ も OK)

A <-----------------+-- D
Uncopyable <--------'

(※)Uncopyable クラスは、boost::noncopyable のコピペにデバッグメッセージを追加しただけのクラスです。

(※2)コピー OK とコピー NG を多重継承するなんて、コピー OK なのか NG なのか矛盾してますよ、テメーの設計はおかしいですよ。という突っ込みはその通りなのですが、今は設計の話ではないので無視して進めてます。

コード

コードは下記の通りです。先頭の #define USE_CLASS_C を有効にするとパターン 1、コメントアウトなどして無効にするとパターン 2 となります。

g++ では通るけど VC++ 2010 だとエラー

#include <iostream>
#include <cstdio>

//#define USE_CLASS_C

class Uncopyable {
protected:
	Uncopyable() {
		std::cout << "Uncopyable::Uncopyable()" << std::endl;
	}
	~Uncopyable() throw() {
		std::cout << "Uncopyable::~Uncopyable()" << std::endl;
	}
	
private:
	Uncopyable(const Uncopyable&);
	const Uncopyable& operator=(const Uncopyable&);
	
};

class A {
public:
	A() {
		std::cout << "A::A()" << std::endl;
	}
	virtual ~A() {
		std::cout << "A::~A()" << std::endl;
	}
	
	virtual const char *func() {
		return "A";
	}
};

class B : private Uncopyable {
public:
	B() {
		std::cout << "B::B()" << std::endl;
	}
	virtual ~B() {
		std::cout << "B::~B()" << std::endl;
	}
};

#ifdef USE_CLASS_C
class C : public A, public B {
public:
	C() : A(), B() {
		std::cout << "C::C()" << std::endl;
	}
	virtual ~C() {
		std::cout << "C::~C()" << std::endl;
	}
	C(const C& c) : A(), B() {
		std::cout << "C::C(const C& c)" << std::endl;
	}
	
	virtual const char *func() {
		std::cout << "C::func()" << std::endl;
		return "C";
	}
};
#else
class D : public A, private Uncopyable {
public:
	D() : A(), Uncopyable() {
		std::cout << "D::D()" << std::endl;
	}
	virtual ~D() {
		std::cout << "D::~D()" << std::endl;
	}
	D(const D& d) : A(), Uncopyable() {
		std::cout << "D::D(const D&)" << std::endl;
	}
	
	virtual const char *func() {
		std::cout << "D::func()" << std::endl;
		return "D";
	}
};
#endif

int main(int argc, char *argv[])
{
	try {
		std::cout << "try0" << std::endl;
#ifdef USE_CLASS_C
		throw C();
#else
		throw D();
#endif
	} catch (A& e) {
		std::cout << "catch0" << std::endl;
		std::cout << "---- " << e.func() << std::endl;
	}

	getchar();
}

コピペするのすら面倒くさい方のために、link コードと VC++ のプロジェクトファイルを固めたものを置きます。全コードの著作権は放棄しますが、Uncopyable クラスは boost ライブラリ boost::noncopyable の派生物です。

VC++ のエラーは意味がわかりません

コンパイルと実行結果は下記の通りです。

パターン 1 VC++(エラー)、g++(OK)、パターン 2 VC++(OK)、g++(OK)の順に、コンパイル結果と、実行結果を連続して掲載しています。

まずは Uncopyable を直接継承していないパターン(パターン 1)です。VC++ の結果です。

VC++ 2010、パターン 1(エラー)
1>------ ビルド開始: プロジェクト: noncopyable, 構成: Debug Win32 ------
1>  a.cpp
1>y:\projects\c\test\test_noncopyable\a.cpp(55): error C2248: 'Uncopyable::Uncopyable' : private メンバー (クラス 'Uncopyable' で宣言されている) にアクセスできません。
1>          y:projectsctesttest_noncopyablea.cpp(17) : 'Uncopyable::Uncopyable' の宣言を確認してください。
1>          y:projectsctesttest_noncopyablea.cpp(7) : 'Uncopyable' の宣言を確認してください。
1>          コンパイラでのこの診断により関数 'B::B(const B &)' が生成されました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

次に g++ の結果です。

g++ 4.3.2、パターン 1(OK)
$ g++ -Wall -DUSE_CLASS_C a.c -o c.out
$ ./c.out
try0
A::A()
Uncopyable::Uncopyable()
B::B()
C::C()
catch0
C::func()
---- C
C::~C()
B::~B()
Uncopyable::~Uncopyable()
A::~A()

次、クラス B を継承ツリーから省いて Uncopyable を直接継承しているパターン(パターン 2)です。VC++ の結果です。

VC++ 2010、パターン 2(OK)
try0
A::A()
Uncopyable::Uncopyable()
D::D()
catch0
D::func()
---- D
A::a = 0
D::~D()
Uncopyable::~Uncopyable()
A::~A()

次に g++ の結果です。

g++ 4.3.2、パターン 2(OK)
$ g++ -Wall a.c -o d.out
$ ./d.out
try0
A::A()
Uncopyable::Uncopyable()
D::D()
catch0
D::func()
---- D
D::~D()
Uncopyable::~Uncopyable()
A::~A()

な、なぜだ…。一体、何が間違っているというのだ…。

[編集者: すずき]
[更新: 2014年 9月 19日 01:21]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

もうだめだな

携帯を毎朝フル充電しているにも関わらず、会社に着くまでには電池残量不足で電源が切れます。

電車内では i チャネルでニュース見てるだけなんですけど、数ページ見ただけで残量が減っていき、一瞬で電池残量不足になります。全く使い物になりませぬ!

電池パックを取り出して見るとお餅のように丸くなっています。電池パックのあまりの丸さに、裏の蓋もなかなか閉まらないくらいです。こりゃもう寿命だなー。

[編集者: すずき]
[更新: 2010年 7月 7日 00:40]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

ひらメソッド

私が Linux Kernel を読む際は、いわゆるひらメソッドで読み進めています。

ただ、ソースコードの部分はあえてブロックにして区別するなど、書式はかなり変えてます。例えばこんな感じlinux-2.6.33/__EXPORT_SYMBOL()です。

その際に補助ツールとして、以前紹介(2008年 2月 6日の日記参照)したリンクをバックトレースするプラグイン(#backlinks)と、PukiWiki でブロック表示させるために、ソースコードの行頭にスペースを入れるツールを自作しました。

これでも大きな問題はないのですが、別の関数、シンボルへのリンク作成を手で作るのは面倒くさいし、間違いも起きやすいです。

理想は gtags のように各関数、シンボルへのリンクは自動で作ってくれることです。それでいて自分のコメントも書き込めるようになっていれば Good です。

どこかにそういうツールありませんかね…。

[編集者: すずき]
[更新: 2010年 7月 7日 01:00]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報