再び、札幌へと Microsoft MVP 受賞

年末に札幌に向かおうと思ったところ、大雪で欠航してしまったので、Retry to 千歳です(「千歳」は動詞です)。

13:50 の便に切り替えたのですが、さらにピンポイントにその便が今度は機体チェックで欠航になってしまったので、Retry to 千歳, again ということで、16:00 の便に切り替え。20:00 頃に札幌に実家に到着。

雪が大量にあります。

無事 Microsoft MVP を受賞しました

1/2 に受賞の連絡を待つのは、年末年始の心臓に悪いので、10月応募をお勧めしないのですが(苦笑) Tomoaki Masuda (増田 智明) にて、Visual Studio and Development Technologies と Windows Development で受賞しています。これで、今年分の MSDN は確保できて一安心です。これも皆様のおかげで、あれこれと発表をしたり本を書いたりブログをちまちま続けたり Qiita に殴り書きしたりしたおかげでもあります by 「ばくおん!!」第9巻(最終巻)

ところで「ばくおん!!」ってなぜ女子高生が短足ぎみなんですかね。意図的になのか、日本人の現実に即しているというか(いや、むしろ最近の子は長い傾向にあるから、昭和な比率なのでは?とか)、まあ、面白くて参考になる漫画です。「のうりん」と合わせてお読みになることをお薦めします。

MS MVP のダブル受賞があるのだから、フィギュアスケートのようにトリプルがあったりしないのか?と思ったりするのですが、Excel 方眼紙あたりを極めれば Office Servers and Services とか合わせ技になったりしませんかね。Office 365 あたりを重ねるとか。

それはさておき。

Xamarin の無償化に伴いユーザー数もぐんと増えた感じがします。Microsoft が Windows Mobile を諦めた(っぽい)ので、今後は Xamarin を中心に Android と iOS に軸足を移していくことでしょう。社内的にも Mac を使っている方も多いようなので、Surface よりも Mac のサポートが早くなったり、Google の .NET 参入もあり、Android Things + Xamarin の組み合わせ Microsoft から Google 業界へもあるかもしれません。また、Raspberry Pi の ARM がソフトバンク傘下になったことと、米国の内政もあり、日本の諸々なオリンピック政策もあるでしょう。中国の動向や、EU の揺れ具合もあります。そういう、多少浮ついた世相の中では、雌伏し基礎体力をつけてて最新情報とやらに右往左往する「石々混淆」の脇を一気にすり抜けることが可能なチャンスでもあります。

そんな訳で、物理屋さん発なプログラマとしては地味な地固めとしての「プロジェクトマネジメント」に踏み込んでいきますよ、ということで TOC/CCPM を含めていきます(このブログ、もともとはバグトラッカーのツールを作ろうとか、諸々の就職活動用のブログだったんですよね)。

カテゴリー: 雑談 | 再び、札幌へと Microsoft MVP 受賞 はコメントを受け付けていません

忙しいときほど重要なのはチキンライスでもプロジェクトマネジメントでも段取り八分で

さらに第4弾な料理シリーズ。夕飯は近くのスーパーでコロッケを買ってきて済ませてしまったので、お昼のチキンライスを例に解説をします。

段取り八分

段取り八分ってのは確か建築業界の用語で、いろいろな業者が入ってくるときちんと段取りをしておかないと待ちが入ったりして全体が遅くなる、という意味だったハズなんですが、巷の「段取り八分」の解説サイトは間違ったものが多いですね…。現場監督の管理の基本「段取り八分」って何のこと? | 負けるな新人!目指せ所長!0から始める建築現場監督への道 あたりとか、建築系のブログを見ると正しいものが書いてあります。他のサイトは大抵ダメです。

建築の場合、材料と人を集めて順番にこなす、というのが重要になり(途中で「雨」がまじるので、プロジェクトバッファは必須なのですが、これは別の機会に)、それ以下に工程を短くすることができません(手抜き工事は別)。これがクリティカルチェーンです。なので、あらかじめ工程表を作るときに、どの順番で何をやるのかを決めておく、そしてその通りに仕事をこなす、というのが建築界の職人的な技法でもあります。

IT業界の開発案件の場合は、タスク内のトラブルの頻度とリカバリまでの時間の幅/分散が広いので、この「段取り八分」だけではうまくいかないのですが、サーバー構築とかデータ移行手順、多数のPCのセッティング、ネットワーク敷設、外部ルーター等のセッティングなどの計画は、この「段取り八分」の工程表が役に立ちます。あと手順書ですね。まあ、そのあたりをとりまとめて「経験」と呼んでいたりします。

チキンライスを作る

料理の場合も同じで、段取り(レシピ)が頭に入っているかどうかが重要になります。特に、チキンライスのような強火で扱うものは一瞬ですからね。最初の仕込みが肝心です。鶏のひき肉は、コープの「ぱらぱらミンチ」です。少しだけ使うようなときに便利です。

冷蔵庫の残り物で作るので、材料は適宜集めます。

image

玉ねぎを1/4だけみじん切りにして、ご飯を3膳分温めます。あとは、胡椒と塩。

image

材料を揃えたら一気に料理します。料理時間は5分程度です。中華鍋に油をひいて、白い煙がでるぐらいまで強火で温めます。

image

玉ねぎを入れて一気に炒めて、少し焦げた頃に、鶏のひき肉を入れます。

image

冷凍トウモロコシを入れて炒めた後に、ご飯を投入します。

image

ご飯をヘラで切るようにしてバラバラにしながら、ケチャップを色づくまでがっと入れます。大体、ケチャップの色が広がったら、塩をひとつまみと胡椒を入れて完成です。

image

ここまで終始、強火で炒めるので本当は写真を撮っている暇はありません。がっと、皿に移して出来上がりです。

image

中華鍋は、時々てんぷらをすると油の馴染みがよくなるのですが…、ご飯の焦げはこびりついてしまうので、こんな風に煮立てて落とします。本当は、おこげスープにするといいんですけどね。子供に不評なので捨ててしまいますが。

image

こんな風に、中華鍋で5分間強火で料理している間だけが「料理」ではなくて、最初に材料を揃えたり玉ねぎをみじん切りするところも「料理」のうちで、その部分が「段取り八分」という例になるんですよ。大抵の料理番組は、この段取り八分の部分が省かれてしまっています。残念。昔、日曜の5時頃(サザエさんの前あたり)にやっていた料理番組が調理前の段取りの部分からやっていて参考になりました(魚の骨とりとか、みじん切りの仕方とかからスタートするので)。

カテゴリー: プロジェクト管理 | 1件のコメント

失敗をリカバリするのはミートスパゲティもプロジェクトマネジメントも同じ

しつこいけど第3弾な料理シリーズ。単に、子供向けの夕食を作るのにモチベーションが上がらないので、あれこれやっているだけです。一人だったら外食とか弁当にしちゃうんですけどね。

失敗してもリカバリする

基本、料理は段取りと手順(料理本に書いてある手順)に沿って従えば、大抵「食べられる」ものができあがります。時には炭になってしまうこともありますが、まあ、それは完全に失敗なパターンですよね。でも、ちょっとした手順を抜かしたり、前後させてしまったような間違いの場合は、食材と時間がもったいないので「捨てる」ことはあまりないでしょう(客に出すものだったらそうかもしれないけど、家で食べるものだし)。同じようなことは、プロジェクトマネジメントにも言えて、ちょっと失敗したからといってプロジェクト全体を失敗(プロジェクトを停止するということ)させることはありません。なんとか完遂しようとするでしょう(間違った方向に突き進んでしまう場合のデスマーチ・プロジェクトは別ものです。あれは失敗し続ける話なので)。なので、ちょっと失敗をリカバリするのがプロジェクトマネジメントの極意であったりします。つまりは「失敗する」ことを前提として、失敗したら「リカバリ」するを繰り返します。

このためには、

  • 失敗したことを認識/確認する
  • リカバリ手段を講じる

の2手が必須です。たまに、そのまま放置するというリカバリ手段もありますが、これは「そのまま放置する」というリカバリをすることになります。単に流してしまうことではありません。

まあ、そんなところも含めてミートスパゲティを作ります。

ミートスパゲティを作る

特に失敗したい訳ではないのですが、まあ、これぐらいの材料で作ります。パスタはディ・チェコを使っています。

image

ビールを呑み呑み。赤ワインはトマトを煮込むときに入れます。

image

ミートパスタの玉ねぎはみじん切りにします。こうやってあらかじめ櫛型に切っておくと後が楽です。

image

玉ねぎのみじん切りと、にんにくのスライスです。オリーブオイルで揚げた感じが好きなので、こんな風に薄切りにしておきます。にんにくは冷凍してあったものです。

image

油を温めてからニンニクを入れるとはねるので、常温のオリーブオイル大匙1より多めとニンニクを常温でフライパンにいれます。ここから火をつけます。フライパンはトマトを入れるので深めのものを使います。焦げ付きやすいので、フッ素加工のものを使うといいですよ。

image

玉ねぎを炒めます。今回は中火ぐらいでちまちまと炒めます。ここで粒が残るとミートにしたときに美味しくないので、10分位、ビールを飲みながらちびちび炒めます。

image

で、本来はひき肉入れるところなのですが、トマトの缶詰を入れてしまいました。トマトパスタならばこれでいいんですけどね。トマトソースだけにする場合は、このあと唐辛子を入れるとおいしいです。

image

ひき肉を入れたときに、順番が逆だったことに気付きました。うーむ、どうしたものかと思いつつそのまま混ぜます。

image

ひき肉を炒めていないので、えらいぺちゃっとなったミートソースになっていますが、仕方がないですね。既に失敗作になっていますが、食べれるようにしていきます。

ひき肉に火を通すために、少し強火にしてひき肉に十分に火が通るようにしておきます。塩ひとつまみ、胡椒を振ります。赤ワインを入れるタイミングを逃しましたが、まあそのままで。味見をして、少し塩気を多くしました。どうやらひき肉を炒めなかったのでうま味が足りないんですよね。でも食べれないことはないです。

image

大鍋にお湯を沸かします。たくさんの湯を使うのがいいのですが、時間が掛かるので半分ぐらいにしておきます。実は、パスタの場合は、湯の温度が下がらないからそんなに湯量は多くなくていいのです。生そばや生うどん、ラーメンの場合は湯温が下がらないように多めの湯にします。

パスタを入れる前に、大匙1の塩を入れます。

image

隣でミートを弱火で煮込みながらパスタをゆでます。あれば、ローリエを一枚入れます。無くても大丈夫です。ゆであがったら、ざるに移して、バター大さじ1/2を入れて、がっと混ぜます。こうするとパスタがくっつきません。ゆで汁を少し加えるのもいいでしょう。

パスタの量は3人弱の 250g 位になっています。

image

大皿にパスタを乗せて、ミートを半分位のせてできあがりです。残りのミートは冷凍しておいて別のときに使います。

image

ひき肉を炒めていないので、ミートのそぼろ感がないのがアレですが(苦笑)、まあ味のほうは大丈夫です。子供向きなミートスパゲティですね。大人の場合は、唐辛子を入れるとか胡椒を多めに入れるとかすると違った味になります。

カテゴリー: プロジェクト管理 | 失敗をリカバリするのはミートスパゲティもプロジェクトマネジメントも同じ はコメントを受け付けていません

PERT図とカレー調理の関係

チンゲン菜で作るおいしい餃子とプロジェクトマネジメントの関係 | Moonmile Solutions Blog の続きで、プロジェクトマネジメントと料理の関係です。いや、単純におらのカレーレシピですけどね。ちまちま、Windows 10 IoT Core Advent Calendar 2016 – Qiita を埋めつつ、中小規模のプロジェクトマネジメント案を練りつつということです。

タスクを並立させる

餃子料理の場合は、ひとりタスクになりますが、カレーの場合はいくつかのタスクが平行して動きます。複数名でプロジェクトを動かせば途中のマイルストーンがネックになり、ひとりでプロジェクトを動かしてもお客が絡めば応答時間によってマルチタスク的に動かせるという話です。ラピッドプロセスやJIT的に応答を返すのではなく、むしろ、その時間差を利用するという方法ですよね。どれだけ急いでも必ず時間が掛かるような薬剤の検査プロセスのようなものを想定してください。時間が掛かる部分は、止まっている必要はなくて、何か別のタスクを重ねることで全体の時間=クリティカルチェーンが短くなります。これは PERT 図とガントチャートを併用すること判明できます。

カレーを作る

今日は鶏肉でカレーを作ります。あらかじめ切ってあるのもいいけど、鳥皮が欲しいのでもも肉を買います。これでだいたい6人分です。カレーのルーが12人分なのと、鍋の大きさの関係を考慮すればokです。

image

ピーラーで向きます。便利ですね。

image

ジャガイモをざっくり切って、ニンジンは乱切りにして水につけておきます。ほんとうはジャガイモだけでいいんだけど、面倒なので人参も一緒に。

image

玉ねぎは、ざくざくと薄切りでokです。ホワイトシチューの場合は色を付けないために薄く切ったり、みじん切りにしますが、カレーだし、これで十分です。

image

生姜を微塵切りにします。皮は大匙でこそげるように向くと楽です。

image

こんな感じにみじん切りにして、

image

鍋に突っ込みます。まだ火をつけていない状態で、玉ねぎ、しょうがを入れて、オリーブオイルを大匙1か2ぐらい。

image

鶏肉をひと口大に切ります。野菜 → 肉類の順で切ると、包丁やまな板を洗う手間が減ります。ムダな手間を省くための「段取り」が大切です。

image

塩をひとつまみ、胡椒、酒を大さじ1入れて、小麦粉を大さじ1半位入れます。小麦を肉のまわりにつけるとなめらかになって美味しくなります。これを、パックの上で混ぜます。パックはそのまま捨てるから洗い物がひとつ減りますよね。

image

肉のほうは、塩や酒がしみこむまで「しばらく置く」ので、その時間を利用して玉ねぎを炒めます。ここがちょうどマルチタスクになっているところです。玉ねぎは強火で炒めてもokです。弱火のほうが焦げなくてすむのですが、時間がかかるので、強火で。カレーなので多少焦げても大丈夫です。

image

だいたい水分が飛んで玉ねぎに色がついてきたら、味がしみこんだ(だろう)鶏肉を投入。

image

ここもひたすら強火で大丈夫です。鍋に小麦粉が焦げ付きますが気にせず炒めていきます。へばりついた小麦は水を入れたときにきれいに落ちます。肉のまわりを少し焼いておくことで、水分が中に入り過ぎずにすみます。牛肉だったりすると肉汁が水にでなくなります。

image

人参とじゃかいもの水を切って鍋に投入。軽く混ぜます。

image

水を具が浸るまで入れます。これだと600ccぐらい。ルーが多いと堅めになるし、少ないと緩めのカレーになります。

image

別途、圧力釜で用意していたご飯も同時に炊き出します。カレーは15分煮込み。圧力釜のごはんは強火で沸騰させた後、5分だけ弱火で。

image

15分経って、蓋をあけて

image

6人分のルーを入れて、きちんとかき混ぜて、ひと煮立ちさせます。

image

うちにはシャトルシェフがあって、魔法瓶のように鍋ごと温めることができます。普通に煮込むのと同じ効果が得られ、これで15分置きます。トータル30分煮込むのですが、最後の15分は、火の番をしなくてよいので、皿を並べるとかご飯をよそうとか別のことができます。

image

15分経ってできあがりです。かき混ぜたりしないので煮崩れしないのが特徴です。大根の煮つけとか、崩れそうなものはこれを使うとうまくいきます。ガス代も浮くしね。

image

炊き上がったご飯にカレーを掛けてできあがり。

image

パラレルで料理を作る

この煮込んでいる間とか、味がしみこむ間を利用するのが、20分で2品おかず (ベターホームの料理の先生おすすめレシピ集) です。絶版?扱いになっていますが、この本には2品を同時に作る(同時にできあがる)レシピが載っています。

これはプロジェクト運営にも活用できるテクニックで、ひとりプロジェクトであってもひとつのタスクをシーケンシャルにこなすのではなく、何かの待ち時間をうまく利用してタスクを平行動作させるのです。複数名のプロジェクトでも、できるだけシーケンシャルにならないようにタスクを配置します。設計においても注意が必要で、実装時にマルチタスクで作業ができるように設計するという技があります。段取りとパラレルで料理を作ることを覚えると、同じことを実際のプロジェクトでもできるようになるので、試してみてください。

カテゴリー: プロジェクト管理 | PERT図とカレー調理の関係 はコメントを受け付けていません

チンゲン菜で作るおいしい餃子とプロジェクトマネジメントの関係

数十年振りの大雪で、千歳行きが欠航になってしまったよ~。そんな訳で、家に帰って餃子を作った記録です。ちなみに、道民としては千歳空港が大雪になるのだから、今年は特別どう仕方がないよね、な気分ですね。あそこは、雪が少ないので空港になっているので、例年、札幌が雪で埋まっていても千歳空港は大丈夫なのです。ちなみに、道民なので当然のごとくAIRDO を使いますよ。

さて、以前(と言っても7年前ですね)、PMBOKとCCPMのおいしい関係(仮) | Moonmile Solutions Blog というのを .NET ラボ勉強会で発表しました。CCPM 系のプロジェクトマネジメントも個人的には10年以上やっていますが、実際のプロジェクトでは試したことはありません(部分的にはあるけど)。その第一の理由に、WBS/PERT図/ガントチャート を同時に操れるツールが無く、また10年前にはその技術的な手段がなかったことがあげられます。去年の正月にひな形として、XAML + Xamarin + タブレットの組み合わせ少し作ってみたのですが、もう一度挑戦してみようとしているところです。まあ、ツールは「かなづち」でしかないので、中身のほうが本質的なんですけどね。本質的なほうは、年明けから書籍として書き始める予定です。

ソフトウェア開発と料理は似ている

2016-12-22 – 散財日記2008 ここに、ちょっとだけ言及してあったので賛同しておきましょう。プログラマやプロジェクトマネージャは「料理」をしてみると良いです。レシピ≒仕様的なものもあり、2,3品目を同時に作る≒タスクの同時並行なところも一緒です。ところどころで臨機応変なところとか(フライパンの状態をみたり、焼き加減をポーリングしたり)、下ごしらえをして準備をしておくところ(下味とか、中華料理の場合は材料を切っておくのが重要とか)も同じです。まあ、PMBOK に従って料理を作ってみるのもありでしょう。

まあ、学ぶところは多いのでプログラマ、プロジェクトマネージャな方は料理をやってみるとよいです。料理本のレシピの書き方とか(クックパッドでもいいけど)が参考になりますよ。

巨大チンゲン菜で餃子を作ろう

おらの畑で採れたチンゲン菜を使いましょう。買うときは、ひとたま全部使うとよいです。年末は、葉ものが高くなっているので、まあ、安くなったら作るということで。

2つ使おうと思って採ってきたのですが、さすがに多いのでひとつだけ使いました。重さは、まあ大体で大丈夫。白菜とかキャベツでも同じですが、茹でると小さくなるので。

鍋に入れて、1分間だけ茹でます。

ざるに開けて、荒熱を取ります。結構縮みましたね。

みじん切りに刻んでいきます。面倒なので、本当のみじん切りじゃなくて細切れぐらいになってますが、これで大丈夫です。

ほら、こんなに小さくなりました。

豚と牛のあいびき200グラムと混ぜます。これで40個分ができます。豚だけで作るとちょっと脂っこい感じの餃子になり、牛肉だけだとハンバーグっぽいニクニクしい餃子になります。作るときの好みで分けてください。量は、200~250グラムぐらいで大丈夫。

薬味のために、すりおろしの生姜を入れます。これも、好みで生姜のみじん切りとか、擦った後に汁だけ入れるとか、ニンニクを使うとかでもいいでしょう。肉の臭みが取れます。

ボールに入れて、最初は手で混ぜて後はヘラで混ぜています。手がべたべたになるので、手袋をしたりしますが、面倒なので4,5回だけ手を使ったほうがいいです。その後はヘラで十分。

調味料は、塩をひとつまみ、酒・醤油・ごま油を大匙1、入れています。ごま油を入れるとぐっと中華料理っぽくなるのでおすすめです。胡椒を入れるとちょっと洋風になります。

平たいバレットに移します。そのままスプーンですくってもいいのですが(お店の人はそれで作りますよね)、家だと餡が余っても困るので40等分できるように平たくします。ちなみに、余った分を単に焼いても美味しくないので、清く捨てています。

さて、40個を一人で包みます。ひとりで40個というのはなかなかの苦行なので、ビールを飲み飲みやると効果的です。餃子の皮は、大判のものを使います。ふつうの大きさだと餡が大きくなって包みにくい=時間が掛かる、ので嫌になるので、大判の皮を買ってちょっと少な目に餡を入れるのがコツです。

40個できたのが、この状態です。多少はみでてしまっても、少し口が開いていても大丈夫です。焼いても水餃子にして茹でても、餡が固まるので、見かけは関係なくおいしく食べられます。

ホットプレートに少し油をひいて、40個一気に並べます。油をひくのは少し焦げ目をつけたいのと、底の部分だけ最初に焼いてはがれやすくします。

200度で1,2分焼くと、こんな風に少し焼けた感じになります。こうすると、水を入れてもはがれやすくなるのです。

本当はお湯を入れるのがいいのですが、水でも大丈夫です。40個の餃子で150cc弱入れると、うまく水を吸ってくれます。多いとべたっとした感じになるし、少ないと皮が水分を含んでなくてぱりぱりすぎる感じになります。ここは何回かの試行錯誤が必要ですね。

image

水/湯を入れたら蓋を閉めて、むらし状態にします。餃子の王将と同じ製法です。

何回か開けて確かめてみて、こんな風に中身が透けて、水が程よくなくなったら蓋をあけます。最後の水分は、こうやって外に飛ばすようにします。こうすると、うまく底の部分が焼けます。

ホットプレートで金属のフライ返しはダメなんですが(フッ素加工が取れてしまうので)、まあ、フライ返しを使うのが楽です(このホットプレート自体も10年ものだし)。耐熱プラスチックのフライ返しを使ってもいいですよ。

焼いている底を見せるようにすると、美味く見えるのですが、自分用だし面倒なのでガンガン取り出してしまいます。

たれは、酢と辣油だけで ok です(醤油は入れていません)。S&B の辣油が辛くておいしいです。子供には、たれをつけずにそのままでも美味しい。家なので、七味を入れるとか、ポン酢を使うとか色々できます。

そんな訳で、白飯を温めて、ビールをもう一缶開けて戴きます。日本人だから、餃子には白いご飯が必要ですよね。by 孤独のグルメ

チンゲン菜の餃子レシピは、仕事で一緒した中国の方に教えてもらったものです。キャベツと違って臭くならないし、白菜よりも水分を含んでくれます。水餃子にしても美味しいので、ぜひお試しあれ。

カテゴリー: 雑談 | チンゲン菜で作るおいしい餃子とプロジェクトマネジメントの関係 はコメントを受け付けていません

中華な組み込みボードを買おう&使おう

手に入りやすい組み込みボードと言えば、Raspberry Pi や Arduino が有名ですが、ちょっと高め(とはいえ、PC やスマートフォンを買うよりは安いけど)が難点です。となれば、中国での互換機を買うのもよいですよ、という話です。

中国産だと品質がとか技適がというのもありますが(技適は「広い家」で実験すればいいですよね)、会社に納品と言うの場合は高品質&入手の継続性が求められますが、個人であれこれ実験する場合には中国産の製品でも十分です。というか、実質、深圳や上海から送られてくる製品は日本や欧米の製品を既に上回っていると思います(安いのは人件費廻りか?)。特に、組み込みボードの場合は、入手性を考えて予備を含めて2個以上買うことが多く初回の購入であってもそれなりに安いほうがお財布に優しいでしょう。

久し振りに「表徴の帝国」を読み返したのですが、東洋のパッケージの考え方は西洋のパッケージとは違います。表層にこそ意味を持たせ表層のみでも独立して意味を成すという考え方が日本や中国には共通してあることがわかるでしょう。欧米の Kickstater よりも中国のほうが箱のデザインに気を使っていることがわかります。まあ、中国郵便でガムテで貼ってあるし、部品関係は透明ラップでぐるぐる巻きですけどね。これはだいぶん慣れました。

Aliexpress で電子部品を買うと、だいたいこんな包装です。これは 7インチ液晶2枚です。

ちなみに、AliexpressAlibaba で購入して日本に送ると、ほとんどが中国郵便&無料発送で送られきます。UPS とかも使えますが高いので、中国郵便を使っています。これは日本郵便に引き渡されるので書留になるらしく、20回位買っていますが紛失は一度もありません。何でも安いのではなくて、深圳や上海で作っているものを買うと安いです(日本や欧米から輸入しているものは当然高い)。つまり、中国の工場で部品として作られて欧米に出しているものが安いわけです。そのほかは ebay のほうがいいかもしれません。

深圳、上海、香港は地理的に日本に近いので、中国郵便であっても向こうから Shipping(発送した)のメールが来てから1週間ぐらいで届きます。これが欧米だと船便だと1か月ぐらいかかります(以前、英国から Raspberry Pi 初代を送って貰ったときは、こちらに到着する直前に RS コンポーネントから発売されていましたよ)。そういう点で、部品を買うのに日本は欧米に比べると優位な位置にあります。

はじめて買うときは、いきなりスマートフォンのような1万円強を買うのではなく、中華 Arduino 300円のようなもので試してみましょう。長いと2週間位かかることもあるので、自分が欲しい時期と到着する時期がずれるので、無駄買いしないように気を付けてください。

以下は、手元の組み込みボードの色々を。

LattePanda

http://www.lattepanda.com/ で購入できる Windows 10 が動く組み込みボードです。Search LattePanda- DFRobot で $89 で購入して、Windows 10 Pro へアップグレードしています。Arduino がボードで直結している状態で Firmata で制御します。まあ、そうなると普通に PC + Arduino の組み合わせで良いのでは?とは思うけど、この手の Windows 組み込みボードとしては1万円弱なので安いほうかと。

NanoPi

NanoPi 2 Fire は http://www.nanopi.org/ で購入ができます。Raspberry Pi 互換機で Linux を動かすこともできるし、Android 5.1 が動きます。Android のほうは Google Play が動くもので、ソースコードがからビルドもできます。NanoPi2  Fire で $22.99 です。

Android Things が出てきたので、NanoPi  の役割が…と思わなくもないのですが、積極的に Android のコードに対応しているところをみると、Android Things のほうも独自に対応していくんじゃないかなと思ってます。

Orange Pi

Raspberry Pi 互換機の老舗? Orange Pi です。互換機の Orange Pi PC は Rasbian も動くし Scratch も動きます。Orange Pi PC は Aliexpress だと $15 位で買えます。

Android 4.4 が動くので購入してみたのですが、ちょっと重くて使い物にはなりません。なので、普通に Raspberry Pi 互換機として利用するのがベターかと。

orange pi pc – Orangepi

orange pi zero – Orangepi

Orange Pi Zero は、小型で WiFi 付きなのですが、HDMI がないのでディスプレイに出すのにひと苦労します。TVOUT の出力はあるので、そのあたりは自作するパターンで。

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

Onion Omega

Onion – Invention Platform for IoT は、組み込み Linux のボードで $19.99 です。Onion が中国だったかは覚えていないのですが、Kickstarter でワンセットを買いました。

自前で WiFi を持っているので、Python を入れてサーバーとして使うことができます。

そんな訳で、23日発の羽田発千歳行きが欠航になってしまったので、気晴らしがてらにざっとまとめですよ。

カテゴリー: 組み込みボード | 中華な組み込みボードを買おう&使おう はコメントを受け付けていません

Android Things 上で Xamarin.Android を動かして F# を使う

この記事は、F# Advent Calendar 2016 – Qiita の 17日目です。なんか、曜日を勘違いしていて担当が日曜日だと思っていたんですよね。ほぼ日手帳が月曜日はじまりのカレンダーを使っているものだから、カレンダーの右端は日曜日なのですよね。長年使っていて便利です…という宣伝はさておき、F# の話です。

Android Things が発表された

Android Things が先週 Google から発表されました。

image

もともとあった、Brillo の進化形ということ(私は Brillo 自体をよく知らない)なのですが、前身はさておき、Raspberry Pi 等で Android が動くという環境です。もともと、Android の足回りは Linux な訳ですから、Raspberry Pi のように Linux 互換の OS(Raspbianなど)が動く組み込みボードであれば動く可能性もあったし、いままでも Raspberry Pi 上で Android 4.4 を動かすとか、Orange Pi や NanoPi のような Raspberry Pi 互換機で Android 5.1 が動くというパターンもありました。実は、つい先日  Android 5.1 をソースコードからビルドして NanoPi 2 Fire で動かすまで。 | Moonmile Solutions Blog な形で、Android のソースコードからビルドして NanoPi で Android 5.1 を動かすところまでたどり着いたところです。

もともと、スマートフォンの動作環境として開発された Android ですから、スマートフォンだけにターゲットを絞ると、Android Things が出てきた意味がよくわからないと思うので、少し背景を解説しましょう。

Android Things が現れた背景

スティックコンピュータと Raspberry Pi のような組み込みボード(ここでは OS が動く組み込みボードを対象にします)の違いは、その拡張性にあります。拡張性とはいっても、デスクトップ PC のようにストレージを増やせるとかメモリを増やせるとかということではなくて(そういう点でも、スティックコンピュータは拡張性がありません)、GPIO などを使って機器制御ができるという「拡張性」になります。いわゆるLチカのようにON/OFFでLEDを光らせるだけでなく、液晶ボードの I2C 通信や、各種サーボの PWM 制御によるロボットの動作、各種センサーのデータ収集などに使えます。

かつて、データ制御やロボット制御は、PC に高価な GPIO ボード(確か50万円位したはず)を繋げて制御したときもあるのですが、最近だと、安価な Raspberry Pi などを使う(学習用の組み込みであれば5,000円程度です)ことが可能です。そう、ある意味で「壊れても痛くない」程度の金額になります(まあ、個人でやると痛いけど)。

なので、今だとある程度工夫すれば、PC + 組み込みボードという金額的にも場所的にも費用が掛かるものを、組み込みボードで小型化かつ安価にできるようになってきました。

Raspberry Pi の場合、Linux を乗せて動くので基本はターミナルで動かします。学習用としてはデスクトップPCの代わりとして使えるけど、ディスプレイ無しの安価な制御PCとしてのほうが有効に使えます。というのも、画面まわりが非力で(最近は高機能になりましたが、PC のグラフィックボードよりは非力です)画面のあれこれと、制御のあれこれをやろうとすると、結構 CPU が大変なことになってしまうのです。ここで、「住み分け」として、高価な UI は PC でやって、制御絡みは組み込みボードでやります。やってもよいのですが、単体で動かすとやっぱりなんらかのモニタ的な表示がないと辛いものがあります。電源がついたあとに動いているかどうかすらわからないという状態に陥りますね。

ここで、Raspbian 上で Qt などを使って UI を作ってもよいのですが(実際、そうやって作っている方も多いt思います)、UI を作るとなると Windows や Android のように既にノウハウのあるところの開発者がいたほうがいいですよね。

そういう発想のもとで、UI の性能自体は OS の性能はぐっと落ちるかもしれないけど、アプリケーションは Windows のように作るというのが Windows IoT Core の考え方です。Windows IoT Core は、PC の Windows 10 とはかなり使い方は違っていますが UWP アプリ(ストアアプリ)という点では同じように作ることができます。その代り、PC の Windows 10 にあるようなスタート画面や高機能アプリは一切ありません。

同じ発想は、Android の組み込みボードの世界にもあって(購入すると3万円位かかります)、組み込みボードに Android を乗せて UI の部分は Android のものを使うというものがあります。先の Orange Pi や Raspberry Pi に乗せた Android は、スマートフォンに乗せているものと同じなので、非力な組み込みボードの CPU ではひどく重いものです。CPU を早くするとボード自体が高価になるし、Android の使い勝手をよくしようと思うとスマートフォンと同じ程度のスペックが組み込みボードに要求されてしまいます。この点で、かなり「詰んだ」状態にはなっていました。

そこで、Android Things の再登場です。

  • 通常の Android よりも低スペックで動作する。
  • Android UI を通常通りに使える。

この両方を満たすために、Windows IoT Core と同じ方法を Google は取りました。いわゆるスマートフォンを起動したときのホーム画面等が一切ありません。その分、ストレージや CPU への負担が軽くなっています。

更に云うと、実質(と思われる)Android SDK v7 で動くようになっています。スマートフォン用の API がどこまで削られてか分かりませんが、少なくとも Xamarin.Forms でビルドしたアプリを Android Things に乗せても平気なぐらい「API が削られていない」ことがわかります。

https://pbs.twimg.com/media/CzzlwS-VEAEDa0A.jpg

つまり、Android Things は

  • ほぼ API が削られていない(と思われる)Android SDK v7 が動く
  • GPIO 等を動かす、com.google.android.things.* が jar で提供されている

という組み合わせになります。jar ファイルは androidthings-0.1-devpreview.jar のようです。Windows IoT Core でもそうですが、この別口のライブラリをプロジェクトに追加することで、組み込みボードの制御ができます。ちなみに Linux 系は /sys/class/gpio のファイルを開くだけなのでスクリプトでも結構簡単にできるんですよね。Android Things が何を使っているかわかりませんが(あとでコードを見るつもり)、似た感じだと思います。

ちなみに Android Things では adb shell の中身が充実しています。

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

perl や python のようなスクリプト系の言語がないのは残念なのですが(いずれ入れられると思う)、posix 互換だそうなので、それなりにコマンドと API が揃っています。

 

Android Things と Xamarin.Android の関係

.NET 界隈では Xamarin が流行っている訳ですから、(私的には)Android とはいえ Java でやるよりも C#/.NET でやろうという訳です。そうなると、Xamarin.Android を使って Android Things のアプリを作れるといいですよね。

というわけで、xamarin/xamarin-forms-samples: Sample apps built using the Xamarin.Forms framework から、Xamarin.Forms のサンプルをいくつかダウンロードして動かしてみると、動きます。きちんと mono の環境が入って、C# でプログラミングをすることができます。

GPIO がらみは com.google.android.things.* をラップしないといけないのですが、

jonpryor/SimpleAndroidThingsBinding
https://github.com/jonpryor/SimpleAndroidThingsBinding 

な形で、XML を使ってマッピングができるそうなので、これも後で試していきます。こうなると、Android Studio を使わなくても、Xamarin.Android/Forms の開発スタイルで、Android Things で機器制御のプログラムが組めるということになります。

Raspberry Pi 3 で動かしたところ、オンボードの WiFi を認識して繋げることができました。Bluetooth はまだ試していないのでがつながるでしょう。あと、カメラとかの定番も試していきます。各種のサンプルは https://github.com/androidthings で提供されています。

アプリケーションは、Google Play がないので、adb installl でインストールします。Xamarin.Forms の場合は署名がなくてインストールできなかったのですが、リリースビルドをして署名をすれば入るでしょう。

mono が動くということは F# も動きますね

mono が動くことが確認できれば、もれなく F# が動きますよね :)

非常に簡単だけどボタンクリックのサンプルだけを動かしてみました。

えっ? F# 成分はこれだけですか…いや、まあ、これだけです。ちゃんとしたものはそのうちに。

image

日曜日に、年末恒例の矢野顕子「さとがえるコンサート」に行ってきたのでその写真でも。青色 LED がまぶしすぎて目がチカチカしますよ。輝度をもう少し下げたほうがいいかもしれません。手ぶれしているし。

では、皆さまのよきクリスマスを祈りつつ。

カテゴリー: Android | Android Things 上で Xamarin.Android を動かして F# を使う はコメントを受け付けていません

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! のリファラースパムに対処する はコメントを受け付けていません