2016/03/31

GoogleCloudPlatformでプライベートGitホスティング

昔の記事 Google Driveとgriveとgitリポジトリ  ではGitのプライベートリポジトリを無料で使えるところないかなぁ?とか思ったりしていたが、Google Cloud PlatformでプライベートGitホスティングが無料で使用できることに最近気づいた。ストレージ容量や通信量など制限はいくつかあるけれど個人レベルで使用するには十分。

Google Cloud Platform から見ていくと分かりにくいが、プロジェクト作成・Gitホスティング・AppEngineアプリサイト作成は無料枠内で利用できる。

その辺の流れをまとめてみた。

ChromeとかでConsoleへ自分のGoogleアカウントでログインする。
最初に、とにかくプロジェクトを作成する。

作成する際に若干注意する点としては、GitリポジトリURLやAppEngineのURLは、プロジェクト名ではなく、その下に小さく表示されている Project ID 名になる。ここをできるかぎり希望の名前になるように頑張る。

青いメニューバー左端の三本線アイコンメニューから下の方の”開発”を選ぶ。
ここがGitリポジトリのダッシュボード。

自分のローカル環境にGoogle Cloud SDKをインストール
Linux、Debian/Ubuntu、Mac、Windows版があるが、自分がこの手のことにいつも使っているのはUbuntuなので、Ubuntuで進める。

Devian/Ubuntuタブを選択するとインストールと初期設定までのスクリプトが表示されているので
これをそのまま実行すれば良い。

ただ、実行に必要なツールとして、curl python gitが必要なので予め入れておく。

$ gcloud init で初期設定 が行われる。これはCUIな対話式になっている。
:Googleアカウントへログイン
:自分のプロジェクトの選択
:Googleソースホスティングを使用するか?(当然Yes!)
:Gitリポジトリをクローンする?(defaultの1を選ぶ)
:ディレクトリ名はどうする?(defaultのままで良ければEnter)
これでdefault(もしくは指定したディレクトリ)へGitリポジトリが作成される。

$ git remote -v で確認すると
origin  https://source.developers.google.com/p/(プロジェクトID)/r/default (fetch)
origin  https://source.developers.google.com/p/(プロジェクトID)/r/default (push)
となっている。あとは git で普通にpush、pullすればよい。

既存Gitリポジトリにremote addするには、空のソースコードページに書いてあるとおり
$ gcloud init (やってなければ)
$ git config credential.helper gcloud.sh
$ git remote add google https://source.developers.google.com/p/(Project ID)/r/default
で追加できる。

無料枠内の利用であればどんな用途でもいいと思う。

2016/03/17

USBカメラをlxcインスタンスから使ってみる

最初 普通にカメラモジュールを買って遊んでみようと思ったが、調べているうちにチューブカメラ(スネークカメラ)の方が遊びがいがありそうだったので、買ってみた。

チューブカメラ(スネークカメラ)
kamura 7mm 6LED カメラ USB接続エンドスコープ(内視鏡) 防水 内視鏡スコープ
1300円は安いんじゃないかな。自分は2mを買ったけど何故か5mの方が100円安い設定・・・
レビューも詳しい商品説明もなかったけど、2~3千円台のやつと大差ないだろうとエイヤ!購入。

チューブカメラをUbuntuサーバーに付けて

認識してるかな?

$ lsusb
Bus 001 Device 006: ID 1908:2311 GEMBIRD

$ dmesg |grep CAMERA
[    2.535026] usb 1-1: Product: USB2.0 PC CAMERA
[   10.129511] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (1908:2311)
[   10.131662] input: USB2.0 PC CAMERA as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/input/input5
[ 8834.645489] usb 1-1: Product: USB2.0 PC CAMERA
[ 8834.646070] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (1908:2311)
[ 8834.646467] input: USB2.0 PC CAMERA as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/input/input11

$ ls -l /dev/video*
crw-rw---- 1 root video 81, 0  ~~~~ /dev/video0

どんなデバイスかな?

$ sudo apt-get install v4l-utils
video4linux2 utilitiesを入れて

$ v4l2-ctl -d /dev/video0 --info
Driver Info (not using libv4l2):
        Driver name   : uvcvideo
        Card type     : USB2.0 PC CAMERA
        Bus info      : usb-0000:00:14.0-1
        Driver version: 4.2.8
        Capabilities  : 0x84200001
                Video Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format

最大640x480 30fpsの標準的なUVC Camera。USBコネクタ側に先端のLED調光ダイヤルが付いていて4段階くらいの制御が出来ている。


lxcインスタンス側から使えるようにする

/var/lib/lxc/(instance)/config に
”lxc.cgroup.devices.allow = c 81:* rwm”

lxc.hook.autodevスクリプトに
”mknod -m 660 ${LXC_ROOTFS_MOUNT}/dev/video0 c 81 0”
"chgrp video ${LXC_ROOTFS_MOUNT}/dev/video0"

を加え、lxcインスタンスを起動。これでホストと同等にアクセスできるようになった。
後々めんどくさいので
”mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/video0 c 81 0”
だけにして、誰でもOKに。

キャプチャツールでテスト

Ubuntu Webcam で紹介されているものを幾つか試してみる

streamer
$ sudo apt-get install streamer
$ streamer -o test.jpeg -s 640x480

シンプルでコンパクトなコマンドツール。自分はこれで満足です。

cheese
$ sudo apt-get install cheese
$ cheese
** Message: cheese-application.vala:211: Error during camera setup: No device found

ほえ?自動的にデバイスを認識するって話ですが? "-d /dev/video0" してもだめでした。
lxcインスタンスからとか、tightvnc上での起動とかが絡んでるかもしれないけど、もういいっす。

VLC
$ sudo apt-get install vlc
$ vlc

難なくtightvnc上にGUI出てきました。/dev/video0を選んで 再生も問題なし。
$ vlc v4l2:///dev/video0 とすればすぐさま再生。

ただ、起動するとエラーではないけれど

pulse audio output error: PulseAudio server connection failure
Qt: XKEYBOARD extension not present on the X server.
Failed to open VDPAU backend libvdpau_nvidia.so

のメッセージが出るのが気になる。

$ cvlc v4l2:///dev/video0

でコマンドツールで起動するとXKEYBOARDのメッセージだけは消せる。
けど他は消せないなぁ。

iPadやAndroidとかではどうかな?
iPadにCamera Connector Kit経由で繋いでみたら消費電力が高すぎるから使えないと言われた。それじゃあと、外部電源付きのUSBハブをさらに経由したら、サポートしていないカメラだと言われた。。。
 AmazonFireHDXに繋いでみたが認識しなかった。外部USBカメラアプリをいくつか試してみたが、やっぱり認識しないようだ。USB変換ケーブルが原因の可能性もあるかな。今の所残念な状態。


2016/03/15

8x8LEDと超音波センサーとArduinoで遊ぶ

久々の投稿となります。昨年末に突然左目が斜視になってしまい、歩くのもおぼつかない自体となってしまいました。幸いにも現在はほぼ回復し、普通の日常が戻ってまいりました。

ということで、年末に書き残そうと思っていたことなど・・・


RaspberryPi2も楽しいけれど、もっとローコスト環境で遊んてみたくなって、ArduinoUNOとArduinoNanoを購入し、なにかまとまったものを作ってみようと思って作ったのが上の写真。

(見えないけど)電池パックの上にユニバーサル基板を載せて、8x8LEDモジュールと超音波距離センサーとArduinoUNOを載せて適当に繋いで、Sketchでプログラムして動かしています。
障害物との距離に応じてLEDに表示するものを変化させるというだけの単純なシステムです。

クリスマスには”Merry Xmas”と”サンタとトナカイ”と”Xmasツリー”の3パターンアニメーションをやったりして、子供が以外なくらい結構遊んでくれました。(目がおかしくなったのはその直後くらい)
正月には”A Happy New Year 2016”などで使いました。

今回技術的なことは殆ど無いんですが、あえて上げれば・・・

Nanoじゃ辛い
最初 ArduinoNano を基盤にさしてコンパクトに作ろうと思ったのですが、Nanoの5V端子から5Vが出ないのです。LEDとセンサーが5Vを要求しまして、Nanoでは駆動できませんでした。
別電源供給も考えましたが、UNOなら大丈夫だったので、UNOを無理やり載せた形になりました。

8x8LEDノイズが超音波センサーを狂わせる
LEDからのノイズがセンサーを誤動作させてしまうのです。自分の耳にも聞こえるくらい厳しい高周波を出します。コンパクトに収めて子供に遊ばせることが重要だったのでFFCで分離したくなかったし。
結局、LEDの発光レベルを1段下げるとギリギリですがセンサーが生きる状態になりました。
物理的なモードスイッチとかも付けて、アニメーションをセンサー連動と手動切替が出来るようにしたり、アセンブリ段階で意外と苦労しました。

3軸モーションセンサーも買ったけど
無理やり繋いでデータは取れるようになったけれど、簡単に応用できるポイントがなかったので外しました。

ArduinoIDE環境
特に難しいことはないんですが、Macに繋いでやりたかったけれど一発では認識せず。USBドライバがどうとかこうとかで認識させるまで面倒そうだったので、ShuttleサーバーマシンにArduino開発専用インスタンスを'lxc'で作って、そこにIDEを入れてVNCサーバー通して動かす方法を取りました。この方が断然安定していて不安なく作業ができます。


今度は原点に戻って、RaspberryPiとカメラモジュールで色々やってみたいと思っています。