oinume journal

Scratchpad of what I learned

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でいいじゃんって思っている人間なので、この辺の技術は最低限にしてあまり追求しないことにする。そもそもこういう技術は大きい組織・サービスでしか必要のない技術だと思っている。

2017年の振り返り

あけましておめでとうございます。大晦日は2017年の振り返りをせずに息子の寝かしつけで寝落ちするという体たらくだったので2017年の振り返りをさせてください。

仕事

  • メルカリに新しい決済手段を追加するというプロジェクトに入り、4月からついにPHPを書き始めた。PHPはいまだに好きになれないけど、このプロジェクト自体はとてもやり甲斐があってワクワクするものだったので楽しかった。PHPあまり好きじゃないけど、メルカリはPHPがまだまだ多いので、このタイミングでPHPをある程度書けるようになったのは苦手意識を払拭するという意味でも良かった気がする。
  • 9月からはデスマなプロジェクトで会社へのヘイトがそれなりに溜まった。ただし、このプロジェクトを経験する事で40代以降の人生をどうするかを考えるいい機会になった。
  • 12月には会社の制度を利用させてもらってエストニアに出張に行くという機会を得た。この出張のおかげで少しはデスマによるヘイトが減った

年初の抱負に対する実績

  • 機械学習はUdemyで少し勉強した以外はほとんど身についてない
  • アルゴリズムの勉強:進捗ほぼゼロ
  • 英語:TOEIC 745点あたりで伸び悩んでる。正直これ以上はモチベーションがわかないというか、英語学習に割ける時間があるならプログラミングのレベル上げたい
  • VPSをやめる:Vultrのアフィリエイトで得たクレジットがまだ残っているのでまだ残ってしまっている
  • 去年より本を読む:別エントリでまとめたいけど、2016年よりかはたくさん読んだと思う!
  • Twitterの時間を制限する:6月ぐらいまでは制限できてたけど、最近は復活気味... Twitterをやめるには強い意思が必要だということがわかった

プライベート

  • 2017年に買って良かったモノ・サービス - oinume journal
  • 家族でハワイに行った。息子氏が帰る前日に「おウチに帰りたくないー」と言っていたのでまた行きたい。
  • 高校数学をやり直していて、高1の教科書がやっと3分の1ぐらい終わった。先は長い... もともと数学は苦手だったのだけど、高校生のときより論理思考力は上がっているので理解力は高まっている。あと、数学の問題の日本語は解釈が難しくて、数学力=日本語力なんじゃないかという気がしている。
  • 自分が運営している lekcije でReactをちゃんと使い始めた。慣れるといいものだと思えるようになった。
    • あとgRPC + gRPC gatewayも使い始めた
  • サマソニとMuseのライブに行った

全体的に

2017年は体調を大きく崩すこともなく、ある程度やりたいこともやれていたので良かった。ちきりん氏の本を食わず嫌いで読んでなかったのだけど、「自分の時間を取り戻そう」という本を読んで、(ブログは全部読んでしまうぐらいの)ファンになってしまった。この人の本を読んでから他人の意見を参考にするのではなく、まずは自分の頭で考える癖がついたのが良い。正直2017年で一番の収穫だった気がする。

自分の時間を取り戻そう―――ゆとりも成功も手に入れられるたった1つの考え方

自分の時間を取り戻そう―――ゆとりも成功も手に入れられるたった1つの考え方