Edifying Soil 2019-01-07T00:37:32+09:00 rinor Hatena::Blog hatenablog://blog/12921228815729372423 WSL で ssh をするために hatenablog://entry/10257846132699321173 2019-01-07T00:37:32+09:00 2019-01-07T01:01:08+09:00 git で ssh を利用する場合,~/.ssh 以下のファイルのパーミッションを適切に設定する必要があります. しかしながら,WSL で,ホームディレクトリを windows 側の "/mnt/c/" 以下にしていると,Windows のファイルシステムには,Linux のメタデータが存在しないため,パーミッションの設定が行えません. そこで,まずメタデータの有効化を行う必要があります. メタデータの有効化 WSL の設定ファイルである /etc/wsl.conf に以下のように追記します. ファイルが存在しない場合は新しく作成します. [automount] options = "meta… <p>git で <a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a> を利用する場合,~/.<a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a> 以下のファイルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>を適切に設定する必要があります.</p> <p>しかしながら,WSL で,ホーム<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを <a class="keyword" href="http://d.hatena.ne.jp/keyword/windows">windows</a> 側の "/mnt/c/" 以下にしていると,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%A1%A5%A4%A5%EB%A5%B7%A5%B9%A5%C6%A5%E0">ファイルシステム</a>には,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF">メタデータ</a>が存在しないため,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の設定が行えません.</p> <p>そこで,まず<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF">メタデータ</a>の有効化を行う必要があります.</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF">メタデータ</a>の有効化</h2> <p>WSL の設定ファイルである <code>/etc/wsl.conf</code> に以下のように追記します.<br/> ファイルが存在しない場合は新しく作成します.</p> <pre class="code" data-lang="" data-unlink>[automount] options = &#34;metadata&#34;</pre> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の設定</h2> <pre class="code" data-lang="" data-unlink>mkdir ~/.ssh chmod 700 ~/.ssh</pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%EB%CC%A9%B8%B0">秘密鍵</a>,公開鍵,config 等を作成後</p> <pre class="code" data-lang="" data-unlink>chmod 600 ~/.ssh/*</pre> <p>以上です.</p> rinor Windows ショートカットメモ hatenablog://entry/6653586347147971652 2015-12-09T16:49:05+09:00 2015-12-09T16:49:05+09:00 稀につかうショートカットのメモ. ウィンドウの移動 Shift + Windowsキー + 矢印キー プログラムの終了 Alt + F4 <p>稀につかうショートカットのメモ.</p> <h3>ウィンドウの移動</h3> <p>Shift + <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows%A5%AD%A1%BC">Windowsキー</a> + 矢印キー</p> <h3>プログラムの終了</h3> <p>Alt + F4</p> rinor visual studio : dll, def から lib を作成 hatenablog://entry/8454420450103867772 2015-07-30T03:32:06+09:00 2015-07-30T03:32:06+09:00 Windows において C++ で dll を使用したプログラムを作成する時,その dll と対となる lib ファイルを明示的に読み込ませる必要がありますよね. #pragma comment(lib, "sqlite3.lib") こんな感じに. だがしかし,ライブラリによっては,dll しか配布されていないものもあります. 上記の sqlite3 は,データベースの一種なのですが,これもその一つになります. ほかにも,fftw とかは,dll しか配布されていなかったような気がします. ただ,その場合は,def ファイルなるものが配布されている場合が多く,def ファイルと dll フ… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> において <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> で dll を使用したプログラムを作成する時,その dll と対となる lib ファイルを明示的に読み込ませる必要がありますよね.</p> <pre class="code lang-c" data-lang="c" data-unlink><span class="synPreProc">#pragma comment(lib, </span><span class="synConstant">&quot;sqlite3.lib&quot;</span><span class="synPreProc">)</span> </pre> <p>こんな感じに.<br/> だがしかし,ライブラリによっては,dll しか配布されていないものもあります.<br/> 上記の sqlite3 は,データベースの一種なのですが,これもその一つになります.<br/> ほかにも,fftw とかは,dll しか配布されていなかったような気がします.</p> <p>ただ,その場合は,def ファイルなるものが配布されている場合が多く,def ファイルと dll ファイルとで,lib ファイルを生成することが可能です.</p> <h4>lib ファイルの生成</h4> <p>lib.exe というプログラムを使用し,それを行うのですが,このlib.exe は,通常の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>には含まていません.<br/> そこで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/visual%20studio">visual studio</a> に含まれる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を使用します. スタートメニューから,「すべてのプログラム」を選択し,インストールされている<a class="keyword" href="http://d.hatena.ne.jp/keyword/visual%20studio">visual studio</a> (フォルダのアイコンになっているもの)を選択します.<br/> すると,<a class="keyword" href="http://d.hatena.ne.jp/keyword/visual%20studio">visual studio</a> tools というフォルダがありますので,それを開き,その中にある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を使用します.<br/> その<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を開き,dll と def ファイルがあるフォルダに移動後,下記のコマンドを実行すると lib ファイルが生成されます.</p> <pre class="code" data-lang="" data-unlink>lib /def:sqlite3.def</pre> <p>sqlite3.def のところは,適宜読み替えて下さい.</p> rinor python : UDP非同期受信 hatenablog://entry/8454420450103843147 2015-07-29T23:46:00+09:00 2015-07-29T23:47:27+09:00 python で UDP の非同期受信したいことってありませんか? まぁ,そんなないですよね・・・ しかし,何かしらのデバイスからUDPを受け取って,それをsocket.io とかでサーバーに送りたい時なんかは,python でサクッと書くのが楽なんじゃないかなぁと. というわけで,python で UDP の非同期受信のコードをメモしておきます. ネットを探しても,あまりサンプル見つからなかったけども,コード数的には少なめです. import asyncore import socket class UdpServer(asyncore.dispatcher): def __init__(s… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> で <a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a> の非同期受信したいことってありませんか?<br/> まぁ,そんなないですよね・・・<br/> しかし,何かしらのデバイスから<a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a>を受け取って,それをsocket.io とかでサーバーに送りたい時なんかは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> でサクッと書くのが楽なんじゃないかなぁと.<br/> というわけで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> で <a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a> の非同期受信のコードをメモしておきます.<br/> ネットを探しても,あまりサンプル見つからなかったけども,コード数的には少なめです.</p> <pre class="code lang-python" data-lang="python" data-unlink><span class="synPreProc">import</span> asyncore <span class="synPreProc">import</span> socket <span class="synStatement">class</span> <span class="synIdentifier">UdpServer</span>(asyncore.dispatcher): <span class="synStatement">def</span> <span class="synIdentifier">__init__</span>(self): asyncore.dispatcher.__init__(self) <span class="synComment"># 5000 番ポートにバインド</span> self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind((<span class="synConstant">''</span>, <span class="synConstant">5000</span>)) <span class="synStatement">return</span> <span class="synComment"># ポートにバインドされた時</span> <span class="synStatement">def</span> <span class="synIdentifier">handle_connect</span>(self): <span class="synIdentifier">print</span> <span class="synConstant">&quot;Udp server Started...&quot;</span> <span class="synStatement">return</span> <span class="synComment"># データが飛んできた時</span> <span class="synStatement">def</span> <span class="synIdentifier">handle_read</span>(self): data, addr = self.recvfrom(<span class="synConstant">2048</span>) <span class="synComment"># 特定のデータが飛んできたら終了</span> <span class="synStatement">if</span> data == 終了条件 <span class="synStatement">raise</span> asyncore.ExitNow(<span class="synConstant">'Server is quitting!'</span>) <span class="synStatement">return</span> <span class="synStatement">def</span> <span class="synIdentifier">handle_write</span>(self): <span class="synStatement">pass</span> <span class="synComment"># 例外をキャッチする.サーバー終了後に,何かしらの処理をしたい用</span> <span class="synStatement">def</span> <span class="synIdentifier">run</span>(): instance = UdpServer() <span class="synStatement">try</span>: asyncore.loop() <span class="synComment"># 非同期ループを開始</span> <span class="synStatement">except</span> asyncore.ExitNow, e: <span class="synIdentifier">print</span> e <span class="synStatement">if</span> __name__ == <span class="synConstant">'__main__'</span>: run() </pre> rinor uGui と UniRx を組み合わせて,ドラッグできるパネルや長押し(押してる間特定の動作をする)ボタンを作成 hatenablog://entry/8454420450101663939 2015-07-16T02:21:06+09:00 2015-07-16T02:21:06+09:00 Unity の uGui と UniRx を組み合わせてドラッグや長押しを実装してみたので,メモしておきます. ここで言う長押しボタンは,数秒押したら反応するボタンではなく,押している間,特定の動作をするボタンのことです. なんていえばいいのか分からないので,便宜上,長押しボタンといいます. uGui パネルのドラッグ 下記のスクリプトを,uGui のパネルにアタッチしてやると,そのパネルをドラッグで移動させることができます. using System; using UniRx; using UniRx.Triggers; using UnityEngine; using UnityEngin… <p>Unity の uGui と UniRx を組み合わせてドラッグや長押しを実装してみたので,メモしておきます.<br/> ここで言う長押しボタンは,数秒押したら反応するボタンではなく,押している間,特定の動作をするボタンのことです.<br/> なんていえばいいのか分からないので,便宜上,長押しボタンといいます.</p> <h4>uGui パネルのドラッグ</h4> <p>下記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を,uGui のパネルにアタッチしてやると,そのパネルをドラッグで移動させることができます.</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> System; <span class="synStatement">using</span> UniRx; <span class="synStatement">using</span> UniRx.Triggers; <span class="synStatement">using</span> UnityEngine; <span class="synStatement">using</span> UnityEngine.UI; <span class="synType">public</span> <span class="synType">class</span> DragPanel : MonoBehavior { Void Start() { var et = <span class="synStatement">this</span>.gameObject.AddComponent&lt;ObservableEventTrigger&gt;(); <span class="synStatement">this</span>.UpdateAsObservable() .SkipUntil(et.OnPointerDownAsObservable()) <span class="synComment">// ポインタが下がるまでスキップ</span> .TakeUntil(et.OnPointerUpAsObservable()) <span class="synComment">// ポインタが上がると終了</span> .Repeat() <span class="synComment">// 繰り返す</span> .Select( _=&gt; Input.mousePosition ) .Subscribe( pos =&gt; { var rect = <span class="synStatement">this</span>.gameObject.GetComponent&lt;RectTransform&gt;(); rt.anchoredPosition = <span class="synStatement">new</span> Vector2(pos.x, pos.y); }) .AddTo(<span class="synStatement">this</span>); } } </pre> <p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>は,アタッチされたパネル上で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A6%A5%B9%A5%DD%A5%A4%A5%F3%A5%BF">マウスポインタ</a>を押している間,その<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A6%A5%B9%A5%DD%A5%A4%A5%F3%A5%BF">マウスポインタ</a>の位置をパネルの位置に置き換えています.</p> <h4>uGui 長押しボタン</h4> <p>また,この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をButton にアタッチして,Subscribe の中身を書き換えてやれば,ボタンを押している間,特定の動作を行うボタンになります.</p> <p>ちなみに,uGuiではないGameObject をドラッグで移動したい場合は,下記の記事をご参照下さい.</p> <p><iframe src="http://rinor.hatenablog.com/embed/2015/05/19/221537" title="Unity でオブジェクトをドラッグして移動させる using UniRx - Edifying Soil" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"><a href="http://rinor.hatenablog.com/entry/2015/05/19/221537">Unity でオブジェクトをドラッグして移動させる using UniRx - Edifying Soil</a></iframe><cite class="hatena-citation"><a href="http://rinor.hatenablog.com/entry/2015/05/19/221537">rinor.hatenablog.com</a></cite></p> rinor python: csv を読み込んで,ヒートマップを表示 hatenablog://entry/8454420450101428416 2015-07-14T03:45:35+09:00 2015-07-14T03:45:35+09:00 ヒートマップとは,データ行列の個々の要素をその大きさに応じて色分けし,可視化したグラフのことです. 例えば,共分散行列を可視化したりできます. というわけで,csv ファイルに格納されたデータ行列を読み込み,ヒートマップとして出力するところまでをメモしておきます. import numpy as np from matplotlib import pyplot as plt data = np.loadtxt("data.csv", delimiter=",") plt.imshow(data, aspect="auto", interpolation = "none") plt.colorb… <p>ヒートマップとは,データ行列の個々の要素をその大きさに応じて色分けし,可視化したグラフのことです.<br/> 例えば,共分散行列を可視化したりできます.</p> <p>というわけで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a> ファイルに格納されたデータ行列を読み込み,ヒートマップとして出力するところまでをメモしておきます.</p> <pre class="code lang-python" data-lang="python" data-unlink><span class="synPreProc">import</span> numpy <span class="synStatement">as</span> np <span class="synPreProc">from</span> matplotlib <span class="synPreProc">import</span> pyplot <span class="synStatement">as</span> plt data = np.loadtxt(<span class="synConstant">&quot;data.csv&quot;</span>, delimiter=<span class="synConstant">&quot;,&quot;</span>) plt.imshow(data, aspect=<span class="synConstant">&quot;auto&quot;</span>, interpolation = <span class="synConstant">&quot;none&quot;</span>) plt.colorbar() plt.show() </pre> <p>はい.これだけです.<br/> 軸の設定とか何もしていませんが,とりあえずデータの傾向とか見るだけなら十分かと.<br/> <s>まぁ,<a class="keyword" href="http://d.hatena.ne.jp/keyword/gnuplot">gnuplot</a> でもそんなに難しくないけど</s></p> rinor Windows 64bit で python を chocolatey でインストール hatenablog://entry/8454420450100890653 2015-07-11T10:52:10+09:00 2015-07-11T10:52:10+09:00 タイトルそのままです. Chocolatey を使用して,python を Windows にインストールしてみたいと思います. Chocolatey ってなんじゃらほい?と思われる方は,下記のリンク先を参照して下さい. Window に入れておきたいソフトウェアメモ - Edifying Soilrinor.hatenablog.com python のインストール では,さっそくインストールしてみたいと思います. 今回インストールする python のバージョンは2系のものです. また,私の環境は,Windows8.1 64bit を Mac の bootcamp で動かしています. です… <p>タイトルそのままです.<br/> Chocolatey を使用して,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> を <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> にインストールしてみたいと思います.<br/> Chocolatey ってなんじゃらほい?と思われる方は,下記のリンク先を参照して下さい.</p> <p><iframe src="http://rinor.hatenablog.com/embed/2015/06/28/215920" title="Window に入れておきたいソフトウェアメモ - Edifying Soil" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"><a href="http://rinor.hatenablog.com/entry/2015/06/28/215920">Window に入れておきたいソフトウェアメモ - Edifying Soil</a></iframe><cite class="hatena-citation"><a href="http://rinor.hatenablog.com/entry/2015/06/28/215920">rinor.hatenablog.com</a></cite></p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のインストール</h2> <p>では,さっそくインストールしてみたいと思います.<br/> 今回インストールする <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のバージョンは2系のものです. また,私の環境は,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows8">Windows8</a>.1 64bit を <a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a> の bootcamp で動かしています. ですが,まぁ,普通に64bit の <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> 環境と変わりません. むしろ,問題になってくるのは,64bit というほうでして・・・<br/> そのあたりは後述するとして,まずは <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のインストールです.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を管理者権限(じゃなくてもいいかも)で起動し,下記のコマンドを実行します.</p> <pre class="code" data-lang="" data-unlink>choco install python2</pre> <p>以上です.<br/> 勝手に 64bit 版がインストールされます.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を起動し,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> と打ち込んでみて下さい.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のシェルが起動しますので,試しにいろいろ打ち込んでみて,動いていることを確認してください.</p> <pre class="code" data-lang="" data-unlink>$ python &gt;&gt;&gt; 1+2 3 &gt;&gt;&gt; exit()</pre> <p>とか.</p> <h4>pip をインストール</h4> <p>まぁ,このままでは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のうまみを享受できているとはいいがたいので,いろいろ便利なパッケージを入れていきたいところです.<br/> というわけで,パッケージのインストールを楽にしてくれる pip を続いてインストールしたいと思います. pip とは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> 用のパッケージ管理システムで,pip を使用することで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>上でパッケージをインストール,管理することが可能になります.</p> <pre class="code" data-lang="" data-unlink>choco install pip</pre> <p>以上です. ・・・とは行かないかもしれません.<br/> 私の環境だと,エラーで止まりました.<br/> その場合でも,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を起動し直し,再度同じコマンドを実行すると問題なくインストールされます.<br/> pip をインストールする前に,関係するパッケージもインストールされるみたいなんですが,おそらくそいつがインストールされた時点で,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>の再起動が必要なんじゃないかなぁと(勘<br/> インストールが終わったらとりあえず,pip を最新版にしておきましょう.</p> <pre class="code" data-lang="" data-unlink>pip install --upgrade pip</pre> <h2>入れておきたい <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> パッケージ</h2> <p>何はともあれ,これで 下準備は整いました.<br/> 続いて,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> を使う上で入れておきたいパッケージの紹介をします.</p> <h3>ipython notebook</h3> <p>ipython とは <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のリッチな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6">インタラクティブ</a>シェルで,オリジナルの <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> よりも使い勝手がいいです.<br/> さらに,そんなipython をブラウザ上で扱え,作図までできてしまうのが ipython notebook です.<br/> これは入れておいて損はないと思います.</p> <pre class="code" data-lang="" data-unlink>pip install ipython pip install ipython[notebook]</pre> <p>で,ipython notebook に必要なパッケージをすべて入れてくれるはず・・・.たぶん. しかしながら,これだけではグラフを書いたりすることができません.<br/> というわけで,必要なパッケージを入れていきます.</p> <h4>matplotlib</h4> <p>二次元グラフィック用の <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> パッケージです.<br/> こいつでグラフを書くわけですね.</p> <pre class="code" data-lang="" data-unlink>pip install matoplotlib </pre> <p>で,さくっとインストールできると思いきや,「<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>: <a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> Visual <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> 9.0 is required」というエラーメッセージが・・・<br/> というわけで,</p> <p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=44266">Download Microsoft Visual C++ Compiler for Python 2.7 from Official Microsoft Download Center</a> から<a class="keyword" href="http://d.hatena.ne.jp/keyword/VC%2B%2B">VC++</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9">コンパイラ</a>をダウンロードしてインストールします.</p> <h4>numpy</h4> <p>多次元配列や行列をサポートしてくれる数学関数パッケージです. 行列演算するにしても,それをもとにグラフを描画するにしてもこいつがなくてははじまりません.</p> <pre class="code" data-lang="" data-unlink>pip install numpy</pre> <h4>scipy</h4> <p>高水準の科学技術計算パッケージです.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>等を行うのであれば,やはりこいつがなくては(略<br/> これも今まで通り,pip でインストールできるかと思いきや,そうは問屋が卸しません.<br/> scipy をインストールするのに必要なライブラリが <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> に存在しないため,pip ではインストールできないんです.<br/> なので,公式の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%E9">インストーラ</a>を使いましょう!<br/> まぁ,公式だと 32bit 版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%E9">インストーラ</a>しかないので,無理なんですがね.<br/> というわけで, <a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/">http://www.lfd.uci.edu/~gohlke/pythonlibs/</a> こちらで公開されている 64bit 版のものを使用します. scipy-0.16.0rc1-cp27-none-win_<a class="keyword" href="http://d.hatena.ne.jp/keyword/amd64">amd64</a>.whl をダウンロードしてください.<br/> この whl という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%C8%C4%A5%BB%D2">拡張子</a>は,<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> パッケージの形式の一つでして,</p> <pre class="code" data-lang="" data-unlink>pip instal wheel</pre> <p>とすることで,扱えるようになります. wheel をインストールした後は,</p> <pre class="code" data-lang="" data-unlink>pip install scipy-0.16.0rc1-cp27-none-win_amd64.whl</pre> <p>で scipy をインストールします.  </p> <h3>ipython notebook を使ってみる</h3> <pre class="code" data-lang="" data-unlink>ipython notebook --pylab inline</pre> <p>で起動させます. 「Support for specifying --pylab on the command line has been removed.」<br/> とか言われた場合は,--pylab inline は無しで起動します.</p> <p>ブラウザが起動しますので,右上のNEWから<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> ファイルを作成し,その中で,以下のように打ち込んでください.</p> <pre class="code" data-lang="" data-unlink>import numpy as np from matplotlib import pyplot as plt mean = 0 var = 1 x = np.arange(-5., 5., 0.001) y = (1./np.sqrt(2 * np.pi * var) * np.exp(-(x - mean)**2 / 2 / var)) plt.plot(x, y) plt.show()</pre> <p>平均0,分散1の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%A6%A5%B9%CA%AC%C9%DB">ガウス分布</a>が表示されれば成功です.</p> rinor visual studio 2013 で openframeworks をビルド hatenablog://entry/8454420450099837271 2015-07-02T03:06:32+09:00 2015-07-02T03:06:32+09:00 openframeworks を visual studio 2013 でビルドする際のメモ. 現状だと openframeworks は,vs2012 しかサポートしていないのに,なぜ vs2013 でビルドしようとするのか・・・ それは,Rx.cpp を使いたいからです!! Rx.cpp って何じゃらほい?ってところは,おいておいて,そんなわけで,vs2013 でビルドしたいと思います. vs2013 用のパッケージをダウンロード 冒頭でも触れたとおり,公式HPからダウンロードできる openframeworks は vs2012 用です. ただ,github で,vs2013 用のソース… <p>openframeworks を <a class="keyword" href="http://d.hatena.ne.jp/keyword/visual%20studio">visual studio</a> 2013 でビルドする際のメモ. <br/> 現状だと openframeworks は,vs2012 しかサポートしていないのに,なぜ vs2013 でビルドしようとするのか・・・<br/> それは,Rx.cpp を使いたいからです!!<br/> Rx.cpp って何じゃらほい?ってところは,おいておいて,そんなわけで,vs2013 でビルドしたいと思います.</p> <h2>vs2013 用のパッケージをダウンロード</h2> <p>冒頭でも触れたとおり,公式HPからダウンロードできる openframeworks は vs2012 用です.<br/> ただ,<a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a> で,vs2013 用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>を公開してくださっている方がおられるので,そこからダウンロードしたものを使用します.</p> <p><a href="https://github.com/liquidzym/openFrameworks/tree/VS2013">liquidzym/openFrameworks at VS2013 &middot; GitHub</a></p> <p>上記 <a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a> から VS2013 ブランチをクローンしてきます.<br/> ブランチを指定して,クローンしてくる方法は下記です.</p> <pre class="code" data-lang="" data-unlink>git clone -b ブランチ名 リポジトリアドレス</pre> <h2>ビルド</h2> <h4>ビルドの前に</h4> <p>openFrameworks\libs\openFrameworksCompiled\project\vs フォルダに移動し,そこにある openframeworks.sln を開いてビルドするわけですが,そのままではプロジェクトが読み込めません.<br/> なんやかんやしてたら,こんなエラーが出てきました.</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinor/20150702/20150702024332.png" alt="f:id:rinor:20150702024332p:plain" title="f:id:rinor:20150702024332p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>どうやら <a class="keyword" href="http://d.hatena.ne.jp/keyword/kinect">kinect</a> 関連のプロジェクトが読み込めていないみたいです.<br/> なので,同フォルダにある openframeworks.vcxproj を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C6%A5%AD%A5%B9%A5%C8%A5%A8%A5%C7%A5%A3%A5%BF">テキストエディタ</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Terapad">Terapad</a> etc.) で開き,<a class="keyword" href="http://d.hatena.ne.jp/keyword/kinect">kinect</a> 関連の記述を削除します.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> で検索してヒットした箇所を削除したら大丈夫です・・・たぶん. <br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Kinect">Kinect</a> 使いたい人は,vs2012 でビルドするか,自前で実装するか,unity に乗り換えましょう.</p> <h4>やっとこさビルド</h4> <p>したらエラーが出るんだな!これが!!<br/> エラーの箇所は,ofVbo.cpp の</p> <pre class="code" data-lang="" data-unlink>if(!vaoChecked){ supportVAOs = ofGetGLProgrammableRenderer();// || glewIsSupported(&#34;GL_ARB_vertex_array_object&#34;); &lt;- this should work but has false positives on some cards like emulation in vm&#39;s vaoChecked = true; }</pre> <p>ここ. ここをまるっと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a>してやると,エラーは消えてビルドが通ります.<br/> エラーの箇所がシェーダまわりくさいので,ちょっと不安が残りますが,まぁ,ヴィジュアル的にそこまでこったことはしないので,まぁいいか. <br/> というわけで,あとは,apps/myApps 以下にプロジェクトを作っていけば,vs2013 &amp; openframeworks で,開発することができます.</p> <p>これで,Rx.cpp が試せる!!</p> rinor Window に入れておきたいソフトウェアメモ hatenablog://entry/8454420450099292132 2015-06-28T21:59:20+09:00 2015-06-28T21:59:20+09:00 Windowsマシンに入れて置きたいプログラムをメモしておきます. 尚,私の環境はwindows7です. パッケージ管理 chocolatey Windwos 用のパッケージ管理ソフトです. linux におけるapt-get や yum 等と似た感じで,ソフトウェアをコマンドプロンプトからインストールすることが可能です. (アンインストールも可能ですが,ソフトによっては個別にアンインストールする必要がある場合もあります) インストール chocolateyのHP https://chocolatey.org/ へ行き,そこに記載のインストールコマンドをコマンドプロンプトで打ち込みます. 具体… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>マシンに入れて置きたいプログラムをメモしておきます.<br/> 尚,私の環境は<a class="keyword" href="http://d.hatena.ne.jp/keyword/windows7">windows7</a>です.</p> <h2>パッケージ管理</h2> <h3>chocolatey</h3> <p>Windwos 用のパッケージ管理ソフトです.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/linux">linux</a> におけるapt-get や <a class="keyword" href="http://d.hatena.ne.jp/keyword/yum">yum</a> 等と似た感じで,ソフトウェアを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>からインストールすることが可能です.<br/> (アンインストールも可能ですが,ソフトによっては個別にアンインストールする必要がある場合もあります)</p> <h4>インストール</h4> <p>chocolateyのHP <a href="https://chocolatey.org/">https://chocolatey.org/</a> へ行き,そこに記載のインストールコマンドを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>で打ち込みます.<br/> 具体的には,下記です.</p> <pre class="code" data-lang="" data-unlink>@powershell -NoProfile -ExecutionPolicy Bypass -Command &#34;iex ((new-object net.webclient).DownloadString(&#39;https://chocolatey.org/install.ps1&#39;))&#34; &amp;&amp; SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin</pre> <h4>使い方</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>上で,</p> <pre class="code" data-lang="" data-unlink>choco install パッケージ名</pre> <p>と打ち込むことで,指定したパッケージをインストールすることが可能です.<br/> インストールしたいパッケージを探す際は,chocolatey のHP 右上にある検索ボックス(Search Packages と書いてある)でさがします.<br/> その他の詳しい使い方は,こちらのサイトが参考になります.<br/> <a href="http://millkeyweb.com/win-chocolatey/">http://millkeyweb.com/win-chocolatey/</a></p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> ライクにする系</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> ライクに作業したい!という時におススメのソフトの紹介です.</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gow">Gow</a></h3> <p>たくさんの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unix">Unix</a>系のコマンドが詰め込まれたパッケージです.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Cygwin">Cygwin</a> よりも軽量なので,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>ライクな操作を行いたい人は入れておくといいと思います.</p> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install gow</pre> <p>上記コマンドでインストールした後,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を開くとls 等が使用できるようになっている・・・はず!</p> <h3>ConEmu</h3> <p>高機能なターミナル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%DF%A5%E5%A5%EC%A1%BC%A5%BF">エミュレータ</a>で,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>でフォルダ移動とかファイル検索とか諸々やりたい人は,入れておくと幸せになれると思います.</p> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install conemu</pre> <h2>便利<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB">ツール</a>系</h2> <p>まぁ,入れておいて損はない便利なものをご紹介します.</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Chrome">Google Chrome</a></h3> <p>言わずと知れたブラウザですね.<br/> そんなもんわざわざ言わずともみんな入れるやんって思うかもしれませんが,こいつもchocolatey でインストール可能なので,あえて記載しました.</p> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install google-chrome-x64</pre> <h3>Classic Shell</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows8">Windows8</a> のスタートメニューを<a class="keyword" href="http://d.hatena.ne.jp/keyword/windows7">windows7</a>風に変えてくれます.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows8">Windows8</a> のメニュー操作に慣れない人(私)にとっては,非常に重宝するソフトです.</p> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install classic-shell</pre> <p>これは流石にchocolatey にはないだろうと思ったらあった (゚д゚)!</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Wireshark">Wireshark</a></h3> <p>ネットワークに流れるパケット情報をリアルタイムに調査できるパケット取得・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB">プロトコル</a>解析ソフトです.</p> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install wireshark</pre> <h2>その他便利系</h2> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Chrome">Google Chrome</a></h3> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install google-chrome-x64</pre> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Drive">Google Drive</a></h3> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install googledrive</pre> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/DropBox">DropBox</a></h3> <h4>インストール</h4> <pre class="code" data-lang="" data-unlink>choco install dropbox</pre> <h2>最後に</h2> <p>もはや chocolatey の紹介になってますね.<br/> chocolatey は,インストールするパッケージを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>にまとめて書けるので,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>台のマシンに同一の環境を構築したい時等に,非常に便利です.<br/> そんな状況そうそうないかもしれませんが・・・</p> rinor Unity でテクスチャの画像をスクリプト上からいじる hatenablog://entry/8454420450098098397 2015-06-19T02:04:01+09:00 2015-06-19T02:04:01+09:00 Unity でテクスチャの画像をスクリプト上からいじる時のあれこれをメモします. 画像をスクリプトで読み込む あらかじめ画像が用意されており,それをスクリプトから読み込む場合は,Texture2DのLoadImageを使用します. Texture2D tex = new Texture2D(1, 1); tex.LoadImage(File.ReadAllBytes(path)); // path は画像ファイルへのパス LoadImage は,PNG or JPG 画像を読み込むものなので,それ以外の形式は読み込めません. そのため,スクリプト内で画像を生成する場合は,一度それらの形式へ変更… <p>Unity でテクスチャの画像を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>上からいじる時のあれこれをメモします.</p> <h2>画像を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で読み込む</h2> <p>あらかじめ画像が用意されており,それを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>から読み込む場合は,Texture2DのLoadImageを使用します.</p> <pre class="code lang-cs" data-lang="cs" data-unlink>Texture2D tex = <span class="synStatement">new</span> Texture2D(<span class="synConstant">1</span>, <span class="synConstant">1</span>); tex.LoadImage(File.ReadAllBytes(path)); <span class="synComment">// path は画像ファイルへのパス</span> </pre> <p><strong>LoadImage は,<a class="keyword" href="http://d.hatena.ne.jp/keyword/PNG">PNG</a> or JPG 画像を読み込むものなので,それ以外の形式は読み込めません.</strong><br/> そのため,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>内で画像を生成する場合は,一度それらの形式へ変更する必要があります.</p> <h2>画像を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で生成する</h2> <p>画像を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で生成する場合は,SetPixels を使用します.<br/> 以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>は,3x3の赤い画像を生成して,texture に張り付ける処理です.</p> <pre class="code lang-cs" data-lang="cs" data-unlink>Color[] c = <span class="synStatement">new</span> Color[<span class="synConstant">9</span>]; <span class="synStatement">for</span>(<span class="synType">int</span> i = <span class="synConstant">0</span>; i &lt; <span class="synConstant">9</span>; ++i) { c[i].a = <span class="synConstant">1.0f</span>; c[i].r = <span class="synConstant">1.0f</span>; c[i].g = <span class="synConstant">0.0f</span>; c[i].b = <span class="synConstant">0.0f</span>; } Texture2D tex = <span class="synStatement">new</span> Texture2D(<span class="synConstant">3</span>, <span class="synConstant">3</span>, TextureFormat.ARGB32, <span class="synConstant">false</span>); tex.SetPixels(c); </pre> <h4>Color とColor32 の違い</h4> <p>余談ですが,Unity には,Color とColor32 という二つのクラスがあります.<br/> その違いは,Colorはrgba がfloat で,Color32 では,byte ということです. ただ,Color 内部で結局float から byte に変更されているので,Color32 を使用した方がパフォーマンスは高いようです.</p> rinor Unity: ImageEffectのスクリプトの書き方 hatenablog://entry/8454420450097281814 2015-06-11T23:39:24+09:00 2015-06-11T23:41:55+09:00 Unity5 からフリー版でもImageEffectが使用できるようなりましたね. というわけで,エフェクトを自分で作成する際の基本をメモしておきます. ImageEffect による画像処理 ImageEffect ととは,cameraから出力される画像(映像)に対して,shaderを当てて処理するものです. ImageEffect 使用するには,下記のようなスクリプトを用意し,cameraに追加します. すると,Inspector 上の当該スクリプトの箇所にshader の設定項目がでてきますので,そこに用いたいshader を指定します. using UnityEngine; [Exec… <p>Unity5 からフリー版でもImageEffectが使用できるようなりましたね. というわけで,エフェクトを自分で作成する際の基本をメモしておきます.</p> <h2>ImageEffect による画像処理</h2> <p>ImageEffect ととは,cameraから出力される画像(映像)に対して,shaderを当てて処理するものです.<br/> ImageEffect 使用するには,下記のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を用意し,cameraに追加します.<br/> すると,Inspector 上の当該<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>の箇所にshader の設定項目がでてきますので,そこに用いたいshader を指定します.</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> UnityEngine; [ExecuteInEditMode] <span class="synType">public</span> <span class="synType">class</span> test : ImageEffect { <span class="synType">void</span> OnRenderImage(RenderTexture source, RenderTexture destination) { Graphics.Blit(source, destination, material); } } </pre> <p>ここで,source: 元のテクスチャ,<a class="keyword" href="http://d.hatena.ne.jp/keyword/destination">destination</a>: 出力されるテクスチャです.<br/> 上記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>は,単にカメラから得たテクスチャを shader に渡し,その結果を出力・もしくは後段の処理に引き渡すものです.</p> <h3>出力されるテクスチャを保持する場合</h3> <p>例えば,最初のImageEffectで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%D7%A5%E9%A5%B7%A5%A2%A5%F3">ラプラシアン</a>を取得し,後段のImageEffectでその<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%D7%A5%E9%A5%B7%A5%A2%A5%F3">ラプラシアン</a>を使用したい場合,予めAssetにRenderTexture を用意し,そのRenderTextureに書き込むようにします.</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synType">public</span> <span class="synType">class</span> test : ImageEffect { <span class="synType">public</span> RenderTexture rt; <span class="synType">void</span> OnRenderImage(RenderTexture source, RenderTexture destination) { Graphics.Blit(source, rt, material); } } </pre> <p>後段の処理でそのRenderTextureを使用する場合は,そいつを</p> <pre class="code lang-cs" data-lang="cs" data-unlink>material.SetTexture(<span class="synConstant">&quot;shader上のtexture名&quot;</span>, rt); </pre> <p>でshaderに渡してあげます.</p> <h3>シェーダに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>のパスを書いて,特定のパスを実行する</h3> <p>シェーダ内の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>のパスから特定のパスを選んで実行する場合,下記のように第四引数にパスのインデックスを指定します.</p> <pre class="code lang-cs" data-lang="cs" data-unlink>material.SetTexture(source, rt, material, <span class="synConstant">0</span>); </pre> <h2>ImageEffectの例</h2> <h4>3x3 Gaussian <a class="keyword" href="http://d.hatena.ne.jp/keyword/Blur">Blur</a></h4> <p>3x3 ガウシアンブラーの例です.<br/> シェーダ側が完全にべた書きですが,3x3 ならそんなに変わらないだろうということで・・・<br/> 考慮する近傍画<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C7%BF%F4">素数</a>が増えると,x 軸, y 軸を順にブラーかけた方が早いです.<br/> まずは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>の例から</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> UnityEngine; [ExecuteInEditMode] <span class="synType">public</span> <span class="synType">class</span> GaussianBlur : ImageEffectBase { <span class="synType">public</span> <span class="synType">int</span> _Width = <span class="synConstant">1920</span>; <span class="synType">public</span> <span class="synType">int</span> _Height = <span class="synConstant">1080</span>; <span class="synType">void</span> Start() { material.SetFloat(<span class="synConstant">&quot;_OneWidth&quot;</span>, <span class="synConstant">1.0f</span> / _Width); material.SetFloat(<span class="synConstant">&quot;_OneHeight&quot;</span>, <span class="synConstant">1.0f</span> / _Height); } <span class="synType">void</span> OnRenderImage(RenderTexture source, RenderTexture destination) { Graphics.Blit(source, destination, material); } } </pre> <p>つづいて,対応するシェーダです.</p> <pre class="code" data-lang="" data-unlink>Shader &#34;Custom/GaussianBulr&#34; { Properties { _MainTex (&#34;&#34;, any) = &#34;&#34; {} _OneWidth(&#34;Width of one pixel&#34;, Float) = 0.00052083333 _OneHeight(&#34;Height of one pixel&#34;, Float) = 0.00092592592 } CGINCLUDE #include &#34;UnityCG.cginc&#34; struct v2f { float4 pos : SV_POSITION; half2 uv : TEXCOORD0; }; sampler2D _MainTex; float _OneWidth; float _OneHeight; v2f vert( appdata_img v ) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord; return o; } half4 frag(v2f i) : SV_Target { half4 color = tex2D(_MainTex, i.uv) / 4; color += tex2D(_MainTex, half2(i.uv.x, i.uv.y + _OneHeight)) / 8; color += tex2D(_MainTex, half2(i.uv.x, i.uv.y - _OneHeight)) / 8; color += tex2D(_MainTex, half2(i.uv.x + _OneWidth, i.uv.y)) / 8; color += tex2D(_MainTex, half2(i.uv.x - _OneWidth, i.uv.y)) / 8; color += tex2D(_MainTex, half2(i.uv.x + _OneWidth, i.uv.y + _OneHeight)) / 16; color += tex2D(_MainTex, half2(i.uv.x + _OneWidth, i.uv.y - _OneHeight)) / 16; color += tex2D(_MainTex, half2(i.uv.x - _OneWidth, i.uv.y + _OneHeight)) / 16; color += tex2D(_MainTex, half2(i.uv.x - _OneWidth, i.uv.y - _OneHeight)) / 16; return color; } ENDCG SubShader { Pass { ZTest Always Cull Off ZWrite Off CGPROGRAM #pragma vertex vert #pragma fragment frag ENDCG } } Fallback off }</pre> rinor ベクトルに対する重回帰分析(各次元独立な時) hatenablog://entry/12921228815730317031 2015-06-08T23:17:10+09:00 2015-06-08T23:17:10+09:00 何かとあると便利な重回帰分析. 今日はそれを実装してみたいと思います. matlab とか R とか使えばいいんじゃないのとか言わない. 重回帰分析とは 重回帰分析って,複数の入力から1つの出力を推定するのものですよね. 式で書くと以下のような感じ. ここで,は出力,が入力,が重み,がバイアスです. 重みとバイアスさえ上手く学習できれば,入力から出力を推定し放題 (∩´∀`)∩ワーイ で,どない学習したらええねん! ( ゚Д゚)⊃ 最小二乗法 の説明はウィキペディア先生に任せるとして, がベクトルの場合を考えたいと思います! 式で書くとこんな感じ. 小文字はベクトル,大文字は行列です. ここで… <p>何かとあると便利な重回帰分析.<br/> 今日はそれを実装してみたいと思います.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/matlab">matlab</a> とか R とか使えばいいんじゃないのとか言わない.</p> <h2>重回帰分析とは</h2> <p>重回帰分析って,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>の入力から1つの出力を推定するのものですよね. <br/> 式で書くと以下のような感じ.</p> <p><img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0Ay%20%3D%20%5Csum_%7Bn%3D0%7D%5E%7BN-1%7Da_n%20x_n%20%2B%20b%0A%7D" alt="{ \displaystyle y = \sum_{n=0}^{N-1}a_n x_n + b }"/></p> <p>ここで,<img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%20y%7D" alt="{ \displaystyle y}"/>は出力,<img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%20x_n%7D" alt="{ \displaystyle x_n}"/>が入力,<img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%20a_n%7D" alt="{ \displaystyle a_n}"/>が重み,<img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%20b%7D" alt="{ \displaystyle b}"/>がバイアスです.<br/> 重みとバイアスさえ上手く学習できれば,入力から出力を推定し放題 (∩´∀`)∩ワーイ</p> <p>で,どない学習したらええねん!   ( ゚Д゚)⊃ 最小二乗法<br/> の説明は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A3%A5%AD%A5%DA%A5%C7%A5%A3%A5%A2">ウィキペディア</a>先生に任せるとして,<img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%20y%7D" alt="{ \displaystyle y}"/> がベクトルの場合を考えたいと思います!</p> <p>式で書くとこんな感じ.<br/> <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cmathbf%7By%7D%20%3D%20%7B%5Cbf%20Ax%7D%20%2B%20%7B%5Cbf%20b%7D%0A%7D" alt="{ \displaystyle \mathbf{y} = {\bf Ax} + {\bf b} }"/></p> <p>小文字はベクトル,大文字は行列です.</p> <p>ここで,<br/> <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cmathbf%7By%7D%20%3D%20%5Cleft%5B%20y_1%2C%20y_2%2C%20%5Ccdots%2C%20y_d%2C%20%5Ccdots%2C%20y_D%20%5Cright%5D%5E%7B%5Cmathrm%7BT%7D%7D%0A%7D" alt="{ \displaystyle \mathbf{y} = \left[ y_1, y_2, \cdots, y_d, \cdots, y_D \right]^{\mathrm{T}} }"/> , <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cmathbf%7Bx%7D%20%3D%20%5Cleft%5B%20x_1%2C%20x_2%2C%20%5Ccdots%2C%20x_n%2C%20%5Ccdots%2C%20x_N%20%5Cright%5D%5E%7B%5Cmathrm%7BT%7D%7D%0A%7D" alt="{ \displaystyle \mathbf{x} = \left[ x_1, x_2, \cdots, x_n, \cdots, x_N \right]^{\mathrm{T}} }"/> ,</p> <p>Aは,D×Nの行列,bはD次元のベクトルとなります. すなわち,N次元のベクトルxからD次元のベクトルyへの行列Aとベクトルbを用いて,回帰するという意味の式になります.</p> <p>それでは,観測データから行列Aとベクトルbを求めていきます.</p> <p>今,入力データとそれに対応する出力データがそれぞれM個観測されたとします.</p> <p>その観測されたデータを,入力,出力それぞれにおいて横に並べて,行列にすると・・・</p> <p><img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cbegin%7Balign%7D%0A%7B%5Cbf%20Y%7D%20%3D%20%5Cleft%5B%20%7B%5Cbf%20y_1%2C%20y_2%2C%20%5Ccdots%2C%20y_m%2C%20%5Ccdots%2C%20y_M%7D%20%5Cright%5D%2C%0A%7B%5Cbf%20X%7D%20%3D%20%5Cleft%5B%20%7B%5Cbf%20x_1%2C%20x_2%2C%20%5Ccdots%2C%20x_m%2C%20%5Ccdots%2C%20x_M%7D%20%5Cright%5D%0A%5Cend%7Balign%7D%0A%7D" alt="{ \displaystyle \begin{align} {\bf Y} = \left[ {\bf y_1, y_2, \cdots, y_m, \cdots, y_M} \right], {\bf X} = \left[ {\bf x_1, x_2, \cdots, x_m, \cdots, x_M} \right] \end{align} }"/></p> <p><img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%7B%5Cbf%20Y%7D%20%3D%20%7B%5Cbf%20AX%20%2B%20b%7D%0A%7D" alt="{ \displaystyle {\bf Y} = {\bf AX + b} }"/></p> <p>となります.</p> <p>この式を元に,</p> <p><img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cleft%28%7B%5Cbf%20Y%20-%20%28AX%20%2B%20b%29%7D%5Cright%29%5E%7B%5Cmathrm%7BT%7D%7D%5Cleft%28%7B%5Cbf%20Y%20-%20%28AX%20%2B%20b%29%7D%5Cright%29%0A%7D" alt="{ \displaystyle \left({\bf Y - (AX + b)}\right)^{\mathrm{T}}\left({\bf Y - (AX + b)}\right) }"/></p> <p>を最小にするAをもめてやります.<br/> ただし,このままでは計算し難いので,Aとbを結合し, <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%7B%5Cbf%20A%7D%27%20%3D%20%5Cleft%5B%7B%5Cbf%20A%2C%20b%7D%20%5Cright%5D%0A%7D" alt="{ \displaystyle {\bf A}&#39; = \left[{\bf A, b} \right] }"/> としてやります.<br/> それに伴い,入力データの各サンプルを <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%7B%5Cbf%20x%7D%27_m%20%3D%20%20%5Cleft%5B%20x_1%2C%20x_2%2C%20%5Ccdots%2C%20x_n%2C%20%5Ccdots%2C%20x_N%2C%201%20%5Cright%5D%5E%7B%5Cmathrm%7BT%7D%7D%0A%7D" alt="{ \displaystyle {\bf x}&#39;_m = \left[ x_1, x_2, \cdots, x_n, \cdots, x_N, 1 \right]^{\mathrm{T}} }"/> のような形式にした上で結合し,行列X'を生成します.<br/> そうすることで,<br/> <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%7B%5Cbf%20Y%7D%20%3D%20%7B%5Cbf%20A%27X%27%7D%0A%7D" alt="{ \displaystyle {\bf Y} = {\bf A&#39;X&#39;} }"/><br/> と簡略して表すことができます.</p> <p>後は, <img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%5Cleft%28%7B%5Cbf%20Y%20-%20%28A%27X%27%29%7D%5Cright%29%5E%7B%5Cmathrm%7BT%7D%7D%5Cleft%28%7B%5Cbf%20Y%20-%20%28A%27X%27%29%7D%5Cright%29%0A%7D" alt="{ \displaystyle \left({\bf Y - (A&#39;X&#39;)}\right)^{\mathrm{T}}\left({\bf Y - (A&#39;X&#39;)}\right) }"/> のA'に対する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%F9%CA%AC">微分</a>が=0 になるA'を求めてあげればいい.</p> <p>結果として,以下の式を実装すれば,重回帰分析が行えます.</p> <p><img src="http://chart.apis.google.com/chart?cht=tx&chl=%7B%20%5Cdisplaystyle%0A%7B%5Cbf%20A%27%7D%20%3D%20%7B%5Cbf%20Y%5Cleft%28X%27X%27%5E%7B%5Cmathrm%7BT%7D%7D%5Cright%29%5E%7B-1%7D%7D%0A%7D" alt="{ \displaystyle {\bf A&#39;} = {\bf Y\left(X&#39;X&#39;^{\mathrm{T}}\right)^{-1}} }"/></p> rinor c# でシングルトン hatenablog://entry/8454420450096493932 2015-06-05T01:00:49+09:00 2015-06-07T10:49:48+09:00 C#でシングルトンを書くことがままあるのですが,何かその都度調べてる気がするので,φ(`д´)メモメモ...メモ シングルトン (singleton) って何じゃらほい? シングルトンとは,そのクラスのインスタンスが一つしか存在しないことを保障するデザインパターンです. つまり,プログラムの中でそのクラスの実体が一つしかないため,他のいろんなクラスで同じものを利用することができるのです. 一見,すごく便利そうに思えるのですが,ガベージコレクションでひっかかったり,テストが書きにくかったりといろいろ落とし穴があったりします. シングルトンのメリットデメリットに関しては,こちらのサイトが参考になり… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>でシングルトンを書くことがままあるのですが,何かその都度調べてる気がするので,φ(`д´)メモメモ...メモ</p> <h2>シングルトン (singleton) って何じゃらほい?</h2> <p>シングルトンとは,そのクラスの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>が一つしか存在しないことを保障する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B6%A5%A4%A5%F3%A5%D1%A5%BF%A1%BC%A5%F3">デザインパターン</a>です. <br/> つまり,プログラムの中でそのクラスの実体が一つしかないため,他のいろんなクラスで同じものを利用することができるのです.<br/> 一見,すごく便利そうに思えるのですが,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%D9%A1%BC%A5%B8%A5%B3%A5%EC%A5%AF%A5%B7%A5%E7%A5%F3">ガベージコレクション</a>でひっかかったり,テストが書きにくかったりといろいろ落とし穴があったりします.<br/> シングルトンのメリットデメリットに関しては,こちらのサイトが参考になります.</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fmo12ino%2Fitems%2Fabf2e31e34278ebea42c" title="Singleton何が悪いの? - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"><a href="http://qiita.com/mo12ino/items/abf2e31e34278ebea42c">Singleton何が悪いの? - Qiita</a></iframe><cite class="hatena-citation"><a href="http://qiita.com/mo12ino/items/abf2e31e34278ebea42c">qiita.com</a></cite></p> <h3>いつ使うの?</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BA%A3%A4%C7%A4%B7%A4%E7%A1%AA">今でしょ!</a>!!<br/> という冗談はさて置き,私が使う場面としては,<a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/TCP">TCP</a>で何かしらのデータを受ける際の窓口クラスとしてです.<br/> 一旦,シングルトンで作成したクラスに受診したデータを保管し,その他の様々なクラスから,そのデータを参照するといった形です.<br/> これが正しい方法なのかは,いまいち自信ないですが…</p> <h4>コードメモ</h4> <p>私が<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>でシングルトンを使用する時,多くの場合で,明示的にメモリの解放も行いたかったりするので,そのあたりを合わせたコードを記載します.</p> <pre class="code lang-cs" data-lang="cs" data-unlink> <span class="synStatement">using</span> System; <span class="synType">public</span> <span class="synType">class</span> Singleton : IDisposable { <span class="synType">private</span> <span class="synType">static</span> Singleton _instance = <span class="synStatement">new</span> Singleton (); <span class="synType">private</span> Singleton (){} <span class="synComment">// コンストラクタをprivateで定義して,外部からアクセスさせない</span>   <span class="synComment">// 唯一のインスタンスの受け渡し口</span> <span class="synType">public</span> <span class="synType">static</span> MessageContainer GetInstance() { <span class="synStatement">return</span> _instance; } ~Singleton () { Dispose(); } <span class="synType">private</span> Boolean _isDisposed = <span class="synConstant">false</span>;   <span class="synType">public</span> <span class="synType">void</span> Dispose() { Dispose(<span class="synConstant">true</span>);     <span class="synComment">// Dispose() が明示的に呼ばれた時に,ガベージコレクションでFinalize()呼び出しをしない</span> GC.SuppressFinalize(<span class="synStatement">this</span>); } <span class="synType">private</span> <span class="synType">void</span> Dispose(<span class="synType">bool</span> disposing) { <span class="synStatement">if</span> (_isDisposed) <span class="synStatement">return</span>; <span class="synStatement">if</span> (disposing) { <span class="synComment">// 明示的に解放する必要のあるメンバ変数の解放処理をここに記載する</span>   } _isDisposed = <span class="synConstant">true</span>; } } </pre> <p>以上,メモでした.</p> <p><a href="http://d.hatena.ne.jp/asin/4822298477/dkeiseib-22" class="asin"><img src="http://ecx.images-amazon.com/images/I/514dbVY2YfL.jpg" alt="C#実践開発手法 ?デザインパターンとSOLID原則によるアジャイルなコーディング (マイクロソフト公式解説書)" title="C#実践開発手法 ?デザインパターンとSOLID原則によるアジャイルなコーディング (マイクロソフト公式解説書)" class="asin"></a></p> rinor Unityでdllを2重に呼び出す hatenablog://entry/8454420450095194574 2015-05-22T16:27:55+09:00 2015-06-05T10:35:44+09:00 portaudioをunityで使いたくて, MrMatthias/Portaudio-Unity · GitHub こことか atsushieno/portaudio-sharp · GitHub こことかを参考にかいてたんですが,コールバックの登録まではうまく行くものの,いざstartすると落ちる. たぶんメモリリークとか起きてるんだろうなぁと思いつつも,それを直す手段が分からない. というわけで,portaudioをラップするc++のdllを作って,そいつを読み込ませることにしました. んで,やってみると・・・ DllNotFound!!! どうやら,作成したdllから呼び出すporta… <p>portaudioをunityで使いたくて,</p> <p><a href="https://github.com/MrMatthias/Portaudio-Unity">MrMatthias/Portaudio-Unity &middot; GitHub</a> こことか</p> <p><a href="https://github.com/atsushieno/portaudio-sharp">atsushieno/portaudio-sharp &middot; GitHub</a> こことかを参考にかいてたんですが,コールバックの登録まではうまく行くものの,いざstartすると落ちる. たぶん<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%E2%A5%EA%A5%EA%A1%BC%A5%AF">メモリリーク</a>とか起きてるんだろうなぁと思いつつも,それを直す手段が分からない.</p> <p>というわけで,portaudioをラップする<a class="keyword" href="http://d.hatena.ne.jp/keyword/c%2B%2B">c++</a>のdllを作って,そいつを読み込ませることにしました.</p> <p>んで,やってみると・・・</p> <p>DllNotFound!!!</p> <p>どうやら,作成したdllから呼び出すportaudio.dllが読み込めてないご様子. 両方とも,Plugins以下においてあるんですが・・・.</p> <p>解決策:システム<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>にportaudio.dllのフォルダへのパスを追加する.</p> <p>portauidoに限らず,dllを二重に読み込むときは,この方法で何とかなりそう.</p> <p>ただ,もっとスマートな方法はないだろうか・・・</p> <p>追記:</p> <p>こことか見ると,プロジェクトの直下におけばいいって書いてある気がする. <a href="http://answers.unity3d.com/questions/197706/fftw-for-c-dllnotfoundexeption.html">FFTW for C# DLLNotFoundExeption - Unity Answers</a></p> <p>ここの記事にあるportaudioの<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>のコールバックの書き方で,Unityからも呼び出せた. <iframe src="http://terurou.hateblo.jp/embed/2013/07/30/082730" title="PortAudioでマイク入力をそのままスピーカーに出力するだけのコード - terurouメモ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"><a href="http://terurou.hateblo.jp/entry/2013/07/30/082730">PortAudioでマイク入力をそのままスピーカーに出力するだけのコード - terurouメモ</a></iframe><cite class="hatena-citation"><a href="http://terurou.hateblo.jp/entry/2013/07/30/082730">terurou.hateblo.jp</a></cite></p> rinor Unity mecanim でボーンを取得 hatenablog://entry/8454420450095110839 2015-05-21T19:32:16+09:00 2015-06-06T12:14:54+09:00 Unity の mecanim を使用し,モデルを動かす時,モデルがHumanoidとして読み込まれていれば,ボーンの構造がある程度企画化されている. そして,Animator.GetBoneTransform を使用すれば,企画化されたボーン名からそのTransformを取得することができる. つまり,kinectやleapmotion等のモーションを取得するデバイスの情報を反映させたい場合,Animator.GetBoneTransformで取得したTransformにデータを流し込んでやればいい. public Animator anime; // Animator がアタッチされている… <p>Unity の mecanim を使用し,モデルを動かす時,モデルがHumanoidとして読み込まれていれば,ボーンの構造がある程度企画化されている.</p> <p>そして,Animator.GetBoneTransform を使用すれば,企画化されたボーン名からそのTransformを取得することができる.</p> <p>つまり,<a class="keyword" href="http://d.hatena.ne.jp/keyword/kinect">kinect</a>やleapmotion等のモーションを取得するデバイスの情報を反映させたい場合,Animator.GetBoneTransformで取得したTransformにデータを流し込んでやればいい.</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synType">public</span> Animator anime; <span class="synComment">// Animator がアタッチされている3Dモデル(ゲームオブジェクト)を突っ込む</span> <span class="synType">void</span> Start() { Transform neck = anime.GetBoneTransform(HumanBodyBones.Neck);   neck.localRotation = <span class="synStatement">new</span> Quaternion( , , ,); <span class="synComment">// こんな感じで操作する</span> } </pre> rinor Unity でオブジェクトをドラッグして移動させる using UniRx hatenablog://entry/8454420450094947408 2015-05-19T22:15:37+09:00 2015-06-06T12:13:54+09:00 やりたいこと:タイトルのまま 最近話題のUniRxを使ってみました. using UniRx; using UniRX.Triggers; using UnityEngine; public class DraggedObject : MonoBehaviour { void Start() { this.OnMouseDragAsObservable() .TakeUntilDestroy(this) // このオブジェクトが破壊されるまで .Select(_ => Input.mousePosition) .Select(pos => { pos.z = this.transform.po… <p>やりたいこと:タイトルのまま</p> <p>最近話題のUniRxを使ってみました.</p> <pre class="code lang-cs" data-lang="cs" data-unlink><span class="synStatement">using</span> UniRx; <span class="synStatement">using</span> UniRX.Triggers; <span class="synStatement">using</span> UnityEngine; <span class="synType">public</span> <span class="synType">class</span> DraggedObject : MonoBehaviour { <span class="synType">void</span> Start() { <span class="synStatement">this</span>.OnMouseDragAsObservable() .TakeUntilDestroy(<span class="synStatement">this</span>) <span class="synComment">// このオブジェクトが破壊されるまで</span> .Select(_ =&gt; Input.mousePosition) .Select(pos =&gt; { pos.z = <span class="synStatement">this</span>.transform.position.z; <span class="synStatement">return</span> Camera.main.ScreenToWorldPoint(pos); }) .Select(pos =&gt; <span class="synStatement">new</span> Vector3(pos.x, pos.y, <span class="synStatement">this</span>.transform.position.z)) .Subscribe(pos =&gt; <span class="synStatement">this</span>.transform.position = pos); } } </pre> <p>これだけで,左クリックからのドラッグが書ける! すごい! ただ,OnMouseDragAsObservable は,右クリックからのドラッグには反応しませんでした.</p> <p>というわけで,右クリック判定のメモ(右クリックのみ)</p> <pre class="code" data-lang="" data-unlink>this.UpdateAsObservable() .Where(_ =&gt; Input.GetMouseButtonDown(1)) // 右クリックの時 .Select(_ =&gt; Camera.main.ScreenPointToRay(Input.mousePosition)) .Select(x =&gt; { RaycastHit rh; var hit = Physics.Raycast(x, out rh); // オブジェクトへの当たり判定 return Tuple.Create(hit, rh); }) .Where(x =&gt; x.Item1 &amp;&amp; x.Item2.collider.gameObject == this.gameObject) // 当たったか,また,あたった対象がこのオブジェクトか .Subscribe(_ =&gt; Debug.Log(&#34;Right!!&#34;)); </pre> rinor Virtualbox の仮想マシンの場所移動 (Windows7) hatenablog://entry/8454420450091393449 2015-04-13T22:17:02+09:00 2015-04-13T22:17:02+09:00 PCの容量足りないから,Virtualboxの仮想マシンを外付けに移動したいと思ってたら, ぴったりの記事を発見. VirtualBoxの仮想マシンフォルダ変更手順メモ - Qiita ここの通りにやったらできた. が,vagrantとの紐づけが壊れてしまった・・・. 移動した後,なんやかんやしてる時に,vagrant init とかしてしまい・・・. どうしよう・・・と思っていたら,これまたぴったりの記事を発見. Vagrantの仮想マシンとの紐付けの直し方 - ウチのメモ ここの通りにやったらできた. ついでに,マイドキュメントいかに作られてるvirtualboxの設定?関係の入ったフォル… <p>PCの容量足りないから,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Virtualbox">Virtualbox</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B2%BE%C1%DB%A5%DE%A5%B7%A5%F3">仮想マシン</a>を外付けに移動したいと思ってたら, ぴったりの記事を発見.</p> <p><a href="http://qiita.com/sugard12/items/8b4f420b3afed79fe003">VirtualBox&#x306E;&#x4EEE;&#x60F3;&#x30DE;&#x30B7;&#x30F3;&#x30D5;&#x30A9;&#x30EB;&#x30C0;&#x5909;&#x66F4;&#x624B;&#x9806;&#x30E1;&#x30E2; - Qiita</a></p> <p>ここの通りにやったらできた.</p> <p>が,<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a>との紐づけが壊れてしまった・・・.</p> <p>移動した後,なんやかんやしてる時に,<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> init とかしてしまい・・・.</p> <p>どうしよう・・・と思っていたら,これまたぴったりの記事を発見.</p> <p><a href="http://elm-arata.hatenablog.com/entry/2013/09/25/175547">Vagrant&#x306E;&#x4EEE;&#x60F3;&#x30DE;&#x30B7;&#x30F3;&#x3068;&#x306E;&#x7D10;&#x4ED8;&#x3051;&#x306E;&#x76F4;&#x3057;&#x65B9; - &#x30A6;&#x30C1;&#x306E;&#x30E1;&#x30E2;</a></p> <p>ここの通りにやったらできた.</p> <p>ついでに,マイドキュメントいかに作られてる<a class="keyword" href="http://d.hatena.ne.jp/keyword/virtualbox">virtualbox</a>の設定?関係の入ったフォルダ「.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Virtualbox">Virtualbox</a>」の場所を移動したい場合は,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>に「VBOX_USER_HOME」を作って,そいつで指定してあげればいいらしいです.</p> rinor Windos7 + Vagrant + virtualbox で,仮想OS(CentOS6.5) 環境構築 hatenablog://entry/8454420450091055727 2015-04-10T19:37:10+09:00 2015-04-11T00:08:29+09:00 各ソフトウェアのバージョン Vagrant: 1.7.2 Virtualbox: 4.3.26 CentOS6.5: A list of base boxes for Vagrant - Vagrantbox.es からほしいのをダウンロード インストール方法 いろんなサイトにあるので割愛 発生した問題 vagrant up で起動しようとすると 「Booting vm...」 ってところで止まる. 解決策 vagrantfile の「config.vm.network "private_network", ip: "192.168.33.10"」を有効にし, 一旦virtualbox 側で仮… <h4>各ソフトウェアのバージョン</h4> <ul> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Vagrant">Vagrant</a>: 1.7.2</p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Virtualbox">Virtualbox</a>: 4.3.26</p></li> <li><p>CentOS6.5: <a href="http://www.vagrantbox.es/">A list of base boxes for Vagrant - Vagrantbox.es</a> からほしいのをダウンロード</p></li> </ul> <h4>インストール方法</h4> <p>いろんなサイトにあるので割愛</p> <h4>発生した問題</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> up で起動しようとすると 「Booting <a class="keyword" href="http://d.hatena.ne.jp/keyword/vm">vm</a>...」 ってところで止まる.</p> <h5>解決策</h5> <p><s>vagrantfile の「config.<a class="keyword" href="http://d.hatena.ne.jp/keyword/vm">vm</a>.network "private_network", ip: "192.168.33.10"」を有効にし,</s> 一旦<a class="keyword" href="http://d.hatena.ne.jp/keyword/virtualbox">virtualbox</a> 側で仮想OSを立ち上げて,すぐにシャットダウン. その後,<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> up すると起動した. なんでや・・・.</p> <p><s>結論:<a class="keyword" href="http://d.hatena.ne.jp/keyword/Virtualbox">Virtualbox</a> で直接立ち上げた後なら,<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> up で立ち上がる. PC起動ごとにやらなきゃダメ. なんでや・・・</s></p> <p>vagrantfile内の</p> <pre class="code" data-lang="" data-unlink>config.vm.provider &#34;virtualbox&#34; do |vb| vb.gui = true vb.memory = &#34;1024&#34; end</pre> <p>を有効にすれば,<a class="keyword" href="http://d.hatena.ne.jp/keyword/vagrant">vagrant</a> up と同時に,仮想OSが<a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a>で立ち上がり,起動することが可能.</p> rinor C# で自分のPCのIPアドレスを取得 hatenablog://entry/8454420450066469723 2014-09-27T19:55:18+09:00 2014-09-27T20:02:18+09:00 // using System.Net; が必要 String hostName = Dns.GetHostName(); // 自身のホスト名を取得 IPAddress[] addresses = Dns.GetHostAddresses(hostName); foreach (IPAddress address in addresses) { // IPv4 のみを追加する if ( address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ) { // こんな感じで,コンボボックスに突っ込んだり //My… <pre class="code" data-lang="" data-unlink>// using System.Net; が必要 String hostName = Dns.GetHostName(); // 自身のホスト名を取得 IPAddress[] addresses = Dns.GetHostAddresses(hostName); foreach (IPAddress address in addresses) { // IPv4 のみを追加する if ( address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ) { // こんな感じで,コンボボックスに突っ込んだり //MyIps.Items.Add(address); } }</pre> rinor OSC ( Open Sound Control ) のライブラリメモ hatenablog://entry/8454420450066357793 2014-09-26T02:09:18+09:00 2014-09-26T02:09:18+09:00 OSC便利! って友人に言ったら「何をいまさら」と冷たくあしらわれました. タンスの角に小指ぶつければいいのに. というわけで,使ってみたOSCのライブラリに関するメモです. C++ oscpack サイト:oscpack - a simple C++ OSC packet manipulation library | Ross Bencina ライセンス: MIT C Bespoke OSC サイト:http://www.bespokesoftware.org/wordpress/?page_id=69 ライセンス: Microsoft Public License (Ms-PL) Unit… <p>OSC便利!<br/> って友人に言ったら「何をいまさら」と冷たくあしらわれました.<br/> タンスの角に小指ぶつければいいのに.</p> <p>というわけで,使ってみたOSCのライブラリに関するメモです.</p> <h5><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a></h5> <ul> <li><p>oscpack</p> <ul> <li><p>サイト:<a href="http://www.rossbencina.com/code/oscpack">oscpack - a simple C++ OSC packet manipulation library | Ross Bencina</a></p></li> <li><p>ライセンス: MIT</p></li> </ul> </li> </ul> <h5>C</h5> <ul> <li><p>Bespoke OSC</p> <ul> <li><p>サイト:<a href="http://www.bespokesoftware.org/wordpress/?page_id=69">http://www.bespokesoftware.org/wordpress/?page_id=69</a></p></li> <li><p>ライセンス: <a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> Public License (Ms-PL)</p></li> </ul> </li> </ul> <h5>Unity (<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>)</h5> <ul> <li><p>unity-osc</p> <ul> <li><p>サイト:<a href="https://github.com/keijiro/unity-osc">https://github.com/keijiro/unity-osc</a></p></li> <li><p>ライセンス: 著者情報等がソフトウェア何に含まれてればよさそう</p></li> <li><p>OSC の受信部分のみ,また,対応する型は,OSCの基本のもののみ</p></li> </ul> </li> </ul> <p>こんだけ揃えば,<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a> で高速に解析したデータをUnityに送ったり,<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>のUIからの制御信号をUnityに送ったりできますね!<br/> 他にも何個か試したけど,使いやすかったのは上記のものでした.<br/> なんか他にいいのがあったら,ぜひ教えてください.</p> <p>ちなみに, <a href="http://opensoundcontrol.org/implementations">opensoundcontrol.org</a> に,OSCのライブラリがたくさん載っています.<br/> 他のライブラリを探すときは,上記サイトを参考にするといいかもしれません.</p> rinor OSC ( Open Sound Control ) の C++ ライブラリ oscpack を使ってみた hatenablog://entry/12921228815733480226 2014-09-23T21:33:57+09:00 2014-09-24T00:59:24+09:00 OSC ( Open Sound Control ) とは,PC等において音楽演奏データをネットワーク経由でリアルタイムに共有するための通信プロトコルなわけですが,それを使ってみたくなって,いろいろライブラリを探したところ,oscpack というのがよさそうとのことで,早速ダウンロードしてみました. OSC に関する詳しい情報はgoogle先生に聞くといっぱいでてくると思います. が,さらっと私の理解を書いておくと, 基本はUDP通信 送信する情報の形式は以下の様な感じ /aaa/bbb/ccc 123 0.5 "へろー" OSC Message: 上のアルファベットの部分ね aaa を起点に… <p>OSC ( Open Sound Control ) とは,PC等において音楽演奏データをネットワーク経由でリアルタイムに共有するための<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%CC%BF%AE%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB">通信プロトコル</a>なわけですが,それを使ってみたくなって,いろいろライブラリを探したところ,oscpack というのがよさそうとのことで,早速ダウンロードしてみました.</p> <p>OSC に関する詳しい情報は<a class="keyword" href="http://d.hatena.ne.jp/keyword/google%C0%E8%C0%B8">google先生</a>に聞くといっぱいでてくると思います.<br/> が,さらっと私の理解を書いておくと,</p> <ul> <li><p>基本は<a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a>通信</p></li> <li><p>送信する情報の形式は以下の様な感じ</p> <ul> <li><p>/aaa/bbb/ccc 123 0.5 "へろー"</p> <ul> <li><p>OSC Message: 上のアルファベットの部分ね</p></li> <li><p>aaa を起点にした階層構造になってる</p></li> <li><p>受け手はこの情報を元に,どの変数なりオブジェクトに値を渡すか判断すればよい</p></li> <li><p>要はアドレス</p></li> </ul> </li> <li><p>OSC Argment: 後半の数字や文字列の部分ね</p> <ul> <li>OSC Message で示されたアドレスに渡す値,何個でもOK (まぁ,実装次第だが)</li> </ul> </li> </ul> </li> </ul> <p>独自の取り決めで送受信するよりも,OSC に従った方が,メンテしやすいし,他人の書いたプログラムとの連携も録りやすいってのがメリットかなぁ.</p> <p>さて,こっからがoscpackについてです. oscpackには,<a class="keyword" href="http://d.hatena.ne.jp/keyword/UDP">UDP</a>送受信,送信情報を一つにまとめるための関数,受信した情報からOSC Message や OSC Argment をパースする関数等が含まれています.<br/> ですので,後は,送信側と受信側で OSC Message を取り決め,パース後の挙動を書けばいいわけです.</p> <p>oscpack のダウンロードは oscpack のホームページから可能です.<br/> <a href="http://www.rossbencina.com/code/oscpack">http://www.rossbencina.com/code/oscpack</a><br/> ライセンスはMITだそうです.</p> <p>OSは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/windows">windows</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/linux">linux</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a> をサポートしているようで,私は <a class="keyword" href="http://d.hatena.ne.jp/keyword/windows7">windows7</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/visual%20studio">visual studio</a> 2010 で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>しました.<br/> vs2010 での<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>方法は,ダウンロードして解凍したフォルダに含まれるREADMEに書いてあります. といっても,下記のコマンドを実行するだけ.</p> <pre class="code" data-lang="" data-unlink>cmake -G &#34;Visual Studio 10&#34;</pre> <p>コマンドを実行してできた TestOscpack.sln をビルドすれば,oscpack.lib やサンプルが出来上がります.</p> <p>試に,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>からOSCDump.exe を起動し,vs2010の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>から SimpleSend を行うと,挙動が分かりやすいと思います.</p> <p>OSCでは,基本的には,bool や double のデータは扱わないようになっているみたいですが,oscpackではそのあたりも扱ってくれるようです. ただし,他のライブラリが必ずしもサポートしているとは限らないため,別プログラムとの通信の際には注意が必要です. どういった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0">データ形式</a>が使用できるか等は,下記のサイトを見るのがよいと思います.<br/> <a href="http://veritas-vos-liberabit.com/trans/OSC/OSC-spec-1_0.html">http://veritas-vos-liberabit.com/trans/OSC/OSC-spec-1_0.html</a></p> <p>ところで,OSCって数値配列とかって対応してないんでしょうか・・・? この辺,まだ調べ切れてないや・・・. ちゃうちゃう,byte[]にして送ればええんやーーーーーーー.(自己解決</p> rinor Unityの立方体のuvをいじくる hatenablog://entry/12921228815729827680 2014-08-12T09:05:45+09:00 2014-08-12T09:05:45+09:00 Visual Studio Tools for Unity 1.9 公開されましたね. UnityのC#がVisual studio で書けるってすばらしい. えっ? Express edition では使えない!? (゚д゚)! orz 気を取り直して,今日の本題です. Unity の立方体の各面に,それぞれ別の絵を表示させたい時ってありすよね. 例えば,サイコロとか. 別のソフトで,テクスチャ込の立方体モデルを作ってそれを読み込ませるのが順当な手だとは思うんですが,それはめんどくさい o(`ω´*)oプンスカプンスカ!! というわけで,C#でメッシュのuvをいじってなんとかしてみたいと… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Visual%20Studio">Visual Studio</a> Tools for Unity 1.9 公開されましたね.<br/> Unityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Visual%20studio">Visual studio</a> で書けるってすばらしい.<br/> えっ? Express edition では使えない!? (゚д゚)!</p> <p>orz</p> <p>気を取り直して,今日の本題です. Unity の立方体の各面に,それぞれ別の絵を表示させたい時ってありすよね.<br/> 例えば,サイコロとか.<br/> 別のソフトで,テクスチャ込の立方体モデルを作ってそれを読み込ませるのが順当な手だとは思うんですが,それはめんどくさい o(`ω´*)oプンスカプンスカ!!<br/> というわけで,<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>でメッシュのuvをいじってなんとかしてみたいと思います.<br/> (そっちのがめんどくさいだろというツッコミはスルー</p> <p>UnityのCubeは六面体,当然ですが,面が6個あります. その面は4つの頂点を持っており,それぞれの面の頂点を別物ととらえると6x4=24個の頂点があります.<br/> この24頂点のuv値を,表示させたい画像に合わせて変更してあげればいいわけです.</p> <p>それぞれの頂点は,下図のような関係にあると思われます.<br/> (まちがってたらごめんんさい </p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinor/20140808/20140808161155.png" alt="f:id:rinor:20140808161155p:plain" title="f:id:rinor:20140808161155p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>この図を参考に,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>上で,gameObjectから取得したメッシュのUVを書き換えてあげればOKです.<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>は以下のような感じにして,下記のようなサイコロ画像を読み込ませればたぶん大丈夫です.</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinor/20140808/20140808164621.png" alt="f:id:rinor:20140808164621p:plain" title="f:id:rinor:20140808164621p:plain" class="hatena-fotolife" itemprop="image"></span></p> <pre class="code" data-lang="" data-unlink> using UnityEngine; public class UVChange : MonoBehaviour { Vector2[] uv = new Vector2[24]; void Awake() { // 1の面 uv[2].x = 0.0f; uv[2].y = 0.0f; uv[3].x = 1.0f / 6.0f; uv[3].y = 0.0f; uv[0].x = 0.0f; uv[0].y = 1.0f; uv[1].x = 1.0f / 6.0f; uv[1].y = 1.0f; // 2の面 uv[4].x = 1.0f / 6.0f; uv[4].y = 0.0f; uv[5].x = 2.0f / 6.0f; uv[5].y = 0.0f; uv[8].x = 1.0f / 6.0f; uv[8].y = 1.0f; uv[9].x = 2.0f / 6.0f; uv[9].y = 1.0f; // 3の面 uv[23].x = 2.0f / 6.0f; uv[23].y = 0.0f; uv[21].x = 3.0f / 6.0f; uv[21].y = 0.0f; uv[20].x = 2.0f / 6.0f; uv[20].y = 1.0f; uv[22].x = 3.0f / 6.0f; uv[22].y = 1.0f; // 4の面 uv[19].x = 3.0f / 6.0f; uv[19].y = 0.0f; uv[17].x = 4.0f / 6.0f; uv[17].y = 0.0f; uv[16].x = 3.0f / 6.0f; uv[16].y = 1.0f; uv[18].x = 4.0f / 6.0f; uv[18].y = 1.0f; // 5の面 uv[15].x = 4.0f / 6.0f; uv[15].y = 0.0f; uv[13].x = 5.0f / 6.0f; uv[13].y = 0.0f; uv[12].x = 4.0f / 6.0f; uv[12].y = 1.0f; uv[14].x = 5.0f / 6.0f; uv[14].y = 1.0f; // 6の面 uv[6].x = 5.0f / 6.0f; uv[6].y = 0.0f; uv[7].x = 6.0f / 6.0f; uv[7].y = 0.0f; uv[10].x = 5.0f / 6.0f; uv[10].y = 1.0f; uv[11].x = 6.0f / 6.0f; uv[11].y = 1.0f; } // Use this for initialization void Start() { MeshFilter mf = gameObject.GetComponent&lt;MeshFilter&gt;(); mf.mesh.uv = uv; } // Update is called once per frame void Update() { } }</pre> rinor The Killing Pawn 感想 hatenablog://entry/12921228815729721146 2014-08-07T04:59:54+09:00 2014-08-07T04:59:54+09:00 私は漫画が大好きで,毎週少年誌を買っていて,今週も当然マガジンを購入したのですが,そこに載っていた読み切りがすごく衝撃的でした. 読み切りのタイトルは「The Killing Pawn」 ARMSの皆川先生作画,進撃の巨人の諌山先生原作の将棋バトル漫画だそうです. 以下,ネタバレを含む可能性があります. ( ゚д゚)ポカーン ←読み終わった時の顔 将棋バトルってそういう意味!? らんま1/2の○○格闘術的な!? 将棋というか,将棋使いやん! (バレーボール使いみたいな感じで 完全にテニプリ路線. そして泣くようぐいす的なオチ ぶっちゃけ面白かったです. 面白かったですけど,わらったら負けな気… <p>私は漫画が大好きで,毎週少年誌を買っていて,今週も当然マガジンを購入したのですが,そこに載っていた読み切りがすごく衝撃的でした.<br/> 読み切りのタイトルは「The Killing Pawn」<br/> ARMSの皆川先生作画,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%CA%B7%E2%A4%CE%B5%F0%BF%CD">進撃の巨人</a>の諌山先生原作の将棋バトル漫画だそうです.</p> <p>以下,ネタバレを含む可能性があります.</p> <p>( ゚д゚)ポカーン ←読み終わった時の顔<br/> 将棋バトルってそういう意味!?<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%E9%A4%F3%A4%DE1/2">らんま1/2</a>の○○格闘術的な!?<br/> 将棋というか,将棋使いやん! (バレーボール使いみたいな感じで<br/> 完全に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C6%A5%CB%A5%D7%A5%EA">テニプリ</a>路線.<br/> そして<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%E3%A4%AF%A4%E8%A4%A6%A4%B0%A4%A4%A4%B9">泣くようぐいす</a>的なオチ</p> <p>ぶっちゃけ面白かったです.</p> <p>面白かったですけど,わらったら負けな気がするのは,なぜでしょうか・・・.</p> <p>(´ε`;)ウーン…</p> <p>なんかこう,笑わせようとしてるのが見え見えの展開で笑ってしまうのが,すごく悔しいというか,なんというか・・・.</p> <p>とにもかくにも面白いには違いないので,読んでない人は読んでみるといいと思います. ギャグ漫画系の読み切りの中では,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DC%A1%BC%A5%DC%A5%DC">ボーボボ</a>の読み切りの次に笑いました<br/> アッヒャッヒャ!ヽ(゚∀゚)ノアッヒャッヒャ!</p> <p>それはそうと,マガジンの新連載面白そう( ^ω^)ワクワク</p> rinor あえてAnacondaに頼らないpythonインストール hatenablog://entry/12921228815729528504 2014-08-07T04:12:37+09:00 2014-08-07T04:12:37+09:00 windowsにpythonをインストールする時って,Anacondaが便利ですよね. でも,Anacondaじゃ上手くいかない時もあるんです! というか,あったんです・・・. まぁ,めったにないとは思いますが,そんな時のためにpythonのインストール方法をメモメモ! python, easy_install, pip, ipython までを入れたいと思います! python 本体のインストール python のホームページから最新版のインストーラをダウンロードします. 私の場合は,python2.7.8 でした. インストール終了後,環境変数の設定を行います. ユーザ環境変数のパスに C… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/windows">windows</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>をインストールする時って,Anacondaが便利ですよね.<br/> でも,Anacondaじゃ上手くいかない時もあるんです!<br/> というか,あったんです・・・.</p> <p>まぁ,めったにないとは思いますが,そんな時のために<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>のインストール方法をメモメモ!<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>, easy_install, pip, ipython までを入れたいと思います!</p> <h1><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> 本体のインストール</h1> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> のホームページから最新版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%E9">インストーラ</a>をダウンロードします.<br/> 私の場合は,python2.7.8 でした.</p> <p>インストール終了後,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>の設定を行います. ユーザ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>のパスに</p> <pre class="code" data-lang="" data-unlink>C:\Python27;C:\Python27\Scripts</pre> <p>と入れてあげます.<br/> 別のディレクトリに<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>が入っている場合は,C:\Python27の部分をインストールディレクトリに読み替えてください.</p> <h1>pip のインストール</h1> <p>pipは,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>上から<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>パッケージをインストールする<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB">ツール</a>のようです.<br/> apt-getの<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>版みたいなものでしょうか?<br/> pipをインストールするには,easy_install という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB">ツール</a>を使います. では,まずeasy_install をインストールしましょう. <a class="keyword" href="http://d.hatena.ne.jp/keyword/windows7">windows7</a>の場合は,<a href="https://pypi.python.org/pypi/setuptools#windows-7-or-graphical-install">こちら</a>のページから,ez_setup.py をダウンロードしてきて実行します.</p> <pre class="code" data-lang="" data-unlink>python ez_setup.py</pre> <p>続いて,pipのインストールです.</p> <pre class="code" data-lang="" data-unlink>easy_install pip</pre> <p>たったこれだけ.<br/> この時,うまくインストールされない場合は,別バージョンのpipが残っていたりする場合があるので,エラーメッセージに表示されているディレクトリをポイしちゃいましょう.<br/> たぶん,これで大丈夫です.たぶん.</p> <h1>ipython のインストール</h1> <p>補完機能が強力で対話的にコードが書けるipython を入れます.</p> <pre class="code" data-lang="" data-unlink>pip install ipython[all] --upgrade</pre> <p>こうしておけば,ipythonを使うのに必要なあれやこれやを全てインストールしてくれる・・・と思います.</p> rinor 別ディレクトリのパッケージをimportするには? hatenablog://entry/12921228815729483887 2014-08-04T04:59:17+09:00 2014-08-04T04:59:17+09:00 python がすごく便利だと友人から進められて勉強しだしたものの,なかなか覚えられません... しばらくは,このブログがメモ代わりになりそうです. 閑話休題. ディレクトリAの中に,ディレクトリB, C があるとします. 今,Bの中にいるとして,C内のcc.py にアクセスしたいとき,普通にアクセスしようとすると何か怒られてしまいます. 下記のコードのようにすればいいようです. import sys, os sys.path.append(os.pardir) # 親ディレクトリをpythonパスを追加 from C import cc これで,うまく行く!と思いきや,ipython not… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> がすごく便利だと友人から進められて勉強しだしたものの,なかなか覚えられません...<br/> しばらくは,このブログがメモ代わりになりそうです.</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%D7%CF%C3%B5%D9%C2%EA">閑話休題</a>.</p> <p>ディレクトリAの中に,ディレクトリB, C があるとします. <br/> 今,Bの中にいるとして,C内のcc.py にアクセスしたいとき,普通にアクセスしようとすると何か怒られてしまいます.</p> <p>下記のコードのようにすればいいようです.</p> <pre class="code lang-python" data-lang="python" data-unlink><span class="synPreProc">import</span> sys, os sys.path.append(os.pardir) <span class="synComment"># 親ディレクトリをpythonパスを追加</span> <span class="synPreProc">from</span> C <span class="synPreProc">import</span> cc </pre> <p>これで,うまく行く!と思いきや,ipython notebook で実行してみるとまた怒られちゃいました.<br/> 原因は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>のcellの内,どれかが未実行で最新になってなかったからなような,ちがうような・・・? <br/> 何度か実行してたらうまくいったので,たぶん上記の方法で大丈夫だと思うんですが,やはり<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>の勉強不足感が否めません・・・.</p> rinor ipython notebook を html に吐き出してブログ記事に張り付ける hatenablog://entry/12921228815729475049 2014-08-03T23:15:38+09:00 2014-08-03T23:27:13+09:00 ipython 便利ですよね. notebook を使うとさらに便利ですよね. それをブログ記事に張り付けられたら,楽ちんですよね! というわけで,調べてみました. ipython nbconvert --to html GmmMethods.ipynb --template basic たったこれだけ! あとは,できたhtmlファイルの内容をコピーして,ブログの記事を書くところに張り付けてあげれば,下記のような感じで表示されます. ただ,画像とかはやっぱり表示されないんで,そのあたりは何か手を考えないとです. もっと言えば,コピペすらめんどくさいです. もっといい方法ないんでしょうか??? … <p>ipython 便利ですよね. <br/> notebook を使うとさらに便利ですよね. <br/> それをブログ記事に張り付けられたら,楽ちんですよね!</p> <p>というわけで,調べてみました.</p> <pre class="code" data-unlink>ipython nbconvert --to html GmmMethods.ipynb --template basic</pre> <p>たったこれだけ! <br/> あとは,できたhtmlファイルの内容をコピーして,ブログの記事を書くところに張り付けてあげれば,下記のような感じで表示されます. <br/> ただ,画像とかはやっぱり表示されないんで,そのあたりは何か手を考えないとです. <br/> もっと言えば,コピペすらめんどくさいです. <br/> もっといい方法ないんでしょうか???</p> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">&nbsp;</div><div class="inner_cell"><div class="text_cell_render border-box-sizing rendered_html"><h1 id="gmm-etc-">GMM 学習・尤度計算・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a> etc.</h1></div></div></div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">&nbsp;</div><div class="inner_cell"><div class="text_cell_render border-box-sizing rendered_html"><h2 id="-">共通インポート</h2></div></div></div> <div class="cell border-box-sizing code_cell rendered"><div class="input"><div class="prompt input_prompt">In&nbsp;[4]:</div><div class="inner_cell"><div class="input_area"><div class="highlight"><pre><span class="c">#coding:<a class="keyword" href="http://d.hatena.ne.jp/keyword/utf-8">utf-8</a></span> <span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">dtype</span><span class="p">,</span> <span class="n">fromfile</span><span class="p">,</span> <span class="n">diag</span> <span class="kn">from</span> <span class="nn">sklearn.mixture</span> <span class="kn">import</span> <span class="n">GMM</span> <span class="kn">from</span> <span class="nn">sklearn.externals</span> <span class="kn">import</span> <span class="n">joblib</span> <span class="kn">import</span> <span class="nn">pylab</span> <span class="kn">as</span> <span class="nn">pl</span> <span class="kn">import</span> <span class="nn">matplotlib</span> <span class="kn">as</span> <span class="nn">mpl</span> <span class="kn">from</span> <span class="nn">pylab</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">import</span> <span class="nn"><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a></span><span class="o">,</span> <span class="nn">codecs</span> </pre></div></div></div></div></div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">&nbsp;</div><div class="inner_cell"><div class="text_cell_render border-box-sizing rendered_html"><h2 id="-">バイナリファイル読み込み</h2><p>バイナリファイルを読み込んでNumpy.arrayに格納する関数です.<br>col次元のデータをrowフレーム分読み込みます.<br>arrayには,array[row][col] とう形で保存されます.</p></div></div></div> <div class="cell border-box-sizing code_cell rendered"><div class="input"><div class="prompt input_prompt">In&nbsp;[1]:</div><div class="inner_cell"><div class="input_area"><div class="highlight"><pre><span class="k">def</span> <span class="nf">ReadData</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">dim</span> <span class="o">=</span> <span class="mi">24</span><span class="p">,</span> <span class="n">dtype</span> <span class="o">=</span> <span class="s">"&lt;d8"</span><span class="p">):</span> <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">'rb'</span><span class="p">)</span> <span class="n">data</span> <span class="o">=</span> <span class="n">fromfile</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">dtype</span><span class="p">)</span> <span class="n">row</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">size</span> <span class="o">/</span> <span class="n">dim</span> <span class="n">data</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">dim</span><span class="p">)</span> <span class="k">return</span> <span class="n">data</span> </pre></div></div></div></div></div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">&nbsp;</div><div class="inner_cell"><div class="text_cell_render border-box-sizing rendered_html"><h2 id="gmm-json-">GMMを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Json">Json</a>に吐き出す</h2></div></div></div> <div class="cell border-box-sizing code_cell rendered"><div class="input"><div class="prompt input_prompt">In&nbsp;[24]:</div><div class="inner_cell"><div class="input_area"><div class="highlight"><pre><span class="k">def</span> <span class="nf">Gmm2Json</span><span class="p">(</span><span class="n">gmm</span><span class="p">,</span> <span class="n">jsonFile</span><span class="p">):</span> <span class="kn">import</span> <span class="nn"><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a></span><span class="o">,</span> <span class="nn">codecs</span> <span class="kn">import</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="nn">locale</span> <span class="n">d</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">today</span><span class="p">()</span> <span class="k">print</span> <span class="s">'d == </span><span class="si">%s</span><span class="s"> : </span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> <span class="n">f</span> <span class="o">=</span> <span class="n">codecs</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">jsonFile</span><span class="p">,</span> <span class="s">"w"</span><span class="p">,</span> <span class="s">"<a class="keyword" href="http://d.hatena.ne.jp/keyword/utf-8">utf-8</a>"</span><span class="p">)</span> <span class="n"><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a></span><span class="o">.</span><span class="n">dump</span><span class="p">(</span> <span class="p">{</span> <span class="s">"n_components"</span><span class="p">:</span> <span class="n">gmm</span><span class="o">.</span><span class="n">n_components</span><span class="p">,</span> <span class="s">"covariance_type"</span><span class="p">:</span> <span class="n">gmm</span><span class="o">.</span><span class="n">covariance_type</span><span class="p">,</span> <span class="s">"params"</span><span class="p">:</span> <span class="p">{</span> <span class="s">"weight"</span><span class="p">:</span> <span class="n">gmm</span><span class="o">.</span><span class="n">weights_</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="s">"mean"</span><span class="p">:</span> <span class="n">gmm</span><span class="o">.</span><span class="n">means_</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="s">"covariance"</span><span class="p">:</span> <span class="n">model</span><span class="o">.</span><span class="n">covars_</span><span class="o">.</span><span class="n">tolist</span><span class="p">(),</span> <span class="p">}</span> <span class="p">}</span> <span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">indent</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="n">sort_keys</span> <span class="o">=</span> <span class="bp">False</span> <span class="p">)</span> </pre></div></div></div></div></div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">&nbsp;</div><div class="inner_cell"><div class="text_cell_render border-box-sizing rendered_html"><h2 id="test">Test</h2></div></div></div> <div class="cell border-box-sizing code_cell rendered"><div class="input"><div class="prompt input_prompt">In&nbsp;[25]:</div><div class="inner_cell"><div class="input_area"><div class="highlight"><pre><span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span> <span class="n">data</span> <span class="o">=</span> <span class="n">ReadData</span><span class="p">(</span><span class="s">"../wav/p003.mcep"</span><span class="p">,</span> <span class="n">dim</span> <span class="o">=</span> <span class="mi">24</span><span class="p">,</span> <span class="n">dtype</span> <span class="o">=</span> <span class="s">"&lt;d8"</span><span class="p">)</span> <span class="k">print</span> <span class="n">data</span><span class="o">.</span><span class="n">shape</span> <span class="n">model</span> <span class="o">=</span> <span class="n">GMM</span><span class="p">(</span><span class="n">n_components</span> <span class="o">=</span> <span class="mi">16</span><span class="p">,</span> <span class="n">covariance_type</span> <span class="o">=</span> <span class="s">'diag'</span><span class="p">,</span> <span class="n">random_state</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">thresh</span> <span class="o">=</span> <span class="mf">1e-2</span><span class="p">,</span> <span class="n">min_covar</span> <span class="o">=</span> <span class="mf">1e-3</span><span class="p">,</span> <span class="n">n_<a class="keyword" href="http://d.hatena.ne.jp/keyword/iter">iter</a></span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span> <span class="n">n_init</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="s">'wmc'</span><span class="p">,</span> <span class="n">init_params</span> <span class="o">=</span> <span class="s">'wmc'</span><span class="p">)</span> <span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="n">Gmm2Json</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="s">"test.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>"</span><span class="p">)</span> <span class="c">#joblib.dump(model, "model.gmm", compress = 0)</span> <span class="n">imshow</span><span class="p">(</span><span class="n">diag</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">covars_</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">cmap</span> <span class="o">=</span> <span class="s">'spectral'</span><span class="p">)</span> <span class="n">show</span><span class="p">()</span> </pre></div></div></div></div><div class="output_wrapper"><div class="output"><div class="output_area"><div class="prompt">&nbsp;</div><div class="output_subarea output_stream output_stdout output_text"><pre>(3645, 24) d == 2014-08-03 00:38:17.329000 : &lt;type 'datetime.datetime'&gt; </pre></div></div><div class="output_area"><div class="prompt">&nbsp;</div><div class="output_png output_subarea ">&nbsp;</div></div></div></div></div> <div class="cell border-box-sizing code_cell rendered"><div class="input"><div class="prompt input_prompt">In&nbsp;[]:</div><div class="inner_cell">&nbsp;</div></div></div> rinor はじめまして hatenablog://entry/12921228815729473412 2014-08-03T22:52:12+09:00 2014-08-03T23:01:18+09:00 はじめまして. りのと言います. 音声信号処理や統計に興味があって,そのあたりで勉強したことを綴っていこうと思います. まだまだ勉強を始めたばかりで,間違ったことを書くことも多いかもしれません. もし記事の内容に間違いがございましたら,ご指摘いただければ幸いです. <p>はじめまして. りのと言います.</p> <p>音声信号処理や統計に興味があって,そのあたりで勉強したことを綴っていこうと思います.</p> <p>まだまだ勉強を始めたばかりで,間違ったことを書くことも多いかもしれません. もし記事の内容に間違いがございましたら,ご指摘いただければ幸いです.</p> rinor