sironekotoroの日記

Perl で楽をしたい

Perl入学式で勉強した後の力試しに良さげなサービスの紹介

こんちゃす。sironekotoroです。

このエントリは Perl入学式 Advent Calendar 2017 - Qiita 6日目のエントリです。
昨日はPerl入学式東京の名講師、 @xtetsuji さんでした。

いきなり私事ですが

最近色々あり、転職だー!と意気込んでいろいろと見ているのですが、面白げなサイトを見つけました。

注意:これはPerl入学式 Advent Calendar 2017 のエントリですが、Perl入学式がこのサイトを推している訳ではありません。

転職サイトPaizaで行なっているスキルチェックです。

paiza.jp

Paizaのスキルチェック

ランクは難易度の高い順に S,A,B,C,D の5段階があります。
ランクDの問題は80問ほどあり、Perl入学式で学んだ知識で十分解けます。
ランクCは40問ほど。こちらはリファレンス使わないと面倒な問題がありますが、解けます。
入学式に参加している人、または入学式を終えた人の力試しとしてちょうど良いです。

やってみる、その前に

以下は、ログインしなくても解ける掛け算の問題です。

掛け算 (paizaランク D 相当)
https://paiza.jp/learning/multiplication

ここでおもむろに

  • 入力欄右上の「使用する言語」で「Perl」を選択
  • 入力欄の文字を全部消す
  • 入力欄に print $]; と入力
  • 「提出前動作確認」ボタンを押す

当然不正解となります。 しかし

提出コードのアウトプット 5.022001

Perlのバージョンが5.022であり、Perl入学式でインストールしたPerlと互換性がありそう、ってことが分かります。
また、ここで使えるPerlは、List::Util等の便利モジュールも利用可能になっています。

やってみる

この掛け算問題はデモなので、解法の例を挙げておきます。
本番の問題を情報共有するのはNGです。 あと、データは標準入力から改行付きで渡されるので、chomp忘れないように気をつけましょう。

use strict;
use warnings;

# 最初の行の入力を変数`$first_num`で受け取る
my $first_num = <STDIN>;

# 次の行の入力を変数`$second_num`で受け取る
my $second_num = <STDIN>;

# 上記二つの変数についてる改行文字を削除する
chomp ($first_num , $second_num);

# 二つの変数を掛け算して、答えを$answerに入れる
my $answer = $first_num * $second_num;

# $answerを出力する
print STDOUT "$answer\n"

もひとつ、短いバージョンも

use 5.022;
my @a = <STDIN>;
chomp @a;
say $a[0]*$a[1];

Paizaのスキルチェックで良かったところ

普段自分のコードでは除外している考えやシチュエーションがあり、新鮮で面白いです。
本職のプログラマさんはこんな感じで時間に追われながらコード書いてるんかなぁ、と思ったり、テストコードちゃんと用意するのも大変そうとか、本職プログラマの方のお仕事の大変さがちょっとだけ見える気がします。

Paizaのスキルチェックでイケてないところ

提出時にいくつかのテストケースでテストを行うのですが、そのテストデータは公開されません。
ですので、テストに通らない時は「何がおかしいのか?」ってのを問題文や入力値のとりうる範囲から探っていくことになり、これが割とキツイです。
あと、他の人のアーティスティックな回答とか見られないの残念かつもったいない気がしますね・・・まぁ、本来は転職に使う用のものなので仕方ないか。

おまけ

なお、転職活動や業務引き継ぎ資料の作成そっちのけでこのサイトのスキルチェックを行い、ランクA、Bが解けなくて本当に悔しくなり、

  • 「この問題、遠い昔に聞いた『順列』とやらを使えば良さそうだけど、分からないからコードにできない」
  • 「このデータ、規則性はありそうだけどコードで表す方法わからない」
  • 「やはりアルゴリズムとか数学の勉強しなくてはいけないのでは?」

となり、N予備校に入学したのを良いことに中学数学からやり直すという本末転倒、目的と手段の入れ替わりみたいなことになってますが、楽しいんでokとします。解の公式、美しいですよね。

明日は・・・まだ決まってない?ので是非誰か参加を〜!

Perl入学式で勉強して、情報処理試験の問題を解こう!& おまけ

こんにちは

本年はPerl入学式(東京)でサポーターやっておりますsironekotoroです。

このエントリは Perl入学式 Advent Calendar 2017 - Qiita の2日目です。

qiita.com

Perl情報処理試験問題に出ていた事があった

出オチです。

平成18年度 春期 テクニカルエンジニア(情報セキュリティ) 午後I 問題
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2004h16_2/2004h16a_su_pm1_qs.pdf
問1「Webサイトのセキュリティに関する次の記述を読んで、設問1~4に答えよ。」

ブラウザからユーザーのデータを送信する際、留意すべき知識を問う問題です。
留意しないと、いずれ徳丸先生が来る事態になります。
是非一度チャレンジして見てください。

注意

残念なことに試験問題へのPerlの採用は2011年まで。代わりに入ったのはECMAScriptでした。

情報処理推進機構情報処理技術者試験:新着:情報セキュリティスペシャリスト試験(SC)で出題するプログラム言語の変更について
https://www.jitec.ipa.go.jp/1_00topic/topic_20111026_sc_yougo.html

それって

・・・Perlやっても今の情報処理試験の問題解けないじゃん!
いえいえ、Perlやってると不思議と他のプログラム言語のつくりとか分かるんですよこれが。
プログラム言語はだいたい英語で書かれてますし、大体の言語で if とか for の仕組みが大きく違うわけではないです。

また、この試験問題の巻末に「プログラム言語Perlの用例・解説」があります。
これがPerl入学式で学ぶ内容とほぼ重なっている事に驚きました。
つまり、Perl入学式やってりゃ試験問題程度のコードは読める!

注意:Perl入学式最大の難所、三日目の悪魔、記号がキモい、Perl初心者転がし、等の異名を持つ「リファレンス」は含まれておりません。

まずPerlでプログラムの基本おさえていきましょう!
分からなくなっても、サポーターが質問に答えてくれるのがPerl入学式です。

さて、明日はYAPC::Okinawa 2018 ONNASON で会える好青年、YAPC運営ブログでおなじみの AnaTofuZ 君です。エモい記事に期待です。

blog.yapcjapan.org

おまけ:プログラム言語Perlの用例・解説

巻末の「プログラム言語Perlの用例・解説」を復習の意味も込めて書写してみました。 openの引数が2つしかないなど、今時なコードではないのですが、Perlの基本は抑えられているという印象です。

試験の過去問題の使用に関しての注意書き

なお、この書写はIPAガイドラインを見て、大丈夫と判断して書写・掲載しております。

IPA 独立行政法人 情報処理推進機構情報処理技術者試験:よくある質問
https://www.jitec.ipa.go.jp/1_09faq/_index_faq.html

試験センターで公表している過去の試験問題の使用に関し、許諾や使用料は必要ありません。(ダウンロードでのご利用も特に問題ございません。)
 ただし、以下の留意点を必ず確認の上、ご使用ください。

【留意点】
著作権は放棄していません。
・教育目的など、情報処理技術者試験制度、情報処理安全確保支援士制度の意義に反しない限り、公表されている過去問題を問題集やテキストに使用される際、許諾および使用料の必要はありません。
・出典は明記してください。
 [例]「出典:平成○年度 ○期 ○○試験区分 午前 問1 設問2」
 また、問題の一部を改変している場合、その旨も明記してください。
・公表しているPDF以外の電子データの提供はできません。
 (PDFセキュリティの解除方法は提供できません。)

続きを読む

Software Design 2017年12月号

うわ、ずいぶんとblog書いてなかった・・・

最近、ドワンゴN予備校に入学しました。

www.nnn.ed.nico

とあるJavaScript本で勉強していたんですが、本の内容と付録CDROMでコードが異なるとか、コードの追加部分が分かりにくい等でめっちゃストレスが溜まっていたんですね。 一度、有料のオンライン講座?講義?的なものに挑戦したかったのと、増田で話題になっていたこともあり、興味本位での入学です。

anond.hatelabo.jp

ところが、ログイン後の初期画面に表示されていた「数学I」をちょっと覗き見し、その問題にちょっと手を出したところ、解けない・・・かつては解けた、二次関数のグラフが書けない・・・もう、超ショックを受け、一念発起、中学数学から復習してる昨今です。

平方根の付け外し、移項に伴う符号(+-)の逆転、指数計算とそれまでの学習全部を使って導く「解の公式」。 中学数学の中ボス感すごい。

{ \displaystyle
x = \frac{-b\pm \sqrt{b^{2}-4ac}}{2a}
}

で、タイムリーなことにSoftware Design 2017年12月号の特集は「ITエンジニアと数学」。

gihyo.jp

生きていると、たまに自分の欲しいものがタイミングよく現れることがあるんですが、今回もそう。 早速、最初に載っていた「モンティ・ホール」問題のスクリプトPerlで書いてみました。 元はPythonで書かれているのですが、構造や単語からなんとなく読めるのがプログラムのいいところですね。

use strict;
use warnings;

sub game {
    my $change_door = shift;

    my $prize  = int( rand(3) );    # 正解 0,1,2 のどれか
    my $choice = int( rand(3) );    # 最初の選択 0,1,2 のどれか

    my $open_door;   # モンティが開くドアの選択 0,1,2 のどれか

    while (1)
    { # モンティが選ぶドアが$pize,$choiceと重ならないようにループを回す
        $open_door = int( rand(3) );

        # 重ならない値が決まったらループを抜ける
        last if ( $open_door != $choice and $open_door != $prize );
    }

    if ($change_door) {    # 選択を変更する場合
           # ドアは0,1,2しかないので、数の決まったforを使う
        for ( my $new_choice = 0; $new_choice < 3; $new_choice++ ) {

            # 選択し直したドアは、最初にに選んだドア、
            # モンティが開けたドアと重ならないようにする
            if ( $new_choice != $choice and $new_choice != $open_door ) {
                # 条件に合致したら、新たに選択したドアの情報を$choiceに設定して抜ける
                $choice = $new_choice;
                last;
            }
        }
    }

    # 選択したドアが商品が入っていたドアなら1点
    if ( $choice == $prize ) {
        return 1;
    }
    # 外れてたら0点
    else {
        return 0;
    }
}

sub play {
    my ( $num, $change_door ) = @_;
    my $point = 0;

    for ( my $i = 0; $i < $num; $i++ ) {
        $point += game($change_door);
    }
    return $point;
}

my $num = 10000; # 試行回数

my $score = play( $num, 0 );
print "変更しない場合の勝率\t", $score / $num, "\n";

$score = play( $num, 1 );
print "変更した場合の勝率\t", $score / $num, "\n";

うちの結果はこんな感じでした。なるほど。

変更しない場合の勝率  0.3254
変更した場合の勝率   0.658

あと、「課外授業4 数学の勉強法」にあった

確実にわかる、自信が持てるところから再出発しましょう。高校レベル、あるいは中学レベルまで戻って勉強しなおしてみましょう。
(中略)
ノートとボールペンをどれだけ消費するか

これはうちの勉強方針とも合致してて、間違った方向にいってなさそう!と心強く思いましたわ。引き続き頑張りまする。

builderscon tokyo 2017に行ってきた

前夜祭

  • みんな大変な思いして、そんで前に進んで行っているんだなぁと

ベストトーク賞に投票した3つの発表

横山三国志に「うむ」は何コマある?〜マンガ全文検索システムの構築

builderscon.io

  • 画像認識してコマの抜き出し、抜き出したコマからOCRで文字認識、認識させた文字を使って検索、さらに翻訳
  • 公開されていた検証用サイト使わせてもらったんですが、ほんとよくできていて、これは潮出版社三顧の礼で迎えるべきプロダクトだと思いましたわ・・・
  • また、コマ分割アルゴリズムの明確さ、コスト意識溢れる設計、褒めるときりがない
  • 懇親会でも作者さんに感動した旨を伝えることができて、そこまで含めて完全に良かったです

Chrome拡張を使って様々なWebサービスをハックする

builderscon.io

  • 普段、FirefoxGreasemonkey使って業務用Webを勝手に使いやすくしているので、興味をもって聞かせてもらった話
  • うちの場合は想定ユーザが自分だけなので、自分だけが使えれば良い・・・というところで終わってしまっていたのだけど、この発表はチーム、グループに配布することを考えて便利に作り込んであるなぁという印象
  • あと、テーブルの並べ替えなんかは自分でもやってみたい

Ionic 3+ではじめる次世代アプリ開発(HTMLでiPhoneアプリをつくろう!)

builderscon.io

  • 激しい煽り口調はないのに、なぜか当日即インストールして、とりあえずサンプルアプリをMac上で動かすところまで持って行ってしまったionic3
  • HTML5だけでいいんです!」と言われつつも、裏で動いてるAngular4とかが気になって仕方ない
  • iPhone実機で動かすところまでやってみたけど・・・
=== BUILD TARGET MyApp OF PROJECT MyApp WITH CONFIGURATION Debug ===

Check dependencies
No profiles for 'io.ionic.starter' were found:  Xcode couldn't find a provisioning profile matching 'io.ionic.starter'.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

** ARCHIVE FAILED **
  • xcodeで何かする必要がありそう、ってところまではわかったが、厳しいので一旦離脱
  • やっぱ環境構築がネックだよなぁ・・・
  • 初心者向けハンズオンとかあったら行きたい

その他

  • 会場快適でした。YAPC2013、2014でお世話になったけど、広くて空調効いてて良かったです
    • そういえば、無線LAN全く切れなかった
  • ストラップというか、名札最高でした

Perl入学式 2017 東京 #4 と正規表現キャプチャ変数

  • 教える事で学ぶことがある、とよく言われますがこれは本当にそうで
my $words_ref = [
    'alice loves meat!',
    'bob loves sushi!',
];

このような配列のリファレンスを受け取り, リファレンスに格納された文字列について,「loves」の後に記述されている好きな食べ物の単語を正規表現で取得し,「alice -> meat」, 「bob -> sushi」のように表示するサブルーチン, love_foodを書いてみよう. https://github.com/perl-entrance-org/workshop-2017/blob/master/4th/slide.md

  • うちの解答例がこれ
use 5.012;
use warnings;

my $words_ref = [ 'alice loves meat!', 
                  'bob loves sushi!', ];

for my $line (@$words_ref) {
    if ( $line =~ /(\w+) loves (\w+)/ ) {
         say $1 , "->", $2;
    }
}
  • ここで、受講生の方から以下のようなコード書いたけど、この動作は仕様か?という質問があり
use 5.012;
use warnings;

my $words_ref = [ 'alice loves meat!',
                  'bob loves sushi!',
                  '    loves ramen' ];

for my $line (@$words_ref) {
    if ( $line =~ /(\w+) loves (\w+)/ ) {
         say $1 , "->", $2;
    }else{
        say "\$1 is " , $1; # $1 is bob
        say "\$2 is " , $2; # $2 is sushi
    }
}

  • 正規表現のキャプチャを連続して行なっている時、正規表現のキャプチャにマッチしなかった場合、キャプチャ変数 $1 , $2 の内容は、前回マッチの内容が残る?というもの

  • これ、知らなかったんですが、実際にそうらしく

キャプチャ変数が更新されるのは、マッチが成功した時だけである。マッチが失敗したら、たとえマッチの一部が成功したように見えても、キャプチャ変数の内容はそのまま残る。
Effective Perl 第2版 - Joseph N. Hall, JoshuaA.McAdams, briandfoy - Google ブックス

  • Effective Perl 第2版、持ってるんだけど全くわからなかった・・・

博多に行ってきた

あんまりPerlにもMacにも関係ない話

  • さっき、YAPC::FUKUOKA 2017 Hakata のblogをあげたんだけど、書いている途中で「これっておっさんの一人語りでノイズだわ」って思った部分だけ切り出しました

sironekotoro.hateblo.jp

6月30日 いざ博多へ

博多到着

  • 冬に行った新千歳でも工事中だったし、やっぱ2020年のオリンピックに向けて全国の空港で整備が進んでるのかな
  • この時点で朝の8時だったので、空港の売店から実家方面にお土産発送

blog.yapcjapan.org

  • YAPCにロゴの利用を許諾して下さったという「にわかせんぺい」さんと、定番「博多通りもん」を中心に組み立て。あと、イチゴのブランド「あまおう」を使ったお菓子など

博多散策

  • JR博多駅近くのホテルに荷物を預け、日本最高の公園である大濠公園へ歩いて行ってみる
    • いつもは博多の友達と一緒だったので地下鉄使ってたけど、一度歩いて行ってみたかった
    • 国体道路」なる太い道を1時間半くらいで到着。

  • 帰り道(歩き)、前夜祭の会場となるヌーラボさん横のお寿司屋さんでお昼を食べる。

nulab-inc.com

  • ここで川の上にぶら下がってたバイク、落ちちゃったのかな

  • いったんホテル戻ってシャワー浴びようとしてビックリした

7月2日 陥没事故現場

  • ホテルからJR博多駅に行く時に陥没事故の現場を通る
  • 愛媛銀行前だったんですぐわかった

www.youtube.com

柳川へ

  • 博多には結構な回数いってて、博多市内の観光名所はだいたい見て回っていたので、YAPCのblogを参考に柳川へ

blog.yapcjapan.org

  • 柳川までは西鉄天神駅から特急で1時間ちょっと
  • 途中、チェッカーズの出身地として有名な久留米の街を経由。結構大きな街だった
    • 平成も30年になろうかというこのご時世、チェッカーズとか知らない人多そうだよなぁ

www.youtube.com

  • 柳川は水郷、水の都といった趣。
  • お腹が空いていたので、柳川駅からバスで旧柳川藩主邸の「御花」へ

www.ohana.co.jp

  • 柳川名物「うなぎのセイロ蒸し」をキメました

    ・関東:背開き→切る→串にさす→蒸す→蒲焼(タレ焼き)
    ・関西:腹開き→素焼き→蒲焼(タレ焼き)
    ・柳川:背開き→素焼き→蒲焼(タレ焼き)

  • どっち開きかはわからないんですが、おいしかったわ〜
  • 一食3000円超えるとか、普段の暮らしでは理性ブレーキが効いて無理だけど、それが取っ払われる旅行だからこその贅沢
  • 食べた後、川下りして柳川駅へ・・・と思ってたら、どうも駅行きは団体参加貸切しかない模様!!!
  • Q.でも川下りはしたい!どうする!
  • A.一度駅に戻って川下り
    • なお、完全に無駄だったかというとそういうことはなく、御花近くの柳川城跡などを見たりしたのでした
    • 盛り土と石垣だけだったけど、堀の近くにあって水城って雰囲気はあった
  • 柳川城跡近くで運良くタクシーを拾い、船着き場まで
    • 炎天下だったので、幸運だった
  • そこから、川下り開始。目的地は御花。さっきまでそこいたよ!
  • なお、同乗のお客さんは台湾と韓国の方々
    • インバウンドすごい
    • 博多もインバウンドの方が本当に多かった
    • どういう紹介のされ方してこの柳川にいるんだろう?Japanese traditional old waterfront city とか?
  • 船頭さんはご年配の男性の方でしたが、橋をくぐる時には中国語とハングルで「頭を下げて」と言っておりました
    • 女性の船頭さんもいるとのこと
  • 昔は「川下りなんて年寄りな・・・」って思ってたけど、川から見上げる街の様子なんかが楽しくて、俺も年取ったなーってことに気づきました
  • 川下りでせっかく御花に戻ったので、お土産品とか見てたけど、「さげもん」なる雛飾りが綺麗でした

さげもん - Wikipedia

焼き鳥(豚バラ

  • 柳川から博多に戻り、博多祇園山笠の「飾り山」などを見つつ、予約してもらった焼き鳥屋さんへ

tabelog.com

  • なぜ博多まで来て焼き鳥?というと簡単でYAPC運営のblog見たからですね

【YAPC::Fukuoka 2017 HAKATA】福岡では豚バラは、焼鳥です。(飲み屋情報) - YAPC::Japan 運営ブログ

  • 当日付き合ってもらった博多出身の友人によると、焼き鳥屋に豚バラがあるのは「普通すぎて、おかしいと思わなかった」とのこと
  • ここで結構飲んで飲んで食べて食べて、おいしかったーってところでこの日は解散
  • 帰りに一人でシメのラーメン食べてホテルへ

さよなら博多

  • テルチェックアウトして、糸島へ

  • 悲鳴すごかった

  • レンタサイクルで玄界灘を見に行く、という計画を諦め、糸島にあるラーメン一蘭の「一蘭の森」へ
  • で、駅で無料送迎バス待ってたんだけど、ここでトラブルが

  • レスポンシブデザインでtableの要素が表示されなくなってたぽい
    • なお、今は直っております
    • 画像ベタ張りで

www.ichiran.co.jp

  • ただまー、上記のトラブルもあり、工場自体も観光というには乏しい施設で、「一蘭の森」自体は楽しめなかったなぁ
  • 無料送迎バスのおっちゃんから聞いた、糸島に九州大学が来てからめっちゃ栄えてる、バブル来てるって話が一番面白かった

  • 最後にもう一度、大濠公園を1周してスタバでドヤる

  • 松坂投手、大濠公園の近くにマンションを買ったって友達が言ってた

いつもの横浜

  • 旅行で日本全国色々言っているけど、沖縄はまだ足を踏み入れたことがないので楽しみ〜

  • YAPCの運営ブログに頼るだけで素敵旅行ができるのすごい

    • 今回ひどい目にあった「一蘭の森」は紹介されていなくて、ほんと凄い

YAPC::Fukuoka 2017 HAKATA

いざ博多へ

全然野菜

  • GMOペパボさんで開催の非公式イベント
  • 「全然野菜」ってのは「前前夜祭」を変換するとこうなるってことで
  • 「前」前夜祭ってことですが、前夜祭の直前に実施
  • 前前夜祭でおおって思ったのは「OCTOPASS」
    • tomohisaoda.com
    • システムの「使いまわせるところ」を切り出して、外に出して、しかもサーバの運用はお任せしていくっての、プログラミングだよなぁって

前夜祭

    use Acme::Want5000trillion;
    my $want = Acme::Want5000trillion->new;

    print $want->say(); #5000兆円欲しい!
use Acme::SuddenlyDeath;

  print sudden_death('突然の死')."\n"
  # outputs =>
  #   _人人人人人_
  #   > 突然の死 <
  #    ̄^Y^Y^Y^Y^ ̄

YAPC::Fukuoka 2017 HAKATA 当日

    • ヘーゼルナッツラテと豆乳ラテ美味しかったです
    • まったく切れない無線LANと駅近ビル、オサレ会場、フリードリンクエリアに会社の勢いを滅茶苦茶感じる

Be PaaS Monger - クラウドエンジニアの三大美徳、またはIaaSを使わない3つの理由

  • 一番聞きたかった、わいとん(@ytnobody)さんの発表
  • スライドもMicrosoft OneDriveにおいてあるPowerPointか・・・エディタもVS Code だったし、そりゃMSの人とまちがえられるのも無理ない
  • というか、最近知恵がついてきたので、プログラム書きっぱなしってことができなくなり、自然と運用も気を使わざるを得なくなってて、ほんと書く前に運用を想像して書けなくなって死ぬことが多すぎてなんとかしたいんですよね!!!
  • まぁ、開発するよりも運用して使って行く期間の方が長いと言われるので、当然と言えば当然なんですが
  • 物事を判断するときにいろんな基準・軸があるけど、お金もその軸の一つと考えているので、共感しまくり
  • 完璧にレベル高かったです
  • わいとんさんはMSの人ではないけど、エバンジェリストってこういう仕事なのかもしれないって

ノベルティ

  • カンファレンスではいろんなノベルティが配布されるんだけど、これはすげえってのが
  • 米って
  • Perlのイベントで、パールライス、いやわかるんだが、米って
  • Pencilさん、すげぇ会社だ

未来のプログラマー達へ ~Perl入学式卒業生から~

  • speakerdeck.com
  • Perl入学式の先輩のトーク
  • ほんと、Perl入学式に一歩踏み込む、その一歩が重いというか、その最初のハードルが高いというか
    • 自分の感じ方なんですけどね
    • うちの業界だと、勉強会って企業がやってる「セミナー」しかないからってのもあるかも
  • 最後に紹介されている参考図書、全部持ってて、とても嬉しくてニヤニヤしてた

その他

YAPC::Okinawa 2018 Onnason