PHPerKaigi 2023で協賛&登壇します!

Garoonチームの"すぎやま@MASH弦楽団(@oogFranz)"と"そが"です。 サイボウズはPHPerKaigiにゴールドスポンサーとして協賛しています。今年はスポンサーセッション、LT登壇、PHPerチャレンジに参加いたします。

記事中にPHPerチャレンジ用の問題も掲載していますので、ぜひ最後までお読みくださいませ。

PHPerKaigi と サイボウズ

PHPerKaigi(ペチパーカイギ)は、公式サイトによると、

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

とのことです。

サイボウズのGaroon は約20年前にPHP 4で開発が始められた製品です。私達Garoonエンジニアとしては積み重ねた歴史に苦労する時もあり、PHPとPHPコミュニティの存在にはずっと助けられてきました。

PHPerKaigiに協賛することで、PHPコミュニティが少しでも盛り上がり、恩返しができればと考えています。

スポンサーセッション

サイボウズGaroon開発チームの「完成度低いの歓迎LT大会」(PHPerKaigi出張版) というタイトルでスポンサーセッションを開催します。

サイボウズのGaroon開発チームでは登壇ハードルを下げるため、「完成度低いの歓迎LT大会」を不定期に開催しています。今回のスポンサーセッションでは、完成度低いの歓迎LT大会とは何かの説明に加えて、実際に完成度低いの歓迎LT大会を開催しようと思います。チームでの発表者を増やす取り組みの雰囲気を掴んでいただければと思います。

以下のタイトルで3名が5分間のLTをします。

  • 転職して1年たった完走(荒瀬 泰輔)
  • PHP8.1で大改修が入ったと噂のmbstringで実際に遭遇した問題たち (千葉 泰理)
  • TOEIC 315点のPMはどうやって英語でバックログを書いているのか (臼井 新)

事前の動画収録では、誰一人として制限時間以内にLTを終わらせないという完成度の低さを見せつけました。 当日は時間内に終わることができるのか、などにも注目して参加いただけると幸いです。

後日談イベント

4月5日の18時半から #PHPerKaigi後日談イベント をサイボウズ東京オフィス(日本橋)で開催します。 当日の時間では話しきれなかった内容を完成度を高めてお送りしますので、よろしければご参加ください。

https://cybozu.connpass.com/event/277790/cybozu.connpass.com

メンバーの登壇

私すぎやま@MASH弦楽団は、可能な限り確実にmkdirを成功させるにはというタイトルでLT登壇もいたします。応援よろしくお願いします。

PHPerチャレンジ

PHPerチャレンジとは、参加者のみなさまに事前に設定された「PHPerトークン」を探しだしてもらい、チャレンジサイトに入力して得られたスコアを競う企画です。 今年は、サイボウズから初めてPHPerチャレンジ用の問題の出題も行います。

以下の2つのPHPプログラムから、PHPerトークンを導き出してみてください。

・getPHPerToken.php

<?php

/**
 * This program can display a PHPer token.               
 * But to get the correct PHPer token,
 * there are a few things you need to do before running this program.                                                      
 *                                                 
 * 1. You should get key1, key2 and key3 from getKey.php,
 *    and fill <key1>, <key2> and <key3> of this program.    
 * 2. The decrypt function does not work as expected for some reason.
 *    This should be fixed.                           
 **/

$key1 = <key1>;
$key2 = <key2>;
$key3 = <key3>;

function decrypt(array $ciphertext, int $public_key, int $secret_key) {
    $hex = "";
    foreach($ciphertext as $value) {
        $hex .= dechex($value ** $secret_key % $public_key);
    }
    $cleartext = hex2bin($hex);
    return $cleartext;
}

$ciphertext = [3181896, 6283063, 4748177, 3723679, 5707941];
$public_key = 8555851;
$secret_key = ($key1 + $key2 * 2 + $key3 * 3) ** 2 * 2 ** 3 + $key2 * $key3 + $key2 + $key3 + 3;

$cleartext = decrypt($ciphertext, $public_key, $secret_key);

if(substr(md5($cleartext),0,30) === "97097d30ceb203d46ab08edf0308ba") {
    echo "PHPerToken is #" . $cleartext;   
} else {
    echo "Failed to get PHPerToken...";  
}

・getKey.php

<?php

/**
 * This program can display key1, key2 and key3.                                    
 **/

class A {
    public static function counter() {
        static $counter = 0;
        $counter += (2023 != "2023PHP");
        return $counter;
    }
}
class B extends A {}

A::counter();
$key = B::counter() . 3 << 2;

$version = substr(phpversion(), 0, 3);

if ($version === "7.4"){
    echo "key1: " . $key;
} elseif ($version === "8.0") {
    echo "key2: " . $key;
} elseif ($version === "8.1") {
    echo "key3: " . $key;
} else {
    echo "Get no key!";
}

ちなみに、この問題の出題者であるサイボウズの"そが"が解説LTで登壇を行います。こちらも、応援よろしくお願いします。