ãšã³ãžãã¢ã®90ïŒ ãããªããæžããããã°ã©ã ïŒHomebrewïŒã䜿çšããŠããŸãããããªãã¯ããŒãäžã®ãã€ããªããªãŒãå転ã§ããªãã®ã§ãããããªãã
ãã€ããªããªãŒãå転ããå¿ èŠã¯ãããŸããã§ããããSkype / MicrosoftãSkyscannerãUberã§åããŠãããšãã«ãæ¥åžžæ¥åã§ããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãå®éã«äœ¿çšããäŸã«åºããããŸãããããã«ã¯ãããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã®è©³çްã«åºã¥ãã³ãŒãã£ã³ã°ãšæææ±ºå®ãå«ãŸããŠããŸãããããããç§ã¯ã»ãšãã©ã®å Žåãç¹å®ã®ã·ã¹ãã ãã©ã®ããã«äœæããããããããŠãªããããããã®ããã«äœæãããããçè§£ããããã«ãé¢é£ããç¥èã䜿çšããŸãããé¢é£ããæŠå¿µã®ç¥èã«ããããããã®æŠå¿µã䜿çšãããŠããã·ã¹ãã ã®ã¢ãŒããã¯ãã£ãšå®è£ ãçè§£ãããããªããŸãã
ãã®èšäºã§ã¯ãããªãŒãã°ã©ããªã©ã®ããŒã¿æ§é ãããŸããŸãªã¢ã«ãŽãªãºã ãå®éã®ãããžã§ã¯ãã§äœ¿çšãããŠããç¶æ³ã«ã€ããŠã®è©±ãå«ããŸãããããã§ãããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã®åºæ¬çãªç¥èã¯ãã€ã³ã¿ãã¥ãŒã ãã«å¿ èŠãªåœ¹ã«ç«ããªãçè«ã§ã¯ãªããæ¥æé·ããŠãã驿°çãªãã¯ãããžãŒäŒæ¥ã§åã誰ããæ¬åœã«å¿ èŠãšããå¯èœæ§ãéåžžã«é«ãããšãèªè ã«ç€ºããããšæããŸãã
ããã§ã¯ããå°æ°ã®ã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸãããããŒã¿æ§é ã«é¢ããéããããã§ã¯ãããã®ã»ãšãã©ãã¹ãŠã«è§ŠããŸããç§ãã¢ã«ãŽãªãºã ã匷調ããããŠãç·Žç¿ã«è§ŠããŠããããèµ€é»ã®æšãAVLã®æšã®ãããªãšããŸããã¯ãªããŒã¿æ§é ãã¿ãŒã²ããã«ããŠãããããªã€ã³ã¿ãã¥ãŒã®è³ªåã®ãã¡ã³ã§ã¯ãªãããšã¯ã誰ã«ãšã£ãŠãåœç¶ã®ããšã§ããç§ã¯ã€ã³ã¿ãã¥ãŒã§ãã®ãããªè³ªåãããããšããªãã質åãããŸããããã®èšäºã®æåŸã«ããã®ãããªã€ã³ã¿ãã¥ãŒã«ã€ããŠã®ç§ã®èããå ±æããŸããããããäžèšã«ãããããããåºç€ãšãªãããŒã¿æ§é ã®ç¥èã¯èšãç¥ããªã䟡å€ããããŸãããã®ç¥èã«ãããç¹å®ã®å®éçãªåé¡ã解決ããããã«å¿ èŠãªãã®ãæ£ç¢ºã«éžæã§ããŸãã
次ã«ãå®éã®ããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã®äœ¿çšäŸã«ç§»ããŸãããã
ããªãŒãšããªãŒãã©ããŒãµã«ïŒSkypeãUberãUIãã¬ãŒã ã¯ãŒã¯
Xbox Oneçšã®SkypeãéçºããŠãããšããå¿ èŠãªã©ã€ãã©ãªããªãçŽç²ãªXboxOSçšã«ã³ãŒããäœæããå¿ èŠããããŸããããã®ãã©ãããã©ãŒã çšã®æåã®æ¬æ Œçãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ãéçºããŸãããã¿ããã¹ã¯ãªãŒã³ãšé³å£°ã³ãã³ãã®äž¡æ¹ã䜿çšããŠæäœã§ããã¢ããªã±ãŒã·ã§ã³ããã²ãŒã·ã§ã³ã·ã¹ãã ãå¿ èŠã§ããã
åºæ¬çãªWinJSããŒã¹ã®ããã²ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ãäœæããŸããããããè¡ãã«ã¯ãDOMã®ãããªã°ã©ããç¶æããå¿ èŠããããŸãããããã¯ããŠãŒã¶ãŒã察話ã§ããèŠçŽ ã®èгå¯ãæŽçããããã«å¿ èŠã§ããããã®ãããªèŠçŽ ãèŠã€ããããã«ãDOMãã©ããŒãµã«ãå®è¡ããŸãããããã¯ãããªãŒãã©ããŒãµã«ãã€ãŸãDOMèŠçŽ ã®æ¢åã®æ§é ã«èŠçŽãããŸããããã¯ãBFSãŸãã¯DFSã®å žåçãªäŸã§ãïŒå¹ åªå æ€çŽ¢ãŸãã¯æ·±åºŠåªå æ€çŽ¢-å¹ åªå æ€çŽ¢ãŸãã¯æ·±åºŠåªå æ€çŽ¢ïŒã
Webéçºãè¡ã£ãŠããå Žåãããã¯ãããªãŒæ§é ãã€ãŸãDOMããã§ã«äœ¿çšããŠããããšãæå³ããŸãããã¹ãŠã®DOMããŒãã¯åããŒããæã€ããšãã§ããŸãããã©ãŠã¶ã¯ãDOMããªãŒããã©ããŒã¹ããåŸãç»é¢ã«ããŒãã衚瀺ããŸããç¹å®ã®èŠçŽ ãèŠã€ããå¿ èŠãããå Žåã¯ãçµã¿èŸŒã¿ã®DOMã¡ãœããã䜿çšããŠãã®åé¡ã解決ã§ããŸããããšãã°ãgetElementByIdã¡ãœãããå¥ã®æ¹æ³ã¯ãããŒãããã©ããŒã¹ããŠå¿ èŠãªãã®ãèŠã€ããããã®ç¬èªã®BFSãŸãã¯DFSãœãªã¥ãŒã·ã§ã³ãéçºããããšã§ããããšãã°ãããã§ã¯åæ§ã®ããšãè¡ãããŸãã
UIèŠçŽ ãã¬ã³ããªã³ã°ããå€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã®æ·±ãã§ããªãŒæ§é ã䜿çšããŸãããã®ãããReactã¯ä»®æ³DOMããµããŒãããã¹ããŒããªèª¿æŽã¢ã«ãŽãªãºã ã䜿çšããŸãïŒæ¯èŒïŒãããã«ãããã€ã³ã¿ãŒãã§ã€ã¹ã®å€æŽãããéšåã®ã¿ãåã¬ã³ããªã³ã°ããããããé«ãããã©ãŒãã³ã¹ãå®çŸã§ããŸãããã®ããã»ã¹ã®å¯èŠåã¯ãããã§èŠã€ããããšãã§ããŸãã ã¢ãã€ã«ã¢ãŒããã¯ãã£Uberã§ã¯ãRIB
ãæšã䜿çšãããŸããããã«ããããã®ã¢ãŒããã¯ãã£ã¯ãèŠçŽ ã®éå±€æ§é ã衚瀺ããä»ã®ã»ãšãã©ã®UIãã¬ãŒã ã¯ãŒã¯ãšåæ§ã«ãªããŸãã RIBã¢ãŒããã¯ãã£ã¯ãç¶æ 管çã®ç®çã§RIBããªãŒãç¶æããŸãã RIBãã¢ã¿ããããããRIBãããã¿ããããããããšãã¬ã³ããªã³ã°ãå¶åŸ¡ãããŸãã RIBãæäœããŠãããšãã«ãRIBãæ¢åã®éå±€ã«é©åãããã©ãããçè§£ããããã«ã¹ã±ãããè¡ããåé¡ã®RIBã«å¯èŠèŠçŽ ãå«ããå¿ èŠããããã©ããã«ã€ããŠè©±ãåãããšããããŸãããã€ãŸãããã®æ§é ãã€ã³ã¿ãŒãã§ã€ã¹ã®èŠèŠç衚çŸã®åœ¢æã«é¢äžããã®ãããããšãç¶æ 管çã«ã®ã¿äœ¿çšãããã®ãã«ã€ããŠè©±ãåããŸããã

RIBã䜿çšããå Žåã®ç¶æ é·ç§»ãããªãã¯ãããã§ã®RIBã®è©³çްãèŠã€ããããšãã§ããŸãã
ããªãã¯ãéå±€çãªèŠçŽ ãã¬ã³ããªã³ã°ããããªãŒæ§é ã¯éåžžãããããæšªæããŠèšªåããèŠçŽ ãã¬ã³ããªã³ã°ããã®ããã«äœ¿çšãããŠããããšã«æ³šæããå¿ èŠãããå Žåãç§ã¯ãã®ã¢ãããŒããæ¡çšããå€ãã®å éšããŒã«ã«åºããããŸããããã®ãããªããŒã«ã®äŸã¯ãUberã®ã¢ãã€ã«ãã©ãããã©ãŒã ããŒã ã«ãã£ãŠäœæãããRIBã¬ã³ãã©ãŒã§ããããã§ããã®ãããã¯ã«é¢ãã話ã
å éã°ã©ããšæçãã¹ãã¡ã€ã³ããŒïŒSkyscanner
Skyscannerã¯ãèªç©ºåžã®ãè²·ãåŸæ å ±ãèŠã€ããããšãç®çãšãããããžã§ã¯ãã§ãããã®ãããªææ¡ã®æ€çŽ¢ã¯ãäžçã«ååšãããã¹ãŠã®ã«ãŒãã衚瀺ããã³åæããããããçµã¿åãããããšã«ãã£ãŠå®è¡ãããŸããèªç©ºäŒç€Ÿã¯æ¬¡ã®ãã©ã€ãã®åŸ æ©æéãç¬èªã«èšç®ããããããã®ã¿ã¹ã¯ã®æ¬è³ªã¯ãæ€çŽ¢ããããã«ããèªåããŒã¿åéã«é¢é£ããŠããããã®ãã¹ãŠã®ããŒã¿ããã£ãã·ã¥ããããšã«ã¯é¢é£ããŠããŸãããããããããã€ãã®éœåžã蚪åããæ è¡ãèšç»ããå¯èœæ§ã¯ãæçã®éãèŠã€ãããšããä»äºã«åž°çããŸãã
è€æ°éœåžã®æ è¡èšç»ã¯ãSkyscannerãå®è£ ããã®ã«é·ãæéãããã£ãå¯èœæ§ã®1ã€ã§ãããåæã«ãäž»ã«éçºäžã®ã·ã¹ãã èªäœã«é¢é£ããåé¡ããã®çš®ã®æè¯ã®ååŒã¯ãDijkstraãA *ãªã©ã®æçãã¹ã¢ã«ãŽãªãºã ã䜿çšããŠèŠã€ããããŸããé£è¡ã«ãŒãã¯ãæåã°ã©ãã®åœ¢åŒã§è¡šç€ºãããŸãããã®åãšããžã«ã¯ããã±ããäŸ¡æ Œã®åœ¢åŒã§éã¿ãå²ãåœãŠãããŸããæé©ãªã«ãŒããæ€çŽ¢ããå Žåã2ã€ã®éœåžéã®æãå®ãã«ãŒããèŠã€ããã«ã¯ã倿ŽãããA *ã¢ã«ãŽãªãºã ã®å®è£ ã䜿çšããŸããèªç©ºåžã®éžæãšæçã«ãŒãã®æ€çŽ¢ã®ãããã¯ã«èå³ãããå Žåã¯ã BFSã䜿çšããŠãã®ãããªåé¡ã解決ããããã®è¯ãèšäºããããŸãã
ãã ããSkyscannerã®å Žåãåé¡ã解決ããããã«ã©ã®ã¢ã«ãŽãªãºã ã䜿çšããããã¯ç¹ã«éèŠã§ã¯ãããŸããã§ããããã£ãã·ã³ã°ãæ€çŽ¢ããããã®äœ¿çšãããŸããŸãªãµã€ãã§ã®äœæ¥ã®æŽç-ãããã¯ãã¹ãŠãã¢ã«ãŽãªãºã ãéžæãããããã¯ããã«å°é£ã§ããããããåæã«ãæççµè·¯ãèŠã€ãããšããåé¡ã®ããŸããŸãªããªãšãŒã·ã§ã³ããå€ãã®ç°ãªãæ è¡èšç»äŒç€Ÿã§çºçãããã®ãããªæ è¡ã®ã³ã¹ããæé©åããŸããåœç¶ã®ããšãªããããã®ãããã¯ã¯Skyscannerã§ãèå°è£ã®è©±ã®äž»é¡ãšãªã£ãŠããŸãã
äžŠã¹æ¿ãïŒSkypeïŒãŸãã¯ãã®ãããªãã®ïŒ
ãœãŒãã¢ã«ãŽãªãºã ãèªåã§å®è£ ãããããã®æ§é ã®è€éããæ·±ãç ç©¶ãããããçç±ã¯ãã£ãã«ãããŸããã§ãããããããããã«ãããããããããã«ãœãŒããæ¿å ¥ãœãŒããããŒãžãœãŒããéžæãœãŒããããæãè€éãªã¢ã«ãŽãªãºã ã§ããã¯ã€ãã¯ãœãŒããŸã§ããã®ãããªã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœããããçè§£ããã®ã¯è峿·±ãããšã§ãããç¹ã«ã©ã€ãã©ãªã®äžéšã§ãããœãŒã颿°ãäœæããå¿ èŠããªãå Žåã¯ããã®ãããªã¢ã«ãŽãªãºã ãå®è£ ããå¿ èŠã¯ãã£ãã«ãªãããšãããããŸããã
ããããSkypeã§ã¯ããœãŒãã¢ã«ãŽãªãºã ã®ç¥èãå®éã«äœ¿çšããå¿ èŠããããŸãããããã°ã©ããŒã®1人ããé£çµ¡å ã衚瀺ããããã«æ¿å ¥ã«ããäžŠã¹æ¿ããå®è£ ããããšã«ããŸããã 2013幎ãSkypeããªã³ã©ã€ã³ã ã£ããšããé£çµ¡å ã¯ãããã§ããŠã³ããŒããããŸããããããããã¹ãŠããŠã³ããŒãããã®ã«å°ãæéãããããŸããããã®çµæããã®ããã°ã©ããŒã¯ãæ¿å ¥ãœãŒãã䜿çšããŠååã§ãœãŒããããé£çµ¡å ã®ãªã¹ããäœæããæ¹ããããšèããŸããããã§ã«å®è£ ãããŠãããã®ã䜿çšããªãçç±ãèããªããããã®ã¢ã«ãŽãªãºã ã«ã€ããŠå€ãã®ããšãè°è«ããŸããããã®çµæãã¢ã«ãŽãªãºã ã®å®è£ ãé©åã«ãã¹ããããã®ããã©ãŒãã³ã¹ã確èªããã®ã«æãæéãããããŸãããå人çã«ã¯ããã®ã¢ã«ãŽãªãºã ã®ç¬èªã®å®è£ ãäœæããããšã«ããŸãæå³ããããŸããã§ããããããããã®åŸããããžã§ã¯ãã¯ãã®ãããªæ®µéã«ãããŸãããããªããšãããæéããã£ããšããã
ãã¡ãããå¹ççãªäžŠã¹æ¿ãããããžã§ã¯ãã§éåžžã«éèŠãªåœ¹å²ãæããå®éã®ç¶æ³ããããŸãããŸããéçºè ãããŒã¿ã®æ©èœã«åºã¥ããŠç¬èªã«æé©ãªã¢ã«ãŽãªãºã ãéžæã§ããå Žåãããã«ãããœãªã¥ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãèããåäžããå¯èœæ§ããããŸããæ¿å ¥ãœãŒãã¯ããªã¢ã«ã¿ã€ã ã§ã©ããã«éä¿¡ããã倧ããªããŒã¿ã»ãããæäœãããã®ããŒã¿ãããã«èŠèŠåããå Žåã«éåžžã«åœ¹ç«ã¡ãŸããããŒãžãœãŒãã¯ãç°ãªãããŒãã«æ ŒçŽãããŠãã倧éã®ããŒã¿ãåŠçããå Žåã®åå²ããã³åŸæã¢ãããŒãã«é©ããŠããŸããç§ã¯ãã®ãããªã·ã¹ãã ã䜿ã£ãããšããªãã®ã§ãä»ã®ãšããããœãŒãã¢ã«ãŽãªãºã ã¯æ¥åžžæ¥åã§ã®äœ¿çšãå¶éãããŠãããã®ãšããŠèãç¶ããŠããŸããããã¯æ¬åœã§ããããŸããŸãªäžŠã¹æ¿ãã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœããããçè§£ããããšã®éèŠæ§ã«ã€ããŠã§ã¯ãããŸããã
ããã·ã¥ããŒãã«ãšããã·ã¥ïŒã©ãã§ã
ç§ã宿çã«äœ¿çšããããŒã¿æ§é ã¯ããã·ã¥ããŒãã«ã§ããããã«ã¯ããã·ã¥é¢æ°ãå«ãŸããŸããããã¯ãç¹å®ã®ãšã³ãã£ãã£ã®æ°ã®ã«ãŠã³ããéè€ã®æ€åºããã£ãã·ã¥ããã忣ã·ã¹ãã ã§äœ¿çšãããã·ã£ãŒãã£ã³ã°ãªã©ã®ã·ããªãªãŸã§ãããŸããŸãªã¿ã¹ã¯ã解決ããããã«äœ¿çšã§ããéåžžã«äŸ¿å©ãªããŒã«ã§ããããã·ã¥ããŒãã«ã¯ãé åã®åŸãããã°ã©ãã³ã°ã§æãäžè¬çãªããŒã¿æ§é ã§ããç§ã¯ãããç¡æ°ã®ç¶æ³ã§äœ¿çšããŸãããã»ãŒãã¹ãŠã®ããã°ã©ãã³ã°èšèªã«ååšããå¿ èŠã«å¿ããŠãèªåã§ç°¡åã«å®è£ ã§ããŸãã
ã¹ã¿ãã¯ãšãã¥ãŒïŒæã
ã¹ã¿ãã¯ã¯ãã¹ã¿ãã¯ãã¬ãŒã¹ããµããŒãããèšèªã§èšè¿°ãããã³ãŒãããããã°ããããšã®ãã人ãªã誰ã§ãç¥ã£ãŠããããŒã¿æ§é ã§ããã¹ã¿ãã¯ãããŒã¿æ§é ãšããŠèª¬æãããšãäœæ¥ã®éçšã§ãããã解決ããããã«å¿ èŠãªããã€ãã®åé¡ãçºçããŸããããã ããã³ãŒãã®ããã©ãŒãã³ã¹ããããã°ããã³ãããã¡ã€ãªã³ã°ãããšãã«ãã¹ã¿ãã¯ãæ£ããç¥ãããšãã§ããããšã«æ³šæããŠãã ãããã¹ã¿ãã¯ã¯ãDFSãå®è¡ãããšãã«äœ¿çšããããŒã¿æ§é ã®èªç¶ãªéžæã§ããããŸãã
ãã¥ãŒã䜿çšããå¿ èŠã¯ãã£ãã«ãããŸããã§ããããããŸããŸãªãããžã§ã¯ãã®ã³ãŒãããŒã¹ã§ãã¥ãŒã«é »ç¹ã«ééããŸãããäœãããã¥ãŒã«å ¥ããããããããäœããååŸããããšããŸããããéåžžããã¥ãŒã¯å¹ åªå ã®ããªãŒãã©ããŒãµã«ãå®è£ ããããã«äœ¿çšããããã®ã¿ã¹ã¯ã«æé©ã§ãããã¥ãŒã¯ãä»ã®å€ãã®ç¶æ³ã§ã䜿çšã§ããŸããããæ¥ãæçã®ãžã§ããæåã«å®è¡ããããšãã«ãheapqPythonã¢ãžã¥ãŒã«ã«ãã£ãŠå®è£ ãããåªå 床ãã¥ãŒã®é©åãªäœ¿çšäŸãèŠã€ãããžã§ãã¹ã±ãžã¥ãŒãªã³ã°ã³ãŒãã«åºããããŸããã
æå·åã¢ã«ãŽãªãºã ïŒUber
ãŠãŒã¶ãŒãã¢ãã€ã«ã¢ããªãŸãã¯Webã¢ããªã«å ¥åããéèŠãªããŒã¿ã¯ããããã¯ãŒã¯çµç±ã§éä¿¡ããåã«æå·åããå¿ èŠããããŸãããããŠãå¿ èŠãªå Žæã§ã®ã¿åŸ©å·åããŸãããã®ãããªäœæ¥ã¹ããŒã ãæŽçããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãéšåãšãµãŒããŒéšåã«æå·åã¢ã«ãŽãªãºã ã®å®è£ ãååšããå¿ èŠããããŸãã
æå·åã¢ã«ãŽãªãºã ãçè§£ããããšã¯éåžžã«è峿·±ãããšã§ããåæã«ãç¹å®ã®åé¡ã解決ããããã®ç¬èªã®ã¢ã«ãŽãªãºã ãæäŸããã¹ãã§ã¯ãããŸãããããã¯ãããã°ã©ããŒãèããããšãã§ããææªã®ã¢ã€ãã¢ã®1ã€ã§ãã代ããã«ãæ¢åã®ååã«ææžåãããæšæºãæ¡çšããããããã®ãã¬ãŒã ã¯ãŒã¯ã®ãã€ãã£ãããªããã£ãã䜿çšããŸããéåžžãAESã¯ãæå·åãœãªã¥ãŒã·ã§ã³ãå®è£ ãããšãã«éžæãããæšæºãšããŠæ©èœããŸãã..ãç±³åœã§åé¡ãããæ å ±ãæå·åããããã«äœ¿çšããã®ã«ååãªå®å šæ§ããããŸãããããã³ã«ã«å¯Ÿããæ¢ç¥ã®åäœäžã®æ»æã¯ãããŸããã AES-192ããã³AES-256ã¯éåžžãã»ãšãã©ã®å®çšçãªã¿ã¹ã¯ã«å¯ŸããŠéåžžã«ä¿¡é Œæ§ããããŸãã
Uberã«æ¥ããšããã¢ãã€ã«æå·åã·ã¹ãã ãšWebã¢ããªã±ãŒã·ã§ã³ã®æå·åã·ã¹ãã ã¯ãã§ã«å®è£ ãããŠããŠãäžèšã®ã¡ã«ããºã ã«åºã¥ããŠããã®ã§ãAESïŒAdvanced Encryption StandardïŒãHMACïŒHashed Message Authentication CodesïŒã®è©³çްã調ã¹ãèšãèš³ããããŸããã ãRSAã¢ã«ãŽãªãºã ãªã©ã«ã€ããŠãæå·åã§äœ¿çšãããäžé£ã®ã¢ã¯ã·ã§ã³ã®æå·å匷床ãã©ã®ããã«èšŒæãããããçè§£ããããšãè峿·±ããã®ã§ãããããšãã°ãæ·»ä»ããŒã¿ã䜿çšããèªèšŒæžã¿æå·åã«ã€ããŠèª¬æãããšãencrypt-and-MACãMAC-then-encryptãencrypt-then-MACã¢ãŒããåæãããšããã®ãã¡ã®1ã€ã ãã®æå·å匷床ã蚌æã§ããŸãããããã¯ãã®æå³ã§ã¯ãããŸãããæ®ãã¯æå·çã«å®å šã§ã¯ãããŸããã
å®å šã«æ°ããæå·åãã¬ãŒã ã¯ãŒã¯ãå®è£ ããªãéããæå·åããªããã£ããèªåã§å®è£ ããå¿ èŠã¯ã»ãšãã©ãããŸããããã ãã䜿çšããããªããã£ããšããããçµã¿åãããæ¹æ³ã決å®ããå¿ èŠãããå ŽåããããŸããç¹å®ã®ã·ã¹ãã ãããŒã¿æå·åã«ç¹å®ã®ã¢ãããŒãã䜿çšããçç±ãçè§£ããããã«ãæå·åã¢ã«ãŽãªãºã ã®åéã®ç¥èãå¿ èŠã«ãªãå ŽåããããŸãã
決å®ããªãŒïŒUber
ãããžã§ã¯ãã®1ã€ã«åãçµãã§ããéãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«è€éãªããžãã¹ããžãã¯ãå®è£ ããå¿ èŠããããŸãããã€ãŸããåããŒã¹ã®ã«ãŒã«ã«åºã¥ããŠãããã€ãã®ç»é¢ã®1ã€ã衚瀺ããå¿ èŠããããŸããããã¹ãã·ãŒã±ã³ã¹ã®çµæãšãŠãŒã¶ãŒã®å¥œã¿ãèæ ®ã«å ¥ããå¿ èŠãããããããããã®ã«ãŒã«ã¯éåžžã«è€éã§ããã
ãã®åé¡ã®è§£æ±ºãå§ããããã°ã©ããŒã¯ãæåã«ããããã¹ãŠã®ã«ãŒã«ãif-elseã¹ããŒãã¡ã³ãã®åœ¢åŒã§è¡šçŸããããšããŸããããã®çµæãã³ãŒããéåžžã«æ··ä¹±ããŸããããã®çµæã決å®ããªãŒã䜿çšããããšã決å®ãããŸããã圌ã®å©ããåããŠãå¿ èŠãªãã¹ãŠã®ãã§ãã¯ãç°¡åã«å®è¡ã§ããŸãããå®è£ ã¯æ¯èŒçç°¡åã§ããããŸããå¿ èŠã«å¿ããŠåé¡ãªã亀æã§ããŸããæ¡ä»¶ãã§ãã¯ããã®ãšããžã§å®è¡ãããããã«ã決å®ããªãŒã®ç¬èªã®å®è£ ãäœæããå¿ èŠããããŸããããã®ããªãŒã«å¿ èŠãªã®ã¯ããã ãã§ããå¥ã®ã¢ãããŒãããšãããšã§ããªãŒã®å®è£ ã«è²»ããæéãç¯çŽã§ãããããããŸããããããŒã ã¯ç¹å®ã®ããªãŒãç¶æããæ¹ãç°¡åã§ãããšå€æããäœæ¥ã«åãæãããŸããããã®ããªãŒã¯æ¬¡ã®ããã«ãªããŸãããšããžã¯æ¡ä»¶ããã§ãã¯ããçµæã衚ãïŒãããã¯ãã€ããªçµæããŸãã¯å€ã®ç¯å²ã§è¡šãããçµæã§ãïŒãããªãŒã®ãªãŒãããŒãã¯ããã²ãŒãããå¿ èŠã®ããç»é¢ã瀺ããŸãã

, , .
SubmitQueueãšåŒã°ããUberã®ã¢ãã€ã«ã¢ããªã®ãã«ãã·ã¹ãã ãæ±ºå®ããªãŒã䜿çšããŸããããåçã«çæãããŸãããéçºè ãšã¯ã¹ããªãšã³ã¹ããŒã ã¯ãæ°çŸã®ãœãŒã¹ãã©ã³ããšã¿ãŒã²ãããã©ã³ããæ¯æ¥ããŒãžãããšããé£ããåé¡ã«åãçµãå¿ èŠããããŸãããåæã«ãåã¢ã»ã³ããªã®å®äºã«ã¯çŽ30åããããŸãããããã«ã¯ãã³ã³ãã€ã«ããŠããããã¹ããšçµ±åãã¹ãã®å®è¡ãããã³ã€ã³ã¿ãŒãã§ã€ã¹ãã¹ããå«ãŸããŸããã¢ã»ã³ããªã®äžŠååã¯ååãªè§£æ±ºçã§ã¯ãããŸããã§ãããç°ãªãã¢ã»ã³ããªã§å€æŽãéè€ããããšãå€ããããŒãžã®ç«¶åãçºçããããã§ããå®éã«ã¯ãããã¯ãããã°ã©ããŒã2ã3æéåŸ ã£ãŠããªããŒã¹ããããŒãžããã»ã¹ãåéããªããã°ãªããªãå Žåãããããšãæå³ããä»åã¯ç«¶åã«çŽé¢ããªãããšãæåŸ ããŠããŸããã
Developer ExperienceããŒã ã¯é©æ°çãªã¢ãããŒããæ¡çšããŠãããŒãžã®ç«¶åãäºæž¬ããããã«å¿ããŠã¢ã»ã³ããªããã¥ãŒã«å ¥ããŸãããããã¯ãç¹å¥ãªãã€ããªæ±ºå®ããªãŒïŒæšæž¬ããªãŒïŒã䜿çšããŠè¡ãããŸããã

SubmitQueueã¯ãäºæž¬ããã確çã§æ³šéãä»ãããããšããžãæã€ãã€ããªæ±ºå®ããªãŒã䜿çšããŸãããã®ã¢ãããŒãã«ããã䞊åã§å®è¡ã§ããã¢ã»ã³ããªã®ã»ãããæ±ºå®ã§ããŸããããã¯ãã¿ã¹ã¯ã®åä¿¡ãšå®è¡ã®éã®æéãççž®ããã·ã¹ãã ã®ã¹ã«ãŒããããåäžãããããã«è¡ãããŸãããã®å Žåãå®å šã«ãã¹ãããå®è¡å¯èœãªã³ãŒãã®ã¿ããã¹ã¿ãŒãã©ã³ãã«å ¥ãå¿ èŠããããŸãã
ãã®ã·ã¹ãã ãäœæããéçºè ãšã¯ã¹ããªãšã³ã¹ããŒã ã¯ãããã«é¢ããåªããè³æãäœæããŸãããããããããã«-åããããã¯ã«é¢ããå¥ã®èšäºããã®ã·ã¹ãã ã®å®è£ ã®çµæã以åãããã¯ããã«é«éãªãããžã§ã¯ãã¢ã»ã³ããªã·ã¹ãã ãäœæãããŸãããããã«ããããããžã§ã¯ãã®ãã«ãæéãæé©åããäœçŸäººãã®ã¢ãã€ã«ããã°ã©ããŒã®çæŽ»ãæ¥œã«ããããšãã§ããŸããã
å è§åœ¢ã®ã°ãªãããéå±€ã€ã³ããã¯ã¹ïŒUber
ãããç§ãããã§è©±ãããæåŸã®ãããžã§ã¯ãã§ããããã¯å®å šã«1ã€ã®ç¹å®ã®ããŒã¿æ§é ã«åºã¥ããŠããŸããããããããããšã§ããã®ããŒã¿æ§é ã«ã€ããŠåŠã³ãŸãããéå±€ã€ã³ããã¯ã¹ãæã€å è§åœ¢ã®ã°ãªããã«ã€ããŠè©±ããŠããŸãã
Uberã§æãå°é£ã§è峿·±ãåé¡ã®1ã€ã¯ãæ è²»ã®æé©åãšããŒãããŒéã®æ³šæã®åé ã§ãããæ è¡ã®æéã¯åçã«å€åããå¯èœæ§ãããããã©ã€ããŒã¯åžžã«ç§»åããŠããŸãã Uberã®ãšã³ãžãã¢ãH3ã°ãªããã·ã¹ãã ãäœæããŸãããããŸããŸãªèŠæš¡ã®éœåžå šäœã®ããŒã¿ãèŠèŠåããã³åæããããã«èšèšãããŠããŸããäžèšã®åé¡ã解決ããããã«äœ¿çšãããããŒã¿æ§é ã¯ãéå±€ã€ã³ããã¯ã¹ãæã€å è§åœ¢ã®ã°ãªããã§ããããŒã¿ãèŠèŠåããããã«ãããã€ãã®å°çšã®å éšããŒã«ã䜿çšãããŸãã

ããããå è§åœ¢ã®ã»ã«ã«åå²ãã
ãã®ããŒã¿æ§é ã«ã¯ãç¬èªã®ã€ã³ããã¯ã¹ã·ã¹ãã ããã©ããŒãµã«ãã°ãªããã®åã ã®é åã®ç¬èªã®å®çŸ©ãç¬èªã®æ©èœããããŸããããããã¹ãŠã®è©³çްãªèª¬æã¯ã察å¿ããAPIã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã H3ã®è©³çްã«ã€ããŠã¯ãã¡ããã芧ãã ãããããããœãŒã¹ã³ãŒãã§ããããã§ã¯ããã®ã·ã¹ãã ãäœæãããæ¹æ³ãšçç±ã«ã€ããŠã®ã¹ããŒãªãŒãèŠã€ããããšãã§ããŸãã
ãã®ã·ã¹ãã ã®çµéšãããéåžžã«å ·äœçãªåé¡ã解決ãããšãã«ãç¬èªã®ç¹æ®ãªããŒã¿æ§é ãäœæããããšãçã«ããªã£ãŠãããšããäºå®ãæããããšãã§ããŸãããç°ãªãã¬ãã«ã®åçµæããŒã¿ãã©ã°ã¡ã³ããšã®æ¯èŒã§ããããã©ã°ã¡ã³ããžã®åå²ãèæ ®ããªãå Žåãå è§åœ¢ã°ãªãããé©çšã§ãããœãªã¥ãŒã·ã§ã³ã®åé¡ã¯ã»ãšãã©ãããŸããããã ããä»ã®å Žåãšåæ§ã«ãä»ã®ããŒã¿æ§é ã«ç²ŸéããŠããå Žåã¯ããããã¯ããã«çè§£ãããããªããŸãããŸããå è§åœ¢ã®ã°ãªãããæ±ã£ãããšããã人ã«ãšã£ãŠã¯ããã®ãããªã°ãªããã䜿çšããŠè§£æ±ºãããåé¡ãšåæ§ã®åé¡ã解決ããããã«èšèšãããæ°ããããŒã¿æ§é ãäœæããæ¹ãç°¡åã§ãã
ã€ã³ã¿ãã¥ãŒã«ãããããŒã¿æ§é ãšã¢ã«ãŽãªãºã
äžèšã§ã¯ãããŸããŸãªäŒæ¥ã§é·ãéåããŠãããšãã«ééããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸãããèšäºã®åé ã§è¿°ã¹ãMaxHowellã«ãããã€ãŒãã«æ»ãããšãææ¡ããŸããããã§ããã¯ã¹ã¯ãGoogleã®ã€ã³ã¿ãã¥ãŒã§ãããŒãäžã®ãã€ããªããªãŒãå転ããããã«æ±ãããããšäžæºãæŒãããŸããã圌ã¯ããŸããã§ããã圌ã¯ãã¢ãèŠããããããã®ç¶æ³ã§ã¯ãç§ã¯ããã¯ã¹ã®åŽã«ããŸãã
人æ°ã®ããã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœãããããŸãã¯ãšããŸããã¯ãªããŒã¿æ§é ãã©ã®ããã«æ©èœããããç¥ãããšã¯ããã€ãã¯äŒæ¥ã§åãããã«å¿ èŠãªçš®é¡ã®ç¥èã§ã¯ãªããšæããŸããã¢ã«ãŽãªãºã ãäœã§ããããç¥ãå¿ èŠããããŸããããšãã°ãã貪欲ãã®ååã«åãçµããªã©ãåçŽãªã¢ã«ãŽãªãºã ãç¬èªã«èãåºãããšãã§ããå¿ èŠããããŸãããŸããããã·ã¥ããŒãã«ããã¥ãŒãã¹ã¿ãã¯ãªã©ã®æãäžè¬çãªããŒã¿æ§é ã«ã€ããŠã®ç¥èãå¿ èŠã§ããããããDijkstraã®ã¢ã«ãŽãªãºã ãA *ã®ãããªéåžžã«å ·äœçãªãã®ããŸãã¯ããã«è€éãªãã®ã¯ãæèšããå¿ èŠã®ãããã®ã§ã¯ãããŸããããããã®ã¢ã«ãŽãªãºã ãæ¬åœã«å¿ èŠãªå Žåã¯ããããã®åèè³æãç°¡åã«èŠã€ããããšãã§ããŸããããšãã°ããœãŒãã¢ã«ãŽãªãºã ãšã¯é¢ä¿ã®ãªãã¢ã«ãŽãªãºã ã«ã€ããŠè©±ãå Žåãç§ã¯éåžžãããããäžè¬çãªçšèªã§çè§£ãããã®æ¬è³ªãçè§£ããããšããŸãããåãããšããèµ€é»ã®æšãAVLã®æšã®ãããªãšããŸããã¯ãªããŒã¿æ§é ã«ãåœãŠã¯ãŸããŸããç§ã¯ãããã䜿çšããå¿ èŠã¯ãããŸããã§ããããããŠãå¿ èŠã«å¿ããŠãé©åãªåºçç©ã«é Œãããšã§ããã€ã§ããããã«ã€ããŠã®ç¥èãæŽæ°ããããšãã§ããŸãããç§ãèšã£ãããã«ãã€ã³ã¿ãã¥ãŒãããšããç§ã¯ãã®ãããªè³ªåãããããšã¯æ±ºããŠãªãã圌ãã«å°ããã€ããããããŸããã
ç§ã¯ããã°ã©ãã³ã°ã«é¢é£ããå®éçãªåé¡ã«è³æã§ãã解決ã«ã¯ãã¢ã«ãŽãªãºã ã®ããã«ãŒããã©ãŒã¹ããã貪欲ããªããªãšãŒã·ã§ã³ã®æ¹æ³ãããããé«åºŠãªã¢ã«ãŽãªãºã ã®ã¢ã€ãã¢ãŸã§ãããŸããŸãªã¢ãããŒããé©çšã§ããŸããããšãã°ããã®ãããªããã¹ãã®é 眮ã¿ã¹ã¯ãå®è¡ããŠããŸã£ããåé¡ãªããšæããŸããããšãã°ãWindows Phoneã§ããã¹ããã¬ã³ããªã³ã°ããããã®ã³ã³ããŒãã³ããäœæãããšãã«ããã®åé¡ã解決ããå¿ èŠããããŸããããã®åé¡ã¯ãããªãããŒãªããŒã¿æ§é ã«é Œãããšãªããé åãšããã€ãã®if-elseã¹ããŒãã¡ã³ãã䜿çšããã ãã§è§£æ±ºã§ããŸãã
å®éãå€ãã®ããŒã ãäŒæ¥ã¯ãã¢ã«ãŽãªãºã ã®åââé¡ã®éèŠæ§ãèªåŒµããŠããŸããã¢ã«ãŽãªãºã ã®è³ªåã®é åãçè§£ããŠããŸããçæéã§å¿åè ãè©äŸ¡ã§ããããçŽããç°¡åã§ããã€ãŸãã誰ãã«èãã質åãå ¬éãããŠããç¹å¥ãªåé¡ã¯çºçããŸãããã¢ã«ãŽãªãºã ã®è³ªåã¯ã倿°ã®ç³è«è ã®è©ŠéšãæŽçããã®ã«é©ããŠããŸããããšãã°ã100ãè¶ ãã質åã®ããŒã«ãäœæããããããå¿åè ã«ã©ã³ãã ã«é åžã§ããŸããåçããã°ã©ãã³ã°ãšãšããŸããã¯ãªããŒã¿æ§é ã«é¢ãã質åã¯ãŸããŸãäžè¬çã«ãªã£ãŠããŸããç¹ã«ã·ãªã³ã³ãã¬ãŒã§ããããã®è³ªåã¯ãäŒæ¥ã匷åãªããã°ã©ããŒãéãã®ã«åœ¹ç«ã¡ãŸãããããããããã®åã質åã¯ãããžãã¹ã§æåãã人ã ãžã®äŒç€Ÿã®éãéããããšãã§ããŸããã¢ã«ãŽãªãºã ã®æ·±ãç¥èãå¿ èŠãªãå Žåã
çãŸããŠããè€éãªã¢ã«ãŽãªãºã ã«ç²ŸéããŠãã人ã ããéã£ãŠããäŒç€Ÿã®å Žåã¯ãããããå¿ èŠãªäººãã©ãããæ éã«æ€èšããããšããå§ãããŸããããšãã°ãSkyscannerïŒãã³ãã³ïŒãšUberïŒã¢ã ã¹ãã«ãã ïŒã§ãããªãããŒãªã¢ã«ãŽãªãºã ã®è³ªåãããã«çŽ æŽãããããŒã ãéããŸãããç§ã¯èªåèªèº«ãæãäžè¬çãªããŒã¿æ§é ã«éå®ããåé¡è§£æ±ºã«é¢é£ããã€ã³ã¿ãã¥ãŒå¯Ÿè±¡è ã®èœåããã¹ãããŸãããã€ãŸãã圌ãã¯äžè¬çãªããŒã¿æ§é ã«ã€ããŠç¥ããçŽé¢ããŠããåé¡ã解決ããããã®ç°¡åãªã¢ã«ãŽãªãºã ãèãåºãããšãã§ããå¿ èŠããããŸãããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã¯åãªãããŒã«ã§ãã
çµè«ïŒããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã¯ããŒã«ã§ã
ãã€ãããã¯ã§é©æ°çãªãã¯ãããžãŒäŒæ¥ã§åããŠããå Žåããããããã®äŒæ¥ã®è£œåã®ã³ãŒãã«ããŸããŸãªããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã®å®è£ ã«ééããã§ãããããŸã£ããæ°ãããã®ãéçºããŠããå Žåã¯ãçŽé¢ããŠããåé¡ã®è§£æ±ºã容æã«ããããŒã¿æ§é ãæ¢ãå¿ èŠããããŸãããã®ãããªç¶æ³ã§ã¯ãæ£ããéžæãè¡ãããã«ãã¢ã«ãŽãªãºã ãšããŒã¿æ§é ãããã³ãããã®é·æãšçæã«é¢ããäžè¬çãªç¥èãå¿ èŠã§ãã
ããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã¯ãããã°ã©ã ãäœæãããšãã«èªä¿¡ãæã£ãŠäœ¿çšããå¿ èŠãããããŒã«ã§ãããããã®ããŒã«ãç¥ã£ãŠãããšããããã䜿çšããã³ãŒãããŒã¹ã§ãã§ã«ç¥ã£ãŠããããšãããããããããŸããããã«ããã®ãããªç¥èã«ãããè€éãªåé¡ãããèªä¿¡ãæã£ãŠè§£æ±ºããããšãã§ããŸããã¢ã«ãŽãªãºã ã®çè«äžã®å¶éãšãããããæé©åããæ¹æ³ãçè§£ã§ããŸããããã¯ãå¿ èŠãªãã¹ãŠã®ãã¬ãŒããªãã䜿çšããŠãå¯èœãªéãåªããŠããããšã倿ãããœãªã¥ãŒã·ã§ã³ã«æçµçã«å°éããã®ã«åœ¹ç«ã¡ãŸãã
ããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãããããçè§£ãããå Žåã¯ã次ã®ãã³ããšãªãœãŒã¹ãã芧ãã ããã
- -, , , , , , . , , . , . â , .
- « ». , , , . â , , . , , , .
- ããã«ããã€ãã®æ¬ããããŸãïŒãã¢ã«ãŽãªãºã ãéçºã¬ã€ããããã³ãJavaã®ã¢ã«ãŽãªãºã ã第4çãããããã䜿çšããŠã倧åŠã®ã¢ã«ãŽãªãºã ã«é¢ããç¥èãæŽæ°ããŸããã確ãã«ãç§ã¯ããããæåŸãŸã§èªãã§ããŸããããããã¯ç§ã«ã¯ããªã也ç¥ããŠããŠãç§ã®æ¥åžžã®ä»äºã«ã¯é©çšã§ããªãããã«èŠããŸããã
å®éã«ã©ã®ãããªããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã«ééããŸãããïŒ
