ãã®èšäºã§ã¯ãã¢ãã¡ãŒã·ã§ã³åãããQRã³ãŒããä»ããŠãã¡ã€ã«ã転éããããã®ãå°ãããŠé¢çœãé±æ«ãããžã§ã¯ãã«ã€ããŠã話ããããšæããŸãã ãããžã§ã¯ãã¯GomobileãšGopherjsã䜿çšããŠGoã§èšè¿°ãããŠããŸããããã¯ãããŒã¿è»¢éé床ãèªåçã«æž¬å®ããWebã¢ããªã±ãŒã·ã§ã³ã®ææ°çã§ãã ããžã¥ã¢ã«ã³ãŒãã䜿çšããŠããŒã¿ãéä¿¡ããJSãŸãã¯å®éã®ã¯ãã¹ãã©ãããã©ãŒã ã®Goã§ã¯ãªãWebã¢ããªã±ãŒã·ã§ã³ãéçºãããšããã¢ã€ãã¢ã«èå³ãããå Žåã¯ãWellcome to Catã«ã¢ã¯ã»ã¹ããŠãã ããã
ãããžã§ã¯ãã®ã¢ã€ãã¢ã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ã¿ã¹ã¯ããçãŸããŸããããããã¯ãŒã¯ããããã³ã°ã®ç¶æ ã§ãããŒã¿ã®ããäžéšïŒã15KBïŒãæãç°¡åãã€è¿ éã«å¥ã®ããã€ã¹ã«è»¢éããæ¹æ³ã§ãã æåã«èããã®ã¯Bluetoothã䜿çšããããšã§ããããèŠãç®ã»ã©äŸ¿å©ã§ã¯ãããŸãããããã€ã¹ãæ€åºããŠãã¢ãªã³ã°ããæ¯èŒçé·ããåžžã«åäœããããã»ã¹ã¯ãã¿ã¹ã¯ã«ãšã£ãŠéåžžã«å°é£ã§ãã NFCïŒNear Field CommunicationïŒã䜿çšããããšããå§ãããŸãããNFCãµããŒããå¶éãããŠãããååšããªãããã€ã¹ããŸã å€ãããŸãã ãã£ãšã·ã³ãã«ã§æé ãªäŸ¡æ Œã®ãã®ãå¿ èŠã§ããã
QRã³ãŒãã¯ã©ãã§ããïŒ
QRã³ãŒã
QRïŒã¯ã€ãã¯ã¬ã¹ãã³ã¹ïŒã³ãŒãã¯ãäžçã§æã人æ°ã®ããèŠèŠã³ãŒãã§ãã æ倧3KBã®ä»»æã®ããŒã¿ããšã³ã³ãŒãã§ããããŸããŸãªãšã©ãŒä¿®æ£ã¬ãã«ãåããŠãããããéããã³ãŒããããŒãã£ã³ãŒãã®3åã®1ã§ãèªä¿¡ãæã£ãŠèªã¿åãããšãã§ããŸãã
ããããQRã³ãŒãã«ã¯2ã€ã®åé¡ããããŸãã
- 3KBã§ã¯äžååã§ã
- ãšã³ã³ãŒããããããŒã¿ãå€ãã»ã©ãã¹ãã£ã³ããç»åã®å質èŠä»¶ãé«ããªããŸã
以äžã¯ã1276ãã€ãã®40çªç®ã®ããŒãžã§ã³ïŒæé«èšé²å¯åºŠïŒã®QRã³ãŒãã§ãã
ç§ã®ã¿ã¹ã¯ã§ã¯ãæšæºããã€ã¹ïŒã¹ããŒããã©ã³/ã¿ãã¬ããïŒã§15 KBã®ããŒã¿ã転éããæ¹æ³ãåŠã¶å¿ èŠããã£ãã®ã§ãçåãçããŸãããQRã³ãŒãã®ã·ãŒã±ã³ã¹ãã¢ãã¡ãŒã·ã§ã³åããããŒã¿ãåå²ããŠè»¢éããŠã¿ãŸãããïŒ
æ¢è£œã®å®è£ ããã°ããæ€çŽ¢ãããšã ãã®ãã㪠ãããžã§ã¯ããããã€ã è¡ãã ãŸãã -äž»ã«ããã«ãœã³ã®ãããžã§ã¯ãïŒ è«æããããŸãã ïŒ-ãããããããã¯ãã¹ãŠJavaãPythonããŸãã¯JavaScriptã§æžãããŠãããããæ®å¿µãªããã³ãŒãã¯äºå®äžç§»æ€æ§ããªãã䜿çšãããŠããŸããã§ããã ããããQRã³ãŒãã®äººæ°ãšã¢ã€ãã¢ã®æè¡çãªè€éãã®äœããèæ ®ããŠãã¯ãã¹ãã©ãããã©ãŒã ã§èªã¿ãããé«éãªèšèªã§ããGoããŒãããèšè¿°ããããšã«ããŸããã éåžžãã¯ãã¹ãã©ãããã©ãŒã ã¯ãWindowsãMacãããã³Linuxçšã®ãã€ããªã³ãŒãããã«ãããæ©èœãæå³ããŸãããç§ã®å ŽåãWebïŒgopherjsïŒããã³ã¢ãã€ã«ã·ã¹ãã ïŒiOS / AndroidïŒçšã«ãã«ãããããšãéèŠã§ããã Goã¯æå°éã®ã³ã¹ãã§ããã«äœ¿çšã§ããŸãã
ãŸãã HCCBãJAB Codeãªã©ã®èŠèŠã³ãŒãã®ä»£æ¿ãªãã·ã§ã³ãæ€èšããŸããããOpenCVã¹ãã£ããŒãäœæãããšã³ã³ãŒããŒ/ãã³ãŒããŒããŒãããå®è£ ããå¿ èŠããããããã¯ããé±æ«ã®ãããžã§ã¯ãã«ã¯å€ãããŸããã QR埪ç°ã³ãŒãïŒ ã·ã§ããã³ãŒãïŒãããã³FacebookãKikãããã³Snapchatã§äœ¿çšããããããã®ã«ãŠã³ã¿ãŒããŒãã¯ãããå°ãªãæ å ±ããšã³ã³ãŒãããããšãã§ããApple WatchãšiPhone ïŒã«ã©ãã«ãªç²åã®ã¢ãã¡ãŒã·ã§ã³ã¯ã©ãŠãïŒããã¢ãªã³ã°ããããã®Appleã®éåžžã«ã¯ãŒã«ãªç¹èš±ååŸæžã¿ã®ã¢ãããŒããããããå¹æã®ããã«æé©åãããæ倧垯åå¹ ã§ã¯ãããŸããã QRã³ãŒãã¯ã¢ãã€ã«OSã®ãã€ãã£ãSDKã«ã¡ã©ã«çµ±åãããŠãããããããããšã®äœæ¥ãå€§å¹ ã«å®¹æã«ãªããŸãã
TXQR
ãã®ããã txqrãããžã§ã¯ããçãŸããŸããïŒTx-transmissionãand QRïŒãçŽç²ãªGoã§QRããšã³ã³ãŒã/ãã³ãŒãããããã®ã©ã€ãã©ãªãšãããŒã¿ãéä¿¡ããããã®ãããã³ã«ãå®è£ ããŸãã
äž»ãªã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãïŒ1人ã®ã¯ã©ã€ã¢ã³ããéä¿¡ãããã¡ã€ã«ãŸãã¯ããŒã¿ãéžæããããã€ã¹äžã®ããã°ã©ã ããã¡ã€ã«ãæçã«åå²ãããããããQRãã¬ãŒã ã«ãšã³ã³ãŒãããåä¿¡è ããã¹ãŠã®ããŒã¿ãåä¿¡ãããŸã§ç¹å®ã®ãã¬ãŒã ã¬ãŒãã§ç¡éã«ãŒãã«è¡šç€ºããŸãã ãããã³ã«ã¯ãåä¿¡è ãä»»æã®ãã¬ãŒã ããéå§ããä»»æã®é åºã§QRãã¬ãŒã ãåä¿¡ã§ããããã«äœæãããŸããããã«ãããã¢ãã¡ãŒã·ã§ã³ã®é »åºŠãšã¹ãã£ã³ã®é »åºŠãåæããå¿ èŠããªããªããŸãã åä¿¡æ©ã¯å€ãããã€ã¹ã§ããã®èœåã«ããæ¯ç§2ãã¬ãŒã ããã³ãŒãã§ããéä¿¡æ©ã¯120Hzã¢ãã¡ãŒã·ã§ã³ãçæããæ°ããã¹ããŒããã©ã³ã§ããŸãã¯ãã®éãå¯èœã§ããããã¯ãããã³ã«ã«ãšã£ãŠæ ¹æ¬çãªåé¡ã§ã¯ãããŸããã
ããã¯æ¬¡ã®ããã«å®çŸãããŸã-ãã¡ã€ã«ãæçïŒããã«ãã¬ãŒã ïŒã«åå²ããããšããã¹ãŠã®ããŒã¿ãšåèšé·ãã«å¯Ÿãããªãã»ããã«é¢ããæ
å ±ãå«ããã¬ãã£ãã¯ã¹OFFSET/TOTAL|
ïŒOFFSETãšTOTALã¯ããããããªãã»ãããšé·ãã®æŽæ°å€ã§ãïŒã çŸåšããã€ããªããŒã¿ã¯Base64ã§ãšã³ã³ãŒããããŠããŸãããããã¯æ¬åœã«å¿
èŠã§ã¯ãããŸãã-QRä»æ§ã§ã¯ãããŒã¿ããã€ããªãšããŠãšã³ã³ãŒãããã ãã§ãªããããŒã¿ã®ããŸããŸãªéšåãããŸããŸãªãšã³ã³ãŒãã£ã³ã°ã«æé©åããããšãã§ããŸãïŒããšãã°ãå°ããªå€æŽã®ãã¬ãã£ãã¯ã¹ã¯è±æ°åãšããŠãšã³ã³ãŒãã§ããæ®ãã®ã³ã³ãã³ãã¯- ãã€ããªã®ããã«ïŒããããåçŽåã®ããã«Base64ã¯ãã®æ©èœãå®å
šã«å®è¡ããŸããã
ããã«ãåä¿¡è ã®èœåã«åãããŠããã¬ãŒã ãµã€ãºãšé »åºŠãåçã«å€æŽããããšãã§ããŸãã
ãããã³ã«èªäœã¯éåžžã«ã·ã³ãã«ã§ããããã®äž»ãªæ¬ ç¹ã¯ã倧ããªãã¡ã€ã«ã®å ŽåïŒã¿ã¹ã¯ã®ç¯å²å€ã§ãããã¹ãã£ã³äžã«ã¹ãããããã1ãã¬ãŒã ãã¹ãã£ã³æéã2åã«ããããšã§ã-åä¿¡è ã¯åã³å®å šãªãµã€ã¯ã«ãåŸ ã€å¿ èŠããããŸãã ã³ãŒãã£ã³ã°çè«ã§ã¯ããã®ãããªå Žåã®è§£æ±ºçããããŸã- åŽæ°Žã³ãŒãã§ãããããã次ã®ç¡æé±æ«ã«æ®ããŸãã
æãèå³æ·±ãç¹ã¯ããã®ãããã³ã«ã䜿çšã§ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã§ããã
Gomobile
gomobileã«ã€ããŠèããããšããªãå Žåãããã¯iOSããã³Androidãããžã§ã¯ãã§Goã©ã€ãã©ãªã䜿çšã§ããããã«ãããããžã§ã¯ãã§ãããããã¯ãããã€ã§ç°¡åãªæé ã§ãã
æšæºããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
- å®æçãªgoã³ãŒããæžã
-
gomobile bind ...
å®è¡ãgomobile bind ...
- çµæã®ã¢ãŒãã£ãã¡ã¯ãïŒ
yourpackage.framework.
ãŸãã¯yourpackage.aar
ïŒãã¢ãã€ã«ãããžã§ã¯ãã«ã³ããŒããŸã -
yourpackage
ãã€ã³ããŒãããŠãéåžžã®ã©ã€ãã©ãªã®ããã«yourpackage
ããŸã
ã©ãã ãç°¡åãè©ŠããŠã¿ãŠãã ããã
ãããã£ãŠãSwiftã§QRã³ãŒããã¹ãã£ã³ããŠïŒãã®ãã°ãããèšäºã®ãããã§ïŒã¢ããªã±ãŒã·ã§ã³ããã°ããäœæãããããããã³ãŒãããããããçµåããŠããã¡ã€ã«å šäœãåä¿¡ãããšãã¬ãã¥ãŒãŠã£ã³ããŠã«è¡šç€ºããŸãã
Swiftã®åå¿è
ãšããŠïŒç§ã¯Swift 4ã®æ¬ãèªãã ãšããŠãïŒç°¡åãªããšã§ç«ã¡åŸçããç¬éãããããããæ£ããè¡ãæ¹æ³ãèŠã€ããããšããŠãããããæçµçã«ã¯Goã§ãã®æ©èœãå®è£
ããããšãæåã®è§£æ±ºçã§ããgomobileçµç±ã 誀解ããªãã§ãã ãããSwiftã¯å€ãã®ç¹ã§çŽ æŽââãããèšèªã§ãããä»ã®ã»ãšãã©ã®ããã°ã©ãã³ã°èšèªãšåæ§ã«ãåãããšãè¡ãã«ã¯ããŸãã«ãå€ãã®æ¹æ³ãæäŸãããã§ã«åŸæ¹äºææ§ã®ãªãå€æŽã®ãŸãšããªæŽå²ããããŸãã ããšãã°ãã€ãã³ãã®ç¶ç¶æéãããªç§ã®ç²ŸåºŠã§æž¬å®ãããšããç°¡åãªããšãè¡ãå¿
èŠããããŸããã GoogleãšStackOverflowã§æ€çŽ¢ããçµæãå€ãã®ç°ãªãççŸããããã°ãã°æ代é
ãã®ãœãªã¥ãŒã·ã§ã³ãçãŸããŸããããæçµçã«ã¯ã©ããç§ã«ãšã£ãŠèŠãç®ãã³ã³ãã€ã©ã«ãšã£ãŠãæ£ãããã®ã§ã¯ãããŸããã§ããã 40åãè²»ãããåŸãGoããã±ãŒãžã§time.Since(start) / time.Millisecond
ãšããå¥ã®ã¡ãœãããäœæããSwiftããã®çµæãçŽæ¥äœ¿çšããŸããã
ãŸããè¿
éãªã¢ããªã±ãŒã·ã§ã³ãã¹ãã®ããã«ã txqr-ascii
ã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ãäœæããŸããã ãã¡ã€ã«ããšã³ã³ãŒãããã¿ãŒããã«ã§QRã³ãŒããã¢ãã¡ãŒã·ã§ã³åããŸãã ãã¹ãŠäžç·ã«é©ãã»ã©ããŸãæ©èœããŸãã-æ°ç§ã§å°ããªç»åãéä¿¡ã§ããŸãããããã¬ãŒã ã¬ãŒããåQRãã¬ãŒã ã®ãã€ãæ°ãQRãšã³ã³ãŒããŒã®ãšã©ãŒä¿®æ£ã¬ãã«ã®ããŸããŸãªå€ã®ãã¹ããéå§ãããšããã«ã端æ«ãœãªã¥ãŒã·ã§ã³ã¯ããã§ã¯ãªãããšãæããã«ãªããŸããã¢ãã¡ãŒã·ã§ã³ã®é«é »åºŠïŒ10ãè¶
ããïŒã«å¯ŸåŠããæåã§çµæããã¹ãããã³æž¬å®ããããšã¯æ²æšãªããšã§ãã
TXQRãã¹ã¿ãŒ
ãã¬ãŒã ã¬ãŒããQRãã¬ãŒã ã®ããŒã¿ãµã€ãºãããã³ãããã®å€ã®åççãªå¶éã®äžã§ã®ãšã©ãŒä¿®æ£ã®ã¬ãã«ã®æé©ãªçµã¿åãããèŠã€ããã«ã¯ã1000以äžã®ãã¹ããå®è¡ãããã©ã¡ãŒã¿ãŒãæåã§å€æŽããæºåž¯é»è©±ãæã«æã£ãŠå®å šãªãµã€ã¯ã«ãåŸ ã£ãŠçµæããã¬ãŒãã«æžã蟌ãå¿ èŠããããŸããã ãã¡ãããããã¯èªååããå¿ èŠããããŸãïŒ
ãã®åŸã次ã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ã€ãã¢ãtxqr-tester
ã åœåã x / exp / shiny -Goã®ãã€ãã£ããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³çšã®å®éšçãªUIãã¬ãŒã ã¯ãŒã¯ã䜿çšããäºå®ã§ããããæŸæ£ãããããã§ãã çŽ1幎åãç§ã¯ãããè©ŠããŸããããå°è±¡ã¯æªããããŸããã§ãã-ããã¯äœã¬ãã«ã®ãã®ã«å®å
šã«é©åããŸããã ããããä»æ¥ãmasterãã©ã³ãã¯ã³ã³ãã€ã«ãããŠããŸããã ãã¹ã¯ããããã¬ãŒã ã¯ãŒã¯ã®éçºã«æè³ããã€ã³ã»ã³ãã£ãã¯ãã¯ããªãããã§ããæè¿ã§ã¯ã»ãšãã©ãŒãã®éèŠã§ãè€éã§é¢åãªã¿ã¹ã¯ã§ããããã¹ãŠã®UIãœãªã¥ãŒã·ã§ã³ã¯ããªãåã«Webã«ç§»è¡ããŸããã
Webããã°ã©ãã³ã°ã§ã¯ããåç¥ã®ããã«ãWebAssemblyã®ãããã§ããã°ã©ãã³ã°èšèªãç»å Žãå§ããŸããããããã¯ãŸã åäŸãã¡ã«ãšã£ãŠã®æåã®ã¹ãããã§ãã ãã¡ãããJavaScriptãšã¢ããªã³ããããŸãããå人ã¯å人ãJavaScriptã§ã¢ããªã±ãŒã·ã§ã³ãäœæããããšãèš±å¯ããŠããªããããæè¿çºèŠããVectyãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšã«ããŸãããVectyãã¬ãŒã ã¯ãŒã¯ã¯çŽç²ãªGoã§ããã³ããšã³ããäœæã§ããéåžžã«å€§äººã®é©ãã»ã©ããŸãæ©èœããJavaScriptã«èªåçã«å€æãããŸãGopherJSãããžã§ã¯ãã
VectyãšGopherJS
ç§ã®äººçã§ã¯ãããã³ããšã³ãã€ã³ã¿ãŒãã§ã€ã¹ã®éçºãããã®ãããªåã³ãåããŠããŸããã
å°ãåŸã«ãWebGLã¢ããªã±ãŒã·ã§ã³ãªã©ãVectyã§ã®ããã³ããšã³ãã®éçºçµéšã«ã€ããŠèšäºãããã«æžãäºå®ã§ãããæçµçã«ã¯ãReactãAngularsãEmberã®ããã€ãã®ãããžã§ã¯ãã®åŸãæãããã®ããã·ã³ãã«ãªããã°ã©ãã³ã°èšèªã§ããã³ããšã³ããæžãããšã¯æ°é®®ã§ã空æ°ïŒ JavaScriptã§1è¡ãèšè¿°ããã«ãçæéã§ããªãããããã³ããšã³ããæžãããšãã§ããŸãïŒ
ãŸããVectyã§æ°ãããããžã§ã¯ããéå§ããæ¹æ³ã説æããŸãïŒå€§éã®ãã¡ã€ã«ããã©ã«ããŒãäœæãããåæãããžã§ã¯ããã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ãããŸããïŒ-main.goã®ã¿ã§ãã
ackage main import ( "github.com/gopherjs/vecty" ) func main() { app := NewApp() vecty.SetTitle("My App") vecty.AddStylesheet(/* ... add your css... */) vecty.RenderBody(app) }
ã¢ããªã±ãŒã·ã§ã³ã¯ãä»ã®UIã³ã³ããŒãã³ããšåæ§ãåãªãåã§ãvecty.Core
åãå«ãæ§é ã§ããã vecty.Component
ã€ã³ã¿ãŒãã§ã€ã¹ïŒ1ã€ã®Render()
ã¡ãœããã§æ§æãããïŒãå®è£
ããå¿
èŠããããŸãã ãããŠããã ãã§ãïŒ æ¬¡ã«ãDOMãæäœããããã®åãã¡ãœãããé¢æ°ãã©ã€ãã©ãªãªã©ãæäœããŸããé ãããéæ³ãæ°ããçšèªãæŠå¿µã¯ãããŸããã ã¡ã€ã³ããŒãžã®ç°¡ç¥åãããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
/ App is a top-level app component. type App struct { vecty.Core session *Session settings *Settings // any other stuff you need, // it's just a struct } // Render implements the vecty.Component interface. func (a *App) Render() vecty.ComponentOrHTML { return elem.Body( a.header(), elem.Div( vecty.Markup( vecty.Class("columns"), ), // Left half elem.Div( vecty.Markup( vecty.Class("column", "is-half"), ), elem.Div(a.QR()), // QR display zone ), // Right half elem.Div( vecty.Markup( vecty.Class("column", "is-half"), ), vecty.If(!a.session.Started(), elem.Div( a.settings, )), vecty.If(a.session.Started(), elem.Div( a.resultsTable, )), ), ), vecty.Markup( event.KeyDown(a.KeyListener), ), ) }
ããªãã¯ããããä»ã³ãŒããèŠãŠãèããŠããŸã-DOMã®æ ¹æ ã®ãªãä»äºã¯ã©ããããã§ããïŒ ç§ãæåã¯ããæã£ãŠããŸããããåãå§ããŠããã«ããããããã«äŸ¿å©ããå®æããŸããã
- éæ³ã¯ãããŸãã-åãããã¯ïŒããŒã¯ã¢ãããŸãã¯HTMLïŒã¯ãéçãªåä»ãã®ãããã§ãããªããäœãã眮ãããšãã§ããæ確ãªå¶éãæã€ãåžæããåã®å€æ°ã«ãããŸããã
- ãªãã¡ã¯ã¿ãªã³ã°æã«å€æŽããããšãèŠããŠãããããããè¡ãIDEã䜿çšããå¿ èŠãããéå§/çµäºã¿ã°ã¯ãããŸããã
- æ§é ãçªç¶æããã«ãªããŸããããšãã°ãReactã§16çªç®ã®ããŒãžã§ã³ãŸã§ã³ã³ããŒãã³ãããè€æ°ã®ã¿ã°ãè¿ãããšãã§ããªãã£ãçç±ãç解ã§ããŸããã§ãã-ããã¯ãåãªãæååãã§ãã ãããVectyã§ã©ã®ããã«è¡ãããããèŠãŠãReactã§ãã®å¶çŽã®ã«ãŒããã©ãã§æé·ããããçªç¶æããã«ãªããŸããã ããã§ããã¯ããReact 16ãå¯èœã«ãªã£ãã®ã«å¿ èŠã§ã¯ãªãã£ãçç±ã¯æããã§ã¯ãããŸããã
äžè¬ã«ãDOMãæäœãããã®ã¢ãããŒããè©Šã¿ããšããã«ããã®å©ç¹ãéåžžã«æããã«ãªããŸãã ãã¡ããäžå©ãªç¹ããããŸãããéåžžã®æ¹æ³ã®äžå©ãªç¹ã®åŸã¯èŠããŸããã
Vectyã¯Reactã®ãããªãã¬ãŒã ã¯ãŒã¯ãšåŒã°ããŸãããããã¯å®å šã«çå®ã§ã¯ãããŸããã Reactã®ãã€ãã£ãGopherJSã©ã€ãã©ãª-myitcv.io/reactããããŸãããGoã®Reactã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ãç¹°ãè¿ãããšã¯è¯ãèãã§ã¯ãªããšæããŸãã Vectyã§ããã³ããšã³ããæžããšãå®éã«ã©ãã»ã©ç°¡åããçªç¶æããã«ãªããŸãã çªç¶ããã®ãã¹ãŠã®é ãããéæ³ãšããã¹ãŠã®JavaScriptãã¬ãŒã ã¯ãŒã¯ãçºæããæ°ããçšèªãšæŠå¿µã¯äžèŠã«ãªããŸãã å¿ èŠãªã®ã¯ãã³ã³ããŒãã³ããšãã®åäœãæ確ãã€æ確ã«èšè¿°ããããããäžç·ã«æ¥ç¶ããããšã§ã-ã¿ã€ããã¡ãœãããæ©èœãããã ãã§ãã
CSSã«ã¯ãé©ãã»ã©ãŸãšããªBulmaãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãããéåžžã«æ確ãªã¯ã©ã¹ã®åœåãšåªããæ§é ãæã¡ã宣èšåUIã³ãŒãã¯éåžžã«èªã¿ããããªã£ãŠããŸãã
ãã ããJavaScriptã§Goã³ãŒããã³ã³ãã€ã«ãããšãæ¬åœã®éæ³ãå§ãŸããŸãã éåžžã«åšå§çã«èãããŸãããå®éã«ã¯ã gopherjs build
ãåŒã³åºãã ãã§ã1ç§ä»¥å
ã«ãèªåçæãããJavaScriptãã¡ã€ã«ãåºæ¬çãªHTMLããŒãžã«å«ãŸããããã«ãªããŸãïŒéåžžã®ã¢ããªã±ãŒã·ã§ã³ã¯ã空ã®bodyã¿ã°ãšãããå«ãã ãã§æ§æãããŸãJSã¹ã¯ãªããïŒã æåã«ãã®ã³ãã³ããå®è¡ãããšããå€ãã®ã¡ãã»ãŒãžãèŠåããšã©ãŒã衚瀺ããããšäºæ³ããŠããŸããããããã-çŽ æŽãããé«éãã€éãã«åäœããŸã.Goã³ã³ãã€ã©ã«ãã£ãŠçæãããã³ã³ãã€ã«ãšã©ãŒã®å Žåã«ã®ã¿åäžè¡ã®ãã¡ã€ã«ãå°å·ãããããéåžžã«æ確ã§ãã ãããããã©ãŠã¶ã³ã³ãœãŒã«ã«ãšã©ãŒã衚瀺ãããã¹ã¿ãã¯ãã¬ãŒã¹ã.goãã¡ã€ã«ãšæ£ããè¡ãæããŠããã®ã¯ããã«ã¯ãŒã«ã§ããïŒ ããã¯ãšãŠãã¯ãŒã«ã§ãã
QRã¢ãã¡ãŒã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒã®ãã¹ã
æ°æéã®éããã¹ãçšã®ãã©ã¡ãŒã¿ãŒããã°ããå€æŽã§ããWebã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŠããŸããã
- FPS-ãã¬ãŒã ã¬ãŒã
- QRãã¬ãŒã ãµã€ãº-åãã¬ãŒã ã«å¿ èŠãªãã€ãæ°
- QR Recovery Level-QRãšã©ãŒä¿®æ£ã¬ãã«
ãã¹ããèªåçã«å®è¡ããŸãã
ãã¡ãããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãèªååããå¿ èŠããããŸããã次ã®ã©ãŠã³ããæ°ãããã©ã¡ãŒã¿ãŒã§éå§ãããã¿ã€ãã³ã°ãç解ããåä¿¡ã«æéãããããããŠã©ãŠã³ããäžæããçµæãã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ãããªã©ãç解ããå¿ èŠããããŸããã
ãã£ããã¯ããã©ãŠã¶ãµã³ãããã¯ã¹ã§å®è¡äžã®Webã¢ããªã±ãŒã·ã§ã³ã¯æ°ããæ¥ç¶ãäœæã§ããªãããšã§ãããééã£ãŠããªããã°ããã©ãŠã¶ãžã®å®éã®ãã¢ããŒãã¢æ¥ç¶ã®å¯äžã®å¯èœæ§ã¯WebRTCãä»ããŠã®ã¿ã§ãïŒNATãä»ããŠãã³ãããå¿ èŠã¯ãããŸããïŒããããããã¯é¢åãããŸããã Webã¢ããªã±ãŒã·ã§ã³ã¯ã¯ã©ã€ã¢ã³ãã«ãããªããŸããã
ãœãªã¥ãŒã·ã§ã³ã¯ã·ã³ãã«ã§ãã-Webã¢ããªã±ãŒã·ã§ã³ãé ä¿¡ããïŒããã³ç®çã®URLã«ãã©ãŠã¶ãŒãèµ·åããïŒGo WebãµãŒãã¹ã¯ã2ã€ã®ã¯ã©ã€ã¢ã³ãã®WebSocketãããã·ãèµ·åããŸããã 2ã€ã®ã¯ã©ã€ã¢ã³ããåå ãããšããã«ã1ã€ã®æ¥ç¶ããå¥ã®æ¥ç¶ã«ééçã«ã¡ãã»ãŒãžãéä¿¡ããã¯ã©ã€ã¢ã³ãïŒWebã¢ããªã±ãŒã·ã§ã³ãšã¢ãã€ã«ã¯ã©ã€ã¢ã³ãïŒãçŽæ¥éä¿¡ã§ããããã«ããŸãã ãã¡ããããããã¯1ã€ã®WIFIãããã¯ãŒã¯ã§å¿ èŠã§ãã
å®éã«æ¥ç¶ããå Žæãã¢ãã€ã«ããã€ã¹ã«äŒããæ¹æ³ã«åé¡ãããã... QRã³ãŒãã䜿çšããŠè§£æ±ºãããŸããïŒ
ãã¹ãããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã¯ãéå§ããŒã«ãŒãšWebSocketãããã·ãžã®ãªã³ã¯ãæã€QRã³ãŒããæ¢ããŠããŸã
- ããŒã¯ã³ãèªã¿åããããšããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã®WebSocketãããã·ã«æ¥ç¶ããŸã
- Webã¢ããªã±ãŒã·ã§ã³ïŒãããã·ã«æ¢ã«æ¥ç¶ãããŠããïŒã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŠããããšãç解ããããŒã«ãŒã次ã®ã©ãŠã³ãã®æºåã¯ã§ããŠããŸããïŒããå«ãQRã³ãŒãã衚瀺ããŸãã
- ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã¯ä¿¡å·ãèªèãããã³ãŒããŒããªã»ããããWebSocketãä»ããŠãã¯ãããšããã¡ãã»ãŒãžãéä¿¡ããŸãã
- 確èªãåãåã£ãWebã¢ããªã±ãŒã·ã§ã³ã¯ãæ°ããQRã¢ãã¡ãŒã·ã§ã³ãçæããçµæãŸãã¯ã¿ã€ã ã¢ãŠããåãåããŸã§ãããã²ãããŸãã
- çµæã¯ãã¬ãŒãã®é£ã«è¿œå ãããããã«CSV圢åŒã§ããŠã³ããŒãã§ããŸã
ãã®çµæãé»è©±ãäžèã«çœ®ããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããã ãã§ãQRã³ãŒããšWebSocketãéããŠäžå¯§ã«éä¿¡ããŠã2ã€ã®ããã°ã©ã èªäœããã¹ãŠã®æ±ãä»äºãããŸããã
æåŸã«ãçµæãå«ãCSVãã¡ã€ã«ãããŠã³ããŒããããããRStudioããã³Plotly Online Chart Makerã«éã ãçµæãåæããŸããã
çµæ
å®å šãªãã¹ããµã€ã¯ã«ã«ã¯çŽ4æéããããŸãïŒæ®å¿µãªãããããã»ã¹ã®æãé£ããéšå-QRãã¬ãŒã ã䜿çšããã¢ãã¡ãŒã·ã§ã³GIFã€ã¡ãŒãžã®çæã¯ãã©ãŠã¶ãŒã§å®è¡ããå¿ èŠããããçµæã®ã³ãŒãã¯ãŸã JSã«ããããã1ã€ã®ããã»ããµãŒã®ã¿ã䜿çšãããŸãïŒããã¯ãç»é¢ãçªç¶ç©ºçœã«ãªã£ãããäžéšã®ã¢ããªã±ãŒã·ã§ã³ãWebã¢ããªã±ãŒã·ã§ã³ã§ãŠã£ã³ããŠãéãããããªãããã«ç£èŠããå¿ èŠããããŸããã 以äžã®ãã©ã¡ãŒã¿ãŒããã¹ããããŸããã
- FPS-3ãã12
- QRãã¬ãŒã ã®ãµã€ãºã¯100ã1000ãã€ãïŒ50åäœïŒã§ãã
- QRãšã©ãŒä¿®æ£ã®4ã€ã®ã¬ãã«ãã¹ãŠïŒäœãäžãé«ãæé«ïŒ
- 転éããããã¡ã€ã«ãµã€ãº-13 KBã®ã©ã³ãã ã«çæããããã€ã
æ°æéåŸãCSVãããŠã³ããŒãããçµæã®åæãéå§ããŸããã
åçã¯åã®èšèãããéèŠã§ãããã€ã³ã¿ã©ã¯ãã£ããª3DèŠèŠåã¯åã®åçãããéèŠã§ãã çµæã®èŠèŠåã次ã«ç€ºããŸãïŒã¯ãªãã¯å¯èœïŒïŒ

æè¯ã®çµæã¯1.4ç§ã§ãçŽ9KB /ç§ã§ãïŒ ãã®çµæã¯ãæ¯ç§11ãã¬ãŒã ã®é »åºŠã850ãã€ãã®ãã¬ãŒã ãµã€ãºãããã³ãšã©ãŒä¿®æ£ã®å¹³åã¬ãã«ã§èšé²ãããŸããã ãã ããã»ãšãã©ã®å Žåããã®é床ã§ã¯ãã«ã¡ã©ãã³ãŒããŒã¯ããã€ãã®ãã¬ãŒã ãã¹ãããããçµæã«éåžžã«æªã圱é¿ãäžãã次ã®æ¬ èœãã¬ãŒã ã®ç¹°ãè¿ããåŸ ããªããã°ãªããŸããã§ãã-2ç§ã§ã¯ãªãã15ç§ããŸãã¯30ç§ã«èšå®ãããã¿ã€ã ã¢ãŠããç°¡åã«å€æããå¯èœæ§ããããŸããã
以äžã¯ãå€æ°å€æ°ã«å¯Ÿããçµæã®äŸåæ§ã®ã°ã©ãã§ãã
ãã¬ãŒã æé/ãµã€ãº
ã芧ã®ããã«ãåãã¬ãŒã ã®ãã€ãæ°ã®å€ãäœããšãéå°ãªãšã³ã³ãŒãã倧ããããŠãåèšèªã¿åãæéããããã倧ãããªããŸãã ãã¬ãŒã ããšã«500ã600ãã€ãã®ããŒã«ã«ãããã ããããŸããããã®é£ã®å€ã§ããã¬ãŒã ã倱ãããŸãã æè¯ã®çµæã¯900ãã€ãã§èŠ³å¯ãããŸãããã1000以äžã§ã¯ã»ãšãã©ãã¬ãŒã æ倱ãä¿èšŒãããŸãã
æé/ FPS
é©ããããšã«ã1ç§ãããã®ãã¬ãŒã æ°ã®å€ã¯ããã»ã©å€§ããªåœ±é¿ãäžããŸããã§ãããå°ããªå€ã¯å šäœã®éä¿¡æéãé床ã«å¢å ããã倧ããªå€ã¯ãã¬ãŒã ã倱ããã確çãå¢å ãããŸããã ãããã®ãã¹ãã§å€æããæé©å€ã¯ããã¹ãããããã€ã¹ã®1ç§ããã6ã7ãã¬ãŒã çšåºŠã§ãã
æé/ãšã©ãŒä¿®æ£ã¬ãã«
ãšã©ãŒä¿®æ£ã¬ãã«ã¯ããã¡ã€ã«è»¢éæéãšåé·æ§ã¬ãã«ã®éã«æ確ãªé¢ä¿ã瀺ããŸããããããã¯é©ãããšã§ã¯ãããŸããã ããã§ã®æ確ãªåè ã¯ãäœïŒLïŒã¬ãã«ã®è£æ£ã§ããåé·ããŒã¿ãå°ãªãã»ã©ãåãããŒã¿ãµã€ãºã®ã¹ãã£ããŒã®QRã³ãŒããèªã¿ããããªããŸãã å®éããã®å®éšã§ã¯åé·æ§ã¯ãŸã£ããå¿ èŠãããŸããããæšæºã§ã¯ãã®ãããªãªãã·ã§ã³ã¯æäŸãããŠããŸããã
ãã¡ããããã客芳çãªããŒã¿ã®å Žåããã®ãã¹ãã¯ããŸããŸãªããã€ã¹ãšããŸããŸãªç»é¢ã§äœçŸåãå®è¡ããå¿ èŠããããŸãããç§ã®é±æ«ã®å®éšã§ã¯ååãªçµæã§ããã
çµè«
ãã®é¢çœããããžã§ã¯ãã¯ãã¢ãã¡ãŒã·ã§ã³åãããã³ãŒããä»ããäžæ¹åã®ããŒã¿è»¢éã確ãã«å¯èœã§ããããšã蚌æããããããçš®é¡ã®ãããã¯ãŒã¯ããªãå Žåã«å°éã転éããå¿ èŠãããç¶æ³ã«ã¯ãéåžžã«é©ããŠããŸãã ç§ã®æ倧ã®çµæã¯çŽ9KB /ç§ã§ããããã»ãšãã©ã®å Žåãå®éã®é床ã¯1ã2KB /ç§ã§ããã
ãŸããGomobileãšGopherJSãVectyã§æ¥åžžçãªåé¡è§£æ±ºããŒã«ãšããŠäœ¿çšããããšããšãŠã楜ããã£ãã§ãã ãããã¯éåžžã«æçãããããžã§ã¯ãã§ãããåªããäœæ¥é床ãåããŠãããã»ãšãã©ã®å Žåããæ©èœããã ããã®çµéšãäžããŸãã
æçµçã«ãå®è£ ãããã®ãæ確ã«ããã£ãŠãããšãã«Goã§ã©ãã ãçç£æ§ãé«ãããè³è³ããŸã-éåžžã«çããå€æŽã-ãã¢ã»ã³ãã«ã-ããã§ãã¯ããµã€ã¯ã«ã«ãããå€ãã®å ŽåãåçŽãªã³ãŒããšæ§é å ã®ã¯ã©ã¹éå±€ã®æ¬ åŠãè©Šãããšãã§ããŸãããã°ã©ã ã䜿çšãããšãå€åºå ã§ç°¡åãã€ç°¡åã«ãããããªãã¡ã¯ã¿ãªã³ã°ã§ããŸããæåããèšèªã«çµã¿èŸŒãŸããçŽ æŽãããã¯ãã¹ãã©ãããã©ãŒã ã«ãããã³ãŒããäžåºŠæžãã ãã§ããµãŒããŒãWebã¯ã©ã€ã¢ã³ãããã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãã åæã«ãããã«äœ¿çšã§ããååãªããã©ãŒãã³ã¹ã«ãããããããæé©åãšé«éåã®ããã®ååãªã¹ããŒã¹ããŸã ãããŸãã
ãããã£ãŠãGomobileãGopherJSãäžåºŠãè©Šããããšããªãå Žåã¯ã次ã®æ©äŒã«è©Šãããšããå§ãããŸãã æéã¯ããããŸããããŠã§ããã¢ãã€ã«ã®éçºã«ãããŠãŸã£ããæ°ããæ©äŒãéãå¯èœæ§ããããŸãã ãè©Šããã ããïŒ