YAPC 2013年を終えて

まずは、スタッフ関係者の皆様本当にお疲れ様でした。

今回レポーターと言うかたちで参加させていただきました。毎年、気がつくと上がってくるgihyoのレポート記事は小人さんが動いているわけではなくてメンバーに登壇者が多く非常に忙しい中で発表の内容をきちんとまとめて報告されている。英語が得意なだけのひとに専門分野の英文の翻訳を頼むとこちらが想像する以上に大変らしい。専門分野に対する知識がそれなりにないと言語が理解できてるだけでは翻訳するのすら大変だという事例なんですがレポートされる記事は当然のように発表者それぞれの専門分野であり時には英文での発表も混じっている。これをあの短時間でメモをとり誤解なきように理解しちゃんとした文章で伝えることは大変なことだと思う。枠に対して少ない人数で、中には一人で相当な数かつLTのような事前準備がしにくいものを率先して担当されている方もいらしてその仕事ぶりに頭が下がるとともに、こんなところからもちゃんと支えている人がいるんだなということが自分の目で確認できたことは今回大きかったです。

一方、発表の方なんですがFreekOutやNHNあたりを中心に見ていた感じ全般としてクオリティやチーム、そして後発の人たちへの配慮などを含めたうえで如何に共有するか、基盤を提供するかと言うところに重点を置かれていたかんがありました。Daisuke Makiさんの「Fighting Legacy Perl 」では誰も手をつけたくない。時にはコミットログに呪詛をしこみたくなる大規模なレガシーコードを整備してこれから発展するための基盤を整えたり、Kazuhiro Osawaさんの「Inside amon2-livedoor-setup.pl with web application development 2013 」ではおそらく同じ流れだとは思うのですが整えられた基盤の上でレガシーコードを生成しないシステムを整えたり、Tatsuro Hisamoriさんの「フルテストも50msで終わらせたい 〜 FreakOutの取り組み 〜 」ではテストが重くなることによりテストがされない状況を如何に回避するかという問題に取り組むことにより組織全体がダメな方向に走っていくことを食い止めることをしているように感じました。同じながれとしては、karupaneruraさんの「ぼくがかんがえたさいきょうのMVC 」も同様の系統にはいると思っていて。MVCその物がテスタブルなコードを作るという目的を含んでいると思っていてOOPと合わせて如何に疎結合で重複のない(コピペ駆動のない)世界を作れるかというものだと思っています。ところがMVCをきちんとやれているコードを作れるチームと言うのは必ずしも技術レベルも均一するわけではないので非常に難しい。そういうのを踏まえた上でどうやって技術的負債を生まない未来へいけるかという話だったと思います。(働くならこういう思想を持っていて実行できる方々と働けると割と幸せになれますよ)

終わりに、perlをやっていて一番感じるのはopen & shareがしっかりされているということです。CPANというシステムが美味く機能しているということもあるのですが、特に日本語でこれだけちゃんと情報発信してくれるのは(LLだと割と多いかもしれないですけど)貴重なんじゃないのかなと思っています。今回あんまり発表は聞けなかったのですがtokuhiromさんとか常に最新の情報や自分の得た知見などを報告しつづけていて非常に助かっています。もちろん彼だけではないですが、ああいう草の根活動されているかたたちがいることがコミュニティを支えているものだとおもうのでこの場を借りてお礼申し上げておきます。

perlのhash randomizationに対する勘違いをしていた

perlの5.18からhash randomizationが導入されるとのことで、同一hashに対しても毎回keys,values,eachをやるたびに結果が変わるんだろと思ってたんですが、hash sliseを行った場合なんかやってもちゃんと動作します。

use strict;
use warnings;
use Data::Dumper;

my $hash_seme  = { 1 => 1, 2 => 2, 3 => 3, 4 => 4 };
my $hash_uke   = { 1 => 1, 2 => 2, 3 => 3 };

@{$hash_uke}{keys %$hash_seme} = values %$hash_seme;

print Dumper $hash_uke;
$VAR1 = {
          '3' => 3,
          '4' => 4,
          '2' => 2,
          '1' => 1
        };

なんでだろうなぁと思っていたら、ある方にこちら教えてもらいまして

Further, every hash has its own iteration order, which should make it much more difficult to determine what the current hash seed is.

http://search.cpan.org/~rjbs/perl-5.18.1/pod/perl5180delta.pod#Hash_randomization


同一ハッシュから取れるorderは同一であるようです。
hash randomizationと聞くとアクセスするたびに違うorderになるものかと思っていたのですがどうやら思い込みだったようです。おそらく気をつけるべきケースは、DBやYAMLなどから読み込んだ場合にそこの順序が想定されたものではないというもののようです。

p5_Cnsffcfでservice情報をまとめてかけるようにした。

設定ファイルの中に重複記述が多すぎるのでservice情報をまとめるように変えました。

---
host_and_groups:
  load_balancer:
  - PING
  cache-01:
  - PING
services:
  PING:
    check_command: check_ping!100.0,20%!500.0,60%
    service_description: PING

https://github.com/hiroyukim/p5_Cnsffcf/commit/f11bda83d25239a3eb08f74d82a8ba82aa99bd8c

crontabで設定しても全く反応しない原因はcrondが停止していたことだった

cronが動かないなーって悩んでて、
スクリプト直に叩いても動くし/var/log/cronみてても読み込まれてるし、
意味が分からなくて、

statusしてみたら。。。

/etc/rc.d/init.d/crond status
crond は停止しています

勘弁してください。
止まるもんなのかこれ。。


http://d.hatena.ne.jp/natsumesouxx/20100313/1268479064

agの--ackmateというオプションは何なんだ

agには--ackmateというオプションが存在しててつけるとこんな感じで出力されるわけですが、なんかのformatぽいんだけどなんだこれ。

事前準備

git clone git://bogomips.org/unicorn.git
cd unicorn

ag USR1

t/t0006-reopen-logs.sh
24:t_begin "send reopen log signal (USR1)" && {
25:     kill -USR1 $unicorn_pid

ag USR1 --ackmate

:t/t0006-reopen-logs.sh
24;33 4:t_begin "send reopen log signal (USR1)" && {
25;7 4: kill -USR1 $unicorn_pid


https://github.com/ggreer/the_silver_searcher

agでの色設定オプションとちょっと調べたこと

このhelpで出てくるDefault 1;33という表記が気になったのでメモ。

ag --help

--color-line-number     Color codes for line numbers (Default: 1;33)
--color-match           Color codes for result match numbers (Default: 30;43)
--color-path            Color codes for path names (Default: 1;32)

基本的に使い方は

ag USR1 --color-line-number '2;5'

とかやれば、こんな感じでとれて色がついてくれるんだけど

t/t0006-reopen-logs.sh
24:t_begin "send reopen log signal (USR1)" && {
25:     kill -USR1 $unicorn_pid

最初helpの表記がわからなくてどうやってオプションに渡したらいいか悩んでしまい、
コードを落として探したらoptions.cにこうかいてあった。

29 const char *color_line_number = "\e[1;33m"; /* yellow with black background */

最初の数値がnumberの色で後ろの数値が背景色のようだ。

この数値どっからきてんのかなぁとおもってしらべてみると/etc/DIR_COLORSで定義されている物が同様の定義のされ方をしている。どうもこのへんの流れらしい。そっからさきはまだ調べてない。

%SIGとkill -lでそれぞれ登録されているシグナル

kill -lで一覧が見られると言うことで%SIGもだしてやればみられればおもしろいかなとおもってだしたんだけどググってもひっかからん。。

%SIG

perl -e 'print join " ", keys %SIG'
NUM63 TRAP NUM42 URG STOP NUM39 NUM62 NUM43 USR2 NUM57 NUM56 RTMAX NUM59 VTALRM CONT NUM45 NUM61 TERM NUM44 NUM36 NUM32 BUS NUM40 NUM51 IOT STKFLT NUM41 KILL QUIT NUM37 NUM50 ABRT NUM48 CLD NUM35 NUM38 TTOUIO TSTP PROF NUM53 NUM58 SEGV RTMIN POLL PIPE SYS NUM46 PWR CHLD HUP FPE NUM54 XCPU TTIN NUM52 NUM55 XFSZ NUM33 INT NUM49 UNUSED WINCH USR1 ILL ALRM NUM47 NUM60

kill -l

kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS