tag:blogger.com,1999:blog-57841213807031289192024-03-05T17:30:50.696+09:00yさんのまったりブログとあるIT企業エンジニアのノート的ブログ.プログラミング,サーバ管理,その他諸々.Twitterは@hiroykyです.Unknownnoreply@blogger.comBlogger40125tag:blogger.com,1999:blog-5784121380703128919.post-28968057566829317822016-09-18T00:37:00.000+09:002016-09-27T01:39:55.645+09:00CentOS7でOpenStackをAll in oneで構成した<h2>
はじめに</h2>
自宅のサーバ上にOpenStack環境がほしいと思い構築しました。AWSなどをレンタルするのではなく,自宅の物理マシン上にOpenStackがあれば便利です.<br />
サーバ構成は以下の通り<br />
<br />
<ul>
<li>CentoOS7</li>
<li>Core i7 Skylake</li>
<li>32GB RAM</li>
<li>HDD 2TB</li>
</ul>
<h2>
OSのセットアップ</h2>
<div>
CentOS7 x86_64を新規にセットアップしました.手順通り最小構成でインストールします.気をつけることは次の1点のみ</div>
<div>
<ul>
<li>固定IPアドレスにする(インストール後に変更も可能)</li>
</ul>
<div>
構築後はSSHログインの設定をしたり,`sudo apt-get install emacs net-tools sysstat`などしたりです.</div>
</div>
<br />
<br />
<h2>
OpenStackの構築</h2>
基本的にはこのページの通り進めていきました.RDOというCentOSなどにかんたんなOpenStackの構築を提供します.<br />
<a href="https://www.rdoproject.org/install/quickstart/">https://www.rdoproject.org/install/quickstart/</a><br />
<br />
ただし,ネットワークの設定をするために,Step3の`<span style="color: inherit; font-family: "menlo" , "monaco" , "consolas" , "courier new" , monospace; font-size: inherit; white-space: pre-wrap;">$ packstack --allinone</span>`を実行する前に次のページを確認しましょう.こちらの手順に従ってすすめていきました。<br />
<a href="https://www.rdoproject.org/networking/neutron-with-existing-external-network/">https://www.rdoproject.org/networking/neutron-with-existing-external-network/</a><br />
<br />
<span style="background-color: white;"><i><span style="color: #333333; font-family: "lato" , sans-serif;"><span style="font-size: 14px;">多くの人々が'packstack allinone'で既存の外部ネットワークを使った構築をどうやって使うのか疑問に思ってきました.こちらで紹介する方法で同一ネットワーク上のどのマシンもfloating IPを介して起動中のインスタンスにアクセスできるようになります. "Many people have asked how to use packstack –allinone with an existing external network. This method should allow any machine on the network to be able to access launched instances via their floating IPs.</span></span></i></span><br />
<br />
<h2>
その他のトラブル</h2>
<h3>
ドメインでdashboard(horizon)につながらない。</h3>
<div>
最初はhttp://192.168.../dashboardとIPアドレスをWebブラウザに入力してアクセスしていました。しかしせっかくなのでドメインを割り当ててアクセスするようにしました。しかし、Openstackのdashboardではなく、apacheの空白ページが表示されてしまいます。これは次のように解決しました。</div>
<div>
<ol>
<li>/etc/httpd/conf.d/15-horizon_vhost.confを開く</li>
<li>ServerAliasを追加する</li>
</ol>
<div>
<h2>
参考にした書籍</h2>
</div>
</div>
<div>
<ul>
<li><a href="http://amzn.to/2cypwM9" target="_blank">「オープンソース・クラウド基盤 OpenStack入門 構築・利用方法から内部構造の理解まで」</a> 具体的なAll In Oneでの構築の操作方法も紹介されています.今回は直接参考にしませんでしたが,各コンポーネントの役割を知るために一読しました.</li>
</ul>
</div>
<hr />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00KMHSJ7M&linkId=69c1daa3528c155ce510fa5de95dbb90" style="height: 240px; width: 120px;"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-39452100800859083302016-07-06T03:09:00.000+09:002016-09-13T00:25:29.599+09:00Windows10でWiiリモコンを使うために wiiuse<h2>
Windows10とWiiリモコンをインターフェイス</h2>
<div>
今更感のある話題ですが、Windows10のPCとWiiリモコンをインターフェイスをして,アプリの開発をしたいと思い立ちました。Wiiリモコンとのインターフェイスのためのツールはいくつかあるようですが、今回は<a href="https://github.com/rpavlik/wiiuse" target="_blank">wiiuse</a>というものを使います。理由は2つ</div>
<div>
<ul>
<li>C言語で提供されている.</li>
<li>Windows, Mac, Linuxでビルド・利用ができる.</li>
<li>従って,特定のプラットフォームに依存することなく自分の開発するプログラムに組み込むことができそう。</li>
<li>Githubでstarが多い(←結構てきとう)</li>
</ul>
<h3>
ビルド</h3>
</div>
<div>
ともかくまずはビルドしてみることにしました。README.mdの手順に従います。</div>
<div>
まずは、Visuals Studio 2015はもちろんですが、<a href="https://cmake.org/" target="_blank">CMake</a>と<a href="https://developer.microsoft.com/en-us/windows/hardware/download-kits-windows-hardware-development" target="_blank">WDK</a>をが必要です。</div>
<div>
<br /></div>
<div>
CMakeでビルドプロジェクトを作成しようとすると、WINHIDの設定がなされていませんでした。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBiF22JkaXsNgzoD9DUza-YVLsJYfEZRUb4B784rF9ZYmEtCGG6Jxwvs048UUJ3aPdFlB44trfybuOpI8FRo1OMHKIZpp2zuxiGMVuQCRUjYVitjS7L1kd5PaYchOqLKfPV880GrKzXaVx/s1600/2016-07-06+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBiF22JkaXsNgzoD9DUza-YVLsJYfEZRUb4B784rF9ZYmEtCGG6Jxwvs048UUJ3aPdFlB44trfybuOpI8FRo1OMHKIZpp2zuxiGMVuQCRUjYVitjS7L1kd5PaYchOqLKfPV880GrKzXaVx/s400/2016-07-06+%25281%2529.png" width="351" /></a></div>
<div>
きっとWindows Driver Develop Kit(DDK)に付属したライブラリやインクルードディレクトリが見つけられなかったんだろうなぁ。。</div>
<div>
CMakeでWINHIDの探索を定義した<a href="https://github.com/rpavlik/wiiuse/blob/master/cmake/FindWinHID.cmake#L61" target="_blank">FindWinHID.cmake</a>を確認すると<br />
<br /></div>
<pre class="brush: text">set(WINHID_ROOT_DIR "$ENV{DDKROOT}")
</pre>
<br />
とあるように環境変数DDKROOT以下を探していますが、そもそもDDKROOTという環境変数は定義されていません。一方で、次のようにhid.libというライブラリを探索しています。<br />
<br />
<pre class="brush: text">find_library(WINHID_LIBRARY
NAMES
hid
libhid
HINTS
"${WINHID_ROOT_DIR}"
・・・
</pre>
そこで、エクスプローラからhid.libを検索してみました。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRvukMfDrdfAAi-cgDz_LafmcfXmmpafy57y79A9Qjz-V61O-j2wjkghyphenhyphenR3Lieadc58Srz-pAZBMlG1thQy16KrJdX-A6zRDsYG_XWLqNbD2vKgBhRjNvb51U5wMYGSN_R6Hm7Hxx49ORh/s1600/2016-07-06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="385" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRvukMfDrdfAAi-cgDz_LafmcfXmmpafy57y79A9Qjz-V61O-j2wjkghyphenhyphenR3Lieadc58Srz-pAZBMlG1thQy16KrJdX-A6zRDsYG_XWLqNbD2vKgBhRjNvb51U5wMYGSN_R6Hm7Hxx49ORh/s400/2016-07-06.png" width="400" /></a></div>
見つけたーーー!複数個所で見つけていますが、「C:\Program Files (x86)\Windows Kits\10\Lib\10.0.xxxx\um\x64」が妥当なのでしょうか。
ということは、、同じように探していって、、
<br />
<ul>
<li>WINHID_LIBRARY: C:\Program Files (x86)\Windows Kits\10\Lib\10.0.xxxx\um\x64\hid.lib</li>
<li>WINHID_INCLUDE_DIR: C:\Program Files (x86)\Windows Kits\10\Include\10.0.xxxx\shared</li>
<li>WINHID_CRT_INCLUDE_DIR: C:\Program Files (x86)\Windows Kits\10\Include\10.0.xxxx\ucrt</li>
<li>WINHID_ROOT_DIR: null (空白のまま)</li>
</ul>
<div>
(um, kmについてはおそらく<a href="https://msdn.microsoft.com/ja-jp/library/windows/hardware/ff554652(v=vs.85).aspx" target="_blank">ドライバー モデルの選択</a>に書いてある通りだと思う。)</div>
<div>
そしてCmakeで「Configure」ボタンを押すと今度は次のメッセージが<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn3os_m-K38wQ9yMDzOU0kYrqUjFi0yiVUxr2K1uq_mFOEUHXhtGVu7FEwVuVgPY9_Nu44EqvK25v8WsTKfOivOnUEy3Wyl4pRHAOPGJLkih0bMTpgW6SW8CwDpM9gqTkL6SFcpjQ4lOT_/s1600/2016-07-06+%25282%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn3os_m-K38wQ9yMDzOU0kYrqUjFi0yiVUxr2K1uq_mFOEUHXhtGVu7FEwVuVgPY9_Nu44EqvK25v8WsTKfOivOnUEy3Wyl4pRHAOPGJLkih0bMTpgW6SW8CwDpM9gqTkL6SFcpjQ4lOT_/s400/2016-07-06+%25282%2529.png" width="351" /></a></div>
SDLもいるのか。。<a href="https://www.libsdl.org/index.php" target="_blank">公式サイト</a>からVisualStudio向けのdevelパッケージをダウンロードします。展開して適切なディレクトリにおいてやります。(C:\usr以下がいいかな。)<br />
で、それぞれINCLUDEとLIBRARYを定義します。SDL_LIBRARY_TEMPについては、FindSDL.cmakeに<br />
<br />
<br /></div>
<pre class="brush: text"># Additional Note: If you see an empty SDL_LIBRARY_TEMP in your
# configuration and no SDL_LIBRARY, it means CMake did not find your SDL
# library (SDL.dll, libsdl.so, SDL.framework, etc). Set
# SDL_LIBRARY_TEMP to point to your SDL library, and configure again.
</pre>
と書いてあるので、LIBRARYのディレクトリを指定してやりましょう。
<br />
<br />
これでようやくよさげ??(こういうときWindowsは面倒くさい)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAgBy2wGqBj7uXejXBTc88jjnZx0NB7L90G2o9sugavCFrByhYd94m-DuAvF7FTMKjy4ajS-beDo46uXKcaz89XEeJ6jsVxunrY-2kqqJrFgfC-n0yjHQRMOeD-chWonQDdTPynsPAD-am/s1600/2016-07-06+%25283%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAgBy2wGqBj7uXejXBTc88jjnZx0NB7L90G2o9sugavCFrByhYd94m-DuAvF7FTMKjy4ajS-beDo46uXKcaz89XEeJ6jsVxunrY-2kqqJrFgfC-n0yjHQRMOeD-chWonQDdTPynsPAD-am/s640/2016-07-06+%25283%2529.png" width="562" /></a></div>
CMakeで「Generate」ボタンを押すと、CMakeのbuildディレクトリにVisualStudioのソリューションファイルであるWiiUse.slnなどが生成されるので開きます。<br />
<br />
Visual Studioのツールバーのビルド→バッチビルドを開いて、以下のようにビルドしたい項目にチェックを入れてビルドボタンをクリックしましょう。ALL_BUILDやINSTALLだとよくわからなかったのでPACKAGEにチェック入れてビルドしました。src以下にDebugやReleaseのディレクトリができてlibやdllのファイルができてました。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6b1gv-oiBSvVeKykWim3LhGaynJU30uFo4NOupAhrScT5cRNbgxdDTw2oRnmZSeiwg1yCCj27CWzTL4fvuOEuzboRn3oX9xzjrmtQytdsys6sjajv7GKWps81Xdmp4MAB59_lpm3b_MU/s1600/2016-07-06+%25286%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6b1gv-oiBSvVeKykWim3LhGaynJU30uFo4NOupAhrScT5cRNbgxdDTw2oRnmZSeiwg1yCCj27CWzTL4fvuOEuzboRn3oX9xzjrmtQytdsys6sjajv7GKWps81Xdmp4MAB59_lpm3b_MU/s400/2016-07-06+%25286%2529.png" width="400" /></a></div>
ビルドを完了しました.これらをc:/usr/以下など適切なディレクトリに配置してやりましょう.Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-2967224223897021442016-04-19T00:01:00.001+09:002016-04-19T00:01:59.620+09:00Open Hack Day 2016で作った作品の紹介<h2>
Open Hack Day 2016 の展示会</h2>
<div>
先日、ヤフー株式会社が主催した<a href="http://hackday.jp/" target="_blank">Open Hack Day</a> の展示会に出展してきました。Open Hack Day当日に体調を崩してしまったため出場を断念したので、開発する予定だった作品を後日の展示会に向けて制作し、披露してきました。</div>
<div>
<br /></div>
<div>
この展示会は、Open Hack Dayで開発した作品を展示するという内容でした。</div>
<div>
<br /></div>
<h3>
自転車に合わせて景色が動く</h3>
<div>
作った作品はこちら。一緒に出場したメンバが動画にまとめてくれました。</div>
<div>
<br />
<iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/TTq2ykzTsuI?rel=0" width="640"></iframe>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
自転車を漕ぐとセンサが回転したことを読み取り、漕いだタイヤの回転速度に応じて映像が進行します。自転車のブレーキを掛けてタイヤが止まると映像も静止します。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
複数台のプロジェクタで部屋一面に映像を投影し、部屋に居ながらにして違う場所の景色の中をサイクリングできたら楽しいだろうなという発想です。今回はTheta Sで撮影した映像を素材として使っていますが、コンピュータグラフィックスで作られたファンタジの世界を冒険できたら素敵ですね。</div>
<div class="separator" style="clear: both; text-align: left;">
また、スポーツジムなどで自転車を漕いだり、ランニングしたりするマシンがありますが、同じ景色ではなく景色が変わったら運動もより一層捗るのではないかと思います。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
展示では、諸事情の関係でプロジェクタの投影ではなくノートPCでの表示となっております。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3 style="clear: both; text-align: left;">
センシングの仕組み</h3>
<div class="separator" style="clear: both; text-align: left;">
自転車にホールセンサ(磁気センサ)を取り付け、後輪ホイールの各所にネオジウム磁石を取り付けます。ホールセンサは磁石が近づくと反応します。ネオジウム磁石が近づく度に反応するため、その周期から速度を算出します。シリアル通信でPCに値を送信します。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3 style="clear: both; text-align: left;">
映像はUnity</h3>
<div class="separator" style="clear: both; text-align: left;">
Theta Sで撮影した映像をUnityにMovieTextureとしてSphereオブジェクトに割り当てます。SerialPortでセンサから速度を取得し、それに応じてMovieTextureの再生速度を変えています。</div>
<div class="separator" style="clear: both; text-align: left;">
Unityによって映像を作成しているため3次元情報を持っています。カメラオブジェクトを複数個設けることで複数台のプロジェクタにそれぞれの角度の映像を投影できます。また、ゲームの箱庭世界を冒険することや、OculusなどのVRデバイスに入力することにもつなげられます。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h2 style="clear: both; text-align: left;">
まとめ</h2>
<div>
今回は、Open Hack Dayの展示会で自転車を漕ぐと、その速度に合わせて映像が動く作品を展示しました。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-70664521172577779432016-03-30T01:09:00.001+09:002016-03-30T01:09:38.007+09:00UnityとAVRのUSART シリアル通信とReadLineで問題<h2>
概要</h2>
<div>
Unityからシリアルポートの入出力を行います。入出力先はAVRマイコンです。AVRマイコンはUSART機能を使って通信を行います。</div>
<div>
<br /></div>
<h3>
これまで</h3>
<div>
UnityのC#ではなく、通常のWindows .NetFrameworkでシリアル通信を実装してきました。(最新バージョンの.Netでも.Net2.0でも正しく動作しました。)</div>
<div>
<ul>
<li><a href="http://hiroyky.blogspot.jp/2016/03/avruartc_22.html">基本: AVRのUARTとC#でシリアル通信 (受信割り込み)</a></li>
<li><a href="http://hiroyky.blogspot.jp/2016/03/avruartc.html">基本: AVRのUARTとC#でシリアル通信</a></li>
</ul>
<div>
<br /></div>
<div>
<h2>
Unityでシリアル通信</h2>
Unity(mono)と.Netの違いはあるとはいえ、<a href="https://github.com/hiroyky/SerialSampleCSharp/blob/master/SerialSample2/Program.cs" target="_blank">同じ実装</a>でシリアル通信できるはずです。<br />
ただし、使用するフレームワークを.Net2.0に指定しなければいけません。<br />
ツールバのEditor→Project Settings→PlayerからApi Compability Levelを.Net2.0にします。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNiG5Q_e-C0TpGcblBI6OyyxNA98y_8u637x3FEj88tfIYTkkCxT3NUb6Xvky9X_vIx3RuCeUcE1SLuqXrpPzjpYBYQwXMwZ1Yxev_8ecALZHsObcYs7FAXc7WilMRKzKVz2fgptM3BKTf/s1600/2016-03-30+%25282%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNiG5Q_e-C0TpGcblBI6OyyxNA98y_8u637x3FEj88tfIYTkkCxT3NUb6Xvky9X_vIx3RuCeUcE1SLuqXrpPzjpYBYQwXMwZ1Yxev_8ecALZHsObcYs7FAXc7WilMRKzKVz2fgptM3BKTf/s320/2016-03-30+%25282%2529.png" width="115" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">.Net2.0を選択</td></tr>
</tbody></table>
<br /></div>
<h2>
ReadLineで通信が途絶える問題</h2>
</div>
<div>
基本的には通常のC#の実装と同じです。しかし、次の問題に遭遇し、苦労しました。(おそらくUnityに付属するライブラリに問題があると思われます。)</div>
<div>
<ul>
<li>SerialPort#ReadLine() で入力できない。</li>
</ul>
<div>
ReadLine()を実行する場所で止まってしまいます。また、タイムアウトするように設定したら、毎回タイムアウトしてしまいます。</div>
</div>
<div>
<br /></div>
<h2>
1バイトずつ読みこむように変更</h2>
<div>
SerialPort#ReadLine()は文字通り、改行コードまでの1行を取得するメソッドです。</div>
<div>
AVRマイコン側も</div>
<div>
<pre class="brush:c"> uint16_t hallCount = 0;
・・・・
printf("%d\n", hallCount);
</pre>
</div>
<div>
とprintf()で改行コードを書き出しているため問題ないはずです。ところが、通信が止まってしまいます。<br />
そこで、諦めて1バイトずつ入出力するようにしました。<br />
<br />
<ul>
<li>AVR側は、16bit int型をビットシフトして1バイトずつ2回に分けて送信レジスタに登録する。</li>
<li>C#側はSeralPort#ReadByte()メソッドを使って2回に分けて取得する。</li>
</ul>
<div>
C#のコードは<a href="https://github.com/hiroyky/SerialSampleCSharp/blob/master/SerialSample2/Program.cs#L26" target="_blank">前回実装したコード</a>と同じですが、次の変更を行いました。</div>
<div>
<pre class="brush:csharp">var high = serialPort.ReadByte();
var low = serialPort.ReadByte();
var val = (high << 8) + low;
</pre>
</div>
<div>
また、AVRのコードも<a href="https://github.com/hiroyky/nightsky_hole_sensor/commit/6eee72182c9cd276da1f04b6337e51752cf2c3b9" target="_blank">このように1バイトずつ書き込むように</a>変更しました。<br />
<br />
これで通信ができるようになりました。<br />
<br />
<h2>
まとめ</h2>
</div>
</div>
<div>
Unityでシリアル通信をするとき、SerialPort#ReadLine()では通信が止まってしまうため、ReadByte()で1バイトずつ通信することで問題を回避しました。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-71215660774975200862016-03-22T11:54:00.001+09:002016-03-22T12:25:20.107+09:00基本: AVRのUARTとC#でシリアル通信 (受信割り込み)<h2>
概要</h2>
<div>
<a href="http://hiroyky.blogspot.jp/2016/03/avruartc.html">前回、AVRとパソコンでエコーバックするプログラムを作成</a>しました。</div>
<div>
今回は、AVRでUSART受信割り込みを使ったプログラムを作成したいと思います。</div>
<h2>
要件</h2>
<ul>
<li>AVRはPCから送信された値を受信し、受信割り込みを発生する。</li>
<li>受信割り込み時に"echo back: <val> \n"という文字列をPCに送信できる。</li>
<li><val>はPCから送信された値で置換する。</li>
</ul>
<h2>
準備</h2>
<h3>
ハードウェア</h3>
<div>
前回同様、<a href="http://hiroyky.blogspot.jp/2016/02/avr-atmega168p.html" style="color: #4d469c; text-decoration: none;">以前組み立てたAVR AtMega168Pマイコンボード</a>を使用します。</div>
<div>
もちろんこれは必須ではなく、AVR168Pもしくはこれと互換性のあるAVRマイコンと<a href="http://akizukidenshi.com/catalog/g/gK-01977/" style="color: #4d469c; text-decoration: none;">FT232RL</a>が実装されており、USBでパソコンと接続できればOKです。</div>
<div>
AVRとFT232RLの取り付けの解説は割愛しますが、次のように実装します。</div>
<ul>
<li>AVRのTXDとFT232RLのRXDが接続されている。</li>
<li>AVRのRXDとFT232RLのTXDが接続されている。</li>
</ul>
<div>
<a href="http://www.henteko.org/fswiki/wiki.cgi?page=AVR%A4%C8FT232RL%A4%F2%BB%C8%A4%C3%A4%BFUSB%A1%DD%A5%B7%A5%EA%A5%A2%A5%EB%C4%CC%BF%AE%A4%CE%BC%C2%B8%B3" style="color: #4d469c; text-decoration: none;" target="_blank">AVRとFT232RLを使ったUSB-シリアル通信の実験</a>に解説されているとおりです。</div>
<h3>
ライブラリ</h3>
<div>
UARTを使った処理をかんたんに実装するために、次のコードを実装しました。初期化と読み書き、割り込み処理といった基本的なレジスタ操作をまとめたものです。<br />
<ul>
<li><a href="https://github.com/hiroyky/avr_usart_sample/blob/master/usartsample/usart.h" style="color: #4d469c; text-decoration: none;" target="_blank">usart.h</a></li>
<li><a href="https://github.com/hiroyky/avr_usart_sample/blob/master/usartsample/usart.c" style="color: #4d469c; text-decoration: none;" target="_blank">usart.c</a></li>
</ul>
<h2>
開発</h2>
</div>
<h3>
AVR</h3>
<div>
<a href="https://github.com/hiroyky/avr_usart_sample/blob/dev3/usartsample/main.c" target="_blank">dev3/usartsample/main.c</a>を作成しました。割り込みなしのコードとほぼ同じですが、割り込み設定をしている箇所が異なります。</div>
<div>
<pre class="brush:c">/**
* 受信割り込み発生時に実行される関数
* @param data 受信データ
*/
void rxEventListener(uint8_t data) {
printf("echo back: %d \n", data);
}
int main(void) {
// 受信割り込みありでUSARTを初期化(8MHzクロック時, 9600ボーレート)
USART_init(RX_COMPLETION_INTERRUPT, 51);
// 受信割り込み発生時に実行する関数を登録
USART_setRxCompletionInterruptListener(*rxEventListener);
// printfで使用する関数を登録
fdevopen(*USART_sendData, NULL);
// 割り込み全許可
sei();
printf("Initialized>>\n");
while (1) {
}
}
</pre>
</div>
<ul>
<li>UCSRnBレジスタのRXCIEn(7bit目)を1(true)にして、受信割り込み許可を行っています。(<a href="https://github.com/hiroyky/avr_usart_sample/blob/dev3/usartsample/usart.c#L30" style="line-height: 22.4px;" target="_blank">該当コード</a></li>
<li>割り込みベクタUSART_RX_vectで受信割り込みを駆動できます。(<a href="https://github.com/hiroyky/avr_usart_sample/blob/dev3/usartsample/usart.c#L76-L79" target="_blank">該当コード</a>)</li>
<li>初期化しても、sei()を唱えないと割り込みは発生しません。</li>
</ul>
これで、PC側からの値に応じて、処理を変えたり、レスポンスする内容を変更したりできますね。<br />
<h3>
C#</h3>
<div>
前回同様に<a href="https://github.com/hiroyky/SerialSampleCSharp/blob/master/SerialSample/Program.cs" target="_blank">SerialSample/Program.cs</a>を使用します。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-29880556909116786212016-03-22T01:38:00.002+09:002016-03-22T11:42:57.757+09:00基本: AVRのUARTとC#でシリアル通信<h2>
概要</h2>
<div>
AVRとPC間でシリアル通信する方法を確認しました。AVRでは、UART機能を使用し、C#では.NetFrameworkのSerialPortクラスを使用して実現します。</div>
<div>
ここでは、通信の基本であるエコーバックを実装し、通信のやり方を確認します。</div>
<div>
<br /></div>
<h2>
準備</h2>
<h3>
ハードウェアの準備</h3>
<div>
<a href="http://hiroyky.blogspot.jp/2016/02/avr-atmega168p.html">以前組み立てたAVR AtMega168Pマイコンボード</a>を使用します。</div>
<div>
もちろんこれは必須ではなく、AVR168Pもしくはこれと互換性のあるAVRマイコンと<a href="http://akizukidenshi.com/catalog/g/gK-01977/">FT232RL</a>が実装されており、USBでパソコンと接続できればOKです。</div>
<div>
<br /></div>
<div>
AVRとFT232RLの取り付けの解説は割愛しますが、次のように実装します。</div>
<div>
<ul>
<li>AVRのTXDとFT232RLのRXDが接続されている。</li>
<li>AVRのRXDとFT232RLのTXDが接続されている。</li>
</ul>
<div>
<a href="http://www.henteko.org/fswiki/wiki.cgi?page=AVR%A4%C8FT232RL%A4%F2%BB%C8%A4%C3%A4%BFUSB%A1%DD%A5%B7%A5%EA%A5%A2%A5%EB%C4%CC%BF%AE%A4%CE%BC%C2%B8%B3" target="_blank">AVRとFT232RLを使ったUSB-シリアル通信の実験</a>に解説されているとおりです。<br />
<br /></div>
</div>
<h3>
ライブラリ</h3>
UARTを使った処理をかんたんに実装するために、次のコードを実装しました。初期化と読み書き、割り込み処理といった基本的なレジスタ操作をまとめたものです。<br />
<div>
<ul>
<li><a href="https://github.com/hiroyky/avr_usart_sample/blob/master/usartsample/usart.h" target="_blank">usart.h</a></li>
<li><a href="https://github.com/hiroyky/avr_usart_sample/blob/master/usartsample/usart.c" target="_blank">usart.c</a></li>
</ul>
</div>
<h2>
サンプル</h2>
<div>
</div>
<h3>
単純なエコーバック</h3>
<div>
<ul>
<li>パソコンから文字をAVRに送信する。</li>
<li>AVRは受信した文字のアスキコードをエコーバックする。</li>
</ul>
</div>
<h3>
AVR</h3>
<div>
これを実現するために、AVRで実装したコードは<a href="https://github.com/hiroyky/avr_usart_sample/blob/dev1/usartsample/main.c" target="_blank">dev1/usartsample/main.c</a>です。</div>
<div>
<br />
<pre class="brush:c">int main(void) {
# USARTを初期化します。割り込みなし,ボーレート9600
USART_init(NOMAL, 51);
# printfをするときはUSART_sendData関数を利用するように登録します。
fdevopen(*USART_sendData, NULL);
# printfしてみます。
printf("Enter>>\n");
# 以下、データを受信して、受信したデータを送信するエコーバックを繰り返します。
while (1) {
uint8_t val = USART_recieveData();
printf("%d\n", val);
}
}
</pre>
<br />
<br />
<ul>
<li>USART_initの2つ目の引数51はボーレート設定値を示します。</li>
<ul>
<li>クロック8MHz動作時で9600のボーレートです。</li>
<li><a href="http://www.atmel.com/Images/8025s.pdf" target="_blank">データシート</a>に値の設定方法が解説してありますので、参照してください。</li>
</ul>
<li>fdevopen()で<a href="https://github.com/hiroyky/avr_usart_sample/blob/dev1/usartsample/usart.c#L52-L55" target="_blank">USART_sendData関数</a>を登録することでprintfを使えるようにしています。</li>
</ul>
</div>
<h3>
C#</h3>
<div>
VisualStudioからC#プロジェクトを作成します。今回はコンソールアプリケーションとします。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaG5dhxvyMjQRX8rH-mY7rgRutp-jT5rPdluJa_xUiDRn9pTx864hi-h1XQrmvbluEGx_58Oc7t1tBfJIF4vbOzuoNvwHKPYvA6Ey_AWtDHor4suyqYqK6ADHi9HgLWdtCZul5v47OUKd9/s1600/2016-03-21.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaG5dhxvyMjQRX8rH-mY7rgRutp-jT5rPdluJa_xUiDRn9pTx864hi-h1XQrmvbluEGx_58Oc7t1tBfJIF4vbOzuoNvwHKPYvA6Ey_AWtDHor4suyqYqK6ADHi9HgLWdtCZul5v47OUKd9/s320/2016-03-21.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">コンソールアプリケーションの作成(C#)</td></tr>
</tbody></table>
<br />
<div>
<a href="https://msdn.microsoft.com/ja-jp/library/system.io.ports.serialport(v=vs.110).aspx" target="_blank">SerialPortクラス</a>を使用して、Read&Writeを行うプログラムを実装します。( <a href="https://github.com/hiroyky/SerialSampleCSharp/blob/master/SerialSample/Program.cs" target="_blank">SerialSample/Program.cs</a> )</div>
<div>
<br />
<pre class="brush:csharp"> if (!serialPort.IsOpen) {
serialPort.Open();
}
while (true) {
string val = System.Console.ReadLine();
serialPort.Write(val.Substring(0, 1));
var readVal = serialPort.ReadLine();
System.Console.WriteLine(readVal);
}
</pre>
<br />
<ul>
<li>AVR側は複数バイトの受信に対応していないため、Substringメソッドで先頭文字だけ抽出しています。</li>
<li><a href="https://msdn.microsoft.com/ja-jp/library/y2sxhat8(v=vs.110).aspx" target="_blank">SerialPort.Write()</a>で書き込み、<a href="https://msdn.microsoft.com/ja-jp/library/system.io.ports.serialport.readline(v=vs.110).aspx" target="_blank">SerialPort.ReadLine()</a>で\nまで読み込みます。</li>
</ul>
</div>
<h3>
実行結果</h3>
<div>
次のように、入力した文字に対するアスキーコードを返しています。<a href="http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html" target="_blank">アスキーコード表</a>で確認すると正しくレスポンスされていることがわかります。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtNEb-uu-jOqHQEG4FFCozhdPaxwPYnx0gTzFAhn9Na7Cv622d8mKpLs56w8YN8ffqvoIcjS-Z9qlNdCfmjHQqwrt1wrNZxWtk8sko5g4HSNI3VpWqS5mW2vqUHUxAmjyYELDb5jw-qKXy/s1600/2016-03-22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtNEb-uu-jOqHQEG4FFCozhdPaxwPYnx0gTzFAhn9Na7Cv622d8mKpLs56w8YN8ffqvoIcjS-Z9qlNdCfmjHQqwrt1wrNZxWtk8sko5g4HSNI3VpWqS5mW2vqUHUxAmjyYELDb5jw-qKXy/s320/2016-03-22.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
実行結果</div>
<div>
<h2>
補足</h2>
</div>
<div>
今回、C#でシリアル通信の実装を確認するためC#で通信を実装しましたが、TeraTermを用いても等価のことを実行できます。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-29397032938542093222016-03-13T20:54:00.001+09:002016-03-13T20:56:46.054+09:00Unity5 ThetaSの画像をSkyboxで動的にアニメーション<h2>
ThetaSの映像を動的アニメーションで表示したい</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjilPFvcg1Arz1O1LiV8bRMdGzGSz3jpg-eEjoP1A1UnQCV-LFTp-XjH1PM7nxncHg3m9P0Kj2udrtRYWxhXOJ3olG6cJowdkFfm_GoGgKjA7wKq1ccdJvlyvyUp6OxMAj57HsnVWpCVCCz/s1600/DSC_0500.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjilPFvcg1Arz1O1LiV8bRMdGzGSz3jpg-eEjoP1A1UnQCV-LFTp-XjH1PM7nxncHg3m9P0Kj2udrtRYWxhXOJ3olG6cJowdkFfm_GoGgKjA7wKq1ccdJvlyvyUp6OxMAj57HsnVWpCVCCz/s400/DSC_0500.JPG" width="400" /></a></div>
<br />
360度カメラ<a href="http://amzn.to/1QNVv7m" target="_blank">ThetaS</a>で撮影した映像をUnityに取り込んで表示したいです。
<br />
<br />
<h3>
要件</h3>
<span style="text-align: center;">要件は次の通りです。</span><br />
<div>
<ol>
<li><b>1人称視点でカメラの向きに応じた角度の映像を見れる。</b></li>
<li><b>プログラムから映像の再生をコントロールできる(再生、停止、x倍速再生など)。</b></li>
</ol>
</div>
<div>
1.の要件だけであれば「<a href="http://psychic-vr-lab.com/blog/unity/360%E5%BA%A6%E3%82%AB%E3%83%A1%E3%83%A9theta%E3%81%A7%E6%92%AE%E3%81%A3%E3%81%9F%E5%86%99%E7%9C%9F%E3%82%92unity%E3%81%A7%E4%BD%BF%E3%81%86/" target="_blank">360度カメラthetaで撮った写真をunityで使う</a>」のやり方で実現できます(このブログエントリでは、Blenderで円球を作っていますが、通常のSphereでもこだわりを捨てれば問題ないと思います。)。</div>
<div>
しかし、1.のやり方では、通常の再生のみで2.の再生をコントロールすることができません。現状、<a href="http://docs.unity3d.com/Manual/class-MovieTexture.html" target="_blank">MovieTexture</a>では動画の再生コントロールには対応していないからです。</div>
<div>
<br /></div>
<h3>
方針</h3>
<div>
<ul>
<li>動画の各フレームを静止画に変換し、静止画のテクスチャを高速で切り替えることでアニメーションを実現する。</li>
<li>Sphereマテリアルではなく、Skyboxにアニメーションを投影する。</li>
</ul>
</div>
<div>
現状、MovieTextureによる動画の再生コントロールができないようです。そこで、ThetaSで撮影した360度動画の各フレームを静止画として出力して、高速で切り替えることによって上記の要件を実現します。静止画を割り当てたテスクチャを切り替えはプログラムからコントロールするため再生速度などの変更も可能と言えるでしょう。</div>
<div>
<br /></div>
<div>
また今回は、ThetaSで撮影した素材をSkyboxに割り当てます。他のオブジェクトを設置しやすくなるからです。(夜空のThetaS映像をSkyboxで投影し、UFOなどのオブジェクトが動いていたら素敵です。)</div>
<div>
<br /></div>
<h2>
早速 作ってみましょう。</h2>
<h3>
Theta Sの360度動画を静止画群に変換</h3>
<div>
Adobe PremiereとAdobe Media Encoderで動画の各フレームをJPEG画像に変換しました。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTB1ZiKJmp6-yCKE-D8pHU4iR7x7fu3NvsbY3BpG_MChC7wb9sK5ak4N3Z20zK8Pvex0IO5kuntfa4NeUym27eqcmkLVwNTzAvkUDTbAEpb_6V6cb-sl2D8MLU9fTNrukIMEShYO98F67k/s1600/2016-03-12.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTB1ZiKJmp6-yCKE-D8pHU4iR7x7fu3NvsbY3BpG_MChC7wb9sK5ak4N3Z20zK8Pvex0IO5kuntfa4NeUym27eqcmkLVwNTzAvkUDTbAEpb_6V6cb-sl2D8MLU9fTNrukIMEShYO98F67k/s320/2016-03-12.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ThetaS動画を出力した静止画群</td></tr>
</tbody></table>
<br />
<h3>
画像群をUnityに取り込み</h3>
<div>
作成した360度画像群をUnityに取り込みます。一つのディレクトリにまとめてます。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3XKzcS6O6u-bdqSPmWwKL4xFRzjDVtFjpBSzNqsjue6c7o8XXdAVEPfefKf4pWk3nMYCXxmmQb6G2-NVI8OXkBL5x5yaaWKQNYpTx5ejeopXy_z2gsC3DogCG0_g1SVYwF4qk4MavBlhr/s1600/2016-03-12+%25281%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3XKzcS6O6u-bdqSPmWwKL4xFRzjDVtFjpBSzNqsjue6c7o8XXdAVEPfefKf4pWk3nMYCXxmmQb6G2-NVI8OXkBL5x5yaaWKQNYpTx5ejeopXy_z2gsC3DogCG0_g1SVYwF4qk4MavBlhr/s400/2016-03-12+%25281%2529.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">画像群を取り込み</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
取り込み後はテクスチャをCubeMapとして設定します。すべての画像を選んで、<a href="http://qiita.com/kazz4423/items/d2be3e5fb0f139d9a947" target="_blank">[Unity4,Unity5]thetaとかで撮った全球画像をSkyboxに指定する方法</a>を適応します。すべての画像がCubeMap Typeとして設定されるまでしばらく時間がかかるかと思います。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj13RZjKmTshVfizTysyGShg_Y8mhplSLh8CbaiHC3LulCg7xIy89c-OvcFBrwtmxlrEm85gmjKSuYE_iR6nwGkU9bjnEfb_EnZ9jpbmWnfecjFeMGR329qPGTSBOxWktKyoIk8hTIMtEur/s1600/2016-03-12-%25284%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj13RZjKmTshVfizTysyGShg_Y8mhplSLh8CbaiHC3LulCg7xIy89c-OvcFBrwtmxlrEm85gmjKSuYE_iR6nwGkU9bjnEfb_EnZ9jpbmWnfecjFeMGR329qPGTSBOxWktKyoIk8hTIMtEur/s400/2016-03-12-%25284%2529.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">取り込んだ全ての画像をCubemapテクスチャにする</td></tr>
</tbody></table>
<h3>
Skyboxの作成とMain Cameraへアタッチ</h3>
<div>
<ol>
<li>新規マテリアルを作成し、Shaderを「Skybox/Cubemap」にします。</li>
<li>HierarchyでMain Cameraを選択し、InspectorのAdd Componentボタンを押します。</li>
<li>Rendering→Skyboxを選び、Skyboxコンポーネントを追加します。</li>
<li>Custom Skyboxに1.で作成したSkyboxをドラッグし、設定します。</li>
</ol>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEita6pYlB7f4dxGs6rqHDZaTIV1qi4rpI_DKWqForqTl_uJqv97nWLnO-r8aLaTdWYv7u2XTVMmcQ50gMuF1Td3GJDuqe5WlOs255RPgtlgqazNxwo6__4I2pPGRv4JBTUx6PU0COn1X8JF/s1600/2016-03-12-%25285%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEita6pYlB7f4dxGs6rqHDZaTIV1qi4rpI_DKWqForqTl_uJqv97nWLnO-r8aLaTdWYv7u2XTVMmcQ50gMuF1Td3GJDuqe5WlOs255RPgtlgqazNxwo6__4I2pPGRv4JBTUx6PU0COn1X8JF/s640/2016-03-12-%25285%2529.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Skyboxを作成し、Main Cameraに登録</td></tr>
</tbody></table>
<div>
<br /></div>
</div>
<h3>
スクリプトの作成</h3>
<div>
Skyboxの設定はUnityEditor上で設定することが多いと思います。しかし、C#(もしくはJavaScript)のコード上からSkyboxのテクスチャを設定します。再生コントロールをするためです。</div>
<div>
次の手続きの実装を行います。</div>
<div>
<ul>
<li>作成したコードはMain Cameraにアタッチする。</li>
<li>Startメソッドで、<a href="http://docs.unity3d.com/ja/current/Manual/AssetDatabase.html" target="_blank">AssetDatabase</a>を使ってテクスチャを読み込み、リストに追加する。</li>
<li>UpdateメソッドでSkyboxのテクスチャを適切に切り替える。</li>
</ul>
<div>
まずは次のコードを書いてみました。Updateでは毎回フレームを切り替えています。テクスチャが繰り返し一定速度で再生されるはずです。(フレームレートは入力元の映像とおなじになるとは限らないです。)</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<pre class="brush: csharp">// SkyboxRunner.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
public class SkyboxRunner : MonoBehaviour {
Skybox skybox;
List<texture> skyboxTextures = new List<texture>();
int index = 0;
void Start () {
// アタッチしたスカイボクスを取得
skybox = GetComponent<skybox>();
// AssetDatabaseからテクスチャをロード
var guids = AssetDatabase.FindAssets("t:Texture", new string[] { "Assets/SkyboxTex/nightsky1" });
foreach (string guid in guids) {
Texture texture = AssetDatabase.LoadAssetAtPath<texture>(AssetDatabase.GUIDToAssetPath(guid));
skyboxTextures.Add(texture);
}
}
void Update () {
// スカイボックスのテクスチャを切り替える
skybox.material.SetTexture("_Tex", skyboxTextures[index]);
index++;
if (index >= skyboxTextures.Count) {
index = 0;
}
}
}
</texture></skybox></texture></texture></pre>
<br />
ここでは、一定速度での繰り返し再生であるため、通常の再生と変わりません。Updateメソッドの内容を変更すれば、フレーム更新を自在に操ることができます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/HI4v8OMdizw" width="480"></iframe></div>
<br />
<h2>
まとめ</h2>
<div>
Theta Sで撮影した映像をUnityの3D空間に投影し、再生コントロールもしたかったのですが、MovieTextureなどでは実現できなかったため、各フレームを静止画に書き出してアニメーションすることで実現しました。</div>
<div>
(もっといいほうがあればいいのですが、、、)</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-48524103694978149612016-02-06T17:41:00.001+09:002016-02-06T17:47:02.840+09:00AVR ATMega168P のマイコンボード組み立ててみた.<h2>
Arduino互換のマイコンボードキット</h2>
<div>
秋月電子で販売されている「<span style="background-color: white; color: #2c49b2; font-family: "meiryo" , , "ms pゴシック" , "osaka" , "tahoma" , sans-serif; font-size: 14px; letter-spacing: 1.4px; line-height: 19.2px;"><a href="http://akizukidenshi.com/catalog/g/gP-04399/" target="_blank">ATMEGA168/328用マイコンボード(I/Oボード)</a></span>」を組み立ててみました.ハンダ付けにについては分かりやすいマニュアルも付属しており,初心者でもかんたんい組み立てることが出来ると思います.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwN_hwjD-wnKeYP4Ids00qzrZl0tsh5jR_FiCY7z6mylC3WcLompylOb4KibU-p0d_DlwLw8TxB4gJRDb05Yet62sYLyF8KwcKHe9IL1sghtfXOrDDfxMDf-mLWaN1eoze7HT8VCOHeyRa/s1600/DSC_0510.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwN_hwjD-wnKeYP4Ids00qzrZl0tsh5jR_FiCY7z6mylC3WcLompylOb4KibU-p0d_DlwLw8TxB4gJRDb05Yet62sYLyF8KwcKHe9IL1sghtfXOrDDfxMDf-mLWaN1eoze7HT8VCOHeyRa/s320/DSC_0510.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Arduinoとして使うことも出来ますが,恐らく自分はそのままAVRマイコンとして利用すると思います.</div>
<div>
<br /></div>
<div>
ソフトウェアを毎回手頃に書き込んだり,デバッグしたりするのに便利そうだったので購入しました.</div>
<div>
<br /></div>
<h2>
注意箇所</h2>
<div>
組み立て中の注意箇所としては次のことがあるだろうと感じました.</div>
<div>
<ul>
<li>プリント基板は背面だけでなく,表面にも実装されています.表側までハンダが流れ込んで固定されていないと,接触不良になる場合があります.</li>
</ul>
<h2>
AVRライタの向き</h2>
</div>
<div>
若干迷ったのが,AVRライタ<a href="http://akizukidenshi.com/catalog/g/gM-02582/" target="_blank">ISP mkII</a>を差し込む向きです.このように差し込めばOKです.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6C8MPk6c2C4JAkJNwLVAdFcZz9iMptLVEtkyu0s9g_S5CBmxuzxD9-2Cbjek1aeCwQcOWDtQ7DmxX1L4nxMtGnIpdgMp8rEHhLn2zjIcO05pKTj-GKAkBY-9D9tRXyeYK0dn5M0asUivG/s1600/DSC_0513.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6C8MPk6c2C4JAkJNwLVAdFcZz9iMptLVEtkyu0s9g_S5CBmxuzxD9-2Cbjek1aeCwQcOWDtQ7DmxX1L4nxMtGnIpdgMp8rEHhLn2zjIcO05pKTj-GKAkBY-9D9tRXyeYK0dn5M0asUivG/s320/DSC_0513.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<h2>
USB・シリアル通信モジュールは取り外し可能に</h2>
<div>
<span style="background-color: white; font-family: "meiryo" , , "ms pゴシック" , "osaka" , "tahoma" , sans-serif; font-size: 14px; letter-spacing: 1.4px; line-height: 19.2px;"><a href="http://akizukidenshi.com/catalog/g/gK-01977/" style="color: #2c49b2;" target="_blank">FT232RL USBシリアル変換モジュール</a>は直接ハンダ付けするのではなくソケットを設けて取り外しできるようにしました.比較的価格の高いモジュールの上,他の用途でも使えるため直接半田付けするのはもったいないと感じました.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx4zFuom8yezB2Wbd9VCibfq-56VX-mr6S6D5axQPsr4rs5SAXds3uIbo9JtgU2rKgGVHEyUpMY9Pu9GVxA-NdbVdmsVtNvlsgx9DdeJD4LK16ImBE8ZI3ScKsDoQNr0AqaIMcH_yBM1SP/s1600/DSC_0512.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx4zFuom8yezB2Wbd9VCibfq-56VX-mr6S6D5axQPsr4rs5SAXds3uIbo9JtgU2rKgGVHEyUpMY9Pu9GVxA-NdbVdmsVtNvlsgx9DdeJD4LK16ImBE8ZI3ScKsDoQNr0AqaIMcH_yBM1SP/s400/DSC_0512.jpg" width="400" /></a></div>
<div>
<span style="font-family: "meiryo" , , , "osaka" , "tahoma" , sans-serif;"><span style="background-color: white; font-size: 14px; letter-spacing: 1.4px; line-height: 19.2px;"><br /></span></span></div>
<h2>
で,</h2>
<div>
<span style="font-family: "meiryo" , , , "osaka" , "tahoma" , sans-serif;"><span style="background-color: white; font-size: 14px; letter-spacing: 1.4px; line-height: 19.2px;">これで書き込みもデバッグもラクになりました.Arduino同様に素のAVRに対してプロトタイピングできる!</span></span></div>
<br/><br/>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789846040" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789837300" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789842134" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-7420046195371032242016-02-06T17:04:00.002+09:002016-03-26T14:27:24.799+09:00Visual Studio 2015 Update1 と Atmel Studio 7の相性問題<h2>
注意</h2>
<span style="color: red;">この記事は2016年2月6日現在の内容です.今後不具合が改善され,状況が変わることがあります.</span><br />
<br />
<span style="color: red;">追記:</span><br />
<span style="color: red;">Atmel Studio build 790(2016年2月リリース)では、この問題は解決されたようです。この問題が発生したら、以下で紹介する方法ではなく、Atmel Studioを最新版にアップグレードすることをおすすめします。</span><br />
<h2>
Atmel Studio7がおかしい</h2>
Atmel StudioでAVRの開発環境をセットアップしたところ,インストール中に後述するエラーダイアログが表示され,起動後の新規プロジェクト作成画面もテンプレートプロジェクトが表示されなくなっている.<br />
色々調べたところ,Visual Studio 2015 Update1とAtmel Studio7の共有モジュールに相性問題があるようで,一時的な解決方法をAtmel社のサイトで案内していた.<br />
ちなみに,Visual Studio 2015 RTMの場合ではこの現象が(自分の環境では)起こらなかった.<br />
<br />
<h2>
環境</h2>
<div>
<ul>
<li>OS: Windows 10 64bit</li>
<li>操作:Visual Studio 2015 Update1のインストール後に,Atmel Studio 7をインストール</li>
</ul>
<h2>
現象</h2>
</div>
<div>
<ul>
<li>Atmel Studio7のインストール中に次のダイアログが表示された.いずれもYes(はい)をクリックして次に進めた.インストール終了後,起動時もダイアログが表示された.</li>
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM-tlOKg0ju6wOqIEq26nfzzzfSFd3QU-EGSnXleJtVtB-oKz1v5_FF8kudChem6eOxc5fZrdWjNgDc6pnFlCZ1F74hQ8EF6veAODUCGEvr5CQNtaklwRIgTyJeP7D2czdexffA1mJtvCP/s1600/2016-02-05.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM-tlOKg0ju6wOqIEq26nfzzzfSFd3QU-EGSnXleJtVtB-oKz1v5_FF8kudChem6eOxc5fZrdWjNgDc6pnFlCZ1F74hQ8EF6veAODUCGEvr5CQNtaklwRIgTyJeP7D2czdexffA1mJtvCP/s320/2016-02-05.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">'ErrorListPackage' package did not load correctly</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxUv5ZW-IY7Z7O2FGNyoHyZZoVvaS6kXd34A1HZymnBS1RYrrCJjeZzhDb68jc90w5wcpzKrkEOj6sfO2wkneVuSWoeQgNagt5YbAO3j5y_pdqXN4GbiJeBpVNUxkI9UH45EHTG8Vz-CJ4/s1600/2016-02-05+%25281%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxUv5ZW-IY7Z7O2FGNyoHyZZoVvaS6kXd34A1HZymnBS1RYrrCJjeZzhDb68jc90w5wcpzKrkEOj6sfO2wkneVuSWoeQgNagt5YbAO3j5y_pdqXN4GbiJeBpVNUxkI9UH45EHTG8Vz-CJ4/s320/2016-02-05+%25281%2529.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">'ServiceProviderImplemntations' package did not load correctly</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX-f5Cv5xK3j3ceiZh5wOQmTBWxTz6kGxSFwgtTcrU3c_nea_IA-jM7ObhtokP5CfBNDmpYdWgIL9NloZYGvFyokUZq6UGe-aAH8Mu86AX8u7WvRWWF4zbpZNXB6im6mZ4INqlvdnxbqrw/s1600/2016-02-05+%25282%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX-f5Cv5xK3j3ceiZh5wOQmTBWxTz6kGxSFwgtTcrU3c_nea_IA-jM7ObhtokP5CfBNDmpYdWgIL9NloZYGvFyokUZq6UGe-aAH8Mu86AX8u7WvRWWF4zbpZNXB6im6mZ4INqlvdnxbqrw/s320/2016-02-05+%25282%2529.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBCHqNTS_eiqSGL1mkiywxlgZd1Zc7kZRm3ZXdM8z2tpc1iB_SMkJy7SNj3huXgY_k_oZUA90c_w2G0kaBEenDypTZKBw_PrLtLYqTNuy6OjhkYTj8p2rVXcfhoHAQcekF6Q65cnAH7Sqv/s1600/2016-02-05+%25283%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBCHqNTS_eiqSGL1mkiywxlgZd1Zc7kZRm3ZXdM8z2tpc1iB_SMkJy7SNj3huXgY_k_oZUA90c_w2G0kaBEenDypTZKBw_PrLtLYqTNuy6OjhkYTj8p2rVXcfhoHAQcekF6Q65cnAH7Sqv/s320/2016-02-05+%25283%2529.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXVIL7Z5xKcNb2jN9bT3_N6Pt-YuUqBVzkgIHWMh3qtkI2hvfARWW0R0H3nHQywApojszyqNJrtcRivYA6_oVkl-jeYwIynzRJovv_OFvIAUzbYfZ2MkI1G-MtHa5JBZmWcLF7aDLVdbHR/s1600/2016-02-05+%25284%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXVIL7Z5xKcNb2jN9bT3_N6Pt-YuUqBVzkgIHWMh3qtkI2hvfARWW0R0H3nHQywApojszyqNJrtcRivYA6_oVkl-jeYwIynzRJovv_OFvIAUzbYfZ2MkI1G-MtHa5JBZmWcLF7aDLVdbHR/s320/2016-02-05+%25284%2529.png" width="320" /></a></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<ul>
<li>新規プロジェクトの作成ダイアログでテンプレートが表示されない.</li>
</ul>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhRolyQPnEu6JHVC9_Da5oqeePxKkgRe-wNwmSmlZ4n4YjLpXg1YxsSuCyEkx-84cLnFZPkp8VgS5Wj2ZDGsAtPbg47RMT5T7mlAb73Q5Tuc5Dn438joakXwFKlsRh4IEzFY0LCMml52Lc/s1600/2016-02-05+%25285%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhRolyQPnEu6JHVC9_Da5oqeePxKkgRe-wNwmSmlZ4n4YjLpXg1YxsSuCyEkx-84cLnFZPkp8VgS5Wj2ZDGsAtPbg47RMT5T7mlAb73Q5Tuc5Dn438joakXwFKlsRh4IEzFY0LCMml52Lc/s400/2016-02-05+%25285%2529.png" width="400" /></a></div>
</div>
</div>
<div>
<br /></div>
<h2>
解決策</h2>
<div>
次のAtmel社のサイトの案内通りに操作したら直った.</div>
<div>
<a href="http://atmel.force.com/support/articles/en_US/Workaround/Installing-Visual-Studio-2015-Update-1-leads-to-Atmel-Studio-no-longer-starting">http://atmel.force.com/support/articles/en_US/Workaround/Installing-Visual-Studio-2015-Update-1-leads-to-Atmel-Studio-no-longer-starting</a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkQ0rA9UScJ3qh3OigHe5lGx8HEagHEWBn5KOiNoMs6_22FUOLwYQM1f4V2WGj0fbwPQFGhO92I374AdbI6-V0M-qcCHyVfy_W_JLAItmzGjaeRrJZ75IBbYYUTRwNQZ7VeaI2GoQ5Fng/s1600/2016-02-05+%25286%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkQ0rA9UScJ3qh3OigHe5lGx8HEagHEWBn5KOiNoMs6_22FUOLwYQM1f4V2WGj0fbwPQFGhO92I374AdbI6-V0M-qcCHyVfy_W_JLAItmzGjaeRrJZ75IBbYYUTRwNQZ7VeaI2GoQ5Fng/s640/2016-02-05+%25286%2529.png" width="640" /></a></div>
<div>
<br /></div>
<div>
よかったです.</div>
<div>
今後,根本的な解決を来します.</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-34418725258401501012016-01-31T15:19:00.000+09:002016-02-06T17:49:01.886+09:00MacでAVRの開発,homebrewで構築<h2>
MacでAVRのソフトウェア開発するよ.</h2>
<div>
学生の頃はWindowsでAVRマイコンを使った組み込み開発をやっていました.Windowsでは,Atmel社公式の統合開発環境<a href="http://www.atmel.com/ja/jp/tools/ATMELSTUDIO.aspx" target="_blank">AVR Stduio</a>が提供されており便利です.(特にVisual Studioベースになってからめちゃくちゃ使いやすい.)</div>
<div>
<br /></div>
<div>
今は,Macを使うことが多いのでMacで開発環境を整えます.</div>
<h2>
使用するハードウェア</h2>
<div>
<ul>
<li><a href="http://akizukidenshi.com/catalog/g/gI-03033/" target="_blank">AVR AtMega-168P</a></li>
<li><a href="http://akizukidenshi.com/catalog/g/gI-03142/" target="_blank">AVR AtMega-328P</a></li>
<li><a href="http://akizukidenshi.com/catalog/g/gM-02582/" target="_blank">Atmel ISP mkII</a></li>
</ul>
<div>
使用するマイコンはArduino搭載AVRと同じもしくは互換性のあるAtMega88Pシリーズです.書き込みは恐らく標準的なライタであるISP mkIIです.</div>
</div>
<h2>
必要なパッケージ</h2>
<div>
<ul>
<li><a href="https://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12" target="_blank">Xcode</a></li>
<li><a href="https://www.obdev.at/products/crosspack/index.html" target="_blank">CrossPack-AVR</a></li>
</ul>
<div>
Xcodeのインストール方法については割愛します.</div>
</div>
<div>
CrossPack-AVRには,ビルドから書き込み,Xcodeのプロジェクトテンプレートまで必要なツールが揃っているようです.</div>
<div>
<h2>
インストール</h2>
</div>
<div>
<h3>
brew caskでインストール</h3>
公式サイトから直接パッケージファイルをダウンロードする方法もあります.しかし今回は,brew caskでインストールします.</div>
<div>
出来る限りHomebrewでインストールした方が後々管理がラクかと思います.</div>
<pre class="brush: bash">$ brew cask install crosspack-avr</pre>
<h3>
パスを通す</h3>
さて,パスを通します.<br />
<pre class="brush: bash">export PATH=$PATH:/usr/local/CrossPack-AVR/bin/
</pre>
<h3>
マニュアル</h3>
以下のディレクトリにマニュアルがあるので参考になります.<br />
<br />
<ul>
<li>/usr/local/CrossPack-AVR/manual/index.html</li>
<li>/usr/local/CrossPack-AVR/doc/</li>
</ul>
<h2>
開発開始</h2>
<h3>
プロジェクトの作成</h3>
<pre class="brush: bash">$ avr-project <プロジェクト名>
</pre>
<div>
作成後,xcodeprojファイルを開きます.
プロジェクトには,2つのファイルが登録されています.</div>
<ul>
<li>main.c</li>
<li>Makefile</li>
</ul>
<div>
<h3>
Makefileの設定</h3>
重要なのはMakefileです.Makefileで書き込み先のマイコンの設定を行います.<br />
この辺りは,WindowsのAVR Studioだと自動もしくはGUIで設定できるので安心ですが,こちらでは直接指定します.<br />
<br /></div>
<div>
</div>
<div>
デフォルトは次のようになっています.</div>
<pre class="brush: text">DEVICE = atmega8
CLOCK = 8000000
PROGRAMMER = #-c stk500v2 -P avrdoper
OBJECTS = main.o
FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
</pre>
<br />
<ol>
<li>DEVICEは,使用するマイコンを指定する.文字列は/usr/local/CrossPack-AVR/manual/index.htmlの「Supported Devices」から選ぶ.</li>
<li>CLOCKは,文字通り動作クロック数を指定する.</li>
<li>PROGRAMMERは,プログラマを指定する.定義名は /usr/local/CrossPack-AVR/doc/avrdude/avrdude_4.htmlにドキュメントされている.</li>
<li>OBJECTSは,Makefileでいつも指定するオブジェクトファイル</li>
<li>FUSESは,この値でマイコンの動作指定を行う.誤って指定するとそれ以降書き込みが出来なくなる場合もあるため慎重に指定しなければならない.<a href="http://www.engbedded.com/fusecalc" target="_blank">AVR Fuse Calclator</a>で値を作るのがベスト.</li>
</ol>
<div>
今回は以下のような設定を利用します.<br />
<pre class="brush: text">DEVICE = atmega168p
CLOCK = 8000000
PROGRAMMER = -c avrispmkII -P usb
OBJECTS = main.o
FUSES = -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m
</pre>
<br /></div>
<h3>
ビルド&書き込み</h3>
<div>
main.cのプログラムはまだテンプレートのみですが,いったん書き込んでみましょう.</div>
<div>
Runボタン,もしくはcommandキー+bでビルドと書き込みが実行されます.</div>
<div>
<br />
ただし,makeのターゲットを確認しましょう.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr9suw-jzl8nLiQiNaZn5pUaETQDpvhOVhoyHSK5FvLXPofk7XlPSw-rcE-8SpqmydEwexHG1kfrCpyI-5eYuZC9821OUl1zSVLZBK-aznEv3sstWotDURqDHZz6Uy5ICUREvoME7KQQ2_/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2016-02-06+16.35.03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr9suw-jzl8nLiQiNaZn5pUaETQDpvhOVhoyHSK5FvLXPofk7XlPSw-rcE-8SpqmydEwexHG1kfrCpyI-5eYuZC9821OUl1zSVLZBK-aznEv3sstWotDURqDHZz6Uy5ICUREvoME7KQQ2_/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2016-02-06+16.35.03.png" width="640" /></a></div>
<br />
<br />
<ul>
<li>fuse: FUSESの値を書き換えて,プログラムを書き込む.</li>
<li>flash: FUSESの値はそのままで,プログラムを書き込む</li>
</ul>
<br />
です.その他の値はMakefileで確認のこと.初回のみfuseで書き込んで,2回目以降はflashでよいでしょう.<br />
<br /></div>
<div>
AVR ISP mkIIを接続し,フラッシュしてみましょう.</div>
<div>
<br /></div>
<h2>
まとめ</h2>
<div>
AVRの開発をMacでもやりたい!と思い立って試してみました.(素直にWindowsでやれば良いのに)</div>
<div>
Mac向けAVRパッケージであるCrosspack-AVRをhomebrewでインストールして構築しました.<br />
ただ,WindowsでAtmelStudioを利用した方が無難だと思いますね,やはり.</div>
<hr />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789846040" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789837300" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4789842134" style="height: 240px; width: 120px;"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-7126390436172337552015-06-14T10:42:00.001+09:002015-06-14T10:42:49.188+09:00MacのTime Machineではバックアップされないフォルダ(ディレクトリ)があった.<h2>
バックアップに便利なTime Machineですが..</h2>
Time Machine便利ですよね.かんたんに設定するだけで自動的にどんどんバックアップを取ってくれるから重宝しています.<br />
でも,一部のディレクトリだけがバックアップが取られていませんでした.<br />
HDDがクラッシュしてから気付いたため立ち往生してしまいました.<br />
注意すべき点は2つあります.それは<br />
<div>
<ol>
<li>外付けHDDのバックアップは可能,ただし設定が必要</li>
<li>特定のフォルダがバックアップ対象にならない</li>
</ol>
<h3>
外付けHDDのバックアップは可能,ただし設定が必要</h3>
外付けハードディスクもTime machineでバックアップ可能ですが,デフォルトではバックアップの対象外に設定されてバックアップされない状態に模様です.Time Machineの設定を変えるだけでバックアップ対象になります.<br />
<br />
システム環境設定→Time Machineからオプションに入り,外付けHDDが一覧にあったら「-」ボタンで一覧から削除します.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDGly57MQuofdYEki6Nj0itEWtaZ-vvZXIWA3qwEmOaEeZsdlzRXH0VwzxgMnHZsvUp0D5p0pV-ns4_ulliwEMTF6oIAERGFSZm-c8Xtvut4JEM376ZpTtjo4NKLgyQ-RqEhAQlltIDbHk/s1600/image1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDGly57MQuofdYEki6Nj0itEWtaZ-vvZXIWA3qwEmOaEeZsdlzRXH0VwzxgMnHZsvUp0D5p0pV-ns4_ulliwEMTF6oIAERGFSZm-c8Xtvut4JEM376ZpTtjo4NKLgyQ-RqEhAQlltIDbHk/s320/image1.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3TMC9rTgpBzxfWCbzwOeHrLU_9l-GnQAZS-90fXtKg0KRzY8MGHpKGwUEx6WJZsR4XOFUG5YkMFfB9nyLuSrKrwiiYMZNN6UuFWbMHiVFQvHnr-Ua627CmQJJ4BmhoTf6moIEPRFuRS0n/s1600/image2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3TMC9rTgpBzxfWCbzwOeHrLU_9l-GnQAZS-90fXtKg0KRzY8MGHpKGwUEx6WJZsR4XOFUG5YkMFfB9nyLuSrKrwiiYMZNN6UuFWbMHiVFQvHnr-Ua627CmQJJ4BmhoTf6moIEPRFuRS0n/s320/image2.png" width="320" /></a></div>
<br />
<br />
<h3>
特定のフォルダがバックアップ対象にならない</h3>
</div>
一部のフォルダは更に例外的にバックアップ対象から除かれているようです.どんなフォルダが除かれているかは<br />
<br />
<b>/System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plist</b><br />
<b><br /></b>
で確認できます.<br />
<br />
<pre class="brush:bash">$cat /System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plist
</pre>
該当するフォルダはありましたか?先ほどの「バックアップ対象から除外する項目」で設定した内容が羅列されています.私は外付けHDDのhomeという名前のフォルダが全くバックアップされていませんでいた.システムディレクトリという扱いのようですね.
おそらく原因は
<br />
<pre class="brush:xml"><plist version="1.0">
<dict>
<!-- paths we do not want to include in a system backup -->
<key>PathsExcluded</key>
<array>
<!-- 省略 -->
<string>/home</string>
<!-- 省略 -->
</array>
</dict></plist></pre>
につきるでしょう.このファイルを直接書き換えるという手もアリなのかもしれませんが,システムに自動生成されるファイル故おそらくオススメできないでしょう.そこで,今回はhomeというフォルダ名を変更することで対応しました.<br />
<br />
<br />
しかしなぁ,この辺りにHDDがクラッシュする前に気付いていればな〜〜Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-33537191802165224992015-05-24T19:11:00.001+09:002015-05-24T22:02:04.630+09:00unityの最初の書籍えらび先日,RoomAlive<a href="http://hiroyky.blogspot.jp/2015/05/kinect-v2roomalive.html">RoomAliveをためしてみた</a>のですが,今後の発展を考えたときにゲーム開発キットのUnityを学ぼうと思いました.<br />
今ではOpenGLラッパーライブラリを使ってセコセコと描画すると言うことはしないんでしょうか(^^)v<br />
<br />
さて,Unityですがこれまでも勉強しよう,勉強しようとして続いていなかったので今度こそは続けようと思います.とりあえずチュートリアルとして進められる書籍などを一通りやり終えて,何か自作していきたいなぁと思います.<br />
<br />
ゲーム制作と言うよりは,手頃な映像表現と言うことで興味あるんですけどね.<br />
<br />
で,その書籍ですが,,基本的にプログラミングについては分かっていますし,C#は大好きな言語なので,あまり教科書的にならず一緒に作っていくタイプの本にしました.(ちなみに,プログラミング初心者の方にも言語の教科書的な書籍と一緒に作っていくタイプの書籍両方を買って,交互に読み進めていくことを進めています.)<br />
<br />
まず,以前買っていた1冊目.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797370084/yorozumitama-22/ref=nosim/" rel="nofollow" style="margin-left: auto; margin-right: auto;"><img alt="ゲームの作り方 Unityで覚える遊びのアルゴリズム" src="http://ecx.images-amazon.com/images/I/61xaFXa2-TL._SY380_.jpg" style="border: none;" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.amazon.co.jp/gp/product/4797370084/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797370084&linkCode=as2&tag=yorozumitama-22" target="_blank">ゲームの作り方 Unityで覚える遊びのアルゴリズム</a></td></tr>
</tbody></table>
バンダイナムコスタジオ!と帯に書いてあったのですが,失敗しました.内容は非常に良さそうなのですが,Unity初心者には厳しい;;最初の章は非常に丁寧に説明があるのですが,その次の章からかなり説明が省かれて,応用的な説明になっています.完全に2冊目以降の本でした.(←確認してから買え!)ある程度,内容も豊富で良著な予感ですがある程度 出来るようになってから読みたいと思います.<br />
<br />
で,続いた2冊目,これ結構イイですよ.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797367725/yorozumitama-22/ref=nosim/" rel="nofollow" style="margin-left: auto; margin-right: auto;"><img alt="Unityではじめるゲームづくり (DVD付) (ゲープロシリーズ)" src="http://ecx.images-amazon.com/images/I/51n4kK7CnIL._SY380_.jpg" style="border: none;" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.amazon.co.jp/gp/product/4797367725/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797367725&linkCode=as2&tag=yorozumitama-22" target="_blank">Unityではじめるゲームづくり</a></td></tr>
</tbody></table>
<br />
これは,正真正銘の初心者向けの本ですね.若干,古い本なのでUIの配置の違いに戸惑うこともありますが何とか大丈夫です.難点を挙げればやや画像が少ないことかな,,,マウス操作やボタンの位置などについてはスクリーンショットで説明して欲しかった.ゲーム制作の考え方なども述べられています.<br />
<br />
最後に,ひよこの本.とりあえずコレで学習しようと思います.スクリーンショットのイラストがたくさんあるため,操作の仕方が分かりやすい.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/479737490X/yorozumitama-22/ref=nosim/" rel="nofollow" style="margin-left: auto; margin-right: auto;"><img alt="Unity4入門 最新開発環境による簡単3Dゲーム制作" src="http://ecx.images-amazon.com/images/I/51oHWyEaKDL._SY380_.jpg" style="border: none;" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.amazon.co.jp/gp/product/479737490X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=479737490X&linkCode=as2&tag=yorozumitama-22" target="_blank">Unity4入門 最新開発環境による簡単3Dゲーム制作</a></td></tr>
</tbody></table>
先ほどの<a href="http://www.amazon.co.jp/gp/product/4797367725/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797367725&linkCode=as2&tag=yorozumitama-22" style="font-size: 12.8000001907349px; text-align: center;" target="_blank">Unityではじめるゲームづくり</a>ほどの情報量は無さそうですが,その分スクリーンショットのイラストなどの多くて分かりやすいと感じました.<br />
<br />
ただあくまでも,C#やJavaScriptその他もろもろのコーディングはできる人がUnityの操作方法や仕様を勉強したいと選んだ結果というのをご留意ください.<br />
<br />
さ,がんばるぞい!<br />
<br />
※追記<br />
これらの本はUnity4向けに書かれています.2015年5月24日現在の最新バージョンは5です.私も含めて初めての場合は,Unity4.6でやった方が良さそうです.Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-60519316264090682832015-05-18T23:23:00.002+09:002017-01-30T00:53:15.995+09:00Kinect v2で、RoomAliveを試してみた<h2>
RoomAliveって何?</h2>
マイクロソフトがBuild2015で披露したKinect v2とプロジェクタを組み合わせたプロジェクションマッピングです。部屋の壁にプロジェクタで映像を投影して、映し出したCGの物体をタッチしたりするとKinectでソレを検出してインタラクティブな操作を可能にする物です。<br />
<br />
恐らくこの映像を見ていただくのが分かりやすいと思います。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ILb5ExBzHqw/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ILb5ExBzHqw?feature=player_embedded" width="320"></iframe></div>
<br />
自分の部屋がAR空間になって、とてもすばらしですね。私はコレを見て物凄くワクワクしました。<a href="http://japanese.engadget.com/2015/05/03/roomalive/" target="_blank">部屋をゲーム世界にするRoomAlive、マイクロソフトがプロジェクションマッピング自作ツール公開</a>でも紹介されています.<br />
<br />
<h2>
必要な物</h2>
<ul>
<li>Kinect v2 (Windows PCに接続できる) 1台以上</li>
<li>プロジェクタ 1台以上</li>
<li>Windows 8 のPC</li>
<li>Visual Studio 2013</li>
<li>Kinect2 SDK</li>
</ul>
<br />
Kinect v2はXbox One Kinectセンサーと等価ですが、ここではKinect v2と表記します。<br />
<br />
<h3>
Kinect v2と接続ケーブル</h3>
私は、RoomAliveのデモを見てKinect v2とプロジェクタをそれぞれ1台ずつ購入しました。<br />
(これまで、Kinect v1は持っていたのですがv2は持っていませんでいた。)<br />
<br />
<a href="https://www.amazon.co.jp/exec/obidos/ASIN/B00NIF06V2/yorozumitama-22/ref=nosim/" rel="nofollow" style="border: 1px solid #eee; display: block; margin: auto auto; text-align: center;" target="_blank"><img alt="Xbox One Kinect センサー (DANCE CENTRAL SPOTLIGHT (ご利用コード) 同梱)" src="//ecx.images-amazon.com/images/I/311GhnBBHWL._SS500_.jpg" style="border: none;" /><br />Xbox One Kinect センサー</a><br />
<br />
初期のKinect v2では、Xboxゲーム用のKinectの物と、Windows開発用の物と2種類ありましたが、現在ではXboxゲーム用のKinect v2に一本化されているようです。<br />
<br />
ただし、この<a href="https://www.amazon.co.jp/exec/obidos/ASIN/B00NIF06V2/yorozumitama-22/ref=nosim/" rel="nofollow" style="border: 1px solid rgb(238, 238, 238); display: inline !important; margin: auto; text-align: center;" target="_blank">Xbox One Kinect センサー</a>を買えばXboxでゲームを楽しむことはできるのですが、PCに接続して開発するには次の接続ケーブルを購入する必要があります。<br />
若干価格が高いですが、これはWindows開発のためにライセンス料も含まれていると考えるわけです。(元々、Windows向けのKinect v2は2万円くらいしていた。)<br />
<br />
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00P9VXCT6/yorozumitama-22/ref=nosim/" rel="nofollow" style="border: 1px solid #eee; display: block; margin: auto auto; text-align: center;" target="_blank"><img alt="マイクロソフト Xbox One Kinect センサー用 Windows PC アダプター 9J7-00001" border="none" src="//ecx.images-amazon.com/images/I/419fJ5SAMBL._SS400_.jpg" /><br />マイクロソフト Xbox One Kinect センサー用 Windows PC アダプター</a>
<br />
<br />
<h3>
プロジェクタ</h3>
<br />
プロジェクタも買ってしまいました。フルHDが良かったのですが、エプソンのEB-X8と言う機種を中古購入しました。新品でプロジェクタを購入するとお高いので、今回は<a href="http://auctions.search.yahoo.co.jp/search?p=%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%BF%E3%83%BC" target="_blank">ヤフオクで落札</a>しました。<br />
<br />
<h3>
開発環境</h3>
<br />
無料で利用できる<a href="https://www.microsoft.com/ja-jp/dev/products/community.aspx" target="_blank">Visual Studio 2013 Community</a>を使いました。<br />
iMac 5K RetinaにBootcampで構築したWindows8.1 64bit を使用します。<br />
<a href="https://www.microsoft.com/en-us/kinectforwindows/develop/" target="_blank">Kinect2 SDKをダウンロード</a>&インストールします。<br />
<br />
<h2>
RoomAlive Toolkit</h2>
<br />
プロジェクタとKinect v2各1台からRoomAliveができるツールキットがGithubで公開されています。<br />
<div>
<ul>
<li><a href="https://github.com/Kinect/RoomAliveToolkit" target="_blank">https://github.com/Kinect/RoomAliveToolkit</a></li>
</ul>
</div>
また、このツールキットを使った解説ビデオが公開されています。リスニング力がない私には厳しい、、、が参考になります!<br />
<br />
<ul>
<li><a href="http://channel9.msdn.com/Events/Build/2015/3-87" target="_blank">Hacking Augmented Reality with Kinect</a> (英語)</li>
</ul>
<br />
<h3>
アウトライン</h3>
<div>
<ol>
<li>GithubからRoomAlive Toolkitのソリューションをcloneして、ビルドする。</li>
<li>PCにKinect v2とプロジェクタを接続&設置する。</li>
<li>CalibrateEnsembleで設置したKinect v2とプロジェクタのキャリブレーションを行う。</li>
<li>ProjectionMappingSampleを試してみる.</li>
</ol>
</div>
<h3>
GithubからRoomAlive Toolkitをcloneして、ビルドする</h3>
<a href="https://github.com/Kinect/RoomAliveToolkit">https://github.com/Kinect/RoomAliveToolkit</a>にリポジトリがあるわけですが、2015年5月16日現在まだまだ完成と呼ぶには遠い開発途中のプログラムになっています。特に、マスターブランチではキャリブレーションなどに失敗した際の例外がキャッチされず、そのままアプリケーションがクラッシュしてしまいます。developブランチではある程度改善されていますが、いくつか間違いが見受けられました。<br />
そこで、私は自分で最低限修正したコードを使用しました。developブランチを変更したコードを<a href="https://github.com/hiroyky/RoomAliveToolkit/tree/develop">https://github.com/hiroyky/RoomAliveToolkit/tree/develop</a>にフォークして公開しています。<br />
ここではこれをクローンすることにします。その後、developブランチに切り替えます。<br />
<br />
<pre class="brush: bash">$git clone git@github.com:hiroyky/RoomAliveToolkit.git
$git git checkout -b develop origin/develop
</pre>
<br />
ただし、本屋RoomAliveリポジトリは今後開発が進められていくと思います。実際、本屋RoomAliveのdevelopブランチはかなりの頻度でコミットされているようです。(私は本屋にpull requestするつもりは恐れ多くてありません。。。)<br />
<br />
ソリューションの中身は6つのプロジェクトから構成されています。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4fm8E47Zve0s4LFL9nGEuiwWp3nypMn2-meO28jIkPTUsLJe_b6gyYCuaPU6ZY9fvsGjI7jcV1Ps0iYl1YvPYqZ1UIvJKIvX9i0aMgub55rqAi_8xzt7sCicyG6seV9zPRMO7oQofQqpl/s1600/solutionexplorer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4fm8E47Zve0s4LFL9nGEuiwWp3nypMn2-meO28jIkPTUsLJe_b6gyYCuaPU6ZY9fvsGjI7jcV1Ps0iYl1YvPYqZ1UIvJKIvX9i0aMgub55rqAi_8xzt7sCicyG6seV9zPRMO7oQofQqpl/s320/solutionexplorer.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">プロジェクト群</td></tr>
</tbody></table>
ひとまず、まずはソリューション全体をビルドしてみましょう。追加で必要なパッケージは適宜NuGetでダウンロードされます。<br />
<h3>
PCにKinect v2とプロジェクタを接続&設置する</h3>
Kinect v2とプロジェクタをPCに接続します.プロジェクタの投影がKinect v2で捉えられれば位置関係はOKだと思います.今回は,プロジェクタの上にKinect v2を設置しました.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh83PkztdfxxKXZlILnzFxChyphenhyphenReZ3Z0N4zT5JnslFKFfZHFe0GIsUvuXQVYeG7_CZNpgo9bQoI4jmDoVOW6VzPVMjBjoVu2d6tsF25vYXqx6VkSPqn6NGbYA0KqxRk8qfeF4y3luu02_0mw/s1600/DSC_0242.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh83PkztdfxxKXZlILnzFxChyphenhyphenReZ3Z0N4zT5JnslFKFfZHFe0GIsUvuXQVYeG7_CZNpgo9bQoI4jmDoVOW6VzPVMjBjoVu2d6tsF25vYXqx6VkSPqn6NGbYA0KqxRk8qfeF4y3luu02_0mw/s640/DSC_0242.jpg" width="640" /></a> </div>
<div class="separator" style="clear: both; text-align: left;">
通常の投影とは異なり,<b>平面では<u>ない</u>ところに投影する必要</b>があります.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj-_zrz46FRKX8QVb3fWSJUX5llHh54GH-xIBa23A75-xiWOiJqQadt4HeAy5lEwBtMrApvmBOf7-V-p_k1nOWRzXjIDJj6lJtetDbf6CBxPI3LkFpvBy2d60t15QXsilPeluZ3YZU13Jk/s1600/DSC_0244.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj-_zrz46FRKX8QVb3fWSJUX5llHh54GH-xIBa23A75-xiWOiJqQadt4HeAy5lEwBtMrApvmBOf7-V-p_k1nOWRzXjIDJj6lJtetDbf6CBxPI3LkFpvBy2d60t15QXsilPeluZ3YZU13Jk/s640/DSC_0244.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">投影したところ,このように部屋の端などが良いベスト??(生活感アリアリですいません)</td></tr>
</tbody></table>
プロジェクタ画面と2画面拡張にします(ミラーリングではありません).<br />
<br />
<h4>
CalibrateEnsembleで設置したKinect v2とプロジェクタのキャリブレーションを行う</h4>
<br />
まず,<b>KinectServer.exeとProjectorServer.exeを起動</b>します.Visual Studioのデバッグモードではなく,直接binディレクトリを開いて起動しましょう.ProjectorServerのウィンドウをプロジェクタの画面に移動させます.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt4sVm2pMM7yZwlzSbletx3XR6eVjPpU5F6UXmIs0yYZTLFBWdSPTw71YWur-PEY-ttWtAeSuqvtsXNyfrGOQocH0QovhsxlFQs9-XFoMcTMyU4cbMFbhvL5icALUfDe5TwzrAUEzbexl-/s1600/DSC_0245.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt4sVm2pMM7yZwlzSbletx3XR6eVjPpU5F6UXmIs0yYZTLFBWdSPTw71YWur-PEY-ttWtAeSuqvtsXNyfrGOQocH0QovhsxlFQs9-XFoMcTMyU4cbMFbhvL5icALUfDe5TwzrAUEzbexl-/s640/DSC_0245.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ProjectorServerのウィンドウを投影画面に移動</td></tr>
</tbody></table>
<br />
<br />
CalibrateEnsembleプロジェクトをスタートアップのプロジェクトに設定して、F5キーを押して、デバッグモードでCalibrateEnsembleを起動しました。(スタートアップのプロジェクトに設定するには、ソリューションエクスプローラのCalibrateEnsembleを右クリック→スタートアッププロジェクトに設定をクリックします。)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6lA8qn1X6lQiBeZhH7Zyy7BClC9DiQYM4UfI4O8KEcAUxAcam9MT5p5eHcV_sZDwjugrJZ-Ar3w-kiaDb5vfDh-335on2cT9XqYlxBNqmphQHlDP8qevsZYwNcwA10ksXs5mOBdrd8KvV/s1600/calibration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6lA8qn1X6lQiBeZhH7Zyy7BClC9DiQYM4UfI4O8KEcAUxAcam9MT5p5eHcV_sZDwjugrJZ-Ar3w-kiaDb5vfDh-335on2cT9XqYlxBNqmphQHlDP8qevsZYwNcwA10ksXs5mOBdrd8KvV/s400/calibration.png" width="400" /></a></div>
<br />
ツールバーのFile→Newと進めます。<br />
「Create New Ensemble」のダイアログが表示されたら接続しているKinect v2とプロジェクタの台数を指定します。今回は両方とも1台なのでこのままOKをクリックします。<br />
続いて、キャリブレーション結果を記録するXMLファイルの保存先を指定します。XMLファイルが作成されます。<br />
<br />
XMLファイルを編集します.<br />
XMLファイルのCameraとProjector要素の直下にあるname要素の値が初期値は"0"になっていると思いますが、好きな名前に変更しましょう。私はmainとしました。<br />
複数台のカメラとプロジェクタを使うときは、どれがどれを示しているのか分かりやすい名前にする必要がありそうです。<br />
また、projector要素のdisplayindexをプロジェクタが投影している画面の番号にします。大抵はメインのディスプレイが0でプロジェクタが1になるようです。<br />
<br />
<pre class="brush: xml"><projectorcameraensemble xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>Untitled</name> ←好きな名前に変更
<cameras>
<camera>
<name>main</name> ←好きな名前に変更
<hostnameoraddress>localhost</hostnameoraddress>
<pose>
<valuesbycolumn>
<arrayofdouble>
<double>1</double>
<double>0</double>
<double>0</double>
<double>0</double>
</arrayofdouble>
<arrayofdouble>
<double>0</double>
<double>1</double>
<double>0</double>
<double>0</double>
</arrayofdouble>
<arrayofdouble>
<double>0</double>
<double>0</double>
<double>1</double>
<double>0</double>
</arrayofdouble>
<arrayofdouble>
<double>0</double>
<double>0</double>
<double>0</double>
<double>1</double>
</arrayofdouble>
</valuesbycolumn>
</pose>
</camera>
</cameras>
<projectors>
<projector>
<name>main</name> ←好きな名前に変更
<hostnameoraddress>localhost</hostnameoraddress>
<displayindex>1</displayindex> ←ここでは0から1に変更
<width>0</width>
<height>0</height>
</projector>
</projectors>
</projectorcameraensemble>
</pre>
<br />
ProCam Ensemble Calibrationのアプリケーションに戻って、File→Reloadをクリックします。<br />
右側に<br />
Loaded <XMLファイルへのパス><br />
が出力されます。<br />
<br />
ツールバーのSetup→Show Projector Namesから画面の識別を表示します。プロジェクタが適切に選ばれいることを確認します。<br />
<div>
<br />
キャリブレーションを開始します.<br />
ツールバーのCalibrate→Acquirで開始します.<br />
続いて,Calibrate→Solveします.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tt1xVcoYo2roBBI7lBTWwnvIhStSYzQQfRQlhik6l2EX3MKKiYLb1d65wr9_TyVAo3ABk6Z6VEoi2XY8P9lc3zsLK458U7dp8XU2b3bW10R7qbggc1lzLbgGPlbAWLG59ZUJlA607PFJ/s1600/DSC_0246.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tt1xVcoYo2roBBI7lBTWwnvIhStSYzQQfRQlhik6l2EX3MKKiYLb1d65wr9_TyVAo3ABk6Z6VEoi2XY8P9lc3zsLK458U7dp8XU2b3bW10R7qbggc1lzLbgGPlbAWLG59ZUJlA607PFJ/s640/DSC_0246.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">キャリブレーション中の様子</td></tr>
</tbody></table>
<br /></div>
終わったらFile→Saveで先ほどのXMLにキャリブレーション結果を追記されます.<br />
<br />
Acquir及びSolveで右側の出力で例外が発生していないかを確認します.発生していなければ正常です.<br />
ちなみに,現状のマスターブランチのコードではこのとき,例外がキャッチされずにアプリケーションごと終了してしまいます.<br />
また,平面に投影している場合はキャリブレーションに失敗します.プロジェクタの投影面などを調整してみるのもアリでしょう.<br />
<br />
キャリブレーションが終わったらFile→Saveで結果を保存します。先ほどのXMLファイルに追記されます。また、XMLと同じフォルダに撮影した画像ファイルを含むフォルダが作成されます。<br />
<br />
再度,File→OpenでXMLファイルを開きなおし,左側の画像をマウスでドラッグしたり、<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "segoe ui" , "arial" , "freesans" , sans-serif; font-size: 16px; line-height: 25.6000003814697px;"> </span><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "segoe ui" , "arial" , "freesans" , sans-serif; font-size: 16px; line-height: 25.6000003814697px;">W, A, S, D, E, Dキーを押したり</span>することで部屋の3Dモデル(?)を確認することができます。また、ツールバーのRender→Live Viewにするとリアルタイムにそれが確認できます。<br />
<h3>
ProjectionMappingSampleを試してみる</h3>
それでは,プロジェクションマッピングのサンプル動かしてみます.<br />
ただし,その前にプロジェクト内のProperties/Settings.settingsを開いて設定を行います.ここでは便宜上,<br />
<div>
<ul>
<li>FullScreenEnabled: False</li>
<li>LocalHeadTrackingEnabled: False</li>
</ul>
に変更しました.FullScreenEnabledはTrueだと映像が表示なかったからです.一方,LocalHeadTrackingEnabledはTrueにするとKinect v2が人物を検出して,人物に合わせてオブジェクトをコントロールします.ただ,若干わかりにくいので最初はFalseにして,2回目移行にTrueにしてみましょう.</div>
このプログラムは引数に,先ほど設定したキャリブレーションのXMLへのパスを取ります.プロジェクトを右クリック→プロパティ→デバッグからコマンドライン引数でパスを指定します.<br />
ここまで出来たら,ProjectionMappingSampleプロジェクトをスタートアッププロジェクトに設定して起動します.<br />
2つのウィンドウが表示されるので,プロジェクタ名の方のウィンドウを投影画面に移動させて最大化しましょう.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNjZma4WtFHivDxdzheeQBT2FLfn-5TVt07r0aSyCxFXpOplUCdIShZUNKJs9UJiIzr5GTy7KLZqOmBim4C-Y0ZNo48FtUZvJtufuVCvkUHLDFNwBNbqcYxa-Ox2qnrxsa5WtTgJyu7CkG/s1600/DSC_0250.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNjZma4WtFHivDxdzheeQBT2FLfn-5TVt07r0aSyCxFXpOplUCdIShZUNKJs9UJiIzr5GTy7KLZqOmBim4C-Y0ZNo48FtUZvJtufuVCvkUHLDFNwBNbqcYxa-Ox2qnrxsa5WtTgJyu7CkG/s640/DSC_0250.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">サンプルのプロジェクションマッピング</td></tr>
</tbody></table>
できたーーーー!<br />
部屋の角に投影しているますが,投影されている家の模型(?)オブジェクトはそれを見事に吸収しています.実際,タイトルバーやタスクバーはゆがんでいますが,オブジェクトは角の影響を受けてゆがんでおらず,まっすぐです.<br />
<br />
<h2>
トラブルシューティング</h2>
<br />
<h3>
EndpointNotFoundException</h3>
ProjectorServer.exeやKinectServer.exeは起動していますか?<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwDvXIMZRYFtAQkc1gZow0yXIRb-hb_DCJoWGbyRDb-JbOw8SH-2O-IEkdbSEJibzRNdFrboFF2aYR9JMb-Ld_OIYE1UFdVVsVcZomGb_FlVNCoySkTLYuXi1xQdLdn0yNbQ0XClx1pOf8/s1600/error01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwDvXIMZRYFtAQkc1gZow0yXIRb-hb_DCJoWGbyRDb-JbOw8SH-2O-IEkdbSEJibzRNdFrboFF2aYR9JMb-Ld_OIYE1UFdVVsVcZomGb_FlVNCoySkTLYuXi1xQdLdn0yNbQ0XClx1pOf8/s400/error01.png" width="400" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7Ik4-5ZlpCnGRWEw3VpWeI3pYGtzIACh1kYpXk9fIQIfpFXDqEXUdECZQWgMcNf66js53Zg9r6QIVxjFBsj0XrY_VNqHipZ3cAYF4pJOtJkcZcqGI5aVID53lto_o7G9xwYjl4DIc7Fr/s1600/error02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7Ik4-5ZlpCnGRWEw3VpWeI3pYGtzIACh1kYpXk9fIQIfpFXDqEXUdECZQWgMcNf66js53Zg9r6QIVxjFBsj0XrY_VNqHipZ3cAYF4pJOtJkcZcqGI5aVID53lto_o7G9xwYjl4DIc7Fr/s400/error02.png" width="400" /></a></div>
<br />
<hr />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00UA9TJOO" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00UR986QO" style="height: 240px; width: 120px;"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-33776550497409126022015-03-29T21:05:00.001+09:002015-03-29T21:14:45.338+09:00Apache2でDigest認証を設定した<h2>
Aapcheで稼働しているWebサーバ上で,特定のページをパスワードで認証をかけたい!</h2>
そのために,今回はDigest認証を行いました.<br />
<br />
一般的にベーシック認証もありますが,こちらの方がより安全とのことです.<br />
<a href="http://www.adminweb.jp/apache/allow/index8.html" target="_blank">ダイジェスト認証を設定する(AdminWeb)</a>に従って進めました.<br />
<h2>
認証の準備</h2>
htdigestを使用するそうですが,インストールされていなかったためapt-getでインストールしました.
<br />
<pre class="brush:bash">$ htgiest
-bash: htgiest: command not found
$apt-cache search htdigest
apache2-utils - Apache HTTP Server (utility programs for web servers)
$sudo apt-get install apache2-utils
</pre>
<br />
また,Apache2のDigest認証のモジュールも有効にします.
その後は当然再起動が必要ですが,まだApache2の設定が必要であるため,あとでまとめてやります.
<br />
<pre class="brush:bash">$sudo a2enmod auth_digest
</pre>
それでは,/etc/apache2/.digestpassをパスファイルとして自分の認証キーを追加します.
<br />
<pre class="brush:bash">$sudo htdigest -c "/etc/apache2/.digestpass" "Digest Authentication" hiroyky
New password:
Re-type new password:
$sudo cat /etc/apache2/.digestpass ←確認
</pre>
<h2>
Apacheの設定</h2>
今回は,ディレクトリではなくURL毎に制限を掛けたかったため先ほどのページとは異なり
Locationで制限をかけました.といってもやり方は同じです.サイトの設定ファイルを編集します.
<a href="http://hiroyky.blogspot.jp/2015/03/gitlistgitgithubweb.html">以前,gitlistを稼働させました</a>が,チームのメンバーだけなど限られた人のみが閲覧できるリポジトリにしたかったわけなのです.
http://<my domain>/gitlist 以下を全て認証を行うようにします.
<br />
<pre class="brush:bash">$sudo emacs /etc/apache2/sites-avairable/<サイトの設定ファイル>
<location gitlist="">
AuthType Digest
AuthName "Digest Authentication" ←htdigestコマンドの2つめの引数,認証名と同じにする
AuthUserFile "/etc/apache2/.digestpass"
Require valid-user
</location>
</pre>
で,Apacheを再起動します.
<br />
<pre class="brush:bash">$sudo service apache2 restart
</pre>
<div>
<br /></div>
で〜きた!
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfz2wqb8PSfVduJuyCIKCVQeUqMkL2RlqO2AOzaz86-p4b9UVnXbjSLi-9LylL1tz65PZhIJP73OhwFNFp_4O4dgcgqskOKNOkEwgqFCu8B4OLU4pNKpYKCvX9xxK2EBPD5S4kDJ2nXZyM/s1600/screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfz2wqb8PSfVduJuyCIKCVQeUqMkL2RlqO2AOzaz86-p4b9UVnXbjSLi-9LylL1tz65PZhIJP73OhwFNFp_4O4dgcgqskOKNOkEwgqFCu8B4OLU4pNKpYKCvX9xxK2EBPD5S4kDJ2nXZyM/s1600/screen.png" height="315" width="320" /></a></div>
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-71839009098110813592015-03-24T07:23:00.001+09:002015-06-11T20:25:08.973+09:00GitlistでGithubみたいにWebからリポジトリを見られるようにした<h2>
GithubみたいにWebからリポジトリを確認したいな.</h2>
ODROID C1のUbuntuサーバ構築も一段落ついたので,今回はGitリポジトリをWebから閲覧できるようにしたいと思います.
<b>gitlist</b>を使って実現します.チーム内だけの非公開リポジトリをつくるときなどに便利そうですよね.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKADBDUQWZhlSqtTN5Y0fcWpFYrPn_dhlHn7NHGMDtR03nUI9De57JwpzhyphenhyphenlqZ-rKq4ASENj6OMxnZbWxp0qwvPH03OerUttoE0uZHYXv_XsiRZOoWLlpFRUAUwlMAck_ZgNM9cZpLdWUr/s1600/screen.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKADBDUQWZhlSqtTN5Y0fcWpFYrPn_dhlHn7NHGMDtR03nUI9De57JwpzhyphenhyphenlqZ-rKq4ASENj6OMxnZbWxp0qwvPH03OerUttoE0uZHYXv_XsiRZOoWLlpFRUAUwlMAck_ZgNM9cZpLdWUr/s1600/screen.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">gitlistでgitリポジトリを表示したところ</td></tr>
</tbody></table>
<br />
<h3>
インストールと設定</h3>
<pre class="brush:bash">$git clone https://github.com/klaussilveira/gitlist.git
$cd gitlist
$less README.md
</pre>
Apacheは<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1-ubuntu-5-subsonic.html">前回</a>の通りインストール済みです.<br />
<pre class="brush:bash">$sudo apt-get install apache2
</pre>
<br />
しかしREAD.mdによるとrewriteモジュールが必要なようなので有効にします.<br />
<pre class="brush:bash">$sudo apt-get install php5
$sudo a2enmod rewrite
</pre>
gitlistはPHPで書かれているそうですが,まだPHPをインストールしていなかったので,インストールします.<br />
<pre class="bash:brush">$sudo apt-get install php5
$sudo a2enmod php5
</pre>
<br />
さて,デプロイします.Apacheで設定したDocumentRootのディレクトリ以下にコピーするだけです.<br />
cacheディレクトリがなければ作成してパーミッション変更.設定ファイルはサンプルをコピーして使います.
<br />
<pre class="brush:bash">$sudo mv gitlist /var/www/html
$sudo chmod 777 cache
$cp config.ini-example config.ini
$emacs config.ini
[git]
client = '/usr/bin/git' ; ←git実行ファイルの場所
default_branch = 'master' ; ←デフォルトのブランチはマスターにするよ
repositories[] = '/home/git/repositories/' ;←リポジトリの場所,複数ある場合は改行して追記
; hidden[] = '/home/git/repositories/BetaTest' ; ←隠したいリポジトリを書く
debug = false
cache = true
theme = "default"
baseurl = "http://localhost/gitlist"; ←これを追記している記述を見かけます.
</pre>
<br />
URLをRewriteするための.htaccessが既にgitlistの中に入っていると思います.
Apache側で.htaccessを許可するか,.htaccessの中身を<Direcotry>セクションで書いてやるかして,,<br />
<br />
これで,OKなはずです.Webブラウザからhttp://xxx.xxx.xx/gitlistで表示されるはず..
<br />
<br />
<h2>
<directory>遭遇したトラブル?</directory></h2>
<h3>
<directory>空白ページが表示された( ゚Д゚)ヒョエー</directory></h3>
blank pageです.真っ白.色々試行錯誤した結果ですが,gitのリポジトリディレクトリ(repositories)はApacheのユーザすなわちwww-dataでもアクセスできる許可が要るようです.リポジトリディレクトリのパーミッションを775など公開用にしてやるか,リポジトリのグループにwww-dataを足すなど,方法はいくつかあると思いますが,ともかくパーミッションがないとWebからも見れないみたいです.<br />
<br />
私の場合は,リポジトリの持ち主はroot:repoでrepoグループに属していればアクセス可能にしていたので,<br />
<pre class="brush:bash">sudo gpasswd -a www-data repo
</pre>
www-dataをrepoに追加して対応しました.
<br />
<br />
<h3>
リポジトリの中身を見ようとすると404 NOT FOUND.</h3>
.htaccessを使用するなどして適切なRewrite設定ができていないとリポジトリの一覧ページが表示されても,リポジトリの中身を見ようとすと404エラーになりました.Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-15969957941875663542015-03-21T05:59:00.000+09:002015-03-21T05:59:51.009+09:00Odroid C1 / Ubuntu でサーバ構築 5: Subsonicで音楽ストリーミングサーバにするOdroid C1を利用してサーバを構築する.今回はSubsonicでメディアストリーミングサーバにします.<br />
Subsonicは指定ディレクトリ以下の音楽ファイルなどを検索し,Web上でストリーミング配信が行えるJavaベースのシステムです.開発元にお金を支払うことでビデオなどの配信やスマートフォンからのアクセス,DLNAにも対応します.ユーザ名とパスワードで保護されます.<br />
<h2>
Subsonic事始め</h2>
<h3>
インストール</h3>
Subsonicをダウンロードします.<a href="http://subsonic.org/" target="_blank">公式サイト</a>からダウンロードのURL(恐らくsourceforge)を確認してwgetで取得します.ダウンロードページではなく,debファイルの直リンクURLですね.<br />
ダウンロードしてインストールします.
<br />
<pre class="brush:bash">$wget -O subsonic.deb http://downloads.sourceforge.net/project/subsonic/subsonic/5.2.1/subsonic-5.2.1.deb
$sudo dpkg -i subsonic.deb
</pre>
<br />
SubsonicはJavaだからjreが必要なんじゃなかったけ??と思いつつインストールしました.
パッケージマネージャがそのことを指摘するかと思いきやしない.
<br />
<br />
ともかく,この段階でsubsonicは既に稼働しているはずです.初期設定では4040ポートでアクセスを受け付けているのでブラウザから開きます.<br />
<br />
http://192.168.1.xx:4040/<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpo9UV6VJ0zpkZH1bsGblLWHDprGT_qeER5GfaXGYPjwmGggOZAWxUcqUDFp7ps1NiCh3ZQPaYZ-qG5DbNbFidGH-YBQFUUhSYSjHyH7nS3Wd-dIYDRiyo6yD_QY1lraI5IEGzf6h9lgTK/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2015-03-21+1.09.31.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpo9UV6VJ0zpkZH1bsGblLWHDprGT_qeER5GfaXGYPjwmGggOZAWxUcqUDFp7ps1NiCh3ZQPaYZ-qG5DbNbFidGH-YBQFUUhSYSjHyH7nS3Wd-dIYDRiyo6yD_QY1lraI5IEGzf6h9lgTK/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2015-03-21+1.09.31.png" height="261" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">subsonicに初アクセス</td></tr>
</tbody></table>
<br />
<h3>
設定</h3>
最初にadminユーザのパスワード設定行います.ログインページにもサッサと設定するように警告されていますね.ユーザ名admin, パスワードadminでログインして,,,表示されるページの指示に従ってパスワードを変更します.<br />
<br />
再度ログインして音楽などのメディアディレクトリを指定すれば勝手にファイルを調べてくれて使えるようになります.カンタン<br />
<br />
<h2>
SSL(Https:443)でのアクセス,Apacheのリバースプロキシ</h2>
<h3>
Subsonicの設定</h3>
ここまででもSubsonicは機能するのですが,安全のためにSSLを使ってhttpsによるアクセスをできるようにしましょう.<br />
今回は,アクセスにはhttpsを使ったhttps://<ドメイン>/subsonic/ のURLにします.<br />
まずはsubsonicの設定ファイルを編集します.SUBSONIC_ARGSを以下のように変更しました.httpsは後述のApacheで実現します.そのため,--port=4040 --https-port=443といった設定を今回は行いません.<br />
<br />
<pre class="brush:bash">$sudo emacs /etc/default/subsonic
SUBSONIC_ARGS="--max-memory=200 --context-path=/subsonic"
</pre>
<br />
--max-memoryは使用するメモリの最大値を指定するようですが,どれくらいがいいのでしょうか??
一方の--context-pathはhttps://<ドメイン>/subsonic以下でSubsonicを運営するため,追加します.https://xxx/sonic以下で運営したい場合は/sonicにします.
<br />
その他の設定項目は<br />
<br />
<h3>
OpenSSLとApache, 鍵の作成</h3>
続いて,Httpsを実現するためにOpenSSLと,Apacheを設定します.OpenSSLはプリインストール済みかと思いますが確認します.<br />
<pre class="brush:bash">$whicl openssl
/usr/bin/openssl
</pre>
<br />
無ければapt-getでインストールしましょう.<br />
<br />
続いてApacheもインストールします.通常のUbuntu ServerならばOSインストール時に一緒にインストールすることもできますが,ODROIDのUbuntuでは恐らくないでしょう.<br />
ApacheをインストールしてSSLのモジュールをONにします.また,SSLのサイトもONにします.
<br />
<pre class="brush:bash">$sudo apt-get install apache2
$sudo a2enmod ssl
$sudo a2ensite default-ssl
</pre>
<br />
SSLのための鍵を作成します.今回は/etc/apache2以下につくります.
<br />
秘密鍵,公開鍵,鍵の証明の3つを作ります.鍵の証明は本来は然るべき機関から発行してもらうわけですが,それには費用も掛かるため,今回は証明書を自分でつくります.いわゆるオレ様証明書であるため,ブラウザが「証明書の〜〜」うんぬんと警告してきてしまいますが目をつむります.<br />
<pre class="brush:bash">$cd /etc/apache2
$sudo su
#openssl genrsa -des3 1024 > https.key ←秘密鍵の作成(RSA des3フォーマット,1024bitの鍵)
Enter pass phrase: ←パスフレーズを入力
Verifying - Enter pass phrase: ←再入力
# openssl req -new -key https.key >https.key.csr ←公開鍵の作成
Enter pass phrase for https.key: ←先ほどのパスフレーズを入力
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----↓ここからは公開が基の情報を入力
Country Name (2 letter code) [AU]:ja ←国名(二文字のコードでja, us, uk, krなど)
State or Province Name (full name) [Some-State]:tokyo ←都道県名
Locality Name (eg, city) []: ←市町村名(今回は空白)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hiroyky ←組織名
Organizational Unit Name (eg, section) []: ←担当部署名
Common Name (e.g. server FQDN or YOUR name) []:Happy Server ←サイト名
Email Address []:xxxxx@mail.jp ←メールアドレス
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←証明書破棄の際のパスワード(今回は空白)
An optional company name []: ←組織名2(今回は空白)
# openssl x509 -in https.key.csr -days 36500 -req -signkey https.key > https.key.crt ←証明書の発行(x509フォーマット,有効期限は36500日つまり100年←おい!笑)
Signature ok
subject=/C=ja/ST=tokyo/O=yokoyama/CN=Asuna/emailAddress=ykym_hirokazu@yahoo.co.jp
Getting Private key
Enter pass phrase for https.key: ←パスフレーズ入力
</pre>
これにて作成が完了しました.
<br />
<h3>
Apacheに鍵を登録</h3>
/etc/apache2/sites-available/default-ssl.confのSSLCertificateFileとSSLCertificateKeyFileを設定します.<br />
<pre class="brush:bash">$sudo emacs /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile /etc/apache2/https.key.crt ←証明書
SSLCertificateKeyFile /etc/apache2/https.key ←秘密鍵
</pre>
<br />
で,Apacheを再起動します.<br />
<pre class="brush:bash">$sudo service apache2 restart
</pre>
<br />
<h4>
Apacheの警告 AH0058</h4>
<pre class="brush:bash">$sudo service apache2 restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
</pre>
こういう警告メッセージが出てきました.<br />
<a href="http://mk-55.hatenablog.com/entry/2014/07/07/004510" target="_blank">ubuntuにおけるapache2のAH00558エラーを解決する。</a>や<a href="http://d.hatena.ne.jp/hykt/20081129/1227968494" target="_blank">UbutnuでApache2を起動してみた</a>にもあるようにServerNameを変えるか,/etc/hostsを設定するかのようです.もしくは無視しても構わないかもしれませんが..<br />
というわけで前者のページに従い.<br />
<pre class="brush:bash"> sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
sudo a2enconf fqdn
sudo service apach2 restart
* Restarting web server apache2
</pre>
として,ServerNameを設定しました.別ファイルを作るのも良いですが,/etc/apache2/apache2.confに追記しても良い気もしますが..
<br />
<br />
いずれにしてもhttpsでアクセスして,恐らく証明書の警告は表示されると思いますが,"It works!"のページが表示されました.<br />
<h3>
リバースプロキシの設定</h3>
https://<ドメイン>/subsonic でアクセスされたら4040ポートで稼働しているSubsonicにつなぎます.<br />
proxyモジュールを有効にし,<proxy>セクションを設定します.
</proxy><br />
<pre class="brush:bash">$sudo a2enmod proxy
$sudo a2enmod proxy_http
$sudo emacs /etc/apache2/mods-available/proxy.conf
<proxy>
AddDefaultCharset off
Order deny,allow
Allow from all
# #Require local
</proxy>
</pre>
<br />
SSLのVirtualHostを設定します.下記を追記します.
<br />
<pre class="brush:bash">$sudo emacs /etc/apache2/sites-available/default-ssl
SSLProxyEngine on ←プロキシを介してSSL化を有効にする
ProxyPass /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
ProxyPassReverse /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
</pre>
リバースプロキシの設定はお察しの通り
<br />
<pre class="brush:bash"> ProxyPass <url> <転送先>
ProxyPassReverse <url> 転送先>
</url></url></pre>
です.末尾の"/"スラッシュには注意です.<br />
<div>
<br /></div>
<div>
<h3>
変更の適用</h3>
<div>
Subsonic, Apache共に再起動して変更を適応します.</div>
<pre class="brush:bash">$sudo service subsonic restart
$sudo service apache2 restart
</pre>
<div>
<br /></div>
https://<ドメイン>/subsonicでsubsonicに行けるようになりました.<br />
<h2>
参考</h2>
http://www.jamescoyle.net/how-to/875-reverse-proxy-subsonic-with-apache<br />
http://qiita.com/paty-fakename/items/829afd3577ba18dbb2c8</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-80305762141227140012015-03-20T18:55:00.003+09:002015-03-20T19:14:15.372+09:00Odroid C1 / Ubuntu でサーバ構築 4: SambaOdroid C1を利用してサーバを構築する.今回はsambaで他のWindowsなどからファイルにアクセスできるようにします.普通のLinuxでのサーバ構築ですが,,<br />
まずは,apt-getでsambaをインストール<br />
<pre class="brush:bash">$sudo apt-get install samba
</pre>
sambaのためのユーザを別途追加します.このときのユーザ名やパスワードはクライアントとなるWindowsと同じにしておけば再ログインすることなくWindowsなどからアクセスできます.
<br />
<pre class="brush:bash">$sudo smbpasswd -a <ユーザ名>
</pre>
このあとはsambaの設定をします./etc/samba/smb.confを変更します.バックアップしてから編集します.<br />
まず,workgroupをWindowsなどで使っている名前に変更します.<br />
<pre class="brush:bash">sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo emacs /etc/samba/smb.conf
</pre>
<pre class="text">workgroup = <ワークグループ名></pre>
[homes]のコメントを外して有効にして設定すれば,各ユーザのディレクトリにアクセスできるようになります.各設定項目をそれぞれ有効にします.<br />
<br />
<ul>
<li>browsebleをyesにしてファイルのブラウジングを許可します.</li>
<li>read onlyをyesにしてファイルの書き換え,作成,削除を許可します.</li>
<li>create maskとdirectory maskでsambaアクセス時のパーミッションを設定します,</li>
<li>valid usersでアクセスできるユーザを限定します.</li>
<li>wide links follow symlinksでリンクをたどることを許可するかどうかを設定します.</li>
</ul>
<br />
<br />
<pre class="brush:text">[homes]
comment = Home Directories ←有効にする
browseable = yes ←有効にする, yesにする
read only = no ←有効にする, noにする
create mask = 0700 ←有効にする, sambaアクセス時のパーミッションを設定
directory mask = 0700 ←有効にする, sambaアクセス時のパーミッションを設定
valid users = %S ←有効にする
</pre>
他にも特定のディレクトリを共有したければ下記を追記します.<br />
<pre class="brush:text">[共有名]
comment = <コメント>
path = <共有するディレクトリパス>
browseable = yes
read only = yes
guest ok = no
create mask = 770
directory mask = 770
wide links = yes
unix extensions = no
follow symlinks = yes
valid users = <アクセス可能なユーザーまたはグループをスペースで区切って入力>
</pre>
設定後,sambaを開始します.
<br />
<pre class="brush: bash">$sudo service samba start
</pre>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-29655567142348000522015-03-20T17:28:00.000+09:002015-03-24T08:27:25.767+09:00Odroid C1 / Ubuntu でサーバ構築 3: rsync(lsyncd)の設定,リアルタイムのバックアップをする<span style="background-color: white; color: #666666; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 15.3999996185303px; line-height: 21.5599994659424px;">Odroid C1を利用してサーバを構築する.今回は<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1-ubuntu-2.html" target="_blank">前回</a>マウントした2基の外付けUSB HDDをミラーリングして自動バックアップできるようにします,</span><br />
<h2>
lsyncdのインストールと設定</h2>
<h3>
インストール</h3>
lsyncdをapt-getでインストールしてとりあえずバージョンの確認,恐らく2.1系列だと思われる.
<br />
<pre class="brush: bash">$sudo apt-get install lsyncd
$lsyncd --version
</pre>
<br />
<h3>
設定</h3>
今回は,異なるストレージをまたぐものの,外部のマシンと同期するわけではないローカルディレクトリの同期であるため設定もシンプルなはず..<br />
まず,設定ファイルを作成し,編集します.設定ファイルはサンプルをコピーし,編集します.設定ファイルの場所はデーモンのファイル/etc/init.d/lsyncdに記載されています.<br />
<pre class="brush:bash">cat /etc/init.d/lsyncd
-省略-
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="synchronization daemon"
NAME=lsyncd
DAEMON=/usr/bin/$NAME
CONFIG=/etc/lsyncd/lsyncd.conf.lua
-省略-
</pre>
<br />
CONFIGの位置ですね.これを書き換えても良いかと思いますが今回はコレを使います.
<br />
<pre class="brush:bash">$sudo cp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lsyncd/lsyncd.conf.lua
$sudo emacs /etc/lsyncd.conf
File Edit Options Buffers Tools Conf Help
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
logfile = "/var/log/lsyncd.log", ←追記
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
source="/mnt/storage/", ←変更(元ディレクトリ)
target="/mnt/backup/", ←変更(コピー先ディレクトリ)
以下,追記
rsync = {
compress = false,
_extra = {
"--delete",
"-a",
"exclude=*~",
}
}
ここまで追記
}
</pre>
<br />
settingsの部分はlogfileを追記して,ログを記録するようにしましょう.あとはこのままで良いでしょう.
詳細は<a href="https://github.com/axkibe/lsyncd/wiki/Lsyncd-2.1.x-%E2%80%96-The-Configuration-File" target="_blank">Lsyncd 2.1.x ‖ The Configuration File</a>で解説されています.<br />
次のsyncではミラーリングするディレクトリ同士を個別に記述します.sourceとtargetを逆に書いてしまうと悲惨なことになるから注意ですね.毎回緊張します.
オプションは,アーカイブすなわちファイルパーミッションなども維持したコピーを行う-aと元が削除されたらミラー先も削除する--deleteを付随させます.
またemacsなどが出力する一時ファイル*~は除外します.
<br />
また,以前はsettings={}と記述したいようですが=(イコール)はいらないみたいですね.
<br />
<h3>
rsyncオプションの書き方の注意</h3>
rsyncの2.1.xと2.0.xではrsyncオプションの書き方には大幅な変更が加えられているようです.
<br />
rsync2.0.xまではrsyncへのオプションを<br />
<pre class="brush: text">rsyncOps={"-a", "--delete"}</pre>
などと書いていたようですが,2.1.xからは<a href="https://github.com/axkibe/lsyncd/wiki/Lsyncd%202.1.x%20%E2%80%96%20Layer%204%20Config%20%E2%80%96%20Default%20Behavior" target="_blank">Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior</a>にあるように,rsync={}で書くようになっているようです.<br />
もし,2.0.xの書き方の場合,次のlsyncdの実行時に<br />
<br />
<div class="p1">
<span class="s1"><b>Error: error preparing /etc/lsyncd/lsyncd.conf.lua: Parameter "rsyncOps" unknown. (if this is not a typo add it to checkgauge)</b></span><br />
<span class="s1"><b><br /></b></span></div>
<div class="p1">
<span class="s1">とエラーになると思います.</span></div>
<h2>
開始</h2>
lsyncdを開始します.<br />
<pre class="brush:bash">$sudo service lsyncd start
</pre>
<br />
ミラーリングできてるか,ファイルを作成するなどして確認します.
<br />
<h2>
inotifyの上限変更</h2>
lsyncdはinotifyでファイルの変更を検知しているようですが,たくさんのファイル変更には対して限界値が設定されています.限界を超えると同期がストップするようです.その際,ログ/var/log/lsyncd.logには次のように記載されていました.<br />
<pre class="brush:text">Mon Mar 23 12:44:00 2015 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches
</pre>
<br />
/proc/sys/fs/inotify/max_user_watchesに記載された値が限界値のようです.
これを大きくしてみましょう.初期の8192の10倍,81920と設定します.<br>
/etc/sysctl.confもしくは/etc/sysctl.d/以下の*.confファイルに
<br />
<pre class="brush:text">fs.inotify.max_user_watches=81920
</pre>
などと書き換えもしくは追記するという方法の紹介を見かけます. (例えば,<a href="http://qiita.com/ngyuki/items/002a4a153ac6d8075bdb" target="_blank">CentOS 6 でも /etc/sysctl.d/ は使える(ipv6 無効化とか)</a> <a href="http://dac01.sakura.ne.jp/howto/linux/lsyncd.html" target="_blank">lsyncd設定</a>)<br />
<br />
ただし,今回は<br />
<pre class="brush:bash">
$sudo sysctl -w fs.inotify.max_user_watches=81920
</pre>
で変更しました.
<br />
<h2>
参考</h2>
http://www.shift-the-oracle.com/linux/utility/lsyncd-local.htmlUnknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-40893775887827826082015-03-20T14:22:00.003+09:002015-03-20T16:35:28.355+09:00Odroid C1 / Ubuntu でサーバ構築 2 ストレージのマウントOdroid C1を利用してサーバを構築する.<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1-ubuntu.html">前回</a>は,基本的な設定を行いました.<br />
今回は外付けHDDのマウントとバックアップ体制をつくります.<br />
<br />
<h2>
外付けHDDの初期化とマウント登録</h2>
<h3>
ディスクのチェック</h3>
USBで外付けHDDを接続し,マウントできる状態にします.<br />
/etc/fstabを設定してUbuntu起動時に自動マウントするように設定します.<br />
<br />
接続されているストレージや各ストレージのパーティションなどの構成を表示,設定するfdiskで接続されているストレージデバイスを取得します.<br />
<pre class="brush: bash">$sudo fdisk -l
- 省略 -
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 3072 266239 131584 6 FAT16
/dev/mmcblk0p2 266240 61496320 30615040+ 83 Linux
</pre>
<br />
挿入済みのマイクロSDカードが表示されました.<br />
それでは,USBの外付けHDDを接続してもう一度fdiskしてみましょう.<br />
なんとまぁ,私は外付けHDDを接続して,電源を付けるのを忘れていました.<br />
<br />
<pre class="brush: bash">$sudo fdisk -l
- 省略 -
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 3072 266239 131584 6 FAT16
/dev/mmcblk0p2 266240 61496320 30615040+ 83 Linux
- 省略 -
Device Boot Start End Blocks Id System
/dev/sda1 2048 1953525167 976761560 83 Linux
</pre>
というわけで,接続した外付けHDDは/dev/sda1となっているようです.<br />
<br />
<h3>
初期化</h3>
今回は,パーティションで区切らず全体を1つとし,ext4で初期化します.<br />
fdiskで初期化します.
<br />
<pre class="brush: bash">$sudo fdisk /dev/sda
</pre>
<br />
fdiskのモードに入ります.mでヘルプが見れてpで現在の状態が見れますね.wを押すまで変更は実際に適用されません.
<br />
指示に従ってnで作成を始めます.<br />
<pre class="brush:bash">Command (m for help): p
Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
78 heads, 63 sectors/track, 397542 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-1953525167, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1953525167, default 1953525167):
Using default value 1953525167
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Command (m for help): q
</pre>
<br />
領域ができたのでext4システムを作成します.
<br />
<pre class="brush:bash">$sudo mkfs -t ext4 /dev/sda1
</pre>
<br />
<h3>
マウント設定</h3>
マウントポイントを作って,今回はUUIDを使ってマウントするように設定します.<br />
マウントは/mnt/storageにします.
<br />
<pre class="brush: bash">$sudo mkdir /mnt/storage
$sudo blkid /dev/sda1
</pre>
<br />
このままmountコマンドでもOKですが,自動マウントするように/etc/fstabを編集します.書き方は<a href="http://archlinuxjp.kusakata.com/wiki/Fstab">archlinuxjp.kusakata.com/wiki/Fstab</a>の通りですね./etc/fstab追記します.<br />
<pre class="brush:bash">UUID=<uuid> /mnt/storage defaults 0 2
</uuid></pre>
今回はシステムでもなく単純にファイルを入れておくハードディスクドライブであるため最後の数値は2にしました.
<br />
/etc/fstabの通りマウントを反映します.そしてlsで確認します.無事マウントされていました.<br />
<pre class="brush:bash">$sudo mount -a
$ls /mnt/storage
</pre>
<br />
同じ方法でもう1基HDDを接続&マウントしました.<br />
次回は接続した2基のHDDを常時ミラーリングしてバックアップするようにします.Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-66576891914874550112015-03-19T03:18:00.001+09:002015-03-20T17:29:22.370+09:00Odroid C1 / Ubuntu でサーバ構築 1: ネットワーク設定,ユーザの追加など<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1ubuntu.html">前々回</a>,<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1ubuntu_19.html">前回</a>の2回でOdoroid C1にUbuntuをインストールして起動しました.基本的な設定も行いました.今回からはこれを自宅サーバにしたいと思います.用途としてはSambaでNAS(Network Attach Server)にしたり,Subsonicで音楽配信サーバにしたりです.<br />
<h2>
Odroid C1でサーバの構築</h2>
<h3>
要件</h3>
<div>
<ul>
<li><div>
SSHデーモンによりリモート操作ができる.</div>
</li>
<li><div>
常時,ハードディスクドライブを2基マウントする.</div>
</li>
<li>2基のハードディスクはrsyncでミラーリングしており,自動的にバックアップする.</li>
<li><div>
Sambaでファイルサーバ(NAS)として稼働する.</div>
</li>
<li>Subsonicでハードディスク内の音楽ファイルをストリーミングで配信する.</li>
</ul>
</div>
<h2>
GUIをオフにする</h2>
現在はブート後,自動的にXが立ち上がってグラフィカルな操作を可能になっていますが,
サーバ用途では必要ないと考えられるため,Xをオフにします.<br />
デスクトップの"ODROID Utility"を起動し,"5 Xorg On/Off"を選択し,Disabledにします.
そして,再起動.<br />
再起動後,またしても画面がちらついてしまいました.CUIこそ画面解像度は必要ないですし,この後はSSHによるリモート操作を行うため,boot.iniを再び書き換えます.書き換えは<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1ubuntu_19.html">前回</a>と同じで,画面解像度を変更してます.<br />
<br />
<h2>
再起動後のログイン</h2>
Xをオフにしたため,CUIでのログインになりました.<br />
特に変更が無い限り,ユーザ名: odroid, パスワード: odroidです,<br />
<br />
<h2>
emacsのインストール</h2>
これからは設定ファイルを直接編集する機会が多くなります.<br />
私は,emacsをエディタに使うので,emacsをインストールします.<br />
<pre class="brush: bash">$sudo apt-get install emacs</pre>
<br />
ちなみに,viは初めからインストールされているでしょう.<br />
<h2>
ネットワークの設定</h2>
サーバなので固定IPにします.<br />
<pre class="brush:bash">sudo emacs /etc/network/interfaces</pre>
下記を追記します.アドレスなどの部分は適切に書き換えてくださいね.
<br />
<pre class="brush:text">auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
</pre>
この後,
<br />
<pre class="brush:bash">$sudo ifup -a
$sudo service networking restart
</pre>
でOKなハズですが,ifconfigしてもIPアドレスが更新されないため,再起動しました.
再起動後,設定が反映されていることをifconfigで確認しました.
<br />
<br />
また,使用するDNSサーバの設定も行います./etc/resolvconf/resolv.conf.d/base を編集します.<br />
<pre class="brush:bash">sudo emacs /etc/resolvconf/resolv.conf.d/base
nameserver 192.168.1.1
</pre>
<br />
そして,DNSサーバの設定反映<br />
<pre class="brush:bash">sudo resolvconf -u
</pre>
<br />
<h2>
SSHでログイン</h2>
このままターミナル上でキーボードを直接叩いて操作しても良いのですが,SSHでリモート操作しましょう.
SSHのデーモンはすでに稼働しているはずです,となりのパソコンなどからログインしましょう.
odroidユーザーにログインです.
<br />
ログイン元であるクライアントから実行:<br />
<pre class="brush: bash">$ssh odroid@<odroid-c1></odroid-c1></pre>
<br />
<h2>
ユーザーの追加</h2>
いままで,ユーザ名: odroidのアカウントで設定を行ってきましたが,そろそろ自分の名前のアカウントを作成しましょう.<br />
<h3>
ユーザ追加</h3>
ユーザー追加はadduserで行います.useraddではありません.<br />
<pre class="brush: bash">$sudo adduser <ユーザ名>
</pre>
パスワードやその他の情報が求められます.その他の情報は空白でもOKみたいですね.
<br />
<br />
<h3>
グループ追加</h3>
登録できるグループリストは<br />
<pre class="brush: bash">$cat /etc/group</pre>
で確認できますが,いろいろあって良く分からないというのが一般的な感想かと思います.
それぞれの内容についてはさておき,参考に既存のodroidアカウントが所属しているグループに見てみましょう.<br />
odroidアカウントが所属しているグループは,,
<br />
<pre>$cat /etc/group | grep odroid
adm:x:4:syslog,odroid
dialout:x:20:odroid
fax:x:21:odroid
cdrom:x:24:odroid
floppy:x:25:odroid
tape:x:26:odroid
sudo:x:27:odroid
audio:x:29:pulse,odroid
dip:x:30:odroid
video:x:44:odroid
plugdev:x:46:odroid
netdev:x:102:odroid
nopasswdlogin:x:108:odroid
odroid:x:1001:
lpadmin:x:114:odroid
scanner:x:115:saned,odroid
fuse:x:116:odroid
</pre>
みたいですね.これを参考に先ほどつくったアカウントもグループ登録すれば良いかと思います.<br />
しかし,nopasswdloginとやらまで追加したくないし,一方でsudoやadmなどは重要ですね.<br />
必要に応じてあとから追加・削除すれば良いわけですしとりあえず今回は<br />
<pre class="brush:bash">$sudo usermod -G adm,cdrom,sudo,audio,video,plugdev,netdev,odroid,lpadmin,fuse <ユーザ名>
</pre>
としました.初回だからusermodコマンドを使用しましたが,次からグループに追加するときはgpasswd -aの方がいいですね.
usermod -Gだとオプションに指定しなかったグループからは外れてしまいますから.
<br />
<br />
<h2>
Odroidアカウントのパスワード変更</h2>
さすがにユーザ名: odroid, パスワード: odroidのアカウントを残しておくのも問題なのでパスワード変更します.同時にrootのパスワードも変更します.<br />
<pre class="brush: bash">$sudo passwd odroid
$sudo passwd root
</pre>
<br />
<h2>
ここまで</h2>
ここまででセットアップの下ごしらえができました..文章書くのに疲れたので次回にします.そして,そろそろ普通のLinuxとして使えるようになってきました.Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-5605677788413616302015-03-19T00:32:00.004+09:002015-06-30T20:57:59.270+09:00初めてのOdroid C1のUbuntuセットアップ その2<a href="http://hiroyky.blogspot.jp/2015/03/odroid-c1ubuntu.html">前回</a>,マイクロSDカードにUbuntuの書き込みまでを行いました.
<br />
<h2>
Ubuntuを起動</h2>
Odroid向けUbuntuを書き込んだマイクロSDカードを本体に挿入します.
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4vSxjyhGOk0d0HBiklckc6nZVOgY_jBTDRjcM-Gt8_ZmTzHGojdXTS6gLG93uUcm9PiFtS3QihLU49ML9bI-tkRDdBxqoQiYNDa9gDsxzu38e3w17mqdKbZZ08a8PqCZY0XqNLag5Kl8O/s1600/DSC_0153.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4vSxjyhGOk0d0HBiklckc6nZVOgY_jBTDRjcM-Gt8_ZmTzHGojdXTS6gLG93uUcm9PiFtS3QihLU49ML9bI-tkRDdBxqoQiYNDa9gDsxzu38e3w17mqdKbZZ08a8PqCZY0XqNLag5Kl8O/s1600/DSC_0153.JPG" width="320" /></a></div>
<br />
ケースに梱包した後,電源アダプタ,LANケーブル,キーボード,ディスプレイを接続します.そして電源アダプタをコンセントに挿して起動します.<br />
<h2>
起動しない..</h2>
起動して,ターミナルのログイン画面が表示されるはずですが,表示されませんでした.画面がチラついて起動の途中で止まってしまします..<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGRlylJmsIGdFrBllPwqn3ykwnBeHV5bcccf02iMwRkAK_-2r-Sg4ISrHp7chKcAr5JKSlkkTCGTSqi1sCtPP0ap_4OMWI88G8BZFjYJXzGkMrGbrRnIwTz253TDW62YxEkJywR6__0FKX/s1600/DSC_0155.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGRlylJmsIGdFrBllPwqn3ykwnBeHV5bcccf02iMwRkAK_-2r-Sg4ISrHp7chKcAr5JKSlkkTCGTSqi1sCtPP0ap_4OMWI88G8BZFjYJXzGkMrGbrRnIwTz253TDW62YxEkJywR6__0FKX/s1600/DSC_0155.JPG" width="320" /></a></div>
起動が途中でストップしてしまうのは,OSがきちんと書き込まれていなかったからでしょうか.ddコマンドでもう一度書き直し,何回もsyncしたらOKになりました.<br />
<br />
<h2>
画面がちらつく</h2>
無事にUbuntuが起動できたとしてもやたらと画面がチラつきます.
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8t3L675tFy6TiexdpTaTLJIWCit95VQOx2JJ3It2EMA7Q-JP5ttp6CN09HMqyB2oNK1TCfxBFVlQHPWQZcDs8rFzMga1p3SX6WRoRLL1dCXWpYOk1z1idiSSm3EBBxfpMLmE62C8xb5pT/s1600/DSC_0157.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8t3L675tFy6TiexdpTaTLJIWCit95VQOx2JJ3It2EMA7Q-JP5ttp6CN09HMqyB2oNK1TCfxBFVlQHPWQZcDs8rFzMga1p3SX6WRoRLL1dCXWpYOk1z1idiSSm3EBBxfpMLmE62C8xb5pT/s1600/DSC_0157.JPG" width="320" /></a></div>
<br />
<h2>
画面解像度を変更してみました.そのためには,/BOOT/boot.iniを編集します.これはMacやWindowsなど母艦となっているPCに再接続して編集してもOKです.</h2>
<pre class="brush: text">ODROIDC-UBOOT-CONFIG
# Possible screen resolutions
# Uncomment only a single Line! The line with setenv written.
# At least one mode must be selected.
# setenv m "vga" # 640x480
# setenv m "480p" # 720x480
# setenv m "576p" # 720x576
# setenv m "800x480p60hz" # 800x480
# setenv m "800x600p60hz" # 800x600
# setenv m "1024x600p60hz" # 1024x600
# setenv m "1024x768p60hz" # 1024x768
# setenv m "1360x768p60hz" # 1360x768
# setenv m "1366x768p60hz" # 1366x768
# setenv m "1440x900p60hz" # 1440x900
# setenv m "1600x900p60hz" # 1600x900
# setenv m "1680x1050p60hz" # 1680x1050
# setenv m "720p" # 720p 1280x720
# setenv m "800p" # 1280x800
# setenv m "sxga" # 1280x1024
# setenv m "1080i50hz" # 1080I@50Hz
# setenv m "1080p24hz" # 1080P@24Hz
# setenv m "1080p50hz" # 1080P@50Hz
setenv m "1080p" # 1080P@60Hz
# setenv m "1920x1200" # 1920x1200
</pre>
<br />
ですが,
setenv m "1080p" # 1080P@60Hz
に#をつけてコメントアウトし,他の解像度を選んでみます.選びたい解像度の先頭の#をハズします.
渡しの場合は1024x768を選んでなんとか落ち着きました.
<br />
<h2>
起動します</h2>
起動後,GUIのデスクトップ画面が表示されます.キーボードやマウスも認識されていると思います.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja1Y74Wpp8BZ2Ywz81tDysC3nHIoK8nweNT2wIU4R4Ab4nVyd-UZfrZSHqVJG8dwjEuImVobyDk1fUf0WPmmHULVPUGrGMt85p3YYgWYCwG961odprZMIF0jAN-JnHhFH_pL3PqhzSwMLp/s1600/DSC_0158.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja1Y74Wpp8BZ2Ywz81tDysC3nHIoK8nweNT2wIU4R4Ab4nVyd-UZfrZSHqVJG8dwjEuImVobyDk1fUf0WPmmHULVPUGrGMt85p3YYgWYCwG961odprZMIF0jAN-JnHhFH_pL3PqhzSwMLp/s1600/DSC_0158.JPG" width="320" /></a></div>
<br />
<h2>
rootパーティションの拡張</h2>
デスクトップに置かれた"README FIRST"に目を通した後,それに記載されているとおり,"ODROID Utility"をダブルクリックして起動します.<br />
いきなりパスワードが求められます.初期パスワードは"odroid"です.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQCxhBfkLumZfxnQNSqOaF899D5d0apoqNo04M07g5ECkx-JF473GJ_uEe6S3J1ybB0tFHcbINFfkpf_6ZRR9V0C6JI0Expde6zurXRMjmXlJC8b6vO7A4zXQGBPD8CzCRFHDTqJgxt7tL/s1600/DSC_0159.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQCxhBfkLumZfxnQNSqOaF899D5d0apoqNo04M07g5ECkx-JF473GJ_uEe6S3J1ybB0tFHcbINFfkpf_6ZRR9V0C6JI0Expde6zurXRMjmXlJC8b6vO7A4zXQGBPD8CzCRFHDTqJgxt7tL/s1600/DSC_0159.JPG" width="320" /></a></div>
何はともあれ,マイクロSDカードのルート領域を拡張します."4 Resize your root partition"を選択し,すすめます.完了後,再起動します.画面右下のボタンから再起動できます.<br />
再起動後,左下のメニューボタンからPrefferences→Disksと進めてパーティションの区分を見ると,trustyと呼ばれる領域が最大限使用されています.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjexQIutWPhvt1_JTDcud5O7OlW_QLk6Bidb6NrlEIpnfKsnb1ANbfXf8lgN46PdTEpNvoKUeNZflJwXsbt-y1NNaY8oTArA3nwibRSTNgmIfcos-IKAMqR8jinElSp91jEN02PvQAf7Ty/s1600/DSC_0160.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjexQIutWPhvt1_JTDcud5O7OlW_QLk6Bidb6NrlEIpnfKsnb1ANbfXf8lgN46PdTEpNvoKUeNZflJwXsbt-y1NNaY8oTArA3nwibRSTNgmIfcos-IKAMqR8jinElSp91jEN02PvQAf7Ty/s1600/DSC_0160.JPG" width="320" /></a></div>
<br />
<h2>
いろいろアップデート</h2>
画面左下のメニューからAcceories→LXTerminalとすすめてターミナルを開きます.<br />
apt-getからアップデートをしておきましょう.
<br />
<pre class="brush:bash">$sudo apt-get update && sudo apt-get upgrade
</pre>
<br />
<h2>
タイムゾーンの変更</h2>
おそらく,時刻が大きくずれて表示されているかもしれませんが,これはタイムゾーンが異なっているからです.
タイムゾーンをAsia/Tokyoに設定します./etc/localtimeをAsia/Tokyoで上書きすればOKですが,念のため,バックアップを取ってから行います.
<br />
<pre class="brush:bash">$sudo cp /etc/localtime /etc/localtime.org
$sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$date (←日付と時間を確認)
</pre>
<h2>
ホストネームの変更</h2>
ホストネーム,すなわちこのコンピュータの名前を変更します.
初期名はOdroidです.デスクトップの"ODROID Utility"から"7 Change Hostname"で変更します.
変更後は再起動が必要です.<br />
<br />
<h2>
総括</h2>
Odroid上でUbuntuを起動して,最初に必要な設定を行いました.<br />
私はOdroidを音楽ストリーミング配信サーバ,自宅のファイルサーバとして利用するつもりです.次回からはこれらのサーバにするためにセットアップを行います.<br />
<br />
参考文献<br />
http://forum.odroid.com/viewtopic.php?f=111&t=7611<br />
http://qiita.com/azusanakano/items/b39bd22504313884a7c3Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-14238965433249995862015-03-18T14:07:00.004+09:002015-03-19T00:48:53.010+09:00初めてのOdroid C1のUbuntuセットアップ その1<h2>
初めてのOdroid C1</h2>
知人に誘われて一緒にOdroid-C1を購入しました.<br />
購入後,しばらく放置となっていましたが,今回Ubuntuをインストールして自宅サーバとして運用することにしました.<br />
まずはUbuntuのインストールです.<br />
<h3>
流れ</h3>
<div>
<ol>
<li>必要な物品の用意</li>
<li>Odroid向けのUbuntuをダウンロード</li>
<li>MacからUbuntuをマイクロSDカードに書き込む</li>
</ol>
</div>
<h2>
用意した物</h2>
<ul>
<li>Odroid C1 本体</li>
<li>専用アダプタ</li>
<li>Odroidのケース</li>
<li>マイクロHDMIとHDMIの変換ケーブル</li>
<li>マイクロSDカード(32GB)</li>
<li>マイクロSDカードのカードリーダ(USB接続)</li>
<li>PC(今回はMacbook Air)</li>
<li>ディスプレイ(HDMI付,最近ではテレビでもOKですね)</li>
<li>(コーヒー)</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhgiSTSfIiGI3E5AeYlTj4bVypSsyTVWeZiZD7BH2d67_CCZl6D84zPPcumBlaBjkajQMZhpNkel1ya8Yx8GN9gstGr8tIA-qFNxA7_ywgp_1tM25hgFxlBociwdVbv1748dfaBMr7lqu/s1600/DSC_0152.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhgiSTSfIiGI3E5AeYlTj4bVypSsyTVWeZiZD7BH2d67_CCZl6D84zPPcumBlaBjkajQMZhpNkel1ya8Yx8GN9gstGr8tIA-qFNxA7_ywgp_1tM25hgFxlBociwdVbv1748dfaBMr7lqu/s1600/DSC_0152.JPG" height="180" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">用意した物,Odoroid本体はケースに梱包済み</td></tr>
</tbody></table>
<h2>
</h2>
<h2>
Ubuntuのダウンロード</h2>
お手物とのコンピュータで,<a href="http://odroid.com/dokuwiki/doku.php?id=en:odroid-c1" target="_blank">OdoroidのWiki</a>の<a href="http://odroid.com/dokuwiki/doku.php?id=en:c1_release_linux_ubuntu" target="_blank">Software Release for Linux/UbuntuからUbuntu</a>のイメージファイルをダウンロードします.本屋Ubuntuのサイトからダウンロードするのではありません.OdroidはARM系のCPUに対して本屋Ubuntuサイトは一般のPC向け,すなわちx86系を配布しています.
<br />
ダウンロードしたら解凍します.
<br />
<pre class="brush: bash">$ unxz ubuntu-14.04.1lts-lubuntu-odroid-c1-20150204.img.xz
</pre>
ubuntu-14.04.1lts-lubuntu-odroid-c1-20150204.imgが作成されました.(ファイル名はバージョンなどによって違うと思います.)
<br />
<h2>
マイクロSDカードにUbuntuの書き込み</h2>
<a href="http://odroid.com/dokuwiki/doku.php?id=en:odroid_flashing_tools" target="_blank">Flashing S/W Release</a>の手順に従って,マイクロSDカードにダウンロードしたUbuntuを書き込みました.<br />
<br />
このページに,マイクロSDカードを通常サイズのSDカードとしてマウントするリーダでは失敗する場合があると記載されていたため,USBのカードリーダを準備しました.(わざわざ買いました <a href="http://goo.gl/x9ufiC" target="_blank">http://goo.gl/x9ufiC</a>)<br />
<br />
今回はMac(UNIX)であるためddコマンドから実行しました.<br />
<br />
まず,マイクロSDカードを接続する前にターミナルのdfコマンドで現在接続されているストレージ一覧を表示します.<br />
<pre class="brush: bash">$ df
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1 233Gi 143Gi 90Gi 62% 37436143 23542671 61% /
devfs 183Ki 183Ki 0Bi 100% 633 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home</pre>
<br />
続いて,マイクロSDカードのUSBカードリーダを接続してもう一度dfします.
<br />
<pre class="brush: bash">$df
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk1 487830528 298991288 188327240 62% 37437909 23540905 61% /
devfs 367 367 0 100% 636 0 100% /dev
map -hosts 0 0 0 100% 0 0 100% /net
map auto_home 0 0 0 100% 0 0 100% /home
<span style="background-color: cyan;">/dev/disk2s1 61472768 4992 61467776 1% 0 0 100% /Volumes/NO NAME</span>
</pre>
<br />
差分を見て分かるとおり,マイクロSDカードが/dev/disk2s1になっています.<br />
一旦,これをアンマウントします.<br />
<pre class="brush: bash">$sudo diskutil unmount /dev/disk2s1
Password:
</pre>
<br />
ようやくddコマンドで書き込みます.of=の後に書き込み先を指定します.
<b>ただし,/dev/の後に続くデバイス名の先頭にrを付けて,後ろのs1などを消します.
今回は/dev/disk2s1なので,/dev/rdisk2とします.
</b>
ddコマンドは誤ると,PCのデータを消してしまいかねないので慎重に実行します.(←毎回緊張します)
<br />
<pre class="brush: bash">$sudo su
# dd if=ubuntu-14.04.1lts-lubuntu-odroid-c1-20150204.img of=/dev/rdisk2 bs=1m conv=sync
# sync; sync; sync; sync; sync; sync; sync; sync; sync; sync; sync; sync; sync; sync;
</pre>
syncは何回も実行します.
このまま実行すると進捗が表示されませんが,実行されているはずです.場合によっては時間が掛かるかもしれません.<br />
<br />
終了するとBOOTとしてマウントされていました.<br />
<br />
以上で,Ubuntuの書き込み(OSのインストール)は完了です.<br />
<br />
<h2>
参考</h2>
http://odroid.com/dokuwiki/doku.php?id=en:c1_release_linux_ubuntu<br />
http://odroid.com/dokuwiki/doku.php?id=en:odroid_flashing_tools
<br>
<hr>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00DGMU4VY" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B001MQBRJE" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00M55C1I2" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-11689024354654091422015-02-18T02:06:00.000+09:002015-02-18T02:07:13.282+09:00LaTeXで本文2段組,でもタイトルと概要は1段組,著者の脚注が表示されなかったのでメモ<h2>
概要</h2>
LaTeXで2段組の文章を作成しているが,タイトルと概要などのヘッダ文章だけは1段組にしたい.しかし,ネット上で紹介されている方法を試したら著者の脚注が表示されなくなってしまった.そこで,abstract.styを導入し,\saythanksを使用することで解決した.<br />
<br />
<h2>
文書全体の2段組</h2>
最初の\ducmentclassのオプションにtwocolumnを追加することで文書全体を2段組にすることができる.ただし,タイトル部分だけは1段組のままである.<br />
<br />
<pre class="brush:plain">\documentclass[a4p,10pt,twocolumn]{jarticle}
\title{タイトル}
\author{hiroyky \thanks{Future University}}
\begin{document}
\maketitle
\begin{abstract}
概要
\end{abstract}
\end{document}
</pre>
<br />
<h2>
概要も1段組にする</h2>
このままでは,タイトルは1段組であるが,概要は本文と同様に2段組になる.
そこで,概要を1段組にするため次のようにする.\twocolumn[]でくくってやるわけであるが..
<br />
<pre class="brush:plain">\documentclass[a4p,10pt,twocolumn]{jarticle}
\title{タイトル}
\author{hiroyky \thanks{Future University}}
\begin{document}
\twocolumn[
\maketitle
\begin{abstract}
概要
\end{abstract}
]
\end{document}
</pre>
これだと,著者の脚注が表示されなくなる.ページ下部に"Future University"と表示されなくなる.<br />
<br />
<h2>
abstract.styの\saythanksを使う.</h2>
abstractパッケージをダウンロードします(<a href="http://www.ctan.org/tex-archive/macros/latex/contrib/abstract" target="_blank">http://www.ctan.org/tex-archive/macros/latex/contrib/abstract</a>).
<br />
インストールは次のように行って,生成されたabstract.styを自分の文書ディレクトリにコピーしてインストールします.
<br />
<pre class="brush:shell">$latex abstarct.dtx
</pre>
<br />
で,次のようにします.\usepackageして\saythanksを記述します.
<br />
<pre class="brush:plain">\documentclass[a4p,10pt,twocolumn]{jarticle}
\usepackage{abstract}
\title{タイトル}
\author{hiroyky \thanks{Future University}}
\begin{document}
\twocolumn[
\maketitle
\begin{abstract}
概要
\end{abstract}
]
\saythanks
\end{document}
</pre>
これでOKですね??Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-16745589023858269652014-08-19T01:33:00.001+09:002014-08-19T01:37:01.691+09:00githubでリポジトリを編集できるユーザーを追加する<h2>
githubを使ってグループで共同開発がしたい</h2>
他人のリポジトリにあるプロジェクトを編集する際には,フォークして自分の変更を加えてコミットした後,元の人にプルリクエストをおくります.しかし,複数人で一つのリポジトリを共有したいとき,すなわち共に開発する友人らに対してリポジトリにプッシュ出来るように設定します.<br />
<h2>
githubのWebから設定</h2>
リポジトリの作成者アカウントで,該当リポジトリに移動します.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3BoBcO68TtMdsWKCJvQ_8d5xoRaLRsW761fwUJ2MG7U-EVIg0EPHofEjAS5FyoxPtN4WeL98g7abJsrW8qAmQ7V4xSlfEJfWukNbA6kuDg2FOTPYlF7SwHjqEbTHMbkYqiTn2fMJlSu0g/s1600/image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3BoBcO68TtMdsWKCJvQ_8d5xoRaLRsW761fwUJ2MG7U-EVIg0EPHofEjAS5FyoxPtN4WeL98g7abJsrW8qAmQ7V4xSlfEJfWukNbA6kuDg2FOTPYlF7SwHjqEbTHMbkYqiTn2fMJlSu0g/s1600/image.png" height="290" width="320" /></a></div>
Settings→Collaboratorsへと移動します.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXnoezijk3T2p2qdAjqbj-uosbTmFmqwEb9Bifbo9ORKLqQUtC65SRWcCisOVxUzb0IotcVwLkfz7hIJQaeoTvPuHtpRq37itRpFfFlEUjpDJIpyz2I9vFb3P2l7XwpcYk-rMFV1n6QEGR/s1600/image2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXnoezijk3T2p2qdAjqbj-uosbTmFmqwEb9Bifbo9ORKLqQUtC65SRWcCisOVxUzb0IotcVwLkfz7hIJQaeoTvPuHtpRq37itRpFfFlEUjpDJIpyz2I9vFb3P2l7XwpcYk-rMFV1n6QEGR/s1600/image2.png" height="244" width="320" /></a></div>
<br />
追加したいユーザー名を入力して"Add collaborator"で完了です.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuxaIQYwQ3Lt56ahmenLA_IZXVgiyz5arCDWMN_o44zRWOYxWD3m8Amy-miQYmFM9VI0Pfb85OHB-9kwM6ymsE3KoQREC14gX4fFwEOXeSfU-ciQZzVnaHwcL4aElLOLbhlqDtD0gJjCZ3/s1600/image3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuxaIQYwQ3Lt56ahmenLA_IZXVgiyz5arCDWMN_o44zRWOYxWD3m8Amy-miQYmFM9VI0Pfb85OHB-9kwM6ymsE3KoQREC14gX4fFwEOXeSfU-ciQZzVnaHwcL4aElLOLbhlqDtD0gJjCZ3/s1600/image3.png" height="92" width="320" /></a></div>
<br />
かんたん(^^)v<br />
<br />
以上です.<br />
<br />
<hr />
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4274068641" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477416366X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00L8TORVK" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00L8TOJ7M" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5784121380703128919.post-55120170605091218112014-08-09T19:40:00.000+09:002014-08-11T20:02:02.214+09:00djangoのmakemessagesでのエラーメッセージにハマりかけたのでメモ<h2>
Djagnoの翻訳テキストファイルの作成コマンド</h2>
django-admin.pyもしくはmanager.pyのmakemessagesに翻訳に必要なファイルを自動生成させることが出来ます.<br />
<pre class="bruch:bash">
$./manager.py makemessages -l ja_JP
</pre>
<br />
ところで,私がこれを行ったところ以下のようなメッセージが出力されました.<br />
<br />
<br />
<div class="p1">
<i><span style="color: #444444;">This script should be run from the Django Git tree or your project or app tree. If you did indeed run it from the Git checkout or your project or application, maybe you are just missing the conf/locale (in the django tree) or locale (for project and application) directory? It is not created automatically, you have to create it by hand if you want to enable i18n for your project or application.</span></i></div>
<div class="p1">
<i><span style="color: #444444;"><br /></span></i></div>
<div class="p1">
えっとGitがどうとか言われていますが,結局のところプロジェクトに./localeディレクトリがないことが原因みたいでした.</div>
<div class="p1">
<br /></div>
<div class="p1">
というわけでプロジェクトディレクトリのルートで</div>
<pre class="bruch:bash">
$mkdir locale<br>
$./manager.py makemessages -l ja_JP</pre>
<br />
<div class="p1">
として無事に翻訳用のテキストファイルが作成できました.</div>
<div class="p1">
ふぅ〜.</div>
<hr />
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048672096" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=yorozumitama-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774150363" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
Unknownnoreply@blogger.com