ZEIT Now v2 を使った Serverless アプリケーションを Go で実装した
TL;DR
- ルーティングは now に任せたほうが綺麗に実装できる
- https://github.com/Code-Hex/slack-invitation
実装
最近自分のための Slack workspace を作ったんだけど、一人だとやっぱり寂しいので誰かを招待したいなと思って Slack の招待フォームを作ることにした。
そこで前から気になってた Serverless を開発するためのプラットフォームである ZEIT Now を使ってみることにした。
続きを読むSlack でセキュリティ的にまずいものを見つけた時に行った対処
Slack の HTML や JavaScript 周りのソースコードに興味があって読んでいた時に良からぬものを見つけてしまったので、その時に取った対処方法をまとめておく。
Slack は基本的に feedback[at]slack.com へメールを投げるといいらしい。
Hey there! Please send your bug report through to feedback@slack.com, where our bug squashing team will be ready to help. 🐛🔨
— Slack (@SlackHQ) April 12, 2018
メールの件名に問題の概要について書き、本文には拙い英語でこれは何が問題なのかという説明を書いた。
そして何度かやり取りをして、最終的にこのようなメッセージをもらった
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 かどうかを知ることが可能になる。ゴールは下記の画像のようになる。
これをするためにやったことをメモする。このコミットはここから確認できる。
これは GitHub 公式記事の Generating a new GPG key を読みながら進めた。
続きを読むGo で実装する Grapheme Cluster を基に文字を数えるバリデーション
Unicodeテキストを1文字ずつ分割するアルゴリズムをUnicodeの仕様として定められており、grapheme cluster (書記素クラスタ)と呼ばれる。
最近 grapheme cluster というものを知った。(こういう概念は知ってたけど名前が知らなかった)
簡単に説明すると例えば á
という文字は人間にとって 1 文字と認識するが、コンピューターの世界ではコードポイント 2 つ(U+0061 U+0301)で構成される。
この令和の時代ではスマホが普及しているので何かしらのサービスを開発するとき、よくある例として Twitter のようにウェブアプリとモバイルアプリが存在する場合あり、例として次のようなシチュエーションが考えられる。
- モバイルアプリでメッセージの入力。140文字の制限があるので入力するたびにそれが分かるようにカウンターが動く。
- モバイルアプリから入力したメッセージをウェブアプリへ送信する。受け取ったパラーメータが正しいか validation などで検証する。(140 文字以内か)
- もし検証に成功すれば DB へ保存、失敗すればモバイルアプリへ失敗した趣旨を返す。
それで今回はアプリ側の文字数カウントの方式とウェブアプリ側でのカウント方式を統一させるために考えたことを忘れないうちにまとめておくことにした。
タイトルに Go を入れたので言語は Go で書く。
続きを読む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 でモードを終了できる!便利!
追記:
escとctrl-cは完全には同じではないので、気をつける必要はありそうです。https://t.co/A7hxfBsHoX
— Pocke(ぽっけ) SW-1309-2807-5790 (@p_ck_) May 24, 2019
ctrl + [ が厳密には esc と同じです!社で隣りにいる @__syumai さんからも指摘をもらいました!