格安Android(g06+)買ってみた
持っているガラケーのバッテリー寿命が来て、5分も通話すれば落ちるぐらいになってしまいました。*1もう一度ガラケーに変えるという手もあるんですが、契約もめんどいので、MNPして格安SIMに電話番号も移そうかなと検討しています。それで今回移行する端末候補を買ってみました(まだMNPしたりSIM入れてないです)
選定条件は、基本電話を受けるだけなので、以下あたり
- 4インチ以下の大きさ
- android6以上で、新し目ないし、アップデート提供
- 価格が高すぎない
最初、docomoのXperiaシリーズのcompactを白ロムで買おうかなと思ったんですが、やはり3-6万ぐらいします。流れで、最近はかなり安いandroidもそれなりに出回っていることを知り、調べて行った結果、g06+*2というandroid7搭載で9,000円ぐらいのスマホを購入しました。1-2万円台ぐらいのHUAWEIのは、5インチ以上ばかりなので落選。
女性や子供など手が小さい人向けに特化し、4インチ液晶、2GBメモリという割り切った端末。同価格帯のよりはメモリが多いとのこと。外観は一昔前のAndroidという感じで高級感はないですが、シンプルで変ではないです。
ボディ標準色の赤色は、明るすぎず暗すぎずという感じで個人的には好きです。フロントは黒で、交換用のバックカバーが購入時に選べるので、そっちに変えることもできます。
android7が入ってるとはいえ、iPhoneほどの操作感はさすがになく、もたついたり、各種UIの慣れもあって雲泥の差。値段は1/10なので、そう考えると値段の割にはいいと思います。ただ、カメラは確実にチープなので使えないです。
個人的に電話を受ける+androidアプリの実験用なので、十分満たせると判断してます。androidはこういう特化型が出てくるのが面白いですね。Amazonでポチって翌日すぐ届くのもお手軽でした。
細かい使い勝手などは、他にも紹介されているので、細かいレビューはそっちを見た方が詳しいです。
- [「g06+」ミニレビュー(編集部湯野)] 7800円のスマホはどこまで使えるのか - ケータイ Watch
- ASCII.jp:1万円以下や4型の小型機など安価でも個性豊か 人気SIMフリースマホ全カタログ 【エントリー編】 (3/4)|人気SIMフリースマホのスペック全紹介! 【2017年夏編】
- g06+発売!メモリ2GBストレージ16GBに強化!7,800円と格安ながらバッリー交換も可!【gooのスマホ】最大1500ポイントが貰える | シムフリーマニア
2018/04/09 追記
急にWiFiが不安定になることが多くなり、SIMなし状態で使うのが厳しくなったので、別のAndroidに買い換えました。WiFiに繋がってるんだけど、通信ができていない/超低速状態になり、端末の再起動やWiFi設定を一旦削除したり試しましたが、解決せず。繋がることもありますが、使いたい時に使えないのは結構なストレスなので、買い換えとなりました。さすがに4インチの他の端末はないので、5インチ超を受け入れることに。
GoでJSON文字列を整形し直す
Goで、JSONを返すWebAPIを呼んだ時、普通は結果をプログラムで使うので、対応する構造体を用意して、json.Unmarshal()などで変換します。
しかし、JSONをそのまま整形だけして出力したい場合があります。例えば、WebAPIを呼んで、そのレスポンスを見せるだけとか。curl | jq .みたいな感じ。
JSON自体の文字列がある時は、Unmarshal() -> 構造体 -> Marshal()ということまではする必要はなく、json.Indent()を使います。
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
prefixは空文字で、indentの方にインデントに使う文字列を渡します。ここでは半角スペース2個指定。
j := `{"key":"value","obj":{"obj_key":"obj_value"}}` var buf bytes.Buffer err := json.Indent(&buf, []byte(j), "", " ") if err != nil { panic(err) } indentJson := buf.String()
これを使うと、以下のように変換できます。
{"key":"value","obj":{"obj_key":"obj_value"}}
↓
{ "key": "value", "obj": { "obj_key": "obj_value" } }
ちなみに改行インデントなしからだけでなく、2スペースからタブへの変換といった整形し直しも可能です。
逆に、インデントを全てなくす場合はjson.Compact()を使います。
func Compact(dst *bytes.Buffer, src []byte) error
使い方はIndent()のprefix, indent引数がないだけです。
全体のgo playgroundはこちら
Apexでlambda slack POSTにGoを使う
以前のエントリで、Lambda Node.js 4.3を使ってSlackにPostしていました。
普段Javascriptは書かないので、Goで書いてApexでデプロイする版を試しました。
ApexはLambdaのコードを管理(?)、デプロイするツールで、PythonやNode.jsなどのLambda対応言語はもちろん、GoをLambdaで実行(Node.js経由)することができます。
Apex自体は参考にしたページの方が詳しいのでそちらを。
Apexを使ってGoでslackにpostするLambda functionを作る
今回のApexプロジェクトディレクトリを作って、初期設定します。
mkdir post-slack cd post-slack apex init
Project nameとdescriptionを聞かれるので、project name: post-slack
とdescriptionは空白のままEnter。
_ ____ _______ __ / \ | _ \| ____\ \/ / / _ \ | |_) | _| \ / / ___ \| __/| |___ / \ /_/ \_\_| |_____/_/\_\ Enter the name of your project. It should be machine-friendly, as this is used to prefix your functions in Lambda. Project name: post-slack Enter an optional description of your project. Project description: [+] creating IAM post-slack_lambda_function role [+] creating IAM post-slack_lambda_logs policy [+] attaching policy to lambda_function role. [+] creating ./project.json [+] creating ./functions Setup complete, deploy those functions! $ apex deploy
ディレクトリ、ファイルが作成され、Lambda function用のRoleが自動作成されます。
slackにPOSTするfunctionの作成
新しいfunction用のディレクトリを作ります。go-general
は、general channelにPOSTしていたののGo版という意味でつけてます。
mkdir functions/go-general
次に、ここにあるGoのファイルを持ってきます。
curl -o functions/go-general/main.go https://gist.githubusercontent.com/reiki4040/afe3bd4317992b4748b0983f51058fae/raw/078b143186e03b45322d8373d5747afa78e801b8/main.go
最後に、環境変数用のfunction.jsonを作成します。(自分の環境のslack URLに置き換えてください)
echo '{ "environment":{ "SLACK_WEBHOOK_URL": "REPLACE YOUR SLACK WEBHOOK URL" } }' > functions/go-general/function.json
ディレクトリ/ファイル構成は、こんな感じになります。
post-slack/ ├── functions/ │ ├── go-general/ │ │ ├── function.json │ │ └── main.go │ └── hello/ │ └── index.js └── project.json
deploy (Lambda functionの作成)
apex deploy
だけだと、サンプルのhello functionもアップされるので、function名を指定します。
apex deploy go-general
以下のように作成されます。
• creating function env= function=go-general • created alias current env= function=go-general version=1 • function created env= function=go-general name=post-slack_go-general version=1
あとは元のエントリにあるように、functionの詳細から[Test]で、同じようにJSONを与えてあげると、slackにPOSTされます。 同様に、中編と後編をやると、API gatewayでWebAPIにできます。
所感
Apex便利ですね。Goだとサードパーティライブラリを使ってもバイナリにまとまるので、Lambdaの実行環境の影響を受けません*1 その代わり、このapexのディレクトリ構成上、Goのvendoringは一工夫要りそうな感じです。
参考など
- ApexでAWS Lambdaファンクションを管理する | Developers.IO
- Apexを使ってGoでlambdaを動かす - Qiita
- Apex – Serverless Infrastructure
- AWS API Gateway+LambdaでSlackにメッセージをPOSTする(前編) - 年中アイス
- AWS API Gateway+LambdaでSlackにメッセージをPOSTする(中編) - 年中アイス
- AWS API Gateway+LambdaでSlackにメッセージをPOSTする(後編) - 年中アイス
*1:cgo関係はダメかもですが、pure goは性質上いけるはず