クラウド型のWeb脆弱性検査ツール VAddyを開発しています。
SaaSを4年間開発、運用してきた中でたくさんの失敗をしてきました。
今回は価格設定やサービス設計など、ビジネス上の失敗を元に何が間違ってどう動いてきたのか、その中で起こる技術的な課題をお話します。
この数ヶ月、Rust版、PHP版ファミコンエミュレータを読み、Go言語に移植しています。
PHP版を元に、PHPでどのようにファミコンエミュレータを実装しているのか、Goで再実装した時に見えた違いなどを解説。
そもそも2019年にもなって何でファコミンエミュレータなのか、何が楽しいのか、魅惑のエミュレータワールドを通して体験できたコンピュータの世界をご紹介。
未経験スタッフやスクール卒で、 FizzBuzz もかけない…みたいなスタッフを
業務で活躍できるレベルまで持っていくために必要なものはなにか、みたいなお話をします。
技術知識と業務知識は違うよ、みたいなお話とか、社内教育のプロセスについてなど
普段の弊社はレガシーな環境で開発をしている。web系の企業なのにサーバーは未だオンプレだし、phpのバージョンをあげるにも四苦八苦しているし、slackを使い始めたのもつい半年前だし、フレームワークは使っていない。そんな弊社は社員が40人程度しかいないのにコミュニケーションエラーが多く、営業からのリクエストも開発側では聞いてないなど不毛な議論をしている。なのでDDDを導入して営業側もドメインマスターとして開発に関わってもらう体制に変更中。この体制変更を営業に理解してもらう上で躓くところ、こう話すと理解してもらいやすいよといったTIPSになります。
Webアクセシビリティに取り組むのはディレクター?デザイナー?フロントエンドエンジニア?
いえ、私たちPHPerもしっかりと取り組んで行かなければなりません。
アクセシビリティと聞くと障がい者向けの取り組みかと思われますが、一概にそうとは言えないでしょう。
もしかすると、あなたが作っているWebサイトは身近な誰かがアクセス出来ないかもしれません。
今回のトークではAPI設計の際に考えるべきWebアクセシビリティについて話します。
PHPerだからWebアクセシビリティについて考えるのは関係ないとは言わせません!
最近なにかと話題の「心理的安全性」ですが、私が過去に10以上の本や記事をインプットした結果で、できるだけわかりやすくイメージがつきやすいように説明します!
・心理的安全性とは(一般的な定義と、間違った定義を解説!)
・心理的安全性は誰のもの?(心理的安全性を作り出す人は誰なのか、誰であるべきなのかを解説!)
・心理的安全性の高め方3選、壊し方3選(実例含めて、デザインパターンとアンチパターンを紹介!)
・明日からできる心理的安全性確保活動
15分を目一杯使って、「心理的安全性」のことだけひたすら話し、考える時間にしようと思います。
最近ではPHPアプリケーション開発において、自動テストを入れるのが普通な状況になってきましたが、一方で外部ライブラリをどうやって扱おうかが悩みどころです。mockを使ってライブラリを置き換え、インターフェースのテストだけで済ませてもいいのですが、ライブラリの仕組みを使って、より突っ込んだテストができないかとも思います。そこで、ライブラリの通常処理に、別の処理を割り込む仕組みを利用することで、より意味のあるテストをかけることを、GuzzleやSwiftMailerを例にとって解説していこうと思います。
PhpStormを知っていますか?
PHPStormはプラグインのインストールや設定カスタマイズをしなくても様々な便利な機能がついている統合開発環境です。
しかし、自分のプロジェクトに合わせて多少の設定を行うと、コードリーディングがさらに楽になります。
このトークではPHPユーザー向けに読みたいコードを探し出すための検索機能から、静的解析連携、テスト・デバッグを使ってコードを理解する方法などを説明して、PhpStormがプログラマのコードを理解する能力をどう拡張してくれるか紹介します。
アプリケーション開発をしてれば忘れがちなネットワーク周り。
そんなネットワークからパケットを操作し、色々と実験をしてみました。
内容としては障害、攻撃、冗長化をメインにそれぞれの実装方法と挙動について見てみたいと思っています。
パケットを操作することで改ざんをしたり、クライアントにバレずにサーバを切り替えたりなど自分の興味の赴くままにやってみました。
カオスエンジニアリングにも挑戦してみたいと思いその入り口として、障害実装もしています。
実装方法は自作ソフトウェアルータを利用してその中でL3、L4のパケットを操作して実装してみました。
言語はErlang、Elixirを使って実装をしています。
実装する中で気づいたこと、気をつけること、今後やりたいことなどについても話せればと思います。
皆さんの日常生活には欠かせない、ドメインという仕組み。
なんとなく使っていませんか!?
例えば、何文字まで長く出来るかわかりますか?
(タイトルでネタバレ)
ドメインを最長にした際、
・メールアドレスはどうなる?
・Nginxの設定は?
・サーバーレスは?
・SSL証明書は?
今回は仕様最長のドメインで実際にサイト運営した経験を題材に、
RFCの仕様からFirebase検討までの奮闘記をお話します。
PHPerKaigi2019にてデザインスポンサーとしてWebサイトの制作をさせていただきました!PHPerKaigi2019のサイトができるまでの過程において、デザインに込めた想いやワークフロー、Nuxt.jsでの実装の内容でお話したいと思います。
これまで、AWSのサーバレス実行環境であるLambdaで実行できる言語は限りがあり、場合によっては新たな言語を習得しなければなりませんでした。
しかし、昨年の追加されたLambdaのカスタムランタイム機能により、(ある程度の準備こそ必要ですが)PHPを初めとする自分が今まで使い慣れている言語で開発及び実行できるようになり、より手軽にサーバレス開発が行えるようになりました。
本セッションでは、Lambda+PHPという環境を通じて、
・PHPカスタムランタイムの動かし方や作り方
・どのように動くのか
・どのような用途に向いているのか
といった概要や、各種フレームワークを動かしてみた結果といった調査結果などについてお話します。
PHPStanは優秀な静的解析ライブラリではありますが、あらかじめ提供されているRuleの利用に留まってはいませんでしょうか?
同ライブラリにはCustomRuleという独自のルールを作成できる機能があります。
自分でルールを書けば外部のツールと連携したチェックなども可能で、例えばGitと連携させることで新しく追加されたクラスのみチェックして「これから新しく作るクラスは戻り値型宣言必ず書いて!」みたいな複雑なルールも作れます。
CustomRuleはあまりドキュメントに記述は無いので、基本的に自分で既存のコードを調べて作る必要があり少し面倒です。
今回は「こんなのだったらすぐ出来る」みたいなPHPStanの解析機能を列挙することでみなさんに独自ルールを作ることの一助になれればと思います。
uzullaさんのPHPerKaigi2018「大統一PHP」(https://speakerdeck.com/uzulla/da-tong-php)で紹介されているSwooleという非同期かつ、Coroutineの仕組みをもったPHPのextensionがあります。
Swooleを用いたフレームワークはいくつかあります。
今回、EasySwoole(v2,v3)、Swoft、Laravel-Swooleの4つを比べてみた結果をお話しします。
それぞれのフレームワークのISUCON8予選のベンチマークの結果をお伝えします(恒例)
No.1 Swooleフレームワークはどれだ!
設計への意識の高まりとともに、クラスの依存関係をコントロールすることに関心を持つエンジニアが増えてきましたが、現状依存ルールを順守するには人間の目で確認せざるを得ません。
クラスの依存関係を人間の目で一瞥するのは基本的に難しく、うっかり循環依存になってしまってないかレビューするのも手間です。
そこでPHPStanをベースに依存関係を解析するライブラリを作成しました。
これによりルールの順守を機械的にチェックすることが可能になるほか、そのリポジトリの依存ルールを設定ファイルとして管理し、ルールを明示することができるようになります。
また全クラスの依存関係を解析してグラフ化することも可能(予定)ですので、初めて見るリポジトリを解析する時にその依存関係から大まかな構造を把握できるような使い道もあります。
今回はこのライブラリの紹介をさせていただければと思います。
今話題のSwooleはPHPにイベント形式の非同期処理をエクステンションという形で導入することができます。これを利用することで、PHPのフレームワークを高速化してみようと試みます。一般に、フレームワークや外部ライブラリを利用していると、それらのソースファイルを読み込むために多くの時間がかかるようで、Swooleを使ってイベント形式のサーバを建てることで、この読み込みコストをほぼゼロにできると期待できます。今回はLaravelを例に取り、Swooleによる高速化の導入、及び、Swooleによってどれだけ高速化できたかを、apacheやfpmなどの別の形式のサーバと比較します。また、Swooleの導入によって発生する問題についても言及します。
昨年度まで登壇経験 0 だった開発組織が、昨夏の PHP カンファレンス関西 2018 を皮切りに、今年度、国内 3 つの PHP 系カンファレンスに社内から延べ 5 名のエンジニアが登壇を果たしました。この発表では今年度の取り組みの総まとめとして、開発組織の思惑とエンジニアとしてのやっていき、業務としてイベント登壇を推進するための取り組み、そしてこれからの目標など、今年度のできごとを余すことなくお話します。この発表が今後社外への発信に取り組んでいきたい開発組織やエンジニア個人にとっての後押しとなれば幸いです。
とある日に、いつものようにPHP 5.6でmbstringの関数へ引数をarray()にして挙動を楽しんでいました。
同じように当時の PHP 7.3.0 RC5 に対して、挙動を楽しんでいると、
mb_check_encodingのときに、Segfaultになりました。
報告したところ、修正いただきました。
今回は、そのバグをどう見つけて、どう報告したのかということと、
php-src上での問題か、スクリプト上の問題かを切り分ける方法、
そもそもPHPのビルトイン関数へ(わざと|誤って|たまたま)マニュアルにない引数を加えるとどうなるのか、
7.2からmb_check_encodingとmb_convert_encodingにはarrayが使えるようになっていること
などの発見したこと、報告した後の心境を共有させていただきたいなと思います。
プログラムを書くときに計算量を意識していますか?計算量の基本を理解することで、サービスが成長したときに問題を起こしにくいプログラムを作成することができます。簡単なプログラムを例にして、まず計算量という概念に慣れてみましょう。
PHPでSocketを使ったネットワークプログラミングを自作すると、Unix系OSの非同期IO・ブロッキングIOについて理解が深まります。PHPでブロッキング、ノンブロッキングなWebサーバを書いて、Webサーバへの理解を深めましょう。