Android 5.1 をソースコードからビルドして NanoPi 2 Fire で動かすまで。

NanoPi 2 Fire というのを買いました。

左から、Raspberry Pi, Orange Pi, NanoPi です。USB はひとつしかついていませんが、HDMIがあってディスプレイ出力ができます。

さっくりと Debian が動いたり

さっくりと Android 5.1 が動いたりします。

Android のほうは Google Play が入っているので、ストアから Android アプリを入れられるという優れものです。Orange Pi の Android には Google Play が入っていないので、こっちのほうがいいかなと。

NanoPi2 Fire
http://www.friendlyarm.com/index.php?route=product/product&product_id=96&search=nanopi+2+fire&description=true&category_id=0&sub_category=true

値段は、$22.99 なので、3,000円弱で変えます。たぶん、Scratch などもインストールすれば動くはずなので、Raspberry Pi 互換機として使うことができます。

だが、Android をビルドする

そんな訳で、Android 5.1 をソースコードからビルドすることにします。

手順自体は、

NanoPi 2 Fire – FriendlyARM WiKi
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_2_Fire#Compile_Android

にあるので、これを参考にしてがんがんビルドをしていきます。私の場合、OSの入れ直しをしたり、コードを変えてみたりとあれこれやったので6日間掛かっていますが、おそらく1日ビルドをすれば終わるでしょう(苦笑)。

注意点としては、

  • Ubuntu 14.04 の 64bit 版を使う(現在の最新は 16.04 なので注意)
  • ディスク容量は160GB 程度必要
  • メモリは8GB 程度必要

というところです。Hyper-V の仮想環境でビルドをしたのですが、この程度のマシンパワーが必要になります。Ubuntu は最新の 16.04 などを使うと c++_static あたりでエラーになるので、14.04 を使います。これは Android 側の制約じゃないかと思うのですが…さだかではありません。

 

内部的にビルド時のフォルダが、/opt/FriendlyARM/s5p4418 固定になっているので、適当に ln -s してやります。

綺麗にビルドが通ると、/opt/FriendlyARM/s5p4418/android/out/target/product/nanopi2 フォルダに、

  • boot.img
  • cache.img
  • userdata.img
  • system.img

ができあがります(Compile Linux kernelの結果も混じっているかもしれません)。

micro SD カードに焼く

これを micro SD カードに焼くのですが、焼き方は、

NanoPi 2 Fire – FriendlyARM WiKi
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_2_Fire#Under_Linux_Desktop

に書いてあります。ちょっとややこしいのが、sd-fuse_nanopi2 フォルダ内に android フォルダを作って、先の *.img を置いて動かす必要があります。

な感じで、ln -s しておくとよいでしょう。

あと、私の場合 Ubuntu 14.04 を Hyper-V 上で作ってしまったため、USB 経由で micro SD カードを認識できません(Hyper-V の場合はここが落とし穴ですね。ゲストOSが Windows の場合は、リモートデスクトップで接続することで USB 関係が使えるようになります)。色々考えたのですが、Raspberry Pi から、micro SD カードに Android を焼くことにしました。なるほど、Raspberry Pi ならば普通の Linux ですからね。

samba を使って Raspberry Pi から Hyper-V 上の Ubuntu のフォルダをマウントして、micro SD カードに焼きます。

そして、無事、自前でビルドした Android 5.1 を動かすことができました。ぱちぱちぱち。

次はどうするのか?

まあ、一度 Android をビルドしてみたかっただけというのも本音なのですが(昔は、ガラケーのOSとか仕事でビルドしてましたから)、ここまでできたら、次は自前のモジュールを入れて「オレオレAndroid」を作りたいですよね。NanoPi には GPIO がついているのでこれを操作するために、Python を入れるといいかなと考えています。Google Play から入れるものもあるのですが、GPIO を直接触れるのかわからないし(後で試しますが)、どうせならば直接アクセスできるように拡張してしまうのも手でしょう。ということで、これは後日に。

カテゴリー: Android | Android 5.1 をソースコードからビルドして NanoPi 2 Fire で動かすまで。 はコメントを受け付けていません

オレオレXamarin.Formsを作ってみよう

Xamarin(その2) Advent Calendar 2016 – Qiita の10日目の記事です。Xamarin に関する記事ということで、流行りの Xamarin.Forms を使ってみましょう…じゃなくて、ビルドしてみましょうという記事です。素直に nuget から NuGet Gallery | Xamarin.Forms 2.3.3.175 をダウンロードするならば、それでいいんですよ。でも、Forms のバグがなんだとか、機能が不足だからとか、ネイティブの機能を使うためにはなんたらのサービスを使ってとかいう前に、「OSS なんだから自分で追加すればええやん」という思想…で、できたらいいなーと思った訳です。ええ「感想」です。

以前、Xamarin.Forms 用のプレビューアをアルファ版で公開 | Moonmile Solutions Blog を作ったときに(これは途中で止めてしまいました。いちいち Xamarin.Forms のバージョンアップに付き合うのも大変過ぎる)思ってたのですが、内部で XAML をパースしている部分を弄ればこの手のビューは結構簡単にできます。当時の難点は、XAML をロードしたときに、内部的に x:Class で参照してる部分を探そうとしたり、無効なタグや属性を指定するとエラーを発生してしまうということでした。実は、WPF や UWP の XAML のパーサーも同じ仕組みで「内部的に何らかの制限」があることは薄々分かってはいるのですが、なんせパーサー自体がライブラリ内にあってコードが公開されていないのでなんとも…という状態だったのです。で、晴れて Xamarin.Forms が OSS になった ので、このあたりの調節もできそうという訳です(WPFやUWPのほうの XAML パーサーは公開されていないのですが、まあ、ひとつあれば十分です)。

そんな訳で、具体的にどのように活用するのかは脇に置いて、Xamarin.Forms のビルドを確認してみましょう。Xamarin.Formsのソースコードをビルドしてテストを実行してみた – Qiita の「buildします」のところを詳しくいきます。

コードをダウンロードする

github の https://github.com/xamarin/Xamarin.Forms からコードをダウンロードします。

image

git clone https://github.com/xamarin/Xamarin.Forms.git しても良いし zip でダウンロードした後に解凍してもよいでしょう。ブランチを変えて、master 以外のコードをダウンロードしても ok です。

手を加えてしまったコードは本家へプルリクしない限り(そして取り入れられない限り)あなただけのコードになります。なので、思う存分、改変してしまいましょう。まあ、改変してしまって動かなくなっても自己責任なのですが、実験的にあれこれと好きなようにやってみるのもよいかなと。

ビルドする

qwerty2501 さんも書いていますが、実はビルド時にエラーがでます。どうやら Maps あたりのビルドにあれこれと設定がいる模様なのですが、私が欲しいのは Xamarin.Forms.Xaml なので、これがうまくビルドできる位置だけを探っていきます。

image

いくつかのコードみていくと、サンプルコードらしきものが見えます。

  • /Control Gallery/Xamarin.Forms.ControlGallery.Android
  • /Pages Gallery/PageGallery.Droid

の2つです。「Control Gallery」のほうが、たくさんのサンプルが含まれていそうですが、残念ながら maps を含んでいるのでうまくビルドができません。もうひとつの「Pages Gallery」のほうは、Xamarin.Forms.Pages を作った簡単なものなので、ビルドが通ります。ここでは Android のほうだけビルドしていますが、iOS のほうもビルドできるでしょう。

Hyper-V のエミュレータで動かすと、こんな感じの画面がでてきます。

image

 

参照設定をみてみる

Xamarin.Forms が NuGet からダウンロードされていないことを確認するために、共有プロジェクトの PageGallery の参照設定を見てみましょう。

image

プロジェクト → ソリューション を見ると各種のプロジェクト自身が参照されていることがわかります。

きちんと自前の Xamarin.Forms.* の NuGet 設定をしてもよいのですが、ここで出来上がった PageGallery/bin/Debug/ 内の各種 DLL をコピーして使ってもよいでしょう。あるいは、どうせ自前なのですが、Xamarin.Forms のプロジェクト自体をコピーして使っても構いません。

ちなみに XAML パーサーは何処にあるのか?

XAML パーサーは、https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Xaml/XamlParser.cs の Xamarin.Forms.Xaml.XamlParser.ParseXaml() でパースできるようになっています。XmlReader を使って読み込むようにしてあるので、XDocument 渡しにするのは難しくないでしょう。これと XamlLoader を改変してやれば、動的に XAML を読み込みかつ内部での x:Class やバインド先の ViewModel を切り替えることもできると思います。

あと、ちょっと興味深いのが Xamarin.Forms.Xaml.Xamlg プロジェクトですね。所謂、*.xaml からコードビハイドの *.g.cs を出力するツールです。ビルド時に xamlg ツールを使ってコードビハイド用の *.g.cs ファイルを出力しているところです。C# の場合は、*.g.cs として用意されているのですが、F# の場合はこれが対応していないために *.g.fs のようなコードを出力できません。このため Xamarin.Forms で XAML を使うときは、コードで XAML を組み立てる必要があるのですが、ここを自前実装すると F# でも C# と同じように XAML ファイルを使えるようになります。まあ、ビルドプロセス(MSBuildに戻ったし)を変えないといけないので、結構大変かもしれませんが。

 

と、そんな訳で、具体的なコードは間に合わなかった(本当は、タップのコードを入れ込みたかったのだが時間がなかった)ので、ここでおしまいですが、まあ、オレオレ Xamarin.Forms ができそうな感じにはなったと思います。実際、オレオレな Xamarin.Forms を作るかどうかは別としても、こんな風にライブラリが動いているんだという参考にでも。

カテゴリー: Xamarin | オレオレXamarin.Formsを作ってみよう はコメントを受け付けていません

o-o-8-o-o .com と Vote for Trump! のリファラースパムに対処する

ここ数日、微妙にブログのアクセスが重たいのと、妙なリファラーが google アナリシスに「  motherboard.vice.com/read…spamming-google-analytics」と出て来るのに対処します。

o-o-8-o-o.comはリファラスパム!まとめて正規表現でフィルタ除外するよ! | AnalyzeFindOut~アクセス解析を調べる
http://analyze.siraberu.info/post-631/

定期的に流行っている?ロシアからのリファラースパムらしいのですが、統計よりも頻繁にアクセスする(200回/日位)ので、サイトから締め出します。

.htaccess に SetEnvIf を使って deny.

image

何故か言語のところにメッセージを書くという謎仕様なので、そのまま利用します。

これで暫く様子見を。

…と思ったが、拒否できてないっぽい。

image

あとで対策を。

カテゴリー: 開発 | o-o-8-o-o .com と Vote for Trump! のリファラースパムに対処する はコメントを受け付けていません

Xamarin.Android の開発とその先にあるもの

Android Advent Calendar 2016 の8日目になります。初めての人は初めまして、初めてでない人は、ずっと下のほうまで読み飛ばしてしまって大丈夫です。

Xamarin とは何か?

C# 界隈では鬱陶しいほど流行っている…のか流行っていないのかわかりませんが、Java のほうでもぼちぼちと Xamarin な人が入ってきたりしていると思いますが、端的に言えば、Android を C# で書こうというのが、Xamarin.Android です。ついでに言えば、iPhone/iPad のアプリを Objective-C や Swift じゃなくて C# で書こうというのが Xamarin.iOS で、Mac 上のアプリを C# で書こうってのが Xamarin.Mac です。あちこちで C# が出てきますが、実は F# で書くことができたりしますが、まあ、そんなマニアックなことをしなくても C# で .NET Framework を使ってアプリを書くことができます。

ここは Android 界隈に話を絞ると…

正直な話、Java で Android アプリを作るのは、Objective-C で iPhone アプリを作るよりも辛くはないと思うんですよね。スマートフォンのアプリを作る場合、それぞれのスマートフォンの仕様に従うので、Android の場合は Java が最適だとか、iOS の場合は…だとかは普通な話です。なので、いままで Java/Scala/Kotlin で Android をアプリを既に効率よく書けるのであれば、それはそれで十分だと思うのです。

Xamarin の場合は、Android/iOS そして XAML という XML形式で View を書いて(Android の axml と似たようなものです)Xamarin.Forms として共通化して書けるというメリットもあるのですが、まあそれも、Android だけを対象にするならば、特に Java から C# へ移行するというメリットはありません。

Xamarin.Android の欠点は?

どうせだから、欠点から先に並べておきましょう。

最新の Android の対応に 2,3か月かかる

iOS の場合は、事前にデベロッパーサイトに新しいバージョンの iOS が公開されます。メジャーバージョンアップのときには半年前に公開されることもあるので、そこで公開されるベータ版を使って iOS アプリのテストができます。Xamarin.iOS が iOS 内部のライブラリをポーティングしてテストする期間をそこに持つことができます。

しかし、Android の場合は事前公開がありません。Google からバージョンアップが表明されて、少しずつ各メーカーが対処するいう具合です。ここに Xamarin.Android の対応も巻き込まれるので、最新の発表から 2,3か月ほど遅れてしまいます。ここは、Java ネイティブで書いていたほうが即対応をすることが可能です。

Java の各ライブラリを個別にポーティングする必要がある

当たり前のことですが、Android の各種ライブラリは Javaで(*.jarで)提供されることが多いでしょう。あなたが使っている便利なライブラリや、あなたが作った効率的なライブラリを Xamarin.Android で使えるようにするには、C# で呼び出せるようにする必要があります。幸いにして、Xamarin.Android のコードのように属性を使って Java のライブラリを呼び出すようにできるのですが、Java から直接使うよりも手間が掛かることは確実です。

Java 特有のノウハウが使えない

Java も C# もオブジェクト指向言語ではありますが、それぞれのプログラム言語特有のノウハウがあります。私の場合、本格的に Android のプログラムを組んだことがありませんが(C# でならばあるんですが)Android の数々のコントロールは Java に対して組みやすいようにできていると思います。ListView へのアクセスとか、モデルオブジェクトの扱いとか、リスナーの扱いが Java っぽいですよね。そのあたりは、抽象的なデザインパターではなく「実装依存」にならざる得ないところがあります。そのあたりのノウハウを Xamarin.Android の世界に持って来ると Java –> C# なコンバートで混乱しますし、逆も同様です。そこは適材適所というところでしょう。

それを踏まえて Xamarin.Android を見ると

いくつかの欠点を踏まえて、Xamarin.Android + C# の組み合わせを見ると、「適所」な部分がみえてくるので、導入するときのポイントを示しましょう。

こなれた UI を使う場合

最新の Android ではなくて、4.4 のようなちょっと前の UI を使うときには、Xamarin.Android を使ってもよいでしょう。Android のアドベントカレンダーなので、C# な方はいない…とは思いますが、まあ、標準的な UI で社内アプリを作るようなときに C# –> Java で変換するよりも C# で書けるパターンを選ぶのもよいでしょう。勿論、社内ツールならば、引き継ぎなども考えて「誰かに任せられる言語」を選ぶことが大切です。社内で使われているプログラム言語が、Java なのか C# なのかという判断でよいと思います。

C#/.NET のノウハウを使う

例えば、MVVM パターンのような C#/.NET に端を発する技術やノウハウを使うときは Xamarin.Android を使って使うとよいでしょう。単に試してみるためでもいいと思います。私の場合、言語の出身上(?)、Java よりも C# のクラスライブラリのほうが知っているので、Xamarin.Android のほうが楽に開発ができます。ある程度、ライブラリなり試験が済んでしまえば、コード自体を Java と C# の相互変換してもよいし、クラスライブラリのまま呼び出してもよいでしょう。ちょっと、Java から C# を呼び出す方法は知らないのですが、先に示したように C# から Java の呼び出しは、Xamarin.Androidでロボホンを動かす(Java Binding Library利用) – Qiita が参考になると思います。

 

さて、ここまで来て話が飛びますが、ワタクシが Android をさして開発しないのに、Xamarin.Android であれこれやっている、理由のひとつがこれです。

左から、Raspberry Pi, Orange Pi, NanoPi です。いわゆる、組み込みボードと呼ばれるものなのですが、通常 Linux を入れて動かしますが、実は Android を入れて動かすこともできます。

NanoPi には、Android 5.1 を入れることができて、こんな風に HDMI を通して液晶ディスプレイに表示させることができます。

導入する Android の種類(主に中国産のAndroidになるので)にもよるのですが、NanoPi に入れられるものは Google Play も入っているので、ネットからアプリを入れることができます。

ここでは、有線LANで繋げていますが、無線LAN(WiFiドングルが必要)を付けることも可能なはずです(また試してはいない)。

ピンの部分は普通に GPIO なので、Lチカしたり、サーボモーターを動かしたり、各種センサーからデータを拾ったりもできますよね。

Android というと、スマートフォンの Android が筆頭にあがりますが、実はこのような組み込みボードの世界でも Android が使われているところがあります。中身は Linux なので、それなりに Raspberry Pi のようなアクセスが可能なのと、UI は Android のものが使えるのが利点です。まあ、そこで .NET な私としては Xamarin.Android のほうが使い勝手がいいというところなのです。

去年も Raspberry Pi に Android を入れて GPIO を弄ろうとしたのですが、なんかいまいち遅くてなんともならなかったのですが、NanoPi ぐらいならばなんとかなりそうです。幸いにして、Android のレポジトリからビルドする方法も NanoPi では用意されているので、コードから直接弄れそうな感じでもあります。

NanoPi の購入や解説は下記で

FriendlyARM-NanoPi 2 Fire
http://nanopi.io/nanopi2-fire.html

NanoPi 2 Fire – FriendlyARM WiKi
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_2_Fire#Compile_Android

というわけで Xamarin.Android のその先へのお話でした。よいクリスマスを。

カテゴリー: Android, Xamarin | Xamarin.Android の開発とその先にあるもの はコメントを受け付けていません

ASP.NET MVC プログラミング入門の入門の補足

.NET ラボ勉強会の2016年11月で、「ASP.NET MVC プログラミング入門の入門」の発表をしてきたので、それの補足です。

動画

スライド
[slideshare id=69549826&doc=asp-161126152036]

最初に補足しておくと、スライドの「おまけ」のページの .NET Core の ARM32/64 版がない、というくだりは、core-setup/README.md at master · dotnet/core-setup の中に .NET 1.2 という形で残っています。「Windows arm32/64」という形なので、Windows IoT Core が対象なのか、ARM ベースの通常の Windows 10 が対象なのかは謎ですが(これは後で実験します)、少なくとも ARM ベースの .NET Core は 1.2 で出そうですね。ただ、Raspberry Pi の Raspbian で .NET Core がコンパイルできる&実行できることを欲しているので、もう少し突っ込んで見ていきたいところです。issue を観ている限りは、一進一退っぽいのだけど他に比べてサポートが薄いかなと。

で、なんで、ARM + Linux の組み合わせなのかというと、動画の中でもちらほらでますが、Android + .NET Core を期待するのと、Android + Mono が継続されるのか、と微妙なところがあるからです。今後の .NET Standard と、組み込み OS としての Android(Orange Pi とか)の中で、Mono ベースなのか、.NET Core ベースなのか、というところがあります。そのあたりは組み込み Linux も含まれたりするのですが、まあ、そこは Python を入れたりするので .NET は不要だったり…期待したり。

ちなみに、スライドの中に Xamarin が入っていたり、「ASP.NET MVC プログラミング入門」の書籍のほうに Xamarin が入っているのは、2つほど理由があります。

  • Web API のクライアントバリエーションとして Xamarin を使った。
  • View 概念を拡張すると、スマートフォン/デスクトップ/ブラウザ(View)+Web API(ロジック)の組み合わせができる

2年前だと10万円近くした Xamarin.Android/iOS ですが、現在は Xamarin 社が提携/被買収のおかげで無料で使えます。こうなると、以前、Xamarin 本を出したときよりもぐっと敷居が下がって(実は Starter という形で Xamarin.Android/iOS を使えないこともなかったのですが、小さなアプリしか作れないし、Xamarin.Forms はサイズ的に使えないし、遊び/試用版の域を出ませんでした)、使おうと思えば使えるところまで下がってきたわけです。

逆に言えば、10万円也(Android/iOS の同時開発するのであれば20万円也)の資金を回収する必要がなくなったので、ある意味で「Xamarin を使う覚悟」ってのはだいぶん減っています。お金を出すとそれを回収しようと思って勉強するけど、無料だったら使えなくてもまあいいか、って感じになりがちですよね。

私が Xamarin を勧める理由

Cordova じゃなくて、何故 Xamarin なのかと言えば、端的に C#/.NET Framework だったからです。Java や Objective-C/Swift じゃなくて、何故 C# なのかと言えば、2002年以来 .NET でやってきたからです。ただし、C# ができるとか、Java が得意とかいうだけなれば、Android は Java で、iOS は Objective-C/Swift で書けばよいのでしょうが(実際、Swiftの本も書きましたから)、TDD の観点からすると、サーバーからクライアントまで一貫して同じプログラム言語を使うのは、開発効率という点で高いメリットがあります。

既存のコードが流用できる

いくつかの本の執筆も含めて、手元には膨大な C# のサンプルコードがあります。同じぐらい VB.NET のコードもあるけど、調べて実験するためのコードは C# が多いので、手元のサンプルは C# のほうが多いのです。そうなると、別の言語に(PHPやPython、Javaも含めて)直すよりも、C# で作れたほうが手元のサンプルを活用できます。インターネット上の「私のネットワーク」も C# のほうが多いので、C# のほうが回答が出やすい状態になっています。

ロジックを取り出してテストする

手元の実験コードはできるだけ、ロジックをオブジェクト化してテストできるように努めています。デスクトップでテストしたものを、そのままサーバーに持って行ったり、Xamarin.Android/iOS を乗せたスマートフォンアプリに持って行ます。これは、サーバーとしてテストしたり、スマートフォン上でテストするのではなくて、一度デスクトップアプリでテストする≒試行錯誤のスピードが速い、という利点があります。このためには、それぞれの環境で動くプログラム言語を同一にしておくことと、それぞれの環境のライブラリが同じ或いは似たものであることが必要です。幸にして、.NET は、.NET Framework/Mono/.NET Coreという形で、一見ばらばらのように見えるものの「再コンパイルさえすれば」おなじコードを使うことが可能です(ネットワークなHTTP廻りとファイル廻りが異なりますが)。

聞く/尋ねる人が近くにいる

私の場合、自宅で仕事になるので尋ねる人がいないのですが、Xamarin を学ぶときにあなたの身の回りに C# をよく知っている人いれば、Xamarin にしましょう。逆に言えば、Java を知っている人(サーバー系であっても)が多いのであれば Java で Android を書いたほうがいいし、そもそも Objective-C や Swift で iPhone アプリを書いている会社であれば Swift のほうがよいでしょう。誰にも尋ねることができないのは、勉強がはかどらないだけでなく、仕事として詰まってしまったときに「誰も助けることができません」。この状態はかなりリスキーです。

ただし、発表でも話したように、Xamarin.Android/iOS/Forms を使うと、C# で同時にリリースすることが可能になります。ロジックに不具合があったり、何かを修正しないといけないときに、Java と Swift の両方を手直ししないといけないよりも、うまくロジックを抜き出しておけば C# だけで済みます。例え、それぞれの画面が別々のレイアウトになっていたとしても、C# で似たような作りにしておくことができます。

勿論、Xamarin/C# ではなくて、Java で統一的に書くことも可能です。あるいは JavaScript のほうを活用するために Cordova でもいいかもしれません。上記の3点の理由を満たせば、どの言語を使っても良いと思います。例えば、手元に豊富な Java ライブラリを持っているのであれば、Xamarin.Android を使って未知なる C# を学ぶ理由はあまりありません。

そんな訳で、ASP.NET MVC の話なのですが、C# にちょっと興味がある/環境的に恵まれているのであれば、Xamarin.Android/iOS/Forms に手を出しておくのは悪くないですよ、という話でした。

書き忘れたけど、新刊

[amazonjs asin=”4822298884″ locale=”JP” title=”ASP.NET MVCプログラミング入門 (マイクロソフト関連書)”]

著者サポートは、こちら http://www.moonmile.net/blog/article/mvc

 

カテゴリー: ASP.NET, Xamarin | ASP.NET MVC プログラミング入門の入門の補足 はコメントを受け付けていません

漫画「この世界の片隅に」に寄せて

映画のほうは見ていないので、こうの史代著「この世界の片隅に」を一読した感想を記しておこう。著者の名前は憶えていなかったのだけど、以前「夕凪の街」が話題になったときに、ちょっと避けたんだよね。絵柄的…ではなくて、原爆を扱って、それが話題になっていたところで避けてしまっていた。で、改めて、先日 Kindle で「この世界の片隅に」上中下の3巻を買って読み終えて経歴を調べると、広島市西区生まれで広大の人だった。しかも同い年だ。中高を広島市で育った私としては、本当の意味で「同時代」的な人らしい。

「夕凪の街」は、直接、広島の原爆を扱うけど、「この世界の片隅に」はちょっと離れた呉から原爆を扱っている。全体的には戦時中の生活を扱っているのだが、やっぱり呉から見た「新型爆弾が落ちたらしい」という言葉は、精一杯の言葉になる。

絵柄的には、近藤ようこや「ヨコハマ買い出し紀行」の芦奈野ひとしに似ている。情景を描くので、キャラクタ自体はおとなし目だけど、逆にそっちのほうが印象感じになる。水木しげるの「熊楠」も似た感じの描写になるよね。情景の書き込みに惹かれるものがある。おそらく、呉港に出て来る数々の軍艦が映画のほうでは主になっている(ような感じがツイッターではみられるんだけど)、漫画のほうでは、シルエットとして軍艦が描かれている。特徴を軍艦のシルエットは漫画の中にもあるけど「諜報」活動とみなされたりするし、いわゆる戦闘機の機影で敵味方を識別するのと同じように、遠くから見える船影で相手を識別する。そんな軍艦の大きさと、生活との隔たりがよく描かれていると思う。

焼夷弾の内容とか、戦時中のあれこれの習慣がディテールとして詳しく書かれている手法は、高橋孟の「海軍めしたき物語」を思い出させるし、道具のあれこれが描写されているのは妹尾河童や安野光雅がベースだろう。もちろん、はだしのゲンは織り込み済みだ。

戦時中の生活を比較的「楽しく」描くという点では、NHKの朝の連続テレビ小説の長谷川町子の話の「マー姉ちゃん」あたりじゃないかな。最近の連続テレビ小説は戦時中の話は飛ばしてしまうことが多いのだが、当時(40年前ぐらい)は、視聴者がまだ戦争を知っていた世代でもあって、戦争を結構身近に描いていた。ただ、戦争モノを直接見ると、戦時中の本当の想いがよみがえってしまうので、少し視点を変えていたりする。
それが、「この世界の~」でもあるように、特に鉄砲が出て来るわけでもなく、何度となく鳴る空襲警報だったりする。3巻のうちでも戦闘機からの機銃掃射は1回しかない。焼夷弾も2回しかない。1回は防げて、不発弾で主人公は右手を失うところまで描く。

繰り返すが、数々の戦時のディテール(戦闘機や爆弾も含めて)が詳しく描かれているのは、そのほうが「リアリティ」を持たせられるからだ。現実の話だから「リアル」で当たり前のような気がするだろうが、実は違う。例えば、「爆弾が落ちて数万人の一瞬にして死にました」というフレーズよりも 原子爆弾 – Wikipedia にあるように、重さが何キロで緯度経度がここで、広島県産業奨励館の上で爆発して、直接の死者が何万人で、間接的に被ばくした人が何万人で…というような「殺傷力」という形で書くとディテールが埋まってリアリティが出て来る。と同時に、ディテールとしての情報が多いが故に、読み手が「何かを選択する」という余裕が出て来るという影響がある。なので、この手の「情報過多」なところは、当時のリアルを知るために必要だったりする。そのあたりのリアリティが今回の映画にも必要なのかどうかは分からない。

今はよくわからないが、当時(35年ほど前)の広島の中高生は、同和教育と原爆教育がしっかり行われている。同和教育は、数年後位に日教組がらみで止めることになった覚えがあるが、さだかではない。何故、同和/部落と原爆の差別教育が並列で行われるのかという、これには意味がある。私の場合、実際の部落を知ったのは大宮の小学校の頃なのだけど、いわゆる本人に依存しない「差別」は、同和による差別も被爆による差別も同じ感情からでてきている。ちなみに、福島の差別も同じだったりする。私がまだ、中学生だった頃「結婚ができないから被爆手帳を持たない」という人は結構いた。「夕凪の街」に出て来るけど、親が被爆して二世代目でも結構、避けていたりする現象だった。

そのあたりの話は、「この世界の~」ではあまり出てこない。いや、最後に強烈な形で出て来る。広島で母親を蛆虫で喰われている子いて、子のない主人公が、右手を失ったままで家族ぐるみでその子を受け入れるシーンがラストになる。

まあ、広島で育つと、そのあたりは一生離れられないのかもしれません。良い意味で。

カテゴリー: 雑談 | 漫画「この世界の片隅に」に寄せて はコメントを受け付けていません

LattePanda に windows 10 Anniversary edition を入れるまで

Orange Pi Zero を弄っているうちに、LattePanda という組み込みボードを知りました。半年前に、Kickstarter に出ていて Windows が動く組み込みボードとして発表されていたのですが、Raspberry Pi 3 でもいいかなと思って買わずにいたものです。

が、大統領選があって、Connect(); 2016 を眺めているうちに、やっぱり欲しくなって勢いで買ってしまいました。Kickstarter のでは Windows 10 Home が pre-install されているのですが、 LattePanda 2G/32GB -The Most Powerful Win10 Dev Board – DFRobot で、Windows が入ってないバージョンが若干安く手に入るのでこれにしました。手元に、MSDN 絡みで Windows 10 Pro があるので、それを入れてリモートデスクトップにするからという算段です。

ちなみに Amazon でも Lattepanda で検索すると売っています。若干高い感じがするけど、大統領選後に円安になってしまったので、DFRobot で直で購入するのと差が縮まっています。

ちなみに DFRobot には、↓なワイヤレスキーボードがあって一緒に購入しました。こっちのほうは後で。

Windows 10 Home を再インストールする

買った LattePanda には Windows が入っていないので、まずは OS を入れます。Docs | LattePanda に手順が書いてあります。手元のものは、メモリが 2GB のものなので x86 version for 2G/32GB のほうをダウンロードして USB メモリに書き込みます。CPU は Intel Cherry Trail Z8300 Quad Core 1.8GHz で、2GB バージョンも 4GB バージョンも変わりません。なので、2GB バージョンでも x64 にしておきたいところなのですが、書き込みのイメージが x86 のみになっています。試しに x64 のほうをダウンロードして書き込もうとしたけどブートしなかったので、素直に x86 で動作させています。

  • USB メモリを FAT32 フォーマットして(大抵はこれでフォーマットされている)、名前を WINPE にしておく。
  • ダウンロードした zip ファイルを解凍して、USB メモリに書き込む(普通にコピーでよいです)。
  • USB メモリを LattePanda に差して電源を入れる。電源は 2A のものを使います。

https://pbs.twimg.com/media/Cxe6CvyVIAAJ_b9.jpg

起動できるようなると、こんな風に HDMI でモニタに出すことができます。この状態でも十分使えるのですが、リモートデスクトップが使えないので、Pro にバージョンアップをします。Home のままで使う場合は、Setting up a VNC server on the LattePanda using TightVNC を入れておくとよいでしょう。

まあ、察するところ、Windows 10 Home のライセンスはダウンロード版でも付与されている感じなんですよね。このあたりは問わないことにしておきます。

Windows 10 Pro にアップグレードする

Home から Pro へのアップグレードは、「ライセンスの変更」でプロダクトキーを Pro のものに切り替えるだけです。

image

LattePanda は、もとから Arduino IDE が入っているのですが、アップグレード時に消されてしまいます。これは後からインストールしなおせば ok です。組み込みの GPIO へは firmata で繋げるので COM3 で通信することになります。確か、特にドライバーを入れなくても動作したハズです。

もしドライバーが足りない場合は、 LattePandaTeam/LattePanda-Win10-Software にあるので、適宜インストールします。

Windows 10 Anniversary にアップグレードする

あれこれと UWP アプリで操作したいので、Win 10 Anniversary にバージョンアップします。

CPUが Atom なので時間が掛かりますが、無事アップデートができます。

この状態で、せっかくなので、.net core 1.1 をダウンロードしてインストール。dotnet コマンドで asp.net mvc アプリを使って動かすことができます。

ちなみに、ストレージは 32GB しかないので、Visual Studio 2015 を入れるのは諦めて Visual Studio Code だけにしています。ただし、micro SD のスロットがあるので、差しっぱなしにして動かせるようにしても ok です。

CPU 的には4コアになるので、こんな感じですね。メモリがぎりぎりですが、まあ、GPIO を扱う程度ならこれで十分です。画像廻りはどうなんでしょうね。まだ調べていません。

 

その次はどうするのか?

mini PC に比べると若干安い LattePanda ですが、Raspberry Pi に比べると倍ぐらいの値段になります。何かのサーバーにするならば、Linux + Raspberry Pi の組み合わせで十分なので、LattePanda としては Windows + GPIO で使わないとメリットが見出せませんね。ボード自体に Arduino が乗っかっている感じなので、C# から Firmata 経由で手軽にアクセスできる環境を作っておくと良いかもしれません。Windows IoT Core が Windows 10 のサブセットなのに対して、LattePanda はフルの Windows が動くので、WPF で作るとか、コマンドラインで実験するとかが楽にできます。ちょっと、このあたりは後で考察していこうかなと。

LIVA BAT-MINI ってのもある

実は、GPIO が使えて Windows 10 が動く組み込みボード…というかPC & GPIO の組み合わせには LIVA BAT-MINI http://liva.links.co.jp/ ってのがある。Amazon で買う ECS BAT-MINI ベアボーン GPIO搭載 ファンレス完全無音設計の組み込み向けパソコン基板 BAT-MINI2G-32G-GPIO こともできるので、結構手軽です。

Slide Image

スペック的には LattePanda とほぼ同じ。OS が入っているかどうか分からなかったのと、GPIO 廻りをどう触るのか書いてなかったので避けたのだけど、似た感じで Firmata で通すのかなと思ったりします。LattePanda を弄り倒したら、ちょっと借りてみた機種だったりします。というか貸してくれ…ってのを1か月後にでも。

カテゴリー: 組み込みボード | LattePanda に windows 10 Anniversary edition を入れるまで はコメントを受け付けていません

Orange Pi Zero に Ubuntu を入れよう

Raspberry Pi の互換機である Orange Pi Zero を買いました。写真では、左側が Orange Pi Zero で、右が Orange Pi One です。Orange Pi Zero は Wi-Fi のアンテナがついているのですが、HDMI のような手軽なモニタ出力がありません(pinがついているところにビデオ出力があるので、これで表示ができます)。Orange Pi One のほうは、Wi-Fi はついていませんが、RPi 互換のピンや HDMI があります。

https://pbs.twimg.com/media/CxOc1irVIAIBzXI.jpg

まあ、用途に合わせて、どちらかを使えばよいかと思います。

Allwinner H2+搭載のOrange Pi Zeroが来た! | OSAKANA TAROのメモ帳
http://blog.osakana.net/archives/7555

を参考にして現在は armbian を入れています。現時点で、公式の orangepi.org を見ると、Android のほうはまともにダウンロードできるのですが、Linux 系がまともにダウンロードできません。Google Drive のほうのリンクが切れていたり間違ったりしています。百度からダウンロードするのもアレなので、先のブログにもあるように、armbian のほうを使ってみます。

armbian をインストール

https://www.armbian.com/orange-pi-zero/ から、Xenial server(Ubuntu系)をダウンロードして、micro SD に書き込んで起動させます。

https://pbs.twimg.com/media/CxOvX9uVIAAU4Yt.jpg:large

Orange Pi Zero ではモニタがないので、有線LANをつなげた状態で起動したあとで、DHCP で取得した IP アドレスを探っていきます。SSH のデーモンが既に動いているので、tera tarm 等でログイン(root/1234)して設定をします。

ひとまず、apt-get update したあとに、apt-get avahi-daemon して名前でアクセスできるようにしておきます。reboot すると、orangepizero.local で接続できるようになります。

mono をインストール

なにはなくとも、mono をインストールします。apt-get install mono-complete して、暫く待っていればインストールが済む…はずなのですが、途中で止まります。

https://pbs.twimg.com/media/CxO7rorUoAAEOB5.jpg:large

どうやら、Orange Pi Zero が熱暴走して止まってしまうんですよね。CPU の H2+ が熱に弱いのか、mono をインストールするときにフルで動かしてまうと熱暴走してしまいます。勘では 50度位が限界みたいですね。

ヒートシンクを付けるのが正当な手段なのですが、面倒なので、CPU に息を吹きかけて冷まします(苦笑)。普段使いでは、こんなに酷使することはないでしょうから、まあ、一時しのぎということで。

無線 LAN の設定

Orange Pi Zero ではオンボードで Wi-Fi が付いているので、これを有効活用します。

iwconfig wlan0 essid <SSID> key s:<パスワード>
dhclient wlan0

真面目に設定してもよいのですが、どうせ個人で使うだけなので、/etc/rc.local に直書きしてしています。iwconfig コマンドで無線ルータの SSID とパスワードを設定して、dhclient で DHCP から IP を自動取得しています。

ifconfig の結果

image

iwconfig の結果

image

なんか、微妙に遅い気がするのですが…まあ、ひとまず設定はできたのでokとしましょう。

追記 2017/01/18

https://www.armbian.com/orange-pi-zero/ に Wi-Fi 設定の記述があって、

nmtui-connect YOUR_ROUTER_SSID

で簡単に接続ができます。

 

実は、Orange Pi Zero の有線 LAN は、電源供給ができる LAN(PoE)なんですよね。なので、micro USB から電源供給させるのではなくて、ネットワークのケーブル1本で、ネットワークと電源の両方が使えます。試してみたいけど、PoE のハブって高いので、まあ、機会があればということで。

後はどうするか

  • モニタに出力できるようになること
  • Android 5.1 を動かしてみること
  • ピンヘッダの半田付け

ですね。それと、乾電池で動くことを確認したあとに、Arduino と組み合わせて、Raspberry Pi の代わりに使ってラジコン戦車を作ろうかなと。

何処で買えるのか?

本家の http://www.orangepi.org/ の左上にある「point me to by the boards」をクリックすると aliexpress.com に繋がります。時々、製品が間違っているので(たぶん、リンクが間違っている)ので、名前を確認して購入しましょう。トランプ効果で円安ぎみなので、110円/ドルで見込んだほうがいいですね。

Orange Pi Zero が $6.99、Orange Pi One が $9.99 です。送料が$3 ぐらい掛かります。Aliexpress は大抵が送料が無料(中国の郵送)なので、たぶん、Orange Pi 本家(これも中国だけど)から送っているのではないかなと。2週間ぐらいかかることになっていますが、中国から受付→発送のメールが来てから1週間位で届きます。地理的に近いですからね。

参考

すzのAVR研究: Orange pi zero
http://suz-avr.sblo.jp/article/177526024.html

 

カテゴリー: RaspberryPi | Orange Pi Zero に Ubuntu を入れよう はコメントを受け付けていません

PSPと詰将棋TDD(覚醒プログラム)の組み合わせの薦め

詰将棋のようにTDDでC#を学ぶ実験 | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/8347

で、プログラムを練習する訳だが、実際の詰将棋のように「この問題は3分で解けると5級」みたいなのがあるといいと思う…というか、そういう作りをしている。

試験じゃないので(仕事ベースでやるので)、ググろうが問題文からコピペしようが構わない。実際、チェック上仕方がなかったので、問題のテストコードに解答が書いてあったりする。だいたい、1問(1つのテストメソッド)に対して、15分以内にコードが通るようになれば十分だろう。だいたい、人の集中力は10~15分程度なので、それを超えると効率がガタンと落ちる。訓練で、この時間は2時間ぐらいまで伸ばせるけど(時間制限のある不具合の修正のときに使う)疲れるので、お勧めはしない。

パーソナルソフトウェアプロセスを使う

パーソナルソフトウェアプロセス入門 / Watts S.Humphrey  著 PSPネットワーク  訳 | 共立出版
http://www.kyoritsu-pub.co.jp/bookdetail/9784320120136

パーソナルソフトウェアプロセス技法の補助教材
http://www.kyoritsu-pub.co.jp/service/psp/dse_index.html

絶版になってしまったが、この手の時間を気にしたプログラミングの手法として「パーソナルソフトウェアプロセス」がある。もともと、情報工学の授業で使われていたもので、講義用のスライドや演習用のシートが用意されている。

これが、実際の仕事としてのプログラミングに応用できるかというと、経験上、そうでもありそうでもない、という状態と言える。検索すると、いくつか仕事に利用する例があるが、まあ、プログラマな仕事をしているときには使わない。何故か?端的に「疲れる」からだ。なので、社内研修などで PSP(パーソナル・ソフトウェア・プロセス)を使うのは時間制約内で効率的なんだけど、実際の仕事の場合には疲れすぎて役に立たなかったりする。

ただし、自分のプログラミング速度を測定する(私は「巡航速度」と呼んでいる)ためにはよい。

PSP の利用法に2種類あって、「最大戦速」と「巡航速度」がある。

「最大戦速」は、まさしく船のボイラーが悲鳴を上げるぐらい速度を上げるので、人間の体力的にもキツイ速度だ。できて、3時間から半日ぐらいが限界だろう。いわゆる、「この不具合を明日の朝のリリース前までに直してくれ」と言われたときのスピードだと思っても良い。これをやると、息も浅くなるし、モノも食べず飲み物も飲まない(口に何か入れるとリラックスしてしまって、遅くなるからだ)。なので、あまりやりたくない。

「巡航速度」のほうは、いわゆる毎日続けられる時間になる。継続できるプログラミング体制というのは、XP で言うところの 40時間/週 勤務であったり、8時間/日のうちに Google の 20% ルールが入っていたりする勤務体系になる。匍匐前進とかはやらない。その位の、ペースが毎日続けらる(プロジェクトが続いている間だから、2,3か月は大丈夫とか)パターンになる。アジャイル開発のスクラムよりも遅いペースでよい。

そういう巡航速度で過ごせる、プログラミング速度を自分で知っておくのは必要で、問題を解くときに、

  • 問題に対し予想時間を決める
  • 開始時刻を記録する
  • 問題を解く 
  • 終了時刻を記録する
  • 予想と実績の時間を比較する
  • 次回の予想時間を調節する

という具合に、予想を常に調節する(ドライビングする)ことになる。そうやって、何度も繰り返していくと、設計などを見たときに直感的に作業時間が見積もれるという「勘」が養われる。「勘」というとまるでマジックのような気がするか、モノづくりをするときに「勘」は必要だ。大工にも勘所があるし、税理士にだって不正のあるところが「勘」でわかる。そういう、プロフェッショナル「勘」を養うために、こういう問題を何度も疑似的に解いてみるというのが目的である。

ちなみに Humphrey 氏は、(悪名高い)CMMI の提唱者らしいので、その先のことは沿わなくてよい。CMMI とか ITSS は測定のための測定(端的にいえば、外部から「資格」を与えるものなので、自己言及がない)ので、測定の「道具」として使うにとどめるとよい。なので、プログラマな現場としては、自己鍛錬のひとつとして PSP を使うとよいだろう。

[amazonjs asin=”4320120132″ locale=”JP” title=”パーソナルソフトウェアプロセス入門”]

カテゴリー: TDD | PSPと詰将棋TDD(覚醒プログラム)の組み合わせの薦め はコメントを受け付けていません

詰将棋のようにTDDでプログラムを学ぶ(PHP編)

詰将棋のようにTDDでC#を学ぶ実験 | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/8347

の派生版として、PHP 版を作ってみました。

moonmile/TestPro-PHP: TDD で学ぶ PHP
https://github.com/moonmile/TestPro-PHP

真面目に PHPUnit を使うのは始めてなので(以前、CakePHP を使ったときは、クライアントの C# でテストしていたので)、もうちょっと効率のよい書き方があるのかもしれませんが、ひとまず tests フォルダを作って、テストクラス毎にファイルを分けています。テスト対象となるクラス名を「Target」で統一したかったので(いちいち変えるのが面倒だったとも云う)、ファイル名だけが「target001.php」のように変わっています。

文法だけだと、C# も PHP もやれることは同じなので、ちょうど比較になって良いかもしれません。Target となるクラスは、できるだけ既存の PHP クラスのスタイルに近づけたほうがよいかなと感じています。

設定

Windows に xampp を入れて php が動く環境を作っています。

XAMPP Installers and Downloads for Apache Friends
https://www.apachefriends.org/jp/index.html

xampp の phpunit のバージョンが古いので、以下の場所で、phpunit.phar をダウンロードして c:/xampp/php/phpunit.phar にコピーします。

PHPUnit ? The PHP Testing Framework
https://phpunit.de/

xampp の /xampp/php/phpunit.bat を

"%PHPBIN%" "C:xamppphpphpunit.phar" %*

のように書き替えます。コマンドラインでパスを追加して、src/01/tests フォルダ内で

phpunit  test001.php

のように実行すれば ok です。

テストコードのメソッド名が日本語なので、文字化けしてしまいます。UTF-8 が正しく表示されるように、

chcp 65001

で文字コードを変更してください。

image

こんな風に、Visual Studio Code 内からも表示できるようになります。

PHP Programming with Visual Studio Code
https://code.visualstudio.com/Docs/languages/php

vscode の PHP のための拡張設定は、まだ試行錯誤中なので後で。

 

 

先行きは

それなりに、配列とか連想配列の使い方を覚えられそうなので、もう少し文法を網羅できるようにテストコードを追加していくのと、C#のファイルアクセスと同じように、PHP からローカルファイルのアクセスをするところ、HTTPプロトコルのアクセス(引数の取り込みとか)、データベースアクセスを加えると、実用的になるかなと。

あと、Python 版も作る予定です。

カテゴリー: PHP, TDD | 詰将棋のようにTDDでプログラムを学ぶ(PHP編) はコメントを受け付けていません