oinume journal

Scratchpad of what I learned

Entries from 2018-01-01 to 1 year

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 like bellow: package main import ( "fmt" ) type Foo interface { MethodA() MethodB() MethodC() MethodD() } type FooI…

2018年10月の振り返り

アルゴリズム BTreeをやっているけど、時間がなくて実装ができずに止まっている。 ブロックチェーン 進捗なし lekcijeのインフラ引っ越し CircleCIでdocker buildしてGoogle Container Registryにpushするところまではできたので、あとはKubernetesのyamlを…

direnvから.envをロードする

.envrcファイルに dotenv と書くだけで、現在いるディレクトリの .env ファイルを読んでくれる素敵な仕様を発見した。これでdirenv使いながら.env形式しか受け付けないアプリケーションにも対応できてめでたしめでたし。 以下は具体的な例。 $ cat .env PORT…

2018年9月の振り返り

9月は10日間の奥さんの出張があったこともあり、本当にあっという間だった。 アルゴリズム 次はBTreeをやろうと思って、その前にAVLTreeやらないとダメそうで、そういえばBinarySearchTreeも実装したことないなって思ってBinarySearchTreeを実装した。 10月…

2018年8月の振り返り

アルゴリズム Boyer Moore法やった 次は何をやろうかと悩んだ結果、データベースでよく使うBTreeをやることにした。 ブロックチェーン https://www.udemy.com/ethereum-and-solidity-the-complete-developers-guide/?deal_code=JPA8DEAL2PERCENTAGE&aEightID…

2018年7月の振り返り

機械学習 進捗なし。次からは振り返り対象から外す。 アルゴリズム 文字列探索で力まかせのアルゴリズム実装した ブロックチェーン https://www.udemy.com/ethereum-and-solidity-the-complete-developers-guide/?deal_code=JPA8DEAL2PERCENTAGE&aEightID=s0…

Goのhttpパッケージだけでmiddlewareを実装する

Go

標準ライブラリのhttpパッケージだけでもmiddlewareは簡単に作れますよ、というお話。 おさらい: http.Handlerまたはhttp.HandlerFuncでやり取りする Goのhttp.Handlerやhttp.HandlerFuncをちゃんと理解する - oinume journalに書いたとおり、 http.ListenAn…

GoのWeb Application Frameworkでオススメは?

Go

GoのWeb Application Frameworkでオススメは?という質問をよく受ける。 標準ライブラリのhttpパッケージ使えばおk とまずは返答している。ただ、RESTで様々なHTTPメソッドをサポートする必要があり、かつ /v1/users/{id} のようなPath内にIDが入る場合の対…

読書: 新しい文章力の教室

新しい文章力の教室 苦手を得意に変えるナタリー式トレーニング できるビジネスシリーズ作者: 唐木元出版社/メーカー: インプレス発売日: 2015/08/07メディア: Kindle版この商品を含むブログ (2件) を見る 自分の文章力を高めたいと思ってこの本を買ってみた…

Goのhttp.Handlerやhttp.HandlerFuncをちゃんと理解する

Go

はじめに GoでHTTP Serverを作ろうとすると、標準ライブラリを使う場合以下のようなコードをよく書くと思う。 package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/hello", http.HandlerFunc(hello)) log…

2018年6月の振り返り

機械学習 進捗なし アルゴリズム hash tableのオープンアドレス法の実装した Boyer Mooreの文字列検索のアルゴリズム学んだ ブロックチェーン 進捗なし lekcijeの月額課金 Stripeでsubscriptionの初月無料が簡単にできるということがわかった その他細々とし…

2018年5月の振り返り

機械学習 Udemyのキカガクのコースは全部やり終わって、単回帰分析ならできそうな気がしてきた アルゴリズム hash のオープンアドレス法の実装やってない ブロックチェーン(New) やりたいな。とりあえずUdemyのこの講座に課金した lekcijeの月額課金 Stripe…

Generating an unpredictable random value in Go

There are a lot of examples to use math/rand. However, should use crypto/rand if you want to generate an unpredictable random value. That's because crypto/rand uses getrandom(2) if available, /dev/urandom otherwise on Linux. As a real worl…

課金している有料のMacアプリ

Mac

自分的に もうこれがないと生活できない というMacの有料アプリ集。 Alfred 高機能なランチャー。£19。 クリップボードのコピー&ペースト Chromeのブックマークを検索して開く 英和・和英辞書 計算機 IntelliJ IDEA コードを書く時はこれを使っている。Inte…

Comparing datetime in Golang

Go

https://play.golang.org/p/5-BtaE6iXaP time.Before and time.After package main import ( "fmt" "time" ) func main() { t1 := time.Date(2018, 1, 1, 10, 0, 0, 0, time.UTC) t2 := time.Date(2018, 1, 1, 11, 0, 0, 0, time.UTC) fmt.Printf("t1.Before…

2018年4月の振り返り

その1. 機械学習 まだ 【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 初級編 - が終わっていない。3分の2ぐらい。5月中には終わらせたい。 その2. lekcijeに月額課金 手付かず。 その他 Hashtable だいぶ昔に実装したHashtableをGoで実装した…

2018年1Qの振り返り

2018年も早くも4ヶ月が過ぎてしまったので、1Qの振り返り。3ヶ月スパンの振り返りだと何をやったのか忘れてしまうので次からは1ヶ月単位で振り返ろう。 その1: 機械学習 ゼロから作るDeep Learning を読むのはいったんペンディングにして、Udemyの 【キカガ…

grpc-gatewayでRESTful APIを実装する

背景 何かしらの理由でRESTでAPIを実装しなくてはいけない時に、JSONを直接扱うのは面倒くさい。具体的には、JSONをデシリアライズして内部のデータ構造にマッピングする処理を書くのが面倒だ。というわけで、grpc-gatewayを使ってProtocol Buffersを定義す…

Google Apps Scriptで外部のREST APIを呼び出す

Google Apps Script(GAS)から外部のREST APIを呼ぶには、UrlFetchApp.fetch というメソッドを呼び出せば良い。例えばJSONをリクエストのペイロードとして送る場合のサンプルコードはこんな感じ。 var data = { 'email': email, 'subject': subject, 'message…

Google Driveの画像をブログに埋め込む

いっっっつもやり方を忘れるので未来の自分のためにメモ。 1.Google Driveで対象の画像ファイルを選択して開く 2.画像が表示されるので、右上のメニュー(縦の...のアイコン)から 新しいウィンドウで開く をクリックする。 3.開いたウィンドウの右上のメニュ…

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

ググってもあまり出てこなかったのでメモ。Googleフォームで メールアドレスを収集する という設定をONにすると、フォームの回答を記録するSpreadsheetにメールアドレスが保存されるようになる。 これをGASのスクリプトからどうやって取るんだろうと思って調…

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","erro…

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

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

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-…

2018年の抱負

あけましておめでとうございます。まだ1枚も年賀状の返信出してないです。今年も例によって新年の抱負。 過去の振り返り 新年の抱負をかかげても達成できないことが多いので 目標を2つに絞る 3ヶ月ごとに必ず振り返りをする 目標達成のためのマイルストーン…

2017年の振り返り

あけましておめでとうございます。大晦日は2017年の振り返りをせずに息子の寝かしつけで寝落ちするという体たらくだったので2017年の振り返りをさせてください。 仕事 メルカリに新しい決済手段を追加するというプロジェクトに入り、4月からついにPHPを書き…