PC関係のメモ
図書館で勉強 / IMEツールバーの機能を呼び出すショートカットキー / データ構造 / 撮影会 / gccでC++のコンパイル / NULLを定義しているヘッダ
図書館で勉強
先日書いたとおり、日曜日なので図書館でお勉強開始。
先週と同じ「岩波講座ソフトウェア科学3 アルゴリズムとデータ構造」をメインに、近くにあった、「コンピュータ英語活用辞典」をアームレスト代わりに積んでおく。
データ構造
今日は基本的なデータ構造について勉強。
「岩波講座ソフトウェア科学3 アルゴリズムとデータ構造」で言うと「1.3 基本的データ構造」。
撮影会
昼食ついでにデジカメの撮影会。
公園を散歩しながらマクロモードを使って花などを撮影する。友人に貸りたIXY DIGITAL 600の性能の高さに驚く。
Canon IXY DIGITAL 600で撮影した写真(リサイズのみ)。黄色い花は普通のマクロ、白と紫の花はデジタルマクロを使って撮影。
CONTAX SL300RT*で撮影した写真(リサイズのみ)。どちらもマクロモードを使って撮影。
gccでC++のコンパイル
クラスにコンストラクタを実装して
gcc hoge.cpp
としたらエラーが出てコンパイルできない。
hoge.cpp: undefined reference to `vtable for Hoge'
Hogeはクラス名。
下記ページを参考に-lstdc++をつけるとコンパイルできた。
gcc hoge.cpp -lstdc++
標準ライブラリを使ってないのにstdc++が要るって言うのがよくわからないけどそういうことらしい。毎度指定するのは面倒(環境変数で解決出来る気も)だし出力ファイル名も変えたいから、Makefileを覚えて使おうかな。
NULLを定義しているヘッダ
何もインクルードしていないファイルをgccでコンパイルしたら
hoge.cpp:21: error: `NULL' undeclared (first use this function)
恥ずかしながら「NULLって処理系内部で定義されてるんじゃないの?」と思った。
そういえばどこかのヘッダーで
#define NULL 0
って定義してあった気がしなくもない。こういうときC言語をきちんと勉強してないことがばれる。K&Rを再読したほうがいいのかも。
で、どこで定義されてるのか考えてみた。stdio.hだけインクルードするコードでもNULLは使えた記憶があるので、stdio.hだろうか。と一瞬考えたがすぐに、多分stdio.hも他のヘッダーをインクルードしてるんだろうと思い直す。
調べてみたところstddef.hで定義されていることがわかった。大抵他のインクルードファイルから間接的にインクルードされるので、今まで気にしたことがなかった。
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide50-1.html
NULL とはヘッダファイル stddef.h で定義された定数(マクロ)で,それ自体 NULLポインタ定数です。但し,NULLポインタ定数 NULL を使うには,次のヘッダファイルのいずれかを読み込むことが必要です。
stddef.h,stdio.h,stdlib.h,string.h,time.h,wchar.h
Effective C++ 原著第3版 購入 / [Web制作]PhotoshopでRSSアイコンを作る手順 / [programming]品質工学 / [Web制作]高速道路フォント / [programming]Word/Excel等のバイナリファイルのフォーマット仕様 / [programming]vua.dll for VisualC++6.0 - ビルド番号自動更新アドイン
Effective C++ 原著第3版 購入
Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)(スコット・メイヤーズ/小林 健一郎)
C++の書籍としては最も影響を受けたのがこれの第2版。今でもよく参照する。
第3版が邦訳されたと知って早速購入。
PhotoshopでRSSアイコンを作る手順
Word/Excel等のバイナリファイルのフォーマット仕様
Microsoft Office製品(Word/Excel等)のファイルフォーマットはバイナリフォーマット((-但し2003以降はXMLベースになってたかもしれない。要調査。-))で、その仕様はMSDNで参照できる。また、これらを扱うためのライブラリもオープンソースで存在する。
vua.dll for VisualC++6.0 - ビルド番号自動更新アドイン
PostgreSQL 9.0.3をインストール
CentOS 5.6(on さくらVPS)にPostgreSQL 9.0.3をインストールした。
# tar xvfz postgresql-9.0.3.tar.gz # cd postgresql-9.0.3 # ./configure
起動スクリプトをコピーする。
# cp contrib/start-scripts/linux /etc/init.d/postgresql
起動スクリプトを書き換える。
#PGDATA="/usr/local/pgsql/data" PGDATA="/var/pgsql/data"
起動スクリプトに実行権限をつけて自動起動するように登録する。
# chmod 755 /etc/init.d/postgresql # chkconfig --add postgresql
起動ユーザ/グループを作成する。
# groupadd postgres # useradd -g postgres -d /var/pgsql postgres
postgresユーザでデータベースを初期化する。
# su - postgres $ mkdir /var/pgsql/data $ /usr/local/pgsql/bin/initdb -D /var/pgsql/data -E UNICODE --no-locale
ここまででサービスの起動が可能となるため、rootユーザで起動させてみる。
# /etc/init.d/postgresql start
再度postgresユーザに変更。.bash_profileに環境変数の初期化処理を追記する。
export PATH="$PATH":/usr/local/pgsql/bin export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=/var/pgsql/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
確認を実施する。
$ psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------+----------+----------+-----------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
以上で完了。
アルゴリズムとデータ構造 (岩波講座 ソフトウェア科学 3)(石畑 清)
コンピュータ英語活用辞典(三島 浩/相磯 秀夫)





Before...
_ hajime [>drry 本当です。最近のデジカメ使うと自分って上手いじゃん!と調子に乗ってしまいます。 >_ あんまり深く考え..]
_ CEO [カメラはいい!最近特にそう思います。奥が深いし・・・。]
_ hajime [デジカメは昔のカメラと違って、いろんな設定を試してすぐにその場で結果を確認できるのがいいですね。]