前日の『こんなときだからnight』を最後まで配信みてた所為でけっこう眠い。
けど、無事朝一でこれて、電源とれる席確保できた。
という事でだらだらとテキストにメモるだけだと面白くないのでリアルタイムに更新していこうと思います。
・追記
僕は入口すぐ前のテーブルにいるヒゲです。
名刺忘れたorz
出来るだけe-mobileの本数減らして共有しましょうという話しがでている。 willcomの孤独な勝利!!!
会場は高さがないので、スクリーンの下の方みえないね。
メネガレットが大活躍しています。
.
オープニング by shin1x1
ぽぽぽぽ~ん禁止令
基調講演『PHPとのつきあいかた』 by 高木 正弘
朝一なのもあってトーンは低めw
仕事がきっかけでPHP初めた人が半分くらいを閉める会場。
最初に覚えた言語だって人は意外と少ないみたい。
高木先生がPHPのマニュアルの翻訳等を手書けられてるきっかけとか。
沢山の人が関わって成長してきた言語である
それを沢山の人が使って新しいものを作っているのは良い事だけど、もっと大きくしていけるように皆で関わっていければ楽しいよね。
でも具体的にどうすれば?
・PHPの実際のソースにコミットする?
・言語の解説記事を書く?
・マニュアルの翻訳・整備に参加する?
そんなの難しくて出来ない。
→マニュアルの間違いを見付けた時にそれをアウトプットするだけで、関われる。
直接メールとかしなくて、tiwtterに書くとか回りの人に教えるとかでも、最終的にはマニュアル整備者の目に止まるかもしれない。
どんどん言っていこう。
沢山の人が関わって成長してきた言語である
何かを続けてれば、うっかりPHPカンファレンス関西みたいなイベントに呼ばれて基調講演で話す事になるかもよ!
意外と会場に問題点指摘した事ある人が少ない。
→皆じゃぁPHPに何一つ不満ないのかな?(笑いがおきる、、、
(t)個人的には、不満点があってもググったら解決するので自分が新規に見付けた問題点って殆ど無い気がする。
今日はだらっとした感じで楽しんでね。
フランクに話しかけて知り合いとか増やすといいよ。(難易度たけぇw
15分あまったwww
翻訳事情トークだけど、海外のドキュメントのコミッターの時間帯に合わす感じになるので、メインが深夜帯になってるらしい。
(とはいえかけている時間は週に1~2日ほどで1日1~2時間との事。
(t)ドキュメントの断片的な翻訳には興味があるけど、コミッターとして参加するってかその翻訳したものを何らかの形でリターンするのは難易度が高いよね。
(t)ってかメーリングリストとか心理障壁高いんで、wikipediaのノートみたいなのがマニュアル側にあればいいのにな(メインのコメント欄とは別に(出来れば言語毎に)
.
※(t)って書いてるのはtyoro註です。
「ソーシャルゲームとクラウドとPHPについて」個々一番(Zynga Japan)
趣味がドメイン取得で非モテキャラとのこと。
会社的にはソーシャルアプリとか作ってて、facebookアプリで有名なのいくつか作ってる。
(『mafia wars』とか
クラウドって何だろう。ソーシャルってなんだろう。
・半年前
うっかりmixiでまちつくが大ヒットした。
10万人くらい人きたらいいなーと思ってたら1日10万人のユーザーが増えていった。(想定外!
結果、負荷に強い会社になっていった。
会社的にはphp5.3(5.3!!!)
基本的な構成はよくみる感じ。
Zynga Japanは500台くらい物理サーバーをもってる。(5人で回してる)
本社はAWSのヘビーユーザー。
「今日アクセス多いから1000台サーバー足そうか」みたいなニュアンスで使ってる。
・今
AWS (EC2,EBS,S3,etc...)、RightScale(クラウド管理のASP的なもの)
→人的コストが下がった。(管理画面が揃っててツール作らなくていい)
→ハードウェア購入やらの手間が減った
・自分でクラウドを作るつもりで構築する
**自動化(電源いれたらサービス立ち上がるような感じに)
RightScaleのtemplate機能三井Puppet、デプロイツール、監視ツールの自動登録とかログの収集。
**冗長化
まぁよくある話し。
memcache使ってるとやりづらいよねとか。
**スケーラビリティ
ソーシャルアプリであスケールアウトが重要になってくる。
アプリケーションレベルで対応されてないと、限界がある。
**独立性
依存するサーバーを少なめに。
最悪どっかの機能が落ちても、他の所は動くようにしておきたい。
使えない機能が出るとか、一部のユーザーがログインできないとか。
・ソーシャルゲーム
ひたすらAPI叩くソフトウェアになる。
(ユーザーがアクセスする度に外部のAPIを叩く必要がある。
タイムアウトの設定(レスポンスを待ちすぎて30秒後PHPが落ちるとか切ない。
3秒とか待たされるのでも携帯だと終ってる。(1秒とかが限界?
じゃぁエラー発生した時とかレスポンスなかった時大丈夫?
「エラーが発生してアクセスできません」でいいの?
表示できない部分を切り分けて、取れないのは個別に出す。
(ユーザーへのアナウンスはけっこう大事そう。
→SQLの正しい理解
最適化の話し(explain!!!explain!!!explain!!!explain!!!explain!!!
(t)実勢ハイパフォーマンスSQL読みましょう。
正しくスケールアウトできてる?
・PHPの話し
5.3.1あたりをメインにしています。
(Mac更新すると5.3になってしまうので、Macユーザー開発者の為に5.3にw
symfonyが5.2向けだから5.2向けが推奨ではあるらしい。
GAEがPHP対応してれば、、、
あまり1つのサービスに依存したくないというのがある。
現時点ではEC2とPHPの組合せはクラウドに簡単に移行できた。
ソーシャルゲームだと足りなくなったリソースをすぐに追加できる状況が非常に重要。
・オフレコの質疑応答
お昼!
横に座って電源シェアしてたの、facebookで繋がってる水嶋さんだったwww
ビビるwwってか名刺もってくればよかったorz
お昼はレストラン艸葉(食べログ)にいってきました。
写真とってたらおかみさんに怒られましたorz
「クラウドはもう目の前! PHP on Windows Azure ~PHPをクラウドにどう載せる? どう使う? ~」物江 修(日本マイクロソフト株式会社)
・Windows Azureとは
Windows Azure Platformを構成するOS。
世界中のサーバーの上にリソース管理のレイヤ(ファブリック)があって、その上でVMとストレージが乗ったアーキテクチャ。
アプリケーションの構成情報から、ファブリックから必要なリソースをもってくる。
・Azureコンピューティングのロール。
webロール(webアプリケション向け)
Worerロール(バッチなどのプロセスを走らせるようなの、別にIISも走る)
VMロール(VHDをUPして使う。)
必ず負荷分散が行なわれるので、それを考慮した実装にする必要がある。
・ストレージサービス
VMの保存領域とかと違うの?
(VMだとrebootとかで消えたりする可能性あるし、負荷分散してるから共有性がないと意味がない。
必ずコピーされる(冗長性がある、永続性がある)
ネットワークへのインターフェースもあるので、ネットを介して外部からも使える。
BLOB(ブロックBLOB、ページBLOB)、テーブル、キュー。
**BLOB
まるまるVMにマウントできる。 まぁようするにバイナリーストアだと。
**テーブル
リレーショナルデータベースのテーブルのような関連はなく、ディクショナリのようなキーバリュー型のテーブル
**キュー
データの保存ではなくメッセージの交換に使用する。
(webロールとWorkerロールのデータ交換とかで使う
・実演
ほとんどの設定がビジュアライズされてて、スケールアウトとかも簡単にできる。
自動スケールアウトの機能は今の所ないが、スクリプトを書けば負荷に合わせてスケールアウトするようなのもできる。
・OSSアプリケーション
ツールを使う事で既存のOSSのソフトも簡単にAzure上に設置できる。
ただし、負荷分散の点があるのでツールやパッケージが必須である。
AzureでMySQLとかも使える。
ストレージサービスだとRESTフルなのでパフォーマンスが出ない(遅いわけじゃないよ!!!)
・コマーシャル
**WEB Platform Installer
Winのxamppみたいなもの。
※無料です。
**WebMatrix
WEBサービスを簡単にセットアップ・管理できるツール。
サービスの管理ももちろんながら、SEOとかも含めたサービスの管理がかなり便利。
※無料です。
(t)超使いたいけど、Windoewsサーバー環境もってないや、、、
(うちの会社で導入できるかなぁ、、、
「スマートフォンサイトの作成術」大川洋一(おちゃのこネット株式会社)
会場のスマートフォン率がすごい。
実際に開発してるサイトのPC版とスマートフォン用の表示の比較が並んる図。
・WebKit
iOSのsafari、AndroidのChrome、BlackBerryも採用
・サイトの構築
**ビューポート
幅を指定しないと、普通のサイトの表示みたいにすげー縮小された感じになる。
device-widthでデバイス単位で幅が指定できたりする。
文字サイズ指定とかも、横にして幅が合わされても文字サイズが拡大されない みたいな指定ができる。
(t)独特なcss指定をしていく感じか。
**ページング
ページ遷移さあせずに、ajaxで継ぎ足されるような挙動にしている。
(t)まぁjsで出来る事だよね。
**Web Storage
HTML5の実装。
cookieはまぁ今迄通り小規模なものだが、WebStorageはiPhone側で5MBまで保存できる。
cookieと同じでキーバリュー型のデータ構造。
***セッションストレージ
を閉じるまで有効な一時データとして。
***ローカルストレージ
ブラウザを閉じても消えない。
有効期限とかもない。
ページ読み込み時に古いセッションストレージ消して、継ぎ足す前提の商品一覧とかの画像データを先読みして保存したりしてる。
(通信コスト的にはけっこう富豪的だな。
**サイズによる表示の差
解像度の高い端末だと、width指定で80に統一した画像でも、元のソースの解像度に差があると解像度が高いと、綺麗に表示される。
例:実サイズ80のをwidth=80で表示するのと、実サイズ160のをwidth=80で表示するのでは後者の方が綺麗。
iPhone4とかの例だが、これはディスプレイの解像度とブラウザお解像度がドットバイドットになっていない為(実際にドットバイドットにすると文字が小さくなりすぎる。
・フォーム要素の解説
**input type
HTML5には新たなinput type属性があり、iPhoneなどで表示する事で適切な入力UIを提供できる。
tel,numer,email,url等を設定すると、それに合わせたキー配置の入力になる。
(mail入力の所だと.を長押しすると.netとか.jpとかポップアップするらしい。touch使ってるけど知らんかった。
(t)余談として、この辺のtypeはPCだとFirefoxでもサポートしきれてないけど、operaはほぼ完全にサポートしてますよ!!!!
jsでテキストエリアの自動拡大をしたり、傾きを検出して色々やったり。
・ASPへの組込み。
オーナーがプレビューチェックできる機能とかはあるが、スマートフォン向けの表示をブラウザで確認できないオーナーさんもいるので、
プレビュー機能側で幅とかをエミュレーションしたりしてるらしい。
(t)うちも見習わんとなぁ、、、
・端末の表示エリア
ブラウザの各種情報部や枠の分が引かれたクライアントサイズになるのでけっこうややこい。
iOSは端末の制限があるので複数種類があるといっても数機種だが、Androidは様々な改造があるし、メガネケース(IS01)に至っては横長である。
URLバーとかは閲覧時にスライドとかすると隠れるんだが、JSでシステム側から非表示にさせたりできるらしい。
PCサイトがある場合、モバイルの表示から「PC版を表示する」みたいなボタンをつけたりする。
・その他
**自動表記の対応
ほっとくと郵便番号みたいなのすら電話番号っぽくされてしまうので、属性指定とかで自動表記を抑制できる。
**動画
ニコ動はリンク貼るとニコ動アプリに飛んでくれるが(スキーマリダイレクトしてる為)アプリからブラウザに戻れないのが難点。
youtubeはPC向けに提供されている埋め込みコードで、そのままスマートフォンでも動作してくれる。
(Youtube△
「スマートフォン時代のWebシステム」熊倉 洋介(株式会社フィードテイラー)
仕事ではiOS、MacOSX向けのアプリ開発をやっていて、サーバーとの通信を前提にするものも多いので、WEBシステム側を担当しているとかなんとか。
・そら案内
1次ソースを受けとって変換して静的なjsonを地域毎に生成している。
これによりiOSからのアクセスはjsonへの静的なアクセスのみで成り立っている。
1次ソースの更新タイミングと解析データ量次第ではあるが、パフォーマンスを優先した構造。
1次ソースは1回の通知でjson2150件分
iOSからのアクセスは1日あたり35万アクセスある。
(時間にバラアつきがあり、ピークタイムはAM7-8,PM10-12
基本的に外部へ提供するのがweb uiだけなので、VPSだけで何とかなってる。
・SyncBoard
企業向けのファイル共有に活用できるグループウェア。
営業資料とかをweb経由で共有してiPadなんかで閲覧したりする。
サーバーサイドの構成はLAMP。
RESTフルなシステムになっている。
・RESTの解説
(t)REST自体の解説は記事として割愛( ´-`)<ググレ
PHPではURL Routingにて、URIのパターンから実行するメソッド等をフックするようにする。
(って、PHP側の最新の実装では組込みでそういうのあるんだ!みたいな話しかと思ったら、各種フレームワークにはこーゆーの出来る機能があるよって話しだった。
(t)まぁ規模がでかくないならのならmod_rewriteで自前で実装するとかでいいよね。
・実際にどのようにしているか。
jsonのドキュメントの構造情報を取得。
ドキュメントファイルを返す。
ハンドリングをエラーコードでやってる。
(アクセス制限が厳しくなってアクセスできなくなったのか?(403)、ファイル自体が削除されたのか?(404)
『スマートフォン:主役、サーバー:裏方』
PHPでRESTを組んで分かった事
こっからPHPメインや!
・データの受け取り
スーパーグローバル変数の$_GET、$_POST、$_FILES。
リクエストヘッダーから飛んできたものを、PHP側がハンドリングして格納してくれている。
RESTの場合はPHP側での処理が存在しない。
PUT /api/events/42
Content-Type:application/json
とかで実際に来るのはjsonの文字列の生データ。
でもPOSTにもGETにも入ってないよ?どうするの?
→file_get_contentsでphp://inputで文字列としてロードする。
(t) php://inputとか、code golfでしかやった事ないわ( ´-`)
例えばContent-Typeにjpegが入ってきた時とか、php://inputにデータが延々入ってくる。
でも画像のデータが大きいと、メモリから溢れてしまってサーバーが落ちる。
(t)話しここで終わっちゃったけど、これストリームをopenして単位サイズ毎に読み込んでファイル書き込みすれば、解決できるのでは?
切実な話しとして、PHP側がRESTをサポートしてデータをコンテンツタイプに合わせて適切な形でスーパーグローバルにいれてほしい。
現状、RESTをサポートするライブラリとかないのかな?
・認証
RESTは状態の継続がNGとなっている為sesionを使って状態の継続性を持つべきではない。
(実際にはPHP側が処理してくれるので使えるけど、RESTの偉い人には怒られる。
その為、規約に従うのであればBASIC認証等で通信に常時の認証させるoroAuthのようにチャレンジトークンを発行する必要がある。
(t) Fitzgerald拡張して使って、REST用の簡易フレームワークとか作れないかなー。
ちょっとREST本買って、実装してみるかな~
ってかこの辺の話しを懇親会とかで是非したいのだけど、俺は帰るのであった。
ライトニングトークは記事分けます。
PHPカンファレンス関西 - ライトニングトーク - tyoro.exe