Slide 1

Slide 1 text

GroongaͱMapKit גࣜձࣾσΟʔɾΤψɾΤʔ ΤϯλʔςΠϝϯτࣄۀຊ෦ ԭ௡ وஐ

Slide 2

Slide 2 text

ࣗݾ঺հ • ԭ௡وஐ @okitsu • 2011೥10݄ೖࣾɻ • ΤϯλʔςΠϝϯτࣄۀຊ෦ॴଐ • ࠷ۙͷϝΠϯ͸iOS։ൃɻαʔόαΠυ΋ͪΐ͍ͪ ΐ͍ɻ https://www.facebook.com/okitsu.takatomo

Slide 3

Slide 3 text

• Mobage • Comm: Free calls, texts and fun! • Baseball Staduim LIVE • Peko: Play to be Paid! ؔΘͬͨϓϩμΫτ Now

Slide 4

Slide 4 text

ΤϯλʔςΠϝϯτࣄۀຊ෦ͱ͸ʁ • ඇήʔϜͷ৽نࣄۀ։ൃΛ୲౰͢Δ෦ॺ • େখ༷ʑͳαʔϏεɾϓϩμΫτΛ։ൃதɻ • ࠓ೥౓͸̓ຊ΄ͲϦϦʔεࡁΈɻ೥౓຤·Ͱ10ຊҎ্ ? ? ?

Slide 5

Slide 5 text

ࠓճղઆ͢ΔϓϩμΫτ

Slide 6

Slide 6 text

※೔ຊͰ͸ϦϦʔεͯ͠·ͤΜ

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Ґஔ৘ใʹؔ͢Δ ओͳϢʔεέʔε • ද͍ࣔͯ͠ΔMapͷൣғʹ͍ΔϢʔβΛݕࡧ → Map্ʹϐϯΛཱͯΔ • ࣗ෼͕͍ΔҐஔ͔Β͍ۙॱʹݕࡧ GroongaͰ࣮ݱ

Slide 9

Slide 9 text

Ґஔ৘ใͷߋ৽ Groonga MySQL JSONRPC Server JSONRPC load (over http) response latitude / longtitude save iOSͷLocationAPIͰ Ң౓ܦ౓औಘ

Slide 10

Slide 10 text

Ґஔ৘ใͷߋ৽ • MySQLʹҢ౓/ܦ౓ΛJSONܗࣜͰ֨ೲ {"lat":"35.440098", "lon":"139.627821"} • ͦͷޙɺGroongaʹloadίϚϯυͰอଘ (httpܦ༝) Ϛελʔσʔλ͸͋͘·Ͱ΋MySQLͰ؅ཧ Groongaͷσʔλ͸ݕࡧઐ༻ load --table Users [ { "_key": "123", "location": "35.440098x139.627821", } ] ※_key͸ϢʔβID

Slide 11

Slide 11 text

※ಛఆͷൣғʹ͍ΔϢʔβͷݕࡧ Groonga MySQL JSONRPC Server JSONRPC ϢʔβҰཡ ӈ্ʢ๺౦ʣͷlatitude / longtitude sql ࠨԼʢೆ੢ʣͷlatitude / longtitude + geo_in_circleͰϑΟϧλ Ґஔ৘ใͷݕࡧ ϢʔβҰཡ ϢʔβҰཡ select (over http)

Slide 12

Slide 12 text

iOSʹ͓͚Δൣғͷಛఆํ๏ CGPoint northEast = CGPointMake( self.mapView.bounds.origin.x+self.mapView.bounds.size.width, self.mapView.bounds.origin.y ); CLLocationCoordinate2D convertNorthEast = [self.mapView convertPoint:northEast toCoordinateFromView:self.mapView]; CGPoint southWest =CGPointMake( self.mapView.bounds.origin.x, self.mapView.bounds.origin.y+self.mapView.bounds.size.height ); CLLocationCoordinate2D convertSouthWest = [self.mapView convertPoint:southWest toCoordinateFromView:self.mapview];

Slide 13

Slide 13 text

αʔόαΠυͰ2఺ͷ࠲ඪΛԁʹม׵ αʔόαΠυͰɺ2఺ͷ࠲ඪ Λԁʹม׵͔ͯ͠Βɺ geo_in_circleؔ਺Λར༻ͯ͠ Groongaʹ໰͍߹Θͤ use Geo::Direction::Distance

Slide 14

Slide 14 text

ͳͥΘ͟Θ͟ԁࢦఆʹม׵͍ͯ͠Δͷ͔ʁ • Groongaʹ͸geo_in_rectangleͱ͍͏ؔ਺͕͋ΓɺͦΕΛϑΟϧλʔʹ࢖͑ ͹ɺΘ͟Θ͟2఺ͷ࠲ඪ͔Βԁʹม׵ͯ͠ࢦఆ͢Δඞཁ͸ͳ͍ɻ • ౰વɺ࠷ॳ͸ͦ͏΍ͬͯͨΜͰ͕͢ɾɾɾɾ Կճ΍ͬͯ΋ೆ൒ٿͷϢʔβ͕ ώοτ͠ͳ͍ɻ ΦʔετϥϦΞͱ͔ೆถͷਓؒ શһࢮΜͩΜ͡Όͳ͍͔ʂ

Slide 15

Slide 15 text

ιʔεݟͨ negative coordinate is not implemented!!!

Slide 16

Slide 16 text

RedmineͰλεΫൃݟ

Slide 17

Slide 17 text

geo_in_rectangleؔ਺Λ࢖͏৔߹ʹ͸ ͝஫ҙ͍ͩ͘͞ɻ ※೔ຊݶఆͱ͔ͩͱͨͿΜେৎ෉

Slide 18

Slide 18 text

ϑϦοΫͰMapΛ্ԼࠨӈʹҠಈ ͨ͠ΓɺεϫΠϓͰMapΛ֦େɾ ॖখͨ͠৔߹ɺ৽͍͠ൣғͰϢʔ βΛ࠶औಘ͠ͳ͍ͱ͍͚ͳ͍ MapΛϑϦοΫ/εϫΠϓͯ͠Ҡಈͨ͠৔߹ͷ ߋ৽ํ๏

Slide 19

Slide 19 text

- (void)mapView:(MKMapView*)mapView regionDidChangeAnimated:(BOOL)animated { [self performSelector:@selector(updateDisplayedRegionUsers) withObject:self afterDelay:2.0]; } - (void)mapView:(MKMapView*)mapView regionWillChangeAnimated:(BOOL)animated { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(updateDisplayedRegionUsers) object:nil]; } MapΛϑϦοΫ/εϫΠϓͯ͠Ҡಈͨ͠৔߹ͷ ߋ৽ํ๏ • Ґஔͷมߋ͕ߦΘΕ͔ͯΒɺ2ඵޙʹαʔό͔Β࠶औಘ͢Δɻ • 2ඵҎ಺ʹ࠶౓Ґஔͷมߋ͕ߦΘΕͨΒɺऔಘΛΩϟϯηϧ͢Δɻ

Slide 20

Slide 20 text

ͨ·ʹGoongaͷ selectͰίέΔ໰୊ • GroongaͱͷΠϯλϑΣʔε͸ɺAnyEvent::GroongaΛ࢖͍͕ͬͯͨɺ ͨ·ʹselectͰίέͰ্ख͘৘ใ͕औಘͰ͖ͳ͍έʔε͕͋ͬͨɻ • ௐ΂ͨͱ͜ΖɺAnyEventΛ࢖ͬͯඇಉظͰhttp઀ଓ͍ͯ͠Δ͋ͨΓ͕ ո͔ͬͨͨ͠ΊɺfurlͰಉظతʹ઀ଓ͢ΔΑ͏ʹஔ͖׵͑ͨɻ → ௒ઈ҆ఆʂ ※ݪҼಛఆʹ͸ࢸΒͣɺ͍͢·ͤΜɻɻ AnyEvent::Groonga Λར༻͢Δ৔߹͸͝஫ҙ͍ͩ͘͞ɻ

Slide 21

Slide 21 text

ඇಉظ→ಉظͩͱύϑΥʔϚϯε͕ ؾʹͳΔ → ϕϯνͱͬͨ API (※1) ϦΫΤετ਺ ฏۉϨεϙϯε λΠϜ(s) εϧʔϓοτ (ϦΫΤετ਺/s) updateLocation ʢҐஔ৘ใͷߋ৽ʣ 101892 0.358 s 550.3 searchUserByRegion ʢҐஔ৘ใͷݕࡧʣ 109224 0.380 s 449.7 ※1 JSONRPCαʔόͷAPI໊Ͱ͢ɻ͜ͷAPIͷதͰಉظతʹGroongaΛ͍ͨͨͯ·͢ɻ JSONRPCαʔό୆਺ : 2୆ ʢϋʔυεϖοΫ๨Εͨɻੴڮ͞Μʹ֬ೝ͠·͢ʣ JSONRPCαʔόworker਺ : 200 Groongaαʔό୆਺ : 2୆ ΫϥΠΞϯτଟॏ౓ : ඵؒ200ϦΫΤετ ༨༟Ͱڐ༰ൣғ

Slide 22

Slide 22 text

ӡ༻ͷ࿩ʢಛʹՄ༻ੑʣ Groonga-1 load Groonga-2 JSONRPC αʔό update location • Groonga͸ϚϧνϚελߏ੒ɻߋ৽͸͢΂ͯͷGroonga ʹରͯ͠ߦ͏ɻࢀর͸Ͳ͔͜Ұͭʹରͯ͠ߦ͏ɻ ৗʹ ಉ͡σʔλ ʹ͓ͯ͘͠ load

Slide 23

Slide 23 text

Groonga-1 Groonga-2 JSONRPC αʔό update location ✗ ͳΜ͔མͪͨ ো֐࣌Ͳ͏͢Δ͔ʁ load load

Slide 24

Slide 24 text

खॱͦͷ1 Groonga-1 load Groonga-2 JSONRPC αʔό update location ✗ • Groonga-2Λӡ༻͔Βൈ͍ͯɺGroonga-1ʹߋ৽ɾࢀর ΛدͤΔ ✗

Slide 25

Slide 25 text

खॱͦͷ2 Groonga-1 Groonga-2 JSONRPC αʔό update location • Groonga-2Λ෮چͤͯ͞࠶౤ೖɻͦͷࡍɺGroonga-2ͷ σʔλ͕ݹ͍Մೳੑ͕͋ΔͨΊɺࢀর͔Β͸͸ͣ͢ɻ ͨͩ͠ɺσʔλͷߋ৽͸ड͚෇͚Δɻ load load Select͸μϝʂ load͸OK!

Slide 26

Slide 26 text

खॱͦͷ3 Groonga-2 • Groonga-2Λӡ༻ͤͭͭ͞ɺMySQLͷϚελʔσʔλ ͱGroongaΛಉظͤ͞ΔεΫϦϓτΛྲྀͯ͠ɺσʔλ Λಉظͤ͞Δɻ εΫϦϓτͰ MySQLͷσʔλͱ ಉظͤ͞Δʂ MySQL

Slide 27

Slide 27 text

खॱͦͷ4 Groonga-1 Groonga-2 JSONRPC αʔό update location • σʔλͷಉظͷ׬ྃΛ֬ೝͯ͠ɺGroonga-2ʹର͢Δࢀ রΛ໭͢ɻdoneʂ selectΛ ෮׆ʂ load load

Slide 28

Slide 28 text

ͦͷଞ

Slide 29

Slide 29 text

MapʹҰ౓ʹͨ͘͞ΜPinΛͨͯΔͱ ॏ͘ͳΔ͠͏͍͟

Slide 30

Slide 30 text

MapʹҰ౓ʹͨ͘͞ΜPinΛͨͯΔͱ ॏ͘ͳΔ͠͏͍͟ • ҰճͷݕࡧͰɺͨ͘͞ΜͷσʔλΛදࣔͯ͠͠·͏ͱ͏͍͟ɻ (લͷϖʔδͷΑ͏ʹͳΔʣ • ͳͷͰ1ճͷݕࡧͷϨεϙϯε͸25݅ఔ౓ʹ͓͍͑ͯ͞Δɻ • ্هͷߜΓࠐΉϩδοΫ͸ɺMap্ʹ͏·͘෼ࢄͤ͞ΒΕΔʢਅΜதʹूத͠ͳ ͍ʣΑ͏ʹ޻෉͍ͯ͠Δɻ ※શମͷώοτ݅਺͔Βɺ25ਓఔ౓ʹ͓͑͞ΒΕΔΑ͏ʹɺ_key(user_id)Λม਺ Ͱׂͬͨ༨Γ͕5ͷϢʔβ͚ͩऔಘ͢Δͱ͔ɺͦ͏͍͏ΫΤϦΛ౤͍͛ͯΔɻ • MapΛ֦େ͍ͯ͘͜͠ͱͰɺର৅Ϣʔβ͕ঃʑʹߜΓ͜·Ε͍ͯ͘ͷͰɺ࠷ऴత ʹ͸͢΂ͯͷϢʔβ͕දࣔͰ͖ΔΑ͏ʹͳΔɻ • ͜ͷ͋ͨΓ͸΋ͬͱվળͰ͖Δ͔ͳɻ

Slide 31

Slide 31 text

iOSʹ͓͚ΔҐஔ৘ใͷऔಘํ๏ • ͜͜͸͍Ζ͍Ζਂ͍ΜͰ͕͢·ͨࠓ ౓ʂ

Slide 32

Slide 32 text

ޚྱ • ͙ʹΌΒ͞Μʂ • ITج൫ ੴڮ͞Μʂ • mitz͞Μʂ@t_mitz • Yosaku ToyamaʂʢPekoͷGroonga୲౰ʣ • Groonga։ൃʹؔΘͬͯΔօ༷ʂʂʂ

Slide 33

Slide 33 text

Ͳ͏΋ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ