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 さんからも指摘をもらいました!
最高のエンジニアになる方法
ソースは tumblr 公式の engineering tumblr より。
engineering.tumblr.com簡潔にとても良いことが書かれてたので、これを自分なりに翻訳する。
エンジニアだけじゃなくて世の中の社会人にも言えそうなことだと思う。
ミリ秒で sleep する Perl ワンライナー
tl;dr
shell script 書く時に各 OS 共通でミリ秒を書くのにまあまあ苦戦する時はこのワンライナーを使うと簡単っぽい!
perl -MTime::HiRes=sleep -e sleep -e 0.05
Time::HiRes は Perl のコアモジュールとして結構前のバージョンから含まれてるらしい。