2016年10月25日火曜日

golang.tokyo #1 行ってきたメモ

2016/10/25にメルカリで行われたgolang.tokyo #1に行ってきたメモ
http://golangtokyo.connpass.com/event/39965/

Twitterのハッシュタグは #golangtokyo

知らない名前がたくさん出てきて半分以上聞き漏らした

メンバーのGo教育

  • レビューでGoっぽくない書き方を指摘するときは、blogとか外部の資料を参照して指摘する(レビュワー個人の意見ではなく一般的な点だと伝える)

IDEやデバッグ

  • vim, InteliJ, Atom, emacs
    • だいたい何かしらプラグインがある
  • 会場内でデバッガ使ってる人はあまりいなかった
  • Bleveっていうのがあるらしい

コーディング規約は? レビューの指針は? golintに従ってます?

  • 変数名は簡潔にする(Goの文化)
    • でも事業ドメインなコードを書く場合どうしても説明的になっちゃうのは仕方ない
  • 正規表現のMustCompileの使い方
  • golintは対応しておこう
    • ただし辛い場合はベストエフォートで。
    • golint使っとくと、いけないコードをパートナーに指摘するときに言いやすい。

Webフレームワーク・テンプレートエンジン・ORM

エラー処理どうしてますか?

  • pkg/errors
    • 外部ライブラリがまともなエラーを返さない場合にいい感じにwrapしよう
  • errgroup
  • 必須なものがないとかいう場合は積極的にpanic使おう

goのお手本になりそうなもの

ロガー

パッケージ分け

責務で分けたい?機能で分けたい?

  • ドメイン単位で切る
    • ニュース、ユーザーとかのドメインで分けてその中でデザインパターン
  • internalパッケージはライブラリを作るのでなければ使わない方がいい

テスト周り

  • GAE向けのアプリ使う場合でも、出来るだけgo本体だけで完結するようなロジックにして疎にしておく
  • テスティングフレームワーク使わない(testingのみ)
    • テストのためだけのミニ言語を覚えるとかめんどいし、後からのメンバーの受け入れコストもある
  • 出来るだけDBのテストは書かない
    • データはすべてinterfaceを定義しておけばモックできる
  • できるだけDB立ててテストするべきだよ派も

デプロイまでのフローとか工夫してる点、CI

  • goは基本ビルドが早い
    • 循環インポートとか周りから依存されまくってるパッケージが変わるとキャッシュが使われずフルビルド走っちゃう。ビルドが遅い場合は設計が悪いかも。
    • kaneshin「そういう事があって、ペアーズのビルドは遅くなっちゃってる。別に一人で書いてるやつは早いけどね!」
  • 本番ビルドはChatOpsで3回コマンド叩かないといけない、とか
    • 3回の中で他メンバーのチェックを入れるようにしたり

pprof使ってる?本番のモニタリングとかチューニングとか

  • pprofでなくdd
  • stringを+で繋ぐな、とか地味なやつ

リファクタしたいところ/Goのイマイチな点

  • テンプレートエンジン…
  • timeのフォーマット…

メモ

パッケージの分け方について

2016年3月10日木曜日

El CapitanでBlockdiagのインストールに失敗した

事前に入れておくべきソフトウェアを入れてなかったので、遠回りしたよ。という話。

ちゃんとドキュメント読まなかった自分への自戒のために記す。

環境

  • Mac OS X 10.11.3 El Capitan

現象

これで行けるらしいがeasy_installでエラーになった

brew install freetype
sudo easy_install blockdiag

試したこと

  • easy_installのアップデートしてからインストールしなおし
    sudo easy_install -U setuptools
  • こんどはPillowがねーよって言われたので入れる
    sudo easy_install pip
    sudo pip install Pillow
  • funcparserlib「フハハハ、Pillowを倒しても俺が」
    sudo pip install funcparserlib

これで動くようになった

2015年11月15日日曜日

Android StudioとGradle wrapperが違うdebug.keystoreを使う問題

TL;DR

関連issue

Issue 162179 - android - Android Studio and Gradle wrapper use different default keystore - Android Open Source Project - Issue Tracker - Google Project Hosting
https://code.google.com/p/android/issues/detail?id=162179

嘆き

色々試した↓結果

それっぽいissueを見つける

真理に至る

2015年6月2日火曜日

Wii Uを買って面倒くさい繋ぎ方をした

イカのアレがやりたくなったので、Wii Uを買いました。

しかし、テレビを持ってないので、PC用のディスプレイに繋げてます。 しかもHDMIじゃない。
音声は別出力にしてスピーカーに繋げたりで、ちょっと面倒くさい感じになりました。

構成

基本的にまとめwikiの通り。
Display側がDVI-Dでも問題なく繋がって、1080pで映像出力出来てます。

.   Display           スピーカー
    (DVI-D)               |
       |       ステレオ-ミニプラグ変換ケーブル
       |                  |
HDMI-DVI-Dケーブル      AVケーブル----コンポジット映像※使わない
       |                  |
     (HDMI)          (AVマルチ出力)
    Wii U本体 -------------+
  • Display: Dell U2311H
  • スピーカー: Dell AX510PA TFTモニタ用スピーカ
  • HDMI-DVI-Dケーブル: だいぶ前に買ったやつ
  • AVケーブル: Wii U専用AVケーブル
  • ステレオ-ミニプラグ変換: CN-2010A, AP-119A
    <追記 2015/06/06> 変換ケーブルとコネクタの多段はさすがに邪魔だったので、 35SF-R2V を秋葉原ラジオセンターで買ってきた。なんでもあるねあそこ。

繋ぎ方・設定の仕方は、任天堂の説明ページ「 接続例:アクティブスピーカーを使用する場合 」を参照。
設定には、Wii Uの本体のシステムバージョンが4.0.0J以上にアップデート済みである必要があります。

参考

2015年5月30日土曜日

Nexus9にAndroid M Previewを焼く

Android MのDeveloper Previewが公開され、システムイメージも公開されました。
焼く手順は Flashing Instructions に書いてありますが、実際やったら躓いたのでメモ。

環境

  • Mac OS X 10.9.5
  • Android SDKなどはセットアップ済み
  • Nexus9はまだOEMロックしたままだった

手順

  1. Nexus9の開発者オプションで「OEMロック解除」の許可にチェックを入れる。
    ※Androidのバージョンによっては表記が違うかも。
  2. 下記URLからNexus9用のシステムイメージ(volantis-MPZ44Q-preview-d15ad483.tgz)をダウンロードし、解凍する。
    http://developer.android.com/preview/download.html#images
  3. Nexus9をUSB接続する(ADB接続できるようにしておく)。
    adb devicesとか叩いてADBが繋がること。
  4. adb reboot bootloaderを実行する。
    Nexus9にHBOOT(Nexus9のブートローダー)の画面が表示される。
  5. fastboot oem unlockを実行する。
  6. Nexus9の画面が切り替わり、OEMアンロックするかどうか確認される。
    Volume UpキーでYesを選択する。
    データがクリアされた後、ブートローダーの画面が表示される。
  7. ダウンロードしたシステムイメージに同梱されてるflash-all.shを実行する。
  8. なんかエラー出た。
    target reported max download size of 518205818 bytes
    archive does not contain 'boot.sig'
    archive does not contain 'recovery.sig'
    fastboot(13207,0xa14a01a8) malloc: *** mach_vm_map(size=2132963328) failed (error code=3)
    *** error: can't allocate region
    *** set a breakpoint in malloc_error_break to debug
    failed to allocate 2130828644 bytes
    error: update package missing system.img
    image-volantis-MPZ44Q.zipの中身の焼きこみに失敗してるらしい。
  9. image-volantis-MPZ44Q.zipを解凍して、中身の各imgファイルを書き込むコマンドを実行する。
    下記をすべて実行する。
    fastboot flash boot boot.img
    fastboot flash recovery recovery.img
    fastboot flash system system.img
    fastboot flash cache cache.img
    fastboot flash vendor vendor.img
  10. 終わったらリブートする(ブートローダー画面でREBOOTを選択)。
    Android M Previewが起動する。
    ※必要ならOEMロックする。ロックするときもデータはクリアされる。

参考