プロダクトマネージャー・カンファレンス2018 (Day2)に参加しました #pmconfjp
11/6-7に行われたプロダクトマネージャー・カンファレンス2018のDay2に参加しました。
私はプロダクトマネージャーではありませんが、新サービス検討を行っているので、プロダクトマネージャーの観点でどのように新しいサービスを生み出すのかを知りたいと思いました。
巨大なFinTech事業開発におけるプロダクトマネジメント (FOLIO)
- Projectは終わりがある、Productは終わりがない
- プロダクトマネージャーは「プチ社長」である
- 常に「何」を「何故」作るのかを追求し続ける(WhyとWhat)
- 証券会社(金融)における特殊性
- 社会インフラとしての完全性と堅牢性
- 技術が枯れている
- コモディティ化しやすい
- 株はどの証券会社で買っても同じ=コーラはどのコンビニで買っても同じ
- 攻めと守りの天秤
- 守りが重視される
- 最初は3ヶ月でローンチできると思っていたが2年掛かった
- コモディティ化しやすい金融のプロダクトで非コモディティ化するプロダクトを作る
- テーマ投資
- 単一プロダクトから複数プロダクト
- おまかせ投資、LINEスマート投資をローンチ
- それぞれのターゲット、KPIは異なる
- 理想
- 現実
- 対策
- サービス開発・運用に適した組織ビルド戦略の立案と推進をするCTO室を新設
- プロダクト境界の明確化
- 組織境界とミッションの明確化
- サービス開発・運用に適した組織ビルド戦略の立案と推進をするCTO室を新設
- プロダクトマネージャーの資質
- プロダクトへの尊敬(愛情<尊敬)
- 相手への尊敬
- 自分への尊敬
- 交渉に失敗することがあっても自分の決断を自信をもって伝えられること
C向けアプリのPM経験者から見た、B2B Saasのプロダクトマネジメント (マネーフォワード)
- MFクラウド経費を担当
- マネーフォワードでは1プロダクト10名程度のメンバで対応する
- B2BとB2CをAARRRモデルで比較
- ユーザの理解
- B2Bはユーザになれない場合が多いので、何が課題なのかを認識できない
- ユーザになるための活動として自社の経費精算を積極的に使ってもらう
- 課題の認識
- B2Cは仮説的でホームラン狙い
- B2Bは実在する課題を潰すヒット狙い
- 何らかの手段で実現できるかがまず求められる
- SaaS開発の決定軸
- プリセールス(新機能)、オンポーティング(利用開始時の負荷軽減)、ポストセールス(既存機能の改善)の中でどこに課題があるかを考える
- 企業は合理的な売買をするか
- 機能の多さだけでは判断しない
- ないものをカスタマイズ作ってくれと要求される
- よいPMは要求とプロダクトの落としどころを見つけ、かつ顧客を満足させる(簡単ではないが)
- プロダクトの愛をお金に変える
- Apple
- 値引きしない、純正付属品(高い)
- ユーザの愛をお金に変えている
- 上位プランを選んでもらう(梅→竹・松)
- Apple
気がついたらプロダクトマネージャーになっていた (Nature)
- Nature Remo
- 前職で電力事業開発を経験
- 供給が減った時に需要をコントロールする仕組みを作ればいいのではという発想からNature Remoを開発
- デザイン100%からスタート
- 壁に付ける想定なので目立たないようにデバイスの色を白にしたい(このこだわりが後々に問題に)
- 開発苦労話
- 製造を依頼していた工場に断られる
- ようやく製造してくれる工場を見つけてできたものを見たらプラスチックが膨らんでいる
- 白の赤外線リモコンは(おそらく)世界初
- 普通のリモコンは赤外線を通しやすくするため黒にすることが多い(黒の方が作りやすい)
- 継ぎ目のない1つのプラスチックで構成したいというデザイン
- 出荷後に湿度センサーに不具合があり1年間の保証で無償交換
- 寝ているとき以外は30分おきにTwitterでエゴサーチ
- botと疑われる
- やってきたこと
- 挑戦して失敗する
- 最悪ベースで自分が受け入れられる失敗かどうか
- 考えるより行動
- 最後まで粘る
- 挑戦して失敗する
- やらなかったこと
リクルートの横断組織で考えるプロダクトマネジメント(リクルートコミュニケーションズ)
- HowよりWhatを重視
- プロダクトマネージャーの意思決定
- 自分とエンジニアがワクワクするか
- 儲かるか(価値が世の中に認められるか)
- やる意義があるか(競争優位性、希少価値)
- プロダクトマネージャーの役割を4つに分割
- ビジネスプロデュース
- プロダクトマネジメント
- ITディレクション
- プロダクトリード
- 個人の持つスペシャリティを活かせる役割をアサイン
- 不得意なことを期待されると辛い
- やりたい仕事にチャレンジするための「成長テーマ」を設定
- 目指す成長イメージを作る(I型, T型, H型)
- 好奇心の強い人が伸びる
- ハイプロというキャリア(ハイプロ>組織長)
- プロダクトマネージャー≠組織長
- 役割を分ける
顧客、会社、チームをHappyにするプロダクトマネジメント ~観点・プロセス・レバレッジ~(楽天)
- 偏った愛による失敗
- ムリゲー(実現できない要求)
- 自己満(儲からないプロダクト)
- 誰トク(目的やKPIばらばら)
- 顧客、会社、チームをHappyにするためプロダクトを生み出し、成長させる
Build Narrative in Product (ドワンゴ)
- かつてのドワンゴは技術ドリブン
- 高度な技術で実現すれば客が付く
- Steve Jobsは「まず取り組むべきは顧客体験。技術云々はそれから。」
- 全く逆のことをやっていた
- スターエンジニアがほぼ解決
- 技術領域の拡大で精鋭だけで支えきれない
- スターエンジニアがボトルネックになり人材不足
- 実現したい機能が多過ぎる
- ユーザストーリーが想像できていない
- 不安なので量でごまかす
- 課題解決の施策を表現するワードがいちいちカッコいい(JOB STORYとか7 STAGESとか)
The mindset of building the product that user will love (メルカリ)
- 誰のため、何の問題を解決するのか
- 重要なことは
- Understanding(理解すること)
- Team Work(チームワーク)
- Fail Fast(早く失敗する)
- デザイン思考のダブルダイヤモンド
- 対象を理解することがデザイン思考の第一段階
- 行動する
- 関わる
- どっぷり浸かる
- 誰を理解するか
- ターゲットユーザ
- 間接的なユーザ
- みまもりSwitch(ゲームをする子供の親に着目)
- 極端なユーザ
- プロダクトが何故好まれる/好まれないのか
- ミートアップに招待してヒアリング
- 未来のユーザ
- Uberは何の問題を解決したか
- A地点からB地点に行くまでのユーザ体験はタクシー会社と同じ
- 車を見つける、到着後の支払のプロセスの違い
- 2分程度のユーザ体験で年数十億の売上を上げる
- デザインスプリント
- メルカリでは3日で回す(一般的に紹介されているデザインスプリントは5日で回す)
- 失敗してもOK、早く失敗して次に行く
- 大切なのは一過性のものではなく、一貫性のあるものを作ること
紹介していたThe SPRINT bookは邦訳が出ている。
SPRINT 最速仕事術――あらゆる仕事がうまくいく最も合理的な方法
- 作者: ジェイク・ナップ,ジョン・ゼラツキー,ブレイデン・コウィッツ,櫻井祐子
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2017/04/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
北米・アジア・欧州のプロダクトマネジメントの事例とスマートニュースの実践 (スマートニュース)
- 自主渡航
- 半年に1回、国外のカンファレンス、学会の参加ができる制度を利用してGeneral Assembly、Product Management Festival、TURING FESTに参加
- 北米ではプロダクトマネジメントはロジカルシンキングと同じぐらいの認知度
- PM以外のメンバもオーナシップを持ち、ゴールが共有され、PMが命令しなくても各メンバがパフォーマンスを出せる
- 「バーチャルでクロスファンクションなチーム」とは役割はあるけど体制(縦割り)はないということ?
中国のプロダクトマネジメントのリアル (Baidu)
- 中国はアメリカのプロダクトを模倣していたが、最近は自国向けに最適化されている
- 中国には10万人のプロダクトマネージャーがいる
- 平均年齢28歳、平均年収500~800万円(中国の中では高給)
- コンピュータサイエンスを学んでいるPMは30%程度
- 中国のPMは技術を知らなくても、ニーズとビジネスが分かればいい
- マーケとかコンサルに近い?
- マーケットの違い
拼多多(ピンドウドウ)
Anycaにおけるプロダクトマネジメント (ディー・エヌ・エー)
- カーシェアリングサービス(C2C)
- 登録されている車は6,000台
- トンマナ
- プロダクトのイメージカラー、キャラクター等
- 直感的に捉えられたいイメージ
- クルマサービス、男性的、新サービス、品質がよい、安く使えそう(だが安全)
- ユーザとの接点
- サービス説明会、クルマ撮影会、ユーザ交流イベント等
- ユーザの行動を分析して実装すべき機能を判断
- ソシャゲのノウハウ?
[ワークショップ]日本のプロダクトマネージャーは今何をすべきか
愛されるプロダクトが大事だと思う理由は何か
- 自分にとって責任感やモチベーションが生まれる
- 相手(チームメンバ、顧客)に情熱を伝えることができる
Next Action
私は[プロダクト名]をもっと愛されるプロダクトにしたい。そのためにはわたしは、[Next Actionについて書く]
感想
ドワンゴの発表にあった技術ドリブンでユーザストーリーを想像できていないというのは、とても刺さった。
技術ありきでプロダクトを作ってしまうと、楽天の発表にあった偏った愛による失敗を招いてしまうと思う。
Java Day Tokyo 2016に行ってきた
5/24(火)に東京マリオットホテルで行われたJava Day Tokyo 2016に有休決めて行ってきたのでメモ。
あくまで自分用に書いているので箇条書きです。
Togetterのまとめもあります。
Innovate, Collaborate, with Java
- 会場は20代が1/3、30代が1/3とのこと
- 色々なところでJava使われてますよという話
- JCP(Java Community Process)について
- 開発者向けにJava Magazineというのを発行している
- Javaが今後取り組んでいくのはセキュリティ、これはクラウドでの活用を見据えて
- 起動速度やGCの改善を行っていく
- Java 9
- 大きな変更点はProject Jigsaw
- ライブラリの依存関係を記述して必要なものだけを組み込めるようにする(超ざっくり)
- Project Jigsawについて詳しく知りたければITProの@skrbさんの連載記事を見た方がよさそう
- その他にJShellによるREPL環境の実現
- JShellについてはJJUG CCC 2016 Springで@bitter_foxさんが発表されている
- JJUG CCC 2016 Springでjshellの発表してきた #jjug_ccc - きつねとJava!
- 更にJava 9の先にProject ValhallaとProject Panamaが進行中
- 大きな変更点はProject Jigsaw
- NetBeans
- HTML/CSS/JavaScriptの開発に対応
- 見た目が完全にIntelliJなのですが
- Java開発者はJavaScriptのコードを書くことが多い
- 変更した内容が即座にブラウザに反映される(まーIntelliJでもできますが。。。)
- Jigsawを試すこともできる
- Java EE
- 感想
- モジュラリティ(Jigsaw)とマイクロサービス推しまくり
- マイクロサービスといえばSpring Bootなのだが、Java EE 8でマイクロサービスってどうなの?
損保ジャパン日本興亜のJAVA戦略
Twitter上ではライブレビュー状態だったが、お堅い保険会社のメインフレームの刷新にしては攻めている方だと思う。やりたいかと言われるとそこは丁重にお断りさせていただきます。
Night Hacking
- Stephen Chin氏(@steveonjava)とSebastian Dashner氏(@DaschnerS)のJava Japan Tourの活動報告
- Java Japan Tour | NightHacking
- Sebastianイケメン、これが世界のJavaデベロッパーか。。
- Ducatiのバイクで日本全国のJavaコミュニティを訪れている
- SebastianはJava Championになりましたって何?
- 詳しくはナイトセッションで
ドローンデモ
Introduction to MVC 1.0 (JSR 371)
- Software Technical EvangelistのDavid Delabassee氏(@delabassee)
- 最終日に空きが出たので登録したセッション
- MVC1.0はアクションベースのMVC
- JSRで標準化
- JSRの参照実装にOzarkがある
- MVCは新しいものではなく、25年以上使われている
- MVC
- Java EE 7の標準はJSF(コンポーネントベース)
- MVC 1.0はアクションベースMVCの選択肢を提供する
- リファレンス実装はOzarkというOSSがある
- アクションベースMVCは悪くはない
- 今あるものを活用できる
- JAX-RSが分かっていれば難しくない
- もっと知りたければOzarkを見る
- MVC Specification
- The Aquarium Blog
Java EE 7アプリケーションとWebセキュリティ
- @skrbさんのJigsawはすごい混みそうだったのでこちらにした(まーこっちも満席ですけど)
- うらがみさん(@backpaper0)と言えばJAX-RSとDomaだけど今回はセキュリティネタ
- イントラのシステムはセキュリティが甘くても致命傷にはなりにくい
- でも、仕様が変わって公開することもある
- ならば、最初からセキュアなコードを書いておけば要件が変わっても問題ない
- 但し、そこに掛けるコストは無視できない
- 対策することでコードリーディングのノイズとなることも
- フレームワークが対応していれば実装もなくノイズもない
- ビュー・コントローラで対応する場合は個別による実装が発生
- 但しビジネスロジックにはノイズは入らない
- その他
- ビジネスロジックで対応しなければいけないもの
- その場合でもInterfaceなどで切り分けるようにする
- 対策の基準
- XSS
- CSRF
- SQLインジェクション
- セッション管理の不備
- ファイル操作・パス名
- クリックジャンキング
- X-Frame-Optionsレスポンスヘッダを付けるだけ
- 但し、frameやiframeが無効になるためAjaxで使われていれば、そちらも無効になる
- 制限をDENYではなく、SAMEORIGINにすれば生成元が同じiframeは読み込める
- HTTPヘッダインジェクション
- Java EEだと自力でHTTPレスポンスを書き出すことが無いので対策不要
- メールヘッダインジェクション
- 対策もHTTPヘッダインジェクションと同様だが、意図しないヘッダを書き出すことはできる?
- ヘッダにセットしない、セット前にチェックする
- OSコマンドインジェクション
- 外部プロセスを起動することがないので省略
- バッファオーバーフロー
- 直接メモリを操作しないので省略
- アクセス制御
- アプリケーションによるところなので省略
- その他
- X-Content-Type-Options: nosniff
- Content-typeが設定されていないリソースに対して自動で判断する(IEの機能)
- このsniffを無効にする
- Content-Security-Policy
- 最強のXSS対策レスポンスヘッダ
- この対策でDOM型のXSSにも対応できる
- 任意のHTMLを書き出す脆弱性があったとしてもJavaScriptが動かない
- style-srcやimg-srcで個別に制約を設定できる
- X-Content-Type-Options: nosniff
- まとめ
- Java EEで対応しているものもあれば、自分で対応するものもある
- 仕組みを理解しないとなぜそれで防げるのか分からない
- 資料を読んで普段からセキュアなコードを書く癖をつける
- 感想
- 話としてはオーソドックスなセキュリティ対策
- こういうのを設計段階で決めておくと、リリース直前でセキュリティ対策が漏れていて炎上するみたいなことはなくなると思う
- SQLインジェクションでDomaに触れなかったのはOracleへの配慮かな?
- 話としてはオーソドックスなセキュリティ対策
コンテナとJavaとOracle JETによるアプリ開発ハッカソン
- Oracle Cloud Platform
- Application Container Cloud
- Oracle JET
- JavaScript Extension Toolkit
- フロントエンド開発用のJavaScriptライブラリ
- JET = 5 OSSs x Oracle
- Oracleが初めて主導で取り組んでいるOSS
- ソースはGitHubで公開
- Cookbookのページでサンプルをブラウザ上で編集して試すことができる
- デモアプリ
- ハンズオン
- デモアプリをローカルの環境で動かす
- 編集したデモアプリをApplication Container Cloud上でデプロイ
- ハッカソン
パネル・ディスカッション - Java Day Night Session with NightHacking Tour
- 日本のJavaコミュニティはとても熱気に溢れているが、質問が少ない
- Java Championはコミュニティへの貢献を評価されたリーダ
- 日本人は一人(@skrbさん)しかいない、アジアでも少ない、英語で発信していないから
- @skrbさんはLooking Glassで英語の発表をやっていたから推薦されたとのこと
- Java Championになるには
- JCPは今後、企業以外での参加も可能になるとのこと
- #てらだよしおがんばれ
- その後はStephen Chin氏によるRaspberry Piのプレゼン
- 忍者龍剣伝とか懐かし過ぎる
- halfnes emulatorをRaspberry Piで動かす
- ケースは3Dプリンタで作成
- 1日中参加していたのでこの辺は飛びました(Sorry Steven)
その他
- 展示コーナーにNightHacking Interviewのブースがあり、色々な人がインタビューを受けていました
- 皆さん英語で受け答えしていて素晴らしい
全体の感想
- 初のJava Day Tokyoとても楽しめた
- 1日中セッション聴くのは疲れるので初めてハンズオンに参加してみる
- 参加者が少ないのでゆったり座れた
- ハンズオンの会場は机、電源、Wifiあり:-)
- 後半はハッカソンだったが全く作れずに終了orz
- @cero_tさんや@kawashimaさんの発表も聴きたかったけど
- 満席セッションでも入れるみたいなので事前予約の意味があまりないのでは
- 昼は11:30-13:00だったのでゆっくり出来た
- 昼食は少し歩いて北品川商店街の「プサン」という韓国料理店
- JAVAおじさん問題
- 最前列で寝ているおじさんがいるというので、それは発表者に失礼だなと
- 参加料を取るようにすれば来なくなると思う
- 業務の一環(研修とか)で来ている場合、有料だと会社に書類(申請書や報告書)を提出しないといけなくなるはずで、そうなれば面倒で来ないだろう
- 本当に来たいと思う奴は有給休暇取ってでも来るし、自腹でも来る
- Java Day TokyoとJJUG CCC(あくまで個人的な意見です)
- Java Day TokyoはJavaの最新動向をキャッチアップするところ
- JJUG CCCはJavaのフレームワーク、活用事例などをキャッチアップするところ
- セッションのバラエティはCCC
- 但し、Java Day Tokyoにもスポンサーセッションというのが設けられているので事例もある
- Java Day Tokyoはformal、JJUG CCCはinformal(発表者の立場という意味で)
- 会社として発表するのか、個人として発表するのか
- CCCの方がお祭り感(土曜だからなのかもしれないけど)があるし、純粋に楽しむならCCCがいいかもしれない
- ちなみに私はCCCに参加していませんが。。
- 前参加した時に、お目当てのセッションが立ち見状態なので心が折れた
- 何処が満席セッションなのか分かりづらい、分かっていれば第2候補とか第3候補を考えられる
- 土曜潰してまで疲弊したくないという極めて老害な理由
- CCCはでかくなり過ぎた感が否めない
- 昔の寂れた感じの方がよかったと言ったら怒られそうだが、その場の気分で好きなセッションを気軽に聴きに行くという感じではない
圧倒的初心者がDroidKaigiに参加した
ダメ元で抽選枠に応募したら当選したので行ってきました。
プロジェクトでAndroid/iOSのネイティブアプリを開発することになりAndroid開発の知見を得たかったのでとてもよかった。
Androidは4年程前に簡単なRSSリーダを作ってから触っていない圧倒的初心者。(開発環境に心が折れてドロップアウトした勢)
聴講したセッションのメモ
午前のセッションがないのはお察しください。
初学者に嬉しいAndroid開発環境(あとMVCとか)(@hkusu_)
今どきのAndroid開発でどんなものを使われているかを知りたかったのでとても参考になる発表だった。
- やっぱり今だとIDEはAndroid Studio
- エミュレータはGenymotion
- ViewのマッピングにはButter Knifeというのが便利らしい
- イベント通知はEventBusを使うのがよい
- HTTPクライアントだとRetrofitとかOkHttp
- WebAPIで結果を受ける場合にJSONならGsonとか、画像ならPicassoを使う
- ORMはActiveAndroidとかRealmを使う
- MVCはSIでもおなじみなので同じように捉えることができるのがよい
- MVP(Model-View-Presenter)のほうがよいという話もある
- 画面遷移はActivityをIntentで切り替えるのではなくFragmentを切り替える
- アプリケーションにActivityは1つ、画面1つに対してFragmentは1つにしてFragment on Fragmentは避ける
- Fragmentの行数が増えたらControllerやModelに分割する
- はじめはドットインストールで勉強して慣れてきたらmixiの資料を読むとよいらしい
- 端末の向きを固定にした方がよいらしい
- 書籍の中では「AndroidエンジニアのためのモダンJava」が気になった
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/20
- メディア: 大型本
- この商品を含むブログ (2件) を見る
Androidを学ぶ君へ。生き抜くためのナレッジ共有(@operandoOS)
Android開発におけるLifeHackのような話。
Android開発にかぎった話ではないがなかなか実践できていないと感じた。
- Android開発するなら端末を買うというのは今も同じらしい
- コードを書かないと書いたものがクソコードだと気付かない
- コマンドを使ってActivityの状態を調べるとかアプリを操作できるのは覚えておくと便利そう
- テストコードがない場合はまずユニットテストからはじめる(JUnit+Mockito)
- プルリクエストにチェックリストを付けることでチェック漏れを防ぐのはいいね*1
スライドにあるリンクはGitHubにまとまっている。
新言語KotlinでAndroidプログラミング(@ngsw_taro)
Kotlinと言えば@ngsw_taro氏だが発表を聞くのは今回がはじめて。
KotlinだとJavaよりもすっきり書けるという印象を受けた。
- クラスの説明にあるプロパティがよく分からなかったがJavaでフィールドにアクセスするさいに書くgetter/setterをいい感じで扱ってくれるものらしい
- Java8で追加されたlambdaが使えるとか高階関数によるコレクション操作ができるとか
- インライン関数は高階関数を呼び出すさいのコストを低減できる
- 拡張関数で既存クラスに独自のメソッドを追加することができる
- JavaのOptional型はnullを直接代入できてしまうがKotlinはnullを許容するかしないかを変数の宣言で制御できるようになっている
- Android Studioと開発元が同じなのでAndroid Studioとの相性は抜群によさそう
- メニューからJavaのコードをKotlinに変換できる
フォロー記事があがっている。
つかえるGradleプロジェクトの作り方(@zaki50)
Androidのビルドツールと言えばGradleかなーと思い、Gradleの話を聞きに行く。
設定ファイル(build.gradle)のTipsについての紹介。
Groovyで設定を書けるのがよい。
テンプレートをGitHubに公開している。
その他の記述は「Android実践プログラム」の5章が詳しい。
アプリを公開する前に、最低限知っておきたいセキュリティ事項(@taro_gaku)
セキュリティについてあまり知らなかったのでためになった。
- 書籍は「Android Security 安全なアプリケーションを作成するために」と「Androidアプリのセキュア設計 セキュアコーディングガイド」の2冊
- AnCoLeという学習コンテンツ、点検機能が付いたツールがIPAから提供されている
- SSL通信の実装不備で原因となる開発時にオレオレ証明書を通すように実装したままリリースしているって話はあるなるネタだなーと思う*2
- JPCERTの人がでデブサミで発表した資料が詳しい
- Androidは便利な外部ライブラリがたくさんあるが問題が起こる場合がある
- アンドロイドスマートフォンプライバシーポリシーガイドラインを無料公開している
- 書籍は「アプリビジネスで転ばないためのスマートフォンプライバシーの基礎知識」がよいらしい
- 同意取得は利用目的、外部送信、第三者提供の有無の記載が必要でポップアップダイアログを出す
- 個人情報保護法に反しているかではなくプライバシー侵害について考える
- プライバシーポリシーは利用規約や会社のプライバシーポリシーと分け、アプリケーションごとに作る
- GoogleとFacebookのプライバシーポリシーは1つしかなく全て取得するようになっている
Android Security 安全なアプリケーションを作成するために
- 作者: タオソフトウェア株式会社
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/12/29
- メディア: 大型本
- 購入: 6人 クリック: 141回
- この商品を含むブログ (27件) を見る
アプリビジネスで転ばないためのスマートフォンプライバシーの基礎知識 (Next Publishing)
- 作者: 寺田眞治
- 出版社/メーカー: インプレスR&D
- 発売日: 2012/12/25
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
マテリアルデザインを用いたデザインリニューアル(@ninjinkun, @yuki930)
ここまでで事例の話を聞けていなかったのでFablicの人の話を聞く。
FrilのAndroid版リニューアルにともないマテリアルデザイン対応をしたという話。
マテリアルデザインガイドラインに沿ってナビゲーションドロワーを付けたが既存ユーザの使い勝手が悪くなったという話はいかにもUXっぽい。
- マテリアルデザインを理解する上でキーとなる4つのポイント
- Androidの標準に合わせたら既存ユーザの使い勝手を悪くしてしまった
- お知らせを見るのに既存よりも1タップ余計にかかる
- ドロワーを表示するとバッチ(新着通知)が見えなくなる
- ユーザの動線はタイムラインを見てお知らせをチェックする
- @yuki930「やっぱりボタンは表示する必要がある」
- @ninjinkun「ボタンとバッチは作るのがめんどう」
- UIのパーツはGoogleが提供している
- アイコンを外部フォントにしているところはおもしろいなと思った
- TextViewは外部フォントに対応していないのでCalligraphyでTextViewを拡張している
- 実装はRxJavaでPromiseを書いているところがいいなと思った
- Scroll to Full Screenは今ならSupport LibraryでできるけどAndroid-ObservablScrollViewの方がもっとよいらしい
- ActivityやFragmentの継承を使わないのはへぇーという感じ
- 差分の見通しが悪くなるのは分からないでもない
感想
開発まわりは色々と便利になっているなーと感じた。
机があるのはありがたい。
隣と間隔が空いているのでゆったりと聴講できた。
聴講したセッションはハズレなしでどれも満足。(TLを見ると裏のセッションも盛況だったのでどちらを聴講しても満足できたはず)
Android開発のモチベーションがあがったイベントだった。
4Uをクローリングして画像リンクを抽出する
このエントリはクローラー/スクレイピング Advent Calendar 2014 - Qiitaの21日目になります。
4Uという美女画像を投稿してみんなで共有するソーシャルブックマークサービスをクローリング/スクレイピングしてみたいと思います。
4U
4Uが公開されたのは2008年なのでWebサービスとしては老舗です。
今年の2月にリニューアルがあり、ページ構造が変更されています。
リニューアル前のページ構造に対応したものは誰かが作っていますが、リニューアル後のページ構造に対応したものはなさそうなので作ってみました。
4Uのページ構成
いわゆる一覧ページ(小さい画像が並んだページ)と詳細ページ(大きい画像があるページ)で構成されています。
ほしいのは大きい画像なので以下のようにクローリング/スクレイピングします。
- 一覧ページから詳細ページへのリンクを抽出する
- 詳細ページから画像のURLを抽出する
- 一覧ページでページングできるところまでクローリングする
作ったもの
crawler4u.py
GitHubに置いてあります。
言語はPython2.7、HTMLパーサはBeautiful Soupを使っています。
引数に人名と出力先のパスを渡すと、詳細ページのURL、詳細ページにある画像のURL、引用元のURLをCSVで出力します。
ちなみにWindowsでしか試してないのでMacやLinuxで動くかは不明です。
以下、ざっくりとした解説です。
詳細ページのリンクを抽出
詳細ページのパスはimage/xxx
なのでaタグのhrefがimage/
で始まるものを抽出します。
詳細ページのリンクが見つからない場合は処理を終了します。
詳細ページから画像のURLを抽出する
画像URLはimgタグのaltに人名があるので引数の人名と一致していればsrcの値を抽出します。
GitHubのソースでは引用元のURLも抽出していますが、引用元のURLは<td class="t-left">
の直下にあるaタグを抽出します。
Beautiful SoupだとjQueryのセレクタのようにsoup.select("td.t-left a")
と書けます。
ページングできるところまで一覧ページ(list.php)をクローリング
一覧ページは13件ずつ表示されることを考慮します。
GETパラメータのlimがそのページの起点(例えばlim=13なら14~26件を表示)になるのでlimを13ずつ増やしながらクローリングすると全てのURLを抽出できます。
ここまで美女画像がぜんぜん出てきていないので、このプログラムを使って集めたURLから美女画像をGetした結果をのせておきます。
「吉木りさ」で抽出した結果から得た画像をダウンロードしています。*1
4UだとGoogle画像検索のように関係ない画像が混ざらないのがよいです。
本当は引用元の画像の方がサイズが大きいので引用元から画像を抽出したかったけど簡単ではないので保留しました。*2
*1:2014/6のデータなので件数が現在より少ない
*2:引用元が画像の直リンクでないとか、Tumblrのリブログで実体がないとか、JavaScriptのページだとか
第3回Webスクレイピング勉強会@東京(最終回)に参加しました
参加したのでメモ。
ちなみに今回が最終回で4回目の予定はないとのこと。
メモは自習用に書いているので発表資料に沿っていないものもあります。
発表資料はconnpassのページに全てあがっています。
togetterもあります。
クローリングしにくいものに挑戦(@lumin)
@luminさんの資料は後半ほとんど非公開になっている。
闇実装なので仕方がないところもありますが、資料を見てブログ(復習)を書こうと思っていたので当てが外れました。。
- wgetはクローラで最も基本となるツール、curlは再帰で使えないのでクローラとは呼べない、UAをブラウザにするとか、Cookieに対応するとかはクローラ作りでは常套手段
- クローリングしにくいのはHttpsのようなProxy、WebSocket(最近少し下火)、SPDYはGoogleの開発した次世代のHTTPプロトコル
- 特定されないようにしたい、匿名クローリングするにはTorを使う
- クローリングしにくいページ
- JavaScriptの動的コンテンツはページが読み込まれないと情報が取得できないので、ヘッドレスブラウザやブラウザでクローリングを行う、ブラウザはFirefoxがおすすめ
- CasperJS
- ガラケーのサイトはキャリアのIPアドレスに制限されているものがある
- スマホサイトはUAをJavaScriptで取得していたり、縦横表示の切り替え(Orientation)で判定しているためUAを偽造するだけではうまくいかない
- 課金ダウンロードサイトはダウンロードするまで待たされるので、それが嫌なら課金してしまう
- JavaScriptの動的コンテンツはページが読み込まれないと情報が取得できないので、ヘッドレスブラウザやブラウザでクローリングを行う、ブラウザはFirefoxがおすすめ
- 日本と外国からではインターネットの見え方が異なる
- P2PクローラでWinnyやShare、BitCoinなどののクローリングを行っている
- Flashのスクレイビングは逆コンパイルで行う、ゲームのチートを取得したりする
- データの保管はどうやっているのかという質問
- MySQLに入れるとかKVSに入れるとか色々やっているが、KVSは大量データに向いていない、TBオーダーになると厳しい
ソーシャルスクレイビング(仮)(@YuzoAkakura)
@nezuqさん曰く、これまでの勉強会では技術がメインで事例についての発表がなかった。
最近、データジャーナリズムというのが注目されており、データジャーナリズムの第一人者である@YuzoAkakuraさんに発表をお願いしたとのこと。
- データジャーナリズムとは「データからニュースを発見し、わかりやすく伝える手段」
- New York Times
- 全米の水質に関する2009年の調査報道
- 水質データを地図にマッピングすることで、汚染水を垂れ流していた企業、施設を特定
- これまでの報道は記事を書いて終わりだったので伝わりずらい
- 地図上に表現されることで住んでいる地域がどうなのか身近な問題として捉えやすくなる
- データジャーナリズムが注目されたのはWikiLeaksが注目された時期と重なる
- データジャーナリズムのリソースはソーシャルメディア、オープンデータ(政府、自治体、企業)、センサーデータなどの多種多様かつ膨大なデータであり、日々生み出され続けている
- データジャーナリズムはニュースの表現方法、発見方法、制作プロセスに革新を起こしている
- ニュースの表現方法はこれまでテキスト中心であったが地図や動画、アニメーションなどの多様な表現を組み合わされるようになった
- ニュース発見方法は取材対象として「データ」がより重視されるようになった
- ニュースの制作プロセスでは制作過程の分業が浸透してきた
- ProPublicaやICIJなどの報道団体がある
- データジャーナリズムのポイントはデータを探すこと
- なければ自前で作る(Webスクレイピング)
- ソーシャル・スクレイピング=社会との関わりを持ったWebスクレイピング
- Journalism Innovation Awardを企画している
- 切り口として社会性の高い新事実を発見する、社会常識を覆す、嘘を暴くなどがある
- QAでアジア大会のバドミントンはデータジャーナリズムになるのではないかという話があった
- データジャーナリズムは誰でも挑戦できる
- 公開データ、OSS、Webの活用
- 切り口として社会性の高い新事実を発見する、社会常識を覆す、嘘を暴くなどがある
- データジャーナリズムは技術者が不足しているので興味がある方は試してほしい
LT
AWSを利用してスクレイピングの悩みを解決するチップス(@dkfj)
「Rubyによるクローラー開発技法」の著者である@dkfjさんの発表。
書籍でいうと「6-4 クラウドを活用する」に書かれている内容です。
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
- 作者: 佐々木拓郎,るびきち
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/22
- メディア: 単行本
- この商品を含むブログ (9件) を見る
じっくりと読めていませんが@luminさんの発表にあったJavaScriptのページのスクレイビングについての解説もあり、Webデータを取得したい人にとってはとても参考になります。
- データ収集の課題
- AWS(EC2, S3, SQS)で解決できる
- EC2を並べて稼働
- EC2の処理結果をS3に集約
- SQSでジョブ制御
- 巡回先サイトに配慮する
- 巡回する時間間隔を空ける(1秒ルール)
- 同一サイトを対象にする場合は多重度をあげない
- Robots.txtに従う
私が開発しているhappyou.infoについて(@shogookamoto)
次回があれば肝となる抽出手法の発表を聞きたい内容。
学術研究では半構造データのマイニング、繰り返し構造のマイニングという分野かと思われます。
なんでもRSSを開発した東工大 奥村研が国内では第一人者ですが、なんでもRSSは10年ぐらい前のツールなので最新の研究動向はどうかなと思います。
リサーチ向け・ブラウザだけでスクレイピング(@hirosuke_asano)
その他(@nezuq)
ゆるふわ非構造#1に参加しました
久しぶりに勉強会に参加したのでメモ。
東京スクラッパーというコミュニティの勉強会でデータ前処理を扱います。
メモは自習用に書いているので発表資料に沿っていないものもあります。
発表資料はconnpassのページに全てあがっています。
テキスト前処理のための形態素解析入門 ゆるふわ編 (@yamano357)
素性抽出
素性抽出はテキストの特徴を数値にしたもの、機械学習に適用しやすいようにベクトルや行列の形式であらわす。
- Bag of Words
- 文書に含まれる単語の頻度で表現する
- 言語データは単語を特徴次元とすると疎なベクトル(ほとんどの要素が0)になる
- 全ての発生しうる単語のうち、使われる単語はごく一部
- 疎なベクトルはHashMap(KeyとValueのペア)のようなデータ構造で表現する
CaboChaで始める係り受け解析 (@nezuq)
RDF/OWLの概要とOSS実装、及び活用イメージについて~非構造データの構造化ゴールとしてのLinkedData~ (@masayuki_isobe14)
- セマンティックWeb技術は今後不可欠となる分野
- LinkedOpenData
- スマホファーストとネイティブアプリ化
- Internet of Things
LinkedData
- 非構造データと構造化データの中間に位置する
- 一部をLinkedOpenDataとして公開することや社内向けにはLinkedCloseDataとしてデータを蓄積するという活用ができる
LT
LTはPrologとfluentdの話。
内容はゆるふわな感じで理解しました。
プログラミング生放送勉強会 第17回@品川 #pronama に参加しました。
マイクロソフト@品川で行われたプログラミング生放送勉強会に参加しました。
プロ生はあまり知らない言語とか技術を勉強できるところがおもしろいなと思います。
今回はVisual Studio 2012で使えるC++11やlinq.jsの発表がおもしろく、早くVisual Studio 2012いれろという感じですね。
午前はプログラミングシンポジウムに行っていたので、40分ほど遅れての参加。
そのため、はじめの2つは聞けてないので省略します。
- プログラミング生放送勉強会 第17回@品川 #pronama : ATND
- http://togetter.com/li/361310
- プログラミング生放送勉強会 2012年 ‐ ニコニコ動画(原宿)
- レポート:プログラミング生放送勉強会 第17回@品川 レポート|gihyo.jp … 技術評論社
- 8/25 プロ生勉強会 第17回@品川 終了! #pronama « プログラミング生放送
linq.js ver.3 and JavaScript in Visual Studio 2012 neueccさん(@neuecc)
今回、協賛しているgloopsのエンジニアneueccさんのlinq.jsの発表。
ソーシャルゲームの会社でもVisual StudioとかSQL Serverとか使うんですね。
JS and Collection Library
- コレクションは配列のようにデータを入れて、ループでまわして使うもの。
- C#ならforeachとかでぐるぐるまわす。
- コレクション処理:要素の値を変形する、集計する、フィルタする。
- ループでまわすのはやぼったい。さくっと書けるようにしたい。
- JavaScriptにはprototype.jsがありましたね。
- prototype.jsはRubyゆずりの強力なコレクション処理があった。(けど死んだ)
- jQueryはmapとfilterぐらいしかない。
- EcmaScript5
- ちょっと追加されたぐらいで、まだまだ足らない。
- 互換性がー、IE6がー
- コレクション処理のライブラリ
LINQ
- Language INtegrated Query: あらゆるデータソースを統一的な書法をあつかえるようにする。
- 話すと長くなるので詳しくはWindows Developer Daysの資料を見てください。
- LINQ to Everything : データソース・言語を超える LINQ の未来 | Windows Developer Days 2012 | Channel 9
- LINQの対象はインメモリのコレクションも含む。
- JavaScriptのインメモリのコレクションにたいして適用すれば、JavaScriptでもできるのではないか。それがlinq.jsのはじまり。
linq.js
- JavaScriptでLINQ to Objectsを実現したLINQ好きのLINQ好きによる万人のためのライブラリ。
- linq.js - LINQ for JavaScript
- LINQのない言語で開発したくないのでJavaScriptで作りました。
- LINQのよい性質を100%継承し、さらにC#オリジナルで物足りない要素を追加。
- お試しで書ける。
- ver.3ではUpperCamelCaseをlowerCamelCaseに。Visual Studio 2012によく対応していて、IntelliSenseが強化されてがしがし補完をきかせて書ける。QUnitに連携できる。
JavaScriptエディタとしてのVisual Studio
- Visual Studio Express 2012 for Web
- IntelliSense(入力補完)
- ドット打てば完ぺきにチェーン補完。
- 無名メソッド内部の引数まで驚異的に追随して補完。
- ツールチップヘルプ+オーバーロードも完ぺき、オプション引数も[]囲みで表現。
- jQueryもIntelliSenseに対応。(日本語版Visual Studioに同梱されているのは日本語のヘルプ)
- Page Inspector
- Visual Studio統合のページプレビューでdocument.writeでコンソールアプリケーションぽく使えたりQUnitのテスト結果画面を表示したりも便利。
- IntelliSense(入力補完)
Announce
- linq.jsはLINQのあつかえるデータソースのうちIEnumerable
(LINQ to Objects)だけでした。 - 今回あらたにLINQ to XML for JavaScriptができました。
- JavaScriptにXMLはいる?
- JavaScriptといえばJSON
- JavaScriptの用途は広がっているので、XMLをあつかうこともあるはず。
- Node.js, Office 2013, WinRT(Windows8), etc...
- XMLは今もたくさん存在している。
いいパブッ!! はじめてのEPUB3 プロ生出張版 ろすさん(@lost_and_found)
電書ちゃんねる のろすさんの発表。
「HTML5とか勉強会」で発表した資料をもとにプロ生版を作ろうかと思ったけど、少しやさしめの内容にしましたとのこと。
まず電子出版を3つに分類して整理しています。
- Reading System: 電子書籍を閲覧するSW/HW。ReaderやViewerともいわれる。
- Platform: 出版社が電子書籍を販売するためのインフラ。
- Format: 電子書籍のデータ形式。
- フォーマットにはEPUBやPDFのようなオープンのものと、AmazonのAZWやKF8のような企業固有のものがある。
EPUB
- EPUBのロゴェ
- IDPF(国際電子出版フォーラム)が開発・管理をしている。
- EPUB is the distribution and interchange format for digital publications based on web standards
- アメリカの出版社はKindleの電子書籍を出版するときEPUBで入稿する。Kindle StoreではAZWに変換して、DRMをかけて配信する。
- BtoBで使われるのがInterchange、BtoCで使われるのがDistribution。
- EPUBは配信フォーマットで使われることもあるのでBtoB、BtoCともに使われる。
- HTML5, CSS, JavaScriptなどWebの規格を取り入れている。
- Reflow(リフロー): EPUBの特徴のひとつでスクリーン幅や文字の大きさによって折りかえしを制御する。
- EPUB3(EPUB 3.0)はEPUBの3回目の改訂バージョンです。
- EPUB3の作りかた
- XHTML5で書いたコンテンツ文書を作成する。
- metadata, manifestを記述したパッケージ文書を作成する。
- すべてのファイルをzipでまとめる。
EPUB3はなにが新しいの?
- Multimedia
- Audio/Video
- Scripting
- JavaScriptが使える。
- Media Overlay
- Globalization
- 日本語テキストに対応。
- Ruby(ルビ), Vertical Writing(縦書き), Tate-chu-yoko(縦中横)
- ちなみに縦書きにしてるのは日本の他、台湾とモンゴルだけ。
- 日本語テキストに対応。
- HTML5、CSS3により表現の幅が広がった。
パッと見でわかるC++11 επιστημηさん(@epitwit)
Wikipediaにも記載されているεπιστημη(えぴすてーめー)さんの発表。
C++はほとんど使わないのですが、発表はとてもおもしろかったです。
Visual Studio (VC++) と C++11
- Visual Stidio 2012に対応したC++11の話。
- C++11のなかでも言語仕様、ライブラリ拡張によって読みやすくなった、書きやすくなったものを紹介します。
- 今回紹介するものはVisual Studio 2012で動作するものです。(Visual Studio 2010で動くものもある)
- Visual Studio 2012では言語レベルの強化とライブラリ追加でC++11に迫っている。
array
- 固定長配列のためのクラスarrayが追加されてます。
- arrayではbegin(), end(), size()などの関数が使える。
begin(), end()
- 先頭/末尾の要素が取れる関数がコンテナと配列で同じように書ける。
range-based for
lambda式
- 関数オブジェクトをよびだしたその場で書いてしまう。
- Visual Studio 2012ではstateless-lambda(キャプチャをしないlambda)が関数ポインタに暗黙変換できる。
スレッドライブラリ
- Windows APIだとスレッド本体と着火がわのあいだにwrapperが必要となる。
- C++11のスレッドライブラリを使うと簡単に書ける。
- threadのコンストラクタに関数オブジェクト([&](int x, int y) {result = plus_int(x,y);})と引数を書くだけ。join()で終わるのを待つ。
- async/future
- asyncは引数を非同期で実行し、結果をfutureで受ける。
- get()でasyncが終わるのを待つ。
- mutex:排他制御
- lock_guardインスタンスがデストラクトされるまでロックされる。
- atomic
- mutexよりも短い操作のロック。
Bingなんてもういらいない!質問応答システム入門 torotokiさん(@torotoki)
最後は自然言語処理や機械学習を勉強している高1のtorotokiさん。
さくさくテキストマイニングで形態素解析の発表を聞いたことがありますが、今回も難しい話です。
発表を聞いて思いだしたのは、マイクロソフトでもダイアログナビという質問応答システムがありました。
質問システムの構成
質問解析
文書検索
- 質問文から検索クエリをつくるのは自立語(品詞が助詞、助動詞以外)をフィルタする。
- 「空は何色ですか?」→「空、何、色」となるので簡単な例だとそれなりにうまくいきそう。
- 変換したクエリから文書を検索するのはTF-IDFとOkapi BM25をつかう。
- TF-IDFは単語の頻度と単語が含まれる文書頻度の逆数。
- Okapi BM25はTF-IDFを改良したもの。
回答候補抽出
- クエリにたいする文書のランキングが取得できれば文書を上位N件にしぼる。
- N件の文書に固有表現抽出を使い、固有表現と質問文の質問タイプを照合する。
- タイプが同じならば固有表現がすべて回答候補となる。
データ
- 質問解析(質問文-質問タイプ)のデータは日本語だとない。
- 回答選択(質問文-回答-根拠文)のデータは日本語だとNTCIR-6 QACのデータが公開されている。
- ただし毎日新聞のデータを買わないといけないので大学とか研究機関でないと無理かも。
さいごに、Bingはやっぱり必要ということで。
参考文献の「質問応答システム」は買うかな。
- 作者: 磯崎秀樹,東中竜一郎,永田昌明,加藤恒昭,奥村学
- 出版社/メーカー: コロナ社
- 発売日: 2009/07/28
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 29回
- この商品を含むブログ (3件) を見る
力尽きたので、LTは省略します。