読者です 読者をやめる 読者になる 読者になる

帽子コレクション

個人的な事

こんにちは、最近は統計の勉強やプログラミングコンテストとかやってて超つまらん生き方です。

息抜きもかねて、今回は僕の持っている帽子を紹介していきたいと思います。かなりあやふやですがgetした時系列順で紹介します。(僕は普段難波の無てとこか三ノ宮の高架下のセレクト帽子屋さん?で買ってます)

f:id:castlejou:20160131150046j:plain

大学の1、2回生の秋冬ころはずっとかぶってたワインレッドのキャスケット。完璧ノーブランド(DETAILとか書いてます)。約4000円、今でもお気に入りbutかぶり飽きました。

f:id:castlejou:20160131150302j:plain

二回生の夏ごろにかった灰色のノーマルな帽子。ブランドはKarmaって書いてますw僕の普段着が灰色が多くてこれ被ると配管工みたいになってあんまり被らなかったです。3000円くらい。あんまり似合わんってバイト先の人に言われたしなぁ...

f:id:castlejou:20160131150138j:plain

薄茶色のゆったりとしたキャスケット。2回生冬のレギュラーです。帽子の山となってて被る部分(クラウンと言う)がぶかぶかしてて小顔効果が発揮されます。grace hatsてとこらしい。4000~5000円はしました。

f:id:castlejou:20160131145707j:plain

2回生の冬に購入したキャスケット。唯一のブランド物、UNITED ARROWSで9000円位はしました。高すぎてあんまり被れていないけど気には入っています。

f:id:castlejou:20160131150311j:plain

3回生の春ころ購入。キャスケットでないもの2つ目。僕がこれをかぶるのは生活圏に春を感じ始めたころです。たぶん4000円。ヒデトレーディングてとこらしい(笑)。

f:id:castlejou:20160131150221j:plain

2回か3回の秋か夏に購入。今学年のことすら覚えてないです泣。暑いときかぶれる涼しいキャスケットで、夏にも負けず着飾りたくなったらこれをかぶります。4000円位。こいつには思い出が何もないです。グレースてとこです。

f:id:castlejou:20160131150351j:plain

f:id:castlejou:20160131150406j:plain

3回生の冬に買った物です。ツバ付きニット帽で、リバーシブルというかなり汎用性(?)が高い!今はずっとこれです。「似たようなん持ってなかった?」「実はこれリバーシブルで...」と自慢するやり取りがお気に入りですw。ツバが柔らかいので後ろ向きにかぶることが出来ます。5000円程はした。タグがないのでどこのか不明です。

 

以上が僕の帽子ライブラリーでした。初めて買った帽子は探したけど無かったです。帽子には髪のセットの短縮、温かい、天パが隠せる、待ち合わせ時に気付いてもらいやすい、などなど沢山のメリットがあります。高い服を買う金はないけど着飾りたい時は帽子をかぶることでオサレポイントが上昇するので、みなさんお気に入りの帽子を探してみてはどうでしょうか。

LeapMotionで簡単な動的生体認証してみた(JavaのOpenGL(JOGL)で)

leap motion

今回はJavaOpenGL(JOGL)でLeapMotion使って簡単な生体認証アプリを作ってみました。のでやってみたいと思います。環境はwindows8.1、Eclipseです。

まずEclipseにライブラリを設定します。

JavaOpenGLライブラリは以下のサイトを見て下さい。

JOGL,JOCLのEclipse環境を整える - プログラムdeタマゴ

そしてLeapMotionはこちらのサイトです。ビルドパス通してサンプルを実行してくれてます。

LeapMotionのサンプルプログラムで遊んだ - あんまり見ないでください

あと僕の作ったプログラムはJAMAを使うのでこちらも一応。

Java行列ライブラリ(JAMA)を使ってみた | Always Look at the Bright Side of Life

Javaプロジェクトを新規作成して、LeapGLというクラスを作ってください。そして上記のライブラリのビルドパスを通すとこんな感じです。(C:にjavapathファイルを作ってそこにまとめてます)

f:id:castlejou:20160119013340j:plain

こちらが作ってみたコードです。適当にコピペしてください。

github.com

LeapGLを実行してLeapMotionに手をかざすとこんな感じで動くと思います。

f:id:castlejou:20160119011016j:plain

LeapMotionから以下の関節の座標をマイフレーム取得してプロットしています。このデータを色々処理すると遊びがいがありそうですね。

f:id:castlejou:20160119013053p:plain

てことで生体認証()なシステムを作ってみました。それがLeapKeyてプログラムです。汚いコードなのであまり見ないでください。実行の様子と状態遷移図です。

f:id:castlejou:20160119013008j:plain

f:id:castlejou:20160119013137j:plain

 実行してる様子を動画にしてみました。

youtu.be

 

ちなみにLeapMotionのUSBケーブルってUSB3.0 micro Bて種類で、これはAndroidの充電ケーブルの規格USB2.0 micro Bでも認識するのです。持ち運ぶとき純正のケーブルいらなくて済むかもですね。動作は保証しませんけどw

f:id:castlejou:20160119020058j:plain

 すみませんこの記事作るのしんどくて説明不足だと思いますが、もし詳しく使い方を見たければGithubにhowtouse.pdf上げてるので読んでみてください。

 

コンパイラ型、インタプリタ型、中間コード型の違い

プログラミング

プログラミング言語の分類

プログラムを実行するにはプログラムを機械語に変換する必要がある。その変換して実行する形式にはインタプリタ型とコンパイラ型と中間コード型の3種類がある。

  1. コンパイラ型 プログラム全体を一括して機械語に変換し、単独のソフトにする。○○(C言語など)コンパイラといえば○○言語で書かれたプログラムを実行形式のプログラムに変換するソフトウェアの事(→☆)。デバッガと呼ばれるソフトで動作を時々止めながらバグを取り除く(デバッグ)必要がある。
  2. インタプリタ型 インタプリタというソフトウェアがプログラムを読み込み一行ずつ直ちに機械語の命令にして実行してくれる。なのでプログラムの一部であっても実行することが出来る。ちなみにインタプリタ型のプログラミング言語は実行や記述を比較的簡単に行うことが出来るのでスクリプト言語とも呼ばれることが多くある。但しスクリプト言語の定義はややこしいので深入りしない。
  3. 中間コード型 インタプリタ型とコンパイラ型との中間。まずプログラムはコンパイルされます。しかしここで一挙に機械語に変換はせず、中間コードという非高級(人が読めない)で非機械語の(低級?)コードに変換されファイルに保存される。このファイルを仮想機械(バーチャルマシン)というインタプリタインタプリタ型のように実行してくれる。(中間コードと連呼したがJavaではこれをバイトコードと呼ぶ)

(→☆)の部分(静的/動的リンカ)

厳密にいうとコンパイラ機械語の命令の束にするまでのソフトウェアで、その結果をファイルにしても必ずしもアプリケーションになるとは限らない。コンパイル時にプログラムの中では、自分の中だけでは内容がわからない(未定義)関数と分かる(定義済み)関数とに分け継ぎ目みたいな記号を書き込む、という作業を行っています。未定義関数ってのはライブラリの関数ことです。そのあとリンカというソフトウェアが未定義部分をライブラリのファイルから必要なところを持ってきて継ぎ目を結びつけます。リンカには静的リンカ動的リンカとの2種類があり、静的リンカは上で述べた作業を普通に行い、動的リンカでは継ぎ目状態でとりあえず実行ファイルを書き出し、必要になったとき(実行されたとき)に継ぎ目を調べて結びつける。動的で参照先となる機能がまとめられたファイルをDLL(Dynamic Linc Library)と呼ぶ。実行ファイルごとにライブラリをリンクしないことによって同じ機能を何回もリンクする必要がなくなる。

 

http://cdn38.atwikiimg.com/hiropknot/?plugin=ref&serial=6

hiropknot @ ウィキ - 共有ライブラリの管理

 

コンパイラ言語とインタープリタ言語

コンパイラとインタプリタ

http://www.geocities.jp/naosacra/mops/forbeginner/2.html

色々参照させてもらい、書きました。間違ってるところがあったら教えてください。

量子アルゴリズム、ドイチのアルゴリズム

量子アルゴリズム

この前の続きです。

今回は制御の様子とアルゴリズム的な話です。
ドイチ・ジョザアルゴリズム(Deutsch-Jozsa algorithm)を1ビットで考えるドイチュのアルゴリズムです。入力 x = {0, 1} に対する関数 f(x) の出力が x に依存するか依存しないかを、関数への問い合わせ回数一回で確かめることが出来ます。
f:id:castlejou:20151113231436j:plain
簡単に言うと、この f(x) の表の4タイプのうち、青いタイプか赤いタイプかが f(x)を一度確かめるだけで分かりますよーってこと。


前回の話では磁場をかけることでスピンを制御することが出来るとこまで行きました。その磁場のかけ方(時間や強度)を調整することで、量子コンピュータで必要な演算(例えば状態|0>を重ね合わせ状態|0>+|1>に変換する演算とか)を実行できます。そういった演算子と処理の流れを電気回路に置き換えて表現できます。

先にドイチのアルゴリズム全体の量子ゲートを見てみましょう。左側が入力で右側が出力です。

f:id:castlejou:20151113232813j:plain

図のHの箱で表されてるゲートはアダマール変換という1キュービット用のゲートです。そもそものスピンの状態がベクトルで表されているため、演算子は行列表記です。

{ H = \left( \begin{array}{cc} 1 & 1 \\ 1 & -1 \end{array} \right) }

例えば状態|0>や|1>をアダマール変換すると

{ H \left | 0 \right \rangle = \dfrac{\left | 0 \right \rangle + \left | 1 \right \rangle}{\sqrt{2}}, 
H \left | 1 \right \rangle = \dfrac{\left | 0 \right \rangle - \left | 1 \right \rangle}{\sqrt{2}} }

となり、重ね合わせ状態を作ることが出来、入力状態は

{ \left | \phi \right \rangle = \dfrac{1}{2}(\left | 0 \right \rangle \left | 0 \right \rangle - \left | 0 \right \rangle \left | 1 \right \rangle + \left | 1 \right \rangle \left | 0 \right \rangle - \left | 1 \right \rangle \left | 1 \right \rangle ) }
となります。


次はUfっていう箱ですが少しややこしいです。まず制御NOTゲートという2キュービット以上用のゲートを説明します。これは第一キュービットが0なら第二キュービットはそのまま、第一キュービットが1なら第二キュービットは反転させます。(のでmod計算記号⊕を使って|x>|y> → |x>|y⊕x>と書けます)

制御NOTゲートは以下の演算子で表されます。

{ CNOT = \left( \begin{array}{cccc} 
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 
 \end{array} \right) 
}

Ufの話に戻ります。例えば状態|00>(|0>|0>のこと)で f(x) がタイプ(1)の時、|0>|0> → |0>|0⊕f(0)> = |0>|0⊕1> = |0>|1>という計算をUfが行っています。|00>から|11>まで各入力状態に対して同様にUfを計算してしまいます。


そしてこの出力を第一、第二ごとのキュービットで再度アダマール変換すると第一キュービットが f(x) が青いタイプの時に|0>、 f(x) が赤いタイプの時に|1>、となります。詳しいとこは自分で解いてみてくださいw因数分解は必須です。

こうして、問い合わせが一回で分かるという目的が果たせます。

でもこのままでは連続的に時間発展出来ないので難しいですが時間発展演算子を考えていきます。(すみません書くのめんどくさくて画像です)
f:id:castlejou:20160218155417j:plainf:id:castlejou:20160218155633j:plainf:id:castlejou:20160218155630j:plain

これで以上です。最後にシミュレーションしてみたので図を載せておきます。
左:初期状態
右:アダマール変換後
f:id:castlejou:20151115024745j:plain


制御NOTゲート後の各状態の係数。
f:id:castlejou:20151115024300j:plain

観測後のキュービット
f:id:castlejou:20151115024408j:plain

みたいな感じで量子コンピュータの基礎の基礎、ドイチのアルゴリズムの説明でした。
読んでくれてありがとうございました。
もう少し綺麗にかきたい。。。

量子ビットの話

量子アルゴリズム

最近量子コンピュータ興味がわいて色々調べてみました。

今までのコンピュータではビットは電圧が一定以上、以下で0と1の情報を表現していましたが、量子コンピュータでのビットは量子力学で言う2つの準位のことで、|0>と|1>の情報を表現します。いきなり|>こんなん出てきましたが、これは量子力学でベクトルを表すケットベクトルと言います。量子コンピュータで使うビットの事を量子ビットとかキュービットと呼びます。

2準位てのは異なる二つのエネルギー状態の事で、例えば原子核のスピンの上下や、光子フォトンの2つの偏向状態、超電導でのジョセフソン接合などなど。この辺はいろんな研究が行われています。

これらの準位をうまく制御すると、0と1両方の状態を同時に半分ずつ取ったりする重ね合わせ状態という状態になることができます。

この重ね合わせというのは複素数で重ね合わせられていています。

キュービットは

{ \left | 0 \right \rangle = \left(\begin{array}{c} 1 \\ 0  \end{array} \right) , \left | 1 \right \rangle = \left(\begin{array}{c} 0 \\ 1  \end{array} \right)
    , \left | \phi \right \rangle = \dfrac{1}{\sqrt{2}} \left(\begin{array}{c} 1 \\ 1  \end{array} \right)
    = \dfrac{\left | 0 \right \rangle + \left | 1 \right \rangle}{\sqrt{2}}
    , \left | \phi \right \rangle = \left(\begin{array}{c} a+bi \\ c+di  \end{array} \right)
    
 }

と書け、一般項は

{ \left | \phi \right \rangle = e ^ {i \gamma } (cos \dfrac { \theta }{2} \left | 0\right \rangle + e ^ { i \phi } sin \dfrac { \theta }{2} \left |1 \right \rangle) }

と書ける。1キュービットは基本Bloch球で描くことができる。

ファイル:Bloch sphere.svg

 

ブロッホ球 - Wikipedia

キュービットてのはこの球面上をぐるぐる移動していて、重ね合わせなどを表現してるみたいすね。

さて、量子コンピュータの凄さの理由がちらついてきました。

1キュービットで0と1の重ね合わせを取れるなら2キュービットでは00、01、10,11の4通りの重ね合わせを、nキュービットでは2^n通りの重ね合わせを同時に取ることが出来ます。同時にです。これが超並列計算へとつながるのですね。

 

そして、このキュービットをどうやって制御するかが難しいです。ここでは原子核のスピンでの量子ビットの説明をします。

そもそもスピンてものはずっと歳差運動というコマような運動をしてます。放っておくとずっと回り続けるコマみたいなものです。NMR(Nuclear Magnetic Resonance、核磁気共鳴)という相互作用を利用して制御します。NMR装置で外部磁場かけているのですが、直観的には横磁場はコマを倒すような力を、縦磁場はコマを起こすような力をかけてると考えたらわかりやすいかもです。

そうして外部磁場をうまいこと制御して核スピンの上下を制御してるらしいです。

f:id:castlejou:20151113211559j:plain

 

ここから一気に難しくなるかもです。

そして状態(スピンの上下)がどう動いてゆくかを時間tの関数で表し、シミュレーションします。量子力学なのでモデル(時間依存のハミルトニアンから時間発展演算子)を作って考えていきます。

2準位原子系とレーザー光とで時間発展する系を解いてくれてる本があったからそれを使いました。(ここはNMRじゃなくてフォノン偏向の話ですのでスピンとは違うかな?)

量子アルゴリズム | 中山 茂 | 本 | Amazon.co.jp

この本は非常に分かりやすかったです。

 

2キュービット以上のときはスピン相互作用も考える必要があるため自分じゃ分からなかったです。ので学校の先生に教えていただきました。イジングモデルという格子点に配置された粒子に対しスピン相互作用と外部磁場からの影響とを考えたモデルです。粒子が2つと考えてハミルトニアンを出し、時間発展演算子という行列を用いて時間発展させました。

 

難しいですね。量子力学は学部の講義で摂動論あたりまでやったんですが、量子アルゴリズムイジングモデル→時間発展演算子の流れは未知の領域すぎます。

 

量子ビットの物理的な説明はこれで以上です。

次はアルゴリズムと実際の制御の話をします。

研究室の志望動機

個人的な事

お久しぶりです。月に100件程度vvvvの記事へのアクセスがありつつ、一年全く更新していませんでした。最近暇なんで再開したいと思います。

先月、研究室に早期配属されました。人工知能とか神経回路の研究を専門としています。面接で人工知能系を志望した経緯を聞かれたんですが話がごちゃごちゃして全然うまく答えれなかったです泣

だからその弁解をブログでしようと思います!w

 

少し回りくどいかもな経緯です、きっかけは学校でハードウェア記述言語verilog HDLの授業あったことです。

これは論理合成シミュレータに簡単なプログラミング機能を付けた程度のかなり機械語寄りの言語です、普段はcの僕にとってかなり不自由で手間を取らせる言語でした。しかしこいつはfpgaというプロセッサー、つまりハードウェアで実装できます。回路を直接記述できるので処理は超早いです。

授業は自由課題だったので興味があったニューラルネットという脳の情報処理を模した機械学習を実装してみました。うまく動かなかったですが。そもそもverilogで二進数の浮動小数点の加減算器、乗算器、除算器、テイラー展開を書いてからニューラルネットを作ったのですが、除算器あたりのバグがあったのかな、気力が尽きてしまいデバックが間に合いませんでしたね。期間的に設計ミスだったと思います。

そんな感じでニューラルネットの勉強を進めてると、

Amazon.co.jp: 人工知能概論 第2版 ―コンピュータ知能からWeb知能まで: 荒屋 真二: 本

この教科書に出会い、webインテリジェンスの項を読みました。

webインテリジェンスとは「賢いWeb(4W:World Wide Wisdom Web)の実現を目指したWeb情報システムの知能化に関した研究分野である。」らしいです。

つまりWebをもっと賢くしよう、インターネットの情報を意味づけし更にうまく活用しよう!って感じかなーと勝手に解釈してます。すごく楽しそうな未来がイメージされて惹きつけられました。

そして僕がこの分野に貢献できるとしたら人工知能系(特に神経回路シミュレーションとか?)の研究が一番かなぁと思い志望しました。

あと何より、脳の情報処理をコンピュータでに書き換えるって、アイディアの乏しい僕には魅力的に思えたし(安易w)、生物の情報処理を機械に落とし込むのって人と機械のインターフェースをさらに薄くするような気がして非常にかっこいいw。

みたいな感じで研究室の志望動機という雑記でした。

vvvv leap motion 入門

vvvv leap motion

こんにちは、久々の更新です。

友人にLeap Motionっていう面白いガジェットを借りれて今回はそれで遊んでみた感想です。(今回ほぼ解説はほぼしません!ww

Leap Motionてのは早い話、キネクトの手指バージョンです。

本体で赤外線を放出するLEDと読み取るカメラがついていて手をかざすと、非常に精密に手の動きを読み取ってくれます。

 

では、はい。普通につなげてvvvvを開きましょう。

見た感じあらかじめLeap Motion用に何個かノードが用意されています。

f:id:castlejou:20141004235555j:plain

 

LeapノードのHelpを見ましょう。

f:id:castlejou:20141005000026j:plain

少し視点を変えましょうか。

3Dの記事でも書きますがRendererにつながっているCamera(Transform Softimage)の操作は

Oキー+ドラッグ:見てる方向

Pキー+ドラッグ:拡大縮小

Zキー+ドラッグ:見る座標

で大丈夫です。

適当に見やすくしてください。(これが意外と難しい)

f:id:castlejou:20141005000742j:plain

LeapのOUTPUTの値を見ていきましょう。

f:id:castlejou:20141005001733j:plain

Hand Position 手全体ひらの位置(青矢印の視点の位置)

Hand DirectionXYZ 手全体の向きのベクトル(指方向の青矢印)

Hand NormalXYZ 手の平の向きのベクトル(Hand Directionの法線)

Finger Position それぞれの指先、赤青緑の点の位置)

Finger DirectionXYZ 指の向きのベクトル

 

Hand Sliceは何なんでしょう、少しわからないです。あとはなんだかジェスチャーなんかも認識してくれるそうです(楽しそうw)。

 

この情報を与えられた瞬間思いました。

「手から光をだしたくてたまらない!!!」

 

そんなこんなで初めにLeap Motionでパーティクルを操ってみました。

f:id:castlejou:20141005030338j:plain

f:id:castlejou:20141005030629j:plain

おもしろい!

指からレーザーが出てくるステキなエフェクトが速攻完成しました。vvvvはLeap Motionで遊ぶには非常に適していますね、返すまでもう少し遊びたいです。

それではこのへんで。