Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

【イベントログ】次世代農業EXPOにいってきました


VIP招待券なんて素敵なモノも貰ってしまったので、今回も行ってきました次世代農業EXPO。
それにしても、幕張メッセはやはり遠い……

会場の様子


垂直



薪ストーブ

間伐材の有効活用という事で最近人気の薪ストーブ
個人用が売れ筋との事です


ご家庭でも多段式植物プラント


支柱なしのビニールハウス

農作業機のクボタが提供する支柱なしビニールハウス。
台風でも倒れない!
支柱が無いということは、農耕機が侵入する事も可能。
これは色々やれる事が広がりそうですねぇ

Makefileの解決順は結局どうなってるのか?

今回のは、もの凄く初歩的な話です。
C言語のような古き善きプロジェクトではよく見かけるMakefile
基本的に人様の書いた秘伝のタレをみて何とな〜くわかった気になってしまうヤツですが
思う所あって、自前で勉強してみようと思いました。
まずは解決順の話。

実際のところ

こんなMakefileがあったとします。

first: 1.txt 2.txt 
	cowsay -d Mooo..

1.txt: hoge.txt
	echo '1'
	touch 2.txt

2.txt: 1.txt
	echo '2'

.PHONY: clean
clean:
	rm -r *.txt

何もターゲットを与えないと、以下のような実行結果になります。

$ make
echo '1'
1
touch 2.txt
echo '2'
2
cowsay -d Mooo..
 ________ 
< Mooo.. >
 -------- 
        \   ^__^
         \  (xx)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||

解決順としては以下のようになります。
1. 一番上にあるターゲット"first"が処理される
2. 第一条件である、1.txtが無いか見に行く
3. 1.txtの前提状況を見、クリア。2.txtが生成される
4. "first"の第二条件"2.txt"は生成されているので移動
5. "2.txt"の内容をクリア
6. 全てが終了したので、"first"の内容をクリア

Makefileの".PHONY"という記法について

実際のところ

makeコマンドを使って、不要なtxtファイルを一掃するコマンド"clean"を作りたいとします

clean:
	rm -r *.txt

ところが、このシステムにはとある事情でcleanという同名のファイルがありました

$ ls
Makefile	clean		hoge.txt

これでは、コマンドを実行しても意図した挙動になりません

$ make clean
make: `clean' is up to date.

この場合、".PHONY"(まがい物)という特殊変数を使ってあげます。

.PHONY: clean
clean:
	rm -r *.txt

これを導入した後だと、意図通りちゃんと動きます

$ ls
Makefile	clean		hoge.txt
$ make clean
rm -r *.txt
$ ls
Makefile	clean

android sdkの導入にミスった場合、"update sdk"するだけで良い

突然の停電やネットワーク不調でandorid sdkの導入に失敗すると、以下のようなエラーが出て前に進めなくなったりします。

Exception in thread "main" org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]

こういう時は……何のことはなく、"update sdk"だけで中途半端に残った作業環境も綺麗にしてくれます。

$ ./android update sdk --no-ui

一瞬焦りましたが……流石世界レベルのフレームワーク
このあたりの対策も万全ですね……。

ionicビルド中にError: spawn EACCESとかでたら"hooks add"しよう

初回はちゃんとビルドできたのに、ちょっとファイルをイジったら

Error: spawn EACCES

とか出てきました。
色々見ると、どうもディレクトリへの実行権限(それも777)を与えるとかいうファンキーな解答が目立ちますが……

ionicはこういう場合用に以下のようなコマンドを用意しています。

$ ionic hooks add

これだけです。

試しにionic help hooksでみると

$ ionic help hooks 
  _             _     
 (_)           (_)     
  _  ___  _ __  _  ___ 
 | |/ _ \| '_ \| |/ __|
 | | (_) | | | | | (__ 
 |_|\___/|_| |_|_|\___|  CLI v1.7.16

=======================

hooks [add|remove|permissions|perm] ...........  Manage your Ionic Cordova hooks
                                                 [add|remove|permissions|perm] Add, remove, or modify permissions on the default Ionic Cordova hooks

とあるのでやってることは実質実行権限の付加ですね。

参考もと

gulp利用アプリのレイアウトが崩れるようなら、プロジェクト中のnpmを再インストールしてみる

gulp利用アプリのレイアウトが崩れるようなら、プロジェクト中のnpmを再インストールしてみると良いです。

実際のところ

とある開発中アプリをgit経由で導入し、必要ライブラリのgulp導入も行いました。

$ git clone git@bitbucket.org:foobar/fizzbuzz.git
$ npm install -g gulp

ところがギッチョン……何かレイアウトが崩れます。
こういう時は大抵環境が死んでます。
実際、ログをみると

Gulp startup tasks: 0=sass, 1=watch
module.js:341
    throw err;
    ^

Error: Cannot find module 'gulp-util'

とか言って上手くGulpが読み出されてませんね。

幸いにしてnpmにはRubyにおけるGemlistのような仕組みが備わっています。
プロジェクト中のライブラリディレクトリを抹殺して、新規に入れ直しましょう。

$ rm -rf node_modules/
$ npm install

確認したところ、無事動きました。

参考もと

stackoverflow.com

VirtualBox上のUbuntu14.04にcordovaとionicフレームワークを導入する

クロスプラットフォームスマホアプリを開発するApache Corovaというライブラリがあります。
ionicは、このcordvaを拡張し更に格好良く、拡張性を向上させてくれるライブラリです。
本命は10USD~50USDで販売されている有料拡張らしいですが、基礎フレームは無償配布されています。

今回は、このionic + cordovaをVirtualBox上のUbuntu14に組んでみます。

実際のところ

前提状況

  • ゲストOS:Ubuntu14.04 on VirtualBox
  • ホストOS:OS X Yosemite(10.10)
  • プログラミング環境まわりは真っさら

Java8の環境導入

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer oracle-java8-set-default

android環境を入れる

cd ~/
mkdir Develop
cd $_
wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
本体の導入
$ tar -xvf android-sdk_*-linux.tgz
$ cd android-sdk-linux/tools
$ ./android update sdk --no-ui
環境変数導入
$ echo export PATH=$PATH:$HOME/Develop/android-sdk-linux/platform-tools:$HOME/Develop/android-sdk-linux/tools:$HOME/Develop/android-sdk-linux/build-tools/24.0.3/ >> ~/.bashrc
$ source ~/.bashrc
CPUビルド系の支援
$ sudo dpkg --add-architecture i386
$ sudo apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386

nodeの導入

ndenvをつかいましょう。
まずは導入する上で必須のgitとcurl

$ sudo apt-get install git-core curl

ndenvはgitで管理される奴を入れたほうが手っ取り早いので、そのように

$ git clone https://github.com/riywo/ndenv ~/.ndenv
$ git clone https://github.com/riywo/node-build.git ~/.ndenv/plugins/node-build
$ echo 'export PATH="$HOME/.ndenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(ndenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
node本体の導入

node本体の導入です。今回はv5.12.0を入れました。

$ ndenv install v5.12.0
$ ndenv global v5.12.0
$ ndenv rehash

ionicフレームワークとcordovaの導入

長らくおつきあい頂きありがとうございます。
ようやくionicフレームワークとcordovaの導入です。
とはいえ、これはコマンドで一発

$npm install -g cordova ionic
$ ionic start myapp tab
$ cd myapp

デフォでiOSが入ってるみたいです。
私が用事があるのはAndroidの方なので、導入。

$ ionic platform add andoroid 

確認サーバを起動します。
初回だとどのネットワークに接続されるか問い合わせが来ます。
今回はホストオンリーアダプターの接続先にしたeth1としておきました。

$ ionic serve

Multiple addresses available.
Please select which address to use by entering its number from the list below:
 1) x.x.x.x (eth0)
 2) y.y.y.y (eth1)
 3) localhost
Address Selection: eth1
Selected address: y.y.y.y

設定が終わればめでたく起動。

Running live reload server: http://y.y.y.y:35729
Watching: www/**/*, !www/lib/**/*, !www/**/*.map
√ Running dev server:  http://y.y.y.y:8100
Ionic server commands, enter:
  restart or r to restart the client app from the root
  goto or g and a url to have the app navigate to the given url
  consolelogs or c to enable/disable console log output
  serverlogs or s to enable/disable server log output
  quit or q to shutdown the server and exit

画面は、こんな感じになります。
f:id:shuzo_kino:20161008174102p:plain

ビルド

$ ionic build andorid

ちゃんとビルドできると、${PROJECT_ROOT}/platforms/android/build/outputs/apkにapkが入ります。
出来たイメージは書き込みツールなり、デプロイゲートなりといったアプリを使って配信してください。
deploygate.com