ソフトウェアのアーキテクチャを考えること

いざ、一からハードウェア〜ソフトウェアまでのアーキテクチャを
考えようとすると、結構悩むことが多い。
レイヤーの積み重ねをして、各コンポーネントのやることを
小さくしていくことで問題の局所化をすれば、
まぁまぁそれなりのものはできてくるんだけど、
イマイチ綺麗ではないなぁ…と思ってしまう。

具体的な解放はともかくとして、一つ確実に言えることは
既存のソフトウェアアーキテクチャをよく観察しておくこと。
一から洗練されたものは難しいので、既存のアーキテクチャに
ちょっと付け足して工夫をしたりすることで、よりよいものを作ってく。
いろんなことに共通する考え方だろうね…。

そんなこんなで、今週一週間は悩んでいましたとさ。

Posted at : 2015-02-21 08:40:34 / Category : none

気持ちの切り替え

生活の中で拍子抜けすることがあって、
気持ち的にざわついていたけど切り替えが大切だなと。
気分一新して、邁進していこう

Posted at : 2015-02-16 07:40:48 / Category : none

Linuxのリアルタイムカーネルについて

いろいろと調べてみたので、頭の整理も兼ねたまとめ。

現在のLinuxの基本はプリエンプションありだけれども、クリティカルセクションの最中などは
常に特定の処理が走るため、必ずしも一定時間で応答がかえってくるとは限らない。
この点でLinuxにはリアルタイム性がないとなっている。

当然、Linuxも組み込み用途で使いたいという需要から、リアルタイム(RT)化するパッチが出ている。
それがPREEMPTRTのパッチ。
厳密なリアルタイム性を保証しているわけではないが、リアルタイムにできるだけ近いものになっている。
(いわゆるソフトリアルタイム)
この、PREEMPT
RTのパッチが何をやっているかに関しては、以下のスライドの前半がわかりやすい。

http://events.linuxfoundation.org/sites/events/files/slides/rtmux_1.pdf

やっていることは、

  • スピンロックをMutexに変更してプリエンプション可能にする
  • クリティカルセクションの最中もプリエンプション可能にする
  • Mutexはプライオリティの継承ができるようにする(これの意図がいまいちわかっていない)
  • 割り込みはカーネルスレッドに割り当てて、プリエンプション可能にする

簡単に言うと、とにかくどこでもプリエンプション可能にして、処理をぶった斬れるようにすること。
Linuxの場合、どのプログラム(ドライバ)が何やっているかを気にしていると
キリがないので、どのプログラムが実行してようがとにかく実行権を取り上げる、って思想だと思う。

それ以上のリアルタイム性(いわゆるハードリアルタイム)が欲しい場合、
Xenomaiや別のOSを同時に動かすことなどがあげられる。

Posted at : 2015-02-11 22:02:20 / Category : none

スカイマーク株の行方

上場廃止決定後、29日、30日はストップ安でザラ場引け
SBIの場合、ストップ安(高)で終わった場合は、以下の配分方法になるとのこと。

株式のストップ配分方法は?
http://faq.sbisec.co.jp/faq_detail.html?id=10972

29日、30日ともに結構な確率だけど、出来高はあるので機会はあったみたい。
ただし、両日共に当たらず。

1月30日に東証からスカイマークの制限幅撤廃の通知。

東証 : スカイマーク(株)株式に係る呼値の制限値幅の撤廃について
http://www.tse.or.jp/news/20/150130_c.html

それにともなって、2月2日に32円で成立した。
この日の最高値が35円、終値が19円なので、成り行きで全部売っぱらうのが正解だったのかな。
(まだ、今日以降の取引次第ではあるけど…)

スカイマーク株、19円に下落 値幅制限解除で取引成立:朝日新聞デジタル
http://www.asahi.com/articles/ASH2261YKH22ULFA02X.html?iref=comtop_list_biz_n02

被害がないといえば嘘になるけど、まぁまぁ想定出来うるリスクの中で対処できたので良かった
上場廃止になった企業がどうなるか、良い勉強になりましたよ。。。

Posted at : 2015-02-03 05:50:16 / Category : none

スカイマークへの巨額の違約金

エアバスはなぜスカイマークによるA380キャンセルで巨額の違約金を請求しようとしているのか? - BusinessNewsline
http://www.businessnewsline.com/news/201501161234310000.html

そう、一度巨額な違約金を言ってしまうと、今後のビジネス展開に支障がでるんじゃ…と
思ってたんだけど、この記事見て納得。
A380のような大型機はあまり需要がなくて、その中でキャンセルしようとしてるから
エアバス側が回収に躍起になってるということなんだね。

Posted at : 2015-01-26 21:18:17 / Category : none

2014年のベストエアライン

14年ベストエアラインはキャセイ、スカイトラックス調査
http://www.travelvision.jp/news/detail.php?id=62562

あれ、全日空が全然見当たらない。。。
勝手な印象としては、JAL > ANAと思ってたけど、そうでもないのね。
国内線の航空券の価格からそういう印象が来てるのかもな…。

いくつかの航空会社で国がわからなかったものをあげてみた。
よく聞くけど、いつも「どこだろう?」と流してたんだな。。。

  • キャセイパシフィック航空
    • 香港
  • アシアナ航空
    • 韓国
  • エバー航空
    • 台湾
  • ヴァージンアトランティック航空
    • イギリス
Posted at : 2015-01-25 22:57:28 / Category : none

バランスボール

バランスボールを会社で使っています。
今まで午前・午後のどちらかだけだったんですが、
最近ようやく一日中できるようになりました。
導入してからすでに半年近くになるので、ようやくといった感じ。
一日中やった場合の効果はどうなのかな?

Posted at : 2015-01-22 07:05:30 / Category : none

コメント機能の不具合

どうやら、投稿されてもメールが来てなかった模様…。
コメントを今までに投稿した人に送るロジックはあったけど、
僕自身にくるロジックが抜けていた。。。

Posted at : 2015-01-20 20:51:01 / Category : none

料理の失敗

なんだろな、昼は包丁で千切りにしていたら、親指の関節を切ってしまい、
(そもそもちゃんとした持ち方していれば、そんなところ切るはずもないんだが…)

夜は鍋敷きの上においてあった鍋をコンロに移動して、火をつけてから
鍋敷きがくっついたままのことに気づいたり…。
(鍋敷きは焼けてしまってダメになりました…)

何か変な一日でした。

それ以外は、AR.DroneのSDKが気になって少し下調べしたり、
料理の科学的な裏付けが気になってこちらも調べてみたり、
資料を読んだりするのがほとんどだったかな。

Posted at : 2015-01-18 22:47:25 / Category : none

酒々井のアウトレット

服買うときは、ちょこちょこと買うのではなく、まとめて買ってしまうようにしている。
そのほうが、時間もかからないし、服全体の統一感とか組み合わせがやりやすいよね。

ここ1,2年はほとんど冬物を買ってなかったので、久しぶりに服を買いに行ってきました。
場所は酒々井のプレミアムアウトレット。東京駅からバスが出てて、片道1時間ぐらい。

最初はGarrettのポップコーン、酒々井は穴場のようで15分ぐらいで買えました。
その日、何度か店の前を通りかかって見てた感じ、必ず並ぶ必要はありそうだけど、
概ね15分ぐらいで買えそうな感じでした。東京駅で1時間、2時間待ちより良いよね…。

その後は服探し。いつも買う系統の店3店舗ぐらいを回って、目星をつけてささっと購入。
上下合わせて合計8点ぐらい購入。結構良いのが見つかって良かった。

Posted at : 2015-01-18 12:58:34 / Category : none

最近の昼ごはん

ちょっと前までは家に帰って昼ごはんを食べていたけど、
それも移動するのが面倒だなと思い始めて、弁当を作って会社で食べてます。

弁当っても、手軽に済ませたいので、スープとおにぎり2つにしてます。
スープはAmazonの「THERMOS 真空断熱フードコンテナー 」ってのに入れて、
二日おきぐらいにレシピを変えたものを入れてます。
このフードコンテナだとかなり保温がきくので、その点も非常に良いね。

おにぎりはまだ試行錯誤中。
ほとんど力を入れずに握ると、ふっくらした感じに仕上るところまではできてきた。
ただ、味付けとか、ふっくらさ加減とか、まだまだ改良の余地はありそうなので、
毎日試行錯誤してます。

こうやって料理作ってると、いろいろと考えて改善できるところが多いので、
やっぱり楽しいなと思うね。

Posted at : 2015-01-14 22:34:45 / Category : none

仕事始め

今日から本業に復帰
長い休みでよい気分転換になったと思う
やることもたくさんあるので、ちゃちゃっと終わらせてこう

Posted at : 2015-01-13 08:58:53 / Category : none

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

読もうと思ったきっかけは、普段書くコードが他人から見て見にくいな、と思ったこと。
決して見せられないほどひどくは書かないけど、頭にスラスラと入ってくるぐらい良いコードを書けていないので、
この機会に見なおそうと思いました。

Amazon

http://www.amazon.co.jp/dp/4873115655

内容

タイトルの通り、コードをいかにしてより良いものにするかというがメインです。
コメントや変数名の付け方などの基本的なものから、
1関数1機能にすること、をどう徹底するかなど、ちょっと踏み入ったものまであります。
普段コードを書く人からすると、すでに身についているものも多いですが、
文章として書かれると、意外と知らず知らずにやっていたことが「そうなっていたのか」と納得できることもありました。

感想

僕としては、以下の内容が良かったです。

  • コメント
    • 曖昧な代名詞は避ける。曖昧な部分を排除することで、よりコメントが読みやすくなる
  • 変数
    • 説明変数・要約変数を用意して、処理フローや関数の引数をわかりやすくする
    • 例えば、関数の引数にbooleanを渡す場合は、その意味を表す変数で代入する。isforce = true; delete(“.”, isforce); など
    • 時間の変数などは、_msなど単位をつける
    • 他の意味と間違えられないように、変数名は何度も検討をする
    • 例えば、listのsizeを求める関数がある。この関数が要素を一つ一つカウントするのであれば、countとする方が良い。直感的に計算量が違うことがわかる
  • 条件式
    • あまりにも大きな条件式ができてしまった場合、問題を一度整理してみる。複雑すぎるとバグのもととなる
  • 関数
    • 無関係の下位問題は別の関数としてくくりだす
    • 関数内の各段落(コード単位)で一つのタスクを行う(実際に本の例を見るとわかりやすい)
  • テスト
    • (行数が)最小のテストを作り、読みやすいテストにする。新しいコードを追加しときに、テストをしやすくなる

全然本の内容とは関係ないけど、本文中の以下の言葉も納得。

「エンジニアリングとは、大きな問題を小さな問題に分割して、それぞれの解決策を組み立てることに他ならない。」

普段のコードにも取り入れてみて、より良いコードを書いていきたいね。

Posted at : 2015-01-08 16:16:47 / Category : book

12日までお休み

11月、12月と仕事がたてこんでいたこともあり、
年末年始休みと合わせて、今週もお休みをもらった。
普段時間取れなくて進められていなかったこととか、
こういう機会に進められて良い感じ。
明日もまたがんばろう!

Posted at : 2015-01-06 21:45:18 / Category : none

今年もよろしくお願いします!

あけましておめでとうございます。今年もよろしくお願いします!

年末から1週間ほどかけてAndroidのアプリケーションを作っていまして、
三が日も親戚周り以外はカタカタとコーディングをしています。
その傍ら、突然始めてみたSimcityが面白くて、アイテム作っては
市場で売ってお金を手に入れたりなど、まずまずはまっています。
まぁ、iPad版だとなのか、時間の流れが遅いので、そろそろ飽きそうですが…。

そんな感じで、今年も技術的な部分、それ以外の部分合わせて、
頑張っていきたいと思いますので、よろしくお願いいたします。
5年先、10年先に役に立つものをしっかりと考えてかないとね。

Posted at : 2015-01-03 06:11:45 / Category : none

2014年もありがとうございました!

2014年もありがとうございました! みなさまお世話になりました。

今年はいろいろと動きの多い、一年だったなと思います。
特に技術的な面だと、仕事でやってきたことがようやく形になってきました。
個人では「将来的にこういうものがあると良いのでは?」という長期的な視点で、やっていく方向性が決まってきました。
まだまだ学んだり、考えたりすることは多いですが、実際に形にできるようにがんばっていきます!

来年は(仕事も個人も)基本的な部分をおさえつつ、5年・10年先の未来がちゃんと描けるような基盤を作っていきます。
仕事はファームウェアやドライバの開発が一気に来るので、実装を頑張るというよりは、
道筋をしっかりと考えて、無理のない期間で終わらせられるようにやっていきたいです。
あと、個人的なところでも大きな節目となるので、そちらも進めていかないとな。

来年もがんばっていきます!

Posted at : 2014-12-31 13:18:29 / Category : none

Rails 4.2.0で外部からHTTP接続できず戸惑った

調べてみると、こういうことみたいです。

http://www.techscore.com/blog/2014/09/12/rails4-2beta1%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E6%9C%80%E5%88%9D%E3%81%AB%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8/

-bオプションで「0.0.0.0」を指定する。
いつかからかデフォルトが127.0.0.1のループバックアドレスになったみたい。
コンテナ使うことが多くなってきて、直接接続することが少なくなったからかな?

Posted at : 2014-12-31 09:09:25 / Category : none

愛知県の味がおかしいと言われる意味がわかった気がする

昨日から実家に帰ってきました

久しぶりに実家で外食してみて、何か味が変だなぁと
朝のホテルでのブッフェと言い、昼に食べた豊橋カレーうどんと言い

「なんだろ?」とよくよく考えてみると、どれも塩分が多い
何となくだけど、その辺りの塩気に関する調味料の変なのかなぁ…と思いました
それと同時に、「あ、東京の人間になったんだな」とも(笑)

Posted at : 2014-12-30 08:09:35 / Category : none

今日で最終営業日

もう最終営業日。。。早いなぁ
時間がすぎるのが惜しい気もするけど、
充実した1年だったと思うので、あまり後悔はないかな

今回の仕事休み、いろいろとありまして17連休となりました
ということで、仕事のことは一旦忘れて、やりたいことをいろいろとやろうかなと

Posted at : 2014-12-26 06:30:51 / Category : none

Cognitive Computingの紹介(システム系論文紹介 Advent Calendar 2014)

はじめまして(の方が多いと思うので…)yasuharuと申します。
普段は組み込み関係、特にファームウェアの開発やLSI検証のお仕事をしています。よろしくお願いします。

半年ぐらい前の記事になりますが、こんな記事が発表されました。

IBM、新型「SyNAPSE」チップを発表--認知コンピューティングの可能性を広げる - CNET Japan
http://japan.cnet.com/news/service/35052072/

記事を見た時「脳型コンピュータチップってなんだろう?」という感じでした。
最初はちょっと目新しいだけなのかな…と思っていましたが、読み進めていくとこれはいけるんじゃないか?と思いました。
特にLSIの開発に関わっていると、LSIの微細化の問題などにより性能の頭打ちは顕著に感じられます。
これなら近い将来もさらに計算機の性能があげられそうです。

ということで、今回は上記の記事の全容を見るべく、Congnitive Computingがどういうアイディアを
元にしているか・どういう世界を描こうとしているか、論文とともに紹介をしていきたいと思います。

研究の概要

IBMのCognitive Computingに関する研究は、最初にサルの脳の情報伝達の考察から始まり、Neurocynaptic Chipの設計、
スパコンを使った性能シミュレーション、ASICでの試作、アプリケーションへの展開と着実に進化を遂げています。
これらの研究は2011年頃から発表されており、IBMのresearcherであるDharmendra S. Modha氏が中心となって進めているようです。

今回はこれらのうち、サルの脳の情報伝達の考察、ASICでの試作の部分を取り上げて行きます。

サルの脳の仕組みを追って

まずはNeurosynaptic Chipの目標とするアーキテクチャを見ていきます。
発想の原点となるのは、サルの脳の仕組みです。

Network architecture of the long-distance pathways in the macaque brain
http://www.pnas.org/content/107/30/13485.full

Macaqueは「東南アジア、日本、北アフリカに分布するオナガザル科マカク属(Macaca)のサルの総称 」です。
(引用元:http://eow.alc.co.jp/search?q=macaque
CoCoMacというneurosynaptic database(脳の部位ごとの情報伝達などを扱っているデータベース)を元として解析・考察したものがこの論文です。

ざっくり言うと、この論文から以下の知見が得られたようです。

  • 前頭葉が脳のネットワークの中心となること
  • 各部位はある特定のコアを中心としてサブネットワークを構成する。そのコアを通して、全体のネットワークを構成する

このアイディアを元として、Neurosynaptic Chipの設計がされているようです。重要なのは、

  • 特定の部位に処理が集中すること
  • 複数のコアからなるサブネットワークが構成される。それらは階層構造を持つ

という2点です。

ちなみに、この論文、普段読むようなシステム系論文とは異なり、脳神経系の単語がバンバン出てきます。読むのが大変でした…。

ASIC化してみる

ASIC = Application Specific Integrated Circuit、つまり特定用途に特化したLSIです。
実際にLSIを作ってみましょうという話ですね。
一体どれだけのお金が…と言っても、自社のファブだから関係ないのかもしれません。

前置きはさておき、このASIC化について述べられた論文が以下のものです。

A 45nm CMOS Neuromorphic Chip with a Scalable Architecture for Learning in Networks of Spiking Neurons
http://www.modha.org/papers/013.CICC2.pdf

論文の前置きとして、一般的な脳の情報伝達はどうなってるのか?というのが少し書かれています。
これが肝になるアイディアなので、ちゃんと書いておきます。
(ただし、図はWikipedaから持ってきたもの、文章は論文からのものなので、図と文が一致しない部分があります。すみません、手を抜きました…。)

  • 図は一つのニューロンを表す
  • スパイク(spike、図中には記載なし)は、あるニューロンの軸索(axon)から発生され、他のニューロンの樹状突起(dendrite)に作用する(図は単一のニューロンですが、左右にニューロンがつながっていると思ってください)
  • 軸索から樹状突起の接合部分をシナプス(synapse)と言い、スパイクを伝達するかどうかを決定する
  • 各ニューロンは膜電位(membrane potential)膜電位を持ち、ある一定のスレッショルドを超えるとスパイクを発生させる

neuron
引用元:Created by Quasar (talk), http://ja.wikipedia.org/wiki/%E7%A5%9E%E7%B5%8C%E7%B4%B0%E8%83%9E#mediaviewer/File:Neuron_Hand-tuned.svg

このニューロンの構造を使って、Neurosynaptic Chipが作られました。このチップの特徴は以下のとおりです。

  • 45nmプロセス
  • 256のニューロン
  • 64kbitのシナプス

この回路は次のブロック図で表されます。
先の図で言うところのシナプスに相当するのが256x256のSynapse Array、これを中心として、
軸索からシナプスを通って樹状突起に作用する一連の流れを表します。

block
引用元:http://www.modha.org/papers/013.CICC2.pdf

外部からのスパイクを受けて、学習を行い、出力をします。特徴として、同じ構成のチップをたくさんつなげることで、スケールアウトが簡単にできます。

細かいニューロンの動きは今回は説明を省略させていただくとして、一番興味をもった部分は、Synapse ArrayのSRAMの構造です。
一般的なSRAMのトランジスタの構成は以下のとおりです。

sram
引用元:http://ja.wikipedia.org/wiki/Static_Random_Access_Memory#mediaviewer/File:SRAM_Cell_(6_Transistors).svg

しかし、今回の研究で使われているSRAMは以下の構造になります。
(図を読み解くヒントとして、下の図では値の記憶部分をインバータで表現していますが、上の図はトランジスタで表現しており、
これらは等価なものです。その点だけ気をつければ、違いは大きく一箇所のみです)

sram2
引用元:http://www.modha.org/papers/013.CICC2.pdf

要はrowとcolumn両方ともからread/write可能なSRAMになっています。
こうすることで、軸索(axon)に対応するrowの読み書き、樹状突起(dendrite)に対応するcolumnの読み書きを高速に行うことができます。

まとめ

ざっくりとした話で、サルの脳から始まるアイディアとASIC化について書いてみました。
まだまだアプリケーションレイヤーの話などもありますが、一つの記事には長すぎるのでこの辺りでいったん終わりとします。

最後にまとめようと思ったのですが、実はこれだけの論文を読んだだけだと「サルの脳」と「ASIC化」の関連性がさっぱりとわかりませんでした…。
サルの脳の話はなくても…?という感じがしますが、もう少し読み進めてみないとわかりません。

ということで、ちゃんと物語としてまとまっているのか? あるいは、試行錯誤の中で(サルの脳の話は)うやむやになっているのか、
この続きは(反応があれば)リアルな場で発表したいと思います。

それではみなさん、良いお年を!

Posted at : 2014-12-19 08:18:47 / Category : none