mattak's blog

気の向くままに書く

New Year Resolution 2018

Theme

Nothing ventured, nothing gained.

Recognizing failures, Learning from failures.

Health

Work out (almost) everyday

  • [ ] 6 run / week
  • [ ] 6 sit-up / week

Now

  • 1/1-1/8 running & sit-up everyday

Work

Challenge my mission, rethink workstyle.

  • changing workstyle
  • think & manage by myself (think later the detail mission)
  • improve income

Anyway thinking later the details of what I really need.

English

Keep learning and improve skills.

  • [ ] TOEIC L&R 800
  • [ ] try TOEIC S&W
  • [ ] Go abroad at least two country

Engineering

Goal: keep output, improve skills, enjoy engineering.

  • [ ] Qiita 1 article / week
  • [ ] Presentation 1 / quoter
  • [ ] Create at least 2 library / year

Book

Goal: keep reading and output.

  • [ ] Book 1 book / month
  • [ ] Blogging of each book 1 book / month

Review 2017

mattak.hatenablog.com

❌ Health

Result

  • 62.55kg
  • body fat percentage: 20.55 %
  • run: 43.585 km/month

f:id:mattaclj:20180103231034p:plain

⚠️ Life

Result

  • ❌ get a girlfriend
  • ✅ trip one country (went to us on google io 2017)

⚠️ Engineering

Result

  • ✅ Create 100 star library (Unidux 107 star)
  • ⚠️ Publish my application on android / ios ( only available on android and it was created with my friends)
  • ❌ Create DeepLearning application
  • ❌ qiita: 1500 stock (1111 stock)

❌ Learn

English

Result

  • TOEIC 725 (2017/12)
  • TOEFL
  • ❌ DMM EIKAIWA: 23 times / year
  • ✅ duolingo: complete every lesson (56 / 56)
  • ✅ keep listening of english podcast, movies, and so on.

etc - Attend Google I/O 2017 - Attend State of the map 2017

Spanish

Result

  • ❌ duolingo: 5 / 64
  • ❌ remember: 20 words

Haskell

Result

❌ Book

Result

Conclusion

Totally failed, but I achieved some missions. It's not bad time.

Why am I failed?

  1. I didn't remind these missions
  2. Lack of motivation (some goals are not important for me)
  3. Lack of feedback loop (I didn't record and rethink my problems)

Detail reviews

  • Health
    • I forgot to continue running at the last half of the year and I preferred to use my time to work side businesses.
    • I found that running is strongly related to my programming motivation.
  • Life
    • I found I will never get my girlfriend just be waiting. so next year I will change my way and move by my feet.
    • Tripping is great opportunity to try my english skill. I will continue to go abroad.
  • Engineering
    • I presented Unidux library on 2 times and give me stars. It's so happy to me that my library helps people and solving problems.
    • Deep learning is fun. but I have no chance and motivation to create somethings.
    • Qiita => lazy to write articles
  • English
    • I tried 1.5 month to improve my skills. Listening is good, but reading skill is not enough to archive 700 score. I need to improve learning method.
    • Google IO 2017 and State of the map 2017, pycon 2017 give me great opportunity to speak with native speakers. It's so fun. I will continue to perticipate these conference on this year.
  • Spanish
    • lack of motivation, it's not important one for me now. but learning was fun.
  • Haskell
    • lack of motivation. It's fun but useless now.
  • Book
    • I read many comic books (maybe 2-3 books per week). but I have a lack of passion to read novel and academic books.
    • But it's important and may change my life. I will read great books consciously.

What's next?

  • Create 2018 resolution.

Google IO 2017 健忘録 準備編

前置き

毎年外れていたGoogleIOのチケットがついに手に入った! 一人で初海外旅行ということもあって諸々不安だったので準備した。 準備したことと、得られた知見を雑にメモに残す

英語準備

今年の目標も兼ねて、英語準備をした。

やったこと

  • TOEIC受験 => 680 (R:305, L:375)
  • podcastほぼ毎日 (bilingual news, toeic english upgrater, accidental podcast..)
  • youtube 英語 (rwby, gdcセッション)
  • 週末TOEIC過去問勉強 (2-3ヶ月くらい)
  • duolingo (英語コース全部)
  • dmm英会話

申請系準備

  • パスポートチェック
  • ESTA申請
  • 飛行機予約
  • ホテル予約
  • 周辺イベント予約 (maker faire)

持ち物リスト

  • [x] パスポート
  • [x] GoogleIO ticket
  • [x] 航空チケット (紙)
  • [x] MakerFaireチケット (紙)
  • [x] ESTA (紙)
  • [x] ホテル予約 (紙)
  • [x] SIMカード
  • [x] 歯磨き
  • [x] 財布
  • [x] クレジットカード
  • [x] スマホ x2
  • [x] バッテリー
  • [x] mac book
  • [x] イヤフォン
  • [x] PCカバン
  • [x] 服装 x 3-4日
  • [x] 洗面用具 (歯ブラシ, タオル)
  • [x] 胃腸薬
  • [x] ボールペン
  • [x] ティッシュ

事前学習

  • G+ のGDC JAPANの情報参照
  • clipper購入手順確認
  • SIM利用周り確認
  • uber利用方法確認
  • maker faire準備
  • サンフランシスコ街並み調査 (watchdog2 play)
  • 行きたい場所をGoogleMap上で⭐️
  • 観光名所調査 (地球の歩き方購入)
  • 海外旅行力高い上司に色々雑談

得られた知見

Expedia便利

  • 他のサイトも比較して使ったけど、だいたい最安値だった
  • コメントとかで指摘されている治安状況は注意してみて正解だった

紙準備楽

  • 英語の会話で困ったら、物体として差し出せるので楽。
  • 今日予約してたんだけど、これ (紙を差し出す) というパターンが楽

CLIPPER便利

  • 初めは謎システムだったけど、慣れると楽
  • 完成度の低いSUICA見たいな感じ

英語学習多少効果あった

  • Listening力 => あるほど聞く場面が楽になる. 特に倍速リスニングの耳慣れ効果よかった
  • Speaking力 => 場数踏んで度胸つけるのが大事、雑単語で会話できれば十分何とかなる. 英会話気軽に度胸つくので良い
  • 買い物と、道を渡れなくて困ってるばあちゃんの手を引いて渡してあげるくらいのことはできるようになった。

SIMトラブル

    1. SIMカードケースのピンを忘れて現地で付け替えができなくて困った。空港のショップで専用のutilityが売ってたので解決。
    1. 購入したPrepaidSIM (ZIP SIM) がSMS届くのに、通常の通信できずハマった。何も入力しなくていいはずなのだけど、下記のMMSC設定で何とか解決。

APN settings for cellular data and MMS – ZIP SIM

車社会注意

  • 横断歩道もボタン押さない限り渡れない & ボタン押しても即終了する車最適化の交通システム
  • 電車は運行頻度が低い (caltrainだったら1hに1本くらいの心づもりが良さそう
  • 車でないと到達しづらい場所多数
  • 歩くの結構疲れる
  • でもタクシーあんまり使いたくない…

飛行機の搭乗注意

  • 当たり前だったのだろうけど、2h前に空港にいるのが標準的ってのを前日に調べておいてよかった。割と手間取る
  • 韓国 => サンフランシスコは半日弱くらい飛行機乗りっぱなしなので注意
  • 3回食事 & その度に給水あるので、トイレ行っとかないと死ぬ
  • 飛行機のトイレ混んでる & 窓側だとかなり行きづらい
  • 映画見っぱなし注意. 4-5本見れる (君の名は、アサシンクリード、Moana、嗚呼素晴らしきかな人生、sing)
  • 全起きしてると到着した日が辛い..

New year's resolution 2017

Resolution 2017

Slogan

Beat the average and change my life.

Health

Goal

  • weight : 55kg
  • body fat percentage : 13%
  • run : keep 50km / month

Now

  • weight : 58.7 kg
  • body fat percentage : 18.3%
  • run : 56 km / month

Life

Goal

  • get a girlfriend
  • trip one country

Engineering

Goal

  • Create 100 star library.
  • Publish my application on iOS/Android
  • Create DeepLearning application
  • qiita: 1500 stock

Now

  • 43 star
  • no apps
  • I have learned MachineLearning except CNN.
  • qiita: 873 stock

Learn

English

Goal

  • TOEIC 700
  • TOEFL (take a examination)
  • DMM EIKAIWA: 50 times / year
  • duolingo: complete every lesson (56 / 56)
  • keep listening of english podcast, movies, and so on.

Now

  • TOEIC 630
  • TOEFL no result
  • DMM EIKAIWA: 22 times / year
  • duolingo: 35 / 56

Spanish

Goal

  • duolingo: 32 / 64
  • remember: 500 words

Now

  • duolingo: 5/64
  • remember: 20 words

Haskell

Goal

  • start haskell: complete
  • create parser combinator example

Now

Book

Goal

  • Read 10 books worth reading

Et cetera

  • Discover and try something new to change my life.

Review of 2016

review of 2016

New year's resolution of 2016

mattak.hatenablog.com

△ Health

Good health condition against the 2015. I have done well in half of year, but I was lazy at the end of year.

  • ✅ Running => 56 km / month (chart below)
  • ❌ sit up => ??
  • ❌ push up => ??
  • △ 55kg 10% => 58.7kg 18.3% (54kg 16% at August)

△ English

Improved, but need more practice to listen and speak.

  • △ 1 speak / week => 0.42 speak / week (22 times / year)
  • started dmm eikaiwa, duolingo
  • played with english (ff15, life is strange)
  • listened podcast (bilingual news, accidental tech)
  • watched movies (Rogue one, RWBY)
  • talked on issue, and chat... (Unidux, mapbox-gl-native...)

△ Lifestyle

Bad

  • ❌ do not eat at 9 over
  • ❌ do not play at 10 over

Good

  • cleanup my rooms. discard clothes, books, and the stuff not needed. (affected by KonMari)

△ Reading

Read so many comic books, light-novels. Less reading of serious stuff.

  • ❌ forgot to logging

✅ Release

OSS

App

Sample

Qiita

  • 873 stock

✅ Income

  • Promoted to senior engineer.

Summary

I have done well, but not done my best.

Why I create Unidux.

英語も頑張って書いてみるテスト。

Introduction

今日 Unidux v0.0.1 をリリースしました.

Today, I released Unidux v0.0.1.

僕は一般的にはオレオレアーキテクチャをつくるのは下策だとおもっているのだけど、

I think that it's not good way to create application architecture by oneself.

今回はその考えに反してアプリケーション・アーキテクチャを自作しました.

But at this time, I created handmade application architecture against the idea.

それには理由があります.

There is a reason to create application architecture.

Unity上でアプリケーション・アーキテクチャを具体的に実装したよい例を発見できなかったから。より正確にいうならば、疎結合で、データフローがわかりやすく、状態管理が複雑にならないアーキテクチャを採用した事例が見つからなかったです。

I couldn't find any good application architecture example. If more precisely say, I couldn't find loosely coupled, clear dataflow, not complex state management architecture.

細かい経緯は gotanda.mobile #1 でも発表しました。

Details was spoken in gotanda.mobile #1

speakerdeck.com

それから幾日かたち、Unidux v0.0.1をリリースしたというわけです。

Some day passed, so Unidux v0.0.1 was released.

アーキテクチャはまだ穴が多く改善の余地があるのですが、これからissueを地道に消化していこうと思います。

Unidux is still young and has may bugs, I will solve the issues step by step.

pull requestはいつでも待ってるので興味があればください.

Pull request is always welcome.

GeoHexの最適化

GeoHex v0.0.1をリリースした. ただロジック的にはgeohex4jのコピーに過ぎず、いくつかパフォーマンスチューニングの必要性があると思ってた。 その最適化した時のメモ。

計測

まずは各関数の実行時間を正確に計測する。 実行時間を計測するためのクラスを作成した。

gist.github.com

計測結果

10回ほど計測して平均値をとった。

function original (ms) optimized (ms) shrink time percentage (%)
AdjustXY 1.184e-05 1.1345454545454545e-05 95%
GetXYByLocation 0.0001939 0.0001600909090909091 82.5%
GetZoneByCode 0.008047 0.005785454545454546 71.9 %
GetZoneByLocation 1.872 0.0033481818181818183 0.18%
GetZoneByXY 0.003157 0.0028772727272727274 91.1%
Pow3 3.8473684210526316e-06 4.564593301435407e-06 118%
Math.Pow3 3.6705263157894735e-05 3.489952153110048e-05 95.1%
GetHexCoords 0.0006748 0.00052 77.1%
GetHexSize 9.73e-06 4.9e-06 50.4%

比較のために同じ計算値のMath.Pow3を表示している. 絶対時間が小さく、相対値が10%以内のものは誤差と考えてもよさそうだ。

3の累乗を計算する Pow3,Math.Pow3。AdjustXYなどがそれに該当する。

やったこと

全体のコミット差分はこちら

1. Debug.AssertをException throwに変更

一番効果があったのはこれだった。

Debug.Assert => throw ArgumentExpcetionに変更することでGetZoneByLocationが500倍近く高速化した。 一つDebug.Assertするだけで0.5msほどくってのがまるまるなくなった感じだ。

なぜこんなに重いのかが疑問だったが、とにかくこれが一番効果があった。

2. 計算式の削減

数値計算の基本で演算回数を減らすと高速化するので、式を変形してできるだけ演算回数を減らした。

3. 決まった数の定数化

GeoHexのレベルは予め範囲が決まっておりそのlevel値をもとに3の累乗を計算するので、これを事前計算して配列に突っ込んでおいた。

Math.Powをつかわず計算済みの値をつかうことでかなり高速になる。 GetHexSizeはこれにより2倍程度高速になった。 ただし配列へのアクセスが演算速度を下回っている場合に限るので、環境によっては対して変わらないかもしれない。

4. 割り算の削除

数値計算でもっとも重いのは割り算であるので、これを掛け算になおすように調整した。

5. Math.Floor Math.Ceilingの展開

正の整数であることがわかっているにもかかわらず、Math.Floorをしてしまっていたので普通にキャスト。 また正の整数をMath.Ceilingするさいに、shift演算と加算とAND演算に展開することで高速にした。

Performanceをとってみてもこれは確実に高速化に寄与していた。

6. 比較演算の&&の順序を交換

AND条件で左辺と右辺を交換しても意味的な変化がないものは、はじめの条件が高速なように変換した。 数値の場合、一致比較より順序比較のほうが一般的には高速なはずなのでこれに直す。

7. ループ内変数の外出し

正直あまり効果は計測できなかったが、ループ内の変数は外出ししておいた。 もしかしたらコンパイラがよしなに最適化してくれる部分かもしれない。

結論

パフォーマンスが必要な場面では、Debug.Assertは使わないようにしよう。