「お金は銀行に預けるな」読みました

勝間先生による資産運用の入門本です。勝間さんというと「10倍」ですが、この本は資産運用で「10倍」稼ぐ本ではありません。以下は目次の要約です。

第一章
タイトル「お金は銀行に預けるな」の通り、「銀行に預けているだけでは、お金は減ります」というショッキングな事実から入って、積極的な投資の必要性を説きます。

第二章

各種の金融商品の特徴を説明しつつポートフォリオの組み方の基礎知識を説明されています。(なぜか利率の高い他国債の話とか、やっぱり投資信託がオススメな理由とか)

第三章

しっかり儲けるための原則と、投資原資確保の仕方について書かれています。住宅をローンで買うと損します、という話とか。

第四章

社会的にアレな企業に投資しないようにしましょう、という事について書かれています。

私は株式投資を始めて2年くらいになります。そんなに分析とか頑張っているわけでもなかったのですが、まぁまぁの成績をあげて来てしまっていました。なので率直に言って少しナメていたのですが、大ケガしないうちに、勝間さんアドバイスに従うことにしよう、と思いました。

キッチンタイマー3種レビュー

最近、キッチンタイマーに凝っています。より使いやすいキッチンタイマーを模索する内に、3つもキッチンタイマーを買ってしまったので、それぞれの良いところ・悪いところをレビューします。
私の場合、用途は以下の3つです。

  • 仕事中の作業時間管理
  • 会議の時間管理(時間制限付きの発表とか、発散タイムとか)
  • 備忘録(30分したら会議に行く、とか)

キッチンでは使いません…。

「オフィスで使っても他の人の迷惑にならない」ことを重要視しています。

最初に買ったのは、DRETECデジタルタイマー「スリムキューブ」です。アラーム時に液晶の下にある丸いLEDランプが点滅します。アラーム音をミュートできるので、オフィスで使うのにちょうど良いかと思って購入しました。

  • ◎ 安い
  • △ LEDはビカビカ点滅するわけではないので、光だけだと視界の外にある場合はアラームに気づきません。
  • ○ まぁまぁ小さい
  • ○ マグネット付き
  • ※ 5分前に予備アラームが鳴ります。そういうのが欲しい人には良いと思いますが、この機能はOFFにできないので不要な人にとってはかなり鬱陶しいため、注意が必要です。

次に買ったのは、TANITAの「バイブレーションタイマーです。実物は、商品写真から受ける印象よりかなり小さいです。ズボンのコインポケットに入るので、持ち歩くのに便利です。商品名のとおり、バイブレーション機能もついています。

  • ◎ 抜群の携帯性
  • ○ バイブレーション機能
  • △ ボタン操作するためにカバーを開けなければならず、またボタンも小さいので押しにくい。
  • △ 値段が高い。
  • ※ 携帯することを前提としたデザインなのか、マグネットはありません。

最後に買ったのは、先日行ったコスモマップセミナーで使われているのを見て気に入ってしまったTANITAの「ぴよぴよタイマー」です。アラーム音が「ぴよぴよ」なのが唯一の特徴です。

  • ◎ ぴよぴよアラームなので、一般的なキッチンタイマーにありがちな"イラッとする感じ"がありません。
  • ○ マグネット付き
  • △ ちょっと大きいので携帯には不便
  • △ これ以上無いくらいシンプルな機能の割に高い

ロマンを求めるホビープログラマにおすすめの1冊(マッチ箱の脳)

先日、オフィスのマイ本棚を整理しました。埋もれていた本が、いちいち懐かしい…というよりは「んー。何が書いてあったっけ?」という事が多く手にとって読んだりしていると整理が進みません。とりあえず技術書は後回しにして、ビジネス書っぽい本だけ整理してしまいました。
で、あとまわしになった技術書の中の一冊に、ちょっと毛色の違う感じの本があったので読み返しつつ紹介してみます。

タイトルは「マッチ箱の脳 – 使える人工知能のお話」。著者は森川幸人さんです。
人工知能(A.I.)の本とは思えない、とても可愛らしい表紙なわけですが、中身もずっとこんな調子でイラスト満載です。内容は、A.I.の基本的な仕組みの一つである遺伝的アルゴリズムをマッチ箱で説明するところから始まって、ニューラルネットワークとか、A.I.の学習とか、エキスパートシステムの話とかを易しく解説するものです。

さて、この本。僕はとても楽しく読んだのですが、果たしてA.I.に興味を持つ人がいったいどれだけ居るのか? また、そんな人達の中で、こういう完全にアマチュア向けな感じの本を求める人達は居るのか? などと思ってしまいました。(実際にどのくらい売れたのかは知りませんが、2,200円というちょっと高めの価格設定で採算を取っているのかもしれません)
趣味でプログラミングをする人にとっては、A.I.というのは夢のある"永遠の"テーマだと思うので、そういうホビープログラマ向けなんでしょう。僕が最初に読んだ時も非常にロマンを掻き立てられました。というわけで、ロマンを求めるホビープログラマなアナタにおすすめの一冊です。

開発者ごとに異なる設定値を*.propertiesファイルに書きつつSVNを使う方法

たまにはプログラミングのネタを書きます。

環境依存な動作をするプログラムを書くとき、プロパティファイルで設定を切り出してあると便利です。でも開発環境ごとに異なる設定値を使いたい場合には、普通にSVN保持していると、他人の設定値を取得してしまったり、そこに自分の設定値を上書きコミットしてしまったりと、ちょっと扱いにくくなってしまいます。

そんな悩みを解決する方法を紹介します。

ファイル

以下の3つのファイルを用意します。

  • XXX.properties
    チーム内で一般的と思われる設定値を記述したファイル。
    SVN管理します。
  • user-XXX.properties
    各開発環境ごとに異なる設定値を記述したファイル。
    各開発者は、user-XXX.properties.templateを元に、自分の環境に応じた設定値に変更して、このファイルを作成します。
    あらかじめsvn:ignoreしておきます。
  • user-XXX.properties.template
    user-XXX.propertiesの雛形。
    SVN管理します。

プログラム

デフォルトがXXX.propertiesで、あればuser-XXX.propertiesを上書きして読み込むようなプログラムにしておきます。javaのPropertiesクラスで扱うなら、

p.load(XXX.propertiesのファイル);
if (user-XXX.propertiesがあれば)
  p.load(user-XXX.propertiesのファイル);

という感じ。

運用方法

  • 新しくプロジェクト一式をチェックアウトして開発環境を構築するとき:
    まず、普通にチェックアウトします。落ちてくるのはXXX.properties, user-XXX.properties.templateの2ファイルだけです。(user-XXX.propertiesはsvn:ignoreなので落ちてこない)
    ファイルをチェックアウトできたら、user-XXX.properties.templateを、user-XXX.propertiesにコピーして自分用に設定値を書き換えます。書き換える必要が無い場合(デフォルトの設定値のままでOKな場合)は、この必要はありません。
    あとは普通に使えます。
  • 新しいプロパティ設定項目を追加するとき:
    XXX.properties, user-XXX.properties, user-XXX.properties.templateの3ファイルに新しい設定項目を追加して、上手く動くことを確認したら、XXX.properties, user-XXX.propertiesをコミットします。仕上げに、他のプロジェクトメンバに「新しい項目xxxxを追加しました。svn-updateと、手元のuser-XXX.properties編集をお願いします」とアナウンスしたら完了。

私は主に、jUnitテストとAntの設定ファイルでこのテクニックを使っています。svn:ignoreをcvsの.cvsignoreファイルに置き換えて読んでもらえれば、cvsでも使えるはずです。

もっと良い方法をご存じの方はぜひ、教えてください。

良いアイディアは良い経験から。良い経験は体験と思考から(ひらめき脳、案本)

「ひらめき脳」(茂木健一郎著)を読みました。ひらめき、記憶、感情、セレンディピティについて書かれています。この本の中で私が一番興味を持ったのは、「記憶力=編集力」の項でした。記憶には適切な意味付けがなされて初めて有用なものとなる、という話です。これはつまり、現象の体験としての記憶そのままでは、経験値とならず、それについて何らかの意味付け・抽象化がなされることではじめて「知恵」となるのだと解釈しました。

そういえば「案本」 という本にも似たような事が書かれていました。ちょっと手元に無いので記憶からの要約になりますが「アイディアは経験からしか湧かない。ただし経験とは、体験だけではなく、それについての思索・考察を経たものでなければならない」というような話だったと思います。

"日記を書く"という習慣は、毎日の体験を振り返りそれに意味付けをした上で知恵として自分に定着させるという意味でも良いのかも、と思いました。
# 私は3日坊主どころか2日と続きませんが…。

マインドマップは”お絵かきマインド”が重要 (“マインドマップが本当に使いこなせる本”の感想)

練習法や、正しい書き方など、これまでの入門本にはなかったノウハウがフルカラーで詰まっててお得です。"お絵かきマインド"が重要なんだな、と認識を新たにしました。

ポイントは「いかに右脳を刺激するか?」。こだわりのセントラルイメージ、ブランチの複雑な曲線、一つのブランチに一つの単語、カラフルさ重視、などは全て右脳の活性化のためです。言語を使っていれば左脳は自動的に活性化するので、これらによって脳全体をフル活用できるのです、という主旨でした。

そのほかの付録的コンテンツ:

  • マインドマップコンテスト大賞を受賞された"やまもとさをん"さん作の素材集付き!でした。iMindMapで書くと味気なさ倍増になりがちな私のマインドマップも"賑やか"になるかも。
  • マインドマッパーが使っているペンやノートの紹介
  • 最新タブレット&タブレットPCカタログ

コスモマップセミナー受講してきました

先日、同じセミナを受講した妻のオススメで、今日、一緒に受講してきました。妻は2回目の受講で意気揚々、私は初めてで半信半疑モードでの参加だったのですが終わってみると「これはとても効果がありそうだ」という感想をもったので、かんたんにまとめてみます。

まず1つめの気づき。
こういう自己啓発セミナーなんかで"目標"というと「何か高尚な感じがするものでなければならない」なんてプレッシャーを私は感じるのですが、最初は年収○○円とか、そんな目標で構わないそうです。それを「その目標が実現すると、どんな良いことがあるのか?」という質問を5回くりかえすことで、より大きな隠された目標が抽出されます。最初に挙げた目標は、顕在意識によるものです。その意義を追求しつづけることによって、潜在意識が持っている抽象的な目標を見つけることができます。セミナでは2人ペアになって交代で質問をしました。特にここは自分一人では難しいだろうな、と思います。

2つめの気づき。
他のいろいろな"成功法則"でも言われているように「目標を紙に書くこと」「成功の具体的なイメージ」はとても重要だということ。これらに加えて、セミナーでは「人に話すこと」にも重点が置かれていました。いずれも、目標・達成手段・成功イメージを強く潜在意識に焼き付けるのに効果的な方法です。潜在意識の助けを借りる手法の強力さについては、苫米地さんの本に詳しかったです。

3つめの気づき。
「自分のリミッタを外す」ということ(先ほども言及した苫米地さんの本では「脳のブレーキを外す」という言い方をされていますね)は、とても凄い効果があるな、と感じました。コスモマップでは「より大きな隠された目標を、潜在意識から引っ張りだす」ことは最初に書きました。このワークと、ポジティブなイメージを詰め込んだプロジェクト名の設定により、考え方がかなりポジティブになります。これを最初に実行することで、以降のコスモマップ記述ステップで、普通の状態では決して書かないようなアイディアが湧き出してくるのを私は実感しました。

というわけで、色々と収穫の多い勉強会でした。講師の"とみ太郎"さんに感謝します。

AmazonWEBサービスAPIが前より使いやすくなっていた

昨日久しぶりに使おうとおもって公式サイトに行ったら、ちゃんと接続用のライブラリが、jarファイルで提供されていました。昔はwsdl(だっ
け?)ファイルをaxis(だっけ?)に入力してモデルやらXMLパーサやらを生成して、axisの不具合っぽいところを手直ししたりしてようやくAPI
を使える状態になる、という面倒くさい状態だったんだけど、今はちゃんとそこまでやったものが最初から配布されてます。こういう一手間、二手間で敷居が下
がって(Javaからの)利用者数が2倍3倍になるんだろうと思う。Amazonは、なんで今までやってなかったんだろう?

それと、AmazonWEBサービスAPIは、ときどきバージョンアップしてるらしくてインターフェイスのバージョン管理という視点から見ても面白そうだと思った。互換性をどうやって維持しているのか、とか。

Ubuntuオススメです

私は自宅用パソコンのデスクトップOSとして、ubuntuというLinuxディストリビューションを使っています。

Linuxを使い出したのは1年ほど前からで、過去10年以上ずっとWindows一筋でした。10年以上慣れ親しんできたWindowsを使わずに、Linuxに切り替えて1年以上使い続けている理由をいくつか書きたいと思います。

  1. 導入は簡単でした。
    インストールもGUIで楽々できて、よほど変なハードウェアを使ってない限り、ほとんどのデバイスは自動的に認識されます。CD-ROMとかからWindowsをインストールするのと大して変わりません。ハードウェアサポートが心配な場合は、CD-ROMからインストール無しで起動して確認することもできます(Live-CD)。
  2. 見た目が凄いデスクトップマネージャが使える。

    すごいです。派手な演出にはすぐに飽きますが、どんどん新しいエフェクトが開発されるので、そういうのをおいかけ続けてみるのも面白いです。
    ワークスペースという複数のデスクトップを切り替えて使える機能は、とても便利です。


    ↑この動画は、UbuntuにBerylというソフトを入れて、デスクトップマネージャの見た目を派手にしてみたデモです。ものすごい重い処理に見えますが、ハイエンドマシンでなくても普通に使えます。ワークスペース機能のデモは1:40あたりです。動画では1つのアプリしかないので分かりにくいですが、複数のデスクトップをぱぱっと切り替えて使えます。

  3. でも使い込むのはちょっと難しい。
    導入は簡単ですが、ちょっと凝ったこと、たとえば動作保証されていないディストリビューションにAtokをインストールするとか、デュアルモニタにするとか、そういうことをするのにはイチイチGoogleで検索する必要があります。逆に言えば、Googleさえあれば必要な知識のほとんどは手に入る、ということです。
    で、「ちょっと難しい」のが、なぜ「使っている理由」なのか?というと、そういうことを色々やっているうちに、標準的なコマンドはスラスラと打てるようになる、ということです。今の私が使えるのは本当に標準的なコマンドだけですが、仕事でしかLinuxを使わなかったときとは雲泥の差がありますし、この差は今後も開いていくと思います。
  4. WEBアプリの開発環境を整えやすい。
    アプリケーションサーバも、データベースサーバも、ほとんどのオープンソース製品は、カタログから選ぶだけでダウンロード&インストールできる仕組み(パッケージマネージャ)があります。特にUbuntuについているSynapticというパッケージマネージャは使いやすいと思います。

    synapticのスクリーンショット
    ↑はSynapticのスクリーンショット。インストールしたい/アンインストールしたい製品のチェックボックスをON/OFFして「適用」ボタンをク
    リックするだけ。Eclipse, Firefox, Ruby, Python, Perl, Postgres, Mysql, Apache
    など、有名どころは簡単にインストールできます。

  5. マルウェアの危険性が低い – 今のところは
    OS自体にファイルパーミッションという仕組みがあるので、わざわざroot権限で脆弱なサービスを実行して外部に公開したりしていない限りは、ワームにやられる心配もありません。そもそもLinuxを対象にするマルウェアの絶対数が少ないというのもポイントだと思います。

マイナスポイントも一応あげておきます。

  1. ハードウェア・OSに大きく依存するソフトを使えないことが多い。
    グラフィックアクセラレーションを多用する商用ゲームソフトやビジネスアプリは、シェアの低いLinux版に移植・開発されることは少ないです。また、ハードウェアと連携するソフトウェアもLinux版が提供されないことが多いです(例:iTunes, 多機能マウスの制御ソフトなど)。iTunesはクローンが色々あるのですが、iPod Touch, iPhoneにしっかり対応しているものは、まだ完成していません。
    ※私は自宅デスクトップでiTunesを使うのは諦めました。どうしても音楽を聴くきたいときは、他のマシンで同期したiPodで聴いています。
  2. MS-Office互換を謳うOpenOfficeが微妙に使いにくい。
    完全な互換性があるわけではありません。見栄えが微妙に崩れたり、一部使えない機能があったりしますし、ツールバー・メニュー・ショートカットキーなどのUIも微妙に使い勝手が異なるので、慣れないとイライラします。
    ※私は、どうしてもという時は仮想マシンでWindowsを立ち上げて作業しています。仮想マシンではデュアルスクリーンに出来ないので、やっぱり本格的に作業するのには向いていません。

「インターフェイス指向設計」読ん…でます

プログラムのインターフェイス(User InterfaceではなくProgramming Interface)のデザイン(この記事では"意匠"ではなく"設計"の意味で使います)について書かれた本。

まだ第一部(第三部まである)しか読んでません。

この本を読んで、大学で受けたコンピューターアーキテクチャの最初の講義で「(コンピューターアーキテクチャの)デザインとは、トレードオフを決めることだ!」と先生が言ってたのを思い出しました。

どういうことか、説明してみます。

デザインというのは、いろいろなアーキテクチャの選択肢の中から、どれかを採用したり、組み合わせたりすることです。選択肢にはそれぞれ特徴、つまりメリットとデメリットがあります。デザイン作業では、それらを見極めた上で、メリットが最大化されるように当てはめていきたいのですが、ほとんどの場合は、デメリットもある程度受け入れなければなりません。このメリット・デメリットのバランス取りの事をトレードオフと言うのですが、デザインの問題の本質は、このトレードオフにあるのだという話でした。

本のほうに話を戻します。

この本の第一部は、

  • インターフェイス実装の時に注意すべきこと、契約による設計について
  • さまざまなインターフェイスのパターンについて、メリットとデメリット、特定の状況で特に注意すべきデメリットについて

書かれています。トレードオフするインターフェイスのパターンとして以下が解説されています。

  • データインターフェイス vs サービスインターフェイス
  • 別のメソッドを用意する vs パラメータで制御する
  • 高機能 vs 単機能
  • インターフェイス vs 継承
  • ステートレス vs ステートフル
  • 単一インターフェイス vs 複数インターフェイス
  • リモートインターフェイス
    • 手続き型インターフェイス vs ドキュメント型インターフェイス
    • 同期型インターフェイス vs 非同期型インターフェイス
    • ステートレス vs ステートフル
    • 安定性 vs 柔軟性

結構、無意識的に知っていることが多かったのですが、このように明文化して読めたというのは良かったです。プログラミング初級者を卒業し、デザインパターンやオブジェクト指向プログラミングを学ぼうという人にとっては、とても良い教科書になるでしょう。本なしでは自分で色々と試行錯誤しないと分からない知識に触れることができます。実際に身につけるには経験が必要ですが、知識があるだけで、まずい選択をすることが減らせると思います。