20XX 幎ã人é¡ã¯ãªãŒã¬ãã€ã¶ãŒ X41 æ°ã®äž»å¬ããããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã³ã³ãã¹ããXSUCONãã«å€¢äžã«ãªã£ãŠããããããéå¬çŽåãšãªã£ãããæ¥ãææ°çã® XSUCON ããŒã¿ã«ãµã€ãã«ã¯ããã©ãŒãã³ã¹ã«åé¡ãããããšãçºèŠããã®ãŸãŸã§ã¯å€ãã®äººã«ãšã£ãŠäžæºã®æ®ã倧äŒã«ãªã£ãŠããŸãã ãããããªã㯠XSUCON éå¶ããŒã ã®äžäººãšããŠããã©ãŒãã³ã¹ãæ¹åãã€ã€ããŸã倧äŒã倧ãã«çãäžããéžæããã³ãªãŒãã£ãšã³ã¹ãæºè¶³ãããªããã°ãªããªãã
課é¡ã¢ããªã±ãŒã·ã§ã³ XSUCON ã®ä»æ§ã«ã€ããŠã¯ãXSUCON ã¢ããªã±ãŒã·ã§ã³ããã¥ã¢ã«ãåç §ããŠãã ããã
ISUCON10 æ¬éžã®ç«¶æ (å®ç«¶æ) ã¯äžèšããŒã¿ã«ãµã€ããå©çšããŸãã äºåã«ç»é²ããæ å ±ãçšããŠãã°ã€ã³ããŠãã ããã ãªãããã®ããŒãžã¯ç«¶æéå§æå»ãŸã§ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
ããŒã¿ã«ãµã€ãã§ã¯ããã³ãããŒã¯ã®å®è¡ã»çµæç¢ºèªã質å/ãµããŒãäŸé Œã®éä¿¡ããªãŒããŒããŒãã®ç¢ºèªãã§ããŸãã
https://portal.isucon.net/contestant
ããŒã¿ã«ãµã€ãäžã®ãªãŒããŒããŒãã®ã¹ã³ã¢ã¯ãç«¶æçµäºåã® 1 æéã¯ä»ããŒã ã®ã¹ã³ã¢ãæŽæ°ãããªããªããèªããŒã ã®ã¹ã³ã¢ã®ã¿ç¢ºèªãå¯èœã«ãªããŸãã
ISUCON 10 ãµããŒã Discord ãµãŒãã¯ç«¶ææéååŸã¯ãã¹ãŠã®ãã£ã³ãã«ãçºèšäžå¯ãšãªããŸãã ããŒã¿ã«ãµã€ããéããŠè³ªåããµããŒãäŸé Œãéä¿¡ããããšãã§ããŸãã®ã§ããã¡ããå©çšããŠãã ããã
ãã ããéžæã¯ Discord ã®ç¢ºèªãå¯èœãªç¶æ ãéç¥ãåãåããç¶æ ãç¶æããŠãã ããã ããã¯ããŒã¿ã«ã§éä¿¡ãã質å/ãµããŒãäŸé Œã®å 容ãéå¶ã確èªããäžã§ããªã¢ã«ã¿ã€ã ã§ã®ãã£ãããå¿ èŠã ãšå€æããå Žåããã¡ããã Discord äžã§ãã©ã€ããŒããã£ã³ãã«ãäœæããmention ã®äžãã³ãããè¡ãå Žåãããããã§ãã
ãŸããã¢ããŠã³ã¹çã Discord ã§å®æœãããŸãã
äºåã«çšæããããµãŒã㯠3 å°ããããããã®ãµãŒãã« SSH ãçšããŠæ¥ç¶ãç«¶æãè¡ããŸãã ããŒã¿ã«å³äžã«è¡šç€ºãããŠããããŒã ID ãå ã«ã以äžã® gist ããå²ãåœãŠãããŠãããèžã¿å°çš IP ã¢ãã¬ã¹ããšãããŒã ãµãããããã確èªããŠãã ããã
[REDUCTED (å ¬éçã®ããæ¥ç¶æ å ±ã¯éå ¬éã§ã)]
ç«¶æã«çšãã 3 å°ã®ãµãŒãã¯ããŒã ã®ãµããããã«å¯ŸããŠãããã 101 ~ 103 ã第 4 ãªã¯ããããšãªããŸããå ·äœç㪠IP ã¢ãã¬ã¹ã¯ããŒã¿ã«ã«ãŠç¢ºèªããããšãã§ããŸãã
äžèšã®ãµãŒãã«æ¥ç¶ããããã«èžã¿å°ãçµç±ã㊠SSH æ¥ç¶ãè¡ããŸãã ssh_config(5) ã®äŸã以äžã«ç€ºããŸãããªãããããŸã§äŸç€ºã§ããå¿ ã以äžã®èšå®ãå©çšããå¿ èŠã¯ãããŸããã
Host isucon-bastion
HostName <èžã¿å°çšIPã¢ãã¬ã¹>
Port [REDUCTED]
User isucon
Host isucon-server
ProxyJump isucon-bastion
User isucon
HostName <èªããŒã ãµãŒãã®IPã¢ãã¬ã¹>
ãªããèžã¿å°çšã®ãµãŒãã¯ããŒãçªå· [REDUCTED] ã§ãã°ã€ã³ããããšãã§ããŸãã
ç«¶æçµäºåŸã¯ããã³ãããŒã¯èµ°è¡æçžŸã®è¿œè©Šãè¡ããŸãã®ã§ãDiscord ãµãŒã ããã³ http://isucon.net/ ã«ãŠéå¶ãããç¥ããããããŸã§ããµãŒãã®æäœã¯ããªãã§ãã ããã ç«¶æçµäºåŸã®äœæ¥ã¯çŠæ¢è¡çºã«ããããŸãã
ç«¶æã«å©çšã§ããèšç®æ©è³æºã¯éå¶åŽãçšæãã 3 å°ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ã§ãã å€éšã®ã¡ããªã¯ã¹èšæž¬ãµãŒãã¹ã®äœ¿çšã®ã¿ç¹äŸãšããŠèš±å¯ããŸãããã¹ã³ã¢ãåäžããããããªã广ãæã€ãã®ã§ãã£ãŠã¯ãããŸããã
以äžã®é åºã§äœæ¥ãéå§ããŠãã ããã
äžèšã«èšèŒãããµãŒããŒã«å¯Ÿã㊠SSH æ¥ç¶ããŠãã ããã ãã°ã€ã³ã«ã¯åå ç»é²ã«å©çšãã ( = ããŒã¿ã«ã®ãã°ã€ã³ã«å©çšããŠãã) GitHub ã¢ã«ãŠã³ãã«ç»é²ãããŠãã SSH éµãå©çšããŸãã
SSH ãã°ã€ã³ã®ãŠãŒã¶å㯠isucon ã§ãã
éèŠïŒœisucon 以å€ã®ãŠãŒã¶ãŒã«é¢ããŠããŠãŒã¶ãŒåé€ãæ¢åã®å
¬ééµã®åé€ããã®ä» sshd ã®èšå®å€æŽçãè¡ã£ãããšã«ããéå¶ã«ãã远詊ããããªãããšãã§ããªãå Žåã¯ãå€±æ ŒãšããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ Web ãã©ãŠã¶ããå©çšããããšãã§ããŸãã
èžã¿å°ãçµç±ãããã©ãŠã¶ã¢ã¯ã»ã¹ã«ã¯ã SSH ã«ãããããŒã«ã«ããŒããã©ã¯ãŒãã£ã³ã° ãªã©ãçšããŠè¡šç€ºããããšãã§ããŸãã ãã以å€ã®æ¹æ³ã§åäœç¢ºèªããŠãããŸããŸããã
ãªããåæç¶æ ã§ã¯ã¢ããªã±ãŒã·ã§ã³ã®åäœã«å¿ èŠãªããŒã¿ãäžè¶³ããŠãããããã¢ããªã±ãŒã·ã§ã³ããã©ãŠã¶ããåäœç¢ºèªããããã«ã¯ãäžåºŠè² è·èµ°è¡ãå®è¡ããŠãã ãã (åŸè¿°)ã
以äžã« Team001 ã«ãããããŒã«ã«ããŒããã©ã¯ãŒãã£ã³ã°ãå®è¡ããã³ãã³ããäŸç€ºããŸãã
ããã¯ããªã¢ãŒããã¹ã isucon-server ã« SSH æ¥ç¶ãããäžã§ããããŒã«ã«ã® localhost:10443 ãžã® TCP æ¥ç¶ããããªã¢ãŒããã¹ããéã㊠10.160.1.101:443 ãžè»¢éããããšããã³ãã³ãã§ãã
$ ssh -L localhost:10443:10.160.1.101:443 isucon-serverãµãŒããŒãžé
眮ãããŠãã TLS èšŒææžã® subject name 㯠*.t.isucon.dev ãšãªã£ãŠããŸãã *.t.isucon.dev ã® DNS ã¬ã³ãŒã㯠127.0.0.1, ::1 ãèšå®ãããŠããããã t.isucon.dev ã®ãµããã¡ã€ã³ãå©çšã㊠localhost ã®ããŒããžã¢ã¯ã»ã¹ããããšã§ãTLS èšŒææžæ€èšŒãšã©ãŒãåé¿ããããšãã§ããŸãã
以äžãèžãŸãããšãäžèšã®ã³ãã³ãäŸãå®è¡ããŠããå Žåã https://xsuportal.t.isucon.dev:10443 ã§ã¢ããªã±ãŒã·ã§ã³ãžã¢ã¯ã»ã¹ããããšãã§ããŸãã
以äžã¯ https://xsuportal.t.isucon.dev:10443 ã§ã¢ããªã±ãŒã·ã§ã³ãžã¢ã¯ã»ã¹ã§ããããã«èšå®ããå Žåã®äŸã§ãã
- ä»®æ³ãªãŒãã£ãšã³ã¹åãããŒãž
- ä»®æ³éžæåãããŒãžïŒèŠãã°ã€ã³ïŒ
- ä»®æ³éå¶åãããŒãžïŒèŠãã°ã€ã³ïŒ
- https://xsuportal.t.isucon.dev:10443/admin
- ä»®æ³éå¶ãŠãŒã¶ïŒadminïŒã§ã®ãã°ã€ã³ãå¿ èŠã§ãã
è² è·èµ°è¡ãæ£åžžã«å®è¡ãããå Žåäžèšã® 4 ãŠãŒã¶ãç»é²ãããã®ã§ãåäœç¢ºèªã«ãå©çšãã ããããã°ã€ã³ã¯ãããããŒãžïŒä»®æ³ãªãŒãã£ãšã³ã¹åãããŒãžïŒããè¡ãããšãã§ããŸãã
| ãã°ã€ã³ ID (contestant_id) | ãã¹ã¯ãŒã | åè |
|---|---|---|
| admin | admin | ä»®æ³éå¶ |
| isucon1 | isucon1 | ä»®æ³éžæ |
| isucon2 | isucon2 | ä»®æ³éžæ |
| isucon3 | isucon3 | ä»®æ³éžæ |
åæç¶æ
ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåæååŠçïŒPOST /initializeïŒã«ãããŠããŒã¿ããŒã¹ã®ã¬ã³ãŒãã¯åé€ããŸããã¹ããŒãã¯åæåãããŸãããã¹ããŒããåæç¶æ
ã«æ»ãããå Žåã¯ã以äžã® SQL ãã¡ã€ã«ããå©çšãã ããã
~isucon/webapp/sql/schema.sql
ç«¶æãµãŒããŒã® ~isucon/webapp/tools ãã£ã¬ã¯ããªä»¥äžã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœç¢ºèªã«å©çšã§ããäžèšã®ã¹ã¯ãªããã眮ããŠãããŸãã
詳ããäœ¿ãæ¹ã¯ ~isucon/webapp/tools/README.md ãåç
§ããŠãã ããã
| File | 説æ |
|---|---|
add_benchmark_job |
ä»®æ³ãã³ãããŒã¯ãžã§ãã®ãšã³ãã¥ãŒãè¡ããŸãã |
finish_benchmark_job |
ä»®æ³ãã³ãããŒã¯ãµãŒããã 1 ä»¶ããã¥ãŒããä»®æ³è² è·èµ°è¡ãå®äºãããŸãã |
show_notifications |
notifications ããŒãã«ã®äžèº«ããã³ãŒãããŠè¡šç€ºããŸãã |
è² è·èµ°è¡ã¯ããŒã¿ã«ãµã€ãäžãããªã¯ãšã¹ãããŸãã ããŒã¿ã«ãµã€ãã® ç«¶æåå è åãããŒãž ã«ã¢ã¯ã»ã¹ãã "Job Enqueue Form" ããè² è·èµ°è¡å¯Ÿè±¡ã®ãµãŒããŒãéžæã"Enqueue" ãã¯ãªãã¯ã§è² è·èµ°è¡ã®ãªã¯ãšã¹ããè¡ãããé æ¬¡éå§ãããŸãã
ãªããè² è·èµ°è¡ãåŸ æ©äž (PENDING) ãããã¯å®è¡äž (RUNNING) ã®éã¯è¿œå ã® Enqueue ãè¡ãããšã¯ã§ããŸããã
äžèšã®èšèªã§ã®å®è£ ãæäŸãããŠããŸãã
- Ruby
- Rust
- Go
- Node.js
åæç¶æ ã§ã¯ Ruby ã«ããå®è£ ãèµ·åããŠããŸãã
åèšèªå®è£ 㯠systemd ã§ç®¡çãããŠããŸãã äŸãã°ãåèå®è£ ã Ruby ãã Go ã«åãæ¿ããã«ã¯æ¬¡ã®ããã«ããŸãã
sudo systemctl disable --now xsuportal-web-ruby.service
sudo systemctl disable --now xsuportal-api-ruby.service
sudo systemctl enable --now xsuportal-web-golang.service
sudo systemctl enable --now xsuportal-api-golang.serviceãµãŒããŒã«ã¯åæç¶æ
ã§ãå²ãåœãŠãããŠãã 3 å°ã®ãµãŒããŒã® IP ã¢ãã¬ã¹ + ãã³ãããŒã«ãŒã® IP ã¢ãã¬ã¹ãäºåã« /etc/hosts ãžç»é²ãããŠããŸãããããã®ãã¹ãåã¯èªç±ã«å©çšããŠæ§ããŸãã (ãããå©çšããªããŠãæ§ããŸãã)ã
äŸ:
isu1.t.isucon.dev 10.160.1.101
isu2.t.isucon.dev 10.160.1.102
isu3.t.isucon.dev 10.160.1.103
isubench.t.isucon.dev 10.160.1.104
åè¿°ã®éãããã以å€ã® *.t.isucon.dev ã® FQDN ã«é¢ããŠã¯ 127.0.0.1 (IPv6 㯠::1) ã® DNS ã¬ã³ãŒããç»é²ãããŠããŸãããŸãããµãŒããŒã«é
眮ãããŠãã TLS èšŒææžã¯ subject name ã *.t.isucon.dev ã§ããããããã®ååã§ããã° TLS èšŒææžã®æ€èšŒãéãç¶æ
ã§ HTTPS æ¥ç¶çãè¡ãããšãã§ããããã«ãªã£ãŠããŸãã
ãã³ãããŒã«ãŒã«ãåæ§ã® /etc/hosts ãšã³ããªãç»é²ãããŠããŸããè² è·èµ°è¡ã®éã¯ããã³ãããŒã«ãŒããè² è·èµ°è¡ã®å¯Ÿè±¡ãšãªããµãŒããŒã«å¯Ÿå¿ãã isu1 - isu3.t.isucon.dev ã®ãã¹ãåãå©çšãã HTTPS æ¥ç¶ãè¡ãããŸãããã®éãTLS èšŒææžæ€èšŒãéãå¿
èŠãããæšãçæããŠãã ããã
ãŸãããã³ãããŒã«ãŒã® IP ã¢ãã¬ã¹ã¯ isubench.t.isucon.dev ãšããŠç»é²ãããŠããŸãããã® /etc/hosts ãšã³ããªã«ã€ããŠãç·šéããŠãæ§ããŸãããããã®å Žåã«è² è·èµ°è¡ãæ£ããåäœãããã¯éå¶ã¯ä¿èšŒããŸããã
éå¶ã管çãããã³ãããŒã«ãŒã«ã€ããŠã¯ãGoogle Public NTP ãµãŒã㌠(time1.google.com, time2.google.com, time3.google.com, time4.google.com) ãš systemd-timesyncd ãå©çšããŠæå»åæãèšå®ãããŠããŸãã
éžæãžæäŸããããµãŒããŒã«ã€ããŠããåæç¶æ ã§åæ§ã®èšå®ããããŠããŸãã
ãã³ãããŒã«ãŒã«ããè² è·èµ°è¡ã¯ä»¥äžã®ããã«å®æœãããŸãã
- åæååŠçã®å®è¡
POST /initialize(20 ç§ã§ã¿ã€ã ã¢ãŠã) - ã¢ããªã±ãŒã·ã§ã³äºææ§ãã§ã㯠(æ°ç§ïœæ°åç§)
- åæååŠçã®å®è¡
POST /initialize(20 ç§ã§ã¿ã€ã ã¢ãŠã) - è² è·èµ°è¡ (60 ç§)
- åŸ ã¡æé (5 ç§)
- æŽåæ§ãã§ã㯠(æ°ç§ãæ°åç§)
åæååŠç㯠2 åå®è¡ããããããã 20 ç§ä»¥å ã«å®äºããå¿ èŠããããŸãããããè¶ ããå Žåãè² è·èµ°è¡ã¯å€±æã«ãªããŸãã
ãã³ãããŒã«ãŒã¯è² è·èµ°è¡çµäºã®ã®ã¡ã5 ç§åŸ ã£ãŠããæŽåæ§ãã§ãã¯ãè¡ããŸãã ãžã§ããã¥ãŒã«ããé å»¶åŠççã远å ããå Žåã¯ããã®ã¿ã€ãã³ã°ãŸã§ã«åŠçã®æŽåæ§ããšã£ãŠãã ããã
è² è·èµ°è¡çµäºåŸã5 ç§çµã£ãŠãã¬ã¹ãã³ã¹ãè¿ã£ãŠããŠããªããªã¯ãšã¹ãã¯ãã¹ãŠåŒ·å¶çã«åæãããã¿ã€ã ã¢ãŠããšããŠæ°ããããŸãã
ã¢ããªã±ãŒã·ã§ã³äºææ§ãã§ãã¯ãããã¯æŽåæ§ãã§ãã¯ãéããªãã£ãå Žåããã®è² è·èµ°è¡ã¯å€±æãšãªããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯äžèšã®æ¡ä»¶ã«ãããŠãã£ãã·ã¥ãèªããããŠããŸãã
GET /api/audience/dashboard- ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿ã®æŽæ°ããæå€§ 1 ç§å€ãæ å ±ãè¿ãããšãã§ããŸãããã ãããã³ãããŒã«ãŒãæ€ç¥ããªãéãã¯ããããå€ãæ å ±ãè¿ããŠãæ§ããŸããã
- äžèšä»¥å€ã® HTTP ãªã¯ãšã¹ã
- ããŒã¿ã®æŽæ°ãå³æåæ ãããŠããããšãæåŸ ããŠãã³ãããŒã«ãŒã¯æ€èšŒãè¡ããŸãããã ãããã³ãããŒã«ãŒãæ€ç¥ããªãéãã¯å€ãæ å ±ãè¿ããŠãæ§ããŸããã
ãŸããå®ãã³ãããŒã«ãŒã¯äžè¬çãªãã©ãŠã¶ã®æåãæš¡ãã Conditional GET ã«å¯Ÿå¿ããŠããŸããã¢ããªã±ãŒã·ã§ã³ã¯ã Cache-Control ããã®ä»å¿
èŠãªã¬ã¹ãã³ã¹ããããè¿ãããšã§ããã³ãããŒã«ãŒãã Conditional GET ãªã¯ãšã¹ããåããããšãã§ããŸããããŒã¿ãæŽæ°ãããŠããªãããšãæåŸ
ããããªã¯ãšã¹ãã«ãããŠã¯ã304 Not Modified ãè¿ãããããããã¯ãã©ãŠã¶ã®ãã£ãã·ã¥æå¹æéã®å¶åŸ¡ã«ãã£ãŠãªã¯ãšã¹ããçºçããŠããªãã£ããããŠãããã³ãããŒã«ãŒã¯ãããã®ãã£ãã·ã¥ãå©çšããŠã¬ã¹ãã³ã¹ããã£ããã®ãšã¿ãªããŸãã
ãªãããã³ãããŒã«ãŒå
ã®ãŠãŒã¶ãŒã¯ç¬ç«ããŠããããã Cache-Control: public çãæå®ãããŠãããšããŠãããŠãŒã¶ãŒå士ã§ãã£ãã·ã¥ãå
±æããããšã¯ãããŸãããããªãã¡ããŠãŒã¶ãŒ (ä»®æ³éžæãä»®æ³ãªãŒãã£ãšã³ã¹ãä»®æ³éå¶ç) ã®éã§ãã©ãŠã¶ãã£ãã·ã¥ã䜿ãåãããããšã¯ãããŸããã
å®ãã³ãããŒã«ãŒã«ãããŠèšå®ãããŠããã¿ã€ã ã¢ãŠãå€ã¯äžèšã®éãã§ãã
- ä»®æ³ããŒã¿ã«
POST /initialize- 20 ç§ä»¥å ã«ã¬ã¹ãã³ã¹ãè¿ãå¿ èŠããããŸãããããè¶ ããå Žåãè² è·èµ°è¡ã¯å³æå€±æããŸãã
GET /api/contestant/dashboard,GET /api/audience/dashboard- 2 ç§ä»¥å ã«ã¬ã¹ãã³ã¹ãè¿ãå¿ èŠããããŸãããããè¶ ããå ŽåãåŸè¿°ã®ã¹ã³ã¢èšç®ã«åŸãæžç¹ã®å¯Ÿè±¡ãšãªããŸãã
- äžèšä»¥å€ã® HTTP ãªã¯ãšã¹ã
- 10 ç§ä»¥å ã«ã¬ã¹ãã³ã¹ãè¿ãå¿ èŠããããŸãããããè¶ ããå ŽåãåŸè¿°ã®ã¹ã³ã¢èšç®ã«åŸãæžç¹ã®å¯Ÿè±¡ãšãªããŸãã
- ä»®æ³ãã³ãããŒã¯ãµãŒã
- ã¿ã€ã ã¢ãŠãã¯èŠå®ããŸããã
ãªããè² è·èµ°è¡çµäºãã 5 ç§çµã£ãæç¹ã§ã¬ã¹ãã³ã¹ãè¿ããŠããªããªã¯ãšã¹ãã«ã€ããŠã¯åŒ·å¶çã«åæãããäžèšã®ã¿ã€ã ã¢ãŠãæéã«ãããããã¿ã€ã ã¢ãŠããšããŠåŠçãããŸãã
è² è·èµ°è¡ã®ã¹ã³ã¢ã¯ä»¥äžã®èšç®åŒã«ãã£ãŠç®åºãããŸãã
ã¹ã³ã¢ = (ä»®æ³éžæã¹ã³ã¢ * 倧äŒèŠæš¡ããŒãã¹) + ä»®æ³ãªãŒãã£ãšã³ã¹ã¹ã³ã¢ - æžç¹
- ä»®æ³éžæã¹ã³ã¢
- ä»®æ³è² è·èµ°è¡ã 1 åå®äºãã (10 ç¹)
- ä»®æ³éžæã®è³ªåïŒClarificationïŒã«å¯ŸããŠä»®æ³éå¶ããåçãè¡ããããšãããã®åçã質åè ã®ä»®æ³ããŒã ãåããŠç¢ºèªãã ïŒ10 ç¹ïŒ
- ä»®æ³éžæãããã·ã¥ããŒãã衚瀺ãã (2 ç¹)
- 倧äŒèŠæš¡ããŒãã¹
- ä»®æ³éžæã®åå æ°ã«ããããŒãã¹ (åŸè¿°)
- ä»®æ³ãªãŒãã£ãšã³ã¹ã¹ã³ã¢
- ä»®æ³ãªãŒãã£ãšã³ã¹ãããã·ã¥ããŒãã衚瀺ãã (10 åããšã« 1 ç¹)
倧äŒèŠæš¡ããŒãã¹ã¯ãä»®æ³ã³ã³ãã¹ãã«åå ããä»®æ³éžæã®æ°ïŒteam ã«æå±ããŠãã contestant ã®ç·æ°ïŒã«ãã£ãŠã以äžã®è¡šã«åŸã£ãŠç®åºãããŸãã
| åå ããä»®æ³éžæã®æ° | 倧äŒèŠæš¡ããŒãã¹ïŒåçïŒ |
|---|---|
| 1-59 | 1.0 |
| 60-119 | 1.2 |
| 120-179 | 1.4 |
| 180-239 | 1.6 |
| 240-299 | 1.8 |
| 300- | 2.0 |
è² è·èµ°è¡æã«çºçãããšã©ãŒã«ãã£ãŠã¯ãæžç¹ããããã峿倱æïŒfailïŒãããããŸããæ¡ä»¶ã¯ä»¥äžã®éãã§ãã
- ã¢ããªã±ãŒã·ã§ã³äºææ§ãã§ãã¯ããããã¯æŽåæ§ãã§ãã¯ã«å€±æãã
- 1 å以äžã§å³æå€±æ
- è² è·èµ°è¡äžã«ã¢ããªã±ãŒã·ã§ã³èµ·å ã®èŽåœçãªåé¡ãçºçãã
- 1 å以äžã§å³æå€±æ
- (äŸãšããŠãä»®æ³ããŒã ç»é²ãã§ãŒãºäžã«ã1ä»®æ³ããŒã ãç»é²ãã§ããªãã£ãå Žåã該åœããŸã)
- HTTP ã¹ããŒã¿ã¹ã³ãŒããã¬ã¹ãã³ã¹å
容ãªã©ã«èª€ãããã
- 1 åãããæžç¹ 50 ç¹
- 100 åãè¶ããã峿倱æ
- ãªã¯ãšã¹ããã¿ã€ã ã¢ãŠãããå Žå (æ¡ä»¶ã¯åé
ã«èšèŒ)
- 100 åãããæžç¹ 100 ç¹
- 峿倱æã¯ç¡ã
èšç®ã®çµæãã¹ã³ã¢ã 0 ç¹ä»¥äžã«ãªã£ãå Žåã¯å€±æãšããŠæ±ãããŸãããŸãã峿倱æãšãªã£ãã±ãŒã¹ã«ã€ããŠãã0 ç¹ãšæ°ããããŸãã
ç«¶ææéäžã®ã¹ã³ã¢ããæåã« 20,000 ãè¶ ãã 1 ããŒã ãç¹å¥è³ãšããŸãã
ç«¶ææéçµäºåŸãåèµ·ååŸã«éå¶ã«ãã£ãŠå®è¡ãããè² è·èµ°è¡ã®ã¹ã³ã¢ãæçµã¹ã³ã¢ãšããŸãã
- å
šããŒã ã®ãµãŒããŒãåèµ·åãã10 å以äžåŸ
ã€
- éå¶ããµãŒããŒäžã§
sudo systemctl poweroffã宿œãããµãŒããŒã®ã·ã£ããããŠã³ã確èªããåŸããµãŒããŒãèµ·åããŸãã - ãé¡ã: åèµ·åã®ãã¹ãã®ãããæå³çã« poweroff ããããµãŒããŒã®èµ·åäŸé Œã«ã€ããŠãéå¶ã§ã¯å¯Ÿå¿ããäœåããªãããã¹ããšãã©ãŒãã§ã®å¯Ÿå¿ã«ãªããŸãã確å®ã«ã·ã¹ãã ãåèµ·åãããããåèµ·åæé ããã®ããã«å®çŸ©ããŠããŸãããç«¶ææéäžã«åèµ·åããã¹ãããå Žåã
sudo systemctl rebootçã§å®æœããŠãã ãã
- éå¶ããµãŒããŒäžã§
- å
šããŒã ã®ãã³ãããŒã¯ãéå¶ããå®è¡
- åããŒã ã®ãç«¶ææéäžæåŸã®è² è·èµ°è¡ã®å¯Ÿè±¡ãšãªã£ããµãŒããŒãžè² è·èµ°è¡ãè¡ãã
- èšæž¬ã¯åããŒã 3 åãã€å®æœããã
- (2) ã§å®æœããæåŸã®è² è·èµ°è¡ã fail ãšãªã£ãŠããããŒã ã«é¢ããŠã¯ãååºŠèšæž¬ã宿œãã
- ãã®éãå床 fail ãšãªã£ãããŒã ã¯å€±æ Œãšããã
- å
šããŒã ã®ãµãŒããŒã (1) ãšåæé ã§åèµ·åãããã©ãŠã¶ããåäœç¢ºèªãè¡ã
- 10 åãåŸ ããã«ãã§ãã¯ãéå§ããããåäœã確èªã§ããªãã£ãå Žå㯠10 åçµéãåŸ ã€ã
- ããã§æ£åžžãªåäœã確èªã§ããªãã£ãããŒã ã¯å€±æ Œãšããã
- (2) ã®è² è·èµ°è¡ã§èšæž¬ããã¹ã³ã¢ã®ãã¡ããã®äžã§æãé«ãã¹ã³ã¢ããã®ããŒã ã®æçµã¹ã³ã¢ãšãã
- fail ã«ã€ããŠã¯ 0 ç¹ãšæ°ããã
- éå¶ã«ãããã©ãŠã¶ããã®åäœç¢ºèªã®éãéå¶ã¯
POST /initializeããªã¯ãšã¹ãããªãæšçæããããšã - ç«¶ææéçµäºåŸã¯ãéžæã¯äžãããããµãŒããŒã«ãããŠäžåã®æäœãè¡ããªãã§ãã ãããç«¶ææéçµäºåŸã®æäœã¯å€±æ ŒãšãªããŸãã
éžæã¯äž»å¬è ãã Web ã¢ããªã±ãŒã·ã§ã³ (åé¡) ãäžããããéžæã¯ç«¶ææéå ã«ãã® Web ã¢ããªã±ãŒã·ã§ã³ã®é«éåãè¡ããéžæã¯é«éåãããå®è£ (åç) ãäœæããæãäž»å¬è ããäžãããããœãããŠã§ã¢ (åæå®è£ ) ãããŒã¹ã«å®è£ ããŠãè¯ãããããªããŠãè¯ãã ã©ã®ããã°ã©ãã³ã°èšèªã§åæå®è£ ãæäŸããããã¯äž»å¬è ã¯äºåã«ã¢ããŠã³ã¹ãããããã®åã ã®æ§èœãäžèŽããããšã¯ä¿èšŒãããªãã
é«éåã®éãäž»å¬è ããåé¡ãšããŠäžãããã Web ã¢ããªã±ãŒã·ã§ã³ããã以äžã®éšåã¯å€æŽããªãããšã
- ã¢ã¯ã»ã¹å ã® URIããã ããµãŒããŒåŽã§çæããéšåïŒID ãªã©ïŒã¯æåçš®ïŒ[0-9] ã [0-9a-zA-Z_] ãªã©ïŒãå€ããªãç¯å²ã§èªç±ã«çæããŠãè¯ã
- ã¬ã¹ãã³ã¹ (HTML ã® DOM, JSON ãªããžã§ã¯ãç) ã®æ§é ïŒè¡šç€ºã«åœ±é¿ããªãç¯å²ã§ã®ç©ºçœæåã®å¢æžã¯èš±å¯ãããïŒ
- JavaScript/CSS ãã¡ã€ã«ã®å 容
- ç»åããã³åç»çã®ã¡ãã£ã¢ãã¡ã€ã«ã®å 容
åãµãŒãã«ããããœãããŠã§ã¢ã®å ¥ãæ¿ããèšå®ã®å€æŽãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å€æŽããã³å ¥ãæ¿ããªã©ã¯äžåçŠæ¢ããªãã ãã³ãããŒã¯äžã«ããŒã¿ã«ã»ããã¥ã¢ã«ã»ã¬ã®ã¥ã¬ãŒã·ã§ã³ãšãã£ããäž»å¬è ã®æç€ºä»¥å€ã§å©çšãèªãããããµãŒããŒä»¥å€ã®å€éšãªãœãŒã¹ã䜿çšããè¡çº(ä»ã®ã€ã³ã¹ã¿ã³ã¹ã«åŠçãå§è²ãããªã©) ã¯çŠæ¢ããã ãã ãã¢ãã¿ãªã³ã°ããã¹ããéçºãªã©ã«ãããŠã¯ãPC ãå€éšã®ãµãŒããŒãå©çšããŠãæ§ããªãã
èš±å¯ãããäºé ã«ã¯ãäŸãšããŠä»¥äžã®ãããªäœæ¥ãå«ãŸããã
- è€æ°å°ãããµãŒããŒã®åœ¹å²ã®å€æŽ
- DB ã¹ããŒãã®å€æŽãã€ã³ããã¯ã¹ã®äœæã»åé€
- ããŒã¿ããŒã¹ã«å©çšããããã«ãŠã§ã¢ã®å€æŽ
- ãã£ãã·ã¥æ©æ§ã®è¿œå ããžã§ããã¥ãŒæ©æ§ã®è¿œå ã«ããé å»¶æžã蟌ã¿
- Web Push å®è£ ã®è¿œå ïŒXSUCON ã¢ããªã±ãŒã·ã§ã³ããã¥ã¢ã«ãåç §ïŒ
- HTTP ã¬ã¹ãã³ã¹ã®å§çž®
- ä»ã®èšèªã«ããåå®è£
ãã ã以äžã®äºé ã«çæããããšã
- ã³ã³ãã¹ãé²è¡çšã®ã¡ã³ããã³ã¹ã³ãã³ããæ£åžžã«åäœããããäºææ§ãä¿ã€ããš
- ãµãŒãåèµ·ååŸã«ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒããæ£åžžåäœããç¶æ ãç¶æããããš
- ãã³ãããŒã¯å®è¡æã«ã¢ããªã±ãŒã·ã§ã³ã«æžã蟌ãŸããããŒã¿ã¯åèµ·ååŸã«ãååŸã§ããããš
éžæã¯äž»å¬è ãžè³ªåãéä¿¡ããããšãã§ãããç«¶ææéäžã¯ååãšããŠããŒã¿ã«ãããç«¶æååŸã¯ Discord äžã®ãµããŒããã£ãããå©çšããã質åã¯ç«¶æå 容ã»ããã¥ã¢ã«ã»ã¬ã®ã¥ã¬ãŒã·ã§ã³çã«å¯Ÿããçåç¹ã»æç¢ºã«ãããäºé ã®ç¢ºèªãããµãŒããŒé害ãªã©ã®ãã©ãã«å ±åã»ãµããŒãäŸé Œã«å©çšããããšãã§ããããããã«éããªããäž»å¬è ã¯è³ªåãããå 容ã«ã€ããŠç«¶æã®äžç°ã§ããå Žåã¯ãåçã§ããªãæšè¿çããããšãããã
ç«¶ææéäžã®è³ªåã«ã€ããŠãäž»å¬è ããã®åçã¯å šéžæãžå ¬éããããã¯åå¥ã«åçããããå šéžæãžå ¬éãããå Žåã質åå 容ã®åæããããã¯äž»å¬è ã«ããå 容ã®èŠçŽãå ¬éããããæªåçã®è³ªåã»æªå ¬éã®åçã«ã€ããŠã¯è³ªåããéžæããã³ãã®ããŒã ã¡ã³ããŒãäž»å¬è ã®ã¿ã確èªã§ããã質åãžã®åç/æŽæ°ã¯ããŒã¿ã«ãµã€ãäžã«ãŠéžæãžéç¥ãããã
äž»å¬è ã¯ç«¶ææéäžã®è³ªåãžã®åçã«ã€ããŠãååãšããŠå šéžæãžå ¬éããããã ããéè€ãã質åããéžæããã³ããŒã åå¥ã®åé¡ (ãµãŒãé害ãªã©) ã«å¯Ÿãã察å¿ã®å Žåããã®éãã§ã¯ãªãã
以äžã®è¡çºãç¹ã«çŠæ¢ããã
- ç«¶æçµäºæéãŸã§ã«ãç«¶æã®å
容ã«é¢ããããããäºé
(åé¡å
容ã»èšæž¬ããŒã«ã®èšæž¬æ¹æ³ãªã©)ãå
¬éã»å
±æããããš(å
å®¹ãæšå¯ã§ããçºèšãå«ã)
- äžç¹å®å€æ°ãžã®å ¬éã¯ãã¡ãããä»ããŒã ã®éžæãšé£çµ¡ãåããåé¡å 容çãå ±æããäº (çµèšè¡çº) ãçŠæ¢ãšããã
- ãã ãäž»å¬è ã Twitter, Web ãµã€ãã«ãããŠå ¬éããŠããæ å ±ã¯é€ããããŒã¿ã«ãµã€ãã«ããããã°ã€ã³ãèŠããããŒãžã«ãããŠèšèŒãããŠããå 容ã¯å ¬éæ å ±ã§ãªãæšçæããããšã
- äž»å¬è ãä»ããŒã ãžã®åŠšå®³ãç«¶æãžã®æ¯éãšãªããšã¿ãªãå šãŠã®è¡çº
- äž»å¬è
ãç«¶æã«äžå¿
èŠãšã¿ãªãç«¶æç°å¢ããã®ãããã¯ãŒã¯ã¢ã¯ã»ã¹
- ç«¶æã«å¿ èŠãªãããã¯ãŒã¯å©çšãšããŠã¯ãäž»å¬è ã®æç€º (ã¬ã®ã¥ã¬ãŒã·ã§ã³, ããã¥ã¢ã«çå«ã) ã§èš±å¯ã»æ³å®ãããŠããè¡çºãæäŸãããã€ã³ã¹ã¿ã³ã¹ã®åæç¶æ ã§å©çšå¯èœãªãµãŒãã¹ããå€éšã®ããŒãžã§ã³ç®¡çã·ã¹ãã (GitHub ç)ããœãããŠã§ã¢ããã±ãŒãžã®ãªããžã㪠(apt, yum ãªããžããªããdocker, npm, RubyGems ã¬ãžã¹ããª, proxy.golang.org, crates.io ç) ãäŸãšããŠæããããã
- äžæ¹ãæäŸãããã€ã³ã¹ã¿ã³ã¹ããã€ã³ã¿ãŒããããŸã§ã®çµè·¯äžã«ãããã¹ãçãéžæããã®éžæãžæäŸãããŠããªããã¹ãã«ã€ããŠçŽæ¥ã®ã¢ã¯ã»ã¹ã詊ã¿ãè¡çºããå€éšãžã®äžæ£ã¢ã¯ã»ã¹ã詊ã¿ãè¡çºã¯ãäž»å¬è ã«ããäžå¿ èŠãšå€æãããå ŽåãããããªããäŸç€ºã®ãããããã«éããªãã
æ¬ããã¥ã¢ã«ã«ãããŠçŠæ¢ãšãããè¡çº (çŠæ¢äºé ) ãžã®éåã¯ãå€±æ Œãšãªãã


