Go Conference 2019 Spring に参加してきました

こんにちは、ミツバです。 縁があって、Go Conference 2019 Springに参加することができました。 ありがとうございました。

gocon.connpass.com

聞いたセッション

keynote

goproxyを作成しているケイティーさん

modulesはGoのバージョンの違いを吸収してくれて、Go Proxyではバージョン指定がきついのでプロキシを設けてバージョン問い合わせしたり、zipでの送受信ができるようにして、より楽にパッケージ管理が可能 (英語が危ういので違うかも)

checksumを設けて、本当に欲しいものだけを持ってこれるようにする

Case studies of designing developer friendly libraries

speakerdeck.com

izumin5210さん :Wantedly

developer friendlyとは、simple, easy

Easyだと開発効率が高くなる反面、少し複雑なことをすると爆発してしまう しかしEasyは悪ではない

Goのcontext.ContextはI/Oの時間がかかる処理に利用する メトリクス収集にも利用可能 パッケージでは良く利用されている (例: newrelic/go-agent)

middlewareなどの概念も重要

拡張性の話

Redigoパッケージ doメソッドに処理を書いていく Connをラップすることでロギング周りの処理を変更可能だったりする

google-cloud-goパッケージ optionをNewするときにオプションを受けとれるようになっていて、オプションをさし替えることでユーザのちょっとこったことを実現する

functional option patternが拡張性が高くていい感じ builder patternもパッケージで利用されてたりしていて、拡張性は高め

functional option patternは以下の記事がわかりやすかったです。 qiita.com

wireは最高

Boilerplate生成 環境変数を設定しておくだけで各種設定を読みこんでくれるようなライブラリを作っている 足回りのことはある程度ライブラリに任せる選択もありかもという話

Better asset bundling tool than the best

docs.google.com

shibu_jpさん: フューチャーアーキテクト

ne/httpのファイルシステムについて コンテンツの圧縮とかSPAとかで高速化を行っている

asset bundler から圧縮を解除してnet/httpに渡して、それを読んだ後、またまた圧縮してブラウザに返す処理をするそうなので、これを改善するやつを作ったよという話

brotliというcontent-encodingを利用すると爆速

Goならわかるシステムプログラミングを読みます

SPAの場合

buildしたやつをのローカルに置いておいて、それを読みにいく Goのバイナリ一個を持っていくことでできるようにする

assetsの暗号化もできる、便利

Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決

songmu.github.io

songmuさん

os/execパッケージで外部コマンドを実行できる TeeReaderを利用することで、teeコマンドのようなことが可能 command contextでタイムアウトとかが設定できる でも内部では、SIGKILLで止めてしまう

これによって、孫プロセスがずっと生き続けてしまうらしい SIGTERMを送りたいのだけど、Goはそれは各自でやってもらうという方針

そういうツールを開発 これはGNU timeoutを参考にしているらしい プロセスグループにもシグナルを送れる SIGCONTを送るようにもしておき、停止しているプロセスがあれば叩き起こす

Design considerations for container-based Go applications

speakerdeck.com

hgsgtkさん

環境変数を見て、それらを一つの構造体として取得ができるGoパッケージ

github.com

zapを使ってカスタムロガーが作れる

github.com

ヘルスチェックは、エンドポイント生やして確認する DBなどもアプリケーションのエンドポイントから行ったりするらしい

Design pattern for Image and text composition in Go

timakinさん

赤い四角を書きたければ、各ピクセルに色を入力して画像として吐くようにしたい 画像とテキストの合成を行なう

/image/fontパッケージ imageにテキストを書きこめる

読みこめるfontが足りないので、freeetype/truetypeを使って読みこもうとしたけど、ヒラギノsansが読みこめない (つらい)

デザインパターン

ごにょごにょする

rakyll/statikパッケージ、assets importするときに利用できる

テキストをどこかで画像として保存しておいて、それを画像として合成するのも良い GoでのFont周りは意外ときついらしい

Dive into Buildkit LLB with Go

speakerdeck.com

po3rinさん

mobyの機能を置き替える感じで Buildkitが登場 buildkitdというデーモンが立っていて、それをcliが叩く

buildkitctl のコードを見るとSolveが最終的に呼ばれている そして、llb.Definitionという定義がある

llbとは

ビルド時に利用しやすい構造になっているもの 非循環構造 DAG

llb2dotというツールを作成しこれを利用して、dot言語にして可視化ツールにながせる (便利)

buildkitには、Dockerfile2llbという関数があるので、それを使えば爆速でllb構造が手に入る

buildkitでDockerfileのparserがあるので、それを利用してASTを入手できる Dockerfile linterがお手軽に作れちゃう

Dockerfileを利用しなくてもllbは構築できるので、自作のファイル構造も利用可能

Fuzzy finder as a Go library

speakerdeck.com

ktr_0731さん

行指向なので、オレンジという曲名がたくさんあったら一番欲しいものが不明 fzfを利用しているライブラリはfzfをインストールしないと利用できなかったりする。

なので、Go用のfuzzy finderを作った

検索アルゴリズム

Needleman-wunsch: fzyが利用しているアルゴリズム Smith-Waterman : fzfが利用いしているアルゴリズム

fzy: ALGORITHM.mdにスコアリングのルールが書かれている fzf: algo.goにスコアリングのルールが書かれている

Building Modules Discovery (from Go Team)

Goのパッケージの評価、コードクオリティや依存の話から、モジュールをその評価情報などから検索できるサービスを提供しようとしているよという話 (英語が危ういので違うかも)

Goのパッケージが探しやすくなると非常に熱いムーブメントが起きそうだなと思いました。

全体感想

個人的にGoという言語は、CLIツールなどを簡単に作成できて大好きなので、非常にどのセッションも有意義なものでした。

英語が危ういので、英語を聞きとれるようになりたいなぁと思いました。

buildkitは楽しそうなので、暇があったら中身を見てみたいと思いました。

QMK Firmwareで絵文字を入力する

こんにちは、ミツバです。 この前、行われた天キーでいい感じのキーキャップを入手できたので少し特殊なことをしてみようと思いました。 キーボードは、ErgoDashを利用しています。

Ubuntuでの設定

今回はUbuntu 18.04でやっていきます。

keymap.cを編集

// 一番上に記述
#include "process_unicode.h"

// キーマップ定義の上ぐらいに記述
enum unicode_name {
  THINKING_FACE,
};

const uint32_t PROGMEM unicode_map[] = {
  [THINKING_FACE] = 0x1F914, // THINKING_FACE
};

// キーマップに追加
X(THINKING_FACE)

// 一番下に追加
void matrix_init_user(void) {
  set_unicode_input_mode(UC_LNX);
}

rules.mkを編集

UNICODE_ENABLE = no     
UNICODEMAP_ENABLE = yes 

これで指定したキーで絵文字が打てていると思います。

デモ

MacUbuntuで切り替えて同じことをやる

keymap.cに追記

#include "process_unicodemap.h"
#include "process_unicode_common.h"

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
  ADJUST,

  THINKING_FACE_TYPE,  // 追加
};

// modeを変更するキーコードをキーマップに追加する
UNICODE_MODE_OSX

// THINKING_FACEのコードを追加する
THINKING_FACE_TYPE

// THINKING_FACE_TYPEが押されたときに、やる処理を書く
case THINKING_FACE_TYPE:
  if (record->event.pressed) {
    switch(get_unicode_input_mode()) {
      case UC_OSX:
        register_code(KC_RALT);
        SEND_STRING("D83E+DD14");
        unregister_code(KC_RALT);
        break;
    }
  }
  break;

あとは以下の手順をするだけです。

  • MacIMEUnicode Hex Inputを追加し、メニューバーから show emoji & symbols を選択。
  • 左上の歯車から、Customize Listを選択。
  • Code TablesからUnicodeにチェックを入れて準備完了。

これで UNICODE_MODE_OSX を押したあと、THINKING_FACEを打つと顔文字が出たと思います。

デモ

しかしLinuxでキーマップに設定する以外で、絵文字を入力する方法がよくわからなかったので諦めました。 何か良い案があれば教えてください。

解説

やっていることとしては、無理やりALTを入力してthinking_faceのUTF-16 code unitsを入力しています。 このUTF-16 code unitsは、このサイト で確認できるので入力したい絵文字を各自で調べてみてください。

参考にさせてもらった記事

skyhigh-works.hatenablog.com

Corne Cherryを作成しました

こんにちは、ミツバです。

この前、Corne Chocolateを作ったのですが、Cherryの方も欲しくなり本日作りました。

つくったもの

買ったキーキャップ

遊舎工房さんで以下のキーキャップを購入しました。 非常にきれいな色合いで文字列キーはいい感じでした。 エンターや記号系はキー数がそもそも少ないので、大分余ってしまいました。 なのでまた別のキーボードを作ったときにでも使いたいと思います。

mechanicalkeyboards.com

キーマップ

キーマップを載せておきます。 ADJUSTは未だに利用方法を開拓できていないので、特に設定はいじっていないです。

  [_QWERTY] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
        TAB,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  BSPC,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      CTLTB,     A,     S,     D,     F,     G,                      H,     J,     K,     L,  SCLN,  QUOT,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       LSFT,     Z,     X,     C,     V,     B,                      N,     M,  COMM,   DOT,  SLSH,  RSFT,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  LOWER, GUIEI,   SPC,      ENT,   ESC, RAISE \
                              //`--------------------'  `--------------------'
  ),

  [_LOWER] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
        ESC,    F1,    F2,    F3,    F4,    F5,                     F6,    F7,    F8,    F9,   F10,  BSPC,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      CTLTB,     1,     2,     3,     4,     5,                   LEFT,  DOWN,    UP, RIGHT, XXXXX, XXXXX,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       LSFT,     6,     7,     8,     9,     0,                    F16,   F17,   F18,   F19,   F20, XXXXX,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  LOWER, GUIEI,   SPC,      ENT,   ESC, RAISE \
                              //`--------------------'  `--------------------'
  ),

  [_RAISE] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
      XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,  BSPC,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       EXLM,    AT,  HASH,   DLR,  PERC,  CIRC,                   AMPR,  ASTR,  LPRN,  RPRN,  MINS,   EQL,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       LSFT,  BSLS,   GRV,  LBRC,  RBRC, XXXXX,                   BSLS,   GRV,  LBRC,  RBRC, XXXXX, XXXXX,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  LOWER, GUIEI,   SPC,      ENT,   ESC, RAISE \
                              //`--------------------'  `--------------------'
  ),

ファームウェア書き込みは以前の記事を参照してください。

mitubaex.hatenablog.com

最後に

よい自作キーボードライフを!!!!

Corne Chocolateを遊舎工房さんで作りました

こんにちは、ミツバです。

先日、corne-chocolate遊舎工房 で作りました。

遊舎工房さん

備品がたくさんあり、半田吸い取りなんかもできたりします。 それらの備品が最高でも1000円で使いたい放題なので、遊舎工房さんで作成は価値は十分にあると思います。

作成風景

f:id:MitubaEX:20190416094242j:plain
半田付け風景

f:id:MitubaEX:20190416094334j:plain
キースイッチ取り付け

f:id:MitubaEX:20190416094401j:plain
完成

キーマップ設定

  • qmk/qmk_firmware をforkしてきてcloneする
  • keyboards/crkbd/keymaps/default/keymap.c がキーマップの設定ファイルなので、これを編集します
  • 編集後、make crkbd:default して、 make crkbd:default:avrdude を実行し、リセットボタンを二回押す
  • 左が実行できたら右も実行して終わり

キーコードは こちら を見たら良さそうです

所感

自分で半田付けして、それが動くと感動するしこれが自作キーボードの良さなのかと感じました 自作キーボードだとこの配列にしたいというのが自由自在なので、すごく設定する楽しみがあり良さがすごいのでまた作っていきたいです

YAPC::Tokyo 2019に参加してきました

こんにちは,ミツバです.

YAPC::Tokyoに参加してきたので,その参加レポートを書きます.

参加したきっかけ

普段はPerlを書いたことが全くない僕ですが,シェル芸などのトピックでPerlを利用したワンライナーがあったりして少し興味はあったりしてました. しかし普段はawksedに甘える毎日を送っており,Perlを触る機会を作ってこなかったです. そんなときにYAPC::Tokyoというカンファレンスがあることを知り,ここでPerl入門を決意しました.

前夜祭(カンファレンス前日)

カンファレンス前日には前夜祭があり,なんとか遅刻せず参加してきました. 前夜祭では,テンポよくLTが繰り広げられ楽しい会でした.

発表も面白く,内容としては,

  • PerlLispインタプリタを書いて,その上でPerlを動くようにしたものの発表を聞いたり,
  • 日本の祝日についてのライブラリ更新事情を聞いたり,
  • AWS CDKのお話を聞いたり,

様々な方面で楽しい会でした.

以下に会場の様子の写真を貼っておきます.

f:id:MitubaEX:20190127173214j:plain
ご飯の様子です

カンファレンス当日

カンファレンス当日は11時からオープニングトークが開始されました. 今年のテーマは報恩謝徳,「恩に感謝し報いること」という意味があるそうです. 深い.

僕が聞いたトークを並べるとこんな感じです.

  • チームが前に進み続けるために僕たちが考えたこと
    • papixさん
  • 私とOSS活動とPerl
    • duck8823さん
  • メッセージングのプロトコル
    • 加藤亮さん
  • ゲストスピーカー: 大仲さん
  • ゲストスピーカー: 広木さん
  • ログにやさしいDB設計
    • fist0さん
  • CPAN Module Hacks
    • akiymさん
  • ISUCON8予選問題作成の裏側
    • karupaneruraさん
  • 多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと
    • songmuさん
  • キーノート: tokuhiromさん

どの発表もためになるものばかりで聞いていて気持ちよかったです.

特にゲストスピーカーのお三方の話は,どれも興味をそそられ釘付けになって聞いていました.

大仲さんは,Perl on RailsというテーマでRailsの力を用いて,Perlのプロダクト開発の効率を高めることを目指したお話をされていました. 名前からすごく面白いテーマですが,中身はすごくしっかり考えられていてAPI REPLなども作成し,より効率化を図っていました. APIのテスト用のREPLという発想は僕には全然なかったので,すごく知見をえれました. そしてActiveRecodeを入れてER図を自動で生成できるようにしたりと,Rubyを長年やってきた大仲さんだからできる応用力なんだなと思いました.

次に広木さんのお話では,「エンジニアリング組織論への招待」に関連したお話を聞きました. ここで印象的だった言葉が,「エンジニアと非エンジニアの非対称性を埋める」という言葉です. ここでの「非対称性を埋める」という言葉は,他者との知識の共有度合いを均等にすることだと,私は捉えました. そしてこれによって,ソフトウェア開発の様々な不確実性を減らしていこうというテーマのお話でした.

speakerdeck.com

最後にキーノートのtokuhiromさんのお話では,tokuhiromさんのPerlに触れてきた人生のお話を聞きました. そしてコミュニティへの貢献方法のお話も聞きました. 僕はsongmuさんのトークも聞いており,それと合わせてもっとアウトプットしていかないとと思いました. 最後のスライドには「Future Perl Community is You!」という言葉がありすごくエモかったです.

以下に会場の写真を載せておきます.

懇親会

Acmeという言葉がよくわかっていなかったのですが,丁寧に教えていただき興味を持ちました. あとは内定先のメンターと話したり,楽しく過ごしていました.

感想

Perl全然わからんという状態で参加したものの,すごく初心者にも親しみやすい発表が多くて勉強になりました. 今年が初参加だったのですが,来年も参加してLTとかしてみたいなと思いました.

最後にPerlに入門できたのか?という話なのですが,モジュール周りのお話は入門できたかなと思いました.これから他もやっていきたいと思います.

freeeに内定をもらうまでの人生

こんにちは,freeeに19卒で入社するミツバ(中村潤)です. これはfreee 19新卒Advent Calendar 2018の14日目の記事です

adventar.org

内定式では特にニックネームについて言ってなかったのですが,ミツバが僕の本名みたいなものなので気軽にミツバと呼んでください.😎

最近の関心ごとは,Haskell圏論です.趣味は,アニメ鑑賞(GRIDMAN)とVTuber鑑賞(ハニスト)です.

何書こうかなぁとか考えましたが,みんな内定をもらうまでのいろいろを書いているので,僕も便乗することにします. ちなみに僕が過去に書いたそれっぽい人生の記事はこちらです.

note.mu

インターンまで

freee社のことは逆求人で知って,去年先輩がインターンに行ったとのことだったので少し興味が湧いてエントリーしました. 面接を何回行ったとかはあまり覚えていませんが,GO言語がよさみに溢れてそう!みたいなことを喋ったら通った記憶があります.

インターン

僕が参加したインターンは,2017/8/21(月)~ 2017/8/25(金)の一週間のものです.

あと,当時の僕のツイートも合わせて載せておきますね.(なんで?)

インターン初日

この日は,会社に初出社し挨拶なりなんなりをしてメンターと挨拶をした後,即昼飯って感じでした. ここでAdvent Calendar1日目のスポーンくんと奇跡の邂逅を果たします.

そのあとは,PCのセットアップ周りをずっとして1日がすぎました. 特にリポジトリをcloneするのにすごい時間がかかり,僕はその間にコーラを3杯は飲んだと思います. そしてこのインターンのおかげでコーラが飲み放題の会社,神では!?と思ってしまい,この後の就職活動で出会った会社にはコーラが無料か?と質問しまくる人間になってしまった・・・😫


インターン2日目

業務のissueを一つもらってそれをやる流れでした.

某社員の人にVim (Editorです)はやべぇみたいなことを言われた気がします.でも当時の僕はそれほど強くなかったので,お恥ずかしい限りです.😱

  • これが当時の僕のvimrcです.

  • これが今の僕のdotfilesです.

◯◯が入ってないやん!って思った方は,優しく裏で教えてください!


そしてissueでは,フロントの改修を任されていたのでReactを学びつつコードを読んでいました.

Reactをインターンで初めて触って二日目で概念を理解するところまでいけました.最高にqiitaを漁った記憶があります.同じインターン生でインターン中にTour of Goをやって即実践している人もいて,みんな早えぇなって感じでした.


インターン3, 4日目

こっからはずっとコード読んでた気がします.

3日目には退勤後,串カツ田中で社員の方達と飲みを行いました. ちなみに串カツ田中は,関東圏に大量にあるのですが関西には全然ないので存在を知ったのはこの時でした.

👇は串カツ田中のスタンプで,社内slackでなかなかの頻度で使われていました.

f:id:MitubaEX:20181214135102g:plain
串カツ田中スタンプ


インターン最終日

最終日は,自分の一週間でやったことを紹介する感じでした. 僕の発表は,ぼちぼちウケていたのでウケる.😼

その後

インターン後,面接がぽつぽつあり気づいたら内定をもらっていて,内心は!?!?って感じでした. そこからは12月まで就職活動を続けて,freeeの内定を承諾した流れです.

言いたいこと

インターンに行ったことで物事の考え方が変わったし,本当に行って良かったなと思ってます. 僕は個人的にいろんなものを雑に触るのが好きで,そこまでスペシャリストになるわけではないという人間です. なので,初めて触る技術の取っ掛かりも雑に理解しようとしました. それが逆に良かったのかなぁと思ったりしています. もしすごく奥の奥まで調べ上げるような人間だったら,多分インターン中に一つもissueをこなせなかった説が濃厚です.(そもそも実力があまりない)

何が言いたいかというと,別に未経験とか経験が豊富とかはあんまり関係がなくてどう物事を自分の考えに落とし込むかがこの先たくさん必要になってくるだろうから,頑張っていこうぜ!ということです. なので,みんな爆速で「完全に理解した!」と言うべきだと思っています.はい.🙋‍♂️

偉そうなことを言いましたが,こういうポエムが好きなので仕方ない.

ちなみに同じ19卒内定者のnakochiさんの記事が最高に心に響く内容だったので,ぜひ読んでください.😆

note.mu

最後に

長くなりましたが,こういう記事を書ける機会を作ってくれたfreee19卒内定者のみんなに感謝.

明日の記事は中川くんです.お楽しみに!

Macの日本語入力のためにSKKを導入した

SKKとは

Emacsのために開発された日本語入力システムだそうです。(僕はVim使い)

SKK - Wikipedia

Install

今回はMacを利用するので、codefirst/aquaskkを利用しました。

↓のReleaseページにpkgファイルが置いてありました。

releases

Usage

まずインストールが完了したら、キーボードの環境設定から入力ソースの中にAquaSKK 統合を選択してください。 すると利用できると思います。

SKKにはいくつかモードがあるらしく、それを紹介しておきます。

  • 日本語入力モード
  • カナモード
  • 英字モード

日本語入力モード (Ctrl + j で 切り替え)

日本語入力モードは、なにも押さない状態で日本語を打つとそのままひらがなが入力されます。 そして漢字変換をおこない場合は、Shift + 何か入力したい文字 を入力してください。 すると▽が出てくると思います。 そこで変換したい文字列を打ち、Spaceを入力するとその漢字の候補があれば変換してくれます。

そして、SKKは辞書に登録されていない変換をしようとすると、候補がないことを伝えてきます。 この時、ユーザはSKKに自分の変換したい文字列を伝えることで、SKKは次からその単語を候補として出してくれます。

つまり、自分で育てる日本語入力システムという感じですね。

辞書への登録を行なう時は、そのまま [登録:へんかんしたい]変換したい のように入力すると登録してくれます。

カナモード (q で 切り替え)

ただカタカナが無限に打てるモードです。

英字モード (l で 切り替え)

ただ英字が無限に打てるモードです。

↓のマニュアルに書いてあることが大体いけます。

SKK Manual

感想

SKKの個人的に気にいっている所は、エンターを入力する頻度が少なくなったことです。 普通の日本語入力だとひらがなでも、エンターを入力しないといけませんもんね。 しかし、Shiftを入力する頻度がすごく多くなっている感じで、どっちがいいのかはわかりません。 でもこれで少し日本語入力が楽しくなった気がします。(モードという概念)