Posted in C++, Tips, プログラム on 02/14/2009 02:28 pm by bae
thisをshared_ptrで他のクラスに渡したい場合にどうするか。メモ。
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
using namespace boost;
#include "Y.h"
class X : public enable_shared_from_this<X>
{
private:
Y y_;
public:
void make_reference();
};
void X::make_reference()
{
/* Yに自身を渡す*/
y_ = new Y(shared_from_this());
}
注意点、Y側はshared_ptrからweak_ptrに変換して保持しないと循環参照となりX, Yもdeleteされないことに。また、shared_ptrをコンストラクタで構築すると、コンストラクタを抜けた時に自身が解放されちゃう。
class X
{
public;
X() { shared_ptr<X> x = shared_from_this(); } ///NG
}
参考文献 :
Posted in Tips, プログラム on 05/06/2008 11:27 am by bae
まったく同じ内容の行を消したい場合、create tableが使える。
create table new_table as select distinct * from base_table;
これで、元のテーブルを削除して、新しいテーブルの名前を変更すると良い。
SQL 基礎実地編 (その九) テーブルコピー、レコード追加、修正、削除よりアイデアをいただいた。テーブルコピーというのを知らなかっただけれど、重複行を消す技を探していて見つけた。
このページにある「空のテーブルをコピーするには..」というのもおもしろい技だ。
Posted in Tips, プログラム on 04/20/2008 03:19 am by bae
時系列表であるyour_tableのカラムvalue1が持つmax値の最初の時刻を取る。
select into res.timestamp, res,value1
timestamp, value1
from your_table
where starttime < = timestamp and timestamp <= endtime
order by value1 desc, timestamp
limit1
Posted in Tips, プログラム on 04/20/2008 03:10 am by bae
ストアドプロシージャで複数の値を返す様にするにはユーザ定期型を用いる
create type your_type as
(
timestamp timestamp with time zone,
value1 float,
value2 float
);
create or replace function your_storedprocedure
(
starttime timestamp with time zone,
endtime timestamp with time zone
)
returns your_type
as $$
:
Posted in Tips, パソコン身の回り, プログラム on 04/18/2008 01:27 am by bae
CSV形式で記述された複数のテキストファイルをpostgresqlに格納する方法。
ただし、ファイルの最初の1行目にはデータのフィールド名が入っているので取り除く
for i in *.txt; do sed -e "1d" $i | psql -d db -c "copy history from stdin using delimiters ',';";done
こんなところでsedつかうとは。。
Posted in Tips, パソコン身の回り on 03/19/2008 08:44 pm by bae
Fedora8では3ボタンエミュレーションが無効になっている。大抵のホイル付マウスはホイル自体が3番めのボタンになるので、エミュレーションは必要ない。だが、ホイルをボタン代わりに押すってのはどうも慣れない。でもって、3つボタンが無いころから選択範囲を簡単にコピーするため3ボタンエミュレーションは欠かせなかった。
さてさて、これを有効にしようにも設定画面が無い。仕方なくxorg.confを触ることになる。
# cd /etc/X11/
# vi xorg.conf
:
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "yes" < -- これ
Option "ZAxisMapping" "4 5"
EndSection
:
Xを再起動すれば有効になる。