hg webを開くコマンドのlinux対応

ubutu引っ越しシリーズ。 個人的に使っていたツール周りをlinuxに移植している。

anatofuz.hatenablog.com

このエントリで紹介していた個人ツールのhg-browselinuxに対応させた。 といっても、macOSopenコマンドをxdg-openに書き換えればいいだけなので割と簡単。

実際に書き換えた結果はこんな感じ。

#!/usr/bin/env perl
use strict;
use warnings;

# hg config経由でhgrcにかかれているpush先を確認する
my $push_path = `hg config paths.default`;

if ($?){
    print "[eror] failed exec hg config paths.default";
    exit 1;
}

my $open_cmd = $^O eq 'darwin' ? "open" : "xdg-open"; #linux open cmd is xdg-open

# 無かったら特に何もしない
exit 1 unless ($push_path);


# yomitanはパスで開けないので別枠
my $url;

if ($push_path =~ /(yomitan)|(chatan)/){
    $url = yomitan($push_path);
} elsif ($push_path =~ /firefly/){
    $url = firefly($push_path);
} else {
  if ( $push_path =~ m[(https?|ssh)://(\w+@)?(.*)]){
      $url = "http://$3";
  }
  die 'invalid url';
}

`$open_cmd $url`;


sub yomitan {
    my $input  = shift;
    my $http_domain = 'https://ie.u-ryukyu.ac.jp/hg/';
    my $url;

    if ($input =~ m[.*//home/hg/y(\d+)(.+)]){
        $url = $http_domain . "y$1$2";
    }
    return $url;
}

sub firefly {
    my $input  = shift;
    my $http_domain = 'http://www.cr.ie.u-ryukyu.ac.jp/';
    my $url;
    if (($input =~ m[.*?firefly.cr.ie.u-ryukyu.ac.jp/(.*)] )||($input =~  m[.*firefly/(.*)])){
        $url = $http_domain.$1;
    }
    return $url;
}

まぁほとんど変化はないのだけど、今までIPC::Run3を使っていた箇所をPerlのバッククォート演算子(`)を使うように変更した。 これに伴ってコアモジュールだけで済むようになったので便利。

linuxの対応は、Perlの場合特殊変数$^OでOSの名前が取れるので、darwin(macOS)かそうでないかで処理を分けている。 まぁこれにwindows対応まで入れるとif-elsifを書かないといけなさそうだけど、まぁしばらくwindows上で生で動かす予定はないので良さそう

最近awesome-perlに追加されたモジュールを眺める

これはPerlアドベントカレンダー23日目の記事です。 昨日はnanto_viさんで「Perl の wantarray 関数で返り値の扱いを確認する」でした。

さて15日目の記事でmoznionさんの方で話があったawesome-perlですが、ここ数週間でかなりプルリクが飛んできていました。 その中で様々なモジュールがawsome-perlに加わっています。 ということで最近awesome-perlに追加されたモジュールの中からいくつか使って雰囲気を見てみます。

.......あ、ちょうどよかったので広告です! BigSureを使っている人はplenv関連のアップデートをお願いします!!!

anatofuz.hatenablog.com

HTML5::DOM

このプルリクエストで追加されました。 プルリクエストを送ってきたAzq2さんが作成したCPANモジュールの様です。

今回はcpanfileに書いてcpmでinstallしようと思います。

cpanfileはこんな感じです。

requires 'HTML5::DOM';

早速インストールします。

$ cpm install
FAIL install HTML5-DOM-1.18
FAIL install HTML5-DOM-1.18
0 distribution installed.

インストールしようとしたところFAILしました。悲しいですね。

2020-12-23T15:00:56,99566,HTML5-DOM-1.18| cc -c  -I/Users/anatofuz/.perl-cpm/work/1608703254.99547/HTML5-DOM-1.18/third_party/modest/include -std=c99 -fno-common -DPERL_DARWIN -mmacosx-version-min=10.15 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3   -DVERSION=\"1.18\" -DXS_VERSION=\"1.18\"  "-I/Users/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/darwin-2level/CORE"   DOM.c
2020-12-23T15:00:57,99566,HTML5-DOM-1.18| DOM.xs:515:13: warning: 5 enumeration values not handled in switch: 'MyCSS_SELECTORS_TYPE_UNDEF', 'MyCSS_SELECTORS_TYPE_ATTRIBUTE', 'MyCSS_SELECTORS_TYPE_PSEUDO_CLASS_FUNCTION'... [-Wswitch]
2020-12-23T15:00:57,99566,HTML5-DOM-1.18|                                 switch (entry->type) {
2020-12-23T15:00:57,99566,HTML5-DOM-1.18|                                         ^
2020-12-23T15:00:57,99566,HTML5-DOM-1.18| DOM.xs:515:13: note: add missing switch cases
2020-12-23T15:00:57,99566,HTML5-DOM-1.18|                                 switch (entry->type) {
2020-12-23T15:00:57,99566,HTML5-DOM-1.18|                                         ^
2020-12-23T15:00:59,99566,HTML5-DOM-1.18| 1 warning generated.
2020-12-23T15:00:59,99566,HTML5-DOM-1.18| cc -c  -I/Users/anatofuz/.perl-cpm/work/1608703254.99547/HTML5-DOM-1.18/third_party/modest/include -std=c99 -fno-common -DPERL_DARWIN -mmacosx-version-min=10.15 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3   -DVERSION=\"1.18\" -DXS_VERSION=\"1.18\"  "-I/Users/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/darwin-2level/CORE"   utils.c
2020-12-23T15:00:59,99566,HTML5-DOM-1.18| utils.c:126:1: warning: non-void function does not return a value [-Wreturn-type]
2020-12-23T15:00:59,99566,HTML5-DOM-1.18| }
2020-12-23T15:00:59,99566,HTML5-DOM-1.18| ^
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| 1 warning generated.
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| cc -c  -I/Users/anatofuz/.perl-cpm/work/1608703254.99547/HTML5-DOM-1.18/third_party/modest/include -std=c99 -fno-common -DPERL_DARWIN -mmacosx-version-min=10.15 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3   -DVERSION=\"1.18\" -DXS_VERSION=\"1.18\"  "-I/Users/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/darwin-2level/CORE"   modest_modest.c
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| In file included from modest_modest.c:5:
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| ./third_party/modest/source/modest/finder/pseudo_class.c:112:13: error: implicitly declaring library function 'snprintf' with type 'int (char *, unsigned long, const char *, ...)' [-Werror,-Wimplicit-function-declaration]
2020-12-23T15:01:00,99566,HTML5-DOM-1.18|             snprintf(new_data, length, "%s", str);
2020-12-23T15:01:00,99566,HTML5-DOM-1.18|             ^
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| ./third_party/modest/source/modest/finder/pseudo_class.c:112:13: note: include the header <stdio.h> or explicitly provide a declaration for 'snprintf'
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| 1 error generated.
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| make: *** [modest_modest.o] Error 1
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| ! Retrying (you can turn off this behavior by --no-retry)
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| Executing /usr/bin/make
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| "/Users/anatofuz/.plenv/versions/5.32.0/bin/perl5.32.0" -MExtUtils::Command::MM -e 'cp_nonempty' -- DOM.bs blib/arch/auto/HTML5/DOM/DOM.bs 644
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| cc -c  -I/Users/anatofuz/.perl-cpm/work/1608703254.99547/HTML5-DOM-1.18/third_party/modest/include -std=c99 -fno-common -DPERL_DARWIN -mmacosx-version-min=10.15 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3   -DVERSION=\"1.18\" -DXS_VERSION=\"1.18\"  "-I/Users/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/darwin-2level/CORE"   modest_modest.c
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| In file included from modest_modest.c:5:
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| ./third_party/modest/source/modest/finder/pseudo_class.c:112:13: error: implicitly declaring library function 'snprintf' with type 'int (char *, unsigned long, const char *, ...)' [-Werror,-Wimplicit-function-declaration]
2020-12-23T15:01:00,99566,HTML5-DOM-1.18|             snprintf(new_data, length, "%s", str);
2020-12-23T15:01:00,99566,HTML5-DOM-1.18|             ^
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| ./third_party/modest/source/modest/finder/pseudo_class.c:112:13: note: include the header <stdio.h> or explicitly provide a declaration for 'snprintf'
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| 1 error generated.
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| make: *** [modest_modest.o] Error 1
2020-12-23T15:01:00,99566,HTML5-DOM-1.18| Failed to install distribution

見るとCCのエラーで死んでいます。CCが動いているのでXSかなと思ったのですが、これはsubmoduleのModestというプロジェクトのビルドに失敗している様です。

調べてみたところModestとはC言語で実装されたHTMLのrendererで、HTMLパーサーなどが実装されています。HTML5::Domはこのプロジェクトを呼び出してHTMLのパースを行うモジュールなので、高速ということの様です。

せっかくなのでubuntucpm installしてみました。

$ cpm install HTML5::DOM
DONE install HTML5-DOM-1.18
1 distribution installed.

無事通ったようです。

#!/usr/bin/env perl
use warnings;
use strict;
use HTML5::DOM;

my $parser = HTML5::DOM->new;

my $html = '<div>Hello world!</div>';

# parsing with custom options (extends options defined in HTML5::DOM->new)
my $tree = $parser->parse($html, {
    scripts     => 0,
});

print "$tree->body->text\n"; #Hello World!

$parser->parseを実行するとHTML5::DOM::Treeオブジェクトが返ってきます。

HTML5::DOM::Treeは様々なものを返しますが、今回の例題で<div>Hello World!</div>の中からHelloWorldを取り出すには、まずbodyメソッドを実行してHTML5::DOM::Nodeを返す必要があります。

Nodeも様々なAPIがありますが、中でtextを使うとtextの代入、及び取得が可能な様です。

Asm::X86

Asm::X86X86のインストラクションかどうかを判定することが出来るモジュールです。 また、AT&TアセンブラIntel形式に変換することも可能です。

このプルリクエストで追加されました。

#!/usr/bin/env perl
use strict;
use warnings;
use Asm::X86 qw(@instr is_instr);

print "mov YES\n" if is_instr ("MOV");
print "bic YES\n" if is_instr ("BIC");

例えば上のコードでは、movx86の命令ですのでis_instrはtrueを返しますが、bicはARMの命令なのでfalseを返します。

ELF::Writer

ELF::Writerは、 ELF形式のバイナリを生成することが出来るライブラリの様です。

リポジトリのテストには終了コード42で終わるELFのバイナリが置かれています

実際のテストコードはこのあたりを読んでみましょう。(なんとなく読んだけどAPIをちゃんと把握しないとだめそう)

Video::Generator

Video::GeneratorとはPerlでビデオ生成する!?モジュールです。 このプルリクエストで追加されました。

EXAMPLE2を参考にコードを書いてみます。今回はtempdirを使わずにvideoに書き込みに行きます。 なお予めvideoディレクトリを作っておく必要があります。

use strict;
use warnings;

use File::Path qw(rmtree);
use File::Spec::Functions qw(catfile);
use Video::Generator;

# Object.
my $obj = Video::Generator->new(
        'verbose' => 1,
);

# Create video.
my $video_file = catfile("video", 'foo.mpg');
$obj->create($video_file);

実行するとこんな感じのログが出ます。

$ carton exec -- perl hoge.pl
Video pattern generator created images for video in temporary directory.
Created video file.
Removed temporary directory.

確認するとvideoディレクトリにfoo.mpgが生成されています。

$ ls video
foo.mpg

驚くべきことにPerlで動画が作成されました。 動画はYoutubeにあげてみようと思いましたが、利用規約の関係で削除されてしまいました。

モジュール内部でFFmpeg::Commandが使われているので、話は単純でPerlからffmpeg/avconvを叩いて動画を作成している様です。

おわり

こうしてみるとBaseband-processorさんがめっちゃくちゃプルリクだしてますね...。今は収まったみたいすが一時期の勢いは過ごそうでした。

mac OS BigSurでplenvを使いたい俺たちは

TL;DR

$cd ~/.plenv/plugins/perl-build; git pull

PerlのBigSur問題

plenvはPerlソースコードをローカルに持ってきて、ビルドを行う仕組みになっています。 BigSur以前のmacOSでは正常にビルドができましたが、BigSurでは次のようなエラーが出てしまいビルド出来ないケースがあります。

Which of these apply, if any? [darwin]

*** Unexpected product version 11.0.
***
*** Try running sw_vers and see what its ProductVersion says.

Installation failure: sh Configure -Dprefix=/Users/anatofuz/.plenv/versions/debug-32 -de -Dversiononly -DDEBUGGING=-g -Doptimize=-O0 -A'eval:scriptdir=/Users/anatofuz/.plenv/versions/debug-32/bin' at /Users/anatofuz/.plenv/plugins/perl-build/bin/perl-build line 12763.
ABORT

この問題は、PerlのビルドスクリプトConfiguermacOSのバージョンが決め打ちされている為です。

ほどなくしてパッチが作成され、Perl5本体には取り込まれていますが、5.32などの過去のバージョンには当然取り込まれていません。

github.com

Devel::PatchPerl

過去のリリースにもパッチを当てたい場合、手動でやるのはめんどうなのでよしなにパッチを当ててくれるDevel::PatchPerlというライブラリがあります。

metacpan.org

Devel::PatchPerlはpatch_sourceというAPIが提供されていて、これを叩くとバージョンごとによしなにパッチを当ててくれます。

パッチを当てるPerlのバージョンと内容は、この様にハッシュリファレンスで、Perlのバージョンを正規表現で、あてるパッチをサブルーチンで指定します。

  {
    perl => [
              qr/^5\.004_05$/,
              qr/^5\.005(?:_0[1-4])?$/,
              qr/^5\.6\.[01]$/,
            ],
    subs => [
              [ \&_patch_configure ],
              [ \&_patch_makedepend_lc ],
            ],
  },

今回のBigsurの問題はhints/darwin.shファイルの問題なのですが、実は数日前のcommitで、すべてのバージョンに対してhintsのパッチを当てるようになっていました。

github.com

さらによく見てみると、hintsに関してはパッチ形式ではなく、hintsファイルをbase64Perlモジュールに直接埋め込んでおり、それに差し替えるという方法でした。(macOSのパッチ)

埋め込まれているこのhintsをbase64で戻したところ、上記のPerl5に取り込まれたパッチがあたっている状態でした。

この変更があるDevel::PatchPerlのバージョンは2.04です。

Perl-Build

plenvがデフォルトで呼び出す(であろう)PerlのビルドツールはPerl-Buildです。 Perl-Buildが内部的にConfigureとかを呼び出すようになっています。

実はデフォルトでPerl-BuildはDevel::PatchPerlを当てるようになっています

さらにPerl-Buildがデフォルトで使うDevel::PatchPerlのバージョンは、数日前のcommitで最新版に変更されています。

github.com

またPerl-Buildの中身をplenvはfatpack(Perlモジュールを1枚スクリプトに圧縮)したものを使うようになっています。 Devel::PatchPerlの内容も現在のPerl-Buildのfatpackされたperl-buildに含まれている為、pullして更新すると最新のDevel::PatchPerlを使うことになり、問題が解決されます。

ということで

plenvを使っている皆さんは今すぐ $cd ~/.plenv/plugins/perl-build; git pull しましょう!!!!!

WEB+DB PRESS vol.117 「Perl Hackers Hub」 第62回「Perl歴史散策」に寄稿しました

というわけで一度投稿してみたかったエントリです!!!

2020年6月24日(水)に発売される WEB+DB Press Vol.117Perl Hackers Hub に「Perl歴史散策」を書かせていただきました!!みんな買ってくれ!!!!!!

沖縄だと多分無いですが大手書店では6月16日からテスト販売があるそうです!!!自分の近所の書店が大手書店だと思われる人は買ってください!!!

ちなみに外出するのはな...という皆様のために電子書籍でも販売しています!!!

f:id:anatofuz:20200608185623j:plain

気になる内容

気になる内容ですが

  • Perl1.0から現在のPerl5.32に至るまでの代表的なバージョン(1,2,3,4,5)の解説
  • Perl6/Rakuの歴史と現在
  • 最新Perl5情報

...と、個人的な趣味MAXみたいな内容でお送りしています。(別に僕が書いたコードの話ではない^q^)

今からPerlを始めてみよう、 Perlってどんな言語なのかちょっと知りたいというPerlビギナーの方はもちろんのこと。 PerlがどのようにC言語で実装されているか気になる方まで、 Perlに興味がある方なら面白いかなと思う内容だと思います!

所感

Perl Hackers Hubは第一線のバリバリPerlエンジニアの方が多く執筆されており、業務で使っていない以前にそもそも業務をしていない学生だったので(!!!!????)となりましたが、せっかくチャンスを頂いたので書かせていただきました!

執筆はmarkdownベースの文法なファイルをガンガン書いていって、そのファイル上で校正をしていただける運用でした。こういう執筆作業でもgitみたいなバージョン管理使っているのか~!と驚きました。

実際に書籍の文章が我々の手元に届くまでにはかなりの労力がかかっている事を身を以て体験できました。徹底的に編集部の皆様に文章の校正をしていただいて、人々に伝わりやすい文章を作る難しさを痛感しました。今までと異なる目線で技術書などの書籍を見ることが出来るようになったと思います。

あとは犯罪以外で自分の名前が書かれた書籍が全国に頒布されるのは嬉しいですね。しかも憧れのWEB+DB PRESSなので感慨もひとしおです。

謝辞

お誘い頂いたid:papixさんや、 的確な指摘で文章のリファクタリングをしていただいた技術評論社の稲尾さん、 英語や技術的内容のレビューをしていただいた監修の牧さんを始めとする校正などに関わってくださった皆さんに御礼申し上げます。

もう一度

2020年6月24日(水)に発売される WEB+DB Press Vol.117Perl Hackers Hub に「Perl歴史散策」を書かせていただきました!!よろしくお願いします!!!!!!

PerlCon 2019に参加してきました!!!

こんにちは! id:anatofuzです。

皆さんのおかげで、ラトビアのリガで開催されたPerlCon2019に参加し、無事帰ってくる事ができました!!! 報告が遅れてしまいすいません 🙇

という訳でこのブログではPerlConの参加から帰国までのイベントレポートを乗せていこうと思います!!

旅レポート

初日

今回の旅は id:papixさんと共に行動をする旅でした。 日本からHelsinkiへの便はちょうどお昼というのもあり、当日沖縄から東京、そしてHelsinkiはかなり時間的に厳しいので、前日入りをするぞ!!!となっていました。

papixさんと「前日は大江戸温泉物語で」などと話していましたが、id:papixさんが成田空港内のいい感じのホテルを抑えていただくことに成功したので、二人でそこに宿泊することになりました。 その為、初日は、那覇から成田のホテルへの移動となりました。(なお完全にいつもどおりに羽田行きの便を取ってしまった)

成田へバスで。空港から空港へのバスってあるんですね..

今回のためにイオンモールイカムで購入した大きめのキャリーケースに、目印としてはてなブログと研究室のアイコン、そして旅のお守りとしてポプテピピックのステッカーを当日貼り付け、出発しました。自宅から那覇羽田空港までは順調に進み、そのままリムジンバスに乗り込んで成田空港へと向かいました。

f:id:anatofuz:20191229155848j:plain
今回のために買ったキャリーケース。イギリスの国旗があしらわれていて、気持ちで負けないようにポプテピピックのステッカーを貼った

成田空港ではすでにid:papixさんが資料作成のためにカフェに滞在しており、合流後、二人でひとまずホテルへ向かいました。 ホテルへは成田空港から無料バスが出ており、いい感じに輸送されます。 ホテルの部屋からは空港を見ることができ、「空港じゃん....」という小学生みたいな感想を抱きました。

ホテルからみた風景 空港じゃん.

成田で日本を経つ前の最後の晩餐(?)として、成田空港でとんかつを食べ、id:papixさんはFitBoxingをし、僕は資料を書きながらその日は寝ました。

東京 -> ヘルシンキ

次の日はシュッと朝起きて空港に移動、出国審査関連の手続きが始まるまで荷物を預けるなどしていました。 papixさんが昨年修行をしていた為、専用レーンでシュッと手続きをする事ができたので「修行すごい....」と思っていました。

初めての海外なのでテンションが上って電光掲示板を撮影した.

券です

朝食はまだ食べていなかったので、これもpapixさんの力でラウンジに乗り込み、修行パワーで無料で提供される朝食を食べていました。 (めちゃくちゃ海外旅行慣れてそうなスーツ姿の人々もいて、「これが国際線ラウンジ...」となっていました)

ラウンジでの朝食とpapixさん.

ラウンジです.

ラウンジ以外では国際線のゲートを超えた先の風景にテンションが上っていました。 なお今からラクダのプログラミング言語のカンファレンスに行くはずなのに、「らくだだめだ」という衝撃的なポスターを目撃する...

いろいろオタクてきなのがあった.

というわけで搭乗です。普段は国内線のLCC的な飛行機しか乗らないので、大きくて圧倒された。

ここに国内の地名以外が出るのが新鮮だった.

機内は定期的に食べ物がデプロイされるシステムになっており、国際線の便に乗っていれば餓死することはないなと感じました。 ポプテピピックの「ビーフオアチキン?」の再現はできなかった。

ハンバーガー作れたのははしゃいだ.

機内はまくらやUSB充電、タブレット端末などがありインターネットカフェか?という感じでした。 wifiも課金すれば使えたので、資料を書くためとTwitterをするためにwifi繋いでました。自宅のネット環境よりは早かった。 今現在航空機がいる場所が地図で出ていましたが、ほとんどロシア上空だったのが面白かったです。マジでロシアは大きい…

しばらくは資料づくりを頑張って、資料が終わった後はタブレットにinstallしていたシャークネードを見ていました。 papixさんはSwitchやってました。シャークネード1は良かったですが、シャークネード2を見ようとしたら、「開幕15分くらいで飛行機にシャークネードが突っ込む」シーンだったので、「これは国際線に乗っている今見るものではない」と思いそっ閉じしました。

充実の機内設備.

そしてついに海外上陸です!!! 我々がついたのはフィンランドヘルシンキ空港です。

ヘルシンキ空港

ヘルシンキ空港では「無限に続くかと思われる、ホラーゲームで絶対敵が出る廊下」や、「唐突の日本語」、「トイレの手を拭くやつがリサイクル式になっていて、伸ばして引っ込める」などの衝撃体験がありました。 入国審査は「Papers, Please」で鍛えたにも関わらず、先にpapixさんが行っていたためか、「Hello」の一言で通過という状況でした。

ヘルシンキ空港

そして空港のRkioskiで「DNA」という絶妙にPerl感があるSIMカードを購入しました。滞在日数に比べてかなり容量があるプランだったらしいのですが、僕のiphoneが「写真を問答無用でicloudにアップロードする機能が有効になっていた」為に、このプランに救われました。

そこからは電車に乗ってヘルシンキ中央駅へ!! なおフィンランドの公共交通はすべて同じ乗車券になっていて、滞在日数に合わせて3日分などの様に買うことができます。 特に改札などは存在しませんが、乗務員から提示を求められた際に期限が切れていたりすると問題が発生するタイプの様です。今回は提示を求められることは無かったです。

電車でgoです

ヘルシンキ中央駅の周辺は、いかにも「ヨーロッパです」という感じでした。街がすべてディズニーランドじゃん...。みたいな感じでした。 ここまでの電車や、この町並みで本当に海外に来たんだなぁと実感しました。

このあたりには「いかにもヨーロッパっぽい銅像」や「すごみのあるアフラック」「日本料理店」などがありました。

ヘルシンキの風景

ホテルBothにチェックインを済ませ、その日は近くのスーパーで買ったサンドイッチなどを食べました。 ヘルシンキでは、水だと思ったらだいたい炭酸水が売っていて、ビールは夜は発売禁止になる世界観です。 スーパーはベルトコンベアに商品を載せて精算するシステムでした。

スーパーです。ヘルシンキの小売店は、店内に大体スロットマシンが置かれている

ご飯です

というわけで時差が辛いのもあるので、この日の晩はpapixさんのFitBoxingを見届けて寝ました。

2日目

2日目のヘルシンキは10度スタートでした。早朝と深夜は冷えるという情報があり、薄手のパーカーを念のために持っていきましたが、常に寒かったのでほぼパーカーを着ていました。 とはいえ現地のおじさまは、半袖短パンでランニングをしており、「これが国の違い…」となっていました。  

市場

この日は朝市でご飯を食べようという流れになり、路面電車を利用して海岸沿いの市場に行きました。

移動風景

路面電車に乗ったのは初めてか久しぶりな気がします。 話には聞いていましたが、海外にはあまり電柱がない。

路面電車車内/車外

朝市会場は海沿いで、常にうみねこかカモメ的なのが鳴いていてのどかでした。 早く付きすぎて、まだ朝市は動いていなかったのでしばらく探索していました。

港の風景。おしゃれ...

ヘルシンキのオシャレ度は凄まじく、公衆トイレもめちゃくちゃオシャレでした。

これがまさかの公衆トイレ

付近には環状のオシャレな建物や、大きい碇などがあり記念撮影などをしていました

円周率を学ぶ辺りの算数の教科書に出てきそうな環状の建物

大きい碇とpapixさん。Ingressのポータルでした

町並みはやはりオシャレ…ドラマの世界じゃん....

ローラースルーゴーゴーみたいなのがよくおいてあって、レンタルできる

そんなことをしていると、そろそろ市場も開いてきたので適当な店で朝食を取りました。 飲食系の屋台以外には、民芸品を売る屋台などもありました。

今回はMooseのミートパイと、ムーミンのベリー系の炭酸飲料を買いました。 Mooseという名前を見た瞬間、Perlを感じてしまった。

店内はヒーターみたいなのがついていて、「夏の気温じゃねぇ...」という感じでした。

朝食を食べた店です。カード決済もできる

会計時にセントとユーロの硬貨がパッと区別がつかずちょっと焦りました。

鹿のパイとムーミンの炭酸飲料。ベリーっぽい

スオメンリンナ

ご飯も食べたので、観光再開です。ここの市場からフェリーでスオメンリンナ島に移動できます。 このフェリーは前日の電車や、朝方乗った路面電車と同じ乗車券で乗ることができます。

フェリーです

フェリー乗り場

デッキの上にでていました。風が心地よかった

著者近影

スオメンリンナ島に上陸した際は、朝早かったのでぼちぼちでしたが、帰るときには日本人旅行客や、様々な国の観光客の方が来ていました。 スオメンリンナ島、めちゃくちゃオシャレ度が高くて、建物も歴史を感じつつオシャレ度が高い。 要塞だけありかなり強そうな建物が並んでいました。

スオメンリンナ

道中いかにもゼルダとかに出てくる、「序盤と終盤に行くとイベントが発生する場所」を見ました。

光の当たり方も素晴らしい

ヨーロッパ==RPGみたいな図式があるので、「復活できるセーブポイントやんけ!!!」みたいな場所もありました。とはいえ実際にドンパチやっていた場所なので、第二次大戦などの戦争を感じさせるものも多かったです

教会です。鐘を鳴らすとイベントが起きそう

石で作られた要塞は当時の戦争風景を感じさせられました。 キングスゲートというカッコいい名前の場所もありました。 (当時は船でこのキングスゲートに国賓が来ていたらしい)

要塞です

そしてスオメンリンナ島には至るところに大砲があります。 今では玉の代わりにゴミが詰められている大砲もありましたが、大砲の存在感はすごかったです

大砲です

大砲を撮影している時に、id:papixさんが中国系の観光客の方から話しかけられ、記念撮影をしてあげるなどのやり取りがありました。

あとはなんか、日本では見たことがない鳥がめっちゃいました。 忍者龍剣伝で見たことがある気がする。

とりです

スオメンリンナ島には博物館も多数設立されていますが、今回は戦争博物館に行きました。 ちょっとした日本語ガイドみたいなのもあって便利。(とはいえ展示物はフィンランド語/英語で解説されているので、だいたいは英語を読む)

こういう博物館行ったことがないので「おおっ!!」と言っていた

papixさんがめちゃくちゃテンションが上っていた

スオメンリンナ島の象徴的なもの

教会の中に入れました

ひとしきりスオメンリンナ島を満足した我々は、フェリー乗り場の前で酒を飲みつつ休憩しました。ciderってサイダーじゃなくてりんご酒の方。

シードルと洗剤みたいな容器に入っているファンタっぽい飲み物。果肉入りで、ファンタより甘かった

そしてフェリー乗船。再びヘルシンキ市場に戻ります。

そしてスオメンリンナ島から戻りました

すでに1日終わった感がありましたが、まだ昼前になっていません。 市場にはうみねことか背中に円柱が刺さっているカメの石像がありました。

戻りました

近場の教会(生神女就寝大聖堂)

まずは近場の教会に行ってみます。「信号とかも縦じゃん! すごい!!」みたいな感じでした

自転車も借りれる

今回は中に入れなかったので、写真だけ取って楽しみました。

色合いとかの雰囲気もいい

ヘルシンキ大聖堂

そしてヘルシンキ大聖堂へ向かいました。 観光地なので様々なバスや路面電車が行き交っています。

ヘルシンキ大聖堂です

ヘルシンキ大聖堂は中にも入れました。

ヘルシンキ大聖堂です

ヘルシンキ大聖堂です

このあたり

そして路面電車テンペリアウキオ教会へと向かいます

路面電車に乗車。券売機もある

テンペリアウキオ教会

テンペリアウキオ教会は岩を重ねて作られている教会で、今はコンサート会場としても使われている様です。 僕たちが入ったときはジャズピアノのコンサートをしていました。 「サラウンド環境じゃん...音質めっちゃいい...」みたいな感想です

テンペリアウキオ教会です

テンペリアウキオ教会からは一旦ホテルに戻り休憩しました。 かなり活動した感じはありましたが、まだ時間があるので ヌークシオ国立公園へと向かうことになりました。

ヌークシオ国立公園

まずは最寄り駅へ電車で向かいます。

ヘルシンキ中央駅で路面ではない電車に乗りました

電車に乗る前に、ヘルシンキ中央駅の売店でご飯と水を買ったのですが、なんと水のペットボトルのキャップが半開きになっていました。店員のお兄さんがいい人で、変えてきていいよとか言ってくれた...

次にバスに乗り換えて向かいます。降りるバス停をミスって結構歩くことになりました。

バスです。バスは乗車券を運転手さんに見せたりする

国立公園まではひたすら山道を歩きます。 道中にマツダやホンダなどの、日本車のホイールが落ちていました。こんなとこで日本を...

山道です

公園は非常に森と湖が綺麗でした。桟橋みたいなのがグラグラして面白かった。

湖が綺麗でした

ベンチで先程買ったパン的なものと水(炭酸水)を飲んで休憩です。 パン的なもの、なんかネチョネチョしていてあまり美味しくはなかった...

ごはんタイムです

ここで休憩していたら、午前中にスオメンリンナ島でid:papixさんが記念撮影をしてあげた中国系観光客のおばさまと再開するというおもしろ体験がありました。おばさまも疲れていたみたいなので、ここから3人でヘルシンキ市内へと戻ります。

3人で帰宅

道中でいい感じのスポットにもよりました

かなりいい風景

この日は疲れからか、電車に乗っている時から頭痛が発生してしまい、早めに眠りにつきました。 ご飯は前日と同じでスーパーで購入しました。 あとはこういう体験もありました

3日目

3日目はしばらくヘルシンキに滞在した後、メイン目的地のラトビア、リガへと向かいます。

エロマンガで朝食

id:papixさんの提案で、2人でエロ漫画に行きました。 エロ漫画という名前ですが、エロ漫画は売っておらず、パン屋さんです。 店内にはお父様がご飯を食べていて、エロ漫画ではなく新聞を読んでいました。

ピロシキと、バナナとベリーが混ざったドロッとした健康飲料的なのを飲んでいました。

オシャレなエロ漫画です

近くにはどうみてもポータルな冬戦争のモニュメントなどもありました。

QRコードがあって、撮影すると詳細のwebページに飛ぶ

デザイン博物館らしく、いろいろアートっぽいものが立ち並ぶ

公園

近場には公園があり、ちょっと散歩しました。 ここにも教会的なものがあり、「こ、これが北欧...!」となっていました。

のんびり散歩しました

カンピ礼拝堂

そしてカンピ礼拝堂に向かいました。ここは静寂に包まれていて、弓道部時代を思い出しました。 都会は色々うるさいですが、こういう場所があると心落ち着きますね...。

中は写真は取れないですが、静寂に包まれていました

突然の語録....

ヘルシンキ市街

さていよいよヘルシンキともお別れをし、リガへと向かいます。 路面電車ヘルシンキ中央駅へと向かいます。

ヘルシンキ市街

再び電車に乗ってGo!

ヘルシンキ空港へ

ヘルシンキ空港

ヘルシンキ空港では、リガへの搭乗手続きを英語でしたり、手荷物預け入れをしたりと英語実践編みたいな感じでした。(手続きが無事できた時は感動した)

ヘルシンキ空港

お土産屋さんでは鹿の絨毯用の毛皮などが売っていました。 我々はid:papixさんの力を利用して、ヘルシンキ空港のラウンジに行っていました。

ラウンジはハチャメチャにオシャレで、鮭のスープが美味しかったです。 また、ラウンジで「沖縄の研究室のサーバーにssh」するという実績を解除し、「グローバルIPってすごい....」と実感しました。

ラウンジ

そしてFinAirでリガへ。プロペラ機です。 機内サービスのジュースの注文は焦りましたが、「指出してThis one」で乗り切りました。 夏に研究室に来ていたインド人留学生から学んだテクニックが役に立った...。

プロペラ機です

機内風景

リガ

そうこうしている内にリガです。リガへの入国は、特に入国審査などがなく、国内線のノリで乗る事ができます。まずはリガから、papixさんがboltという配車アプリでタクシーを手配し、ホテルへ向かいました。

リガです

リガのホテル

リガのホテルでは危うく予約されていないという状況になりそうでしたが、なんとか無事乗り込むことができました。音楽イベントをやっている関係で、どこのホテルも満員に近いらしい。

無事ついて一息

ついでに目の前のコンビニ(スーパー?)で飲み物とお菓子を買いました。

リガでの食事

近場にLidoといういい感じのレストランがあるようなので徒歩で行きました。 ラトビアの料理をいい感じにバイキングでトレーに載せ、載せた食べ物に応じて会計というシステムです。

町並み

ご飯はなかなか美味しく、注文も実物をバイキングすればいいのでなかなか良かったです。 (料理名を見ても瞬時に日本語でイメージがつかないですが、バイキングならその点が解消される)

料理です

3日目 (PerlCon 1日目)

移動

いよいよPerlConが始まります! まずは会場まで僕がBoltでタクシーを呼び、向かいます。 boltは最初から目的地を登録するので、後は乗り込むだけ。支払いもクレジットカードで、しかも友達の紹介だとかなり無料で乗ることができます。

配車アプリで移動しました

その為タクシーも日本のようなタクシーではなく、普通の車にbolt用のスマホが備え付けられているという世界観でした。

タクシーからの眺め

会場であるRadisson Blu Daugavaに到着です!(グループのホテルがラトビアに他に何個かあった)

会場到着

PerlConには日本からは、papixさん、 charsbarさん, skajiさん、福岡に今いらっしゃるgugodさん、私が参加しました。

会場

チェックインとPerlConの受付を済ませ、ぐるっと会場を見て回ります。 PerlConではメインホールが$部屋で、1階上がった先のサブ会場が、それぞれ@%というPerlのシジルがつけられた名前でした。

会場の前には旗がある

メイン会場前の旗 | 入り口のプログラム | サンドイッチなどの軽食が食べれるとこ

もちろんノベルティもあって、Perlのマークや「I love Perl5|6」のステッカー、LarryWallのポストカードなどがもらえました。2階の@%の部屋の前では、定期的に軽食が食べられる懇談の時間があります。

ノベルティとサンドイッチ

オープニング、聞いたトーク

オープニングではカッコいいPerlConの紹介ビデオがキル・ビルのテーマに乗って放送されていました。会場にはこれなかったLarryからのビデオメッセージが再生された後、PerlのメインコミッタであるSawyerXのキーノートが始まりました。

$会場の雰囲気

Sawyerのキーノート

Sawyerのトークは今までのPerl5のバージョンごとの歴史や、今後のアップデートで強化していきたいことなどの、日本ではあまり聞けないPerl自体の話でした。 SawyerはCPANなどのアイコンが自分の顔で、見た感じ怖そう...と思っていましたが、素晴らしく優しい良い方でした。charsbarさんが繋いでくれて、お話する事もできました。「Perl5のリポジトリにcommitするにはどうしたらいい?」という質問に「とりあえずcommitしてくれれば指摘するよ!!」みたいに答えてもらえました。当日は恋人(?)といつも一緒に行動していたのが微笑ましかったです。

Perl6の本とblack stories

PerlConは売店もあり、Perlの書籍やグッズが販売されていました。 Wendy Van Dijk さんが店員だったのですが、気さくに話しかけてくれて、クッキーの型付ききまでおまけでくれました。「Perl6の本ならどれがオススメ?」と聞いたら教えてくれた本を買っています。

PerlConには本棚のタペストリーがありましたがこれはWendyとLizの本棚だそうです。

売店では他に「Perl」というワインが売られていて、charsbarさんやgugodさんによると、これはドイツに「Perl」という地名の田舎町があり、その町のワインをWendyたちが売っているそうです。

初日のトークは、まさかのcharsbarさんの裏番組がpapixさんという日本人がブッキングするという事件もありましたが、面白いトークが多かったです。特にPerl6プロジェクトのメインコミッタであるJonathan Worthingtonによる、Perl6の高速化の話は面白かったです。MoarVMに関する最近のアップデートや、Perl6が驚くべきことにPerl5よりも早い処理があるなどの衝撃的な発表に興奮していました。

もともと卒研で触っていた内容でもあったのでかなり興味深く、Twitterでツイートしたところ、IRCに誘われました。

Perl6の高速化について

papixさんのトークでは、明日の僕のトークの宣伝も入りました。

突然のトーク順番変更

なんと本来は私のトークは初日だったのですが、Sawyerのトークを聞いてるあたり、こんなメールが来ました。

Hi Tokahiru,

We moved your talk to the Day 2 of the conference.

Please find us to get another lunch ticket.

Thank you for your understanding.

Andrey
-- 
PerlCon 2019
____________________________________________________________________________
The European Perl Conference in Riga, Latvia
https://perlcon.eu | mail@perlcon.eu

ま、まさかの当日順番変更....!!! というわけでスピーカーのランチチケットを取り替えてもらい、私のトークは翌日2日目に移動になったのです...。

部屋騒動

PerlCon初日が終わり、ホテルの部屋に行こうとしましたが色々と問題がありました。 部屋はカードキーで入るのですが、手書きで書いてもらった部屋番号が「651」にしか見えなくて、その部屋を開けようとしたのですが、一向に開かない....。 ロビーで問い合わせようと1Fに降り、偶然居たcharsbarさんに聞いたところ「651」じゃなくて「657」だったというオチでした。

そして部屋に入ったにも関わらず、我々を迎えていたのは...

ベット*2と思っていたのに、まさかのダブルベッド1つ。流石にid:papixさんとダブルベッドはお互いにきついので、フロントに「I want an extra bed!! Please separate bed!! today!!! 」みたいに頼み込んでエクストラベッドをもらいました。

夜はcharsbarさん、skajiさん,papixさんで食事に行きました。 charsbarさんが終始優しくて本当にありがとうございました...! (明日トークだったのですでに緊張していた)

おいしいビールをいただきました

4日目 (PerlCon 2日目)

朝ごはん

すでに緊張していましたが、ご飯を食べました

自分のトーク

PerlCon2日目ではいよいよ僕のトークです。

というわけで異常に緊張していました。具体的に緊張の例を上げると

  • 昼ごはんがほとんど食べられない
  • トイレに6回行く
  • 部屋に内鍵したことに気づかない
  • お腹が以上に痛くなる
  • 部屋に水を忘れたことに気づかない
  • 発表前に自分のPCから映像が映らず異常に焦る

などがありました。緊張していましたね...。

とーくのスライドは、

  • Google翻訳で違和感ない日本語に戻せるかチェック
  • Grammalyでチェック
  • DMM英会話などの文例を使う

などをして作りました。

会場は前日のpapixさんと同じで@部屋でした。

トークですがスライドはこちらです。フロッピーディスクの辺りでウケがあって良かった。

日本からきていた皆さんが来てくださったのですが、あのSawyerXも来ていただいていて、非常にびっくりしました。(気づいたのはトークが終わった後の質疑応答のタイミングだったと思う)

トーク自体はYoutubeに上がっています。


Takahiro Shimizu. How to build traditional Perl interpreters

トークは極度に緊張していたのですが、一種のクライマーズ・ハイというか、実際に話していたときは夢中になっていて、あまり覚えていないです。聞いたところ「所々日本語が出たり怪しそうだったが、勢いで乗り切っていた」という話だったので、ま、まぁ良かったかな...という感じです。トーク終わった後にSawyerに握手を求められたのがすごい嬉しかった。

トークが終わって、廊下で休んでいたら、先程のトークを聞いていてくださった方から「面白かったよ、いつもそういうことしてるの?」と言われて「他にPython0.9.1ビルドしてます...」とか話しら興味深そうに聞いてくれました。

聞いたトーク

2日目はLTなどもあり、密度が結構濃かったです。 最初はElizabeth Mattijsenによるキーノートで、Perl6の現状や、Perl6の噂を検証するというものでした。この日はElizabethから「Perl6をCameliaという名前にしない?」という提案がキーノート内でありました。(最終的にはRakuになりましたが)

この方はトークをすべてターミナルでやっていて面白かったです。 (おもしろコマンド, API紹介みたいなトークでした)

次のPerlConの会場投票の開票

僕は別のトークに行っていましたが、WebPerl という凄まじい発表があったのも2日目です。 また、Twitterのフォロワーでもある、AlexanderのRakuのWAFであるCroに関するトークを聞いていました。

かなりPerl6成分が多めだったので、聞いていて楽しかったです。スライドをLaTeXで作っている方もいました。トークの内容は(僕が英語がそこまでよく理解できないのもありますが)、日本人の方が(話し方|技術的に)に上手いというのもあったと思います。

スピーカーディナーなど

2日目ではスピーカーディナーがありました。偶然にもリガに来て初日に行ったレストランと同じ店でした。スピーカーディナーには、NW在住のMakoto Nozakiさんブルガリアのエンジニア、カナダで図書館システムを開発しているPerl6が好きなおじさんなどと喋りました。他にはcharsbarさんの紹介で、Perl6のコアコミッタの方ともお話する事ができました。

あまり懇親会が日本でも得意ではなかったのがあるのですが、もっと英語を喋れるようになってガンガン話したい...!と思いました。

5日目 (PerlCon 3日目)

3日目はトークも終わり、リラックスして聞いていました。

朝ごはんです

聞いたトーク

KeynoteはJonathan Worthingtonで、1日目と少し似ているPerl6の今後についてのトークでした。 3日目はMoarVMの高速化というより、文法やモジュールの話、並列構文などが中心でした。

他にはXSを使ってPerlのオペコードを上書きする話や、skajiさんのcpmの話、Perl6を使って実装した同時進化アルゴリズムの話などがありました。

LTや合間で入ってくるジョーク、英語が上手く聞き取れないので意味が理解できなくて笑えないのが悔しい...!となりました。LTはLTなので早くて集中力が試される感じがありました。

抽選会

3日目の終わりに差し掛かっている頃、BlackStoriesの提供で、参加者の名前が呼び上げられたらプレゼントが貰えるくじがありました。 偶然にも名前が呼ばれて、BlackStories海外版をもらいました。

BlackStories英語版をもらいました! (留学生とやりたい)

close後

PerlConのクロージングは、この3日間のスライドショーとスタッフのエンドロールなどが再生されました。あの規模のカンファレンスを2名+技術班で運用しているのはすごかった...!

その後は日本からの人々で集まって、はちみつビールやうさぎなどを食べていました。

うさぎです

うさぎは鶏肉に似ていましたが、鶏肉よりも獣感が強いと言うか、肉を食べている感じが強かったです。

はちみつビールは非常に甘くて美味しかったです。

黒いビールがはちみつビール、にんにくのおつまみとか

その後はpapixさんと夜のリガを歩きながらホテルへ向かいました。 コンテンツ力が高かった「ボタンを押し続けないと上昇しないエレベーター」は面白かったです。

ボタンを押し続けないと上昇しないエレベーター

夜のリガ市街

6日目 リガ->ヘルシンキ->日本

楽しかった旅も終わり、いよいよ帰宅です。 その前にリガをもう少し観光します

~自由の記念碑

昨日の晩の散歩でみかけたような道を歩きます。 ラトビアヘルシンキと比べると落ち着いては居ますが、ヨーロッパらしさは相変わらずです。

普通の町並みも良い絵になる

そして自由の記念碑へ! 兵隊さんが警備していました

自由の記念碑

ねこ

PerlConのマークにもなっている猫を見かけました。かわいいですね。 意外と写真を取っている人が少なかった気もする。

ねこです

聖ペテロ教会の塔

塔です

エレベーターに乗ると上にいける

塔の中も非常に美しい

そして近くの売店で水を買い、boltでリガの空港へ向かいました

コンビニでの買い物はしっかりできるようになった

リガ->ヘルシンキ

リガの空港でお土産やコーラを買ったりしてちょっとゆっくり。 自動販売機はクレジットカード決済に対応していてこれがキャッシュレス...となりました。

ヤクザとコーラです

リガからヘルシンキはまたプロペラ機です。

プロペラ機に乗り込むぞ!!

ヘルシンキ->日本

ヘルシンキではムーミン関連のお土産を買ったり、謎の味千ラーメンを見たり、自販機で飲み物を購入しました。お土産売り場では唐突に店員に日本語で話しかけられたり、サルミアッキを買うなどの体験をしました。

ヘルシンキへの入国で、自動でパスポートの顔と認証するシステムがったのですが、なぜか僕だけスムーズに反応せず、「2分くらい顔認証のブース内で足止め」という悲しい出来事も体験しました。

空港内。なんかラーメン屋がある

最後に自動販売機でムーミンの炭酸飲料を買いました

そして飛行機に乗り込みます。まさかのタラップではなくバスで移動...。

そして飛行機へ...

機内では炭酸がおいてあったり、アイスを貰ったり、またご飯を無限にもらうなどしました。 寝ないといけなかったのですが、なかなか眠れず、日本についたときは大変でした。

機内風景。帰りは疲れていました

~日本

そして日本に ...!!

Perlのカンファレンスに参加したので健康相談室に行かなきゃ...と思いながら入国しました。

とりあえず成田のレンタルシャワーでシャワーを浴びて、そのまま実家山梨にバスで移動しました。 (本当は大江戸温泉とかに行こうとしたが、疲れていて早く家かホテルに行きたかった)

ということで無事帰国しました!!

感想

今回は初めての海外、初めての国際線、初めての海外カンファレンスと初めてづく目だったので、無事に行って返ってこれて良かった!! という感じでした。特にほぼ日一緒にいたpapixさんや、現地で合流したcharsbarさん、skajiさん、gugodさんにはお世話になりました。ありがとうございました!!!

初めての海外では「英語って本当に言語なんだな...」という感想を得ました。変かもしれませんが、普段書籍や映画,洋曲などで英語が使われているメディアとは触れていますが、実際に英語話者が多数派の世界には行ったことはありませんでした。今回始めて海外に行き、日本語話者が圧倒的に少ない世界に行ってみると「英語って本当に会話で使われている!!!」という、当たり前ではありますが、実感として持つことができたと思います。英語勉強しっかりやっていきたい。

またPerlConでは海外のPerlMongerとお会いできたのが非常に刺激になりました。CPANでアイコンで見たことがある方々が実際に動いて喋っているのは「実在したんだ!!!」みたいな体験でした。特にSawyerとAlexandreに会えたのは良かったです。Perlを作っている彼らも1人の人間なんだなと感じました。僕も彼らと開発してみたいなと強く感じました。

PerlConは日本のYAPCと同じような熱気もありつつ、Perlの内部の話や、Perl6の話が多かったのが印象的です。RubyKaigiに近いものがあるなと感じました。もちろんハイレベルな発表もありましたが、日本の勉強会でしている話が英語にできればPerlConでも通用するなと感じました。

またid:papixさんが「英語は度胸」と言いながら英語コミュニケーションをすごいしていて、カッコいい...!と思いました。僕ももう少し度胸をつけたいと思い、ぼちぼちduolingoとかを始めています。

カンパについて

今回のPerlConは、インターネットの皆様からのカンパで行くことができました! 改めてお礼申し上げます。ありがとうございました!!!!

id:papixさんと相談しながら、小さくブログで募集をしようとしたところ、想像以上のスピードでカンパがあつまり、本当にありがたかったです。 Perlコミュニティの皆さんから、沖縄のコミュニティの皆さん、そしてインターネットでしか面識がない方や、面識が今までなかった方からもカンパを頂きました。

皆さん共通してカンパのときにかけていただいた言葉は「若者だから頑張ってこい」と「以前Perl(コミュニティ)にお世話になったから」という言葉です。Perlという言語がよく、「人と人とをつなぐグルー言語」と呼ばれている理由が、実感できたと思います。

今回は若者であるということと、Perlコミュニティの皆さんの力でPerlConに行く事ができました。 私も近いうちに社会に出て、1人のエンジニアとしてやっていくと思いますが、「あの時の若者がだめになった」と言われないように、僕もPerlコミュニティに還元できるようになっていこうと思います。

本当にありがとうございました!!!

カンパしていただいた皆様

  • kfly8 さん
  • xtesuji さん
  • anzu_mmm さん
  • monamomi さん
  • fujiwara さん
  • Intel0tw5727 さん
  • hitode909 さん
  • sironekotoro さん
  • magnolia_k_ さん
  • hogas さん
  • sugyan さん
  • e2_kan さん
  • toku_bass さん
  • ミノタケ さん
  • kaz_hiramatsu さん
  • aokabin さん
  • sago25tk さん
  • ytnobody さん
  • nakaraxp さん
  • hoto17296 さん
  • k_nishijima さん
  • DQNEO さん
  • yasu47b さん
  • masakyst さん
  • mackee_w さん
  • hkoba さん
  • monmon さん
  • kazuhooku さん
  • shinotra さん
  • masayuki.uehara さん
  • _ _ gfx _ _ さん
  • perlzemi さん
  • uzulla さん
  • akiym さん
  • bokutin さん
  • papix さん
  • codehex さん
  • skaji さん
  • karupanerura さん
  • tokubass さん
  • momen さん

(この他にも様々な方が協力してくださいました!!)

皆さん本当にありがとうございました!!

カンパ集計

合計 ¥588,000 でした!

カンパ収支

  • 航空券
    • ¥205,990
  • Tシャツ費用
    • ¥2,990
  • リガ宿泊費
    • ¥33,163

  • 収支
    • +¥345,857

カンパの余剰分について

カンパの余剰分は当初の予定通りPerlの団体にお渡しという形を取ろうと思います。

具体的には、私以外のPerlに関わる学生とPerlコミュニティに還元したほうが良いと思い、次回YAPC::KyotoなどのYAPCの学生旅費支援スポンサー費として利用致します。

最後になりますが、ありがとうございました!!!

PerlConの渡航費のカンパのお願い

追記(2019/07/08)

カンパのご協力ありがとうございました!!!

目標金額を達成していましたので一旦停止致します!!!

皆さんありがとうございました!!!!!!!!!!!!


こんにちは id:anatofuzです。

8月の7-9日の三日間にラドビアのリガでPerlConというPerlの国際カンファレンスが開催されます。

PerlCon 2019 | The European Perl Conference in Riga, Latvia

学生のうちに海外カンファレンスには行ったほうが良いという話を聞いており、 以前YAPC::Tokyoで登壇した「レガシーPerlビルド」をベースにPerlCon用にCfPを書いた結果、プロポーザルが通ったのでリガで登壇する予定です。

ですが、ラドビアへの交通費が予想以上にかかってしまい、行くことは可能ですが、今後の大学生活で利用したい資金(下宿先の家賃、生活費などなど)に支障が出てしまう事が考えられます。アルバイトや奨学金などである程度は貯金がありますが、今度無茶な予算の配分になりそうというのが見込まれます。

完全に個人的な事情で申し訳ないのですが、リガ行きの資金をいくらかカンパにて援助していただけると非常に助かります!

勝手なお願いで恐縮ですが、できればご協力をお願いします。

目標金額

  • 合計で30万ほど
  • カンパの金額はおまかせします!

用途

  • リガへの渡航費 + リガでの宿泊費 + Tシャツ費のみに充当
    • リガへの往復渡航費とTPCiR会期中のリガでの宿泊費(3泊4日)以外に利用しません
  • オーバーした分はPerl関連の団体や勉強会などに寄付致します

特典

  • 発表スライドにアイコンが乗って紹介します
  • もちろんこのブログでもご紹介致します
  • アイコン入りのTシャツを作り、それを着てPerlConで発表します

カンパの方法

申し訳ないですが口座振込 or LINE Payでの送金でお願いします。 (kyashなどでは現金化する事が難しく、宿泊費などの支払いで支障をきたす可能性がある為です)

送っていただきたい口座及びLINE Payなどは、個別にお知らせ致しますので、DMかメールなどで連絡をお願いします。

(メールアドレス anatofuz@gmail.com )

備考

  • TPCiR終了後、リガへの渡航費 + リガでの宿泊費 + Tシャツ費及び、支援していただいた金額の収支を公開致します
  • Okinawa.pmなどでPerlConのレポートと支援していただいた皆さんへの感謝のトークをする予定です

mac osでPerlのビルドでld関連で死ぬ時

趣味はPerlのビルドなので、plenv経由でPerl5.28.1を入れようとしたところ以下のようなエラーが発生しました。

./miniperl -Ilib make_ext.pl DynaLoader.o  MAKE="/Library/Developer/CommandLineTools/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=static CCCDLFLAGS=
Generating a Unix-style Makefile
Writing Makefile for DynaLoader
"../../miniperl" "-I../../lib" DynaLoader_pm.PL DynaLoader.pm
rm -f DynaLoader.xs
cp dl_dlopen.xs DynaLoader.xs
"../../miniperl" "-I../../lib" "../../lib/ExtUtils/xsubpp" -noprototypes -typemap '/Users/anatofuz/.plenv/build/1549952483.53003/perl-5.28.1/ext/DynaLoader/../../lib/ExtUtils/typemap'  DynaLoader.xs > DynaLoader.xsc
mv DynaLoader.xsc DynaLoader.c
cc -c   -fno-common -DPERL_DARWIN -mmacosx-version-min=10.14 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -Wall -Werror=declaration-after-statement -Werror=pointer-arith -Wextra -Wc++-compat -Wwrite-strings -O3   -DVERSION=\"1.45\" -DXS_VERSION=\"1.45\"  "-I../.."  -DLIBC="" DynaLoader.c
rm -rf ../../DynaLoader.o
cp DynaLoader.o ../../DynaLoader.o
rm -f libperl.a
/usr/local/bin/ar rc libperl.a op.o     perl.o  gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro_core.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o caretx.o dquote.o time64.o   DynaLoader.o
cc -o perl -mmacosx-version-min=10.14 -fstack-protector-strong -L/usr/local/lib  perlmain.o   libperl.a `cat ext.libs` -lpthread -ldl -lm -lutil -lc 
ld: warning: ignoring file libperl.a, file was built for archive which is not the architecture being linked (x86_64): libperl.a
Undefined symbols for architecture x86_64:
  "_PL_csighandlerp", referenced from:
      _main in perlmain.o
  "_PL_do_undump", referenced from:
      _main in perlmain.o
  "_PL_exit_flags", referenced from:
      _main in perlmain.o
  "_PL_perl_destruct_level", referenced from:
      _main in perlmain.o
  "_PL_sig_name", referenced from:
      _main in perlmain.o
  "_PL_sig_num", referenced from:
      _main in perlmain.o
  "_Perl_newXS", referenced from:
      _xs_init in perlmain.o
  "_Perl_rsignal", referenced from:
      _main in perlmain.o
  "_Perl_rsignal_state", referenced from:
      _main in perlmain.o
  "_Perl_sys_init3", referenced from:
      _main in perlmain.o
  "_Perl_sys_term", referenced from:
      _main in perlmain.o
  "_boot_DynaLoader", referenced from:
      _xs_init in perlmain.o
  "_perl_alloc", referenced from:
      _main in perlmain.o
  "_perl_construct", referenced from:
      _main in perlmain.o
  "_perl_destruct", referenced from:
      _main in perlmain.o
  "_perl_free", referenced from:
      _main in perlmain.o
  "_perl_parse", referenced from:
      _main in perlmain.o
  "_perl_run", referenced from:
      _main in perlmain.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [perl] Error 1
Installation failure: make at /Users/anatofuz/.plenv/plugins/perl-build/bin/perl-build line 10353.
ABORT

plenvやperl-buildのエラーではない(ldなのでコンパイルが走った後のエラーである)事から、Perl自体の問題ではあると思っていたので、Perlのバグのページなどを見ていました。

rt.cpan.org

(一応Mojave独自のエラーとしてはこれがあり、ヘッダーファイルをコピるdmgを実行することで回避出来るそうです)

ただbugsのページを確認していても、ld関連のバグ報告がなく、Perl入学式のslackで相談してみました。

僕以外のmojave環境では普通にビルドが通るらしく、これは...となっている時にこのエントリが発見されました。

naoyat.hatenablog.jp

見事にbinutilsをいれており、arが被り破滅していました。

ということで brew uninstall binutils して強制的に解決。

その結果見事にperl 5.28.1がビルド出来ました!!!

Perl入学式の皆さん有難うございました!!! 流石にこれは訓練されてないと気づかない...!

完全にMojaveだと疑っていましたがおま環問題でした。Appleの皆さんすいません :bow: