アルパカ三銃士

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

Perl で簡単に n 文字ずつ区切る

Perl である文字列を n 文字ずつ区切って配列にする方法。

例として "abcdefghi" が与えられた時に 3 文字ずつで区切りたい場合は "abc", "def", "ghi" となることが期待される。

これを簡単に行う方法を思いついたので以下に記述。

sub sep { $_[0] =~ /.{$_[1]}/g }

# 3 文字ずつ取得
my $str = "abcdefghi";
print "$_\n" for sep $str, 3;

3 文字の場合何をしているかというと sep サブルーチンの中では実質、次の正規表現が実行される。

"abcdefghi" =~ /.../g

これが 3 文字ずつで区切った配列を返す。それで .{$_[1]} としているのは上記の条件だと .{3} となり、... と等しくなる。

これは便利!!

Perl で Protobuf を扱うために Google::ProtocolBuffers::Dynamic を使ってみる

こちらは Perl Advent Calendar 2018 の 25 日目です。

gRPC を Perl でやってみようと思ったのですがインターネット上に Perl で Protobuf を扱うような文献がなかったので、まずはここから書かないとだめでしょう!ということで内容を変更してお届けします。

Perl で Protobuf を扱うのに適したモジュールは 2018 年現在だと Google::ProtocolBuffers::Dynamic が一番良さげっぽい。しかし、proto2 には対応しているが proto3 の機能に一部対応できてないとのこと*1

metacpan.org

続きを読む

WEB+DB PRESS Vol.108 の Perl Hackers Hub に Inline::C で始める C 拡張入門に関する記事を寄稿しました!!

僕自身 C 言語を使って Perl を拡張することが好きだということもあって、今まで何回か XS を使ったモジュールの公開や、それらについての内容で登壇もしました。

(今までリリースしてきたモジュール一覧)

Kei Kamikawa (CODEHEX) - metacpan.org

寄稿内容は Perl をやっていれば一度は絶対耳にする Inline::C モジュールについてです。

metacpan.org

Inline::C がどんなモジュール化簡単に紹介しますと、Perlソースコード上で C 言語のコードを埋め込み実行することが可能になる超変態モジュールです。C 言語で記述した部分はちゃんとコンパイルされるので実行速度も Perl よりも格段と早くなります。

この内容に関して知っている方はとても多いとは思いますが、実際に Inline::C を使ってコードを書いたことのある方って実は少ないのでは?と感じたことが有りました。そこで寄稿した内容として

  • Perl を C で拡張するための入門として、なぜ Inline::C なのか
  • Perl で C を使うのにはどんなメリットが有るか
  • Inline::C で Perl の C 拡張を書いてみよう
  • 実際行っている処理はどんな感じなのか
  • Inline::C から XS へ進むために参考になるモジュールや参考になる資料

などなどです。

サポートサイトからダウンロードできるサンプルコードも幾つか用意したので、是非一度この機会に Inline::C と戯れてみてください。「こんな事できたんだ!!」といった発見もきっとあるはずです。

WEB+DB PRESS Vol.108 は今月 12 月 23 日に全国の書店にて発売します。Perl Hackers Hub 以外にもとても興味深い特集が沢山あるのでぜひぜひお手にとってみてください。

謝辞

編集を担当して頂いた技術評論社の稲尾さんを始め、直接監修して頂いた牧さん、お誘い頂いた songmu さん、職場のチームの方々に様々な場面で助けて頂いたことを非常に感謝しています。本当にありがとうございました。

宣伝

来年の 1 月 26 日に YAPC::Tokyo が浅草橋ヒューリックホール&ヒューリック カンファレンスで開催されます。一般・学生チケットがまだ残っているようなので検討している方はとりあえずチケットを確保して、当日参加することをオススメします!(僕も行きます!!)

yapcjapan.org

モニタリングするためにどんなデータを集めるべきか

Datadog のブログで公開されている "Monitoring 101: Collecting the right data" を読んだ。本記事は紹介した Datadog のブログ記事を独自に簡略化したものである。もっと詳しく知りたい場合は Datadog の記事を読むと良い。  

記事では次の項目を実現するためにどんなデータを収集し分類するかが記載されている。

  1. 自動検知によって潜在的な問題に効果的なアラートを受信する。
  2. 素早く調査を行いパフォーマンスに関する原因へ到達する。
続きを読む

XS で SV がスカラバリューであるか判定する

たまたま Perl のモジュールを漁っていると汎用性が高そうな関数を見つけたためメモ。

#ifndef isGV_with_GP
#define isGV_with_GP(x) isGV(x)
#endif

STATIC bool
is_scalar_type(SV *sv) {
    return !(
        SvTYPE(sv) == SVt_PVAV
     || SvTYPE(sv) == SVt_PVHV
     || SvTYPE(sv) == SVt_PVCV
     || isGV_with_GP(sv)
     || SvTYPE(sv) == SVt_PVIO
   );
}

これは PadWalker モジュールのコード。

y8 in 城へ参加してきました

岡山城でした。カンファレンス会場は不明門*1で、懇親会 + LT が岡山城でした!

connpass.com

岡山

今回は東京 -> 岡山の飛行機で行きました。

びっくりしたのが岡山の空港名が「岡山桃太郎空港」であったことと空港の周辺が森であったこと!!!

着いて最初の 10 分はどうやって岡山駅まで行けば良いか分からずずっとウロウロしていましたが、案内カウンターみたいなのを見つけて聞いたところ岡山行きのバスが有るということを知って無事に岡山駅まで行けました。

そして夜は uzulla さん達と

岡山城までは現地のシェアサイクルサービスのももちゃりを活用して向かいました。超便利。

岡山城へ到着して写真を撮る。

カンファレンス

カンファレンスの部は聞き入ってしまってて全然ツイートできなかった...

中でも一番良かったのが tomzoh さんのパチスロの仕組みというかエンジニア目線で見たパチスロの話でした。公開できないような内容だったのでこれは岡山城に来た人長が得られた特典だなと強く思いました。

やー乱数生成機を使うタイミング大事だなーと...

懇親会

今回は LT をしてきました。

digispark を使った1ボタンで作るモールスコードキーボードの話をしたんですが、完成していた本体を沖縄に忘れた + それのおかげで徹夜で開発にチャレンジ失敗したためデモを見せることができずに謝罪して終える形になった。

しかし皆さん LT がお上手で笑いまくりだった...

ここで急に懇親会で出てきた美味しかった🍣

感想

普段 Perl と Go のイベントばかり参加していたので他のコミュニティに属する知らない方々と交流することもできてよかったと思います。前日の飲み会とか何故か地元の先輩伝説とかの話をしてしまい懐かしい気持ちになったのはいい思い出です。

運営してくださったスタッフの皆様ありがとうございました。

*1:ずっと「ふめいもん」って思ってたけど「あかずのもん」でした...

Roppongi.pm #1 を開催しました

Roppongi.pm #1 を @magnolia_k_ さんと共同で開催したことを報告します。

roppongipm.connpass.com

色々やるべきタスクが多すぎて報告が遅くなりました。

詳しくは kichijojipm のブログを読んでもらえると、どれくらい YAPC::Tokyo だったのか分かるかもしれないです!

kichijojipm.hatenablog.com

そして今回はどんな感じにイベントの開催をしたのかについて書きます。

懇親会について

スポンサーは株式会社メルカリでした。(いつもお世話になっているので採用ページを貼っておきます :bow: )

careers.mercari.com

今回の懇親会は入場者全員におにぎり入りのお弁当を配り、懇親したい人だけにお酒とおつまみの提供をするスタイルを取りました。
(なんとインスタばえも用意したんですよ!!!!!)

必ずしも全員が懇親会に参加するわけでもないので、食べ物の数を読み間違えると大変なことになります。

これは kichijojipm のブログにも書かれています。

何が大変かというと

  • 参加者の中には懇親会に参加せず、話だけを聞きに来た人もいるため、参加者分のケータリングを用意すると余る可能性が高くなります。
    • 余れば食べ物や業者にも大変申し訳ない気持ちになりますね。
    • さらに言えば片付けが大変なのです...
  • その問題を考慮して量を少なめで注文すれば全員分足りなくなる可能性もある
  • おなかすいてるのに懇親会開始の 22 時くらいまで待たないといけない

そこで考えたのが「入場の際におにぎりセットを配る」でした。

こうすることで参加者全員に配れるし、余らないし、好きな時間に食べられるので最強のおもてなしができたかと思います。

この考えはメルカリの @jollyjoester さんから頂いたものでした。(ありがとうございました!!!!)

トークについて

今回のトークの全てが YAPC::Japan に匹敵すると絶賛の声が上がっていてのでとても嬉しかったです。そして僕も凄く聞いててワクワクしました! 登壇してくださった @yoshiyuki_kondo さん @tokuhirom さん @DQNEO さん @AnaTofuZ さんに感謝しかありません。本当にありがとうございました。

次回について

開催日は未定ですがきっと開催するはずです。お楽しみに!!