oinume journal

Scratchpad of what I learned

Googleフォームでメールアドレスを収集する場合にそのメールアドレスをGASから取得する

ググってもあまり出てこなかったのでメモ。Googleフォームで メールアドレスを収集する という設定をONにすると、フォームの回答を記録するSpreadsheetにメールアドレスが保存されるようになる。

これをGASのスクリプトからどうやって取るんだろうと思って調べてみたら、e.response.getRespondentEmail()というメソッドを呼ぶと取れるということがわかった。

試しにやってみたら見事にメールアドレスが取れた...! これでメアドを取るために独自のフィールドを足さなくて済む!

HerokuのName lookup timeoutが短すぎて困ってる話

最近HerokuのDynoで以下のようなエラーが出るようになった。アプリケーションから接続するMySQLのホスト名の解決が失敗しているっぽい。

Jan 18 08:20:25 ***** app/web.1:  {"level":"error","ts":"2018-01-17T23:20:24Z","msg":"InternalServerError","error":"errors.Internal: Failed to gorm.Open(): dial tcp: lookup ******** on 172.16.0.23:53: write udp 172.18.167.70:36855->172.16.0.23:53: i/o timeout

なんで?って思って /etc/resolv.conf を見てみたら

$ cat /etc/resolv.conf
options timeout:2
nameserver 172.16.0.23
search ec2.internal

↑のように timeout が2秒に設定されていた... 妥当な値かもしれないけど、ログにエラーが残るのが嫌だったのでIP直指定することで対応した... なんかいい方法ないかな。

webpackで<script>タグでロードしたライブラリをbundleされたJSから外したい

webpackのconfigには externals というものがある(ドキュメント)。このexternalsで定義したライブラリは、importで参照していてもwebpackでビルドして生成される成果物(bundle.js)には含まれなくなるというもの。

自分のユースケース

  • もともとReactを使っていないプロジェクトで一部のページだけでReactを使っていきたい
  • 全ページでReactを使うわけではないので、bundle.js には含めたくない(サイズ削減)
  • Reactが必要なページのみHTML上の <script> タグでロード

webpack.config.js

externalsでreactを除外するよ、ということを定義すれば bundle.js には含まれないようになる。webpackの設定ファイルはこんな感じ。

const config = {
  externals: {
    'react': 'React',
    'react-dom': 'ReactDOM',
  },
  ...
};

module.exports = config;

Loop over dates with bash in Linux

Here is an example of looping over dates from 2017-10-22 to 2017-12-31.

#!/bin/bash

START=2017-10-22
END=2017-12-31

CURRENT=$START
while true; do
    echo $CURRENT
    if [ "$CURRENT" = "$END" ]; then
        break
    fi
    CURRENT=`date -d "$CURRENT 1day" +%Y-%m-%d`
done

NOTE

2018年の抱負

あけましておめでとうございます。まだ1枚も年賀状の返信出してないです。今年も例によって新年の抱負。

過去の振り返り

新年の抱負をかかげても達成できないことが多いので

  • 目標を2つに絞る
  • 3ヶ月ごとに必ず振り返りをする
  • 目標達成のためのマイルストーンを細かく設定する

ことを今年は心がけようと思う。

その1: 機械学習

  • ゼロから作るDeep Learning を読む
  • 必要な数学(線形代数)を学ぶ

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

その2: lekcijeで月額課金を導入する

lekcijeも1年以上運営してきて

  • SendGridが無料プランの枠を超えた(つらい)
  • Papertrailも無料プランの枠を超えた(つらい)
  • MySQLはVPSに置かないと無理なデータ量になってきた(つらい)

という状態に成長してきたので、そろそろ月額課金を考えてもいいかなと思っている。今見ている限り、JCBは使えないけどStripeが一番簡単に導入できそうなのでこれを使う予定。

頑張らないこと

英語

去年はTOEIC 800点を目指していたけど、なかなかここに到達するには意識的に勉強時間を増やすか英語を使う頻度を増やすしかないけど、あまりやる気がわかないので今年は現状維持ぐらいにしておく。

Kubernetesとかインフラ回り

個人的にはもうHerokuやGAEでいいじゃんって思っている人間なので、この辺の技術は最低限にしてあまり追求しないことにする。そもそもこういう技術は大きい組織・サービスでしか必要のない技術だと思っている。