oinume journal

Scratchpad of what I learned

Satisfying a large interface quickly in Go

Sometimes it's painful to safisfy a large interface in Go. Here is a simple answer for this, just embed interface on struct. The sample code is bellow:

package main

import (
    "fmt"
)

type Foo interface {
    MethodA()
    MethodB()  
    MethodC()
    MethodD()   
}

type FooImpl struct {
    Foo
}

func (fi *FooImpl) MethodA() {
    fmt.Println("MethodA called")
}


func main() {
    foo := new(FooImpl)
    foo.MethodA() // Implemented
    foo.MethodB() // Not implemented, runtime error will happen
}

You can check the result on https://play.golang.org/p/0y8ICTWCfpy.

  • MethodA called is printed
  • And then a runtime error happens by calling foo.MethodB

I guess this technique is useful in unit test.

2018年10月の振り返り

アルゴリズム

BTreeをやっているけど、時間がなくて実装ができずに止まっている。

ブロックチェーン

進捗なし

lekcijeのインフラ引っ越し

CircleCIでdocker buildしてGoogle Container Registryにpushするところまではできたので、あとはKubernetesのyamlをひたすら書いていく。

↑に関連して、静的ファイルの配信をVPS + NginxからCloudFlare + GCSに切り替えた。少しハマりポイントがあったので今度ブログにでもまとめようと思う。

読書

CAREER SKILLS

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

これを読んだ。ソフトウェアエンジニアになる近道とか、プロのエンジニアとしてやっていくには、みたいな心得集のようなもの。情報のポイントがまとまっているので、一通り網羅したい人にはオススメできる内容だと思う。

CODE COMPLETE

CAREER SKILLSで言及されていたので読んでいる。

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

プライベート

  • 楽天マガジンを解約したので本を読む時間が増えた。
  • 10月はDMM英会話をほぼやらなかった。そして3週間ぶりにレッスンを受けたらすごく新鮮な気持ちで楽しかったし、意外と英語力が衰えていなかった。

direnvから.envをロードする

.envrcファイルに dotenv と書くだけで、現在いるディレクトリの .env ファイルを読んでくれる素敵な仕様を発見した。これでdirenv使いながら.env形式しかうけつけないアプリケーションも

以下は具体的な例。

$ cat .env
PORT=12345
ENV=local

$ cat .envrc
dotenv

$ direnv allow
direnv: loading .envrc
direnv: export +ENV +PORT

$ echo $ENV $PORT
local 12345

2018年9月の振り返り

9月は10日間の奥さんの出張があったこともあり、本当にあっという間だった。

アルゴリズム

次はBTreeをやろうと思って、その前にAVLTreeやらないとダメそうで、そういえばBinarySearchTreeも実装したことないなって思ってBinarySearchTreeを実装した

10月こそはAVLTreeとBTreeやる。

ブロックチェーン

進捗なし

lekcijeの月額課金

月額課金の前に、インフラ環境をherokuからGCPの東京リージョンのGKEに移そうかなと思っている。

というのは、7月ぐらいにeikaiwa.dmm.comがSSL対応されたことにより、スクレイピング時のレイテンシが大幅に悪化したため、通知処理に時間がかかるようになってしまった。よりeikaiwa.dmm.comに近い場所からスクレイピングを動かさないとダメそう、ということでGCPの東京リージョンに移したい。

欲をいえばGKEではなくGAEで済ませたいのだけど(GKE高いし)、内部的にgRPCを使っているせいでGAEが使えない。早くGAE SEでgRPCが動かせるようになってほしい!(切実)

読書

橋下さんの「政権奪取論 強い野党の作り方」を読んだ。日本はアメリカのように2大政党制ではないので、自民党が危機感を持たず政治が国民を向いてないっていうことを具体的なエピソードをもとに説明している本。最初の方は面白かったし納得することも多かったけど、途中から似たようなエピソードが多くなってきたので途中で読むのをやめた。

政権奪取論 強い野党の作り方 (朝日新書)

政権奪取論 強い野党の作り方 (朝日新書)

プライベート

  • ジャック・ライアンがAmazon Primeにあったので見てしまった
  • 24の新しいシーズンがAmazon Primeに来てたので見てしまった
  • 奥さんが出張で10日間不在だったので育児ワンオペしてた
    • めちゃくちゃ大変だったけど、息子氏とより親密な関係を築けた
  • 楽天マガジンは雑誌を読む時間が確保できなくなってきたので解約した。時間が増えてきたらまた復活するかも。

2018年8月の振り返り

アルゴリズム

Boyer Moore法やった

次は何をやろうかと悩んだ結果、データベースでよく使うBTreeをやることにした。

ブロックチェーン

Ethereum and Solidity: The Complete Developer's Guide | Udemy

ノロノロと亀のように進めている。6%完了。やっとスマートコントラクトの話が出てきた。

FLOCは受講料26万円の割には大した内容ではなかったので解約した。正直あれならUdemyのコースとか書籍で十分。とにかく、1ヶ月以内なら解約できるのはいい制度だと思う。

lekcijeの月額課金

進捗なし

blog.lampetty.netのリダイレクト

今まではVPS上のNginxでやっていたけど、GAEでやるようにした。nginx.confをメンテしたくないしそもそもVPSでNginxを動かしたくないのでその第一歩。

https://github.com/oinume/blog-lampetty-net-redirector

GoogleCloudFunctions for Goがalpha版プレビューになっていたので、正式版が出たらこっちに置き換えたい。

読書

Google流 疲れない働き方

Google流 疲れない働き方

ピョートルさんの本を呼んだ。途中でメルカリという社名が3回ぐらい出てきたのが気になったところ、Mercari Tech Confを手伝われていたということを知った。

IIJmioから楽天モバイルに乗り換えた

格安SIMのIIJmioが遅すぎるので乗り換えた。楽天モバイルだと低速回線モードでも1Mbpsぐらい出る。これはギリギリYouTubeが見れる速度。そして低速回線モードはいくら使ってもそれ以上は制限されない。IIJmioではありえないことに、低速回線モードでも3日で500MBを超えるとさらに速度制限をするという意味不明な仕様だった。なので、だいたい1Mbpsで生活して、困ったら高速回線モードに切り替えるという運用になった。おかげで一番安いプランになったので結果的に月額コストが下げられた。

P20 Liteを買った

AndroidはずっとNexus4を使っていたのだけどさすがに限界だったので買い替えた。Android 8.0だとさすがに使いやすい。カメラ以外はiPhoneの代わりにメイン機にしても良いレベル。AndroidはGoogleと密結合されているのが良い。

その他プライベート

  • MacBookPro(2016)のバッテリーが壊れて無償交換対象だったので交換してもらった。GeniusBarでお願いしたら2日後には家に届いていて早さにびっくり。Apple製品は高いけどアフターサービスはやっぱり良いよね。
  • 楽天マガジンはまだ継続課金してる
  • 1Password Familiesは使いやすくて最高なので年間課金した

まとめ

  • 8月はブログをまったく書かなかった。頑張ろう。
  • 暑かったせいか仕事以外のものがすべてにおいて疎かになってしまっていた
  • 2018年もあと4ヶ月しかない!