Hatena::ブログ(Diary)

mnishikawaの日記 このページをアンテナに追加 RSSフィード

2010-10-06

[] WindowsVistaのソースコード

f:id:mnishikawa:20101006223233j:image

面白すぎるだろこれ!

source(9GAG.com)

2010-06-05

[] ハッカソンをやりました

会社でプログラミング好きそうな人たちを集めてハッカソンをやりました。

ハッカソンHackathon:Hack-a-thon)とは、みんなでPCを持ち寄ってひたすらプログラミングしまくるイベントです。

f:id:mnishikawa:20100605162636j:image

このようにノートPCと、いろんなガジェットに囲まれて、かなり集中してプログラミングできる場だったと思います。

プロジェクターでライブコーディングするメンバーもいました。

f:id:mnishikawa:20100604170453j:image

iPad発売日の翌週ということで、iPadが3台そろいました。他にも、iPhone6台、GDD PhoneやXperia、Alexをはじめとする数々のAndroid端末、Linuxザウルス、Armadillo、beagle boardなどなど、プログラマの大好物ガジェットが大集合!

f:id:mnishikawa:20100604122651j:image

今回は、朝9:00から夕方17:00まで、会社の保養施設を借りてやりました。ネットワークも快適。

お昼には社長からランチの差し入れもあり、いい雰囲気でした。


終わった後も、近くのファミレスでご飯を食べながら、新しいアプリのアイデアを遅くまで語り合ってました。完全にものづくりモードということもあり、どんどん面白いアイデアが出てきて、さらに作りたいものがリストアップされました。次回もすでに予定されてて、さらに盛り上がりそうです。

これぞソフト会社って雰囲気を感じられたし、ほんと楽しかったです。

2010-05-08

[]ガベージコレクションのアルゴリズムと実装読書会

ガベージコレクションのアルゴリズムと実装読書会に参加してきました。

http://github.com/ujihisa/nari.gc/blob/master/README.md

ガベージコレクションのアルゴリズムと実装」をみんなで読んで、疑問に思ったところを筆者も交えて議論するというマニアックな勉強会。

私もガベージコレクション(GC)の実装にはほとんど興味が無かったのですが、とにかくこの本がすごい。GCの解説に留まってなくて、「実装」にかなりの割合を割いています。Python,DalvikVM(Android),Rubinius,V8といった、実際の言語処理系のコードをじっくり追いかけるというアプローチをとっている。たとえ、GCにあまり興味が無くても、GCという一つの根幹部分の実装を切り口にして、処理系の設計ポリシーやメモリ管理で知っておきたいことを読み取れる。例えば、言語処理系に限らず、この本を始点にlibcのmalloc()、カーネルのmm(バディシステムとかスラブアロケータとか)と読み進めば、Linuxのメモリ管理なんかもかなり見えてくるんじゃないかと。

実際、今回の勉強会には、ガベージコレクションを実装する人なんてほとんどいないはずなのに、40人以上の参加者が集まってました。

まる一日、じっくり技術書を読んで、筆者を含む参加者のみなさんと語り合う機会というのはすごく贅沢で充実した場でした。

ほんと刺激になりました。もっといろんな処理系を勉強したいなと思いました。


質疑

今回の読書会では書籍の11章「RubiniusのGC」をみんなで読んで、筆者のid:authorNariとディスカッションしました。

僕が読んでて気になったところにも回答いただきましたが、これをきっかけにもうちょっと調べてみたいです。

  • 【Q1】
    • オブジェクトアロケータがメモリ管理領域を決めるのに使ってる閾値(large_object_threshold)として、2700byteという固定値を選んだ理由はわかりますか?何かよく使われるオブジェクトの上限値(よりちょっと大きめ)とかが基準になってるのでしょうか?
  • 【A1】
    • 詳しくは知らないが、経験則で決めた数値ではないでしょうか。
  • 【補足1】
    • こういう即値は経験則である可能性が高いですね。
    • ソースのコメントとか、ちょっと検索したがわからなかった。
    • 誰か理由とか知ってたら教えてください。

  • 【Q2】
    • RubiniusはコピーGC(マイナーGC)を頻繁に呼ぶと書いてるけど、コピーGCは動作原理上、状況によってはキャッシュを外す可能性があるのではないか、とふと思った。FromとTo領域のサイズは小さそうだし、最近のCPUだとほとんど気にする必要なさそうだけど。
  • 【A2】
    • 共著者とも議論した内容。結論は忘れたが、気になる内容。


以下、読書会の途中で紹介されたプレゼンのメモを残しておきます。

こちらも面白いお話がきけました。

詳しくは公開されている資料などをご覧ください。


Scalaで実装するGC

@keisuke_nさん発表。

▼デモのコードはこちら。

http://cappuccino.jp/keisuken/logbook/20100508.html#p01

  • scalaでアルゴリズム実装、GUIライブラリはJava(swing)でデモを作成。
  • オブジェクトの参照数などを可視化して、GCの動きをわかりやすくした。
  • アルゴリズムの正しさ、実装の特性がわかりやすい。
  • GCもやってみるとおもしろい。デモは効果的だなと思った。


GC本のツクリカタ

筆者のid:authorNariさんによるGC本についての発表。

  • GC本を書いた動機と効果
    • 入門書が多すぎる
    • 泥臭い実装も逃げずに書いた。
    • マニアックな本でも売れる。

  • GCを読む順番
    • 1.データ構造
      • オブジェクトの構成、ヘッダの中身
    • 2.ヒープ構造、アロケータ
      • JavaなんかはGCが切り替わるとヒープの構造も大きく変わる。ヒープ構造はGCの処理と密接に関わる。
    • 3.GC
      • ここまでつかめばわかるはず
    • GCの三角関係を意識して適切な順に読んでいく

  • バッドノウハウ
    • GCの臭い
      • ファイル名から嗅ぎ分ける
    • grep
      • "gc"でやるとだめなので、"garbadge collection"などでひっかける。
    • 謎の0xAB
      • C++のdelete時に0xABで埋める
      • メモリ破壊を検知する
      • メモリ破壊系のバグは気づきにくい。


  • まぼろしの目次
    • アルゴリズム編
      • 並行GC、並列GC
      • その他、抜けてるアルゴリズムがあるが、時間切れで書けなかった。第2版とかで入れたい。
    • 実装編
      • HotspotVMなど
      • この場を借りて説明!

  • HotspotVM
    • (略)
  • G1GC
    • Garbage 1st Garbage Collection
    • Open JDK7に入っている。
    • サーバータイプ
      • 大容量メモリ、停止時間を気にする。
    • Javaヒープを「リージョン」単位に分割
    • 並列GC
    • リージョン内のゴミの割合がわかる
    • 停止時間が予測できる。
      • 割合がわかるので、CPUの処理時間から停止時間を予測できる。
    • ゴミの多いリージョンを優先的にGCする。
    • 現時点ではもっとも進んだガベコレ。
    • Javaはいいなぁ(筆者)
  • ほしいガチな本
    • mallocの本

2008-10-20

[]Hexspeak

とあるオープンソースのハード制御のコードを読んでたら、レジスタ設定用変数を黙って「0xDEADBEEF」で初期化してたので、ちょっとだけデータシートとにらめっこしてしまった。

0xDEADBEEFは「dead beef」で、初期化してない領域のマーキングに使ってるわけですね。

コメントも無しで唐突に書かれるとちょっと困りますが、こういった16進表記はよく見かけます。

気になったので、調べてみるとWikipediaに「Hexspeak」というページにまとまってました。

 http://en.wikipedia.org/wiki/Hexspeak

* 0xABADBABE ("a bad babe") is used by Apple as the "Boot Zero Block" magic number.

* 0xBAADF00D ("bad food") is used by Microsoft's LocalAlloc(LMEM_FIXED) to indicate uninitialised allocated heap memory.

* 0xBADDCAFE ("bad cafe") is used by 'watchmalloc' in OpenSolaris to mark allocated but uninitialized memory.

* 0xCAFEBABE ("cafe babe") is used by both Mach-O ("Fat binary" in both 68k and PowerPC) to identify object files and the Java programming language to identify Java bytecode class files

* 0xDEADBEEF ("dead beef") is used by IBM RS/6000 systems, Mac OS on 32-bit PowerPC processors and the Commodore Amiga as a magic debug value. On Sun Microsystems' Solaris, marks freed kernel memory. On OpenVMS, running on Alpha processes DEAD_BEEF can be seen by pressing CTRL-T.

* 0xDEFEC8ED ("defecated") is the magic number for OpenSolaris core dumps.

* 0xFEE1DEAD ("feel dead") is used as magic number in Linux reboot system call.

* 0xFEEDFACE ("feed face") is used as a header for Mach-O binaries, and as an invalid pointer value for 'watchmalloc' in OpenSolaris.


日本語だと読み方のバリエーションも増えるから、いろんなHexspeakできそうです。


さっそく、

 「 123DAAAA 」

という、すごく盛り上がりそうな表現も使えることがわかりました!

何かのマジックナンバーに使ってください〜

2008-07-25

[]フォールト・プローンネス・フィルタリング

2008年7月度SEA関西プロセス分科会に参加。

テーマは、「フォールト・プローンネス・フィルタリング」。

ここで使われている「プローン(prone)」は、日本語の表現で言うところの「〜っぽい」とか、「〜らしい」という感じで捕らえる。

ソフトウェアを構成するモジュールの中で、不具合っぽいモジュール(Fault Prone,FP)を予測するための技術に関するお話がテーマです。

現場の技術者であれば、メトリクスを基にした不具合の傾向分析にそれほど効果を感じていないという方も多いと思います。

何より、集めるのが面倒(コストがかかる)だし、集めたところでデータの信頼性に疑問が残る。

こういった問題は情報学会でも議論の続いてきたテーマで、最近は、日常の開発を進めていれば自然にあつまるデータから、不具合や開発の分析に有効な情報を集める「リポジトリ・マイニング」による手法の研究が進んでいるらしい。ソフトウェアのリポジトリには、ソースの変更履歴、バグトラッキング、メーリングリストなど、多くの情報が潜んでいます。それを発掘するという意味でMining。「GoldRush!」の可能性を秘めているが、やはり、その解析手法がポイントになる。

今回、紹介されたのは、e-mailのSPAMフィルタに使われている「Bayesianフィルタ」をFP(Fault Prone,不具合のありそうなモジュール)特定に用いたという研究です。

予約語とか、識別子、セパレータ、演算子、リテラルの組み合わせからトークンを構成し、不具合の起こるモジュール/起こらなかったモジュールをcorpuses辞書に登録していく。

Eclipseで適応してみると、かなりの精度でFPを検出したらしい。

まだまだ検証の余地があるが、そもそもまともなメトリクス収集の難しい古典的な手法と比べ、合理的な手法に思える。

この発表ではJavaプロジェクトということでEclipseのリポジトリマイニングによる結果分析を行っていたが、実測不具合件数などが未熟っぽく感じるので、もっと安定して枯れたプロジェクトや、より現場に近いプロジェクトでの分析完成度向上に期待したい。

参加者のみなさんも、同じように可能性を感じる方が多かったのか、多くの質疑が飛び交った。

FP予測の研究過程や、今後の可能性についてまとまったお話を聞ける良い機会でした。

良い刺激になったし面白かった。

たまにはこういう勉強会も行かないといけませんねぇ。

2008-03-27

[]組み込みソフトの学習に最適なボード付き雑誌

組み込み開発系の雑誌が付録ラッシュです。

特に何をやるかは決めてないけど、とりあえず購入しておきました。

USB実験基板付き

Interface (インターフェース) 2008年 05月号 [雑誌]」には、FRマイコンUSB実験基盤が付属します。

USBのホスト/ターゲットになるので、いろいろ遊べるかも。

Interface (インターフェース) 2008年 05月号 [雑誌]

Interface (インターフェース) 2008年 05月号 [雑誌]

電源やボタン、コネクタ、水晶発振子などなどは別売り*1なので、自分で別途用意して半田付けする必要があります。

電子工作のお勉強にもなるので、興味のある人は挑戦してみてください。



ARM基盤付き

Design Wave MAGAZINE (デザイン ウェーブ マガジン) 2008年 05月号 [雑誌]」には、ARM基盤が付属します。

  • マイクロコントローラSTM32(STMicroelectronics社)
  • 3軸加速度センサ
  • LDO電源
  • ミニUSBコネクタ
Design Wave MAGAZINE (デザイン ウェーブ マガジン) 2008年 05月号 [雑誌]

Design Wave MAGAZINE (デザイン ウェーブ マガジン) 2008年 05月号 [雑誌]

ARMのお勉強用基盤としては格安の部類でしょう。

内蔵のADコンバータなどもあるので、センサーとかつなげるといろんな実験ができるかも。


うれしい付録

昔は組み込み開発の勉強をしようと思っても、本格的な評価ボードは滅茶苦茶高かったし、個人では入手が困難でした。自作するにしても、初心者の人には敷居が高かったように思います。

最近は、こういった雑誌の付録や玄人志向 KUROーBOX/PROなど、容易に取り組める組み込み学習用の環境が充実してきました。

ベテラン・中堅の組み込みエンジニアにとっても、自分の得意分野以外の知識を広げるのに有効そうです。

こういった恵まれた環境を活かさないといけませんね。

2008-01-20

[]FPGAボードで学ぶ論理回路設計

「FPGAボードで学ぶ論理回路設計」って本を輪講してます。

FPGAボードで学ぶ論理回路設計

FPGAボードで学ぶ論理回路設計

この本、AlteraのFPGA(ACEX1K)が実装されたボードが付属してて、ハードウェア記述言語(VHDL)でのハードウェア論理設計が楽しめます。初心者にもわかりやすく、これからハードウェアの勉強をしてみたいという人にもおすすめです。

例えば、FPGAで動かすルーレットゲームみたいなのもサクッと作れます。

D

次は僕の担当ということでボードを動かしながらVHDLのコードとにらめっこ。

まる1日ぐらい勉強してみたけど、理解が遅く、頭の動きが鈍い。

#休日ということもありますが。。。

ハードウェア記述言語は、論理回路を抽象的に設計・記述するための言語なので、プログラミング言語などの手順記述とは違う。(書き方だけが微妙に似てる。)

電気工学科出身で論理回路やったつもりの私としては、他のソフト屋さんよりもすんなり書けると思ってたけど、実際はけっこう悩むところが多い。

どうも、ソフトに最適化された思考パターンが理解を邪魔してる感じ。


頭が固くなってきてるのかなぁ、という事実に気づかされながら勉強中です。