コードを書きたい

コードが書きたかった

ISUCON10予選に初参加しました

はじめに

isucon.net

9月12日に行われたISUCON10予選に参加させていただきました。

チームメンバーは@kugi_masaくんと@yamakatsu1217くんと僕の3人で、チーム名はお互いの名前をとって「Mt.SpringNail」という名前で参加させていただきました。

ISUCON自体の参加は全員、これが初めてで自分は右も左もわからない状態からの参加になりました。

全員、初めての参加だったので事前に行われていたISUCON事前講義やもくもく会などのイベントに参加したり、過去問をすこし触ったりする程度の事前準備をしていました。

とりあえず今回はFailしないということを目標にしていました。

競技開始まで

競技が12:00から開始ということになったのでそれまでに過去に行われたISUCONのエントリーを眺めるなどをして自身の士気を高めていきました。

あとチームメンバーが全員起きているかどうか確認したりしていましたね。

競技開始とサーバーへの接続

競技開始時間になりポータルが502になったりしていたのですが、なんとか自分のチームのサーバーのIPアドレスを取得することができたので早速接続を試みようとしてみました。

しかし、サーバーへの接続がうまくいかず、一、二時間くらいてこずっていたと思います。

これは予選マニュアルをよく読んでおらず、configの書き方を間違っていたために接続できなかったというとても初歩的なミスでした。

ミスに気がついてくれた@yamakatsu1217くんにはとても感謝しています。

コードとにらめっこ

動作確認も終わったので実際に動いているコードを読んでみました。

といっても、今回、Go言語を利用しており、自分の使ったことのない言語を読む作業にとても苦しめられていた印象があります。

これ怪しいよね、これ遅いよね、などチームメンバーと問題点をピックアップして、その実装箇所を書き換え、デプロイしてベンチを回して点数を確認する作業を進めていきました。

実際にやったこと

必要ではなさそうな関数を実行しないようにしてみたり、DBにインデックスを貼ったり、他には使ってなさそうな引数などを消してみたりしてみました。(あとで意味がなかったことがわかった変更もありましたが…)

作業を反映させてベンチを回した際に点数が上がったときはチームメンバーの盛り上がりが凄かったです。しかし、下がった時にはなぜ下がったのか理解できなかったりして「どうすんだこれ…」状態になっていました。

参加してみて思ったこと

自分がまだまだ知識が全然ないこと、問題点となりそうな動作のピックアップがあまりできなかったこと、最適なコードを書くことができなかったことなど問題点が結構出てきたなと思いました。

そもそもISUCONでよく使われている作法などもよく理解していなかったので、そこも、より深く知りたいと思いました。

そして急に参加を呼びかけたにもかかわらずチームメンバーを集めてくれた@kugi_masaくんや、協力してくれた@yamakatsu1217くんにも感謝しています。

最終的な点数

isucon.net

こちらに出ている点数では僕らのチームは607点でした。

とりあえず点数はでていたのでよかったです。

来年に向けて

来年は今年と同じチームで出ることが難しそうなので、同じ大学の強そうな人を誘って参加してみたいと思います。

また、来年は今年の点を超えれるように頑張りたいです。

自分の持ってない知識を勉強して強くなって帰ってこれるように頑張ります。

CentOS7でPHPをCronで実行させ、実行結果をGmailで取得する

はじめに

以前、以下のようなブログを投稿させていただきました。

jdkfx17.hatenablog.com

このプロダクトを現在、自宅に置いてあるCentOS7マシン(以下、自宅サーバー)でCronを使って定期実行させています。また、定期実行した際にツイートの実行結果をGmail経由で通知するように設定しています。

その設定を色々と調べた際に、情報がひとまとまりになっておらず、自分のしたいことを一気に設定できるようにいろいろなブログを拝見させていただきました。

それらのブログなどから得た知見を元に、この記事では自分が行った設定方法を備忘録として書いておこうと思います。

最終的に以下ようなCronの設定になっているのですが、こちらについて順々に解説していこうと思います。

#send Email address
MAILTO=example@gmail.com

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com

 

CronでPHPを実行する

CronでPHP処理を実行する前に、このプロダクトでは定期実行時に以下のコマンドを実行しています。(いつものやつです。)

php index.php

では、Cronでこのようなコマンドを打つためにはどうすればいいかというと、実行したい日時のあとに「/usr/bin/php」からPHPを呼んであげる必要があります。もしかすると、サーバーによって違いがある可能性があるのですが、「/usr/local/bin/php」からでもPHPを呼ぶことができます。その後、行いたい処理が書かれているコードの絶対パスを指定してあげる必要があります。今回は「/home/user-name/workspace/hitbot/index.php」でした。

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php

こうすることによって、PHPファイルを定期実行することができるようになりました。

 

 Gmailアドレスに実行結果を送信する

冒頭の記事を見ていただくとわかりやすいのですが、このbotでは実行されるたびに以下のコマンドでツイートできたかどうか分かるようにしています。

// ツイート成功時
print "tweeted\n";
// ツイート失敗時
print "tweet failed\n";

この結果を自分のメールアドレスに送信してちゃんと実行されているのか確認したいと思います。デフォルトでCentOS7ではCronで行った実行結果を「/var/spool/mail/user-name」というところに送信されるようになっています。

その設定をCronで自分のGmailアドレスに変更してあげようということです。

CentOS7のmailコマンドでGmailにメールを送信する方法は少し長くなってしまうので、こちらの記事を見て設定することをおすすめします。

qiita.com

mailコマンドが使えるようになったらCronで定期実行したいコマンドの以降に、このような記述を追記します。

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com

あとは、送信先の設定をするだけです。

Cronの設定に自分のメールアドレスを以下のように追記します。

#send Email address
MAILTO=example@gmail.com

これで定期実行した際に自分のGmailアドレスに実行結果が送信されるようになったと思います。僕の場合では、定期実行した際に「tweeted」や、「tweet failed」というメールが飛んできます。

 

最後に

分かる人からすればとても簡単な作業だと思うのですが、自宅サーバーでCronを実行したことがそんなになかったので、いろいろなブログを参考に自分なりに設定方法を書いてみました。

もし同じような作業をしようとしている方が、参考になれば幸いです。

もしなにかミスや、挙動が違った場合などがあればTwitterなどから連絡していただけると幸いです。

広島工業大学休講botを作った

はじめに

大学がオンラインの体制に変わって約2ヶ月が経とうとしています。

しかしながらオンラインの授業体制という状況でも大学の授業は休講になる授業もあるらしく、そこで、休講情報をTwitter上で手早く迅速にキャッチできるようにという理由で、今回、広島工業大学の休講botを作りました。

以下リンクになります。

 

作り始めようとした経緯

もともと、休講情報をTwitterに情報共有したいなという理由で作りたかったという意思はありました。このプロジェクト自体も、今年に入ってすぐに立ち上げたもので最初はPHPを利用して自分のスキルをあげたいという目的のもと作ることを決意しました。

最初は以下のスライドを参考にしていました。

speakerdeck.com

つまづいたところ

この休講botですが、今年のはじめにプロジェクトを立ち上げたのに完成したのは半年もかかった7月の中旬になります。

なぜこんなにも時間がかかってしまったのかというのを書いていきたいと思います。

使用するライブラリの影響

プロジェクトを立ち上げようとした際、このプロジェクトに欠かせない構成として、学校のポータルサイトから休講情報をクローリング する必要がありました。

そこでPHPでクローリング をするために必要なライブラリを探して、実際に導入し、まずはポータルサイトにログインするところから始めようとしました。

最初に使ったライブラリというのがこちらの記事に書いてあるGoutteというライブラリです。

qiita.com

qiita.com

こちらのライブラリを自分のプロジェクトに導入してみて使ってみようと思ったのですが、なぜかこのライブラリでは広島工業大学ポータルサイトにログイン自体ができなかったのです。

問題を探ろうにも自分の力ではなにもできず、このプロジェクトは放置されておりました。

休講情報を取得する方法について

後述するのですが、このプロジェクトは現在、上記のGoutteというライブラリではなく、php-webdriverというライブラリを活用して運用されています。

github.com

このライブラリを使い、ポータルサイトにログインして、いざ、休講情報をとりだすことには成功しましたが、id属性で指定されているtableの文字列を全て抽出してしまうため、全ての休講情報をとりだしてしまい、ひとつひとつの休講情報をとりだすことができませんでした。

string(118) "工学部 電子情報工学科 3年次 2020/07/20(月) 1・2時限 アナログ電子回路 オンライン授業"
string(119) "工学部 建築工学科 3年次 2020/07/20(月) 7・8時限 建築設備B 橋本 俊二 オンライン授業" 

 このように情報を取得したかったのですが…

string(296) "学部 学科 開講年次 日付 時限 授業名 備考
工学部 電子情報工学科 3年次 2020/07/20(月) 1・2時限 アナログ電子回路 オンライン授業
工学部 建築工学科 3年次 2020/07/20(月) 7・8時限 建築設備B 橋本 俊二 オンライン授業" 

 このように情報が取得されてしまいます。

最初の”学部 学科 開講年次 日付 時限 授業名 備考”なんて文字列は取得されたくないし、このままツイートされてしまうとTwitterの140文字制限に大いに関わってくる問題になってしまう可能性などが懸念されます。

そこで利用したのがXpathで取得したい情報を取得するという方法でした。

Xpath自体は初めて知ったことだったのですが、調べてみるとそんなに難しいことでもなく、初めて知った僕でも20分あれば全然理解できるような内容でした。

このwebdriverというライブラリではXpathを利用してクローリング はできるのですが、実際にこのライブラリにあったXpathの書き方をしなければならないというのが少し難しかった印象を受けます。

実際に書いたコード

<?php
require_once(__DIR__ . '/vendor/autoload.php');
require_once(__DIR__ . '/config.php');

use Facebook\WebDriver;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Abraham\TwitterOAuth\TwitterOAuth;

class Crawling {
    public function access()
    {
        // ダウンロードしたchromedriverのパスを指定
        $driverPath = realpath("/usr/local/bin/chromedriver");
        putenv("webdriver.chrome.driver=" . $driverPath);

        // Chromeを起動するときのオプション指定用
        $options = new ChromeOptions();

        // ヘッドレスで起動するように指定
        $options->addArguments(['--headless']);

        $caps = DesiredCapabilities::chrome();
        $caps->setCapability(ChromeOptions::CAPABILITY, $options);

        $driver = ChromeDriver::start($caps);

        $driver->get('ポータルサイトのログインページURL');

        // テキストボックス入力
        $driver->findElement(WebDriverBy::id('ログイン用のIDinput要素のID属性'))->sendKeys(LOGIN_ID);

        $driver->findElement(WebDriverBy::id('ログイン用のパスワードinput要素のID属性'))->sendKeys(LOGIN_PASSWORD);

        // ボタン押下
        $driver->findElement(WebDriverBy::id('ログインボタンのID属性'))->click();
        
        $driver->get('ポータルサイトの休講情報を掲載しているページURL');

        $twitter = new TwitterOAuth(APIKey, APISecretKey, AccessToken, AccessTokenSecret);

        $results = $driver->findElements(WebDriverBy::xpath("(//table[@id='休講情報を掲載しているtable要素のID属性'])/tbody/tr[1 < position()]"));
        foreach ($results as $result) {
            $twitter->post(
                "statuses/update",
                array("status" => $result->getText())
            );
        }

        if($twitter->getLastHttpCode() == 200) {
            // ツイート成功
            print "tweeted\n";
        } else {
            // ツイート失敗
            print "tweet failed\n";
        }

        // ブラウザを閉じる
        $driver->close();
    }
}

$c = new Crawling();
$c->access();

たったこれだけです。

一応、サイトのURLやID属性などは隠しておきます。見たい方は後述のGitHubから見てみてください。

        $driver->get('ポータルサイトのログインページURL');

        // テキストボックス入力
        $driver->findElement(WebDriverBy::id('ログイン用のIDinput要素のID属性'))->sendKeys(LOGIN_ID);

        $driver->findElement(WebDriverBy::id('ログイン用のパスワードinput要素のID属性'))->sendKeys(LOGIN_PASSWORD);

        // ボタン押下
        $driver->findElement(WebDriverBy::id('ログインボタンのID属性'))->click();

このコードで大学のポータルサイトにログインするための処理を書いています。

        $results = $driver->findElements(WebDriverBy::xpath("(//table[@id='休講情報を掲載しているtable要素のID属性'])/tbody/tr[1 < position()]"));
        foreach ($results as $result) {
            $twitter->post(
                "statuses/update",
                array("status" => $result->getText())
            );
        }

このコードは休講情報を一行ごとに取得してTwitterにポストする処理を書いています。

Xpathのところがすこしだけ苦労しました。

要するにこんな感じ…

疑問点

これまでにこのbotをつかって休講情報を流してみましたが何点か疑問に残る点があります。

TwitterAPIがうまく動かない

これはツイートを送信する際におこることなのですが、TwitterAPIで休講情報をポストする際、なぜか401エラーが帰ってきてしまうことがあります。原因は不明ですが、時間をおくとなぜか送信ができるようになっていたりして、不具合として考えられます。早くなんとかしたいと考えています。

休講情報がない場合に実行させるとどうなるのか

夏休みなど授業がないときにこのプログラムを実行させるとどうなるのかいまだにわかっておらず、空のツイートがされてしまう可能性もあり、タイムラインに意味のないツイートを流してしまう恐れがあります。いずれ、定期実行をしたいと考えているので、はやくなんとかしないといけない作業の一つでもあります。(たぶんすぐにできると思う)

おわりに

このプロジェクトはまだまだ改善の余地がたくさんありますし、実際にいまでも仮想環境から手作業でphpを実行させてツイートをしています。

早くサーバーに移行させて定期的に実行させるようにしたいと考えています。

そして、このプロジェクトに関して、先駆者であった先輩や、Discordで相談に乗ってくださった社会人の方々、ライブラリを提供してくださっている方々に感謝を込めておわりとさせていただきます。協力してくださってありがとうございました。

GitHubはこちらです。PR待ってます。

github.com

 

モブプログラミングで乗り切ったハッカソン

レッドハッカソン

レッドハッカソンオンライン2020

レッドハッカソンとは広島県が毎年開催しているハッカソンのことです。

今年は5月23日、24日の二日間を通してオンラインで開催されました。

詳しい内容についてはこちらをご覧ください。

www.pref.hiroshima.lg.jp

 

ハッカソンで開発したプロダクトについて

今回のハッカソンで開発したプロダクトはこんな感じのコンセプトのプロダクトです。

f:id:jdkfx17:20200604212230j:plain

僕の知り合いのみやぎさんのプロダクトで、以前行われたおうちハッカソンというイベントで作られたものらしいです。

お題に出された表情にどちらが一番合致しているか、WEB上でバトルができるというプロダクトでした。

今回はこちらをより使いやすいものにしたり、改良を重ねようと言う意味でこのプロジェクトに加わることにしました。また、メンバーが僕含め、3人いたのですが僕以外の二人とも(みやぎさん、くぎさん)僕の知り合いだったと言うこともあり、よりこのプロジェクトに参加しようと思った次第です。

もともと開発されていたものというものということもあり、既に基となる機能は実装されていて、初めから作る必要がなかったというのは少し強いなと思いました。

 

モブプログラミングで乗り切った

知り合いがいたという理由で参加したわけですが、中身のコードについてはなにもわかってません。実際に中身のコードをみたのですが、自分はPHPerということもあり、JSで書かれているコードがさっぱりわからず、「これ、なんてかいてあるんだ???」と最初は思っていました。

というわけで、同じメンバーのくぎさんの提案でモブプログラミングで開発をしようということになりました。

そもそもモブプログラミングとはなんやねんという話ですが、簡単にいえば以下のようなものをいいます。

モブプログラミングとは、複数人(モブ:群衆という意味)でパソコン1台を見ながら開発を進めていく開発方法です。一人が作業者で、ほかのメンバーは画面を見ながら意見や指摘をしたりして、開発を進めていきます。また、作業時間を決めて、時間がきたら作業者を交代します。 

 

liginc.co.jp

 

ペアプログラミングと似ていますね。

 

これをまずは僕がドライバー(コードを書く人)となり、他の二人はナビゲーター(指示する人)となってコードを書いていきました。

なかなかチームで開発するような経験もなく、さらに今回初めてのモブプログラミングだったので自分の書くコードが間違ってないか、慎重に書いていました。ナビゲーターの二人の指示もあってか、ちゃんと動くものを自分で実装してコミット&プッシュができてとてもよかったです。

 

この後僕はナビゲーターとなり、ドライバーを交代して、色々調べたり、他人の書いているコードからどんな挙動を書いているのか読み込んだりして、1日目を終了しました。

 

終わりに

実は2日間あるレッドハッカソンなんですが、バイトの都合で初日しか参加できず、残りは二人に任せっきりという形になってしまいました。

二人は夜遅くまで開発していたみたいですし、開発用に使っていたDiscordにリズムという音楽を流すBotを入れて音楽を聴きながら開発していたようです。

深夜まで本当にご苦労様です。という思いで二日目はバイトにいってました。

 

バイト後に聞いた話なのですが、なんと賞ももらえたみたいで、とてもよかったとおもいます。コンセプトが面白かったので、審査員さんからの反応もよかったのではないかなと感じています。

 

このWEBアプリのこれからについてなんですが、いまのところこれからCI/CDの導入などをしてみるなど、自分たちがまだ知らないことをこのWEBアプリに導入し勉強しながら成長させていくようです。

 

ハッカソンが終わっても、Discordでワイワイやってますし、これからより発展させて皆さんに使ってもらえるようなWEBアプリにしていきたいと思っています。

 

初日しか参加できませんでしたが、人生初のモブプログラミングというものができてとてもよかったです。こういった機会を大切にして自分の糧にしていきたいと感じています。

オープンセミナー2020@広島に参加しました #OSH2020

2/8にサテライトキャンパスひろしまにて行われた「オープンセミナー2020@広島」に参加してきました。

 

オープンセミナーとは

オープンセミナーは2003年より中四国地域で開催されている IT技術者向けの非営利の無料セミナーです。 現在は香川県岡山県徳島県広島県愛媛県で開催されており、 企画と運営は各地域の技術系ユーザコミュニティのボランティアによって行われています。

 

オープンセミナー広島とは

広島では毎年2月ごろにオープンセミナーを開催をしています。 実行委員長を毎年交代をし、運営のノウハウを引き継ぎ、新たな実行委員会を毎年立ち上げています。 実行委員会では、ITコミュニティに積極的に参加シている人や、コミュニティを立ち上げている人たちが主となっています。 そのため、コミュニティの年に一度のお祭りのようなものとなっています。

osh-web.github.io

 

今年のテーマ

 今年のテーマは「エンジニアライフ Hacks」で、エンジニアとして常に進化し、成長を続けている個人やチームは、どのようにそれを成し遂げているのかという観点にしたがってセッションが繰り広げられました。

 

僕はまだ学生なのですが、このテーマのもとで、これからエンジニアとして活躍していくためにどのようなことが必要なのか知りたいと思い参加することにしました。

 

聞いたセッションの内容・感想など

聞いたセッションはたくさんありましたが、ここでは特に印象に残ったセッションの内容・感想などを書いていこうと思います。

 

エンジニアであり続けるために- アジャイル時代の「個」と「チーム」 -

 

speakerdeck.com

この発表の中ではエンジニアを続けていくためにはチームで価値を出すことを中心に考え、お話をされておられました。

個人のスキルアップとチームで価値を出すことによって、事業貢献できるチームであればエンジニアを続けることができるんじゃないかという仮説を唱えられました。

では、どうやって事業貢献できるチームであり続けるかということですが、チームでできることを増やすこと、チームの認知を高める活動をすること、チームで複業をすることなどを挙げられました。

また、エンジニアは問題解決のプロとして難しい問題にどう立ち向かうのかということですが、難しい問題に立ち向かうとき、問題の解釈を変えてみること、前提を変えてみること、経験学習をすることを発表者はされておられるようです。そしてなにより、問題解決を楽しむことが大事だとおっしゃられました。

 

好きだから続ける ~ プログラミングを一生の仕事に

speakerdeck.com

納品のない受託開発をされておられる方で、納品のない開発は必要な機能を必要な順番で毎週少しずつ開発し、仕様の変更や優先順位の変更が随時可能で、長期的に開発をすることが特徴的でした。

顧問として直接お客さんの相談にのったり、ソフトウェアエンジニアリングの全てに関わったり(ソフトウェアの企画、設計、コーディング、運用)、お客さんの抱える課題をソフトウェアで解決する仕事をされておられ、プログラミング力とコンサルティング力が求められるそうです。そういった仕事をする人のことを顧問プログラマと呼ぶらしいです。

顧問プログラマとして、必要なものを、動く形で少しずつ、メンテしやすく開発することを大切にしておられ、お客さんとの信頼関係を大事にしておられるようです。

プログラミングを一生の仕事にするために、問題解決を目的とすることや、自分の技術によって世のため人のためになるという考えを持ち続けることを大切にしておられるようです。

技術的なことはシンプルでわかりやすく、勉強をすることや新しい技術を取り入れること、そもそもから考えることを重要視しておられ、精神論的なこととして、人と人との繋がりを大切にしたり、モチベーションを高く維持したりすることも重要視されておられるようです。

 

35歳を超えた僕たちが、今と未来の技術と如何に向き合うか

speakerdeck.com

エンジニアとしての将来を語られておられました。個人的に一番面白かったセッションだったと思います。

エンジニアとしてだけではなく、なにごとにも言えると思うのですが、未来を想像するには、まず過去を振り返るといいということらしいです。

世界は常に進化していき、それに伴い技術もどんどん進化していきます。「技術の進化は『螺旋』である」という@t_wadaさんの言葉とともに語られておられました。

また、技術は進化する一方で変わらないものもあるようで、例えばUnixの哲学であったりとか、WEBとRESTであったりとか、RDBMSSQLなどがそれにあたります。

技術力とはなにかという話の中では、科学を活用して問題を解決する力とおっしゃられ、具体的にはソフトウェアを使って会社の、プロダクトの、チームの問題を解決していく力とされておられました。

地方だからできる成長戦略として、OSSへの開発・貢献であったり、ソフトウェアの知識の研鑽、自分の知識・経験のアウトプットを挙げられました。

まとめとして、年を重ねるごとに経験も増え、経験が増えることで見えるものも変わってくるということらしいです。技術の螺旋に終わりはないし、学びの螺旋はいつからでも始められるという言葉で締め括られました。

 

参加してみて

今回が初めての参加だったのですが、面白い話をたくさん聞くことができたなと思います。僕は就職は東京に行きたいと考えているのですが、案外広島も捨てたもんじゃないなと感じました。

僕が面白いなと思って読んでいた有名な技術書の著者など、なかなか会えることのない方とも会うことができましたし、とても素晴らしい勉強会だったと思います。

また来年も開催するらしいのでぜひ参加してみたいと思います。

PHPerKaigi2020に参加しました #phperkaigi

2/9~2/11にかけて、練馬区立区民・産業プラザ Coconeriホールにて行われた「PHPerKaigi2020」に参加しました。

参加してみてどうだったかの感想や、聞いたセッションのなかで興味深かったものの内容について思ったことなど共有していきたいと思います。

 

PHPerKaigiとは

PHPerKaigi(ペチパーカイギ)は、PHPer、つまり、現在PHPを使用している方、過去にPHPを使用していた方、これからPHPを使いたいと思っている方、そしてPHPが大好きな方たちが、技術的なノウハウとPHP愛を共有するためのイベントです。

 

phperkaigi.jp

 

参加に至った経緯

参加に至った経緯ですが、Twitterをみていて前々からPHPerKaigiというカンファレンスがあることを知っており、今年は参加してみたいなと思っていたので、参加した次第です。今回が初参加でした。

 

Day0(前夜祭)

前夜祭の日は地元広島から東京に新幹線で向かいました。

開催時刻に東京駅についてしまったので前夜祭のオープニングと最初のセッションは拝見できませんでした。

 

PHPJVM を実装して、 HelloWorld を出力してみる

speakerdeck.com

最初はこのセッションを聞きました。

タイトルの通り、JavaVirtualMachineをPHPで実装して動かすと言うセッションでした。

個人的にバイナリファイルなどを扱うといったことを、今後したいとおもっていたので興味深い内容でした。

ただし、内容はそれなりに難しくてまだまだ自分の知識不足を感じました。

 

PHPアノテーションの仕組みとメリット・デメリット

speakerdeck.com

PHPアノテーションについてのセッションでした。

アノテーションというもの自体、ここで初めて聞いたもので、「これがアノテーションなのか」という知識をつけることができました。

アノテーションとは:

コンパイラや実行環境に対して、

プログラムがどういうものか伝えるもの

アノテーションの利用についてメリット、デメリットがはっきりとし、自分のものにすることができたと思ったのでよかったです。

 

PHPre Party

池袋の貸しパーティー会場で行われたイベントだったのですが、皆さんノリノリでとても楽しそうでした。自分は長距離移動をしてきていて、とても疲れていたので端から楽しそうな人たちをみて、楽しんでいました。

 

Day1

前日の疲れがとれなかったものの、朝から参加することができました。

宿泊は南千住のシェアハウスに泊まらせていただいたのですが、そこから会場まであまり時間もかからず、ゆっくりいくことができました。

なお、朝から朝食としてドーナツが支給されており、とても助かりました。

 

CakePHPの進化から読み解く、PHPフレームワークの"今"っぽさ

speakerdeck.com

このトークで1番に注目したいのは「今っぽさ」についてだと思います。

スライドで書かれていますが、PHPとそれをとりまく環境は、どうかわってきたのか、そして、「モダンさって何だ?」と疑問に思うこと、これらの観点を持って聞くことができました。

”今っぽさ”とは、”未来志向の”コードであり、”今っぽい”コードとは、未来へついていける・準備ができていることを指すと登壇者は述べられました。個人的には概ねその通りかなと自分でも共感することができました。

 

PHPでつくるインタプリタ入門

speakerdeck.com

インタプリタについては何の知識もない僕だったのですが、興味が沸いたので聞いてみようと思いました。

インタプリタPHPで実装する理由として、仕様が決まっていること、かつコマンドライツールなので練習として取り組みやすいということが挙げられるらしいです。確かにPHPでなにか作ろうと思ったらデータベースの知識やWEBの知識など勉強することがたくさんで時間が結構かかる印象がありました。

インタプリタの処理は大きく3つに別れていて、字句解析→構文解析→評価という順番で行われるらしいです。字句解析や構文解析についての説明が詳しくされておられましたが、自分には少し難しかった印象がありました。

実際に作ってみることにより、コンパイラの気持ちがわかるようになるらしいのですが、作れるようになるまで時間がかかりそうだなと感じました。

 

もっと気軽にOSSにPRを出そう!

speakerdeck.com

OSSにプルリクを出してみたいと思っていたものの、どう出していいのか分からなかったので聞くことにしました。

ここでは、4つの着眼点に沿ってどのようなことを行えばよいのか登壇者は述べられていました。まとめると、「作者の関心ゾーンの外側をみる」、「業務で得たノウハウを横展開」、「使っていなくてもコントリビュート」、「ダメもとでも送ってみる」といった感じでした。

話のなかでは、Issueの書き方について、「I know」や「I think」といった言葉が重要なことや、ドキュメントの難しい英単語をもっと読みやすい英単語に変えることも貢献につながるといったことなど、わりと誰でも簡単に始められそうなことなどを話されていて、とてもためになりました。

 

LT

皆さん、しゃべりが上手で大変面白いLTをされておられました。

参考になるLTもあり、聞いて良かったと思いました。

 

PHPer茶会

この時間は後述のPHPerチャレンジのトークン探しに熱中しておりました。

ボードゲームなどが楽しめる時間だったようなのですが、体力もそこそこに尽きていたので早めに退散してしまいました。

 

Day2

最終日は朝から体調が悪く、午前のセッションは聞くことができなかったのですが、午後からのセッションを聞きにいくことができました。

 

PHPPHPを実装する 〜プログラミング言語実装入門〜

speakerdeck.com

PHPPHPを実装するという謎のタイトルだったので好奇心から聞いてみようと思いました。

ASTの話など、すごく難しくて自分にはついていけませんでしたが、なんとなく面白そうだなということだけは伝わってきました。

 

Webアクセシビリティを支えるための技術

www.slideshare.net

 

Webアクセシビリティという言葉を初めて聞いたので、どのようなものなのか気になり聞いてみようと思いました。

Webアクセシビリティとは、 アクセス可能性のことをいうらしいです。

Web Content Accessibility Gidelinesというものもあり、レベルごとにアクセスがしやすいかどうか判断する材料などもあるらしいです。

Webアクセシビリティを支える技術として、ハイパーテキスト、HTML、HTTPプロトコルWorld Wide Webなどがあり、これらは全てシンプルであるらしいです。

サーバーサイドとしてWebアクセシビリティに向き合うには、自分ごと化する必要があります。それは適切なHTTPメソッドを選択したり、適切なHTTPステータスコードを返却したり、アクセスの速度を保証したり、フロントエンドを意識したDB設計を心がけたりすることが挙げられます。

 

LT

2日目のLTも大変レベルの高いLTだったと思います。意外と知らなかったことも知れてよかったです。

 

PHPerチャレンジ

PHPerチャレンジは会場内外に隠された「PHPerトークン」を探しだし、イベントサイトに入力して得られたスコアを競う企画です。 PHPerトークンは「記号の# + 任意の文字列」の形をしています。

blog.phperkaigi.jp

このPHPerチャレンジ、大変面白く、熱中してしまいました。

僕は今回のPHPerチャレンジは14位か、15位だったかと思いますが、もう少しトークンを集めることができたんじゃないかなと個人的には思っています。

意外と見落としていた部分とか結構あったりしたし、見つけるのも他の人よりも早く見つけることができたらもっと点数が稼げたと思います。

次回はもっと点数を稼いで高い順位を目指していきたいと思います。

 

ノベルティ・配布物など

PHPerKaigiの配布物でとても面白いと思ったのはTwitterアイコン付きの名札と、Twitterアイコンが描かれたトレーディングカードだと思います。

このカードが意外と役に立ち、初めての人とでもカードを交換することによって話が進んだりして楽しく交流の輪を広げることができたと思います。

まだカードが余っているのでこれからいく予定のあるカンファレンスでは(名刺を持っていないので)このカードを使って自分のことを知ってもらおうと思います。

 

最後に

とても楽しい三日間を過ごすことができました。

スタッフの皆さん、お疲れ様でした。

また来年も参加したいと思えるようなカンファレンスだったと思います。

毎回言っているようですが、次に参加するときはもっともっと強くなって参加したいなと思っています。

 

 

 

2019年を振り返り、2020年に向けて新たな目標を立てる

はじめに

2019年も残すところあと数時間となりました。

今年はいろいろなことに挑戦した年だったと思っています。

休学したり、バイクにも乗ってみたり、いろいろな体験をさせていただきました。

2019年を振り返って

2019年は先述の通り、いろいろなことに挑戦してきました。

休学の期間

今年は大学を休学して自分のしたいことにコミットできる時間がたくさんありました。

休学している期間はフリーランスとしてお仕事をしたり、個人開発を進めたりしました。大学に通っているとなかなかこういう機会を得ることがないような体験をさせていただきました。

なかでも広島のIT会社で業務経験をさせていただきました。設計からの参画で個人でやっていた設計方法と違っていたことに驚いたり、お客さん相手にものを書くという作業をさせていただいたりしました。なかなか大学生が体験することのないことだったのでとても印象に残っています。

また、今年は僕が好きな技術であるLaravelの勉強会コミュニティ「Laravel.hiroshima」という勉強会コミュニティを主催として創設させていただきました。まだまだ未熟な勉強会コミュニティですが、これからどんどん成長させていきたいと思っています。

他にも今年は大規模カンファレンスにいくつか参加したなと思っています。PHPカンファレンスやLINE DEV DAYなどとても勉強になるカンファレンスでした。

プライベート

プライベート面では、バイクを納車してたくさんの知り合いが増えました。

高校時代からバイクは大好きだったのでやっと乗れるようになり、最近はよく乗るようになりました。まだまだライディングスキルも初心者なのでこれから精進していきたいと思います。

2020年に向けて

学内での活動

2020年はこれまで休学して学校から離れていた分、しっかりと学校にコミットしていきたいと思っています。

学内コミュニティを形成し、学内でより開発のしやすい環境作りを設けていけるよう切磋琢磨していきたいと思います。まだ考えている途中なのですが、今考えているのは、学内でLTをするコミュニティなんかを作りたいと思っています。意欲のある学生は研究室なんかに自由に行き来しているようですが、時間が取れず、なかなか学年を超えて学生と触れ合うことや、開発のできる学生と会話することがないので、こういったコミュニティが欲しいなと思っていました。

学外での活動

学外でもいろいろなことをやっていきたいと思っています。

先述のとおり、僕は「Laravel.hiroshima」というLaravelの勉強会コミュニティを作っています。こちらの勉強会コミュニティをもっともっと成長させ、「広島でLaravelといえばこの勉強会」といってもらえるようにしてもらいたいなと思っています。

他にも、今年は大規模カンファレンスに登壇したいなと思っています。2019年はPHPカンファレンスやLINE DEV DAYなどの大規模カンファレンスに参加し、登壇している姿をみて、自分もそちら側の人間になりたいなと思いました。そのためにも技術力を上げて、たくさんの人に聞いていただけるようなCfPを出していきたいと思っています。

最後に

総じて2019年はまあまあいい年だったんじゃないかなと思っています。

2020年は、復学して学校にも通うことになるので、より一層頑張っていかねばなりません。忙しい中でも学業は欠かさず、自分のしたいことをできる環境づくりをしていきたいです。