Androidのメモとか

ポキオの日記です。今日も遅延してない。

ESP8266からGoogle Apps Scriptを叩くのはちょっと面倒

一定のつらみ。

Google Apps ScriptのWebAPIは厳しい

GASのWebAPIをESP8266から叩くときに、2つの大きな問題があります。

  1. HTTPSに対応すること
  2. HTTPリダイレクトに対応すること

HTTPS対応

いままではポート80にアクセスしていましたが、HTTPSになると443にアクセスしなければなりません。また、それでだけでは不十分で、通常のHTTP接続を行ってくれる便利クラスのインスタンスのコンストラクタで、フィンガープリントなる文字列を引数に与えなければなりません。

www.grc.com

そこで、便利なのがこのサイト。アクセスしたいアドレスを打ち込むだけで、フィンガープリントを生成してくれます。ターミナルからSSLのコマンドを売ったりする必要はありません。

HTTPリダイレクト対応

Google Apps Scriptで作ったWebAPIは、アドレスにアクセスしても別のアドレスにリダイレクトされてしまいます。

Content Service  |  Apps Script  |  Google Developers

For security reasons, content returned by the Content service isn't served from script.google.com, but instead redirected to a one-time URL at script.googleusercontent.com.

ただし、ESP8266の実装でよく使われるHTTPClientやWifiClient (WifiClientSecure)はリダイレクションに対応していないようで、上手く動作しません。そこで、今回はHTTPSRedirectというライブラリを使って実装をしてみます。

github.com

サンプルコードも載っているので非常にわかりやすいです。

いざ実装

今回は、以前作ったポキオ基板v2を使って実装してみます。

relativelayout.hatenablog.com

ESP8266 HTTP REDIRECTION

基本的にはESPr Developerで、IO4がマイコン内蔵RGB LEDとつながっています。また、アクセスする先は、前回作ったpokioという文字列を返すだけのGASのWebAPIです。

relativelayout.hatenablog.com

クソコードはこんな感じ。

#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
#include <HTTPSRedirect.h>

#define PIN 4
#define NUMLED 1

#define SSID "xxxxx"
#define PASSWORD "yyyyy"

#define HTTPS_PORT 443
#define HOST "script.google.com"
#define URL "/macros/s/zzzzz/exec"
#define FINGERPRINT "FI NG ER PR IN T!"

HTTPSRedirect* client = nullptr;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMLED, PIN, NEO_RGB + NEO_KHZ800);

void setup() {
  // Serialの初期化
  Serial.begin(115200);
  Serial.println("");

  // マイコン内蔵RGB LEDの初期化
  pixels.begin();
}

void loop() {
  // Wi-Fi接続開始
  connectWifi();

  // Google Apps Scriptを叩く
  Serial.println(doRedirectGet());

  // Wi-Fi接続終了
  disconnectWifi();

  delay(10000);
}

// Wi-Fi接続
void connectWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, PASSWORD);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    blinkWhite(3);
  }

  Serial.println("Wi-Fi connected");
}

// Wi-Fi切断
void disconnectWifi() {
  WiFi.disconnect();
  Serial.println("Wi-Fi disconnected");
}

// 白い点滅
void blinkWhite(int sec) {
  int count = 0;

  while (count < sec) {
    for (int i = 0; i < 256; i += 5) {
      setColor( i, i, i);
    }

    for (int i = 255; i >= 0; i -= 5) {
      setColor( i, i, i);
    }

    count++;
  }
}

// LEDを指定した色で光らせる
void setColor(int r, int g, int b) {
  for (int i = 0 ; i < NUMLED; i++) {
    pixels.setPixelColor(i, pixels.Color(r, g, b));
    pixels.show();
  }
  delay(10);
}

// Redirectを回避してHTTP-GETする
String doRedirectGet() {
  String body = "";
  client = new HTTPSRedirect(HTTPS_PORT);

  if (!client->connect(HOST, HTTPS_PORT)) {
    Serial.println("connection failed");
    return body;
  }

  if (!client->verify(FINGERPRINT, HOST)) {
    Serial.println("certificate doesn't match");
  }

  client->GET(URL, HOST);
  body = client->getResponseBody();
  delete client;
  client = nullptr;
  return body;
}

動作確認

Serial Monitorの出力はこんな感じ。

.Wi-Fi connected
pokio

Wi-Fi disconnected

いい感じですね。たまに、

..Wi-Fi connected
certificate doesn't match
pokio

Wi-Fi disconnected

こんな感じでフィンガープリントでの認証が通らない時もありますが、それでもAPIは正しく返ってきています(笑)

Google Apps ScriptでWebAPIを光の速さで作る

ちょっぱや。

簡単に作れます

developers.google.com

まぁ、兎に角簡単なんです。主な手順としては、

  1. HTTP-GETされたときの挙動をGAS上で書く
  2. ウェブアプリケーションとして公開
  3. アクセスする

簡単ですね。サーバーを立てたり、そういうのは一切不要。

実際に作ってみます

GASでテキトーなプロジェクトを作ります。

Google Apps Script WebAPI

HTTP-GETされたときの挙動は、下記のような容量で定義できます。

function doGet() {
  return ContentService.createTextOutput("pokio");
}

今回は、pokioという文字列を返すだけのWebAPIを作ります。

HTTP-GET時の挙動が書けたら、[公開] > [ウェブアプリケーションとして導入…]から、WebAPIとしてアクセスできるように設定します。

Google Apps Script WebAPI

次のユーザーとしてアプリケーションを実行:自分
アプリケーションにアクセスできるユーザー:全員(匿名ユーザーを含む)

このように設定しておけば、WebAPIを叩いた時にGoogleにログインする必要がありません。設定が終了すると、URLが発行され、それがWebAPIのアドレスになります。

実際にアクセスしてみる

アクセスします。

Google Apps Script WebAPI

pokio。はい、簡単ですね。

Google Apps Scriptを使ってESP8266をズボラコーディングする

GASならなんでもできる。

ESP8266の弱点

ESPr Developer(ESP-WROOM-02開発ボード)

ESPr Developer(ESP-WROOM-02開発ボード)

ESP8266はArduino IDEからコーディングできるし、Wi-Fiもついてるし色々できるマイコン。ただ、敢えて弱点をあげるとすると、こんな感じかしら。

  • Arduino/ESP8266でできる処理がちょっとPoor
  • デバッグが面倒
  • いちいちプログラムを流し込むのが面倒

色々プラグインは有るものの、いちいち入れるのも面倒だし、デバッグもめんどくさいし、プログラムのデプロイも時間かかるし。ちゃんとしたコードを一度書き込んじゃえばイイんですけどね。

これってもしかしてGASで幸せになれる

もともと、私のIoTレベルではESP8266でLEDを光らせるくらいのレベルです。京急が遅延すると光るアレとかは、ざっくりこんな感じで光ってます。

ESP8266 Google Apps Script

こんな感じでESP8266にかなりの責務が課されています。これをGAS経由にするとこんな感じになります。

ESP8266 Google Apps Script

なにが言いたいかというと、

  • メインのロジックはGASに集約できる
  • ESP8266はGASに何色に光らせるか問い合わせるだけ
  • ESP8266は任意の色に光らせることだけを責務とする

さらに、GASにメインの判断ロジックを寄せることで、こんなメリットがあったりします。

  • ロジックの修正はGASだけ触ればいい(ESP8266はそのまま)
  • 例えば、京急線遅延インジケータから京浜東北線遅延インジケータに変えるときも、GASだけ書き換えれば完了する
  • GASならいろんなAPIGoogle系のサービスとの連携が用意されている

なので、一度GASのResponseをパースしてLEDを光らせるコーディングをESP8266にしてしまえば、あとはGASを弄るだけでインテリジェントなLチカガジェットが作れるというわけです。たぶん、同じこと考えてる人はいっぱいいるんでしょうね。

というわけでサマリ

GASでWebAPIをつくって、それをESP8266から叩くようにしてしまえば、GASだけ相手にすればいいようになる。そうすると、ESP8266はLチカだけしてればイイわけです。メインのロジックはGASに書く。有言実行、今度なにか作ってみます。

Google Apps ScriptからYahooのAPI(YOLP)を叩いてピンポイント天気予報を取得する

安心と信頼のGAS。

YOLPとは?

developer.yahoo.co.jp

Yahoo! Open Local Platformの略。無料で使えるAPIの一つで、地図に関するAPIが沢山用意されています。その中で、今回は天気予報のAPIを触ってみます。

developer.yahoo.co.jp

YahooのIDの取得と、アプリケーションの登録ができている前提で実装しています。

超簡単

早速GASで実装。

var appId = "xxx";
var secret = "yyy"; // 使わなかった
var place = "139.739425,35.637008";
var url = "https://map.yahooapis.jp/weather/V1/place?coordinates=" + place + "&output=json&appid=" + appId;

function myFunction() {
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

これだけ。Log出力を見てみると・・・

{  
   "ResultInfo":{  
      "Count":1,
      "Total":1,
      "Start":1,
      "Status":200,
      "Latency":0.004212,
      "Description":"",
      "Copyright":"(C) Yahoo Japan Corporation."
   },
   "Feature":[  
      {  
         "Id":"201706202355_139.73943_35.637008",
         "Name":"地点(139.73943,35.637008)の2017年06月20日 23時55分から60分間の天気情報",
         "Geometry":{  
            "Type":"point",
            "Coordinates":"139.73943,35.637008"
         },
         "Property":{  
            "WeatherAreaCode":4410,
            "WeatherList":{  
               "Weather":[  
                  {  
                     "Type":"observation",
                     "Date":"201706202355",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210005",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210015",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210025",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210035",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210045",
                     "Rainfall":0.00
                  },
                  {  
                     "Type":"forecast",
                     "Date":"201706210055",
                     "Rainfall":0.00
                  }
               ]
            }
         }
      }
   ]
}

ある地点の緯度経度を与えると、10分おきの降水予想が取得できる。これは使えそうだなぁ・・・。ポキオ基板Ver.2と組み合わせてみようかな。

IoT縛りの勉強会! IoTLT vol.28 @ サイボウズ で登壇してきました

今回も登壇させていただきました。

iotlt.connpass.com

今回は、サイボウズさん

IoT縛りの勉強会! IoTLT vol.28 @ サイボウズ

サイボウズさんといえば、キントーン。キントーンといえばサイボウズさん。そういう認識です。オフィスは日本橋で、コレド日本橋が近くにあったり、バンク・オブ・アメリカメリルリンチとか名だたる会社のオフィスが立ち並ぶ街。日本橋に着ていく服がない状態。

気になったネタ

今回は、「やってみた、けど、だめだった」系のLTが多かった印象。まずはやってみることが大切だよね、と気づかせてくれる会でした。ポキオで良ければお手伝いしますよー(笑)

山田寛延さん:節酒IoT

お酒とIoTという独特な着眼点がすごく面白かったです。

飲んだお酒の量を、コップの重さから判断するIoT。重さを測るのに、ロードセルという素子を使っているとのこと。秋月とかのページでロードセルを眺めてみると、十数kg〜100kg程度の重さも測れるものもあり、なんか使えそう。

チャラ電Mitzさん:元汎用機エンジニア語るIoT/JaFUG紹介も

Mitzさん。今回は相方のわんこさんは不在でした。

JaFUG(=日本のフィットビットユーザーグループ)なるものがあるみたい。そしてフィットビットはAPIも開通していて、IoTなハックができるらしい・・・。ちょっと運動は苦手だけど、フィットビット買ってみようかしら・・・。

ふくもさん:メルヘンチックをハックする with ThingSpeak

完全にタイトルにやられました(笑)

ThingSpeakはmBaaS(という認識だけど、あってるかな・・・)で、IoTなボードにフレンドリーで、しかも無料で使えるらしい。ESP8266と組み合わせて試してみたいなぁ。

ポキオの発表は?

ポキオ基板Ver.2の発表をしました。

relativelayout.hatenablog.com relativelayout.hatenablog.com

前々から温めていたネタを、ついに発表してきました。やっぱり京急ネタは喋ってて気持ちがいいです。京急は神。

今回も「遅延したら光る」系のネタが含まれてたわけです。IoTLTが始まる前はちょっと遅延していたようなのですが、LTをする頃には遅延が解消していました。はい。デモは難しいです。

京急は神。

思いの外、好評でした。

ありがとうございました。

懇親会

今回も、転職ドラフトさんがスポンサー。ドラフトビールです。 ビアバッシュ最高でございます。

IoT縛りの勉強会! IoTLT vol.28 @ サイボウズ

懇親会では、まさかのポキオ基板が大人気でした。

ポキオ人気すごかった #iotlt

A post shared by n0bisuke (@n0bisuke) on

ありがたい限りです。また、余ってたポキオ基板も多くの方にお配りしました。使い方が分からなかったらご連絡下さい。

また京急ネタで登壇できるように、日々是勉強。今後共よろしくお願いします。

おまけ①

登壇者限定で、IoTLTステッカーをいただきました。

IoT縛りの勉強会! IoTLT vol.28 @ サイボウズ

早速、会社のMBPに貼ってみました!

IoT縛りの勉強会! IoTLT vol.28 @ サイボウズ

IoTLTシールを探せ!(笑)

おまけ②

実は、dotstudioさんで、ポキオのダァ2号の記事が公開されました!

dotstud.io

京急が好きな人、兎に角光ることが好きな人、ESP8266が好きな人、ぜひぜひ御覧ください!ダァ2号で動いているクソコードも公開されてます!(笑)

ポキオ基板Ver.2を作ってIoTをしてみるよ(その3)

はんだ付けするお。

ポキオ基板

ようやく基板が届きました

前回。

relativelayout.hatenablog.com relativelayout.hatenablog.com

光の速さは言い過ぎですが、データ入稿から10日で手元に届いたポキオ基板Ver.2。今回は部品をはんだ付けしたり、コーディングしていきます。

USB A オスは、大丈夫か?

まず気になるのは、USB A オスのコネクタがちゃんと嵌まるかどうか。

ポキオ基板

はじめてフットプリントをイジっただけに、少し不安ですが、基板を見る限りはイケそう・・・。

ポキオ基板

恐る恐る部品を嵌めてみると・・・ピッタリ嵌りました!気持ちいい!これが嵌まれば、後はヌルゲーです。

ポキオ基板

ピンソケットとマイコン内蔵RGB LEDも半田付けしていきます。ピンソケットは京急に敬意を表して、赤色のものをチョイス。マイコン内蔵RGB LEDは5mmのものを使用。アノードコモンとかカソードコモンとかではなく、Adafruitのライブラリで動くタイプのやつです。

ESPr Developerと合体…///

そう、ピンソケットということはESPr Developerをポキオ基板Ver.2に直付けするわけではなく、いつでも取り外しできるようにしておきます。要はヘタレ実装ということです。

ポキオ基板

ここにESPr Developerがあるじゃろ?( ^ω^) (以下略)

ポキオ基板

こうじゃ!

はい、赤と青。目がチカチカしますね(笑)

さっそくコーディング

基本的にはこの実装をそのまま使いまわします。

relativelayout.hatenablog.com

前回はLEDを4つ使っていましたが、今回は1つなので、#define NUMLED 1とします。さて、光るでしょうか・・・?

ポキオ基板

ピカピカー!光りました!動作確認時は例によって、遅延が一切発生していなかったのであまりおもしろくありませんでしたが、問題なく光りました!

お気持ち表明

かなり雑ではありますが、IoTっぽい基板を作ることができました。京急の遅延以外にも色んな監視をさせて、LEDで通知させてみたいと思います。さて、今回の基板、あんまり京急っぽくないよね?と思う方も多いと思います。

ポキオ基板

この形・・・あ・・・もしかして・・・

ポキオ基板

そうですね、800形ですね。異論は認めません。基板作成、今後はこんなことをしてみたいです。

  • 基板に英数だけじゃなくて漢字やロゴを入れる(Bitmapをゴニョゴニョする・・・?)
  • ESP8266とかESP32を表面実装したい
  • もう少し京急感を出す

はい。頑張ります。

ポキオ基板Ver.2を作ってIoTをしてみるよ(その2)

今回は納期の話。

ポキオ基板

ポキオ基板Ver.2をSeeed Studioに発注

前回まで。

relativelayout.hatenablog.com

今回は、思い切ってSeeed Studioに発注したんです。一番配送が早いやつにしてみたんですが、どのくらい早いかと言われれば、かなり早かったです。

注文⇒発送

時系列で並べるとこんな感じ。

  • 2017/05/27 17:47 : 注文
  • 2017/05/28 21:54 : 基板の製造に取り掛かったとの連絡
  • 2017/06/02 19:14 : Shippedの連絡

早い!注文から大体1週間くらいで発送されました。

発送⇒到着

色々ProsConsがあるDHL Expressですが、こちらもわりと早かった印象。

  • 2017/06/02 16:54 : Shipment information received
  • 2017/06/05 18:21 : Uncontrollable Clearance Delay

ラッキング可能になるのはすごい早かったのですが、中国国内の通関までに数日かかりました。そして、謎の通関遅延発生。ちょっと暗雲が立ち込めます。

  • 2017/06/05 20:32 : Clearance processing complete at SHENZHEN - CHINA, PEOPLES REPUBLIC

え・・・Delayとは何だったのか。あっさり通関、そのあと深セン→香港経由で成田に到着。

  • 2017/06/06 09:08 : Transferred through TOKYO - NARITA - JAPAN

そして、そこから怒涛の早さで自宅へ配送完了。

  • 2017/06/06 13:37 : Delivered - Signed for by XXXXX

というわけで、発注の10日後には家に到着。すごいですね、安いし早い。思い立ったら、まず発注ということですね。

というわけで到着

A4程度の大きさのビニールバッグに入って届きました。

ポキオ基板

袋をあけると、Seeed Studioの袋が。

ポキオ基板

その中には、できたてホヤホヤのポキオ基板Ver.2が!仕上がりも悪くありません。基板の曲線部分も綺麗にカットされています。

ポキオ基板

さて、次回はこの基盤にパーツをはんだ付けしていきます。

relativelayout.hatenablog.com

Appendix

ラッキングの詳細は以下の通りです。ご査収ください。

Date Time Event Location
Jun 06, 2017 01:37 pm Delivered - Signed for by XXXXX : DHL Express KANAZAWA WARD, YOKOHAMA - JP
Jun 06, 2017 12:52 pm With delivery courier : DHL Express
Jun 06, 2017 12:06 pm Arrived at Delivery Facility in : DHL Express
Jun 06, 2017 11:32 am Departed Facility in TOKYO - JAPAN : DHL Express TOKYO - JAPAN
Jun 06, 2017 11:22 am Processed at TOKYO - JAPAN : DHL Express TOKYO - JAPAN
Jun 06, 2017 10:21 am Processed at TOKYO - JAPAN : DHL Express TOKYO - JAPAN
Jun 06, 2017 10:20 am Clearance processing complete at TOKYO - JAPAN : DHL Express TOKYO - JAPAN
Jun 06, 2017 10:08 am Arrived at Sort Facility TOKYO - JAPAN : DHL Express TOKYO - JAPAN
Jun 06, 2017 09:08 am Transferred through TOKYO - NARITA - JAPAN : DHL Express TOKYO - NARITA - JAPAN
Jun 06, 2017 09:03 am Customs status updated : DHL Express TOKYO - JAPAN
Jun 06, 2017 05:48 am Customs status updated : DHL Express TOKYO - JAPAN
Jun 06, 2017 03:25 am Departed Facility in HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 06, 2017 03:11 am Processed at HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 11:49 pm Clearance processing complete at HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 11:49 pm Processed at HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 11:42 pm Arrived at Sort Facility HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 09:25 pm Arrived at Sort Facility HONG KONG - HONG KONG : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 08:46 pm Customs status updated : DHL Express HONG KONG - HONG KONG
Jun 05, 2017 08:34 pm Departed Facility in SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 08:33 pm Processed at SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 08:32 pm Clearance processing complete at SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 06:21 pm Uncontrollable Clearance Delay : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 06:19 pm Arrived at Sort Facility SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 06:18 pm Departed Facility in SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 05:14 pm Processed at SHENZHEN - CHINA, PEOPLES REPUBLIC : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 05, 2017 03:13 pm Shipment picked up : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
Jun 02, 2017 04:54 pm Shipment information received : DHL Express SHENZHEN - CHINA, PEOPLES REPUBLIC
火曜日, 6月 06, 2017 取り扱いセンター 時間
配達完了: XXXXX KANAZAWA WARD, YOKOHAMA 13:37
配送中 YOKOHAMA - JAPAN 12:52
DHL施設へ到着 YOKOHAMA - JAPAN YOKOHAMA - JAPAN 12:06
DHL施設から出発 TOKYO - JAPAN TOKYO - JAPAN 11:32
DHL施設にて搬送処理中 TOKYO - JAPAN TOKYO - JAPAN 11:22
通関許可 TOKYO - JAPAN TOKYO - JAPAN 10:20
DHL施設へ到着 TOKYO - JAPAN TOKYO - JAPAN 10:08
転送中 NARITA - JAPAN NARITA - JAPAN 09:08
通関手続き情報の更新 TOKYO - JAPAN 09:03
DHL施設から出発 HONG KONG - HONG KONG HONG KONG - HONG KONG 03:25
DHL施設にて搬送処理中 HONG KONG - HONG KONG HONG KONG - HONG KONG 03:11
月曜日, 6月 05, 2017 取り扱いセンター 時間
通関許可 HONG KONG - HONG KONG HONG KONG - HONG KONG 23:49
DHL施設へ到着 HONG KONG - HONG KONG HONG KONG - HONG KONG 23:42
通関手続き情報の更新 HONG KONG - HONG KONG 20:46
DHL施設から出発 SHENZHEN - CHINA, PEOPLES REPUBLIC SHENZHEN - CHINA, PEOPLES REPUBLIC 20:34
DHL施設にて搬送処理中 SHENZHEN - CHINA, PEOPLES REPUBLIC SHENZHEN - CHINA, PEOPLES REPUBLIC 20:33
通関許可 SHENZHEN - CHINA, PEOPLES REPUBLIC SHENZHEN - CHINA, PEOPLES REPUBLIC 20:32
通関手続き中 SHENZHEN - CHINA, PEOPLES REPUBLIC 18:21
DHL施設へ到着 SHENZHEN - CHINA, PEOPLES REPUBLIC SHENZHEN - CHINA, PEOPLES REPUBLIC 18:19
荷物集荷 SHENZHEN - CHINA, PEOPLES REPUBLIC 15:13
「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。