etch は archive.debian.org に
今更etchつかわなくても・・・って話ではあるんだけど、etchな環境があって、apt-get update したら、
# apt-get update Ign http://ftp.jp.debian.org etch Release.gpg Ign http://ftp.jp.debian.org etch Release Ign http://ftp.jp.debian.org etch/main Packages/DiffIndex Ign http://ftp.jp.debian.org etch/contrib Packages/DiffIndex Ign http://ftp.jp.debian.org etch/non-free Packages/DiffIndex Ign http://ftp.jp.debian.org etch/main Sources/DiffIndex Ign http://ftp.jp.debian.org etch/contrib Sources/DiffIndex Ign http://ftp.jp.debian.org etch/non-free Sources/DiffIndex Err http://ftp.jp.debian.org etch/main Packages 404 Not Found [IP: 130.54.59.159 80] Err http://ftp.jp.debian.org etch/contrib Packages 404 Not Found [IP: 130.54.59.159 80] Err http://ftp.jp.debian.org etch/non-free Packages 404 Not Found [IP: 130.54.59.159 80] Err http://ftp.jp.debian.org etch/main Sources 404 Not Found [IP: 130.54.59.159 80] Err http://ftp.jp.debian.org etch/contrib Sources 404 Not Found [IP: 130.54.59.159 80] Err http://ftp.jp.debian.org etch/non-free Sources 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/main/binary-i386/Packages.gz 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/contrib/binary-i386/Packages.gz 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/non-free/binary-i386/Packages.gz 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/main/source/Sources.gz 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/contrib/source/Sources.gz 404 Not Found [IP: 130.54.59.159 80] Failed to fetch http://ftp.jp.debian.org/debian/dists/etch/non-free/source/Sources.gz 404 Not Found [IP: 130.54.59.159 80] Reading package lists... Done E: Some index files failed to download, they have been ignored, or old ones used instead.
的な感じでエラーになりまくった。
どうやら、もうetchな時代じゃないってことで、パッケージが移動しちゃったみたい。てことで /etc/apt/sources.list を ftp.jp.debian.org から、 archive.debian.org に変更。
# etch # deb http://archive.debian.org/debian/ etch main contrib non-free deb-src http://archive.debian.org/debian/ etch main contrib non-free
もうlennyにしろってことですよねー
aptitude のインタラクティブな質問に自動でYって答える(confnewの選択)
% sudo apt-get -y install hoge
とかでなんとかなるやつなら良いけど、たとえば、
Configuration file `/etc/hoge.conf' ==> File on system created by you or by a script. ==> File also in package provided by package maintainer. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : background this process to examine the situation The default action is to keep your current version. *** hoge.conf (Y/I/N/O/D/Z) [default=N] ?
みたいなダイアログで、 デフォルトで new の方になってくれない+ Y って答えてくれない場合があって、自動化でなんちゃらやるスクリプトとか書いて実行してるとそこで止まって悲しい。
そういうときは、apt-get とかで
% sudo apt-get -y --force-yes -o Dpkg::Options::=--force-confnew install hoge
とか。Dpkg::Options をつける。
まあ、よく分からないパッケージをインストールするときは注意が必要だけど、設定ファイルとかもろもろパッケージ化したりして管理してる場合には役に立つかも。
型消去
わすれなにうちにメモ.
Factory とか実装したときに使った.
C++ で継承したときにサブクラスのメンバ関数を呼ぶためには virtual をつけて仮想関数にする
いや,このネタは半年くらい前に学んだ話の超初歩だと思うんですけど.
C++ で Factory Method について書こうと思ったときに,とりあえずここからまとめておこうかと.
ようするに,A というクラスを継承した B や C があって,そいつらを使うときには,型 A で変数を宣言するとします.そして,そのときに A に存在するメンバ関数を B などでオーバーライドしたい場合.同じ名前のメンバ関数を作ればオーバーライドされるわけではなくて,仮想関数として明示的に宣言してあげなきゃだめ.
#include <iostream> using namespace std; class Hoge { public: Hoge() {} ~Hoge() {} void Hello() {} }; class Fuga : public Hoge { public: Fuga() {} ~Fuga() {} void Hello() { cout << "Hello" << endl; } }; int main() { Hoge *a = new Fuga(); a->Hello(); delete a; }
としたときに,これでは実は a の Hello は Hoge のほうだけ見てちゃってて,Fuga の Hello が呼ばれない.
なので,Hogeの定義を
class Hoge { public: Hoge() {} ~Hoge() {} virtual void Hello() {} };
としてあげるといい.
あ,どういう原理(内部的に)でこうなるんだっけ.関数のバインドが実行時だから実行時にサブクラスへのポインタを保持するかみたいなテーブルがあるんだっけ.わすれた.あとで調べ...る?
あと,サブクラスのインスタンス化をしたときに,基底クラスのコンストラクタを呼ぶようにするには,
class Fuga : public Hoge { public: Fuga() : Hoge() {} ~Fuga(){} void Hello() { cout << "Hello" << endl; } };
としなきゃだめとか.
C++は色々あるよね.いや,というよりも,ある意味基底クラスの作成者の想定したメンバ関数しかオーバーライドできないってことですね.他のオブジェクト指向言語だと,なんだろ,基本的にはオーバーライド可能で,サブクラスでオーバーライドさせたくない場合には final つけるとか.そんなかんじかなあ.どっちがいいんだか?
リソース管理
リソースを開放するコードを直接書かなければならないなら(つまり,リソース管理オブジェクト以外の場所にdelete文を書かなければならないなら),何かが間違っている
Effectove C++ 第3版 p64. リソース管理
あとでもう一度読む.
Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 作者: スコット・メイヤーズ,小林健一郎
- 出版社/メーカー: ピアソン・エデュケーション
- 発売日: 2006/04/29
- メディア: 大型本
- 購入: 29人 クリック: 411回
- この商品を含むブログ (186件) を見る
memusage コマンド
実行するプログラムのメモリ使用量を,
Memory usage summary: heap total: 7976, heap peak: 3352, stack peak: 912 total calls total memory failed calls malloc| 361 7976 0 realloc| 0 0 0 (nomove:0, dec:0, free:0) calloc| 0 0 0 free| 361 7976 Histogram for block sizes: 0-15 97 26% =================== 16-31 250 69% ================================================== 32-47 4 1% 64-79 2 <1% 128-143 4 1% 256-271 2 <1% 352-367 2 <1%
こんな感じで見ることができるハイパー便利デバッグ用コマンド memusage ですが,なんかどっかで使ったはずなのに,今のUbuntu環境に入ってなくて,入れ方もわからなくて(gmemusageはaptitudeにあるんだけど),前どの環境で使ったのかも全く思い出せなかったから探してたら,glibcのパッケージに入ってるらしい?うーん,でもパッケージからのいれかたがわからないなあ.
とりあえず,
を参考にして,
から取得してきて ~/bin に入れといた.
irc で ban 解除
/mode #チャンネル名 -b うんたらかんたら
リストは
/mode #チャンネル名 +b