トップ 一覧 ソース 検索 ヘルプ RSS ログイン

▽こころキット

Effective C++ 第3版

ec3_a.jpg ec3_b.jpg

著者:Scott Meyers
翻訳:小林健一郎

 感想

C++を使う上で、気にかけた方が良いことや知っていた方が良いことを55個のアドバイスという形でまとめた本。

C++を使うプログラマーなら一度は読んでおくべき・・・ ただし、アドバイスの中にはずいぶん言い過ぎなものも含まれてることに注意。

そもそも、プログラミングで何を気にするべきか?

  • ちょっとしたプログラムを組むとき
  • 保守しながら何年も使うプログラムを組むとき
  • 複数のプログラムで使われるようなライブラリを作るとき

こんな感じで、作るプログラムに応じて気にするポイントは変わってくるはずなんだけど、そういう分類はこの本にはない。『〜〜するべきだから、常にそうしなさい』って感じで貫かれてる。

わかりやすいところだと、『どんなときでも初期化子リスト』とか『値渡しよりconst参照渡し』とか『引数1つのコンストラクタはexplicitが基本』とか・・・ そんなの、全部やってたら面倒すぎる。まともなプログラマーなら、必要な場面ぐらい判断できるでしょ。

メンバ関数より、メンバでもfriendでもない関数を使おう』とか言い出してる部分は・・・ もはや、何を目的にしてるのかさっぱりわからない。わかりやすくてちゃんと動くプログラムを組むのが目的なんじゃないの? プログラムのわかりやすさより、カプセル化の方が大事なの?w

値段分ぐらいの価値はあると思うし、手元に置いておいて1年に1回ぐらい読んでみると、新鮮な発見があって良いかもしれない。ただ、この本に書いてあることを安易に信じて、すべて実践するようなプログラマーは怖いけど。


(2009/11/29 書評

C++ Coding Standards

ccs_a.jpg ccs_b.jpg

著者:Herb Sutter、Andrei Alexandrescu
翻訳:浜田真理
監修:浜田光之

 感想

C++を使う上で、気にかけた方が良いことや知っていた方が良いことを101個のフレーズにまとめた本。

大きくまとめると、こんな内容。

プログラムを作るときの方針の話

実は、『短くてわかりやすいプログラムを書きましょう』の一言ですむ内容かも。その割に、クラス名や関数名への言及が全くないのがおかしいが。

C++の知っておいた方がいい話

コンストラクタやデストラクタや代入演算子の話。C++を使い始めた頃に、疑問に思うようなこと。

本当に細かいテクニックの話

STLやテンプレートの細かいテクニックの話。そもそも、本当にSTLを使わないといけないのか? テンプレートを使わないといけないのか? そういう、基本的な切り分けの話は無い。

まともなプログラマーならほとんどは知ってる内容のような気がするけど、それなりにまとまってるし、一度は目を通しておいても良いかもしれない。

ただ、全体的に、表現が冗長で読みにくいところは覚悟が必要。

ある特定の計算に関してどのくらいのデータ量で問題が起こるかを考えるより先に、データの増加に対応出来ないような処理アルゴリズムは避けるべきである。

・・・何を言いたいんだ。おまえは(´・ω・`)

プログラミング能力の前に、根気と読解力が必要かも。これで、2,800円の価値があるかは微妙。図書館で借りてきて読むには良い本かもね。


(2009/11/27 書評

Synergyを実験してみたメモ

マウスとキーボードを2個操作するのが面倒になったので、Synergyを実験してみた。

1.Windowsにインストール

サーバーとして動くように設定。画面を2個登録して、どっちがどっちの横になるのかを設定するだけ。大きな問題は無し。

2.Mac OS Xにインストール

設定ファイルを自分で書いて、実行はコマンドラインから。面倒すぎるだろ(´・ω・`)

結論

当たり前と言えば当たり前だけど、Windows側のキーボード&マウスだけではMac OS X側のスリープを解除することができない。まぁ、今まで使ってたマウスがあるから、これでスリープを解除すれば良いんだけど・・・ なんだか、美しくないな(´・ω・`)

あとは、キーボードの入力が単純に送られすぎるんで、ここで変換をかけることができればMac OS Xがもうちょっと便利になるような気がしないでもないけど・・・ そこまでするのは面倒かな。

スリープから復帰したときに、接続ができなくなることがある・・・ 再現性がないのが困るな(´・ω・`)


(2009/11/25 メモ

skFileInfo

 skFileInfoはファイルの属性を表示するソフトです。

ss001.png

 Install

ダウンロードしたファイルを適当なフォルダに展開して、中に入ってるskFileInfoを実行してください。

 Download

for Windows XP / Windows Vista / Windows 7 ( 32bit & 64 bit )

Download: skFileInfo-04win.zip

for Mac OS X v10.6

Download: skFileInfo-04mac.zip

Source Code

Download: skFileInfo-04src.zip

※コンパイルにはQt4.5.3の環境が必要です

更新履歴

2009/11/25 ver 1.0[04]
公開

たま〜にファイルの所有者を確認したくなるので作ったソフト。CSVっぽい形で情報を表示するようにしたのは良いけれど・・・ NTFSだと所有者を表示しようと思ったら時間がかかるんだなorz

まぁ、これはこれで、たま〜になら使えるだろうと言うことでそのまま公開。


(2009/11/25 Qt,Freeware

QDialogを閉じるときの処理の流れメモ

ESCキーが押されたときと、クローズボタンが押されたときで、共通の処理を入れるにはどうすればいいのか? という話題。

 ESCキーが押されたときの処理

1.QDialog::keyPressEvent()

void QDialog::keyPressEvent(QKeyEvent *e)
{
        case Qt::Key_Escape:
            reject();
            break;

2.QDialog::reject()

void QDialog::reject()
{
    done(Rejected);
}

3.QDialog::done()

void QDialog::done(int r)
{
    Q_D(QDialog);
    hide();
    setResult(r);

    d->close_helper(QWidgetPrivate::CloseNoEvent);
    d->resetModalitySetByOpen();

    emit finished(r);
    if (r == Accepted)
        emit accepted();
    else if (r == Rejected)
        emit rejected();
}

 クローズボタンが押されたとき

1.QWidget::event()

bool QWidget::event(QEvent *event)
{
    case QEvent::Close:
        closeEvent((QCloseEvent *)event);
        break;

2.QDialog::closeEvent()

void QDialog::closeEvent(QCloseEvent *e)
{
#ifndef QT_NO_WHATSTHIS
    if (isModal() && QWhatsThis::inWhatsThisMode())
        QWhatsThis::leaveWhatsThisMode();
#endif
    if (isVisible()) {
        QPointer<QObject> that = this;
        reject();
        if (that && isVisible())
            e->ignore();
    } else {
        e->accept();
    }
}

3.QDialog::reject()

以下、『ESCキーが押されたときの処理』と同じ流れ。

 まとめ

close()をプログラムから呼び出した場合、『クローズボタンが押されたとき』の処理になる。つまり、ダイアログが非表示の状態でclose()を呼び出すとaccept()になるのか・・・ って、これは本題と関係ないなw

とにかく、ダイアログの終了で何かやりたかったら、QDialog::done()を継承するのが手っ取り早そう。外のクラスからやりたかったら、finished()をどこかと接続しておく、と。


(2009/11/24 メモ,QT

skSimpleZip

 skSimpleZipは、ものすごくシンプルなファイルの圧縮・展開ソフトです。

ss002.png

 Install

ダウンロードしたファイルを適当なフォルダに展開して、中に入ってるskSimpleZipを実行してください。

 Download

for Windows XP / Windows Vista / Windows 7 ( 32bit & 64 bit )

Download: skSimpleZip-25win.zip

for Mac OS X v10.6

Download: skSimpleZip-25mac.zip

Source Code

Download: skSimpleZip-25src.zip

※コンパイルにはQt4.5.3の環境が必要です

 Etc

thanks

zipファイルの圧縮・展開にzlibを使用させてもらってます。

Ubuntu版のスクリーンショット

ss001a.png

※Ubuntu版はソースコードからコンパイルしてください

Mac版のスクリーンショット

sc2.png

更新履歴

2009/11/24 ver 1.0[25]
公開

それなりにまじめに日本語に対応してるのがポイント? それ以外は・・・ まぁ、Qtでzipを操作するときのサンプルだと思えばこんなものかな。


(2009/11/24 Qt,Freeware

QTextStreamで文字コードを変換するメモ

QTextStreamには、文字コードや改行コードを変換しながらテキストを入出力してくれる機能があるらしい。これは、どれぐらい使えるものなのか? さくっと実験してみたのでメモ。

ちゃんと、日本語のCodecを使えるようにした場合、Windows/Mac/Linux共通の対応はこんな感じ。

文字コード対応するCodec
Shift JISShift_JIS/SJIS/MS_Kanji
EUCEUC-JP
JISISO-2022-JP/JIS7
UTF-8UTF-8
UTF-16 BOM無しUTF-16/UTF-16LE
UTF-16 BOM有りすべてのCodec

機種ごとの相違点はこんな感じ

  • Windowsでは『System』でShift JISに対応
  • LinuxとMacでは『System』でUTF-8に対応
  • LinuxでEUCを無理矢理読み込ませると落ちることがある

QTextStream::setGenerateByteOrderMark()で設定を変えることができるけど、デフォルトではBOM認識すると強制的にUNICODEで読み込んでくれる。つまり『UTF-16 BOM有り』が最強ってこと? それ以外でも、まじめにやればちゃんと読める、と。

改行コードの変換は・・・ CR+LFとLFは良いんだけど、CRのみの改行は不可。まぁ、いまさら、改行がCRだけの環境なんて無いだろうから、問題ないのかな。


参考にしたのはこのあたり。

実験に使ったソースコードはこちら:testQTextStream-09src.zip


(2009/11/20 メモ,Qt

漢字コードを自動で判定するメモ

いちいち選ぶのも面倒なので、さくっと自動判定するコードを書いてみた。

対応してるコードはShift JIS / EUC / JIS / UTF-8 / UTF-16LE / UTF-16LEの6種類。ポイントは半角カナと3バイト以上のEUCを捨てたことか。まじめに対応しようと思ったら面倒だし(´∀`;)

UTF-8の扱いが面倒だけど、どうせ面倒なので割り切って別処理にしてすっきり。あとはShift JISとEUCの重複部分が問題になるけど、これは、直感でShift JISに(´∀`;)


参考になったのはこのあたり。

実験に使ったソースコードはこちら:testQTextStream2-06src.zip


(2009/11/18 メモ,Qt

『mt.exe general error c101008d』が出たときのメモ

Visual Studio 2008でコンパイルしていると、たまに、こんなエラーが出る。

>mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file 〜〜

いろいろ調べてみると、アンチウィルスソフトが原因で実行ファイルに書き込めないのが原因らしい。

とりあえず、開発に使ってるディレクトリを監視対象から外して様子見。


(2009/11/18 メモ

コマンドプロンプトを開くときにコマンドを実行するメモ

以下のレジストリにコマンドを書いておく。

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

とりあえず、doskeyでマクロを読み込むようにしてみた。

(´-`).。о〇(さんざんネットで探して、結局、『cmd /?』に情報があったとは・・・)


(2009/11/18 メモ

[ 1 2 3 4 5 6 ]