布団の中にいたい

Androidアプリ開発の勉強をしている傍らで、elasticsearchとかをいじってみたりしています。最近は数学の勉強が楽しくなってきました。

LinearLayoutでViewを並べる

久しぶりにAndroidのアプリを触り始めたはいいものの、View周りについてびっくりするぐらいスッポ抜けてるので基礎から復習。LinearLayoutで中にある要素をどういった形で並べるかという話。

LinearLayoutは中にある要素を縦か横に並べるためのlayoutで要素の追加方向はandroid:orientation属性で定義されている。android:orientation=verticalにすると、中にある要素は縦並びに、android:orientation=horizontalだと要素は横並びに配置される。配置を工夫すると、縦並びのLinearLayoutの中に、横並びのLinearLayoutを入れて、そこだけ横並びみたいなことができる。

詳しいことは以下の公式ドキュメントから。

LinearLayout | Android Developers

EditTextで左斜め上から文字を入力できるようにする

久しぶりにandroidで遊んでいる中でEditTextで文字を入力するときに、左斜め上から文字を入力できるようにしたいと思って調べたので軽くメモ。

やり方はすごく簡単。android:gravitytop|leftを指定するだけ。

<EditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top|left"
>

なんでこうなっているかというとEditTextが継承しているTextViewで定義されているからです。なので、同様にTextViewやTextViewを継承している他のものも設定できるはずです。

詳細は以下。

TextView | Android Developers

Rasberry Piでサーボを動かしてみた

以前Rasberry Piでカメラを使えるようにしてみたものの、この次に何をするか特に思いつかなかったので、今度はサーボを動かせるようにしてみました。サーボは色々はっつければ遊べそうなので期待大。

買ったのは以下。欲しかったのはSG90でカメラマウントは特に欲しい訳ではなかったが、何か括りつけるのに便利そうだったのでついでに購入。

今回はブレッドボードとかは使わずに直接サーボとrasberry piを接続する形にしました。

ざっくりSG90の仕様を調べてみると、赤がvcc、オレンジがPWMで茶色がgroundのようなので、それぞれrasberry piの対応するpinに接続します。

SG90の仕様は以下で見られます。

http://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf

rasberry piのpin配置については公式のREADMEに記載されていました。

GPIO: Models A+, B+, Raspberry Pi 2 B and Raspberry Pi 3 B - Raspberry Pi Documentation

ソースコードは以下の方のものを参考にしました。

Raspberry Pi講座 Servo ( SG90, SG92 ) - Hobby robot laboratory

とりあえず、もりもり動くことは確認できたので、次は何かに括りつけて動かしてみたいといいな。

f:id:asahima_194h:20171208221717j:plain

Rasberry Piでカメラを使えるようにした

先日rasberry piを買ってみたものの結局の所、botを運用するサーバーに成り果てているので、それっぽいことをしてみたくカメラを使えるようにしました。

購入したカメラは以下。理由は単純に評価が良さそうだったから。

Raspberry Pi Camera V2

Raspberry Pi Camera V2

rasberry piでカメラを使うようにする手順は以下。

  1. rasberry piでカメラを有効化する
  2. カメラを接続する

rasberry piでカメラを有効化する

やり方はとても単純。

以下のコマンドでrasberry piのconfigを開く。

sudo raspi-config

Interface Optionsという項目を選んで、先頭にあるP1 Cameraを選択。そのまま有効化するかどうか聞かれるので、有効化してrebootすればいい。

カメラを接続する

こっちはちょっと難しめ。実際に動画を見ながらやると捗ると思います。

私が参考にしたのは以下。爪をあげるところから見れるのでかなり役立ちました。

www.youtube.com

実際に写真を取れるか試したいのであれば、raspistillコマンドでお試しできるので、やってみるといいかと。

Rasberry Pi 3 model B を買ってみた

今更ながらRasberry Piで遊んでみたかったので、今の所一番新し目のRasberry Pi 3 model B を買いました。OSのセットアップをするのは嫌だったので、最初からセットアップされているものを買いました。ちなみに買ったのは以下。

Raspberry Pi3 コンプリートスターターキット (Standard)

Raspberry Pi3 コンプリートスターターキット (Standard)

あとはifconfigでip見て、sshできるようにしたり、ノリで買ったカメラモジュールで撮影できるようにしたりぐらいです。カメラ周りについてはまた後でまとめます。

Lチカをやってみたかったり、サーボ回したりしたければ、ブレッドボードとかを買う必要があります。暇なときに秋葉原にでも行って買ってきますかね。

fitbitを買ったので体重をSlackに投稿するやつを作った

つい先日、fitbit flex2を買いました。今までfitbitの初期型のものを持っていたのですが、なくしてしまったのでその代わりです。睡眠に関するデータが取れるらしいので色々期待しています。

Fitbit Flex 2™ フィットネス用リストバンド

まだ買ったばかりで睡眠データとか無いので、今回はさっくりfitbitのapiを叩いて、体重をslackに投稿するやつを作ってみました。

github.com

fitbitのapiを叩くためにpython-fitbitを、slackのincoming webhookを叩くために、requestsを使っています。

github.com

体重を取得しているコードは以下

def getDailyWeight():               
    # fitbit用のclientを作成                                                                                                            
    authd_client = fitbit.Fitbit(                                                                                                                             
        config.CLIENT_ID,                                                                                                                                     
        config.CLIENT_SECRET,                                                                                                                                 
        access_token=config.ACCESS_TOKEN,                                                                                                                     
        refresh_token=config.REFRESH_TOKEN,                                                                                                                   
        system=""                                                                                                                                             
    )                                                                                                                                                         
                                           
    # 昨日の体重を取得                                                                                                                   
    weight_data = authd_client.get_bodyweight(getYesterday())["weight"][0]                                                                                    
                                                                                                                                                              
    return (                                                                                                                                                  
        weight_data["date"],                                                                                                                                  
        weight_data["bmi"],                                                                                                                                   
        weight_data["weight"]                                                                                                                                 
    )                                       

まとめ

fitbitのapiを叩いて、slackに投稿するだけなら割と簡単にできました。本当はslackbotとか使って対話的にできるようにしたいんですが、特に取得したいデータもなかったのでこんな感じになっています。もう少しデータが集まったらbot化してみようかと思います。

「Electronではじめるアプリ開発 JavaScript/HTML/CSSでデスクトップアプリを作ろう」を読んだ

ちょろっと色んな環境で動くデスクトップアプリを作る必要がでてきたので、以下の本を読んでみた。個人的には楽しく読めたし、一度は作ってみたかったものがサンプルとして記載されていたので満足だったのだけれど、気になるところもある感じ。

本の内容をざっくり説明すると、Electronというjsを使ってデスクトップアプリケーションを開発するためのフレームワークがあって、それを使って簡単なアプリを書いてみましょうという感じです。以下に感想書きます。

良かったところ

個人的にはチャットアプリだったり、markdownのアプリだったり、実際に使えそうなサンプルがあったのが嬉しかったです。加えてspectronを使ったテスト方法やアプリケーションの配布方法なども記載されていたので、実際に配布する場合などにもきちんとテスト回しつつできそうです。

なんとも言えないところ

別に悪いという所ではなく、自分の確認不足もあるのですが正直Reactには面食らいました。React自体はちょっとだけ触ったことがあるので本を読むにあたって大きな障害はなかったのですが、Reactをあんまりわからない人が読むと説明があまりなくて大変なので、この本を読む前に簡単なチュートリアル程度は済ませておくと主眼であるElectronに集中できていいかもしれません。

まとめ

「とりあえず簡単なアプリを作ってみよう」ぐらいの気持ちでもさっくり読めて、すぐ応用できそうな内容なので、実際に何か作ってみて試してみてもいいかもしれません。私もせっかくなので趣味のアプリとか作ってみようと思います。