暮らしの技術

暮らしを豊かにする技術や、特に暮らしを豊かにしない技術があります

tanatana.info を作り直した

hugo でパコッとやったのでおなじみのテンプレートって感じ.トップページはちょっといじっている.

tanatana.info


そもそも今月末でこれまで使っていたさくらVPSのサーバを一台解約するので,それに合わせて引越しついでに作り直したみたいな感じ.

tanatana.info | Hugoでサイト作り直した

こんな感じになっていて,稀によくあるサーバと手元でコンテンツ違うんだけど,みたいなのが起きないようにしている.... 仕事だと割とこういう状態作るんですけど,個人だとなあなあにしがちなのよね...

deploy は専用ユーザを切って NOPASSWD で sudo 使えるようにするなどを行ったので,deploy ユーザの鍵が漏れると荒れる.本来ならユーザとかグループとかで適切な権限降って,NGINX のドキュメントルート周りだけ触れるようにしておくのが良いのだろうなと思うけどそこまでやれてない.

ついでに let's encrypt 入れたり mackerel エージェント入れたりした.

ブログと個人サイトの棲み分け

正直令和にもなって個人サイトも保持し続ける必要があるのか,みたいなのは気持ちがあるんですが,しかしまあスタティックなコンテンツをホスティングしたいことはある気がしていて,そう言う意味で何らかの場があるのは嬉しい気がする.

1ページだけなんだがCMSみたいな仕組みが欲しい……っ!となった時に使える夢のようなテク

会社で仕事をしているとどうしても「この部分は非エンジニアが自由にいじれるようにしておきたいがそのための仕組みを作るときついね」みたいなことがあると思います。具体的には社内ツールの更新お知らせとかメモっぽいコーナーとか。

一方で更新する人には自由にして欲しくて、えーっと、じゃあ MarkdownGithub.com 上から編集してもらってCIでデプロイするか……?? などとなりますが、この時点ですでに重いし人類のほとんどは Markdown に対応していません。

実は Google Docs の機能にWebに公開という機能があり、これを有効にしたドキュメントを iframe で埋め込むことにより、1ページだけWYSIWYGな編集画面を持つページを追加でき、しかもサーバ側の変更がほぼ不要、という夢のような機能を追加することができます。*1

  • ドキュメントの保存から反映に2〜3分時間がかかる
  • Google Apps のドライブで作ると設定によっては見えないことがあるっぽい

あたりが注意点という感じですが、普通に便利なのでおすすめです。スプレッドシートもプレゼンテーションも似たようなことができるっぽいぞ!

*1:[ファイル]→[ページ設定]から余白を小さくするとなお良いです

GAE/SE go111 + datastore emulator とりあえず動かす

これはメモです.

ディレクトリ配置

go1.11 以降かつ go modules を利用するので,これまでのように GOPATH に縛られない場所にプロジェクトディレクトリを作成できる.

様子

$ tree ./
./
├── datastore
│   ├── WEB-INF
│   │   ├── appengine-generated
│   │   │   └── local_db.bin
│   │   └── index.yaml
│   └── env.yaml
├── go.mod
├── go.sum
└── server
    ├── app.yaml
    └── main.go

go.mod の位置ここでいいの...? みたいな些細な疑問がありませんか? 私はあります.

Datastore Emulator

↑の tree の結果からもわかるように,プロジェクトルート/datastore をdatastore emulator用のスペースとして切っている.

$ gcloud beta emulators datastore start --project=YOUR_PROJECT_NAME --data-dir=./datastore

サーバの起動

環境変数の設定

起動まえに Datastore Emulator に向くよう環境変数を設定する.

$ cloud beta emulators datastore env-init --project=YOUR_PROJECT_NAME --data-dir=./datastore

アプリケーションサーバの起動

go run でもいいし, dev_appserver.py でもいいと思う. dev_appserver.py は余分なものが色々起動するけど自動でビルドが走るし再起動もしてくれるからありがたい.が,初期起動に時間かかりすぎるのでいい方法探したい.

dev_appserver.py ./server

新しいパートナーAPIがリリースされました

このクリスマスの日に side_tana の新しいパートナーAPIについてみなさんにアナウンスできることに大変興奮しています!

経緯





問題

パートナーの状態についてAPI経由で取得したいといった要求が急峻に高まっていることが知られています.また,これらのデータは一度デジタルデータにすることができれば,容易に配信可能であることが @tomohi_ro によって指摘されています.

そう,問題はいかに早く現実のステータスを反映するかにあります.

設計

本稿では SORACOM LTE-M Button と AWS IoT 1-Click, AWS Lambda function を用いることであらゆる状況においてステータス更新可能なシステムを実現しました.

f:id:side_tana:20181224003608p:plain

SORACOM LTE-M Button は名前の通り KDDI の LPWA を利用しており全国で使えるため,どういった場所でパートナーと結ばれても即時に状態を反映することが可能です.

デモ

ブツ

Public Read でございます.JavaScript SDKなら以下の感じで動く.

  const config = {
    databaseURL: "https://tana-partner.firebaseio.com",
  };
  firebase.initializeApp(config);
  const database = firebase.database();
  const rootRef = database.ref('/');
  rootRef.on('value', (snapshot) => {
    console.log(snapshot.val());
  });

更新方法

SORACOM LTE-M ボタンは通常のクリック以外に長押しもサポートされているので,今回は長押しを true,通常のクリックをfalse に割り当てました.ということで間違って押しても(あるいは振られても)状態を変えることが可能!便利!

犬さんは絶対にこれ使ってなんか作ってください.

終わりに

SORACOM LTE-M ボタンは標準で1500回の操作か1年間分の利用料が含まれています.つまりこれから1年が過ぎるか,僕が750人のパートナーに恵まれ,そして破局を迎えるその日までとりあえず利用できることになります.果たして出番は来るのか....?

まあとにかくこんな感じでガチャガチャ遊んでたら日付が変わってクリスマスになってしまったワケです.マジかー.メリークリスマス!

f:id:side_tana:20181224005537p:plain

QA

SLAを教えてください

ありません

本当に使われるんですか

知りません

ステータスと現実の状態に差異があった場合に補償はされますか

されません

サポート体制について教えてください

ありません

法人窓口はありますか

ありません

Legacy Partner API のEOLまでのスケジュールを教えてください

私はこれ以前にパートナーAPIをリリースしていませんので、どなたか別の方と勘違いされているのではないでしょうか?

パートナーリクエスAPIのロードマップを教えてください

申し訳ありません、現時点で公開できる情報はありません。

cURL でスプレッドシートにデータを入力する

この記事は adventar.org の23日目に寄せた記事です。

GASでHTTPを受けてスプレッドシートにデータを入力できる、という話を聞いたので試して見た、というような記事です。今回はとりあえず動かしてみて満足することがゴールです。

まず新しいスプレッドシートを作成し、「ツール」から「スクリプトエディタ」を開きます。

次に、スクリプトエディタに以下のようなコードを書きます。リクエストを受けた時刻を一行挿入し、It's works! というテキストを返します。

function doGet(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = ss.getActiveSheet();
  sheet.appendRow([new Date()]);

  var output = ContentService.createTextOutput("It's works!");
  output.setMimeType(ContentService.MimeType.TEXT);
  return output;
}

続いて、スクリプトエディタのメニューにある「公開」から「ウェブアプリケーションとして導入」を選択します。

f:id:side_tana:20181223010222p:plain

今回は権限について難しいことを考えたくないので、ひとまず全開にします。*1

公開が終わるとURLが発行されるので、cURL で叩いて見ます。

$ curl -L https://script.google.com/macros/s/AKfycbzGf_...(省略)
It's works!%

果たしてスプレッドシートを見てみるとリクエストの時刻が記録されています。

f:id:side_tana:20181223010557p:plain

ということで、めちゃくちゃ簡単にcURLでデータを挿入することができました。POSTでペイロード乗せたりもできるみたいですし、クエリパラメータで指定とかもできるのでは*2 と思います。

記事書くためにやって見たのですが、PC開いてから30分でここまで書き終わっていて本当に手軽だな〜と思います。

はまったところ

スクリプトの更新後にそれを反映するためには、再び「ウェブアプリケーションとして導入」を行う必要があり、かつその際には新しいバージョンを指定する必要があるのですが、これに気がつかず少しハマりました、、、まあきっとドキュメントをちゃんと読めばその辺りフォローされているのでしょう。

そう、今回はなんとドキュメントを読まずにやっています。そういうこともある。逆に言えばとりあえず動かすだけならドキュメンなしでもなんとなくできてしまう、、、なかなかすごいと思います。

明日は id:hitode909 さんいい話が読めるようです。楽しみですね。

*1:本格的な運用を考えるならセキュリティレベルについては考える必要があると思います、また、検証が終わったら「アプリケーションにアクセスできるユーザー」を自分の身にしておくのが良いでしょう...

*2:未確認