title.png

^<< 2012.01/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>$

Trackback の仕組みはありませんので、コメントにでも残していただくと嬉しいかも、です。

(2012.01.07)

2011年読書ふりかえりAdd this entry to add hatena bookmark

年も明けて1週間ほどですが、昨年読んだ本を一応ふりかえっておくか。。。といっても昨年はなんとまともに記録してあるのが30冊ほどしかないわけですが。。。

カテゴリ不問でベスト3は、、、

  • 『小暮写眞館』
    • 昨年読んだ中で一番よかったのはやっぱりこれかなぁ。特に後半はさすが宮部さんのストーリー展開
  • 『三十光年の星たち』
    • 宮本さん鉄板だなぁ
  • 『Dynamic Objective-C』
    • 後半のデザインパターンの所はやや蛇足気味だと感じましたが、前半の前のめりな感じがいいです

その他にも、『ちゃんと知りたい大人の発達障害がわかる本』は勉強に成りましたね。

まぁ、今年(2012) もテキトーに読み散らかそうと思います:-)

内なる宇宙〈上〉内なる宇宙〈上〉
【読了: 2011-01-15】【評価:4】


内なる宇宙〈下〉内なる宇宙〈下〉
【読了: 2011-01-20】【評価:4】


白川郷 濡髪家の殺人 (講談社ノベルス)白川郷 濡髪家の殺人
【読了: 2011-01-24】【評価:3】


黒川温泉殺人事件 (ジョイ・ノベルス)黒川温泉殺人事件
【読了: 2011-01-26】【評価:3】


方法序説 (岩波文庫)方法序説
【読了: 2011-02-03】【評価:3】


ソフトウエア・クリエイティビティ ソフトウエア開発に創造性はなぜ必要かソフトウエア・クリエイティビティ ソフトウエア開発に創造性はなぜ必要か
【読了: 2011-02-04】【評価:3】


ちゃんと知りたい大人の発達障害がわかる本 (洋泉社MOOK)ちゃんと知りたい大人の発達障害がわかる本
【読了: 2011-02-08】【評価:4】


写楽 閉じた国の幻写楽 閉じた国の幻
【読了: 2011-02-17】【評価:4】


EVERNOTE「超」仕事術EVERNOTE「超」仕事術
【読了: 2011-03-17】【評価:3】


入門 Qt 4 プログラミング入門 Qt 4 プログラミング
【読了: 2011-04-04】【評価:4】


日本語がもっと面白くなるパズルの本—難問、奇問、愚問を解く
【読了: 2011-05-07】【評価:4】


ガリバー旅行記
【読了: 2011-05-14】【評価:4】


究極の文房具ハック---身近な道具とデジタルツールで仕事力を上げる究極の文房具ハック---身近な道具とデジタルツールで仕事力を上げる
【読了: 2011-05-15】【評価:3】


重力ピエロ (新潮文庫)重力ピエロ
【読了: 2011-05-22】【評価:4】


パンドラの匣 (新潮文庫)パンドラの匣
【読了: 2011-05-29】【評価:4】


小暮写眞館 (書き下ろし100冊)小暮写眞館
【読了: 2011-06-13】【評価:5】


[書類・手帳・ノート・ノマド]の文具術 楽しんで仕事の効率をあげる![書類・手帳・ノート・ノマド]の文具術 楽しんで仕事の効率をあげる!
【読了: 2011-06-17】【評価:3】


ソフトウェアライセンスの基礎知識ソフトウェアライセンスの基礎知識
【読了: 2011-06-26】【評価:4】


オーダーメイド殺人クラブオーダーメイド殺人クラブ
【読了: 2011-07-31】【評価:4】


ツナグツナグ
【読了: 2011-08-16】【評価:4】


夢野久作全集〈9〉 (ちくま文庫)ドグラ・マグラ
【読了: 2011-09-0】【評価:3】


そうだったのか! 現代史 (そうだったのか! シリーズ) (集英社文庫)そうだったのか! 現代史
【読了: 2011-10-18】【評価:4】


そうだったのか! 現代史パート2 (そうだったのか! シリーズ) (集英社文庫)そうだったのか! 現代史パート2
【読了: 2011-11-02】【評価:4】


Ultimate Agile Stories Iteration1
【読了: 2011-11-13】【評価:4】


夫婦で行くイタリア歴史の街々 (集英社文庫)夫婦で行くイタリア歴史の街々
【読了: 2011-11-25】【評価:4】


三十光年の星たち (上)三十光年の星たち (上)
【読了: 2011-12-01】【評価:4】


Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)Jenkins実践入門 〜ビルド・テスト・デプロイを自動化する技術
【読了: 2011-12-08】【評価:3】


三十光年の星たち (下)三十光年の星たち (下)
【読了: 2011-12-12】【評価:4】


Dynamic Objective-CDynamic Objective-C
【読了: 2011-12-26】【評価:4】


暴言で読む日本史 (メディアファクトリー新書)暴言で読む日本史
【読了: 2011-12-29】【評価:4】


ツッコミ

(2011.12.04)

お、俺が名付け親、、、、だと!?Add this entry to add hatena bookmark

また、しばらく更新があいちゃったけど、書いておきたいネタができたので。

私が「IT現場のリーダー塾」(現在は"IT現場の"という冠がとれて単に「リーダー塾」になってます)の、第1期に通っていたことはこの「記」にも度々登場するのですが、そこで一緒に通っていた愛すべき同期4人(つまり私を入れて5名)のうちの1人にきんちゃん(@quindim)がいます。

そのきんちゃんのはてダのエントリ、

にこうありました。

きっかけは、2008年に参加した「IT現場のリーダー塾」。

そこに参加していた「あまのりょー( @beakmark )」さんが名付け親だった。

リーダー塾とは、〜〜(中略)〜〜 とりあえず困った僕は当初からTwitterIDとして利用していた「@quindim」の名前を出したところ、りょーさんが「じゃ、きんちゃんね。」と言ってその場で決まった事を記憶している。

その日から、僕は「きんちゃん」になった。

正直な話、私にはまるで実感が無い、というか忘れていた...(^^;。自分にとって「きんちゃん」はあの渋谷のマンションの一室で一緒になったときからずっと「きんちゃん」であり、それ以外の何者でもない。それくらい、自然な存在なのであーる。

忘れてたことの言い訳ではないけれど、今、みんなが「きんちゃん」と聞いて頭に描くあの誰からも愛されるキャラは全部きんちゃん自身が築いたものであってだれが名付けたかはどうでもいいことだと思う。ほんと、あの塾を皮切りにいろいろ行動を重ねていった彼をリスペクトするし、自分にとっての誇りだなー、と感じます。

DevLOVE 界隈を始めとしていわゆる社外コミュニティでもすっかり有名人なきんちゃんですが、現在は今年転職した素敵な会社さんの社内に働きかけることに情熱をかたむけているようです。「半径30mの人々を幸せにするために」を「原点回帰」と語るのを読んで、それはまさにリーダー塾のコンセプトの一つでもあるので、ニンマリしてしまうオイラがいましたとさ:-)

ツッコミ

(2011.08.07)

Qt開発メモ(5)Add this entry to add hatena bookmark

Mac OS X でアプリケーションメニューなどを日本語にする

ご存知の通り Mac OS X の場合、メニューバーに各アプリ名のメニュー(アプリケーションメニュー)があって、アバウトメニュー(「XXXについて」)・設定メニュー(「環境設定...」)・Quitメニュー(「XXXを終了」)といったものやサービスメニューなどの共通メニューはここに配置されます。

Qt の公式ドキュメントの "Qt for Mac OS X - Specific Issues" には「Translating the Application Menu and Native Dialogs」という項があって、そこを読むとアプリケーションメニューをローカライズしたい場合にはアプリケーションバンドルの中の言語ごとのリソースディレクトリ(日本語なら Contents/Resources/ja.lproj ですね)に locversion.plist というファイルを置けばいい、と書いてあります。

しかしこれは(今では)大嘘

この記載に惑わされて相当無駄な時間を使ってしまったオイラがいるわけですが(^^; たぶん、これはQtのバックエンドが Carbon であった時の記載だと思われます。

少なくとも、私が使っているCocoaバックエンドの環境ではうまくいかないです。

正解は、Qt 自体のローカライズファイル(qm) を動的にロードしてアプリの実行環境にインストールする、です。つまりQtにおける通常のi18n対応方法と変わりません。では Qt 自体の qm ファイルはどこにあるか、というと Qt をインストールした場所($QTDIR、Mac OS X で普通に入れると /Developer/Applications/Qt です)にある taranslations ディレクトリにあります。ここに qt_XX.qm ファイル(XXは言語を表す。日本語用なら qt_ja.qm)があるので、これを自分のアプリでも抱えて QTranslater で load して QApplication に installTranslater してあげればおkです。

ちなみにこの qt_XX.qm ファイルはフランス語・ドイツ語・簡体中国語のみが Nokia のサポートするもので、日本語も含めたその他の言語用のものはサードパーティのコントリビュータから提供されたサポート保証のないファイル、とのことのようです。

Document の記述に惑わされて私と同じハマりをする方が無くなるようにここにメモしておきます。

ツッコミ

HatheEssecell すべては、することができます (2011/09/08 12:01:46)

(2011.07.30)

DevLOVE PF でお話ししてきましたAdd this entry to add hatena bookmark

昨日 7/29、上記のイベントで "MY JOB WENT TO VIETNAM?" というタイトルでお話しさせていただきました。以前「ここ半年のこと、あるいは5年半前の記事を思い出したこと」というエントリで書いた話についてです。実は、このテーマでは一度話すチャンスをいただいたのですが、都合によりそれが叶わなくて、そのことは「DevLove HungarFlight で話さないことになりました」に書いた通りです。その時に "近いうちにこのテーマではどこかで共有したいなぁ" と書いといたら @papanda さんが非スルー力を遺憾なく発揮して「いつやります?」と連絡をくれて、昨日に至る、というわけです。

そして今回は、私以外のもう一人のトーカーが天野勝さん(@amapyon)でした。天野さんと同じイベントでそろって登壇するのは第一回天野カンファレンスPFP関東セミナー&WS #11 に次いで3回目です。参加者の皆様におかれましてはアマノ成分を補充していただけたことと思います。

今回、首謀者の @papanda さんは、平素の無駄に暑苦しい状態がたたったのか、オーバーヒートしてしまい来られなかったのですが、私としても残念でした。ヨンキュー! と言いたかったのに。

お話しした資料は slideshare に上げておきました。ちょうどfkinoさんがこんなエントリを書いていて、オイラのこれはどうだろう、って思ったけど、自分語りの風味付けをした事例紹介、といったところ、あるいはその逆、くらいかな。

View more presentations from beakmark.

この資料だけだと当日話を聞いて下さった方以外にはわかりにくいところを、ちょっとだけ補足します。

5ページ目、並んでいる2冊の本が同じ著者による同じ本の初版と改訂版であることはご存じの方は沢山いるでしょうが、8割方同じ内容なのにタイトルと拍子でこうも印象が違う、というのをまず覚えておいてもらいました。今回の話は、自分の中でこの2冊の表紙の印象の違いが起こっていく過程であったとも言えます。

6ページ目〜7ページ目の画像は、「今日話すことはホンの上澄みだけで、下に凝縮している一番大変で一番面白い部分である「毎日毎日の泥臭い積み重ね」の部分は話さないし、話せない。ぜひ自分の現場にある泥道になにか持って帰って欲しいな」とゆーのが言いたかったです。

55〜59ページ目のチャットログは私の宝物の一つです:-)

60ページ目、「目から汁」じゃなくて「目から」だかんね!

61ページ目〜62ページ目、プロジェクトのふりかえりで誰かを名指しで「最近話しかけにくい」って意見がでるのっていいなぁ、と感じました。信頼貯金の残高を感じた瞬間。

来ていただいた皆様、来られなかったけどメッセージを下さった皆様、1000qでした。

ツッコミ

HappyLuckyAkira 先日は、ありがとうございました。
55-59は、私ならディスプレイの前で号泣もんです。 (2011/07/31 23:06:20)

(2011.07.24)

Qt開発メモ(4)Add this entry to add hatena bookmark

QDesktopService::openUrl()

あるファイルを、そのデフォルトのアプリで開きたい場合(WindowsならExplorerで、Mac OS X ならFinderで ダブルクリックして開くのと同じようにする)は、Qt でやるなら QDesktopService クラスの staticメソッド openUrl() を使う。

このメソッドの返値は bool なのですが、 私が試してみた限りでは、少なくとも Windowsでも Mac OS X でもこのメソッドはいつも trueを返すようです。 たとえ関連づけられたアプリがない場合でも false を返さないので、任意のファイルを開こうとするが、関連づけられたアプリがない時は警告メッセージをだしたい、という場合にはこれだと困るわけで。

それでも、Windows の場合は Explorer が「関連づけられたアプリがないけど、どうする?」ダイアログをだしてくれるようですが、Mac OS X の場合は本当になにも出てこないので、困ります。

結局、自分で書くことにしました。(とりあえずMac側だけ、Winの場合はそのまま QDesktopServic::openUrl() を使う)

Launch Services の API LSOpenCFURLRef() を使えば、ほぼ所望のことが実現できます。もちろん、ファイルパスを FileSystemRepresentation にしてあげる必要があるのは先日書いたとおり。

Qtはよくできたクロスプラットフォームフレームワークだとは思いますが、この手のフレームワークはその限界を超えたことがしたい場合にどうするか、というのも結構問題だと思います。用意された材料ではどうしようもなくて、箱庭の外に出るしかない時、多少フレームワークの調和は乱れても思い切って出てみるのか、それとも用意された材料だけで作れるように仕様の方を変更するのか、はバランスの問題としか言いようがないのだけど。私だってせっかくQt使ってるのに #ifdef の嵐にしたいわけじゃありません(^^;

Qtは トリプルライセンスで、GPL/LGPL でもあるわけなので、自分で箱庭の材料を増やす、って手ももちろんあるけれど:-)

namespace
{

#if defined(Q_OS_WIN)
inline bool openAFileWithDefaultApplication(const QString& target)
{
    return QDesktopServices::openUrl(QUrl::fromLocalFile(target));
}

#elif defined(Q_OS_MAC)
CFURLRef convertToCFURLRef(const QString& in)
{
    CFStringRef before = CFStringCreateWithCString(kCFAllocatorDefault, in.toUtf8().constData(), kCFStringEncodingUTF8);
    Q_ASSERT(before);

    std::vector<char> buff(CFStringGetMaximumSizeOfFileSystemRepresentation(before), '\0');
    if (!CFStringGetFileSystemRepresentation(before, &buff.at(0), buff.size()))
    {
        Q_ASSERT(false);
    }
    CFRelease(before);

    return CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8*)&buff.at(0), buff.size(), false);
}

inline bool openAFileWithDefaultApplication(const QString& target)
{
    CFURLRef theTargetURL = convertToCFURLRef(target);
    Q_ASSERT(theTargetURL);

    const OSStatus osStatus = LSOpenCFURLRef(theTargetURL, NULL);

    CFRelease(theTargetURL);

    return (noErr == osStatus);
}
#endif

}

あ、あともうひとつ手はあって、昔からの Mac開発者ならよくご存じのあの方法、「Finderにお願いする」ってのもありますね。 これだと、Finderが「関連付けられたアプリないけど、どする?」ダイアログを出してくれます。 odoc のAppleEventを飛ばしてもいいんですが、これだとデスクリプタの構築などがめんどくさいので、 お手軽なのは oscript コマンドでApppleScript を発行することかな。

inline bool openAFileWithDefaultApplication(const QString& target)
{
    QStringList scriptArgs;
    scriptArgs << QString("-e")
               << QString::fromLatin1("tell application \"Finder\" to open POSIX file \"%1\"").arg(target);
    return (0 == QProcess::execute("/usr/bin/osascript", scriptArgs));
}

ツッコミ

Kawano 委細はよくわかりませんが、コメントしてみます。
ぼくにわかるのは Define とか elif ていうのはC言語っぽい命令や定義文だなあということくらいですが
・・・
(2011/07/27 10:04:24)