技術メモ

Scala,React Nativaなどの技術メモ

NavigatorIOSからの脱却

facebook.github.io

この当たりを読んでいると、NavigatorIOSはiOSでしか動かない。NavigatorならAndroidでも動くよ的なことが書いてある。

もともとReact Nativeに興味を持ったのは、できるだけ低コストでiOSAndroidの両方のアプリを作ることだったので、 ここはできる限りプラットフォームに依存しない形に書いていきたい。

Navigatorを使って頑張って書くのかなと思いきや、いい感じのライブラリがあるので使ってみる。

github.com

SyntaxError: Unexpected keyword 'const'. しかし、このように怒られる。 nodeのバージョンも古くないしなー。JSの環境の問題ぽい気が。 とりあえずreact nativeのバージョンをv0.10.1からv0.17.0にあげる。

[tid:com.facebook.React.JavaScript] Requiring module "InitializeJavaScriptAppEngine" which threw an exception とかいってシミュレータが落ちる。

Tested with react-native 0.15なんてあるので、あげすぎたか。 さてと、ビルドも通らなくなった。

AppDelegate.m:48:48: No visible @interface for 'RCTRootView' declares the selector 'initWithBundleURL:moduleName:launchOptions:'

github.com このissueにあるようにinitialProperties:nilを追加したらビルド通るようになった。

ちょっと完全に意味わからん状態になってきた。 ミッション失敗。 f:id:papuaaaaaaa:20160102154019p:plain

react native メモ続編

バーコードリーダーを使ってみたい

github.com

これを入れて使ってみた感じ最高

ただ2つのバーコードが画面に入ってきた時に、 どちらを識別するかを別途制御する必要があると感じた。

TabBarのiconをカスタマイズする

iconプロパティで画像を指定できるみたいだけど、 やっぱりベクタのほうが綺麗かな? iPadとかのときに変わってくるのかな。 とりあえずfont awesome使ってみたい。

github.com

github.com

このあたりが候補になりそうだが、 iOSAndroidのどちらにも対応してそうな前者で。

Make sure your app is checked under "Add to targets" and that "Create groups" is checked if you add the whole folder. とあるが、これはAdd files to "NameOfYourProject"Optionsで設定する。

Copy Bundle Resourcesにファイルが追加されたことを確認したほうがいいらしいが、 PROJECTにBuild Phasesないなーと思っていたらTARGETのほうにあった。

f:id:papuaaaaaaa:20160101231124p:plain

見当たらない場合は、このボタンでPROJECTとTARGETの切り替えができるようになる。

f:id:papuaaaaaaa:20160101232516p:plain

なんか怒られたが、ライブラリのリンクをちゃんとしていないからぽい。

facebook.github.io

こちらを参考にするとできた。

f:id:papuaaaaaaa:20160101232700p:plain

Ioniconsを使うときの落とし穴

ionicons.com

シンプルなアウトラインのアイコンが好きなので、Ioniconsいいなと思ったのだが、 が出てきていっこうに表示されない。システムフォントとしても読み込んでいるし。

と思っていたら、webページで出てくるアイコン名のion-の接頭辞はいらないみたい。

OCRやってみる

世間は大晦日だが、実家にも帰らず納豆食べてる。

Googleのtesseract-ocrを使ってみる。

github.com

とりあえずサンプリをローカルで動かしてみたい。 いきなりの

./autogen.sh: line 60: aclocal: command not found
brew install autoconf
brew install automake

さらに、

./autogen.sh: line 65: libtoolize: command not found
./autogen.sh: line 65: glibtoolize: command not found
brew install libtool

またまた、

checking for leptonica... configure: error: leptonica not found
brew install leptonica
CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure

インストールが完了。

% tesseract input/test1.png output
Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
Error opening data file /Users/papua/Documents/source/c/tesseract/tessdata/eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
Could not initialize tesseract.

言語ファイルを落としてきてリトライする。全部落とすと2GBくらいになるので注意。

github.com

うまくいけた。

f:id:papuaaaaaaa:20151231192047p:plain

かけ さろ 竈玉 レつぽ〈
アツアツ ヒヤヒヤ 天ぶら

かけ ざる 釜玉 しっぽく
アツァツ ヒヤヒヤ 天ぷら

一年前よりも精度は大分よくなってるぽい。

iti.hatenablog.jp

react native のサンプルを動かす

github.com

からソースを落としてきて、 いくつかサンプルがはいっている。

xcodeでビルドして起動後に赤画面になる。

ターミナルからnpm startしたないからだが、 いざすると

% npm start                                                      (git)-[master]

> react-native@0.8.0 start /react/react-native
> ./packager/packager.sh || true

/react/react-native/packager/packager.js:223
  const dumpName = '/tmp/dump_' + Date.now() + '.json';
  ^^^^^
SyntaxError: Use of const in strict mode.
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

とかで怒られる。 nodeのバージョンが原因。

node -v
nvm list
nvm use v4.1.1

などでいける。

react native メモ

react nativeを使ってアプリを作っている。

Intellijでプロジェクトを開く

サンプルとして Exsamplesをみてみたかったのだが、 Intellijをつかおうとすると、

f:id:papuaaaaaaa:20150923172435p:plain

のようなエラーがでるのでメモ。 ANDROID_HOMEは設定されていことを確認できたので、 local.propertiesファイルをつくって、 sdk.dirとndk.dirを設定したらいけた。

あっと、このへんにも書いてあった。

github.com

xcodeiOSエミュレータ上で起動する

Exsamples/2048などではエラーがでる。

SyntaxError: Use of const in strict mode nodeのバージョンをv4.1.1にしたがだめ。 どうやらreact nativeが起動時にbashを立ち上げてしまっていて、 そちらのnodeはバージョンが古いままのよう。 xcodeが古いからかと思ったが関係ないぽい。

./gradlew :Examples:SampleApp:android:app:installDebug

./packager/packager.shののちに SyntaxError: Use of const in strict modeとのエラーnodeをv4.0.0以上に上げなくてはならないよう。

stackoverflow.com

USBキーボードを一切使わずにRaspberry Pi に SSH 接続

タオルは3枚をヘビーローテーションして生活しているミニマリスト。好きな言葉は"在庫はコストだ"。最近、ミニマリストの面白い本を読んだ。オフ会に行ってみたいなと思ったりしている。

Raspberry PiのためにUSBキーボード買うくらいなら、タオル増やすよって感じなので、RasPiの操作は当然SSH接続。ネットワーク上にRasPiを発見できずに2時間も費やしてしまった(2週間ぶり2度目)ので、さすがに備忘録として残しておく。

必要なもの

※No.6のLANからUSBへの変換器は、No.2のSSH接続用の端末自体にLANケーブルが挿せれば必要ない。

No. 名称 値段
1 Raspberry Pi 5000円
2 SSH接続用の端末
(ここではMacBook Pro Retina, 13-inch, Mid 2014, OS 10.10.5)
-
3 LANケーブル 500円
4 USB電源 500円
5 microSDカード 1000円
6 LANからUSBへの変換器 1000円

ケーブル類配線

  • コンセントとRasPiをUSB電源で接続
  • RasPiにLANケーブルを挿して、LANからUSBへの変換器で(または直接)SSH接続用端末に接続

SSH接続用端末側のNICIPアドレスを確認

shellでifconfigを叩くとズラズラっとでてくるのでen0以外のen〜のinetを確認する。 どれに該当するかは、LANケーブルを外した時に消えてなくなるやつというアナログな方法でも確認できるかと思う。 もしくはシステム環境設定>ネットワーク>USB EthernetIPアドレスを確認する。

不明なRasPi側のNICIPアドレスを確認

SSH端末側のIPアドレスが169.254.110.128でサブネットマスクが255.255.0.0ならば、RasPi側のNICIPアドレスが169.254.〜であることが予測できる。ここでshellでarp -aを叩くと

? (169.254.15.26) at (incomplete) on en0 [ethernet]
? (172.20.10.1) at 72:72:72:72:72:72 on en0 ifscope [ethernet]
? (172.20.10.2) at 72:72:72:72:72:72 on en0 ifscope permanent [ethernet]

という結果が得られ、これより169.254.15.26がRasPi側NICIPアドレスであることがわかる。

RasPiにSSH接続

ssh pi@169.254.15.26

デフォルトのパスワードであるraspberryを入力してログイン。

その他

SSH接続用の端末側のNICIPアドレスは固定にする必要はなかった。 RasPi側で何かをinstallするとraspberrypi.localで名前解決できるようになる。 つまり、

ssh pi@raspberrypi.local

SSH接続できるようになる。

sudo apt-get install avahi-daemon

をすればできるようになるとの記述もあるがこれじゃなかった気がする。

arp -aってしたときに表示されるARP entryの表記の正確なリファレンスが欲しかったのだけど見つけられなかった。Mac OS XFreeBSDをベースにしてるってはなしから、FreeBSDのリファレンスを見るんだけどどうもarpのオプションが何とかコマンドの使い方しか見あたらない。 こういうときどんな英語で調べるべきなんだろう。ちなみにunix arp entry formatとかで調べたんだけど。英語力がまだまだってことかな。

Google Apps Scriptではまったのでメモ

スクリプトエディタから直接うごかしてみる分には動くが、ウェブアプリケーションとして公開した途端に動かなくなってはまった。

 

Spreadsheetにアクセスするので権限周りが原因だと思われる。ちなみに「次のユーザとしてアクションを実行」を変更しても改善しなかった。

 

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("member");

SpreadsheetApp.openById('Id').getSheetByName("member")

 

openByIdでIdをもとにSpreadsheetを参照したらいけた。