アルパカ三銃士

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

Go で sqlx 拡張のトランザクションマネージャを書いた

sqlx-transactionmanager

github.com

これは Perl でいう @nekokak さん作の DBIx-TransactionManager をベースに作ったもの。今担当している会社のプロジェクト内で github.com/jmoiron/sqlx を使っており、それの transaction manager があるといいよねーとなったので作成した。

続きを読む

作った bash スクリプトを誰かと共有したい時に気をつけたいこと

以前同期と bash でパイプライン cd を使えると便利だよねーという話から次のような override cd の関数を考えた。

function cd() {
    if [ -n "$1" ]; then
        arg=`cat`
        builtin cd "$arg"
    fi
}

こうすると echo $HOME | cd とかで移動できるが、これを bashrc に登録したことで共有された bash スクリプト内で cd を行う時に事故が多発したという話を聞いた。

それは大変だと思いながら放置をしていたが、ふと思い出して試してみたことを記述。 環境は macOS High SIerra

続きを読む

GoCon に参加して本当に良かった話

今回 CFP を提出して選ばれ、念願だった GoCon へ参加することができた。

そして、本当に良い体験をしたため忘れないうちに記録する。

この記事を読んでて GoCon に参加しようか迷っている人がいれば勇気を出して是非参加して欲しいと思っている。

こういう自分の好きな言語やサービスのコミュニティが開催する大きなイベントは、みんな自分と同じ共通の趣味を持っている人達だから、絶対に楽しい会話ができるため、沢山の人に話しかけてみるといいと思った。

なお登壇した内容の記事は以下のリンクで。

codehex.hateblo.jp

続きを読む

Go Conference 2018 Spring へ登壇しました

Goroutine meets a signal というタイトルで登壇しました。

これは Golet という Perl でいう Proclet を Go に移植した際に閃いたアイディアでした。

親プロセスである Proclet へ SIGTERM, SIGHUP が送信された場合に、Proclet で管理している子プロセスへ SIGTERM を送信するといった挙動を持っていました。SIGTERM は処理を終了させるために用いられますが、プログラムによってはシグナルを受け取った時の挙動を上書きされている場合があるため実質、シグナルの情報を子プロセスへ送信することになると僕個人で解釈してました。

そのため、Go に移植する場合は goroutine で管理するようにし、主プロセスである Golet へシグナルが送られてきた場合、その情報を全ての goroutine へ通知することを目標としました。

そして Golet ではコールバックを指定することが可能なんですが、context.Context は必ず必須であり、それ以外にも golet 専用の Context も引数として渡さなければいけない状況でした。これだとどっちが一番大事な Context なのか分からなくなります。

そのため今回発表したような形をとることで、Context を単一化することに成功し、Go らしくシンプルに記述することが可能になりました。

この手法は本当に時と場合によると思いますので、様々な Go ハッカー達が議論するきっかけになればいいなと思います。

株式会社メルカリへ入社しました

昨日まで無職でしたが、本日より社員になりました。

メルカリは現在、エンジニアとしてベストを尽くせる環境を提供していると思っているので選択しました。優秀な同期も沢山いるので、とてもワクワクしています。

現在の目標

大学生活では自分の作りたいものを積極的に開発してきましたが、今後はオープンソースも含め、誰かの役に立つようなプロダクトを開発していけるといいなと思っています。

とりあえず開発以外でやっていきたいこととして

  • 積極的に新しいことにチャレンジする。
  • 定期的に沖縄へ還元していけるように何か沖縄でもやりたい。
  • 楽しむ!!

なかなか困っています

こちら新生活を支援していただける方へ向けてのリンクです。 お礼に一緒にご飯食べに行けるといいなと思っていますので宜しくお願いします!!

http://amzn.asia/f4GNcgA

来年は支援できる側になりたい...!!!!

頑張っていきますので、これからもどうぞ宜しくお願い致します🙇

Acme::Pointer をリリースしました

metacpan.org

こんな感じの文字列を渡してあげるとデリファレンスしてくれます。

CODE(0x7fd541a84a30)
HASH(0x7fd541a84a30)
ARRAY(0x7fd541a84a30)
SCALAR(0x7fd541a84a30)

なのでリファレンスの文字列さえ保存しておけば、参照先が生きている限り実体へアクセスが可能です。

#!/usr/bin/env perl

use strict;
use warnings;
use feature qw/say/;
use Acme::Pointer;

my $addr;

package Hello {
    my $a = sub { say "Hello"  };
    $addr = "$a";
    say $addr;
};

say "-" x 10;
my $c = deref($addr);
$c->();

if ($addr =~ /CODE\((.*)\)/) {
    my $_c = pointer($1);
    $_c->();
}

株式会社はてなに入社しました

株式会社はてなに入社しました

株式会社はてなに入社しました - hitode909の日記