{"id":220031,"date":"2014-04-26T14:56:03","date_gmt":"2014-04-26T10:56:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=220031"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=220031","title":{"rendered":"<span class=\"post_title\">\u041f\u0438\u0448\u0435\u043c Penguin Daycare Simulator \u043d\u0430 Go (Google App Engine) \u0438 Lua (Corona SDK)<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" width=\"314\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/01f\/d8f\/666\/01fd8f6669207a22ce0a776cf8ac7b6b.jpg\" align=\"left\"\/>  <\/p>\n<h4>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Google App Engine \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  C\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e HTTP \u0438\u043b\u0438 HTTPS.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0434\u0451\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a: \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0440\u044b\u0431\u043a\u0443 \u0438 \u043f\u043e\u0447\u0435\u0441\u0430\u0442\u044c \u0436\u0438\u0432\u043e\u0442\u0438\u043a.<br \/>  \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f <code>Name<\/code>, <code>Bio<\/code> \u0438 \u043f\u043e\u043b\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>2. \u0422\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430<\/h4>\n<p>  \u0414\u0443\u043c\u0430\u043b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 Penguin Daycare Simulator \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a, \u043d\u043e \u00ab\u0434\u0435\u0442\u0441\u043a\u0438\u0439 \u0441\u0430\u0434\u00bb \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u00abdaycare\u00bb \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u00ab\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0443\u0445\u043e\u0434\u00bb \u0442\u043e\u0436\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430.<\/p>\n<h4>3. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Google App Engine Go SDK, \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/cloud.google.com\/products\/app-engine\/\">Google App Engine<\/a>, \u043d\u0430\u0436\u0438\u043c\u0430\u0439\u0442\u0435 \u00abTry it now\u00bb \u0438 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0432\u0441\u0435\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c. \u0414\u0430\u0439\u0442\u0435 \u0438\u043c\u044f \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 Go, \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 SDK. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (<code>PATH<\/code>, <code>GOROOT<\/code>, <code>GOPATH<\/code>, <code>APPENGINE_DEV_APPSERVER<\/code>), \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0443 \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>goapp<\/code>. \u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 GAE \u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>goapp deploy<\/code> \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041e\u043d\u0430 \u0441\u043f\u0440\u043e\u0441\u0438\u0442 \u0443 \u0432\u0430\u0441 email \u0433\u0443\u0433\u043b\u043e-\u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442. \u0412\u0430\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u043e \u0432 app.yaml \u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435. \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 IDE \u0434\u043b\u044f Go \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e <a href=\"https:\/\/code.google.com\/p\/golangide\/\">LiteIDE<\/a>, \u0430 \u0434\u043b\u044f Lua \u0438 Corona SDK \u2014 <a href=\"http:\/\/studio.zerobrane.com\/\">ZeroBrane Studio<\/a>. \u0421\u043a\u0430\u0447\u0430\u0442\u044c Corona SDK \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0438\u0445 <a href=\"https:\/\/developer.coronalabs.com\/downloads\/corona-sdk\">\u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<h4>4. \u041a\u043b\u0438\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440<\/h4>\n<p>  \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c (\u0441\u043b\u0435\u0432\u0430) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c (\u0441\u043f\u0440\u0430\u0432\u0430).  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/651\/409\/1fc\/6514091fcdecb8b9d7517b9856a420da.jpg\" \/><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u043f\u043e HTTP, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 HTTPS \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f GAE \u2014 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043d\u0438\u043c.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e HTTP, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>  <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\">penguin-daycare-simulator.appspot.com<\/a><br \/>  \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441. \u041c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c http \u043d\u0430 https \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\/penguins\">penguin-daycare-simulator.appspot.com\/penguins<\/a><br \/>  \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0434 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u043e\u043c.<br \/>  \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/jsonview\/chklaanhfefbnpoihckbnefhakgolnmc\">JSONview<\/a> \u0434\u043b\u044f Chrome.<\/p>\n<p>  <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\/stat\/visit\">penguin-daycare-simulator.appspot.com\/stat\/visit<\/a><br \/>  <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\/stat\/fish\">penguin-daycare-simulator.appspot.com\/stat\/fish<\/a><br \/>  <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\/stat\/bellyrub\">penguin-daycare-simulator.appspot.com\/stat\/bellyrub<\/a><br \/>  \u042d\u0442\u0438 \u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430. <code>Id<\/code> \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 POST \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u00abOK\u00bb \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<h4>5. \u0415\u0449\u0451 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b, \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432!<\/h4>\n<p>  <img decoding=\"async\" width=\"314\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/87d\/c76\/d41\/87dc76d41075ec775ddd22dd8ac37126.jpg\" align=\"left\"\/><img decoding=\"async\" width=\"314\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/f4f\/bd6\/465\/f4fbd6465a0d11fb23417805e9936a3e.jpg\" align=\"left\"\/><br \/>  <br clear=\"all\"\/>  \u0423\u0436\u0435 \u043f\u0435\u0440\u0435\u0434 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u043f\u0440\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0447\u0438\u043a\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0437\u0438\u0442\u0438\u0432\u0430\u0442\u043e\u0440<\/b><\/p>\n<div class=\"spoiler_text\"><iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/3wTWWjYTe1I?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<p>  <\/p>\n<h4>6. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 Google App Engine<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043a\u043e\u0434\u0443. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Go.  <\/p>\n<pre><code class=\"bash\">PenguinDaycareSimulatorServer\/ \u251c\u2500\u2500 default\/ \u2502\u00a0\u00a0 \u251c\u2500\u2500 app.go \u2502\u00a0\u00a0 \u251c\u2500\u2500 default.yaml \u2502\u00a0\u00a0 \u2514\u2500\u2500 penguins.json \u251c\u2500\u2500 static\/ \u2502\u00a0\u00a0 \u251c\u2500\u2500 favicon.ico \u2502\u00a0\u00a0 \u2514\u2500\u2500 static.yaml \u2514\u2500\u2500 dispatch.yaml <\/code><\/pre>\n<p>  <code>default<\/code> \u0438 <code>static<\/code> \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f GAE \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0438, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0438 \u0444\u0430\u0439\u043b\u0430: <code>app.yaml<\/code>, <code>app\/app.go<\/code> \u0438 <code>penguins.json<\/code>. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u0432 \u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 (\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u043d\u0430 GitHub), \u043d\u043e \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 <code>max_concurrent_requests<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d instance \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0432\u0441\u0435\u0433\u043e 10. Go \u044f\u0432\u043d\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 500. \u041f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u0432\u043e\u0442\u044b \u0434\u043b\u044f GAE, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0431\u0438\u043b\u043b\u0438\u043d\u0433.<\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442 \u044d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0418 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c 2 \u043c\u043e\u0434\u0443\u043b\u044f, \u0447\u0442\u043e\u0431\u044b GAE \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  <code>static<\/code> \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c (\u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 GAE \u0432\u044b\u0448\u0435), \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e \u0444\u0430\u0439\u043b <code>favicon.ico<\/code>.<\/p>\n<p>  <code>default<\/code> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>  \u0424\u0430\u0439\u043b\u044b <code>*.yaml<\/code> \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f. \u041f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b <code>dispatch.yaml<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 URL \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">dispatch.yaml<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">application: penguin-daycare-simulator  dispatch: - url: &quot;*\/favicon.ico&quot;   module: static  - url: &quot;*\/&quot;   module: default<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">static.yaml<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">application: penguin-daycare-simulator module: static version: 1 runtime: python27 api_version: 1 threadsafe: true  handlers: - url: \/favicon.ico   static_files: favicon.ico   upload: favicon.ico<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">default.yaml<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">application: penguin-daycare-simulator module: default version: 1 runtime: go api_version: go1 automatic_scaling:   max_concurrent_requests: 500  handlers: - url: \/.*   script: _go_app<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 <code>static.yaml<\/code> runtime \u0443\u043a\u0430\u0437\u0430\u043d Python, \u0430 \u043d\u0435 Go. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e GAE \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 Go \u0431\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e Go \u0444\u0430\u0439\u043b\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u043d\u0435 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 Python \u0438 PHP \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">off topic<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c \u043c\u043e\u043b \u00ab\u0447\u0435\u043c PHP \u0445\u0443\u0436\u0435 Python \u0434\u043b\u044f \u043e\u0442\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u00bb \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0432\u044f\u0437\u0430\u0442\u044c holywar, \u043d\u043e Python \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0431\u043b\u0438\u0436\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0432\u044b\u0431\u0440\u0430\u043b \u0435\u0433\u043e. \u041b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PHP \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u0432\u0441\u0451 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0438 Python, \u043d\u0438 PHP \u043d\u0435 \u0443\u0447\u0430\u0432\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.  <\/div>\n<\/div>\n<p>  <code>handlers<\/code> \u0432 <code>default.yaml<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 URL. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 app.go \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c <code>dispatch.yaml<\/code>). \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 URL \u043e\u0447\u0435\u043d\u044c \u0433\u0438\u0431\u043a\u043e\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u043b\u044f Python \u0438 PHP \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 URL \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0442\u043e \u0434\u043b\u044f Go \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a &quot;_go_app&quot;. \u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 Go \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 URL \u0438 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0438 yaml \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/developers.google.com\/appengine\/docs\/go\/config\/appconfig\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  <code>penguins.json<\/code> \u2014 \u0444\u0430\u0439\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432 \u0441\u0435\u0431\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">penguins.json<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">[ \t{&quot;id&quot;: &quot;1&quot;, \t&quot;name&quot;: &quot;Tux&quot;, \t&quot;bio&quot;: &quot;Beloved Linux mascot&quot; \t}, \t{&quot;id&quot;: &quot;2&quot;, \t&quot;name&quot;: &quot;Skipper&quot;, \t&quot;bio&quot;: &quot;Small combat squad leader&quot; \t}, \t{&quot;id&quot;: &quot;3&quot;, \t&quot;name&quot;: &quot;Lolo&quot;, \t&quot;bio&quot;: &quot;Russian adventurer&quot; \t}, \t{&quot;id&quot;: &quot;4&quot;, \t&quot;name&quot;: &quot;Gunter&quot;, \t&quot;bio&quot;: &quot;The darkest character in Adventure Time&quot; \t}, \t{&quot;id&quot;: &quot;5&quot;, \t&quot;name&quot;: &quot;The Penguin&quot;, \t&quot;bio&quot;: &quot;Na, na, na, na, na, na, na, na, na, na... The Penguin! &quot; \t} ]<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a <code>app.go<\/code> \u2014 \u0441\u0435\u0440\u0434\u0446\u0443 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 GitHub \u2014 <a href=\"https:\/\/github.com\/Lerg\/PenguinDaycareSimulatorServer\/blob\/master\/default\/app.go\">app.go<\/a>.<\/p>\n<p>  \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:  <\/p>\n<pre><code class=\"bash\">package app  \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. import (...)  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430: Id, \u0438\u043c\u044f, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438. type penguin struct {...}  \u0421\u043b\u0430\u0439\u0441 (\u043c\u0430\u0441\u0441\u0438\u0432) \u0432\u0441\u0435\u0445 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432. var penguins []penguin  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. type penguinEntity struct {...}  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. func init() {...}  \u0427\u0442\u0435\u043d\u0438\u0435 penguins.json \u0432 \u0441\u043b\u0430\u0439\u0441 penguins. func loadPenguinsJson() {...}  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \/ - \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. func rootHandler(w http.ResponseWriter, r *http.Request) {...}  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \/penguins - \u0432\u044b\u0432\u043e\u0434 \u0432\u0441\u0435\u0445 \u043f\u0438\u043d\u0433\u0438\u0432\u043d\u043e\u0432 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. func penguinsHandler(w http.ResponseWriter, r *http.Request) {...}  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \/stat\/visit - \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430. func visitHandler(w http.ResponseWriter, r *http.Request) {...}  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \/stat\/fish - \u043a\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0440\u044b\u0431\u043a\u043e\u0439. func fishHandler(w http.ResponseWriter, r *http.Request) {...}  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \/stat\/bellyrub - \u043f\u043e\u0447\u0451\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u043f\u043e \u0436\u0438\u0432\u043e\u0442\u0438\u043a\u0443. func bellyrubHandler(w http.ResponseWriter, r *http.Request) {...}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f init(), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 penguins.json \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0437\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0412\u044b \u0443\u0436\u0435 \u043c\u043e\u0433\u043b\u0438 \u0438\u043c\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  <code>penguinsHandler()<\/code> \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043b\u0430\u0439\u0441 penguins \u0432 JSON \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>json.Marshal()<\/code> \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0447\u0435\u0440\u0435\u0437 <code>fmt.Fprint()<\/code>.<\/p>\n<p>  <code>visitHandler()<\/code>, <code>fishHandler()<\/code>, <code>bellyrubHandler()<\/code> \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 \u2014 \u0431\u0435\u0440\u0451\u043c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 <a href=\"https:\/\/developers.google.com\/appengine\/docs\/go\/datastore\/\">Datastore<\/a> \u2014 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SQL \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 NoSQL \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 GAE \u0442\u0430\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a Datastore, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0438\u0437\u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041c\u043e\u0436\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 \u043a\u044d\u0448\u0430 \u0441\u043a\u0430\u0436\u0435\u043c 10 \u043c\u0438\u043d\u0443\u0442. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0432\u0432\u0451\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>lastUpdateTime<\/code> \u2014 \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0441\u0430 <code>penguins<\/code>. \u0410 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 <code>\/penguins<\/code> \u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>updatePenguinsStatistics()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0435 \u0438\u0441\u0442\u0435\u043a\u043b\u043e \u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u044d\u0448\u0430 \u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432 \u0441\u043b\u0430\u0439\u0441\u0435 <code>penguins<\/code>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u044f \u0432\u0432\u0451\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 <a href=\"http:\/\/penguin-daycare-simulator.appspot.com\/update\">\/update<\/a> \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a <code>updateHandler()<\/code>.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 goroutine, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0441 <code>penguins<\/code> \u043e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0438\u0441\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>RWMutex<\/code> \u2014 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e <code>Mutex<\/code>.<\/p>\n<p>  \u0414\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 GAE \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:  <\/p>\n<pre><code class=\"bash\">goapp deploy default\/default.yaml goapp deploy static\/static.yaml appcfg.py update_dispatch . <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 app.go, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c <code>goapp deploy default\/default.yaml<\/code>.<\/p>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0431\u0438\u043b\u043b\u0438\u043d\u0433, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0434\u0435\u043d\u044c \u0440\u0430\u0432\u043d\u0443\u044e $1. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043a\u0432\u043e\u0442\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0430 \u0432\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u0435.<\/p>\n<h4>7. \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 Corona SDK<\/h4>\n<p>  Corona SDK \u2014 \u044d\u0442\u043e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0434 Android, iOS, Windows Phone (\u0441\u043a\u043e\u0440\u043e) \u0438 HTML5 (\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0443\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u043f\u0438\u0448\u0443 \u0438\u0433\u0440\u044b \u043a\u0430\u043a \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0440\u0438\u043b\u0430\u043d\u0441\u0435\u0440\u0430, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0441\u0435\u0431\u044f. \u041e\u0442\u043c\u0435\u0447\u0443 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0442\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0442\u043e\u0436\u0435 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0424\u0430\u0439\u043b\u043e\u0432 \u0437\u0434\u0435\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430 \u0441\u0447\u0451\u0442 \u0438\u043a\u043e\u043d\u043e\u043a \u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0431\u0438\u0440\u0430\u044e \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">PenguinDaycareSimulator\/ \u251c\u2500\u2500 images\/ \u2502\u00a0\u00a0 \u251c\u2500\u2500 penguins\/ \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 1.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 1@2x.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 2.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 2@2x.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 3.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 3@2x.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 4.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 4@2x.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 5.png \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 5@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 background.jpg \u2502\u00a0\u00a0 \u251c\u2500\u2500 background@2x.jpg \u2502\u00a0\u00a0 \u251c\u2500\u2500 button-over.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 button-over@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 button.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 button@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 dot-off.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 dot-off@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 dot.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 dot@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 fish.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 fish@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 hand.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 hand@2x.png \u2502\u00a0\u00a0 \u251c\u2500\u2500 popup.png \u2502\u00a0\u00a0 \u2514\u2500\u2500 popup@2x.png \u251c\u2500\u2500 lib\/ \u2502\u00a0\u00a0 \u251c\u2500\u2500 api.lua \u2502\u00a0\u00a0 \u251c\u2500\u2500 app.lua \u2502\u00a0\u00a0 \u2514\u2500\u2500 utils.lua \u251c\u2500\u2500 scenes\/ \u2502\u00a0\u00a0 \u251c\u2500\u2500 choose.lua \u2502\u00a0\u00a0 \u251c\u2500\u2500 menu.lua \u2502\u00a0\u00a0 \u2514\u2500\u2500 penguin.lua \u251c\u2500\u2500 Default-568h@2x.png \u251c\u2500\u2500 Icon-60.png \u251c\u2500\u2500 Icon-60@2x.png \u251c\u2500\u2500 Icon-72.png \u251c\u2500\u2500 Icon-72@2x.png \u251c\u2500\u2500 Icon-76.png \u251c\u2500\u2500 Icon-76@2x.png \u251c\u2500\u2500 Icon-Small-40.png \u251c\u2500\u2500 Icon-Small-40@2x.png \u251c\u2500\u2500 Icon-Small-50.png \u251c\u2500\u2500 Icon-Small-50@2x.png \u251c\u2500\u2500 Icon-Small.png \u251c\u2500\u2500 Icon-Small@2x.png \u251c\u2500\u2500 Icon-hdpi.png \u251c\u2500\u2500 Icon-ldpi.png \u251c\u2500\u2500 Icon-mdpi.png \u251c\u2500\u2500 Icon-ouya.png \u251c\u2500\u2500 Icon-xhdpi.png \u251c\u2500\u2500 Icon-xxhdpi.png \u251c\u2500\u2500 Icon.png \u251c\u2500\u2500 Icon@2x.png \u251c\u2500\u2500 build.settings \u251c\u2500\u2500 config.lua \u2514\u2500\u2500 main.lua<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Lua \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  <code>config.lua<\/code>, <code>build.settings<\/code> \u2014 \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f Corona SDK. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0440\u0442\u0440\u0435\u0442\u043d\u044b\u0439 \u0438\u043b\u0438 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u043d\u044b\u0439 \u0432\u0438\u0434 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u043f\u043e\u0440\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430, \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0415\u0441\u043b\u0438 Corona SDK \u0434\u043b\u044f \u0432\u0430\u0441 \u0432 \u043d\u043e\u0432\u0438\u043d\u043a\u0443, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u043a\u043e\u0440\u043d\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u043a\u0443\u0447\u0443 \u0438\u043a\u043e\u043d\u043e\u043a \u043f\u043e\u0434 iOS \u0438 Android, \u043f\u043b\u044e\u0441 <code>Default-568h@2x.png<\/code> \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 iPhone 5. \u0412\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 images\/ \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0438\u0445 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u0435 HD \u0432\u0435\u0440\u0441\u0438\u0438 <code>@2x<\/code>. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u044d\u043a\u0440\u0430\u043d\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 iPhone 3GS, \u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u0435\u043d \u043e\u0442 \u043d\u0443\u043b\u044f. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 iPad Retina \u0432\u0430\u043c \u0443\u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 <code>@4x<\/code> \u0444\u0430\u0439\u043b\u044b \u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0432 <code>config.lua<\/code>, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0433\u0440 \u0438 \u0442\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<p>  Corona SDK \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0444\u0430\u0439\u043b\u0430 <code>main.lua<\/code>, \u0432 \u043d\u0451\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0441\u0446\u0435\u043d\u0443 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u00abEnter the Daycare\u00bb. \u0412\u0441\u0435 \u0441\u0446\u0435\u043d\u044b (\u044d\u043a\u0440\u0430\u043d\u044b) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>scenes\/<\/code>, \u0430 \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u044f \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 <code>lib\/<\/code>. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u043e\u043b\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043a\u0430\u043a \u0435\u043c\u0443 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0442\u0430\u043a.<\/p>\n<p>  \u0412 <code>lib\/<\/code> \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f <code>app.lua<\/code> \u0438 <code>utils.lua<\/code> \u2014 \u0432\u043c\u0435\u0441\u0442\u0435 \u044d\u0442\u043e \u043c\u043e\u0439 \u0441\u0431\u043e\u0440\u043d\u0438\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Corona SDK. \u0412 <code>app.lua<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 Corona SDK \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u0434\u0440. <\/p>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437 <code>main.lua<\/code> \u0432 <code>scenes\/menu.lua<\/code> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u043e\u0447\u043a\u0443  <\/p>\n<pre><code class=\"lua\">storyboard.gotoScene('scenes.menu')<\/code><\/pre>\n<p>  \u0413\u0434\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0412\u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 <code>menu.lua<\/code>.  <\/p>\n<pre><code class=\"lua\">function scene:createScene (event)     local group = self.view      app.newText{g = group, text = 'Penguin Daycare', size = 32, x = _CX, y = _CY - 150}     app.newText{g = group, text = 'Simulator', size = 32, x = _CX, y = _CY - 110}      local pleaseWait = app.newText{g = group, text = 'Please Wait', size = 16, x = _CX, y = _CY}     local button = app.newButton{g = group, x = _CX, y = _CY,         text = 'Enter the Daycare',         onRelease = function()             storyboard.gotoScene('scenes.choose', {effect = 'slideLeft', time = app.duration})         end}     button.isVisible = false      app.api:getPenguins(function()             pleaseWait.isVisible = false             button.isVisible = true         end) end<\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043e\u0434\u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0430. \u041a\u043d\u043e\u043f\u043a\u0430 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u0430 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0421\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>app.api:getPenguins()<\/code>, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0443 \u043d\u0435\u0451 callback-\u0444\u0443\u043d\u043a\u0446\u0438\u044f.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0446\u0435\u043d\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430, \u0442\u043e\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>choose.lua<\/code>.  <\/p>\n<pre><code class=\"lua\">function scene:createScene(event)     local group = self.view      self.backButton = app.newButton{g = group, x = _L + 10, y = _T + 10, w = 48, h = 32, rp = 'TopLeft',         text = 'Back',         fontSize = 14,         onRelease = function()             storyboard.gotoScene('scenes.menu', {effect = 'slideRight', time = app.duration})         end}      local function gotoPenguin(ind)         storyboard.gotoScene('scenes.penguin', {effect = 'slideLeft', time = app.duration, params = ind})     end     local slideView = newSlideView{g = group, x = 0, y = _CY, dots_y = 180, onRelease = gotoPenguin}     for i = 1, #app.api.penguins do         local p = app.api.penguins[i]         local slide = display.newGroup()         app.newImage('images\/popup.png', {g = slide, w = 300, h = 335})         app.newImage('images\/penguins\/' .. p.id .. '.png', {g = slide, w = 200, h = 256})         app.newText{g = slide, x = 0, y = -140, text = p.name, size = 18, color = 'white'}         app.newText{g = slide, x = 0, y = 140, text = p.bio, size = 14, color = 'white', w = 220, align = 'center'}         slideView:addSlide(slide)     end      slideView:makeDots()     slideView:gotoSlide(1) end<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c <code>newSlideView()<\/code> \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0438\u0434\u0436\u0435\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u044b \u0441 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430\u043c\u0438. \u041a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0443\u0442 \u0436\u0435 \u0432 <code>choose.lua<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0430\u0439\u0434. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u044e\u0442 Id \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432. \u042d\u0442\u043e \u0434\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u0451\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 GAE \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c. \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438\u0437 \u0441\u0435\u0442\u0438 \u0432 Corona SDK \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>display.loadRemoteImage()<\/code> \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f <code>network.download()<\/code>.<\/p>\n<p>  \u041f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u0441\u043b\u0430\u0439\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>gotoPenguin()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 (\u043d\u0435 <code>Id<\/code>) \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 (table) \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443 <code>penguin.lua<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u044d\u0442\u043e\u0439 \u0441\u0446\u0435\u043d\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">penguin.lua<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"lua\">function scene:createScene(event)     local group = self.view     local background = app.newImage('images\/background.jpg', {g = group, w = 384, h = 640, x = _CX, y = _CY})      self.backButton = app.newButton{g = group, x = _L + 10, y = _T + 10, w = 48, h = 32, rp = 'TopLeft',         text = 'Back',         fontSize = 14,         onRelease = function()             storyboard.gotoScene('scenes.choose', {effect = 'slideRight', time = app.duration})         end}      local ind = event.params     local p = app.api.penguins[ind]      local visitsLabel = app.newText{g = group, x = _CX, y = _T + 20, text = 'Visits: ' .. p.visit_count, size = 18, color = 'white'}     local fishLabel = app.newText{g = group, x = _CX, y = _T + 40, text = 'Fish: ' .. p.fish_count, size = 18, color = 'white'}     local bellyrubsLabel = app.newText{g = group, x = _CX, y = _T + 60, text = 'Belly rubs: ' .. p.bellyrub_count, size = 18, color = 'white'}     local penguin = app.newImage('images\/penguins\/' .. p.id .. '.png', {g = group, w = 200, h = 256, x = _CX, y = _CY - 25})      app.newButton{g = group, x = _CX - 80, y = _B - 50, w = 128, h = 48,         text = 'Fish',         fontSize = 14,         onRelease = function()             local fish = app.newImage('images\/fish.png', {g = group, x = penguin.x, y = penguin.y + 200, w = 512, h = 188})             fish.alpha = 0.8             transition.to(fish, {time = 400, alpha = 1, y = penguin.y, xScale = 0.1, yScale = 0.1, transition = easing.outExpo, onComplete = function(obj)                     transition.to(fish, {time = 400, alpha = 0, onComplete = function(obj)                             display.remove(obj)                         end})                 end})             app.api:sendFish(p.id)             p.fish_count = p.fish_count + 1             fishLabel:setText('Fish: ' .. p.fish_count)         end}      app.newButton{g = group, x = _CX + 80, y = _B - 50, w = 128, h = 48,         text = 'Belly rub',         fontSize = 14,         onRelease = function()             local hand = app.newImage('images\/hand.png', {g = group, x = penguin.x - 40, y = penguin.y + 30, w = 80, h = 80, rp = 'TopLeft'})             transition.to(hand, {time = 1200, x = penguin.x + 40, transition = easing.swing3(easing.outQuad), onComplete = function(obj)                     display.remove(obj)                 end})             app.api:sendBellyrub(p.id)             p.bellyrub_count = p.bellyrub_count + 1             bellyrubsLabel:setText('Belly rubs: ' .. p.bellyrub_count)         end}      app.api:sendVisit(p.id)     p.visit_count = p.visit_count + 1     visitsLabel:setText('Visits: ' .. p.visit_count) end<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 <code>penguin.lua<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u0438 \u0434\u0432\u0443\u0445 \u043a\u043d\u043e\u043f\u043e\u043a-\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>app.api:sendFish()<\/code> \u0438 <code>app.api:sendBellyrub()<\/code>. \u0410 <code>app.api:sendVisit()<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u044b. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u043a\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0432\u0432\u0435\u0434\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f callback-\u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>lib\/api.lua<\/code>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">api.lua<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"lua\">local _M = {} local app = require('lib.app') _M.hostname = 'http:\/\/penguin-daycare-simulator.appspot.com'  function _M:getPenguins(callback)     local url = '\/penguins#' .. math.random(1000, 9999)     network.request(self.hostname .. url , 'GET', function (event)         if not event.isError then             local response = json.decode(event.response)             if response then                 self.penguins = response                 callback()             end         end     end) end  function _M:sendVisit(id)     local url = '\/stat\/visit'     local request = {body = 'id=' .. id}     network.request(self.hostname .. url , 'POST', function (event)         if event.isError then             app.alert('Network error')         end     end, request) end  function _M:sendFish(id)     local url = '\/stat\/fish'     local request = {body = 'id=' .. id}     network.request(self.hostname .. url , 'POST', function (event)         if event.isError then             app.alert('Network error')         end     end, request) end  function _M:sendBellyrub(id)     local url = '\/stat\/bellyrub'     local request = {body = 'id=' .. id}     network.request(self.hostname .. url , 'POST', function (event)         if event.isError then             app.alert('Network error')         end     end, request) end  return _M <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 POST \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 <code>getPenguins()<\/code>, \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 JSON \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 (table) \u0444\u0443\u043a\u0446\u0438\u0435\u0439 <code>json.decode()<\/code> \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 (property) \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c POST \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 Corona SDK \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u044b\u0448\u043b\u0430 \u0438 \u0441\u0430\u043c\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Google App Engine. \u042f \u043d\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u0435\u043d.<\/p>\n<h4>8. \u0421\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 GitHub:  <\/p>\n<ul>\n<li>Google App Engine \u2014 <a href=\"https:\/\/github.com\/Lerg\/PenguinDaycareSimulatorServer\">github.com\/Lerg\/PenguinDaycareSimulatorServer<\/a><\/li>\n<li>Corona SDK \u2014 <a href=\"https:\/\/github.com\/Lerg\/PenguinDaycareSimulator\">github.com\/Lerg\/PenguinDaycareSimulator<\/a><\/li>\n<\/ul>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430 Android 2.3.3+, \u0432\u043e\u0442 <a href=\"http:\/\/188.226.45.254\/tmp\/PenguinDaycareSimulator.apk\">APK<\/a> (<a href=\"https:\/\/dl.dropboxusercontent.com\/u\/55969280\/PenguinDaycareSimulator.apk\">mirror<\/a>).<br \/>  \u041b\u0438\u0431\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435 Corona SDK, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 GitHub \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0432 Corona Simulator.<\/p>\n<p>  \u041b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 <a href=\"http:\/\/188.226.45.254\/tmp\/penguin\/\">HTML5 \u0432\u0435\u0440\u0441\u0438\u044e<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0435\u0449\u0451 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0435\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u043e \u043d\u0443\u043b\u044f\u043c. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u0435\u0449\u0451 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e <a href=\"http:\/\/habrahabr.ru\/users\/m0sth8\/\" class=\"user_link\">M0sTH8<\/a> \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043c\u043e\u0439 \u0442\u0432\u0438\u0442\u0442\u0435\u0440 <a href=\"https:\/\/twitter.com\/SergeyLerg\">@SergeyLerg<\/a><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/220031\/\"> http:\/\/habrahabr.ru\/post\/220031\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" width=\"314\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/01f\/d8f\/666\/01fd8f6669207a22ce0a776cf8ac7b6b.jpg\" align=\"left\"\/>  <\/p>\n<h4>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Google App Engine \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  C\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e HTTP \u0438\u043b\u0438 HTTPS.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0435\u0434\u0451\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043d\u043e\u043f\u043e\u043a: \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0440\u044b\u0431\u043a\u0443 \u0438 \u043f\u043e\u0447\u0435\u0441\u0430\u0442\u044c \u0436\u0438\u0432\u043e\u0442\u0438\u043a.<br \/>  \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f <code>Name<\/code>, <code>Bio<\/code> \u0438 \u043f\u043e\u043b\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-220031","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=220031"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220031\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=220031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=220031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=220031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}