アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

ZEIT Now v2 を使った Serverless アプリケーションを Go で実装した

TL;DR

実装

最近自分のための Slack workspace を作ったんだけど、一人だとやっぱり寂しいので誰かを招待したいなと思って Slack の招待フォームを作ることにした。

そこで前から気になってた Serverless を開発するためのプラットフォームである ZEIT Now を使ってみることにした。

zeit.co

続きを読む

Slack でセキュリティ的にまずいものを見つけた時に行った対処

Slack の HTML や JavaScript 周りのソースコードに興味があって読んでいた時に良からぬものを見つけてしまったので、その時に取った対処方法をまとめておく。

Slack は基本的に feedback[at]slack.com へメールを投げるといいらしい。

メールの件名に問題の概要について書き、本文には拙い英語でこれは何が問題なのかという説明を書いた。

f:id:codehex:20191015151345p:plain

そして何度かやり取りをして、最終的にこのようなメッセージをもらった

Thank you so much for this additional information, Kei, and again for flagging this!

I have shared your finding with the security team here at Slack.

Have a great week ahead.

これは日曜日くらいに送ったものだが、向こうからの返信がとても早かったので月曜日にやり取りが終了した。

そして最初で codehex だよ!って書かなくても良かったみたい...

GItHub で GPG 署名つきの commit をする

GPG 署名付きの commit をすることで、由緒正しき人物からの commit かどうかを知ることが可能になる。ゴールは下記の画像のようになる。

f:id:codehex:20191012133601p:plain

これをするためにやったことをメモする。このコミットはここから確認できる。

これは GitHub 公式記事の Generating a new GPG key を読みながら進めた。

続きを読む

Go で実装する Grapheme Cluster を基に文字を数えるバリデーション

Unicodeテキストを1文字ずつ分割するアルゴリズムUnicodeの仕様として定められており、grapheme cluster (書記素クラスタ)と呼ばれる。

hydrocul.github.io

最近 grapheme cluster というものを知った。(こういう概念は知ってたけど名前が知らなかった)

簡単に説明すると例えば という文字は人間にとって 1 文字と認識するが、コンピューターの世界ではコードポイント 2 つ(U+0061 U+0301)で構成される。

この令和の時代ではスマホが普及しているので何かしらのサービスを開発するとき、よくある例として Twitter のようにウェブアプリとモバイルアプリが存在する場合あり、例として次のようなシチュエーションが考えられる。

  1. モバイルアプリでメッセージの入力。140文字の制限があるので入力するたびにそれが分かるようにカウンターが動く。
  2. モバイルアプリから入力したメッセージをウェブアプリへ送信する。受け取ったパラーメータが正しいか validation などで検証する。(140 文字以内か)
  3. もし検証に成功すれば DB へ保存、失敗すればモバイルアプリへ失敗した趣旨を返す。

f:id:codehex:20190929182753p:plain

それで今回はアプリ側の文字数カウントの方式とウェブアプリ側でのカウント方式を統一させるために考えたことを忘れないうちにまとめておくことにした。

タイトルに Go を入れたので言語は Go で書く。

続きを読む

RACI を使った責務の明確化

今日会社ではじめて「RACI」という言葉を知った。

会社では呼び名が分からなかったのでずっと「ラッシー」と呼んでいたが、本当は「レイシー」と呼ぶらしい。RACI matrix と呼ぶっぽい。

これはプロジェクトや社内での何かしらの工程での役割分担を matrix を使って明確描写するビジネスツールとのこと。

タスクを 4 種類の参加者の責任型に分割し、各参加者には異なる役割が割り当てられる。そしてそれぞれの役割は下記のように決まっている。

続きを読む

Go のバイナリを Perl スクリプトとしても扱う

環境は macOS 10.14.4 で go1.12.5 です。

まずは次のコードを読んでみましょう

package main

import (
    "fmt"
    "io/ioutil"
)

const script = `
#!perl
print "Hello, Perl World!!";
__END__
`

func init() {
    ioutil.Discard.Write([]byte(script))
}

func main() {
    fmt.Println("This is Go world!!")
}

これをビルドして実行してみます

go build -o main main.go

こうすると main という実行用のバイナリができますね。

通常通り実行してみましょう。

$ ./main
This is Go world!!

今度は Perl で実行してみましょう

$ perl -x ./main
Hello, Perl World!!

ワオ!!

続きを読む

vim で esc の代りに ctrl+c を使う!

今日 @osamingo さんに教えてもらいました!
esc の代わりに ctrl + c でモードを終了できる!便利!

追記:

ctrl + [ が厳密には esc と同じです!社で隣りにいる @__syumai さんからも指摘をもらいました!