shunshock!

しゅんそくになりたい開発者です。

Object Oriented Conferenceに参加しました!

前置き

Object Oriented Conferenceに初参加しました! 所属する企業から行く人がいないので不安だったのですが,実際に行ってみたところ知り合いがたくさんいて救われました>< スタッフの皆さん・スポンサーの皆さん,素敵な会を開催していただきありがとうございました!

参加したセッション

fortee.jp イベントストリーミングによってデータの正規化を独立させることができるという部分に共感しました

fortee.jp 紹介されていた本を早速購入したので読んでみようと思いますー

fortee.jp ヘキサゴンアーキテクチャ調べてみます!

学食美味しかった

開催がお茶の水女子大学で久々に学食を食べました!担々麺美味しかったです!

LT登壇したよ

飛び入りでLT参加しました!資料を15:00作り,素振りなしという環境で緊張しましたがやってよかったです! 登壇の様子をうーたんさんに写真を撮っていただいただきました!📸 うーたんさんありがとう!

次はPyCon行くよ

学食を食べていたところ,PyCon KyushuのCfPの通過の通知が来ました! 次回は九州でお会いしましょう!

[Ya8参戦記] 終電は家の近くまで行ければセーフ【西武線に気をつけろ】

Ya8 最高!!

Ya8というイベントに行ってまいりました。開催地は練馬はココネリホールでございます。いやー、最高のイベントでした。あまりに最高だったので帰ってきて速攻筆を取りブログを書いております。ちなみに酔ってます。ご容赦くださいw

github.com

今回のYa8では人に話かけることについて改めて考えさせられました。私を含む読者の皆さんも技術カンファレンスによく行かれると思いますが、懇親会で人と話すのは、特に初めて会う方と話すのはなかなかハードルというか壁というか何かを感じることがあると思います。今回のYa8ではそれが一歳なくて、なぜかなと考えたのですが、会場の娯楽要素にあったのではないかなと推察しています。

はぁ?と思われる方もいるのですが、どんなにすごい人でも同じゲームで、同じ玩具で遊んでいる時は、同志なんですよ。これが大きい。ヨーヨーをしながら、麻雀を打ちながら、コーヒーを飲みながら2日間にわたってたくさんの人と話をしました。

また、ゆっくり時間が取れるというのも良かったです。カンファレンスの懇親会は頑張っても2時間。何百人といる参加者の中で知り合いに声をかけていたら時間が終わってしまうというのもよくあるでしょう。Ya8は一日中イベントがあり、時間にとらわれず話すことができました。最高of最高。

今回持っていった麻雀牌は厳しいかもですが、カンファレンスに行く時にヨーヨーを何台か持って行って話しかけやすくするってのをやってみようと思います。それぐらい価値があるなと思いました。

技術的な話で持って帰ってきたこと

Neon

PostgreSQL版PlanetScale。そーだいさんの発表で知った。これないのかなーって気になっていたので使ってみたい。

neon.tech

PlanetScale最近無料枠がサ終したのですが、やり方がsigninからGoogleの認証が消えていて笑いましたw

planetscale.com

わいとんさんとMyfinderさんが紹介してたIaCのPulmiもかなり面白そうだった。 (わいとんさん、二日目朝花粉で死んでて行けなくて申し訳ないです)

Pulmi

www.pulumi.com

雰囲気はIaCに似ているが裏はCloudFormationではなく、各種APIを叩いているらしい。あんまり詳しくないので知りたい人がいれば調べてもろて。僕は写真の言語を全部触ったことがあるのですが、C#が入っていて嬉しい。こういうのなかなかないんですよー

PHP as ShellScript

Perl as ShellScriptいいのでは?という発表があり確かにone liner書けるし実行環境に依存しない上軽くすれば7MBで動くPerlは最高だなと思ってましたが, そのセッションの冒頭に出ていた型ついてなくね?と若干思っていたところtadsanと話していた時にdeclare(strict_types=1)とさえ書けば動く型までついてくるPHPという最高の言語があるという話が話題に上がりました。

とはいえ、PHPbrewとかでインストールするとバイナリデカくなるしなーと思っていたところuzullaさんがPHPerKaigiで聞いた話を思い出した。所属企業繋がりでuzullaさん本人にz_talkで質問できるので今度自前でbuildしてみようかなと思ってます。このアイディアかなりありではとなっているのでbuildしたbinaryいい感じに配るとかinstall用のScript配るとかやりたいですね。

speakerdeck.com

西武池袋線には気をつけろ

ところで冒頭にも話した通り、今回は練馬駅周辺での開催でした。 練馬駅はそこそこ便利な場所で、浅草線西武池袋線が通っています。浅草線京急線以外とは繋がっていないのでマシですが、西武池袋線はかなり難しいです。以下の練馬駅周辺を見ていただくと難しさがわかるかと思います。

練馬駅から池袋方面に行くホームは2つなのですが、実際には三つの電車が来ます

よく見ると「西武池袋線」「西武有楽町線」「西武線直通副都心線」があるのですね。とてもややこしい。 しかもしかもこれだけではありません。こいつら全部「池袋駅」には行くんですよ。 でも西武池袋線に乗ると「副都心線」との乗り換えスポットである「小竹向原駅」にはいけません!

そう、つまり有楽町線直通に行きたければ「西武池袋線」に乗ってはいけないのです。

いやわかるわけあるかこのタコ!と言いたくなりますがところがどっこいこれが現実なのです() 僕は昨日見事ひっかかり終電を逃しました。

みなさん、西武池袋線にはお気をつけを。ではまた!

もみじ饅頭は揚げたてがうまい

@shunsockです. YAPC::Hiroshimaから無事帰宅したので, entryを更新します. ちなみに私は以下の日程でした.

  • 2024.02.09: 前夜祭
  • 2024.02.10: YAPC:Hiroshima
  • 2024.02.11: YAYAPC
  • 2024.02.12: 観光@宮島

3泊4日とは言っても, 私は目立った活躍をしていたわけではないのでそういうエントリは他の人にやってもらうことにしてこのエントリでは, 私個人が面白いと感じたものを自由気ままに取り上げようかなと思います. 要するにお好みです.

theme of YAPC::Hiroshima 2024

関数型プログラミングと型システム

最初だし本編の話から. いわゆる関数型プログラミングができるRustという言語を最近始めたので気になって聞いたセッションです.

www.rust-lang.org

何故関数型プログラミングを進めるのかという話をわかりやすくされており, 大変勉強になりました. 特に下記のようなケースで考え方が役立つのかなと思いました.

1つ目. これはflagの変数を消せる. これによってUserとArchivedUserはImmutableになる.

// 手続き型プログラミングの場合 
class User
{
    public bool $delete_flag;
    public readonly string $name;
}

user.flag = true;

// 関数型プログラミングの場合
class User
{
    public readonly string $name;
}

class ArchivedUser
{
    public readonly string $name;
}

$archived_user = archive_user($user);

二つ目の事例, こちらもflagやnullをtypeから取り除くことができる.

interface Member
{
    userId: MemberId
}

interface Guset
{
    guestId: GuestId
}

// Union (和)で表現できる
type User = Member | Guest

プログラムの正しさを強力な型システムを持ったコンパイラに保証させることによってテストの負担を抑えることができるという話がグッと来ていて, コンパイラIDE型推論といった機械に寄り添ったプログラミングをすることでより効率的に堅牢なシステムを構築したいなと感じました.

余談ですが, Pythonで使い勝手が良さそうだなと思いました. Pythonでは実行時の型チェックがされないのと全ての変数がpublicという特徴があります. なのでPydanticで型を作り, 関数の中に入れて受け流していくという動きをよくすることになり, 結果として例のようなコードが頻出だからです.

もみじ饅頭は揚げたてがうまい

広島の株式会社stakのメンバーの方とYAPC本編の懇親会をしている時にもみじ饅頭は揚げたてがうまいぞという話を教えていただきました.

stak.tech

宮島に行けば食べられるとのことなので最終日に宮島に行ってきました!揚げたてのもみじ饅頭とビール。最高です。

で、実際食べた感想なのですが. 揚げたてだと美味しさが200%になります. 全員食べた方がいいレベル. 本当に美味しいので今回食べれなかった方は是非次の機会に食べに行ってみてください!!

ちなみにクロワッサンもありました. こちらも美味です.

私、中の人です!

私とISUCONに一緒に出た4tsさんがYAPCに登壇されていて(学生なのにすごすぎる!), 偶然3次会で話す事象が発生しましたw お互いきていることを知らなかったのと顔を見たことがなかったのでとても驚きました.

fortee.jp

実はそれだけでなく, 弊社(PR TIMES, 執筆時点)の2年前のインターンの方とばったり懇親会で遭遇することがありました. 今プロパーで働いていると話したところ, uzullaさんの顔を見たことがないが, 話たいとのことだったので案内することに. 無事合流することができてよかったです!

YAYAPCが最高だった話

いやー書きたいんだけどね、書きたいこと大体書けないんですわw

LTの採点システムが仮装大賞だったのはOKかな? かなり凝った作りでリアルタイムで投票が反映されて本物さながらの動きをしていました.

moznionさんのLTが芸術点が高かったです. 内容そのものも面白いテーマでサマータイムの実装の話でした. 日本をはじめとする東アジア圏ではあまり導入されていないのですが, EUアメリカなどといった地域ではメジャーな制度のようでです. 発表ではソフトウェア開発からの視点でしたが, 機械学習や統計解析する時でも意識する必要がありそうだなと感じました.

余談ですが, ビール飲んでからLTするのいいなーと思ったので真似しようかなと思ってますw

YAYAPC後の二次会は, 居酒屋が空いておらず困っていたのですが, ふと見たカラオケが機能要求を満たしていることに気づき, #yapckaraoke が開催されることに. 途中からエンジニア替え歌をして遊び始め, 最高でした.

papixさんのお願いシンデレラの替え歌最高だったのでブログで公開してほしいw

ところでPR TIMESって略すときどういえばいいんですかね. P社だとピクシブ株式会社さんと被ってしまうし, どうしたものか.

みなさま本当にお世話になりました

運営の皆様を始めとする関係者の皆様, 素晴らしいイベントを開催していただきありがとうございました!YAPCには昨年から参加していて, 今年は二回目でした.

shundeveloper.hatenablog.com

このようなイベントで怖いのがぼっちになり二次会以降参加できないことですが, 一日目から三日目まで混ぜていただくことができ本当にありがたかったです. ファインディ株式会社(Findy Inc)の皆様, 株式会社はてなの皆様には特にお世話になりました. 感謝の気持ちでいっぱいです.

来年は, 登壇できるように技を磨いて帰って来ます!!

若手・学生サーバーサイドエンジニアLT会で登壇した話

深夜のバターサンドは背徳の味。どうも@shunsockです。今日は若手・学生サーバーサイドエンジニアLT会に乗り込んで来ましたのでその報告をします。

え?PHPカンファレンス北海道2024の記事を書けって?あれはちゃんと技術記事として出すんでちょっと待ってください。はい。

参加したイベント

ゆめみさんとラクーンさんのサーバーサイドのイベントでした。若手を中心に学生も何人かいて色々な層と関われる会だったと思います。来週はフロントエンド編もあるらしい。

yumemi.connpass.com

登壇内容

Pythonって難しくないですか?という話をしてきました。

Python歴3年目なわけなんですが, この言語でプログラム書くのむずすぎるのでその話が中心ですね。Python知らない人向けに書いておくと、

  • Classの変数・関数が全てpublic
  • constなる概念はない (静的解析で使えるFinalが書けないパターンが存在するので本当に辛い)
  • Interfaceがない

はい、そうなんです。プログラムを書くための道具が使えないんですね。これは辛い。 さらに型チェックが実行時にありません。静的解析でなんとかなるやろって話もあるのですが、残念ながら3rd party製Libraryに型がついているわけではなく完全に解析することは事実上不可能です (そもそもPython使う動機がLibraryが豊富だったりするので)。ちなみにこれはC言語インタープリタで動く言語だからではありません。事実PHPは動的型付け言語ですが、実行時の型チェックをすることができます。PHP Love❤️

まあ、でもPythonが便利なのは事実で使いたい場面というのは存在します。例えば、DataWorkflowだとPythonには優秀なライブラリがありますし、機械学習のWeb APIを作るなら必然的にPythonを使うことになります。今日聞いた話だとLambdaで使っているという話も出てきました。

まあ、そんなときにどうやって堅牢なシステムを素早く開発するのかって話をするのですが、自動化が鍵だと思っています。

例えば、Pythonは開発環境開発がそこそこ面倒なのですがDocker Imageをあらかじめ作っておけばその負担は減らせますし、formatterと静的解析とテストについてはMakefileやShell Scriptを使ってタスクランナーを組むと良いです。Package ManagerはとりあえずPoetryを使っておけばいいと思います。ライブラリ管理がだいぶ楽になります。

python-poetry.org

RyeというPythonのバージョンまで一括管理してくれるRust製のソフトウェアもあるのですが、まだmajorバージョンが1になってないのでもう少し様子見ですかね。

また、型の安全性についてはPydanticとTypeGuardを使います。PydanticというのはClassの型を実行時に自動で検知してくれる優れものです。使わない手はありません。

docs.pydantic.dev

pypi.org

Pydanticはこの他に正規表現などによるValidationやより厳密な型を提供してくれています。Documentも見やすいですし、本当に助かってます。Typeguardは関数に入力された値を確認するライブラリです。if文を書かなくて済むので見やすくなります。ちなみに他のライブラリは割と開発が止まっていたりします。辛い。また、Pydanticがあっても結局3rd Party製ライブラリがdict引数だとPydanticからTypedDictへmapする関数が必要になるので過信はやめましょう。

ここら辺の型の堅牢性って防御的プログラムをどれぐらい書くかに影響していそうなんですよね。Pythonは何もしないと大量に書く必要があるんだよな。Pydanticでだいぶ緩和されたが。

まあ、Pythonが悪いってよりはPythonでやるのは軽量なソフトウェアやバッチなのではないかなというのは個人的な考えです。鯖立てるなら型のサポートをふんだんに受けて構成したいですね。まあつまり、Pythonで鯖を立てるな、JavaScript機械学習するぞって話ですよ。はい。

余談ですが、この発表なぜか最初だったんですよね。ゆめみさんでもラクーンさんでも無いっていうw あとで主催者(YAPC繋がりの知り合い)に聞いたところ、最後をスポンサー側の人間にしたかったという裏話を聞けました。なるほど。

二次会行ったぞ

実のところ今ブログ書いてるのは八割方こっちが理由です。若手コミュニティで二次会を発生させることに成功しました!!嬉しい😊 私が「二次会の波動を感じる」と話したところ、うーたんさんが「buri会議のために宿とっている」と話だし、さらにラクーンの皆さんが乗ってくれました!みんなありがとう!

発表でもFirst PenguinだけでなくSecond Penguinも大事だぞって話がありましたが、本当にそうで、一人だけで盛り上がっていてもしょうがないんですよね。二次会も含めて懇親会は多数の方とお話しすることができました。YAPCの話をしたり、Webの話をしたり、はたまたゲーム界隈の話をしたりと話題にも多様性があったように思います。

総じて良い会だったです。主催のラクーンさん、ゆめみさん、運営者の皆さん、ありがとうございました!

初心者向け 登壇するためのTips

はじめに

私は先日, PHPConference Japan 2023 にて25分枠の登壇をさせていただきました. カンファレンスでのセッション登壇(LT以外の枠)はこれが初めてでしたが, なんとか無事に終えることができました. 当日については以下がまとまっているので興味のある方は読んでみてください!

今回はアドベントカレンダーということでカンファレンスに登壇したい人に向けて登壇するまでのポイントを書いていきます.

とにかく登壇しまくる

脳筋かと思われそうですが, 意外と理に適っていると思っています.

プレゼンテーションを学ぶには発表をする回数・聞く回数を増やすことが必要です. そうすることによってグッドパターン・アンチパターンを学ぶことができます.

このうち, 聞く回数を重点的に増やすよりも話す回数を増やす方を意識した方が良いです. なぜならば, 発表する回数を増やすことで発表を聞く量が増えるからです.

当たり前といえば当たり前ですが, 勉強会やカンファレンスは発表をしている時間よりも聞いている時間の方が長いです. なので発表する回数を増やせば自動的に聞く回数も増え, 経験を培うことができるのです.

ではどのようにして発表機会を増やすのか, 最初の一歩としておすすめは仲間内で発表することです. 仲の知った間柄や小規模な勉強会であれば失敗してもダメージは少ないからです. そして, 成功すれば自信のつく契機になります. 学生であればサークルやゼミの仲間と社会人であれば趣味の仲間や同僚とやってみると良いのではないでしょうか.

最初の発表は短い方がおすすめです. 短い方がPDCAサイクルを回しやすいからです. 5分間で発表するLT(ライトニングトーク)から始めてみると良いと思います.

仲間内の発表で慣れてきたら勉強会に参加してみましょう. connpassやXで探せば登壇者を募集している勉強会があることに気づくと思います. 最初から登壇しなくても良いので足を運んでみましょう. 慣れてきたら勉強会でも発表してみましょう. 知らない人の前で発表するのは仲間内よりも緊張感があると思います.

このようにして発表機会を増やしていくことで人前で喋ることに対する抵抗が減っていくと思います. ここまできたらカンファレンスも近いです.

Point

  • 質を増やすよりも量を増やすことを意識して場慣れをさせる
  • LTでも全然OK

参考: ここ一年で登壇したカンファレンス・大きめの勉強会

3-6月にかけて週1-2回ぐらいのペースで勉強会に行っていました. 経験値を稼いだおかげでPHP Conferenceでは緊張することなく発表することができました.

  • 03月 YAPC::Kyoto 2023 (登壇)
  • 05月 Logmi Tech LT大会 (Youtube登壇)
  • 07月 CTOA若手エンジニアコミュニティ勉強会 #3 (登壇)
  • 09月 ワンキャリアさん合同勉強会 (登壇)
  • 10月 PHP Conference Japan 2023 (登壇)

プロポーザルを通す

PHPをはじめとする国内のWeb系の言語のカンファレンスでは事前にプロポーザルという提案書を出すことが多いです. 詳細はForteeをみてもらうとわかりやすいですが, 自分の発表で何を誰に向けて話すかを書きます.

トークの長さはLT(5分), 15分-25分枠, 40-60分枠のうち2つは用意されていることが多いです. 一見LTが通しやすそうに感じるかもしれないですが, LTは応募者が多く必ずしも通しやすい訳ではないことに注意してください. 個人的には話たいことから決めてそれに必要な長さから選択するのが良いかなと思っています. (要出典)

で, 採択と非採択の数を比べるとわかるのですが, 大きいカンファレンスは倍率が高いです. 通すために個人的に考えていることとしては, 以下になります

  • 題材はみんなが業務や趣味でやる訳ではない位のマイナーな話を深掘りして探す
  • 自分がパンフレットを見た時に「面白そう」「(良い意味で)頭がおかしそう」「行こうかな」と思えるタイトルをつける
    • 自分が興味持ちそうなタイトルなら目に留まるかもと思ってつけてます
    • 打率はそこそこなので割と良いTipsなのではと思っています
  • 誰に何を伝えるかはっきり決めておく
    • 発表の根幹だと思っているので大切にしています

カンファレンスで会いましょう!

さて, 私の来年度のカンファレンスの予定ですが, 以下のカンファレンスで登壇予定です! ぜひ会場で握手しましょう!

PHP Conference Hokkaido

公式 HP

LT: プロポーザルに通したいのでプロポーザルのテキスト分析をします!

PHPerKaigi 2024

公式 HP

レギュラートーク: Readable 正規表現

Fastly Yamagoya 2023に参加しました!

shunsockです. 今回はFastly Yamagoya 2023に参加したきた話を記述していきます.

参加したきっかけ

現在私が所属している株式会社PR TIMESではCDNとしてFastlyを採用しています. また, 本イベントでは同僚が登壇することもあり, 興味を持ちました.

どこでやってたの

Tokyo Midtown Hibiyaの6F, BaseQで開催されました. Midtown Hibiyaはとても大きな場所で周辺施設も整っていました.

www.hibiya.tokyo-midtown.com.e.adj.hp.transer.com

印象に残ったセッション

Fastlyのビジョンについて

Fastlyの名前のFastが配信の速さに加えて開発の速さを意識しているという部分が印象的でした.

このあとのセッションでもDeveloper Friendlyに設計している話やOSSやテクニカルサポートの話が出ておりその内容を具体的に知ることができました.

Only on Fastly

WebAssemblyの話が主軸でした. しれっとPHP対応の話を出しているのが面白かったです.

WebAssemblyのアイディアも興味深かったです. WASMを使うことで複数の言語を同一の言語のように連携させることができる特徴が面白いなと思いました. この章の中では研究におけるWASMの紹介があり気になりました. Fastlyが最先端技術であるWASMをどのように入れているのかというのは気になっていたのですが, 研究にそもそも関わっているとのことで納得の内容でした. (会場で執筆した論文の紹介がありました)

wasi_nnでエッジで機械学習するdemoが最後にありました. AIで推論するシステムを構築する場合, 処理性能の高いGPUを積んだサーバーが必要になってきます. そうでない場合はレスポンスタイムが遅くなることを覚悟する必要があります. ですが, 今後WASMやEdge Computingの発展によって変わる可能性があるのかなと感じました.

フロントエンドエンジニアからみたFastly: グルナビの2つの導入事例

導入前や導入後の効果がPR TIMESと似ていて興味深かったです. 例えば, 画像コンテンツの配信の最適化をImage Optimaizerしたところ高速化ができたところやVCLが良いという話はPR TIMESでも同じでした.

余談ですが, 登壇者の方がフロントエンド担当とおっしゃっていたのですが, インフラ周りまで取り組まれていてフロントエンドの領域が拡大しているなと感じました.

その他

来場者特典としてFastlyのロゴが入った充電器をいただきました!早速使っています!

まとめ

私は普段からFastlyを使っていたわけでは無いのでPurgeがめっちゃ速いCDNというイメージがあったのですが大きく変化しました. Edge Computingやセキュリティの取り組みを知ることができたことが大きな収穫だったと思います.

また, Developerに対するサポートが手厚いことを知るきっかけにもなりました. 仕事で直接触る機会は少ないかもしれないですが, 趣味の方で何かできないか模索しようと考えています!

関係者の皆様, 素敵なイベントをありがとうございました!

PHP Conference Japan 2023に参加してきました

Index

  • 初めての登壇
  • 企業ブースのお手伝いをしてきました
  • PHP Conference Hokkaido 2024で登壇します!

初めての登壇

今回のカンファレンスでは初めて25分間の登壇に挑戦しました。 過去にYAPC::Kyoto 2023や小さめの勉強会で登壇活動を続けてきたものの、ほとんどがLT(5分間の短いトーク)でした。

普段の発表とはスライドの枚数や話の展開のスピードを変える必要があり、練習にかなり苦労しました。登壇資料作成に3週間ほどを費やし、発表練習に1-2週間投じました。

当日は午前の発表かつトラック6というコアな人向けのトラックに放り込まれたため、席がほとんど埋まらないことを危惧していましたが、幸い会場の1/3程度は埋まっていました。

発表そのものは練習した甲斐があり、おおむねうまくいったと思います。カメラ目線意識していたので後でいい写真掲載掲載されるといいな!

また、発表について面白かったというフィードバックをいただきとても嬉しかったです。

登壇資料は以下になります。

ちなみに、以下は非公式の前日祭で話した蒲田の話です

企業ブースのお手伝いをしてきました

私が2023年10月現在所属している株式会社PR TIMESは企業ブースを出展していたので登壇後にお手伝いをしてきました。弊社ではPHPのエラーを見つける問題を解き、一定の基準を満たすとノベルティを配布するイベントを行なっていました。以下、弊社Twitterです。問題の答えを配布しているそうなので気になる方はチェックしてみてください。

PHP Conference Hokkaido 2024で登壇します!

2024年1月12日に開催予定のPHP Conference北海道でも以下のような発表をする予定です。北海道で私と握手!

概要

  • PHPを用いてサービスを提供しているPR TIMES機械学習を担当するエンジニアが通っているプロポーザルの秘密を探ります

対象者

話すこと

  • テキスト解析をするまでの流れと分析結果
  • Webからのデータ取得
  • 日本語テキストデータの前処理 (正規化・形態素解析など)
  • 通っているプロポーザルと通っていないプロポーザルに出現する単語分布の比較
  • プロポーザルのトピックの分析
  • プロポーザルの作成
  • OpenAIによるプロポーザル作成
    • 単語やトピックの分析した情報を元にプロポーザルを作成します

話さないこと

  • 機械学習・統計的手法そのものの仕組み
  • 日本語以外のテキストの前処理の方法
  • テキスト以外の前処理の方法