書評:オーディンの鴉

オーディンの鴉 (朝日文庫)作者: 福田和代出版社/メーカー: 朝日新聞出版発売日: 2012/09/07メディア: 文庫 クリック: 7回この商品を含むブログ (7件) を見るなぜこれほどの作品が、有象無象の中に埋もれているのだ!

書評:永遠の0

永遠の0 (講談社文庫)作者: 百田尚樹出版社/メーカー: 講談社発売日: 2009/07/15メディア: 文庫購入: 39人 クリック: 275回この商品を含むブログ (262件) を見るもはや、衝撃。本書の魅力は、そのリアルな描写。まるで著者がそのシーンを直接見て書き上げた…

プログラミング言語の「ぼうけんのしょ」 - コーディングを支える技術

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)作者: 西尾泰和出版社/メーカー: 技術評論社発売日: 2013/04/24メディア: 単行本(ソフトカバー)この商品を含むブログ (15件) を見るよくもここまでプログラミング言語を…

auto キーワードの注意点

C++11 で auto キーワードが追加された。 このキーワードは C++ での型推論に用いられる。

魔法の数字、1408160338

1408160338 は日付を表す数字である。この数字が面白いのは、タイムスタンプとしても、年月日時分で表された数字だとしても、同じ日時を表すところだ。 では早速試してみよう。 public static void main(String[] args) throws Exception { long t = 1408160…

iPad mini レビュー

iPad mini 16GB Wi-Fiモデル ホワイト&シルバー MD531J/A出版社/メーカー: アップルメディア: エレクトロニクス クリック: 12回この商品を含むブログ (21件) を見る iPad mini を購入したので、レビュー。

いざという時のために覚えておきたい OQL - OQL ヘルプ日本語訳

Java ヒープを解析する際、jhat や Memory Analyzer といったツールを使うことになるが、これらのツールの内部では OQL (Object Query Language) という言語が使われ、ヒープを解析している。 SQL ライクに記述できるこの言語を手で打って使用することは滅多…

JavaScript の map 関数の仕様がクソ

JavaScript で、wtf なコードを発見。 ['10','10','10','10','10'].map(parseInt) // 実行結果 [10, NaN, 2, 3, 4] なんだ・・・これ・・・は・・・!?

Thread.sleep(0) のオーバーヘッドがヤバイ件

あるプログラムがどうも遅いので、調べてみると Thread.sleep(long) が怪しかった。もちろん、スリープしているならプロファイルで遅い結果が出てくるのも頷けるが、Thread.sleep に渡していた値は 0。 どうやら、Thread.sleep(0) のオーバーヘッドは予想以…

パニック障害になった(予後編その2)

前回まで パニック障害になった パニック障害になった(予後編) 今回 時が経つのは早いもので、パニック障害で休職して復職してから二年が経過した。 今までの間に過去の記事に何件もコメントが付いて、微力ながら自分の体験記が多のパニック障害者の役に立て…

書評:理性の限界

理性の限界――不可能性・不確定性・不完全性 (講談社現代新書)作者: 高橋昌一郎出版社/メーカー: 講談社発売日: 2008/06/17メディア: 新書購入: 56人 クリック: 299回この商品を含むブログ (178件) を見る様々な分野の専門家が集い、ディスカッションをすると…

コンシステントハッシュを使う際の仮想ノード数の決め方

コンシステントハッシュ法は便利なアルゴリズムだが、注意点がある。 仮想ノード数をいくつにするかという問題で、仮想ノード数が多ければ多いほどファイルは均一に分散するというわけではないという事実だ。 多数のキャッシュオブジェクトをいくつかのキャ…

2012 年書籍ベスト 10

2012 年に読んだ本の中で、良かった本をここに記録しておく。 技術書編と非技術書編に分けて、それぞれのベスト 10 。2012 年に発売されたものではなく、あくまで 2012 年に自分が読んだもの。ではまず技術書編から。

書評:ふつうの Linux プログラミング - 入門本のかくあるべき姿

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道作者: 青木峰郎出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/07/27メディア: 単行本購入: 35人 クリック: 450回この商品を含むブログ (145件) を見るふと軽い気持…

書評:天地明察 - 日本の暦法、ここにあり

天地明察(上) (角川文庫)作者: 冲方丁出版社/メーカー: 角川書店(角川グループパブリッシング)発売日: 2012/05/18メディア: 文庫購入: 3人 クリック: 37回この商品を含むブログ (98件) を見る 暦は天意とされる時代に、算術を持って天を解明し、改暦に挑んだ…

書評:Gene Mapper

Gene Mapper -core- (ジーン・マッパー コア)作者: Fujii Taiyo出版社/メーカー: Taiyo Lab発売日: 2012/07/12メディア: Kindle版購入: 7人 クリック: 58回この商品を含むブログ (15件) を見るKindle Paperwhite で最初に読んだ書籍が本書で良かった。 なに…

Kindle Paperwhite レビュー

Kindle Paperwhite出版社/メーカー: Amazon.co.jp発売日: 2012/11/19メディア: エレクトロニクス購入: 79人 クリック: 11,101回この商品を含むブログ (200件) を見る Kindle Paperwhite が届いたので早速レビュー。 買ったのは Kindle Paperwhite (以下 Kind…

C言語がコンパイルされて実行可能になるまでの流れ

コンパイルの処理は大きく分けて下記の処理にわけられる。 プリプロセス コンパイル アセンブル リンク この記事では、C言語の Hello World を過程毎に追い、プログラムが出来上がるまでの流れを追う。

書評:楽園の泉

楽園の泉 (ハヤカワ文庫SF)作者: アーサー・C.クラーク,Arthur C. Clarke,山高昭出版社/メーカー: 早川書房発売日: 2006/01メディア: 文庫購入: 3人 クリック: 63回この商品を含むブログ (93件) を見るかくも美しきかな、軌道エレベーター。 アイディアは昔…

クロスプラットフォームな Java コードの書き方

仕事で、Ubuntu 上のみで稼働する Java 製のプログラムを Windows で動くよう対応したので、対応するのに必要だった点を記録しておく。

書評:プログラミング作法

プログラミング作法作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博出版社/メーカー: アスキー発売日: 2000/11メディア: 単行本購入: 58人 クリック: 1,137回この商品を含むブログ (201件) を見る今までたくさんの技術書を読んで…

強烈に素晴らしいプロダクトに変貌した Apache Solr - Solr 4.0 登場

Apache Solr 4.0 がリリースされた。 本記事では Solr 4.0 の新機能や改善された点のうち気になるものを紹介する。 概要 Solr 4.0 では、下記の変更が入る。 83 個の新機能 13 個の最適化 121 個のバグ改修 Solr 4.0 はメジャーバージョンアップにふさわしい…

書評:1Q84

1Q84 BOOK 1作者: 村上春樹出版社/メーカー: 新潮社発売日: 2009/05/29メディア: 単行本購入: 45人 クリック: 1,399回この商品を含むブログ (1308件) を見る ノーベル賞を取り逃がしたというニュースで思い出したので。 本書 1Q84 は村上春樹による長編大作…

なぜ C++ のコンパイルは遅いのか

なぜ C++ のコンパイルは遅いのか。 理由1 バイトコードみたいな高級なもん出力してんじゃねーんだ!こっちは機械語出力してんだよ! なんでもVMまかせのてめーらとは違うんだよ! 理由2 構文が他の言語みたいに単純じゃねーんだよ!特にテンプレートがやべ…

デストラクタが無い言語はオブジェクト指向言語を名乗るな

デストラクタが無いと、真のオブジェクト指向でコードを書くことはできない。 これが理解出来てない人が割と多いようなので、ここに記録しておくことにする。 前提知識 デストラクタとは、オブジェクトを破棄する際に呼び出される関数 Java のファイナライザ…

Java も brainf*ck も大差無い件

Java で Hello world を書くとこうなる。 \u0070\u0075\u0062\u006C\u0069\u0063\u0020\u0020\u0020 \u0063\u006C\u0061\u0073\u0073\u0020\u0020\u0020\u0020 \u0053\u0061\u006D\u0070\u006C\u0065\u0020\u0020\u0020 \u0020\u007B\u0070\u0075\u0062\u006…

ファイルに書きこみを行ったらかならず fsync しよう

通常、なんの考えも無しにプログラムがファイルに書きこみを行った後、運悪くシステムがクラッシュするとファイルが失われる可能性がある。通常のファイル書き込みはファイルに書き込んでいるように見えて実はバッファがメモリ上に蓄えているだけだからだ。…

書評:老ヴォールの惑星

老ヴォールの惑星 (次世代型作家のリアル・フィクション ハヤカワ文庫 JA (809))作者: 小川一水出版社/メーカー: 早川書房発売日: 2005/08/09メディア: 文庫購入: 16人 クリック: 121回この商品を含むブログ (288件) を見るこれまた素晴らしい本に出会ってし…

書評:素数夜曲

素数夜曲: 女王陛下のLISP作者: 吉田武出版社/メーカー: 東海大学出版会発売日: 2012/06/26メディア: 単行本購入: 6人 クリック: 266回この商品を含むブログ (10件) を見るこれはこれは、またしてもとんでもない良書に出会ってしまったものだ。

String#intern したオブジェクトをロックオブジェクトとして使ってはいけない

「文字列をロックオブジェクトとして利用したい」場合がある。 例えば渡されたファイルに処理をするメソッドで、ファイルごとに排他処理をしたいとする。しかしファイルをそのままロックオブジェクトとして使ってはいけないのは明らかだ。File インスタンス…

MySQL で UDF を定義しよう

概要 MySQL の関数は自前で定義出来る。この記事では、MySQL からシェルコマンドを叩けるようにする関数を作成する。関数を自前で定義する方法は、MySQL が用意している UDF(ユーザー定義関数、User Defined Function) の仕組みを使って行う。UDF は C や C+…

Java とサロゲートペアについて

サロゲートペアを知らない人は、その挙動に戸惑うだろう。直感に反する挙動をするからだ。次の Java コードを実行すると何が表示されるだろうか。 String val = "𠮷"; System.out.println(val.length()); val は見た目上は一文字なので 1 と表示することを期…

全文検索エンジン Solr のパフォーマンスチューニングについて

この記事は古くなりました。新しい知見は下記を参照。aoking.hatenablog.jp 概要 全文検索エンジン Solr を使用していて、パフォーマンスチューニングに四苦八苦した話。 ここでは、検索時ではなくドキュメントの追加時についてのチューニングについて記して…

ストライピングロックを試す

マルチスレッドプログラミングでは、ロックの獲得が出来ずに待ち時間が発生し、パフォーマンス劣化の原因となることがしばしばある。そのような場合、まずは下記二点の検討を行う。 ロックの粒度を下げる そもそもロックしないようなアルゴリズムに変える も…

マルチスレッドプログラミングの基本

マルチスレッドプログラミングは直感とかなり異なる挙動をすることが多く、非常に困難なプログラミングであることが知られている。不具合も発見しにくく、高負荷になった時にのみ再現したり極めて稀な状態になった時にのみ再現したり等、解決が困難なだけで…

32bit, 64bit で扱える値について

2^32 は何バイト? 4GB = 4096MB = 4194304KB = 4294967296B 2^64 は何バイト? 16EB = 16384PB = 16777216TB = 17179869184GB = 17592186044416MB = 18014398509481984KB = 18446744073709552000B 2^32 秒は何年? 136年70日6時間28分16秒→ signed なのでこ…

jstack でスレッドダンプを取る

jstack というツールがある。このツールは、現在実行中の Java プロセスのスレッドの状態を取得出来るツールだ。思ったように性能が出ない時やデッドロックっぽい現象が発生した際はこのツールを使ってスレッドの状態を取得、つまりスレッドダンプを得て、そ…

適切な Java コーディングのために心がけること

良いコードを書くために心がけることを箇条書き。 Close 処理を finally で行う ダメな例 InputStreamReader reader = new HogeInputStreamReader(...); doSomething(reader); reader.close(); doSomething(reader); で Exception が発生した場合に close さ…

「60%の人間はプログラミングの素質がない」件について

バカだけどプログラマになった身としては、そんなことは無いと思う。 60%の人間はプログラミングの素質がない http://cpplover.blogspot.jp/2012/05/60.html もちろん、誰でも努力すれば複雑に絡み合うマルチスレッドのプログラムを組めるとは思わないし、OS…

運命のマウスパッドに出会ってしまった件

キーボードの回のエントリに続き、マウスネタ。マウスは自宅でも会社でも Logicool M950 を使用している。 LOGICOOL ワイヤレスマウス パフォーマンスマウス 高速スクロール対応ホイール搭載 M950出版社/メーカー: ロジクール発売日: 2009/11/06メディア: Pe…

MySQL でタブ区切りのデータを出力

SQL

悩んだので。 何もしなくてもファイルにリダイレクトすればタブ区切りになる。例えば $ mysql -uroot -psecret -e "SHOW STATUS"と打つと下記のように表整形された結果が出力される。 +------------------------------------------+-------------+ | Variabl…

名前を元にプロセスIDを取得したい時

例えば hogehogeServer という名前のプロセスのIDを取得したい時、今まではこんな感じでやっていた。 $ ps ax | grep hogehogeServe[r] | awk '{print $1}' 1234が、どうやら pgrep で一発でできるらしい。 $ pgrep -f hogehogeServer 1234パイプは便利だけ…

キーボードを HHK にした。

キーボードを FILCO の Majestouch から HHK(HappyHackingKeyboard)にした。Majestouch の打鍵感が好きで、これ以外のキーボードを買うことは無いだろうと思っていたのだけど、会社がHHKを買ってくれたので使ってみたらあまりの心地よさにびっくりしたので…

JavaScript で Scheme 作った

簡易 Scheme を JavaScript で実装した。基本的な関数の呼び出しや定義が行える。 完全に再現したわけでは無いので、Scheme 方言言語 Tetorang と呼ぶことにしよう。使用はこちら。 http://512bit.org/scheme/scheme.html Google Chrome で動きます。ぎりぎ…

finally 句で return してはいけない

finally 句で return すると try{} 句の中で発生した例外が握りつぶされる。 public static void main(String[] args) { try { throw new RuntimeException(); } finally { return; } } 上記コードを実行すると、RuntimeException は発生せず何も表示されず…

Java で簡単マルチスレッドプログラミング

仕事でマルチスレッドを扱うようになったので備忘録として Executors 関連のメモを残しておく。 あるタスクを別スレッドで実行したい時、Executors クラスを使えば自前でスレッドの管理をすること無く簡単に並列処理を行えるようになる。 もちろん完全に簡単…

Eclipse のツールチップの背景色が黒で困る

ここにあるとおり。 http://askubuntu.com/questions/70599/how-to-change-tooltip-background-color-in-unity /usr/share/themes/Ambiance/gtk-3.0/settings.ini /usr/share/themes/Ambiance/gtk-3.0/gtk.css /usr/share/themes/Ambiance/gtk-2.0/gtkrc 上…

Eclipse で tree ペインを矢印キーで展開できるようにする

Ubuntu に環境を入れ替えたら、やはりというか期待はずれというか、UIはまだまだ発展途上のようだ。 ツリーの展開が矢印キーでできないので、設定ファイルで対応する。ここにあるとおり。 http://stackoverflow.com/questions/4747264/is-it-possible-to-use…

JavaScript で数値判定

与えられた x が数値か、もしくは文字列での数字かどうかを調べる。数値または数字なら true. function isNumber(x){ if( typeof(x) != 'number' && typeof(x) != 'string' ) return false; else return (x == parseFloat(x) && isFinite(x)); } テスト isNu…

Java で LISP 的思考を身につけよう

表題の通り、Java を使って Lisp 的思考を身につけようの巻。 リストの長さを得るとき、list.size() ではなく (length list), リストの中身を足し合わせるには (sum list).以上のような考え方を身につけるため、Lisp をいきなり使うよりは慣れた開発環境のほ…