2012年11月11日日曜日

『物理学はいかに創られたか』を読んでみた

 岩波新書から刊行されている『物理学はいかに創られたか』(原題:The Evolution of Physics)を読む機会があったので、この本の感想を簡単にまとめておこうと思います。


本書について

 本のタイトル『物理学はいかに創られたか』からもわかると思いますが、この本は物理学の発展について書かれたものです。著者は、かの有名なアインシュタインとその弟子のインフェルト。アインシュタインに関しては今更の説明は不要かと思いますが、光電効果や相対性理論など、近現代の物理学に大きく貢献した偉人です。
 岩波新書から日本語訳が出版されたのは1939年。この年は、第二次世界大戦の始まりの年でもあり、そこから現在に至るまで、半世紀以上に渡って読み継がれているロングセラーと言える一冊でしょう。


本の内容は?

 さて、この本は高名なアインシュタインらが記した物理学の書。ならば、さぞかし難解な数式や記述なのだろうと思うかもしれません。ですが、この書には一切数式はでてきません。ただの一つもです。
 この本に書かれているのは、古代から現代までの科学者らが直面した困難と、それをどう乗り越えてきたのかであり、その過程を思考実験をベースに読み解いていきます。
 このことは、本の冒頭にもしっかりと書かれています(少し堅苦しい表現ですが…)。

「私たちは物理学の教科書を書いたのではありません。(中略)。私たちの目的とするところは、むしろ人間の心が観念の世界と現象の世界との関係を見つけ出そうと企てたことについて、その大要を述べてゆこうとする点にあるのでした。つまり世界の実在に対応するような観念を科学の名で案出してゆくところの原動力を示そうとしたのでした。」 (上巻・序文より)
 とはいっても、扱うものは物理学。日常で経験する現象から、普段の生活で経験しないような現象までを、広く浅く、そして平易な言葉で説明していきます。70年以上前の訳書なので、少し読みにくい部分もあるかもしれませんが、内容自体はシンプルでかつ直感的なものになっていると思います。


どんな人におすすめ?

 対象となる読者についても、本書の冒頭に書かれてあります。

「読者は物理学や数学の具体的な知識を何ももっていなくとも、適当な思考力をもってさえいればよいと思います。ことに物理学的並びに哲学的思想に興味を抱く人々を望むのであって…(以下省略)」 (上巻・序文より)
 つまり、物理学やその思想に興味がある人なら誰でもOKということですね。
 実際に、私がこの本を読んでみての感想ですが、
  • 理系に進もうと思っている、または、理系の中高生
  • 教養を高めたい大学生、社会人(文理問わず)
には是非読んで欲しいと思っています。
 特に、理系を志す中高生には読んでもらいたいです。物理学の参考書を3冊読むよりも、その前に、この本を読んでおくべきだと私は思います。この本は、問題をどのように解くかではなく、物理的な現象をどのように捉え、どのように考えれば良いのかを導いてくれるはずです。

 高校時代にこの本に出会えなかったことが悔やまれます。


まとめ

 私の駄文でどの程度読者の方の心に響いたかはわかりませんが、今回紹介した『物理学はいかに創られたか』はかなりの名著だと思います。この投稿を通じて、少しでも多くの人がこの本、そして、物理学に興味を持っていただけたらと思います。


関連リンク


更新記録

  • 2012/11/10 投稿


参考資料

  • アインシュタイン、インフェルト著 石原純訳 『物理学はいかに創られたか』 岩波新書


2012年9月28日金曜日

Syntax Highlighter 導入メモ

 SyntaxHighlighterとは、CSSとJavaScriptを用いてソースコードをハイライトしてくれるライブラリ。
 百聞は一見に如かずということで、実際に表示してみるとこんな感じ。

#include <stdio.h>

int main()
{
    printf("Hello World!\n");
    return 0;
}

 単純なCのHelloWorldプログラムだけど、こんなふうに色付きで見やすく表示してくれます。

 というわけで導入方法の簡単なメモです。 

導入方法 - Webサイト編

 自分のWebサイトにSyntaxHighlighterを導入したい場合、 以下のサイトを参考にしてください。
(私は自分のWebサイトを持っていないので、試してないです(-_-;))


導入方法 - Blogger編

 自分ののWebサイトであれば上記の方法で導入できると思うのですが、 CSSファイルやJavaScriptのライブラリをアップロードできないブログでは少し工夫が必要です。

 というわけで、Blogger(このブログを提供しているブログサービス)での導入方法のメモ。

 結論から言うと、外部ファイルを読み込むことで実現します。

 参考になるのは以下のブログ。

 基本的に上の記事を読んでもらえばわかると思いますが、 英語が苦手な人のために簡単に内容をまとめると…

  1. 外部からライブラリを読み込むスクリプトを作成
    1. 「GENERATE SCRIPTS」ボタン(記事中段辺り)を押す
    2. テーマを選択(Select a Theme)
    3.  ちなみに、このブログで利用しているテーマはEclipse。
       (そのうちテーマ別の表示のされ方の検証もやるかも)

    4. 言語を選択する(Select Brushes、複数選択可)
    5. 「GENERATE」ボタンを押す
  2. 1.で生成されたスクリプトをコピー
  3. Bloggerのテンプレートのヘッダにペースト
    1. Bloggerの設定画面で「テンプレート」を選択
    2. 「HTMLの編集」ボタンを押す(下図)
    3. 警告が出てくるけれど、「続行」ボタンを押す
    4. ヘッダの最後に2でコピーしたスクリプトを貼り付ける(下図)
    5.  ヘッダの最後とは</head>の直前です。ちなみにBloggerのヘッダはかなり長いです。


 Bloggerのプレビュー画面では、 一部機能が使えない(e.g.リンク先へ飛べない、スクロールができない)ので、 そこで悩まないように(そこで10分くらい悩んだとかそんなバカな…(-_-;)
 あ、コードをハイライトすることはできますよ?

 とりあえず、導入はこのくらいで…。

基本的な使い方

 基本的な使い方はシンプルで、ソースコードに次のように書き込むだけ。

<pre class="brush: 言語の種類をここに記述(A);">
// ソースコードをここに記述(B)
</pre>

 (A)の言語の指定の仕方についてはここ(公式)。 当然ですけど、(A)で指定できる言語はヘッダで読み込ませたスクリプトのものだけです。
 ちなみに、(A)には言語の指定以外にも、 ハイライトする行の指定や行番号の表示の有無なんかのオプションも利用できます。

 (B)に貼り付けるソースコードについては少し注意が必要。
 htmlで、<や>などは特殊な記号なので、直接記述してはいけません。 そこで、これらの文字を別の記号に置き換える必要があります。
 具体的には、 < は &lt; 、 > は &gt; に置換しなければなりません。

 手動で置換するのは面倒で時間の無駄なので、自動でやってくれるツールを利用しましょう。

 最後に、具体例として一番最初に書いたHelloWorldを SyntaxHighlighterで表示するときのhtmlのソースコードを書いておきます。

<pre class="brush: c;">
#include &lt;stdio.h&gt;

int main()
{
    printf(&quot;Hello World!\n&quot;);
    return 0;
}

</pre>

 ここまでで基本的な話は終了。

 これ以上に話については、公式サイトを見るか、ぐぐってください。

(補足)行番号の調整

 Google ChromeでSyntaxHighlighterを利用したページを表示すると、 10行目以降で行番号が複数行になるといった問題が生じると思います(2012年9月現在)。

 というわけで、これを修正しましょう。
 参考になったのは以下のURL。

 Bloggerの場合の解決法は至って簡単で、ヘッダの最後に次のコードを追加するだけです。
 (Webサイトの場合でもBloggerの場合でも上手くいくはず。ただ、自分のWebサイトの場合は、ライブラリを少し訂正したほうがスマートかも。)

<style>
.syntaxhighlighter table td.gutter .line {
    padding: 0 !important;
}
</style>

 他のブラウザでどう表示されるかは確認してないけど、 Google Chromeではこれで大丈夫はなず。
 各ブラウザの仕様の差については深入りしないことにしてるので、原因は詮索しません。

2012年6月20日水曜日

MacBook Air 13inch, mid 2012 を買ってみた

 先日発売されたMacBook Air 13inch, mid 2012を購入したので、 その開封レポートと使ってみた感想を簡単に報告。

 買ったマシンのスペックは、

CPU
Intel Core i 7 2.0GHz
Memory
8GB(DDR3, 1600MHz)
Storage
SSD 256GB(Flash Storage)
 と、こんな感じ。値段は13万とちょっと。
 ちなみに、MacBook AirなのでRetinaディスプレイではないです。

 はじめてのMacだったのでどう扱えばいいのかわからず、手探り状態で開封。 (※部屋が狭いのでベッドの上で開封。)





 届いて早2日…そろそろ慣れてきた…かな?


 以下、使ってみての感想。(まだ2日しか使ってないけど。)

素晴らしい点

起動がとにかく早い(起動時、スリープ状態からの回復時)
待ち時間がほとんどない!
今まで使ってきたPCだと、 起動するまでに飲み物を取ってくるだけの時間があったけど、 MacBook Airではそんな時間すらない。
もちろん動作も早い
今まで使ってきたPC(Windows7,Core i5,4GB)と比べても断然早い。
一番驚いたのがVM(Virtual Boxを使用)の速度。 今回はVMの中に、メモリ1GB当ててUbuntu 12.04を入れたけど、 ほんとにVMかと思うくらいに体感速度が早い!
他にも、Webサイトの読み込みなんかも断然早い気がする。
文字が見やすい
今までWindowsやLinuxの文字ばっかり見てきたせいか、 かなり文字が綺麗で読みやすい。
さすがに、安い外部のディスプレイにつなぐと文字が潰れたりするけど…
薄くて軽い
これは、MacBook Airの最大の特徴かもしれないけど、ほんとに薄くて軽い。
こんな軽いのにどこからあのスピードが出せるのか…

いいところは他にもあるけど、今回はこのくらいで。

もう少し改善してほしい点

Appleストアのクレジットカード
Appleストアを利用するときにどうしてもクレジットカード情報が要求されること。
学生とかはクレジットカード持ってない人もいるし、 あまりその手の情報はインターネット上に流したくないので、個人的にはなくしてもらいたい。
日本人開発者への配慮
Developer関係のページは英語ばっかりで…
もう少し日本語があってもいいかなーって思った。
まぁ、読めないわけじゃないし(喋れないけど。)、 別に気にしなければいいだけなんだけど、ちょっと疲れる。 
OSのクラッシュ
なぜかこの2日で3回ほどOSがクラッシュ…
ただ、OSがクラッシュして再起動しても、 クラッシュ前の状態が再現される(これはびっくりした)ので、 そこまで気にならないけど…。
使い方が悪いのか…?

 他に面白いことがあれば、また後日報告するかも。

まとめ

 まとめると、噂されるだけあってかなり素晴らしい!
 おそらく開発環境としても十分な能力を発揮してくれると思う。

 最後に一言…
 「Windowsとは何だったのか…」


追記 - 値段について

 買った値段を書いてなかったので追加しました。 学生の身分なので、学割だったんだけど。

追記2 - OSのクラッシュの件

 この記事を書いて2週間後くらいにはOSがクラッシュしなくなりました。
 対応早いですね、さすがです!



2012年5月28日月曜日

Metronome for Android公開のお知らせ

 先程、Metronome for Androidというアプリを公開してきました。
 名前通り、ただのメトロノームアプリです。もともとは個人用に作ったのですが,せっかくだったので公開しました。

無料ですのでよかったら使ってやってください。


 Google Playにある既存のメトロノームアプリは、 設定画面で設定してスタートボタンを押し、 拍を刻むタイプのものが多いようです(プログラム的にはそっちの方が断然簡単です)。

 しかし、私個人としては、 振り子のついたアナログのメトロノームに慣れているので、 このアプリでは無駄な設定画面は設けず、 画面でアナログのメトロノームを再現してみました。

 アナログのメトロノームより場所は取りませんし持ち運びも簡単なので、 私個人としては作ってみて満足しています。

まぁ…デザインがいまいちなので、今後素材があったら変更するかもしれません。



2012年4月28日土曜日

Android2.2系 Bitmap.getPixel()で生じるバグ(?)

先日公開したアプリ「ESweeper」で直面したAndroid2.2系のバグ(?)に関するメモ。

対象端末
Android 2.2系
内容
BitmapFactory.decodeResource()で読み込んだBitmapオブジェクトに対して、 Bitmap.getPixel()で取得できるARGB値が不正確。
対処法
思いつきません… しいていうなら、ARGB値で細かい値を使わない。

 以下、この不具合を検証してみた結果です。

 EDGEというソフトウェアを用いて、下のようなBMP形式の画像を作成しました。
 サイズは15×10で、色は白(R=255, G=255, B=255)・灰(R=127, G=127, B=127)・黒(R=0, G=0, B=0)です。

 この画像のARGB値を、次のプログラムで取得しました。

//
// Bitmap.getPixel()メソッドで取得する色値の検証プログラム
//
public class BitmapPixelTestActivity extends Activity {
 final String TAG = "BitmapPixelTestActivity";
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // 画像を読み込む
  Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.test);
  
  // テスト
  for (int i = 0; i < bmp.getWidth(); i++) {
   // ARGB値の取得
   int color = bmp.getPixel(i, 5);
   switch (color) {
   // 白 R=255, G=255, B=255
   case 0xffffffff:
    Log.d(TAG, String.format("(x, y)=(%d, %d) is white.", i, 5));
    break;
   // 灰 R=127 G=127 B= 127
   case 0xff7f7f7f:
    Log.d(TAG, String.format("(x, y)=(%d, %d) is gray.", i, 5));
    break;
   // 黒 R=0, G=0, B=0
   case 0xff000000:
    Log.d(TAG, String.format("(x, y)=(%d, %d) is black.", i, 5));
    break;
   // それ以外の色
   //  ピクセルのARGB値が正確に読み込まれていない場合に、
   //  以下の処理が実行される。
   default:
    int a = Color.alpha(color);
    int r = Color.red(color);
    int g = Color.green(color);
    int b = Color.blue(color);
    Log.d(TAG, String.format("(x, y)=(%d, %d) is (a, r, g, b)=(%d, %d, %d, %d).", i, 5, a, r, g, b));
   }
  }
 }
}

 Android 2.3.1のエミュレータで実行したときのLogCatの出力です。
 期待した通りの結果が得られています。

 次に、Android 2.2のエミュレータで実行したときのLogCatの出力です。
 画像の中段の出力を見てみると、RGBの値が定まっていません。

 この原因が、BitmapFactory.decodeResource()にあるのか、 Bitmap.getPixel()にあるのか、 それとも他に要因があるのかは不明ですが、 リソースから読み込んだBitmapオブジェクトのARGB値を扱うときには注意が必要です。
 BitmapFactory.decodeResouce()にはBitmapFactory.Optionsを指定するもう一つのメソッドがあるので、 そちらでうまく設定すれば問題ないのかもしれません。 ですが、同じコードを実行しても得られるデータが異なるというのは開発者にはつらいです…。

 原因を知ってるかたがいらっしゃったら、コメントしていただけると助かります。



追記: