SlideShare a Scribd company logo
1 of 91
Download to read offline
「これを買っている人はこれも買っています」
実装してみた
デジタルサーカス(株)長谷川智希
長谷川智希
とも き
@tomzoh

とむぞう
趣味 Webサイト開発, iOSアプリ開発
レンタルカートレース, ビール, 電子工作 (mbed), …
TOMZOH
デジタルサーカス(株)

副団長CTO
Facebook CakePHP iOS
デジタルサーカス(株)
・ Webサイト開発
・ スマホアプリ開発
・ 自社サービス
( )
(iOS, Android)
(http://appbuilder.jp)
Twitter: @tomzoh
Twitter: @tomzoh
今日のテーマ:
「これを買っている人はこれも買っています」
実装してみた
経緯
http://www.hasegawa-tomoki.com/blog/2014/10/19/ios8swift-yahoo/
数学勉強会とかやろうかなー
いいじゃないですか!行きます!
協調フィルタリングとか興味あったので勉強してLTします!
数学勉強会とかやろうかなー
いいじゃないですか!行きます!
協調フィルタリングとか興味あったので勉強してLTします!
数学勉強会とかやろうかなー
やります!
今回はLT枠作れなかった…
いいじゃないですか!行きます!
協調フィルタリングとか興味あったので勉強してLTします!
参加者として行きます!
数学勉強会とかやろうかなー
やります!
今回はLT枠作れなかった…
「あれ?思ったよりガチじゃね?」
「…」
「ガチだー!」
いいじゃないですか!行きます!
協調フィルタリングとか興味あったので勉強してLTしますよ!
いいじゃないですか!行きます!
協調フィルタリングとか興味あったので勉強してLTしますよ!
あんなガチ空間でLTとか…恐れ多い…!
ついに来てしまった…
しかし協調フィルタリングを勉強したいのは事実。
やるよ!
(( ))
ガクガクブルブル
今日のテーマ:
「これを買っている人はこれも買っています」
実装してみた
Toby Segaran 著
當山 仁健、鴨澤 眞夫 訳
出版社: オライリージャパン
2008年07月 発行
392ページ
ISBN978-4-87311-364-7
http://www.amazon.co.jp/dp/4873113644
2章
推薦を行う
「この映画に高い評価をした人は、こんな
映画にも高い評価をしています。」のアルゴ
リズム。
・自分に似ている人は誰か
・この映画に似ている映画は何か
# 映画の評者といくつかの映画に対する彼らの評点のディクショナリ

critics={
'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5,
'You, Me and Dupree': 2.5, 'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'Superman Returns':
5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 'Superman Returns': 3.5, 'The Night
Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0,
'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0,
'The Night Listener': 3.0, 'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 'Superman
Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns’:4.0}
}
やりたいこと
・ 「このリポジトリにスターした⼈はこんなリポジ
トリにもスターしています」
・ ⾒ると嬉しいであろうリポジトリをお勧めして
くれるシステム!
推薦: 2つの⽅法
(1)⾃分に似たユーザを探して、そのユーザが
スターしているリポジトリを推薦する。
(2)⾃分がスターしているリポジトリについて、
似たリポジトリを探して推薦する。
「似ている」
どうやって「似ている」と判断するか。
「似ている」
どうやって「似ている」と判断するか。
「似ている」 = 「近い」
ユークリッド距離
63
2
3
ユークリッド距離
sqrt((6-3)^2 + (2-3)^2) = 3.16…
63
2
3 3.16…
ユークリッド距離
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
ユークリッド距離
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
JohnとSteveの距離:
ユークリッド距離
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
JohnとSteveの距離:
sqrt((1-1)^2 + (2-1)^2 + (2-0)^2 + (3-5)^2))
ユークリッド距離
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
JohnとSteveの距離:
sqrt((1-1)^2 + (2-1)^2 + (2-0)^2 + (3-5)^2))
( - )^2 +
( - )^2 +
( - )^2 +
( - )^2
John Steve Tim Philip
John - 3 4.2 2
Steve * - 5.9 3.3
Tim * * - 5.8
Philip * * * -
John Steve Tim Philip
John - 3 4.2 2
Steve * - 5.9 3.3
Tim * * - 5.8
Philip * * * -
John Steve Tim Philip
John - 3 4.2 2
Steve * - 5.9 3.3
Tim * * - 5.8
Philip * * * -
TimにはJohnが⾒た映画を推薦すれば良さそう
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
John Steve Tim Philip
The Shawshank Redemption 1 1 2 2
The Man in the Iron Mask 2 1 4 1
ID4 2 3
The Devil Wears Prada 3 5 4
http://www.amazon.co.jp/dp/B0083RQI0S
BUY NOW
話を戻して…
(1)⾃分に似たユーザを探して、そのユーザが
スターしているリポジトリを推薦する。
(2)⾃分がスターしているリポジトリについて、
似たリポジトリを探して推薦する。
⭐ Repo
88,811 twbs/bootstrap
45,137 vhf/free-programming-books
44,106 angular/angular.js
43,279 mbostock/d3
37,667 nodejs/node-v0.x-archive
36,648 jquery/jquery
31,681 h5bp/html5-boilerplate
31,461 FreeCodeCamp/FreeCodeCamp
31,080 facebook/react
29,881 robbyrussell/oh-my-zsh
29,651 meteor/meteor
29,413 github/gitignore
28,336 rails/rails
27,248 torvalds/linux
27,111 Homebrew/homebrew
User
mvied
dcwatson
christophwille
rpoisel
victoriafrench
runcom
brynary
marceloemanoel
ysrb
Caged
anotherjesse
kevwil
rsanheim
BrianTheCoder
lancecarlson
kvnsmth
josh
⭐ Repo
88,811 twbs/bootstrap
45,137 vhf/free-programming-books
44,106 angular/angular.js
43,279 mbostock/d3
37,667 nodejs/node-v0.x-archive
36,648 jquery/jquery
31,681 h5bp/html5-boilerplate
31,461 FreeCodeCamp/FreeCodeCamp
31,080 facebook/react
29,881 robbyrussell/oh-my-zsh
29,651 meteor/meteor
29,413 github/gitignore
28,336 rails/rails
27,248 torvalds/linux
27,111 Homebrew/homebrew
GitHubのデータ数
リポジトリ 約1千400万
リポジトリ 約1千400万 ユーザ 約1千600万
mvied dcwatson rpoisel ysrb
twbs/bootstrap
vhf/free-programming-books
angular/angular.js
:
⭐
⭐
⭐ ⭐
⭐ ⭐⭐
⭐
mvied dcwatson rpoisel ysrb
twbs/bootstrap
vhf/free-programming-books
angular/angular.js
:
ユーザ 約1千600万
⭐
⭐
⭐ ⭐
⭐ ⭐⭐
⭐
mvied dcwatson rpoisel ysrb
twbs/bootstrap
vhf/free-programming-books
angular/angular.js
:
ユーザ 約1千600万
リポジトリ約1千400万
⭐
⭐
⭐ ⭐
⭐ ⭐⭐
⭐
mvied dcwatson rpoisel ysrb
twbs/bootstrap
vhf/free-programming-books
angular/angular.js
:
ユーザ 約1千600万
リポジトリ約1千400万
⭐
⭐
⭐ ⭐
⭐ ⭐
😱
⭐
⭐
じゃあどうしたか
リポジトリ ⭐ スターを付けたユーザの一覧
twbs/bootstrap 88,811 mvied dcwatson ysrb …
vhf/free-programming-books 45,137 mvied dcwatson rpoisel …
angular/angular.js 44,106 dcwatson ysrb …
:
リポジトリ ⭐ スターを付けたユーザの一覧
twbs/bootstrap 88,811 mvied dcwatson ysrb …
vhf/free-programming-books 45,137 mvied dcwatson rpoisel …
angular/angular.js 44,106 dcwatson ysrb …
:
リポジトリ350件☆6,700以上ぐらい
リポジトリ ⭐ スターを付けたユーザの一覧
twbs/bootstrap 88,811 mvied dcwatson ysrb …
vhf/free-programming-books 45,137 mvied dcwatson rpoisel …
angular/angular.js 44,106 dcwatson ysrb …
:
リポジトリ350件☆6,700以上ぐらい
ユーザ 最⼤88,811
リポジトリ ⭐ スターを付けたユーザの一覧
twbs/bootstrap 88,811 mvied dcwatson ysrb …
vhf/free-programming-books 45,137 mvied dcwatson rpoisel …
・ スターを付けている: 1 付けていない: 0
・ リポジトリ間のユークリッド距離を計算
twbs/bootstrap
vhf/free-
programming-books
angular/angular.js …
twbs/bootstrap - 0.01904850 0.00492629
vhf/free-
programming-books * - 0.00492461
angular/angular.js * * -
:
ユークリッド距離
GitHub recommender
http://ghrec.hasegawa-tomoki.com
・ GitHubのユーザ名を⼊⼒すると

おすすめリポジトリを表⽰
・ APIで⭐を付けているリポジトリ取得 →
そのリポジトリに似ているリポジトリを推薦
・ GitHubのユーザ名
GitHub recommender
http://ghrec.hasegawa-tomoki.com
GitHub recommender
http://ghrec.hasegawa-tomoki.com
・ 取得: ⭐数上位6,800リポジトリ
GitHub recommender
http://ghrec.hasegawa-tomoki.com
・ 取得: ⭐数上位6,800リポジトリ
・ 計算: ⭐数上位350リポジトリ
GitHub recommender
http://ghrec.hasegawa-tomoki.com
・ 取得: ⭐数上位6,800リポジトリ
・ 計算: ⭐数上位350リポジトリ
・ 計算量ナメてて間に合わなかった
GitHub recommender
http://ghrec.hasegawa-tomoki.com
・ 取得: ⭐数上位6,800リポジトリ
・ これが O(n^2) というやつか…
・ 計算: ⭐数上位350リポジトリ
・ 計算量ナメてて間に合わなかった
わかったこと
・ APIでデータを取るのにすごく時間がかかる。
・ リポジトリ間の距離を計算するのにすごく時間がかかる。
・ このクラスの計算量になると最初からまじめにプログラムを
チューニングしないといつまでたっても終わらない。
・ memcachedの圧縮は素晴らしい。
・ 超簡単な割にそれなりにそれっぽい結果が出るので楽しい。
時間があれば…
どの程度「それらしい」か
アーキテクチャ
GitHub API
・ 時間あたりの利⽤可能数が制限されている。
・ レイテンシは1秒ぐらい。
・ 全てのレコードが取得できる訳では無い。
・ ページ数を指定して取得することになるけど「これ以上は取れないよ」とレ
スポンスが帰ってくる。
・ 「リポジトリをスター数の降順で」は結構⾯倒。
・ 検索条件にリポジトリ作成⽇時、スター数を⼊れて複数回コール。
⭐を取得するAPI
https://api.github.com/repos/twbs/bootstrap/stargazers
⭐を取得するAPI
https://api.github.com/repos/twbs/bootstrap/stargazers
⭐を取得するAPI
https://api.github.com/repos/twbs/bootstrap/stargazers
こういうのを作って
計算状況がわかる様にすると
精神衛⽣上良い。
ありがとうございました
@tomzoh
デジタルサーカス(株)
Drupal & スマホエンジニア
絶賛 募集中!

More Related Content

Similar to 「これを買っている人はこれも買っています」実装してみた

Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Kiwamu Okabe
 
Box2D 今昔物語
Box2D 今昔物語Box2D 今昔物語
Box2D 今昔物語rch850 -
 
HandTrackerで遊んでみた
HandTrackerで遊んでみたHandTrackerで遊んでみた
HandTrackerで遊んでみたharumidiv
 
Firefox 3.1 の果たす役割
Firefox 3.1 の果たす役割Firefox 3.1 の果たす役割
Firefox 3.1 の果たす役割dynamis
 
MUGT02 - vamp demo
MUGT02 - vamp demoMUGT02 - vamp demo
MUGT02 - vamp demoTetsuya Sodo
 
LOD: Linked Open Data
LOD: Linked Open DataLOD: Linked Open Data
LOD: Linked Open DataFumihiro Kato
 
座談会資料(討議メモ付き) 20170225
座談会資料(討議メモ付き) 20170225座談会資料(討議メモ付き) 20170225
座談会資料(討議メモ付き) 20170225知礼 八子
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近にYukei Wachi
 
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会Kazuhiro Hara
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21Yuki Higuchi
 
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか? ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか? Yoshiharu Ikutani
 
2012_07_06_gxeb_05
2012_07_06_gxeb_052012_07_06_gxeb_05
2012_07_06_gxeb_05ryo katsuma
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後Tomoki Hasegawa
 
三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイルHiromu Shioya
 

Similar to 「これを買っている人はこれも買っています」実装してみた (15)

Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
Box2D 今昔物語
Box2D 今昔物語Box2D 今昔物語
Box2D 今昔物語
 
HandTrackerで遊んでみた
HandTrackerで遊んでみたHandTrackerで遊んでみた
HandTrackerで遊んでみた
 
Firefox 3.1 の果たす役割
Firefox 3.1 の果たす役割Firefox 3.1 の果たす役割
Firefox 3.1 の果たす役割
 
MUGT02 - vamp demo
MUGT02 - vamp demoMUGT02 - vamp demo
MUGT02 - vamp demo
 
Magic Ring Buffer
Magic Ring BufferMagic Ring Buffer
Magic Ring Buffer
 
LOD: Linked Open Data
LOD: Linked Open DataLOD: Linked Open Data
LOD: Linked Open Data
 
座談会資料(討議メモ付き) 20170225
座談会資料(討議メモ付き) 20170225座談会資料(討議メモ付き) 20170225
座談会資料(討議メモ付き) 20170225
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
 
第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会第2回 -Play部屋- Play 2.0はじめて&もくもく会
第2回 -Play部屋- Play 2.0はじめて&もくもく会
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21
 
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか? ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
 
2012_07_06_gxeb_05
2012_07_06_gxeb_052012_07_06_gxeb_05
2012_07_06_gxeb_05
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後
 
三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル
 

More from Tomoki Hasegawa

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorTomoki Hasegawa
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSTomoki Hasegawa
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境Tomoki Hasegawa
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016Tomoki Hasegawa
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭りTomoki Hasegawa
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側Tomoki Hasegawa
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使うTomoki Hasegawa
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作るTomoki Hasegawa
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作するTomoki Hasegawa
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するTomoki Hasegawa
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったTomoki Hasegawa
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたTomoki Hasegawa
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルーTomoki Hasegawa
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版Tomoki Hasegawa
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するTomoki Hasegawa
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門Tomoki Hasegawa
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版Tomoki Hasegawa
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すTomoki Hasegawa
 

More from Tomoki Hasegawa (20)

Reading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulatorReading php terminal-gameboy-emulator
Reading php terminal-gameboy-emulator
 
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMSDrupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
 
iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016iOS Developers Conference Japan 2016
iOS Developers Conference Japan 2016
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
 
PHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知するPHPでスマホアプリにプッシュ通知する
PHPでスマホアプリにプッシュ通知する
 
Stargazer Meetup #1
Stargazer Meetup #1Stargazer Meetup #1
Stargazer Meetup #1
 
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作ったPUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
 
PHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきたPHPカンファレンス福岡に 行ってきた
PHPカンファレンス福岡に 行ってきた
 
CakePHP3ウォークスルー
CakePHP3ウォークスルーCakePHP3ウォークスルー
CakePHP3ウォークスルー
 
はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版はじめてのiOSアプリ開発 Swift対応版
はじめてのiOSアプリ開発 Swift対応版
 
AppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化するAppStore申請を一式まるっと自動化する
AppStore申請を一式まるっと自動化する
 
PHPerのためのSwift入門
PHPerのためのSwift入門PHPerのためのSwift入門
PHPerのためのSwift入門
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
 

「これを買っている人はこれも買っています」実装してみた