ラズパイ2でNASを作る

以前から、業務PC内で動いていたファイルサーバーなのですが、去年あたりから別のPCから共有フォルダーが見れなくなって(業務PCから家庭用PCは見れる)、共有自体が変な状態になっていました。ここ数日あれこれと弄って悩んではいたんですが、面倒なので NAS にしてしまおうということで、ラズパイでNASを作ります。

NAS とはいえ、簡単なファイル置き場です。主に動画ファイルが置いてあるわけで、Windows PC からフォルダが見れればok。ということは、Linux + Samba で設定するだけで十分なので、仕組みは簡単です。

準備したもの

HDD は家庭用なので RAID などは組まず、ちょっと不調気味だった PC から 2TB の 3.5 インチ HDD を取り外して使いました。共有フォルダが不調だったので、業務/家庭用PCに二重化されてしまったファイルをひとつにまとめることができるので、トータルの容量が減ります。あと、ラズパイは余っていた Raspberry Pi 2 を使います。転送スピードが必要なので、有線 LAN を使うし、ファイルサーバーとして起動するだけなのでモニタやキーボードも必要ありません。

買ったのは、変換アダプタ 1,700円也のみです。後述しますが、プラモデルの空き箱で代用です。

3.5 インチの HDD は、駆動に 5Vと12V が必要となるため、アダプタ付きの変換ケーブルが必要になります。ノートブックで使われる 2.5 インチの HDD あるいは SSD は 5V のみで動くので PC の給電のみで駆動します(ブートディスクは電力が必要となるので、無理なのですが、後からマウントするだけならば給電の5Vだけで十分です)。これは Raspberry Pi の USB でも問題なく動きます。

 

Raspbian で準備する

Raspbian を micro SD に焼いて、マウントできる準備をします。ラズパイで作るファイルサーバーは、Linux で読み込めるように再フォーマットが必要だったのですが、ntfs-3g というパッケージを入れると NTFS でフォーマットしたストレージを読み込めるようになります。

以下、簡単な手順です。

  • PC で HDD を NTFS 形式でフォーマット
    • ボリューム名を「hdd1」のように変更しておく。
  • micro SD に Raspbian をインストール
    • boot ドライブに “ssh” というファイルを置く(sshが有効になる)
  • ラズパイで起動
    • passwd でパスワード変更。緩いパスワードを使いたいときは raspi-config を使ってパスワードを変更すれば ok.
    • raspi-config でホスト名を “raspberry” から “naspi” 変えておく
    • sudo apt-get update
    • sudo apt-get upgrade
    • sudo apt-get avahi-daemon (既にインストール済みかも)
    • reboot
  • HDD を変換アダプタでラズパイに繋げる
    • /media/pi/hdd1 のように自動でマウントされる。
  • sudo apt-get install samba
    • /etc/samba/smb.conf を編集する

[hdd1]
path      = /media/pi/hdd1
read only = No
guest ok  = Yes
force user= pi

  • reboot するか、sudo /etc/init.d/samba restart する。

こうすると、Windows の pc から、\\naspi.local\hdd1 でアクセスが可能になります。

ケースを作る

ほどよく動作確認ができたら、自前のケースを作ります。

image

image

作るというほどでもありません。単に空き箱に入れているだけですね。

おまけ

この映像なNASサーバーにアクセスするのに、いちいち \\nasipi.local\hdd1 なんてのを探っていては面倒なので、Windows 10 で標準についている「映画&テレビ」のアプリで、フォルダを追加します。

image

そうすると、ライブラリの「ビデオ」フォルダに追加されて、各動画ファイルをサムネール付きで参照できるようになります。

image

このライブラリのビデオフォルダは、UWP アプリから直接参照できる、Windows.Storage.KnownFolders.VideosLibrary から安全にアクセスできます…というトリックがあってですね。これは後日。

ちなみに、消費電力としては、ラズパイ+HDDのみなのでかなり低くなります。通常時で 6.0W 映像配信時に 6.9W ぐらいです。

カテゴリー: RaspberryPi | ラズパイ2でNASを作る はコメントを受け付けていません

学研ワールドアイとLattepandaの組み合わせを模索する

先日、学研ワールドアイという球体型ディスプレイ(実際は半球)を買いました。Amazon | 学研 Gakken ニューワールドアイ 地球儀を超えた無限の情報量 NEW WORLD EYE 通販 元値が、4万円近いものが、1万円ちょっとで投げ売りされています。おそらく見切り品なんだと思うのですが、よくわかりません。教材用のものらしく、学校で使うような教材がついています。

解像度は640×480 で、そのうちの480×480が球体のモニタに表示されています。ピントをうまく調節しても荒い感じになります。

image

これは、Amazon Fire TV から出力しているところです。HDMI の mini ポートが付いているので変換器を百均で買って付けました。

Lattepanda と組み合わせる

通常の HDMI が使えるので、ノートPC などからも出せる訳ですが、どうせならばワンセットで展示ができそうなパターンを考えてみました。ラズパイで出すのも良いのですが、グラフィック関係がお手軽に出せそうなところで、Lattepanda を使ってみます。

image

Lattepanda に Winodws 10 を入れて、通常の Windows PC のように使えます。手元にあるのは、メモリが2GB、内部ストレージが32GBのものですが、UWP アプリとかをインストールして動かす分に十分です。初回のインストール時に 32GB の micro SD カードが必要になりますが、一度インストールした後には外部ストレージ(つまりDドライブ)として使うことができます。

Wallpaper Engine との組み合わせ

Wallpaper Engine は Steam にある壁紙ツールです。きれいな壁紙を Windows の背景として動かすことができます。で、それをそのまま動かしたのが、↓です。

壁紙自体は球体に添っている訳ではないので、ゆがみますが、まあ結構おもしろいですよね。お手軽に動画の展示ができます。

Live 2D を動かす

Windows 上で Live 2D を動かすことができます。Live 2D Viewer 自体がちょっと重い感じですが、いったん動かしてしまえば、まあ行ける感じ

動きがぎこちない感じは Adobe Air が重たいためかもしれません。球体でもゆがまないように、顔を真ん中に配置するのがコツです。

MMD を動かす

MikuMikuDance をインストールして再生してみます。画面が狭いのでちょっと起動までが大変ですが、それなりに動きます。画像が荒くなっているのは、解像度のせいでししょう。

 

あまり、重たい感じがなくて結構スムースに動きます。

OpenSiv3D を動かす

OpenSiv3D は、グラフィックを C++ で手軽に作れる環境です。マウスを使った操作もできるのですが、球体モニタにマウスはなかなか難しいので、蝶が飛んでいるようなサンプルがあったので動かしてみたものです。

 

これは結構いい感じで動きますね。バックを黒にして走馬燈のようなものができそうです。

 

Lattepanda との組み合わせで何がいいのか?

ラズパイや Nano Pi でもいいのですが、要は球体モニタの横に大仰な PC を置かなくてよい、というメリットがあります。HDMI ケーブルの長さの問題もあるので、モニタ横には小さな組み込みボードのようがいいかなと。Wi-Fi を使うようにしてあるので、電源用の USB ケーブルと、球体モニタへの HDMI ケーブルだけが必要になります。キーボード&マウスも無線ですね。

あと、Lattepanda に Windows 10 Pro を入れておくと(付属のものは Home なのでアップグレードしてあります)リモートデスクトップで繋げることができます。リモートデスクトップで各種の設定を調節して、その後で球体モニタに表示させるという感じ。これは、ラズパイでもできます。

今度は、480×480 の球体に合わせて画像を補正して、綺麗に球面に合うように映像を表示させていきましょう…という計算をしなければ。

カテゴリー: 開発 | 学研ワールドアイとLattepandaの組み合わせを模索する はコメントを受け付けていません

今更ながら VPS を借りました

ここのブログは bluehost.com を使って運営していますが、あれこれな .NET な実験は Azure 上でやっていました。何度か仮想OSを Azure 上に組んでみたりしたのですが、Visual Studio を動かすにはパワーがたりなく(Visual Studio Codeならいいかもしれませんね)、Windows Server を置いて活用するほどでもなく、かといって Linux をインストールして LAMP で使うぐらいだったら格安のレンタルホストで良いわけで。暫く、ローカルの VMWare で Unbutu + Redmine を入れて .NET Core アクセスをあれこれやっていたのですが、やっぱり Redmine は外にあったほうがよいだろうということで、VPS です。

image

場所は、VPS(仮想専用サーバー)|さくらインターネット の 1G のプランですがね。HDD にして 100GB 使えるようにするので大抵のものは相乗りできます。月額が1,000弱なので、Azure で仮想OSを作るよりも安く済みます。逆に言えば、スペック的に拡張する予定のある場合は、AWSなりAzureなりを借りるほうがいいのでしょうが、そもそも拡張する必要がない小規模なものは VPS で十分だと思われます。(と、ここで落とし穴に後で気付くのですが、それは最後に)

Ubuntu 16.04 + Redmine 環境を作る

さくらのVPSは、初期状態で CentOS 6 が入っているのですが、このままだと .NET Core が動かない(.NET Core は CentOS 7 以降が対象)のと、普段 Linux 環境で慣れているのが Ubuntu なので、Ubuntu 16.04 をインストールし直します。カスタムで iso イメージをアップロードしてインストールもできるようですが、さっくりと作るために事前にさくらが用意してくれている os イメージで入れてしまいます。

初期ユーザー名は ubuntu 、パスワードは自分でいれたもので、teraterm でさっくりと繋がります。

Redmine のインストールは以下を参考に、

おそらく、LAMP 環境を整えてから Redmine を入れる手順のほうが楽だと思います。最終的には wordpress が相乗りになるだろうし。実際、自分も wordpress を入れたので。

なんだかんだと、半日位かかりましたが、redmine と wordpress の動作確認まで ok.

http://openccpm.com/ でアクセスできます。

.net core 2.0 の環境をインストール .NET and C# | Get Started in 10 Minutes します。

image

OS は Ubuntu 16.04 なので、手順に従えばすんなりインストールできます。2.0 から VB でも作れるようになりましたが、まあ、目的は F# です。web pi でバックグラウンドにある redmine を叩くために、ASP.NET Core Web App MVC で作れば ok ですね。

Azure の Mobile App のようなものを作らねば

でもって、これで今まで手元で実験していた ASP.NET な F# が動くね、とは思ったのですが、良く考えたら手元のは「Mobile App」で作っていたんですよね。Azure の場合、適当なタイミングで起動くれる(?)けど、自前の VPS の場合はきちんとクライアントからの要求を待ってないんといけません。まあ、単純にデーモンにすればいいだけなんですが、そうなるとあれこれ立ち上げているうちに変なゾンビ状態になりはしないかと…

image

どちらにせよ、いきなり本番環境(っぽい)VPS 上で動かすのは問題があるので、ローカル Ubuntu(VMWare上ですが)でテストしておいて VPS のほうは持って行くわけです。そうなると、

  • スタンドアローン動く .NET Core な ASP.NET Core を一式持って行って実行
  • Docker パッケージを作って転送

な感じがベターでしょう、という思いに至った訳です。Docker って主に開発環境構築に使っていたけど、VPS と組み合わせるとちっこいサービスをぽちぽちと切り替えるマネージャ的役割を担わせるのもいいんだなと。

カテゴリー: 開発, OpenCCPM | 今更ながら VPS を借りました はコメントを受け付けていません

Xamarinプログラミング入門 C#によるiOS、Androidアプリケーション開発の基本ができました

Xamarinプログラミング入門 C#によるiOS、Androidアプリケーション開発の基本
https://www.amazon.co.jp/dp/4822253503

正月頃からちまちまと書いていた Xamarin 本がやっとこさ出版に至りました。

image

3月末に Visual Studio 2017 がリリースされ、Xamarin.Forms の Master-Detail のテンプレートが変わってしまったものだから、サンプルの作りを全面的に改訂。この際なので、あれこれと手直して秋口まで延ばして貰いました。本来は de:code 2017 に間に合わせたかったんですけどね。さすがに無理でした(苦笑)。

内容とコンセプト

詳細な目次は、日経BP書店|商品詳細 - Xamarinプログラミング入門 を見てもらうとして、執筆時のコンセプトは、

  • Xamarin.Android/iOS/Forms の動作原理を知り、シミュレータを含めた動作環境を構築する。
  • スマートフォン(iOS/Android)の開発が主となるので、Xamarin.iOSとXamarin.Androidもターゲットに入れる。
  • 前回、タイミング的に入れることができなかった Xamarin.Forms を「共通化のベース」として入れる。
  • と同時に、ロジックを共通化&外出しすることで TDD の手法が使える。

なところです。

なので、C#の文法の説明は一切しない(「独習C#」などで学習済みであることが前提です)、Windows Phone は本書のターゲットでありません(販売台数的にこれは仕方がないです)。

ただ、巻末に私の趣味的に、UWPアプリの作り方と Android Things の使い方の解説があります。このあたりも見てもらうと、目指すところとしての Xamarin/mono/.NET Core/.NET Standard がなんとなく想像できると思います。

前回は、Xamarin 自体が紹介も含めていたので(当時有料であったし)、サンプルプログラムとしてパズルゲームにしましたが意外と不評なので(苦笑)、今回は Master-Detail 型の ToDo アプリにしてあります。ToDo アプリ自体は、Xamarin.Forms のサンプルにあるのですが、本書のサンプルは、ToDo の新規追加と更新、そして Azure を使うところを2段階で解説しています。

分厚い Xamarin.Forms 本 よりももっと手に入れやすく(値段的に)という企画であったのと、この本も含めていくつかの Xamarin 本の企画を想定していたので、それらとは違う仕組みにしてあります。なので、お財布には優しくありませんが!両方買っても大丈夫ですよ。

ちなみに、ちょっと古めですが参考資料として Xamarin Mobile Application Development for iOS などの洋書を使っています。Xamarin.iOS/Android については、基本的なところは変わらないのと、どうせコードで把握することが多いので洋書にあたってしまったほうが情報の入りは早いです。

サンプルコード

日経BP社のサイト 日経BP書店|商品詳細 - Xamarinプログラミング入門 からサンプルコードがダウンロードができます。

でもって、ベゾルド本に倣い(と、最近のMicrosoft関係のOSS化に倣い)、github https://github.com/moonmile/xamarin-samples でもサンプルコードを公開しています。更新の早い Xamarin.Forms に完全に追随できないかもしれませんが、ちまちまと更新はしていこうかと思っています。

カテゴリー: Xamarin | Xamarinプログラミング入門 C#によるiOS、Androidアプリケーション開発の基本ができました はコメントを受け付けていません

中学校のあふれそうな中間試験勉強のためにタイムマネジメントを活用する

娘が中学校に入ったので、学校では中間試験、期末試験が行われるようになりました。その各試験の前のに「試験前の対策」と称していろいろなプリントやら提出物が課せられるわけですが、この分量が並ではない!そもそも、試験対策のための勉強ができないほど課題提出を持てめてしまうのはどういうことなの?

ということを Twitter で愚痴ろうと思ったわけですが、ちょっと対策を含めてブログにしておきます。この課題の多さ、1学期の中間、期末、夏休み、そして2学期の中間、となり4度目なので、おおまかな対策は立てることができました、というお裾分けでもあります。いわゆる「マネジメント」の分野なんですけどね。

そもそも課題が多い

課題が多い理由としては「試験前に勉強しない子でも、強制的に勉強するように」という方針らしいのですが、そもそもが、課題の多さ自体に疲労してしまうのではないか?という疑問があります。また、各教師が全体の課題のトータルを把握しているのか、という問題があります。

image

「課題が多い」ことに対して、保護者の立場であれこれ言うことはできないので(学校の方針でもあるし)、じゃあ、この多くの課題をどうやってこなすのか?と同時に、どうやって試験勉強をするのか?を考えていきましょう。

スケジュール表を作る…だけではだめ

学校からは、こんな感じのスケジュール表が配られて、予定と実績を書き込む、そして教師がチェックするというプリントが配られますが、これではだめです。できる子はいいんでしょうが、先のように多くの課題を抱えてしまってあふれてしまっている子は途方に暮れてしまいます。

image

この手の話は、IT業界のプロジェクトでもよくある話で、「課題や実装すべき機能が多すぎて、どこから手をつけたらよいかわからない」というものです。しかも、期限が決まっているパターンですね。仕事の場合は、そもそもの課題の量を調節する手段をとれるのですが、学校に提出する課題/プリントの量は、交渉の余地はありません。やるか、やらないかというパターンですね。溢れてしまっている場合は、半分だけやるという方法もありますが、ここでは「ひと通りやる」ことを目標に考えていきます。

全体の課題の数を書き出す

最初に、課題の数をかき出します。一応、渡された一覧で「数」はわかるはずなのですが、実感が伴わないので付箋に書き出します。付箋にすると、枚数で勘定ができるようになるので、何枚あるのかとうボリューム感が捉えられます。

image

すべての課題を付箋に書き出したら、

  • 簡単なタスク
  • 重たいタスク
  • ほどほどのタスク

の3つに分けます。簡単なタスクは、教科書をひと通り読むとか、1枚だけのプリントみたいなものです。重たいタスクは、2,3時間掛かりそうなものです。細かく分けても仕方がないので、大中小の3つに分類します。

その中から重たいタスクに注力します。

image

いわゆる「パレートの法則」で、上位20%をめやすに取り出します。そうすると、重たいタスクの数が判明し、計画が立てやすくなります。

重たいタスクには

  • 大まかな学習時間の予想を記述
  • いつ課題をこなすのかを日付で記入

します。このベースとなる、重たいタスクを中心に据えて、まわりの軽いタ50を空き時間なり、適当な制限時間(30分や50分単位)にまとめて課題をこなしていきます。

タイムマネジメントの活用

この手法は、いわゆる時間製薬のある「タイムマネジメント」と制限時間で遅延を計測する「タイムボックスを利用したマネジメント」の合わせ技です。仕事でも使えますよね…というか、そもそも仕事用です。

この手のマネジメント手法は、学校での学習でも使えるので大いに使うことが肝心です。うちの子も、小5,6の夏休みからあれこれやって、中1のこの時期にやって自分で付箋を掛けるようになりました(まあ、方法は毎度教えないとダメなんですけど)。中2になったら自分でできるようになるだろうか?

カテゴリー: 雑談 | 中学校のあふれそうな中間試験勉強のためにタイムマネジメントを活用する はコメントを受け付けていません

Android内のユーザーデータを探る

Android でアプリケーションが入っている場所は /data/data になるのだが、実機だとルート化する必要もありいくつか面倒なので、Nano Pi K2 に Android を入れて、その micro SD カードを使うことにする。

このカードを既存の Linux マシンに USB メモリとして認識させる。手元に Raspberry Pi があるので、認識させたのがこれ。ラズパイの場合は /media/pi にマウントされるようで、ここの /media/pi/userdata/data がそれにあたる。

image

例えば、マギレコの場合は com.aniplex.magireco 内を調べる。これらのフォルダーは root になっているので、su でルートになるか、sudo で調べるとよい。

後からダウンロードする場合は、別のフォルダーなのだろうが、マギレコの live2D は、com.aniplex.magireco/files/madomagi/resource/image_native/live2d にあるので、適宜コピーして PC 上で動かすことができる。

image

保存データは、userdata/media/0/Android/data にあるような気がする。歌マクロスの com.dena.a12024374 内に3Dデータが入っていると思うのだが、ちょっと分からない。

image

ふと見ると、etc の下に il2cpp が入っているので、中身は C# で書いているのかもしれない。

image

jp.showgate.girlsundpanzer はガルパンで、中身は Unity のデータが入っているとか。

ひとまず、メモ書き程度に。

カテゴリー: Android | Android内のユーザーデータを探る はコメントを受け付けていません

鳳凰OS(Phoenix OS)をVMWareにインストールしてみよう

鳳凰システム – Phoenix OS
http://www.phoenixos.com/ja_JP/ という Android ベースな中国産の OS があることを知りました。以前、Remix OS があって、うまいこと仮想環境にインストールできなくて断念していたのですが、今回の Phoenix OS は VMWare Player にインストールして程よくことができたので、お試しに。ただし、再起動すると、何故かインストーラから始まる(どうやら、内部 HDD じゃなくて、ネットワーク起動が優先になっているのが問題らしい)ので、あまり実用的ではありませんが。

http://www.phoenixos.com/zh_CN/
image

日本語OSからアクセスすると「鳳凰システム」になっていますが、れっきとした北京超卓科技 https://www.lagou.com/gongsi/62428.html なので中国の株式会社ですね。

Remix OSのインストールと設定 | E.i.Z
http://eizone.info/remix-os/

を見ると、Remix OS のほうは潰れたそうです。

Phoenix OS は、中国語版と英語版しかありません。Nexus 7 のタブレット Android に入れることもできるようですが、ちょっと危ういので、Phoenix OS for x86 のほうを VMware Player 上に入れます。実は、Windows を PC に入れた状態からディアルブートするインストーラーがあるのですが、VMWare 上では起動ができないため、*.iso ファイルをダウンロードして別途仮想環境で動かしています。ISO image (64bit) にある PhoenixOSInstaller_v2.2.0.207_x86_x64.iso   854.5M のやつですね。中国から落とすと 100kb/sec 程度しか出ないのでダウンロードに5時間位かかりますが、ひたすら待ちます。ちなみに、これは中国内の回線が遅いのではなく、中国と日本間の回線が遅いのです。例の検閲絡みですね。中国内だと高速通信がバンバン走っているので、日本国内よりも(最近は光通信があるから同じぐらいか)早いぐらいです。

仮想環境でのメモリは 1GB、ストレージは16GB 程度あれば十分です。スマホで動く程度で鳳凰OSも動かすことができます。

鳳凰OSをインストールする

*.iso をマウントして VMWare を起動すると、OS をどのように起動するのかを聞く画面が出てきます。デフォルトでは、インストールメディア(DVDか?)を使ってインストールする方法になっていますが、下矢印キーを押して HDD にインストールするようにします。DVD メディア起動だと、ストレージが小さくて後から説明する Android アプリをインストールできません。

image

なんと、この間が5秒しかないので、すかさず下矢印キーを押してください!

で、HDD インストール時に ext4 にフォーマットしてインストールを続けていきくと、下の画面になります。PCがそこそこ早ければ5分位で終わります。

image

インストール直後の起動画面。言語は、英語と中国語しか選べません。

image

見慣れた、Windows 10 っぽい画面がでてきます。動きもそれっぽいので、使うのにはそれほど問題ないような気もしますが…アプリをインストールしようにも、基本は Android なアプリしか入れられないで、利用範囲はかなり狭いです。

image

標準で、Phoenix Feature なストアがあるんですが、アプリが非常に少なく利用できる状態にありません(現在 v2.0 なのに…って感じがするけど、まあ、そういうものなのかも)。なので、素直に Google Play を使います。google アカウントは念のために新しく作っています。バックドアがあるかもしれないからね。

image

組み込み系 Android 御用達の「戦艦少女R」をインストールします。何故か、マウスでするする動くし、ほどよくゲームなので、試しにちょうどよいのです。しかも、中華 Android で非常によく動きます(弊社比)。

image

戦艦少女Rが動いたら、ユーザー名を入れて適当にチュートリアルをこなしてみましょう。音も出て、結構きびきび動くことがわかります。画質も結構きれいですね。

鳳凰OSにはファイルマネージャがある

いわゆる、ファイルエクスプローラーがあるので、Android 内部のファイルを見ることができます。どうもルート権限はないみたいなので、Documents 配下ぐらいしか触れない気もしますが。

image

Google Player から色々ダウンロードしてみる

この際なので、色々試してみます。

すべてのゲームが正常に動くわけではなくて、起動ができなかったり、画面が微妙だったりします。鳳凰OSでは、Android アプリをマルチウィンドウで動かせるわけですが、こんな風に、にゃんこ大戦争と戦艦少女Rを並べて起動ができます。ここはマルチで動いていて、両方とも音がなります。にゃんこ大戦争は、ウィンドウを大きくしてもゲーム画面が大きくなりません。戦艦少女Rは全画面表示でも動きます。戦艦少女R、優秀ですね。

image

ちなみに、歌マクロスはインストールできるもののマウスが効かず、マギレコとパズドラは起動ができず。ミリオンダッシュは最初の年齢が入れられず、と動かないものもの結構あります。モノ的には Android 7. 1 なのですが、ウィンドウ化するにあたって無理がきている模様。

image

以下は、いくつか動かしてみたもの。

# Android 版の Office 365 が入っているのだけど、アカウントを入れる勇気がないので試していません。

紅白アプリは、Xamarin で作っているものです。動きますね。

image

カンペアプリは、確か Unity だったはず。マウスでお絵かきができます。たぶんタッチパネルも動くと思う。

image

ネットワークドライブも扱えます。これは別のPCにある mp4 を鳳凰OS標準の Video Player で表示させたところです。有線LANだからか、動画や音の遅延はありません。

image

面白いところでは、Google Play にある Remote Desktop アプリをダウンロードさせて Windows 10 にリモートアクセスができます。リモート先から Tera Term を開いてラズパイに繋げているところです。キーボードとマウスが有効に働きます。

image

Android 自身への接続ができる Terminal Emulator を入れると、自分自身を操作できます。フォントの大きさは自由に変えられます。ユーザー名は u0_a77 という一般ユーザー名(ランダム?)になっています。su は効かないので、ルートになれるかどうかはわかりません。

image

結構色々動きそうなのですが、難点がいくつかあります。

再起動ができない

なぜか、VMWare 上で再起動させると、ひたすらネットワーク起動をしようとして起動できない状態に陥ります。これは、鳳凰OS無いからシャットダウンしたときも同様です。

仕方がないので、DVD を入れたまま(*.isoがアクセスできる状態にしたまま)で、起動。すかさず、下矢印を押して、HDD にインストールする状態にして、

image

下のように HDD をフォーマットしないままで進みます(初回のインストールではフォーマットが必須です)。そうすると、HDD の内容がそのままマウントされるので、以前の状態が復元されます。

image

本体のインストールに30秒位かかりますが、まあ VMWare 上だから仕方がないのかなと。実機 PC にしてディアルブートにした立ち上がるのかもしれません。

鳳凰OSアプリの開発はどうするのか?

どうやってやるんでしょうねぇ?書いてありません。

と思ったら、どうやら TCP/IP 経由の Android デバッグが動きます。

  1. 設定を Native Settings にする。
  2. 設定の About → Build number を連打。
  3. メインの設定には「Developer options」は出ないが、左上のハンバーガーメニューから出るので、ここから USB デバッグを ON にする。
  4. PC のほうから、adb connect <ipアドレス> で接続

↓な感じ、で無事 Visual Studio から Xamarin.Android アプリが起動できます。

image

めでたしめでたし。

カテゴリー: 開発, Xamarin | 鳳凰OS(Phoenix OS)をVMWareにインストールしてみよう はコメントを受け付けていません

ラズパイでUbuntu Core を試してみよう(前編)

ふと、Nano Pi K2 に Ubuntu を入れて .NET Core を使ってあれこれしようと思ったのですが、何やらこの OS がちょっと Ubuntu とは違う。Raspberry Pi に Ubuntu Mate を入れたときと挙動がちがう。そもそも CPU は同じ Cortex-A53 なのだから、GPIO まわりが違うとはいえ、Hello world 位は動くのではないか?

http://wiki.friendlyarm.com/wiki/index.php/NanoPi_K2#UbuntuCore

image

と思って、何の OS だか再確認すると「UbuntuCore」と書いてあります。これは、普通の Ubuntu とはどう違うのか?ってのが発端です。

そもそも Nano Pi K2 って何?

Friendly ARM で購入できるラズパイ互換機です。Nano Pi にはいくつか種類があって、メモリや USB の数などで選ぶわけですが、Nano Pi K2 は、Android が動作して歌マクロスを動かすために購入しました。Raspberry Pi 3 よりも安く購入ができます。ちなみに、このボードでは歌マクロスは動きませんでした orz どうやら、タッチパネルが必須みたいですね。ただし、マギレコは動きます。これは後日。

image

現在のところ動作できる OS は、Android 5.1 と Ubuntu Core だけです。Raspbian のような Debian 系はありません。購入時には、赤外線のコントローラーとケースが付属しているので、Android を入れると Fire TV のように動作できます。というか、その目的で売っているみたいですね。これも後日。

Ubuntu Core とは何か

そういえば、Docker を勉強した頃に、CentOS の Atomic というのがあって、Docker 専用のコンテナ OS でした、ってのをやっと思い出しました。

コンテナホスト向けOS環境「CentOS Atomic Host」や「Snappy Ubuntu Core」を試す – さくらのナレッジ
http://knowledge.sakura.ad.jp/knowledge/4217/

元の OS に apt-get やらで色々インストールすると環境が汚れるので、Docker を入れて動かします。Docker のコンテナとしての機能しか要らないので、機能が相当削ってあり vi すら動かない状態だった、とかなんとか。そんな訳で、素の状態の OS として使う訳ではありません。

当時、Raspberry Pi でも Docker が動かないかとかいう話があったのですが、当時のラズパイは、まだ 32bit で、Docker を動かすには 64bit CPU が必須だったという状態だった、というのを覚えています。

で、現在のラズパイ3は、64bit なので、Docker が動きます。なので、それのコンテナ用としての Ubuntu Core も動作する、という状況な訳ですね。www.raspberrypi.org でも「Snappy Ubuntu Core」と言う形でダウンロードできます。これをクリックすると、Ubuntu developer の https://developer.ubuntu.com/core/get-started/raspberry-pi-2-3 にジャンプするので、「Ubuntu Core」のことです。

image

さて、Ubuntu Core が動作する環境は、 https://developer.ubuntu.com/core/get-started で見れるわけですが、ここには Intel x86/64 系や Mac はありません。通常の PC で試したい場合は、KVM 版の仮想環境で動くものを使います。

となると、CentOS の Atomic のように複数の Docker を載せて動かすというよりも、Ubuntu mate よりもメモリが少ない環境/ストレージが少ない環境の組み込み用 Linux として動作させる、という形にシフトしたようです。2016年頃の記事を見ると「snappy ubuntu core」としてラズパイ上で docker を動かす記事が多いのですが、先のダウンロード先が Ubuntu core になっていることから内部構成が変わっています。そもそも、snappy と言うコマンドが無くなって、snap というコマンドに変わっています。

image

目的も Docker のコンテナとしてではなく(snap find docker で見つかるので、インストールはできる模様)、小メモリで IoT 機器が扱えるというスタイルみたいですね。

Ubuntu Core をインストール

まずは、Raspberry Pi 3 にインストールします。Raspberry Pi 2 でも CPU が 64ビット版であればインストールできます。

Raspberry Pi 2 or 3 | Developer
https://developer.ubuntu.com/core/get-started/raspberry-pi-2-3

普通の Raspbian と同じように micro SD に焼き込みます。色々な機能は削られているみたいで、8GB 以下でも大丈夫な感じです。限られた処理しか使わないのであれば、安価な 8GB を大量に買って入れ込むということもできそうですね。16GB はまだそこそこ高いので。

ひとつ気を付けなければいけないのは、Ubuntu Core に対して SSH するためには「Ubuntu SSO account」を取得して、そのアカウントでログインする必要があります。どうやら、組み込み機器へのインストールを制御するために Ubuntu SSO を使うらしいのですが、

image

  • Ubuntu Core の初回起動時に Ubuntu SSO のアカウントを入力する必要がある。
    • つまり、モニタとキーボードが必須
    • Ubuntu SSO に繋がるために、外部接続が必須になる。
  • Ubuntu Core に SSH するときにRSA公開鍵/秘密鍵が必要になる。
    • これが結構ハマる。ラズパイの英語フォーラムでもハマったまま解決していなかったり。
    • 公開鍵使って SSH している人には当たり前のことなのか?

という制限があります。

Ubuntu Core を起動して、Ubuntu SSO に登録したメールアドレスを入れると、以下のようなアカウントで Ubuntu Core にアクセスできるようになります。私の場合は moonmile というアカウントを取りました。おそらく、早い者勝ちですね。

image

Ubuntu Core は、この写真で分かるように単純なコンソール環境…と言いますか、コンソール環境ですらないです。外部から SSH で繋げてあれこれややるしかありません。WinSCP は繋げたのでファイルのアップロードなどはできます。

Raspberry Pi からだと。

ssh moonmile@172.16.0.16

のようにして SSH で接続できます。このときに、public/private key が必要になります。

SSH/OpenSSH/Keys – Community Help Wiki
https://help.ubuntu.com/community/SSH/OpenSSH/Keys

を見て、ssh-keygen -t rsa で作ります。ラズパイの場合、デフォルトで .ssh フォルダができているのですが、.ssh/id_rsa のパーミッションを chmod 600 id_ras で変えておく必要があります。ここがデフォルトの 644 のままだと、何故か ssh で繋げるときにエラーになって不明な状態に陥ります。

.ssh/id_rsa.pub の内容を、Ubuntu SSO の SSH Keys に貼り付けて、登録しておきます。初回 SSH するときには、秘密鍵のパスフレーズが必要になるので、忘れないでください。その後は、Ubuntu SSO のパスワードと混乱しそうですが、RSA公開鍵を使ってアクセスをするので、自分の秘密鍵のパスフレーズが必要、という訳です。

そうすると、無事 Raspberry Pi から(通常の Linux でも同じです)Ubuntu Core にログインできます。

image

Tera Term でログインする

では、Windows の環境から Tera Term を使って Ubuntu Core にログインしてみましょう。Raspberry Pi 上の .ssh/id_rsa と .ssh/id_rsa.pub を Windows 上の何処かにコピーします。github などで既に、id_rsa を作っている場合は、それを使ってもよいでしょう。

SSH 認証で、「RSA~鍵を使う」を選択して、id_rsa ファイルを指定します。ユーザー名には、Ubuntu SSO のログイン名を入れ、パスフレーズは、id_rsa のパスフレーズを入れます。ややこしいですね。

image

うまくつながると、↓のようにログインができます。

image

WinSCP でファイル転送する

Windows からファイル転送ができるように WinSCP の設定もしておきます。

転送プロトコルで「SCP」を選択して、ユーザー名に Ubuntu SSO のアカウント名を入れます。

image

設定ボタンをクリックして、SSH → 認証で、秘密鍵を指定します。

image

秘密キーのパスフレーズは、接続時に要求されるので入力します。このパスフレーズは保存できないようです。

image

うまくつながると、下記のようにファイル転送が SSH 経由できるようになります。

image

ホスト名の変更と avahi-daemon のインストール

ubuntu core のホスト名は、初期値が localhost になっているので、これを変更します。ホスト名を「raspicore」にするときは、以下のように実行。

sudo hostnamectl set-hostname raspicore

あと、windows からホスト名 raspicore.local でアクセスできるように avahi-daemon も入れておきます。

snap install avahi

でインストールができます。

インストールしたパッケージは snap list で確認ができます。

image

snap 自体は、Unbutu mata でも使えるので、このあたりは普通に使えるのかなと。snapcraft で自前のパッケージも作れます。

と言う訳で Raspberry Pi 上で ubuntu core が動き出したので、お次は GPIO 廻りをどう弄るのか?を調べていきましょう。

カテゴリー: 開発, RaspberryPi | ラズパイでUbuntu Core を試してみよう(前編) はコメントを受け付けていません

Live2D Viewer でデスクトップマスコットを表示してみよう

スマホでゲームをしていると、Live2D で二次元キャラが動くものがあります。

マギアレコード 魔法少女まどかマギカ外伝
https://play.google.com/store/apps/details?id=com.aniplex.magireco

なんてのは、各キャラが動いていますね。ってことで、この Live2D のデータはゲームに使われるだけじゃなくて、そのまま PC のデスクトップマスコットにできます。

Live2D Viewer
http://www.live2d.com/ja/download

image

元々、ビューアがあるのは知っていたのだけど、そのまま背景を透明にすれば、デスクトップマスコットになるんですね。こんな風に Amazon Prime を見ながら、マスコットが楽しめます…というか、子供には邪魔じゃないかと言われたのですが、まあ、これはこれでいいのです。

image

Liver2D Viewer は Adobe Air で動きます。インストールした後に、モデルデータ(*.moc)をドロップして、「キャンパスウィンドウの表示」のチェックを外します。余分な腕のデータとかは「パーツの表示」で適宜外します。

image

そのままだと、マウスを追うだけで詰まらないので「プロジェクト」→「サンプル」→「モーション:アイドリング」をいれると、少し揺れるような感じのモーションが付きます。たぶん、特定のキーか何らかのイベントでモーションを動かすこともできるでしょう。そのあたりは、少し探してみようかなと。FaceRig で連携するのもそれかと。

Live2D は当然 Android でも動作するので、真面目にポーティングすると Xamarin.Android で使えるようになるかなと。たぶん *.jar のバインディングあたりで。WebView ではなんとか動く模様 https://docs.com/user469647/7372/xamarin-de-live2d

カテゴリー: 開発 | Live2D Viewer でデスクトップマスコットを表示してみよう はコメントを受け付けていません

続 .NET Standard とは何か?

.NET Standard とは何か? | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/8218

の続編です。1年前位に、.NET Standard が発表されて、その後どうなるのかと思いつつ、.NET Core 2.0 のプレビュー版が出てきて、最近 Rasbian 上で .NET Core 2.0 を動かしてみて分かったことをいくつかまとめます。

PLCは最小公倍数で、.NET Standardは最大公約数だ

せまっ苦しいPCL(Potable Class Library)では、なかなか大変なことになっているので、いっそのこと、.NET Framework、.NET Core、UWP な .NET Runtime を大まかに含めてしまったのが「.NET Standard」であるというのは、概ね合っています。完全に包括しているわけではない(たまに、.NET Frameworkで含まれているクラスが .NET Standard に含まれていないので)のですが、概ね含まれています。

大まかに.NETの動作環境を考えると、

  • .NET Framework は、Windows の Desktop で動く
  • .NET Core は、Linux で動く
  • .NET の Runtime は、UWP(Windowsストア)な環境で動く
  • .NET の Runtime は、Windows Mobile で動く

更に、

  • Mono が Linux 上で動く。
  • Mono が、macOS 上で動く。
  • Xamarin.MAc が macOS 上で動く。
  • Xamarin.Android(MonoDroid)が、Android 上で動く。
  • Xamarin.iOS(MonoTouch)が、iOS 上で動く。

という現状があります。Xmarinな環境はベースがMonoなので、Android/iOSに限らずLinuxやmacOSでも動作する点で範囲が広いわけですが、いざ、Winodwsも含めて共通ライブラリを作るとPLC Hellに陥ります。結局のところ、最小公倍数なクラス群をまとめる形になるので、せまっ苦しくなります。

実は、.NET Standardが最大公約数的とはいえ、Windowsのデスクトップ環境(WindowsフォームやWPFとか)は入っていないし、逆にXamarin.Macで使われるようなCocoaな機能は入っていません。なので、主に非グラフィックな機能を集めることになります。一方で、Xamarin.Formsが、iOS/Android/UWPをカバーし始め、Windows(.NET Framework)のWPF/UWPと括弧付きですがSilverlightを含めて、「XAML Standard」という発想が出てくるのは無理からぬことです。が、まあそれはさておき。

じゃあ、なんとなくですが、PCLよりも広い感じで使える.NET Standardということで、どんな風に使うのか?というのを具体的に考えます。

Rasbianで.NET Core 2.0を動かしてみる

.NET Core 2.0 から実行環境にRaspberry PiのARMv7/8な環境がサポートされるようなりました。もともと、RasbianではMonoが動くのですから、.NET Coreが動かないというのも変な形なのですが、まあ動かなかった訳です。で、現時点ではビルドはできないけれども(つまりコンパイラが動かないとうこと…なのか)、実行だけはできる環境が整いました。

さて、ラズパイ上でGPIOを制御する(Lチカする)ことなるので、ハードウェアを触るとここは RaspberryPi.Net を使いました(Raspberry#IOのほうが有名なのですが、これがどうも動かないもので)。さらに、ハードウェアそのものを動かすために bcm2835 といチップを操作する C言語のライブラリを扱います。つまり、次の3つの部分に分かれるわけです。

  • メインのプログラム(C#)
  • RaspberryPi.Netクラスライブラリ(C#)
  • bcm2835ライブラリ(C言語)

bcm2835ライブラリは、C言語で書かれているのでRaspberry Piべったりの制御ということが分かるので、当然ながら他のマシンとの互換性はありません。
メインのプログラムとRaspberryPi.NetクラスライブラリはC#で書かれているので、先に書いたような色々な.NETな実行環境で動かすことが可能です(実際のところ、GPIO制御が入るので、ラズパイ上でしか動かないのですが)。

最初に考えるのは、ラズパイ上なので、この2つをMonoでビルドすることです。Monoはラズパイ上で動いているので、そのまま動きますよね。

次に考えたのは、せっかく .NET Core 2.0 がラズパイ上で動くようになったので、メインのプログラムとRaspberryPi.Netクラスライブラリの両方を .NET Core 2.0 でビルドし直すということです。
この環境で動かすこともできるようになりました。

ふと、じゃあ .NET Standard 2.0(.NET Core 2.0をサポートしているので)を含めるとどうなるのだろうか?ということを考えてみると、

  • メインのプログラム(C#) → .NET Core 2.0
  • RaspberryPi.Netクラスライブラリ(C#)→ .NET Standard 2.0
  • bcm2835ライブラリ(C言語)

という組み合わせが考えられます。
RaspberryPi.Netクラスライブラリは汎用的に(その他のAndroidやiOSなど…GPIOを使えないけど)使うことを考えて .NET Standard でビルドをしておき、そのライブラリをメインの .NET Core で作った実行ファイル(Rasbian上なので拡張子はexeではありませんが)で利用します。

実際、この組み合わせで動作を確認しています。
これで、なんとなくわかると思いますが、

  • 最終的な実行部分(メインプログラム)は、各OSに即した.NET環境を使う
  • 中間のライブラリは一括して.NET Standardで作る。
  • 個別の制御はC言語や即した.NET環境を使う

という作り分けになるでしょう。

中間のライブラリを片っ端から.NET Standardにする

発想的には、こんな風に.NET Standardがサンドイッチ状態になります。

実際にはフロントが要らない場合もあるし、その環境でしか動かさないのであれば無理に.NET Standarでビルドをする必要はないのですが、中間の部分を.NET Standardでビルドをしておいて、NuGetのようにダウンロードできるようにしておけば、全ての.NET実行環境で使えることになるでしょう。

.NET Standardなライブラリの作り方

Visual Studio 2017 Update3プレビュー版では、.NET Standard 2.0 が使えます。プロジェクトのテンプレートを見ると非常に簡単で「クラスライブラリ」しかありません。

理由は簡単です。先に書いた通り、フロントUIでもないし、個別のハードウェア寄りでもない中間層を受け持つので「クラスライブラリ」だけで十分なのです。

既存のプロジェクトを.NET Standardに変えたい場合は、*.csporj を開いて、以下のように変更するだけです。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>

コンパイル対象のファイルは、フォルダー内のC#の全てのファイルが自動的に対象になります。少々乱暴な気がしますが、プロジェクトの設定が非常に簡単になっています。

そんな訳で、これを踏まえて Rasbian + .NET Core/Standard の組み合わせを後日考察。

カテゴリー: 開発 | 続 .NET Standard とは何か? はコメントを受け付けていません