{"id":252449,"date":"2015-03-04T23:19:02","date_gmt":"2015-03-04T19:19:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=252449"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=252449","title":{"rendered":"\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043d\u0430 C++ \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u0432\u0430\u043d\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438"},"content":{"rendered":"\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u043e \u0437\u0430\u0447\u0435\u043c?<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/ololoepepe.me\/files\/trolleybus.jpg\" alt=\"\u0422\u0443\u0442 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u0440\u043e \u0442\u0440\u043e\u043b\u043b\u0435\u0439\u0431\u0443\u0441\"\/><\/p>\n<p>  \u041d\u0435\u0432\u0435\u0436\u043b\u0438\u0432\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e: \u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442? \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e.<br \/>  \u041b\u0430\u0434\u043d\u043e, \u044f \u043f\u043e\u0448\u0443\u0442\u0438\u043b. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043c\u043e\u0435\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439. \u041d\u043e, \u0434\u0430\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043c\u044b \u0435\u0449\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f.  <\/div>\n<\/div>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430 \u0442\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0431-\u0444\u043e\u0440\u0443\u043c\u043e\u0432, \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0418\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\">\u0438\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u044b<\/a>. \u0414\u0430-\u0434\u0430, \u0432\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u043b\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u044b \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u043f\u044b\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 C++. \u0427\u0442\u043e \u0436\u0435 \u0441\u043f\u043e\u0434\u0432\u0438\u0433\u043b\u043e \u043c\u0435\u043d\u044f \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0442\u043e\u043b\u044c \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c? \u041b\u0435\u0432\u0430\u044f \u043f\u044f\u0442\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0443\u0442\u0440\u043e\u043c \u0438 \u043f\u043e\u043d\u044f\u043b \u2014 \u0445\u043e\u0447\u0443. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043b\u0438\u0440\u0438\u043a\u0430.<\/p>\n<p>  \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430\u0445 \u043d\u0430 C++: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/habrahabr.ru\/post\/154187\/\">FastCGI<\/a> \u0438\u043b\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/219899\/\">CppCMS<\/a>. \u041d\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u2014 HelloWorld&#8217;\u044b \u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b. \u042f \u0436\u0435 \u0432\u0430\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c (\u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0447\u0438\u0441\u0442\u043e\u0442\u044b \u043a\u043e\u0434\u0430) \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u0421\u0442\u043e\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 <a href=\"http:\/\/doc.qt.io\">Qt<\/a> \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. Qt \u0438 \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a \u0441\u043b\u043e\u0432\u0443, BeQt \u2014 Beyond Qt) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u043e\u044e \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u043d\u043e \u043d\u0430 \u043d\u0438\u0445 \u044f \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<h4>\u0412\u0435\u0431-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0432\u0435\u0431-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0412\u044b\u0431\u043e\u0440 \u043d\u0435\u0432\u0435\u043b\u0438\u043a, \u043d\u043e \u043e\u043d \u0432\u0441\u0435 \u0436\u0435 \u0435\u0441\u0442\u044c:  <\/p>\n<ul>\n<li><a href=\"http:\/\/pocoproject.org\/\">Poco<\/a><\/li>\n<li><a href=\"http:\/\/www.tntnet.org\/\">Tntnet<\/a><\/li>\n<li><a href=\"http:\/\/www.webtoolkit.eu\/wt\">Wt<\/a><\/li>\n<li><a href=\"http:\/\/cppcms.com\/wikipp\/en\/page\/main\">CppCMS<\/a><\/li>\n<\/ul>\n<p>  \u041e \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u044f \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043e\u043d\u0438 \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0433\u043b\u044f\u043d\u0443\u043b\u0438\u0441\u044c. \u042d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043f\u043b\u043e\u0445\u0438 \u2014 \u044f \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e.<br \/>  Wt \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u042f \u0442\u043e\u0433\u0434\u0430 \u0441\u043e\u0431\u043b\u0430\u0437\u043d\u0438\u043b\u0441\u044f \u0441\u0445\u043e\u0436\u0435\u0439 \u0441 Qt \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e: \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u044f \u043e \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 HTML, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0442\u0435\u043c \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b\u0430\u0441\u044c \u0432 \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 HTML. \u0421 \u0432\u0435\u0431\u043e\u043c \u044f \u0442\u043e\u0433\u0434\u0430 \u0431\u044b\u043b \u0437\u043d\u0430\u043a\u043e\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u00ab\u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0435 HTML-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 title&#8217;\u043e\u043c \u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0430\u043c\u0438\u00bb, \u0442\u043e \u0435\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0431\u044b\u043b \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0432\u043e\u0432\u0441\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u043e\u0433\u043e HelloWorld&#8217;\u0430 \u043d\u0443\u0436\u043d\u044b \u0442\u0430\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b (.js), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u00ab\u043b\u0435\u0432\u044b\u0445\u00bb \u0441\u0430\u0439\u0442\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Wt \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043a\u043e\u0440\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c.<br \/>  \u041d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u044f \u0443\u0436\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 \u0432\u0435\u0431\u043e\u043c, JavaScript, CSS, AJAX-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u2014 \u0442\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0435\u0449\u0435 \u0440\u0430\u0437 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u043e\u0439 \u00ab\u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043d\u0430 C++\u00bb. \u0412\u043d\u043e\u0432\u044c \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 CppCMS. \u042d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043c\u043d\u0435 \u043f\u0440\u0438\u0433\u043b\u044f\u043d\u0443\u043b\u0441\u044f \u0441\u0440\u0430\u0437\u0443: \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u043f\u0443\u0441\u0442\u044c \u0438 \u0441\u043a\u0443\u0434\u043d\u0430\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438) \u2014 \u0435\u0441\u0442\u044c, \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u2014 \u0435\u0441\u0442\u044c (\u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u044b\u0435, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0442\u044f\u043d\u0443\u0442\u044b\u0435 \u0437\u0430 \u0443\u0448\u0438), \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u0435\u0441\u0442\u044c, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u2014 \u0435\u0441\u0442\u044c (\u0442\u0435\u043f\u0435\u0440\u044c \u044f \u0443\u0436\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0435\u0437 \u043d\u0438\u0445 \u043d\u0438\u043a\u0443\u0434\u0430). \u0427\u0442\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0447\u0430\u0441\u0442\u044c\u044f? \u0421\u043a\u0430\u0447\u0430\u043b, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b, \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0441\u044f.<\/p>\n<h4>ORM-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/h4>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0442\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 Qt \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"http:\/\/doc.qt.io\/qt-5\/qtsql-module.html\">QtSql<\/a>, \u043d\u043e \u043e\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u2014 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0438\u0448\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u041c\u043d\u0435 \u0436\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\">ORM<\/a>-\u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041d\u0430\u0433\u0443\u0433\u043b\u0438\u043b \u044f, \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0435\u0434\u043e\u0434\u0435\u043b\u043e\u043a \u0438 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 (\u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u2014 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0432\u0435\u0434\u0443\u0449):  <\/p>\n<ul>\n<li><a href=\"https:\/\/sourceforge.net\/projects\/litesql\/\">LiteSQL<\/a><\/li>\n<li><a href=\"http:\/\/www.qxorm.com\/qxorm_en\/home.html\">QxOrm<\/a><\/li>\n<li><a href=\"http:\/\/www.codesynthesis.com\/products\/odb\/\">ODB<\/a><\/li>\n<\/ul>\n<p>  LiteSQL \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0430 \u043d\u0430\u0433\u0443\u0433\u043b\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e-\u0442\u043e \u0441 XML-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 (\u0443\u0436 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, \u043d\u043e XML \u0433\u043b\u0430\u0437\u0430 \u0431\u044b \u043c\u043e\u0438 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438). QxOrm \u044f \u043e\u0442\u0432\u0435\u0440\u0433 \u043f\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438 \u0438 \u0433\u043b\u0443\u043f\u043e\u0441\u0442\u0438: \u0437\u0430\u0448\u0435\u043b \u043d\u0430 \u0441\u0430\u0439\u0442, \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430 \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0423\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0443\u0441\u0442\u044f, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u044f \u0435\u0449\u0435 \u0440\u0430\u0437 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443, \u0438 \u043e\u043d \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0435 \u0432\u043e\u0440\u043e\u0442\u0438\u0448\u044c. \u041f\u043e\u0441\u043f\u0435\u0448\u0438\u0448\u044c, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f\u2026<br \/>  ODB \u043c\u043d\u0435 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u043c, \u0437\u0430\u0442\u043e \u0438\u043c\u0435\u043b\u0438\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, ODB \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0438\u043f\u044b Qt, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a QString, QDateTime \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430-\u0441\u044e\u0434\u0430. \u041d\u0430 \u044d\u0442\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0438\u043d\u0443\u0442\u043a\u0430 \u044e\u043c\u043e\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/ololoepepe.me\/files\/odb.png\" alt=\"\u0422\u0443\u0442 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u0440\u043e ODB\"\/>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430<\/h4>\n<p>  \u0427\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0438\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434 \u2014 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043b\u043a\u043e\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434. \u041b\u0438\u0431\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0432\u0441\u0435\u043c (\u0438\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u044a\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u0434\u0435\u043b\u0430\u044f \u0448\u0440\u0438\u0444\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u0438\u043b\u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u043c), \u043b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0431\u0435\u0437 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0435\u0449\u0435 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0444\u0438\u0447\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 IT-\u0441\u0430\u0439\u0442\u0430\u0445.<br \/>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u0433\u0443\u0433\u043b\u0438\u043b \u2014 <a href=\"http:\/\/hilite.me\/\">hilite.me<\/a> \u2014 \u043e\u043d\u043b\u0430\u0439\u043d-\u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u0435\u043a\u0441\u0442 \u0432 HTML, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0435\u043a\u0441\u0442, \u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c \u0441\u0430\u0439\u0442\u043e\u043c \u044f \u0441\u043f\u0435\u0440\u0432\u0430 \u0445\u043e\u0442\u0435\u043b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"http:\/\/doc.qt.io\/qt-5\/qtnetwork-index.html\">QtNetwork<\/a>, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u2014 <a href=\"http:\/\/doc.qt.io\/qt-5\/qnetworkaccessmanager.html\">QNetworkAccessManager<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 CppCMS \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u0432\u043d\u0435 <a href=\"http:\/\/doc.qt.io\/qt-5\/qthread.html\">QThread<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c (\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b \u0432\u043d\u0435 <a href=\"http:\/\/doc.qt.io\/qt-5\/qeventloop.html\">QEventLoop<\/a> \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e API \u0443 <a href=\"http:\/\/doc.qt.io\/qt-5\/qnetworkreply.html\">QNetworkReply<\/a> \u043d\u0435\u0442). \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0446\u0435\u043f\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: <a href=\"http:\/\/curl.haxx.se\/libcurl\/\">libcurl<\/a> (\u0442\u0443\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0431\u0435\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432) \u0438 <a href=\"http:\/\/www.curlpp.org\/\">cURLpp<\/a> \u2014 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 libcurl \u0434\u043b\u044f C++ (\u0431\u044b\u043b \u0435\u0449\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <a href=\"https:\/\/code.google.com\/p\/curlplusplus\/\">curlplusplus<\/a>, \u043d\u043e \u044f \u0432\u044b\u0431\u0440\u0430\u043b cURLpp).<br \/>  \u0422\u0443\u0442 \u044f \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0437\u0430\u0431\u0435\u0433\u0443 \u0432\u043f\u0435\u0440\u0435\u0434. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e, \u043d\u043e \u0437\u0430\u0442\u0435\u043c \u044f \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0436 \u0434\u043e\u043b\u0433\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043f\u043e\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c, \u043f\u043e\u043a\u0430 \u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u043e\u043a\u0430 \u043f\u0440\u0438\u0448\u043b\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u2026 \u041d\u0443 \u0435\u0433\u043e. \u0418 \u0432\u043d\u043e\u0432\u044c \u044f \u043d\u0430\u043f\u0440\u044f\u0433 \u0433\u0443\u0433\u043b. \u0412\u043e\u0442 \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437: <a href=\"http:\/\/www.gnu.org\/software\/src-highlite\/\">Source-highlight<\/a>. \u041f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u043e \u0437\u0430 \u0441\u0435\u0431\u044f). \u0422\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e! (\u0417\u0430\u043c\u0435\u0447\u0443, \u043e\u0434\u043d\u0430\u043a\u043e, \u0447\u0442\u043e, \u0445\u043e\u0442\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0435\u0437 \u043d\u0430\u0440\u0435\u043a\u0430\u043d\u0438\u0439, \u043d\u043e \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432-\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u043a\u0442 \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0430 \u043d\u0435 \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b, \u0441\u043a\u0430\u0436\u0435\u043c, \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438.)<\/p>\n<h4>\u0421\u043a\u0430\u0436\u0438 \u043c\u043d\u0435, \u043a\u0430\u043a\u043e\u0432\u044b \u0442\u0432\u043e\u0438 Magic bytes, \u0438 \u044f \u0441\u043a\u0430\u0436\u0443 \u0442\u0435\u0431\u0435, \u043a\u0442\u043e \u0442\u044b<\/h4>\n<p>  \u0420\u0435\u0447\u044c \u043e\u0431 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u0430 \u0444\u0430\u0439\u043b\u0430. \u0418\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u044b \u2014 \u043e\u043d\u0438 \u0432\u0435\u0434\u044c \u043e\u0442 \u0441\u043b\u043e\u0432\u0430 image \u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u00ab\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u00bb, \u0430 \u043d\u0435 \u0438\u043c\u0438\u0434\u0436, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432 \u0441\u0430\u043c\u043e\u0439 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0438\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c. \u0418 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/WebM\">WebM<\/a>. \u041d\u043e \u043a\u0442\u043e \u0438\u0437 \u043d\u0430\u0441 \u043d\u0435 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c? \u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0434\u0435\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0430\u0440\u0445\u0438\u0432 \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u043e MIME-\u0442\u0438\u043f\u0435 \u0444\u0430\u0439\u043b\u0430, \u0442\u043e\u0436\u0435 \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0433\u043e \u0442\u0438\u043f \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u0422\u0430\u043a\u0438\u043c, \u043a\u0430\u043a <a href=\"https:\/\/sourceforge.net\/projects\/libmagic\/\">libmagic<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u041d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0430\u0442\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.darwinsys.com\/file\/\">\u0432\u043e\u0442 \u044d\u0442\u0443<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u2014 \u043e\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0432\u0448\u0438\u0439\u0441\u044f WebM.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, Magic bytes \u043d\u0435 \u0434\u0430\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0443, \u043d\u043e \u0442\u0443\u0442 \u0443\u0436 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u0430\u0435\u0448\u044c. \u0420\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043d\u0430\u043d\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b \u043a\u0438\u0442\u0430\u0439\u0446\u0435\u0432 (\u043d\u0435 \u0432 \u043e\u0431\u0438\u0434\u0443 \u044d\u0442\u0438\u043c \u0442\u0440\u0443\u0434\u044f\u0433\u0430\u043c \u0431\u0443\u0434\u044c \u0441\u043a\u0430\u0437\u0430\u043d\u043e), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<h4>\u0415\u0449\u0435 \u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e&#8230;<\/h4>\n<p>  \u0412\u043e\u0442 \u043c\u044b \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0410 \u043a\u0430\u043a \u0446\u0435\u043f\u043b\u044f\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u0412 Qt, \u043d\u0430 \u0441\u0447\u0430\u0441\u0442\u044c\u0435, \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u043b\u043e\u0445\u0430\u044f (\u0445\u043e\u0442\u044c \u0438 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f) \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 qmake.<br \/>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (.pro\/.pri), \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>isEmpty(BEQT_PREFIX) {     mac|unix {         BEQT_PREFIX=\/usr\/share\/beqt     } else:win32 {         BEQT_PREFIX=$$(systemdrive)\/PROGRA~1\/BeQt     } } include($${BEQT_PREFIX}\/share\/beqt\/depend.pri)  isEmpty(CPPCMS_PREFIX) {     mac|unix {         CPPCMS_PREFIX=\/usr     } else:win32 {         error(CppCMS path is not specified)     } }  INCLUDEPATH *= $${CPPCMS_PREFIX}\/include DEPENDPATH *= $${CPPCMS_PREFIX}\/include LIBS *= -L$${CPPCMS_PREFIX}\/lib\/ -lcppcms -lbooster  isEmpty(ODB_PREFIX) {     mac|unix {         ODB_PREFIX=\/usr     } else:win32 {         error(ODB path is not specified)     } }  INCLUDEPATH *= $${ODB_PREFIX}\/include DEPENDPATH *= $${ODB_PREFIX}\/include LIBS *= -L$${ODB_PREFIX}\/lib\/ -lodb -lodb-sqlite  !isEmpty(ODB_QT_PREFIX) {     INCLUDEPATH *= $${ODB_QT_PREFIX}\/include     DEPENDPATH *= $${ODB_QT_PREFIX}\/include     LIBS *= -L$${ODB_QT_PREFIX}\/lib\/ -lodb-qt } else {     LIBS *= -L$${ODB_PREFIX}\/lib\/ -lodb-qt }  isEmpty(LIBCURL_PREFIX) {     mac|unix {         LIBCURL_PREFIX=\/usr     } else:win32 {         error(libcurl path is not specified)     } }  INCLUDEPATH *= $${LIBCURL_PREFIX}\/include DEPENDPATH *= $${LIBCURL_PREFIX}\/include LIBS *= -L$${LIBCURL_PREFIX}\/lib\/ -lcurl  isEmpty(CURLPP_PREFIX) {     mac|unix {         CURLPP_PREFIX=\/usr     } else:win32 {         error(cURLpp path is not specified)     } }  INCLUDEPATH *= $${CURLPP_PREFIX}\/include DEPENDPATH *= $${CURLPP_PREFIX}\/include LIBS *= -L$${CURLPP_PREFIX}\/lib\/ -lcurlpp  isEmpty(BOOST_PREFIX) {     mac|unix {         BOOST_PREFIX=\/usr     } else:win32 {         BOOST_PREFIX=$$(systemdrive)\/Boost     } }  INCLUDEPATH *= $${BOOST_PREFIX}\/include DEPENDPATH *= $${BOOST_PREFIX}\/include LIBS *= -L$${BOOST_PREFIX}\/lib\/ -lboost_regex  isEmpty(SRCHILITE_PREFIX) {     mac|unix {         SRCHILITE_PREFIX=\/usr     } else:win32 {         error(GNU Source-highlight path is not specified)     } }  INCLUDEPATH *= $${SRCHILITE_PREFIX}\/include DEPENDPATH *= $${SRCHILITE_PREFIX}\/include LIBS *= -L$${SRCHILITE_PREFIX}\/lib\/ -lsource-highlight  isEmpty(LIBMAGIC_PREFIX) {     mac|unix {         LIBMAGIC_PREFIX=\/usr     } else:win32 {         error(libmagic path is not specified)     } }  INCLUDEPATH *= $${LIBMAGIC_PREFIX}\/include DEPENDPATH *= $${LIBMAGIC_PREFIX}\/include LIBS *= -L$${LIBMAGIC_PREFIX}\/lib\/ -lmagic  isEmpty(SQLITE_PREFIX) {     mac|unix {         SQLITE_PREFIX=\/usr     } else:win32 {         error(SQLite path is not specified)     } }  INCLUDEPATH *= $${SQLITE_PREFIX}\/include DEPENDPATH *= $${SQLITE_PREFIX}\/include LIBS *= -L$${SQLITE_PREFIX}\/lib\/ -lsqlite3  mac|unix {     isEmpty(LORD_PREFIX):LORD_PREFIX=\/usr } else:win32 {     isEmpty(LORD_PREFIX):PREFIX=$$(systemdrive)\/PROGRA~1\/ololord } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0436\u0435 <a href=\"http:\/\/www.boost.org\/\">Boost<\/a> \u0438 <a href=\"https:\/\/sqlite.org\/\">SQLite<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u0438 \u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u2014 \u044f \u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. \u041f\u0440\u043e SQLite \u0441\u043a\u0430\u0436\u0443 \u043a\u043e\u0440\u043e\u0442\u043a\u043e: \u044f \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0441 \u044d\u0442\u043e\u0439 \u0431\u0430\u0437\u043e\u0439, \u0438 \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u0411\u0414 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0442\u043e \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0435\u0435 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u0438 \u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0437\u0434\u0435\u0441\u044c, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439. \u0412\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0442\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f (\u0438\u043c\u0435\u0439 \u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435 \u2014 \u0432\u044b\u0431\u0440\u0430\u043b \u0431\u044b QxOrm \u0432\u043c\u0435\u0441\u0442\u043e ODB).<\/p>\n<h3>\u0417\u0430 \u0440\u0430\u0431\u043e\u0442\u0443<\/h3>\n<p>  <\/p>\n<h4>\u041f\u0443\u0442\u0438<\/h4>\n<p>  (\u0420\u0443\u0441\u0441\u043a\u0438\u0435 \u00ab\u043f\u0443\u0442\u0438\u00bb \u0438 \u00ab\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b\u00bb \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u0437\u0432\u0443\u0447\u0430\u0442 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c \u00abroutes\u00bb, \u043d\u043e \u0447\u0442\u043e \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c.) \u0412 CppCMS \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u00ab\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u00bb \u2014 \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a <a href=\"http:\/\/cppcms.com\/cppcms_ref\/latest\/classcppcms_1_1application.html\">cppcms::application<\/a>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">class MyApplication : public cppcms::application { public:     explicit MyApplication(cppcms::service &service) :         cppcms::application(service)     {         dispatcher().assign(&quot;\/file\/\\\\d+&quot;, &MyApplication::handleFile, this, 1);         mapper().assign(&quot;\/file&quot;, &quot;\/file\/{1}&quot;);     }     void handleFile(std::string fileNo)     {         \/\/\u0442\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441     } }; <\/code><\/pre>\n<p>  <a href=\"http:\/\/cppcms.com\/cppcms_ref\/latest\/classcppcms_1_1service.html\">cppcms::service<\/a> \u2014 \u0448\u0442\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 cppcms::application, \u043a \u043d\u0435\u0439 \u043c\u044b \u0435\u0449\u0435 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f. \u0410 \u043f\u043e\u043a\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438: \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0443\u0442\u0435\u0439 \u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 URL \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0448\u0435\u043c, \u043b\u0438\u0431\u043e \u043d\u0435\u0442.<br \/>  \u0418\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u043e\u043a \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 &quot;\/[a-z]+&quot; (\u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438). \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00absite.com\/b\u00bb. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u00absite.com\/b\/\u00bb? \u0412\u0441\u0435 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e? \u041d\u0435\u0442, \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043d\u0435 \u0436\u0434\u0438\u0442\u0435. CppCMS \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 alias&#8217;\u043e\u0432 \u0441\u043e \u0441\u043b\u0435\u0448\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0446\u0435. \u0418 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 alias&#8217;\u044b \u043d\u0443\u0436\u043d\u044b, \u0438 \u043e \u043d\u0438\u0445 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c (\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e).<br \/>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0443\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f: \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0443\u0442\u044c, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0435\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">dispatcher().assign(&quot;\/.+&quot;, &MyApplication::handleAnything, this, 1); dispatcher().assign(&quot;\/page&quot;, &MyApplication::handlePage, this); <\/code><\/pre>\n<p>  \u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u00absite.com\/page\u00bb \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0435 URL \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 &quot;\/.+&quot;, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0441 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0431\u043e\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u0443. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0443\u0442\u044f\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0443 \u043c\u0435\u043d\u044f? \u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u0430\u043d\u0446\u0443 \u0441\u043e \u0441\u0432\u043e\u0438\u043c URL. \u041f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438? \u0423\u0432\u043e\u043b\u044c\u0442\u0435. \u0412\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432-\u0444\u0430\u0431\u0440\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0440\u0443\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434) \u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442. \u0415\u0441\u043b\u0438 \u043f\u0443\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u043e \u043f\u0443\u0442\u0438 \u0438\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438\u0445 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442 (\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u043b\u0430\u043f\u0448\u0430): <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/app\/ololordwebapp.cpp\">\u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a cppcms::application<\/a>, <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/tree\/master\/src\/lib\/route\">\u043f\u0443\u0442\u0438<\/a>, <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/lib\/plugin\/global\/routefactoryplugininterface.h\">\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/a>.<br \/>  \u0422\u0443\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043e\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 Qt, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430) \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u043f\u043e\u043a: \u043e\u0431\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &quot;\/usr\/lib\/app\/plugins&quot; \u0438 &quot;\/home\/user\/.app\/lib\/app\/plugins&quot;). \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c.<\/p>\n<h4>cppcms::service \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, cppcms::service \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 cppcms::application, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. \u0427\u0442\u043e\u0431\u044b cppcms::service \u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430 cppcms::application, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">service.applications_pool().mount(cppcms::applications_factory&lt;MyApplication&gt;()); <\/code><\/pre>\n<p>  cppcms::service \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u0440\u0435\u0434 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0442\u0440\u0435\u0434\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b cppcms::application. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0435 <a href=\"http:\/\/doc.qt.io\/qt-5\/qcoreapplication.html\">QCoreApplication<\/a> (\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 Qt \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445), \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e cppcms::service \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435:  <\/p>\n<pre><code class=\"cpp\">class OlolordWebAppThread : public QThread { private:     const cppcms::json::value Conf;     cppcms::service *mservice;     bool mshutdown; public:     explicit OlolordWebAppThread(const cppcms::json::value &conf, QObject *parent = 0) :          QThread(parent), Conf(conf)     {         mshutdown = false;         mservice = 0;     }     void shutdown()     {         if (!mservice)             return;         mshutdown = true;         mservice-&gt;shutdown();     } protected:     void run()     {         while (!mshutdown) {             try {                 cppcms::service service(Conf);                 mservice = &service;                 service.applications_pool().mount(cppcms::applications_factory&lt;OlolordWebApp&gt;());                 service.run();             } catch(std::exception const &e) {                 qDebug() &lt;&lt; e.what();             }             mservice = 0;         }     } }; <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <i>const cppcms::json::value Conf<\/i>. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Qt, CppCMS \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438 Qt, \u043a\u043e\u0433\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u043e  <\/p>\n<pre><code class=\"cpp\">try {     int x = doSomething(); } catch (const Exception &e) {     \/\/\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 } <\/code><\/pre>\n<p>  \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f  <\/p>\n<pre><code class=\"cpp\">bool ok = false; int x = doSomething(&ok); if (!ok) {     \/\/\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 } <\/code><\/pre>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u2014 \u043e\u043d\u0438 \u0432 CppCMS \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0438 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c.<br \/>  \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f <i>const cppcms::json::value Conf<\/i>, \u0442\u043e \u044d\u0442\u043e \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 JSON-\u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>{     &quot;service&quot;: {         &quot;api&quot;: &quot;http&quot;,         &quot;port&quot;: 80,         &quot;ip&quot;: &quot;0.0.0.0&quot;     } } <\/code><\/pre>\n<p>  \u00abapi\u00bb \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u00abfastcgi\u00bb, \u00abscgi\u00bb, \u043b\u0438\u0431\u043e \u00abhttp\u00bb, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u043c (\u0441\u043e \u0441\u0432\u043e\u0438\u043c HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c), \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c *CGI.<br \/>  \u00abport\u00bb \u0438 \u00abip\u00bb \u2014 \u043f\u043e\u0440\u0442 \u0438 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0448\u0430\u0435\u0442. \u00ab0.0.0.0\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 (\u0438\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043e \u0432\u0441\u0435\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432).<br \/>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u2014 <a href=\"http:\/\/cppcms.com\/wikipp\/en\/page\/cppcms_1x_config\">\u0442\u0443\u0442<\/a>. \u0425\u043e\u0442\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c *CGI, \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043b\u0438\u0448\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435\u043c.<br \/>  \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <a href=\"http:\/\/cppcms.com\/cppcms_ref\/latest\/classcppcms_1_1json_1_1value.html\">cppcms::json::value<\/a>, \u0441\u043a\u0430\u0436\u0435\u043c, \u0438\u0437 \u0444\u0430\u0439\u043b\u0430. \u041d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <i>load<\/i>, \u043d\u043e \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <a href=\"http:\/\/www.cplusplus.com\/reference\/istream\/istream\/\">std::istream<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">struct membuf : std::streambuf { public:     explicit membuf(char *begin, char *end)     {         this-&gt;setg(begin, begin, end);     } };  cppcms::json::value readJsonValue(const QString &fileName, bool *ok) {     bool b = false;     QByteArray jsonBa = BDirTools::readFile(fileName, -1, &b);     if (!b)         return cppcms::json::value();     char *jsonData = jsonBa.data();     membuf jsonBuff(jsonData, jsonData + jsonBa.size());     std::istream jsonIn(&jsonBuff);     cppcms::json::value json;     if (json.load(jsonIn, true))         return bRet(ok, true, json);     else         return bRet(ok, false, cppcms::json::value()); } <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0442\u0440\u044e\u043a \u0441\u043e <a href=\"http:\/\/www.cplusplus.com\/reference\/streambuf\/streambuf\/\">std::streambuf<\/a>. \u041d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u043e \u0438 \u0438\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 (<a href=\"http:\/\/doc.qt.io\/qt-5\/resources.html\">Qt Resource System<\/a>).  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"cpp\">int main(int argc, char **argv) {     QCoreApplication app(argc, argv); \/\/\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Qt     cppcms::json::value conf = Tools::readJsonValue(&quot;\/path\/to\/conf\/file&quot;, &ok);     OlolordWebAppThread t(conf);     t.start();     int ret = app.exec(); \/\/\u0437\u0430\u043f\u0443\u0441\u043a QEventLoop     t.shutdown(); \/\/\u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c (thread-safe), \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442     t.wait(10 * BeQt::Second); \/\/\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0435\u0434 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b     return ret; } <\/code><\/pre>\n<h4>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b<\/h4>\n<p>  \u0412\u043e\u0442 \u043c\u044b \u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u2014 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0443 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043c\u0430\u043b\u043e\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0442\u0438\u043f\u0430  <\/p>\n<pre><code class=\"cpp\">void MyApplication::main(std::string \/*url*\/)   {       response().out() &lt;&lt; &quot;&lt;html&gt;\\n&lt;body&gt;\\n&lt;h1&gt;Hello World&lt;\/h1&gt;\\n&lt;\/body&gt;\\n&lt;\/html&gt;\\n&quot;; } <\/code><\/pre>\n<p>  \u041c\u044b \u0432\u0435\u0434\u044c \u0445\u043e\u0442\u0438\u043c \u0441\u0430\u0439\u0442 \u043f\u043e\u043a\u0440\u0443\u0447\u0435, \u0432\u0435\u0440\u043d\u043e? \u0412 CppCMS, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0432\u0435\u0449\u0438 \u2014 \u0448\u0430\u0431\u043b\u043e\u043d \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 (\u0441\u043b\u043e\u0432\u043e \u00ab\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u00bb \u044f \u0441\u0442\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435\u0432\u043e\u043b\u044c\u043d\u043e, \u043d\u043e, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043e\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442). \u0428\u0430\u0431\u043b\u043e\u043d \u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0432 \u0432\u0438\u0434\u0435 \u0441\u043c\u0435\u0441\u0438 HTML \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 CppCMS. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u2014 \u043a\u043b\u0430\u0441\u0441 (\u0438\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430) C++, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d. \u041d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043b\u043e\u0432, \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">\/\/page.h  namespace Content  {  struct Page : public cppcms::base_content {     std::string message;     std::string pageTitle; };  } <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"html\">&lt;!-- page.tmlp --&gt; &lt;% c++ #include &quot;page.h&quot; %&gt; &lt;% skin my_skin %&gt; &lt;% view page uses Content::Page %&gt; &lt;% template render() %&gt; &lt;html&gt;     &lt;head&gt;         &lt;title&gt;&lt;%= pageTitle %&gt;&lt;\/title&gt;     &lt;\/head&gt;     &lt;body&gt;         &lt;h1&gt;&lt;%= message %&gt;&lt;\/h1&gt;     &lt;\/body&gt; &lt;\/html&gt; &lt;% end template %&gt; &lt;% end view %&gt; &lt;% end skin %&gt; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <i>Content::Page<\/i> \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 <i>message<\/i> \u0438 <i>pageTitle<\/i>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <i>page<\/i>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <i>Content::Page<\/i>. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043a\u0438\u043d\u044b (skin), \u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0438\u043c\u0435\u043b \u0434\u0435\u043b\u0430, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443 (\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0432\u0438\u0434\u043e\u043c \u043b\u0443\u0447\u0448\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 CSS, \u0445\u043e\u0442\u044c \u044d\u0442\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043c\u043d\u0435 \u0438 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f).<br \/>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439  <\/p>\n<pre><code class=\"html\">&lt;% c++ #include &quot;page.h&quot; %&gt; <\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 C++. \u0414\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f  <\/p>\n<pre><code class=\"html\">&lt;%= variableName %&gt; <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u0447\u043a\u0430  <\/p>\n<pre><code class=\"html\">&lt;% template render() %&gt; <\/code><\/pre>\n<p>  \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445:  <\/p>\n<pre><code class=\"html\">&lt;% template hr() %&gt; &lt;hr \/&gt; &lt;% end template %&gt;  &lt;% template render() %&gt; &lt;!-- \u0442\u0443\u0442 \u043a\u043e\u0434 --&gt; &lt;% include hr() %&gt; &lt;!-- \u0435\u0449\u0435 \u043a\u043e\u0434 --&gt; &lt;% include hr() %&gt; &lt;!-- \u0438 \u0435\u0449\u0435 --&gt; &lt;% end template %&gt; <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>hr<\/i> \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043a\u0443\u0434\u0430 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0446\u0438\u043a\u043b foreach \u0438 \u0435\u0449\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0431\u044b \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c <a href=\"http:\/\/cppcms.com\/wikipp\/en\/page\/cppcms_1x_templates\">\u0441\u0441\u044b\u043b\u043a\u043e\u0439<\/a> \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u0430\u0440\u043e\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439.<br \/>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043e\u043d\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435). \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i>render<\/i> \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <a href=\"http:\/\/cppcms.com\/cppcms_ref\/latest\/classcppcms_1_1base__content.html\">cppcms::base_content<\/a>.<br \/>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435 \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430: \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b, \u043d\u0435\u0442):  <\/p>\n<pre><code class=\"html\">&lt;% c++ out() &lt;&lt; (content.variable + 1); %&gt; <\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430\u0436\u0443 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">void MyApplication::handlePage() {     Content::Page c; \/\/c - \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e controller     c.pageTitle = &quot;My page&quot;;     c.message = &quot;Yarrr!&quot;;     render(&quot;page&quot;, c); } <\/code><\/pre>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>render<\/i> \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 (\u043a\u0442\u043e \u0431\u044b \u043c\u043e\u0433 \u043f\u043e\u0443\u0434\u043c\u0430\u0442\u044c) \u0448\u0430\u0431\u043b\u043e\u043d, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 HTML \u0432 \u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043f\u0438\u0448\u0435\u0442 \u0435\u0433\u043e \u0432 <i>response().out()<\/i>.<br \/>  \u041d\u0443 \u0438 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u2014 \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (\u0438\u0437 .pro\/.pri \u0444\u0430\u0439\u043b\u0430):  <\/p>\n<pre><code>CPPCMS_PROCESSING_COMMAND=$${CPPCMS_PREFIX}\/bin\/cppcms_tmpl_cc mac|unix {     CPPCMS_TEMPLATES=$$files($${PWD}\/template\/*) } else:win32 {     CPPCMS_TEMPLATES=$$files($${PWD}\\\\template\\\\*) }  for(CPPCMS_TEMPLATE, CPPCMS_TEMPLATES) {     CPPCMS_TEMPLATES_STRING=$${CPPCMS_TEMPLATES_STRING} \\&quot;$${CPPCMS_TEMPLATE}\\&quot; }  CPPCMS_PROCESSING_COMMAND=$${CPPCMS_PROCESSING_COMMAND} $${CPPCMS_TEMPLATES_STRING} -o \\&quot;$${PWD}\/compiled_templates.cpp\\&quot;  win32:CPPCMS_PROCESSING_COMMAND=$$replace(CPPCMS_PROCESSING_COMMAND, &quot;\/&quot;, &quot;\\\\&quot;)  system(python $${CPPCMS_PROCESSING_COMMAND})  SOURCES += compiled_templates.cpp <\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Python (\u0432\u0435\u0440\u0441\u0438\u0438 2.x), \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 <i>template<\/i> \u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 .tmpl.<\/p>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0447\u0438\u0442\u0430\u0439 \u2014 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435). \u041e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0421\u0423\u0411\u0414, \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a, \u0441\u043a\u0430\u0436\u0435\u043c, MySQL \u0438\u043b\u0438 SQLite. \u0412\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0411\u0414 \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Object-relational Mapping (ORM), \u0438 \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 ODB.<br \/>  \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">PRAGMA_DB(object table(&quot;posts&quot;)) class Post { public:     PRAGMA_DB(id auto)     quint64 id_;     PRAGMA_DB(not_null)     QString board_;     PRAGMA_DB(not_null)     quint64 number_;     PRAGMA_DB(not_null)     QDateTime dateTime_;     QString text_;     PRAGMA_DB(not_null)     QLazySharedPointer&lt;Thread&gt; thread_; public:     explicit Post()     {         \/\/     } private:     friend class odb::access; }; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043a\u043b\u0430\u0441\u0441 <i>Post<\/i>, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u043f\u043e\u0441\u0442) \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 (\u0438\u043b\u0438 \u0434\u043e\u0441\u043a\u0435). \u041e \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0411\u0414 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0435\u0435, \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 <i>PRAGMA_DB(object table(\u00abposts\u00bb))<\/i> (\u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <i>table(\u00abposts\u00bb)<\/i>, \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0438\u043d\u0430\u0447\u0435 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u00abPost\u00bb). \u041c\u0430\u043a\u0440\u043e\u0441 <i>PRAGMA_DB<\/i> \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <i>#pragma db<\/i>, \u0434\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041c\u0430\u043a\u0440\u043e\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044f \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <i>#pragma<\/i>.<br \/>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0430\u043a\u0440\u043e\u0441, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c ODB \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u2014 \u0442\u043e, \u043a\u0430\u043a \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0411\u0414 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u043a\u0430\u043a <i>PRIMARY KEY<\/i>). \u0423\u0432\u044b, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 constraint&#8217;\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0430 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0441\u043a\u0430\u0436\u0435\u043c, \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <i>UNIQUE(fieldOne, fieldTwo, fieldThree)<\/i>, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c, \u0430 \u043d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443.<br \/>  \u041c\u043e\u0436\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0439 <i>PRAGMA_DB<\/i>. \u0422\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0432\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u044b Qt. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 odb-qt. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0447\u0435\u0439 \u0442\u0438\u043f \u043e\u0431\u0435\u0440\u043d\u0443\u0442 \u0432 <i>QLazySharedPointer<\/i>, \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a \u0411\u0414, \u0430 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0437\u0434\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (Lazy fetch).<br \/>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c <i>odb::access<\/i> \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c.<br \/>  \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 SQLite):  <\/p>\n<pre><code class=\"cpp\">try {     odb::database *db = new odb::sqlite::database(&quot;\/path\/to\/db&quot;,         SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0411\u0414     odb::transaction t = odb::transaction(db.begin()); \/\/\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e     \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0445\u0435\u043c\u0443     t-&gt;execute(&quot;PRAGMA foreign_keys=OFF&quot;);     odb::schema_catalog::create_schema(*db);     t-&gt;execute(&quot;PRAGMA foreign_keys=ON&quot;);     Post p;     \/\/\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u0430     db-&gt;perist(p); \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u0441\u0442 \u0432 \u0431\u0430\u0437\u0435     odb::result&lt;Post&gt; r(db-&gt;query&lt;Post&gt;()); \/\/\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u0442\u043e\u0432     for (odb::result_iterator&lt;Post&gt; i = r.begin(); i != r.end(); ++i) {         \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u043e\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:         i-&gt;dateTime_ = QDateTime::currentDateTimeUtc(); \/\/\u0437\u0430\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f         db-&gt;update(*i); \/\/\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f     }     t.commit(); \/\/\u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e } catch (const odb::exception &e) {     \/\/\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 } <\/code><\/pre>\n<p>  \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0435\u0449\u0435 \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e\u0431 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 <i>odb::database<\/i>, \u043d\u043e \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u043e\u0434 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e scoped pointer).<br \/>  \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>odb::schema_catalog::create_schema<\/i> \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443\u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0431\u0430\u0437\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 <i>CREATE TABLE &#8230;<\/i> \u0432\u043c\u0435\u0441\u0442\u043e <i>CREATE TABLE IF NOT EXISTS &#8230;<\/i>, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0438 \u043e \u043a\u0430\u043a\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0445\u0435\u043c\u044b \u0438 \u0440\u0435\u0447\u0438 \u043d\u0435 \u0438\u0434\u0435\u0442 \u2014 \u0432\u0441\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0418 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u0430\u043c\u0435\u043d\u044c \u0432 \u043e\u0433\u043e\u0440\u043e\u0434 ODB. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<br \/>  ODB, \u043a\u0430\u043a \u0438 CppCMS, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043c\u0435\u0442\u0430-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 <i>PRAGMA_DB<\/i> \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 C++. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0442\u0430\u043a:  <\/p>\n<pre><code>mac|unix {     ODB_PROCESSING_COMMAND=$${ODB_PREFIX}\/bin\/odb     ODB_TEMPLATES=$$files($${PWD}\/*.h) } else:win32 {     ODB_PROCESSING_COMMAND=$${ODB_PREFIX}\/bin\/odb.exe     ODB_TEMPLATES=$$files($${PWD}\\\\*.h) }  for(ODB_TEMPLATE, ODB_TEMPLATES) {     ODB_TEMPLATES_STRING=$${ODB_TEMPLATES_STRING} \\&quot;$${ODB_TEMPLATE}\\&quot; }  ODB_PROCESSING_COMMAND=$${ODB_PROCESSING_COMMAND} -d sqlite --generate-query --generate-schema --profile qt ODB_PROCESSING_COMMAND=$${ODB_PROCESSING_COMMAND} -I \\&quot;$${QMAKE_INCDIR_QT}\\&quot; ODB_PROCESSING_COMMAND=$${ODB_PROCESSING_COMMAND} -I \\&quot;$${QMAKE_INCDIR_QT}\/QtCore\\&quot; $${ODB_TEMPLATES_STRING}  win32:ODB_PROCESSING_COMMAND=$$replace(ODB_PROCESSING_COMMAND, &quot;\/&quot;, &quot;\\\\&quot;)  system($${ODB_PROCESSING_COMMAND})  HEADERS += $$files($${PWD}\/*.hxx) SOURCES += $$files($${PWD}\/*.cxx) <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432, \u0442\u0438\u043f \u0411\u0414 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 SQLite), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044c Qt \u0438 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443. \u041f\u043b\u044e\u0441 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0438 \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c Qt. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 .hxx \u0438 .cxx \u0444\u0430\u0439\u043b\u044b, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0441\u0443\u0444\u0444\u0438\u043a\u0441 &quot;-odb&quot; \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u043c\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 ODB \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0432\u044f\u0437\u043a\u0443 <i>odb::database<\/i> \u0438 <i>odb::transaction<\/i> \u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <i>Transaction<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0435\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0411\u0414. \u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0440\u0435\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 (<i>Transaction<\/i>), \u0435\u0441\u043b\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0435\u0449\u0435 \u043d\u0435\u0442, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0435\u0441\u043b\u0438 \u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a. \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0438 <i>Transaction<\/i> \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f <i>odb::transaction<\/i> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0435 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u0441\u044f. \u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u043c \u0434\u043e \u0434\u043d\u0430 \u0441\u0442\u0435\u043a\u0430, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <i>Transaction<\/i>, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0442\u0443\u0442: <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/lib\/transaction.h\">1<\/a>, <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/lib\/transaction.cpp\">2<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f: <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/lib\/database.h\">1<\/a>, <a href=\"https:\/\/github.com\/ololoepepe\/ololord\/blob\/master\/src\/lib\/database.cpp\">2<\/a>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">bool createPost(CreateThreadParameters &p, QSharedPointer&lt;Thread&gt; thread) {     try {         Transaction t; \/\/\u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430         Post post(p, thread);         t-&gt;persist(post);         t.commit();         return true;     } catch (const odb::exception &e) {         qDebug() &lt;&lt; e.what();         return false;     } }  bool createThread(CreateThreadParameters &p) {     try {         Transaction t; \/\/\u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0434\u043d\u0435 \u0441\u0442\u0435\u043a\u0430         QSharedPointer&lt;Thread&gt; thread(new Thread(p));         t-&gt;persist(thread);         if (!createPost(p, thread))             return bfalse;         t.commit();         return true;     } catch (const odb::exception &e) {         qDebug() &lt;&lt; e.what();         return false;     } } <\/code><\/pre>\n<p>  \u041e\u0431\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <i>Thread<\/i> \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0438 \u043d\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439.  <\/div>\n<\/div>\n<h4>\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u0444\u0430\u0439\u043b\u043e\u0432<\/h4>\n<p>  \u0422\u0443\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043d\u0435\u0442, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cpp\">QString mimeType(const QByteArray &data, bool *ok) {     if (data.isEmpty())         return bRet(ok, false, QString());     magic_t magicMimePredictor;     magicMimePredictor = magic_open(MAGIC_MIME_TYPE);     if (!magicMimePredictor)         return bRet(ok, false, QString());     if (magic_load(magicMimePredictor, 0)) {         magic_close(magicMimePredictor);         return bRet(ok, false, QString());     }     QString result = QString::fromLatin1(magic_buffer(magicMimePredictor, (void *) data.data(), data.size()));     return bRet(ok, !result.isEmpty(), result); }  QString highlight(const QString &code, const QString &lang) {     std::istringstream in(Tools::toStd(code));     std::ostringstream out;     try {         srchilite::SourceHighlight sourceHighlight(&quot;html.outlang&quot;);         sourceHighlight.setDataDir(&quot;\/path\/to\/definition\/files&quot;);         sourceHighlight.highlight(in, out, lang.toLatin1().data() + &quot;.lang&quot;);     } catch (const srchilite::ParserException &e) {         qDebug() &lt;&lt; e.what();         return &quot;&quot;;     } catch (const srchilite::IOException &e) {         qDebug() &lt;&lt; e.what();         return;     } catch (const std::exception &e) {         qDebug() &lt;&lt; e.what();         return;     }     return + QString::fromLocal8Bit(out.str()); } <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u0430 \u0444\u0430\u0439\u043b\u0430 \u0441\u0430\u043c\u0443\u044e \u043c\u0430\u043b\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u0442\u0438\u043f\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u044f\u0437\u044b\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435 \u043e \u043c\u043d\u043e\u0433\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u043a\u0430\u043f\u0447\u0438 \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2026 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c. \u041d\u043e, \u0431\u043e\u044e\u0441\u044c, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0441\u043c\u043e\u0433\u0443, \u0443\u0432\u044b \u043c\u043d\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0443-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u043c \u0438 \u043c\u043d\u043e\u0433\u043e \u043e \u0447\u0435\u043c \u0435\u0449\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445.<\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u043e\u0431\u0435\u0449\u0430\u043d\u043d\u0430\u044f \u0434\u0438\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430. \u0421\u043f\u0435\u0440\u0432\u0430, \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u044f \u043f\u043e\u0434\u0434\u0430\u043b\u0441\u044f \u043e\u0431\u0449\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e C++ \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u0435\u0431\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u044f \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e. \u0420\u0430\u0437 \u0432\u0441\u0435 \u0442\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u043b, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d JavaScrpt, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 AJAX \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CSS.<br \/>  \u041d\u043e \u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f, \u044f \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u043b <a href=\"https:\/\/www.djangoproject.com\/\">Django<\/a>, <a href=\"http:\/\/rubyonrails.org\/\">Ruby on Rails<\/a>, \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441 Java, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043e\u0434\u0438\u043d \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442, \u043d\u0430\u0431\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u044b\u0442\u0430, \u0438\u0437\u0443\u0447\u0438\u043b \u043d\u043e\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u0418 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0442\u043e \u0434\u0435\u043b\u0435, \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u044f\u0437\u044b\u043a \u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0431\u044d\u043a\u044d\u043d\u0434\u0435, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u0442\u0435 \u0436\u0435 HTML, CSS \u0438 JavaScript. \u041a\u0430\u043a \u043d\u0438 \u043a\u0440\u0443\u0442\u0438, \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u0438, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 JS. \u0418 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0431\u044d\u043a\u044d\u043d\u0434\u043e\u043c.<br \/>  \u0412\u0435\u043b\u0438\u043a\u0430 \u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, <a href=\"http:\/\/www.thymeleaf.org\/\">Thymeleaf<\/a> (Java) \u0438 CppCMS \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438? \u041d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c. \u0412\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 \u044f\u0437\u044b\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f. \u0420\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u0441\u044f \u0436\u0435 \u0432\u0441\u0435 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u0438\u0437 \u043a\u043e\u0434\u0430. \u0418 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043c, \u0438 \u0442\u0430\u043c, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f.<br \/>  \u0410 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445? \u0427\u0435\u043c ODB <i>\u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e<\/i> \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <a href=\"http:\/\/hibernate.org\/\">Hibernate<\/a>? \u0414\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u0435\u0435, \u043d\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e, \u0447\u0442\u043e ODB \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f ORM? \u042f \u0442\u0430\u043a \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e.<br \/>  \u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. <a href=\"http:\/\/en.wikipedia.org\/wiki\/Front_and_back_ends\">\u0424\u0440\u043e\u043d\u0442\u0435\u043d\u0434<\/a> \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u043e\u043c, \u0432 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u0436\u0435 \u043c\u044b \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0422\u0430\u043a \u0435\u0441\u0442\u044c \u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430? \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u0442. \u041d\u0430 Java \u0438\u043b\u0438 Python \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0411\u0414 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u043c-\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0411\u0414 \u043d\u0430 C++, \u044d\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u00ab\u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439\u00bb, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u0441\u0435 \u0442\u0435 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432\/\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0441\u0432\u043e\u0439.<br \/>  \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 Python, \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 JS AJAX-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0431\u0430\u0437\u0435. \u0422\u0430\u043a\u0438\u0445 \u0447\u0443\u0434\u0435\u0441 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442. \u041a\u0442\u043e-\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0411\u0414 \u043d\u0430 %\u0438\u043c\u044f_\u044f\u0437\u044b\u043a\u0430% \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043d\u0430 C++, \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432, \u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0442\u0447\u0430\u0441\u0442\u0438: \u0447\u0443\u0434\u0435\u0441, \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0431\u0430\u0437\u044b \u043e\u0431\u044a\u0435\u043a\u0442, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <i>Object o = db-&gt;query(&quot;&#8230;&quot;);<\/i> \u2014 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<br \/>  \u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u041d\u043e \u0437\u0430\u0447\u0435\u043c?\u00bb \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0436\u0435: \u00ab\u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u0442?\u00bb, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b. \u0422\u0430\u043a\u043e\u0432\u044b \u043c\u043e\u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (C++, Java, \u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u2014 Python, Ruby). \u0418 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432 \u043a \u0445\u043e\u043b\u0438\u0432\u0430\u0440\u0443, \u0430 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0441\u0430\u043c\u044b\u043c \u043c\u0438\u0440\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c.<\/p>\n<p>  \u0417\u0430 \u0441\u0438\u043c \u043e\u0442\u043a\u043b\u0430\u043d\u0438\u0432\u0430\u044e\u0441\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <a href=\"https:\/\/github.com\/ololoepepe\/ololord\">github.com\/ololoepepe\/ololord<\/a><br \/>  \u041d\u0443 \u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e. \u041f\u0438\u0441\u0430\u043b\u0438 \u043b\u0438 \u0432\u044b \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C++? \u0421\u043b\u044b\u0448\u0430\u043b\u0438 \u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e? \u041f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c.      \t<\/p>\n<div class=\"clear\"><\/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\/252215\/\"> http:\/\/habrahabr.ru\/post\/252215\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u043e \u0437\u0430\u0447\u0435\u043c?<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/ololoepepe.me\/files\/trolleybus.jpg\" alt=\"\u0422\u0443\u0442 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u0440\u043e \u0442\u0440\u043e\u043b\u043b\u0435\u0439\u0431\u0443\u0441\"\/><\/p>\n<p>  \u041d\u0435\u0432\u0435\u0436\u043b\u0438\u0432\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e: \u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u043d\u0435\u0442? \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e.<br \/>  \u041b\u0430\u0434\u043d\u043e, \u044f \u043f\u043e\u0448\u0443\u0442\u0438\u043b. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043c\u043e\u0435\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439. \u041d\u043e, \u0434\u0430\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043c\u044b \u0435\u0449\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f.  <\/div>\n<\/div>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0430 \u0442\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0431-\u0444\u043e\u0440\u0443\u043c\u043e\u0432, \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0418\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\">\u0438\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u044b<\/a>. \u0414\u0430-\u0434\u0430, \u0432\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u043b\u0438 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0438\u0434\u0436\u0431\u043e\u0440\u0434\u044b \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u043f\u044b\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 C++. \u0427\u0442\u043e \u0436\u0435 \u0441\u043f\u043e\u0434\u0432\u0438\u0433\u043b\u043e \u043c\u0435\u043d\u044f \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0442\u043e\u043b\u044c \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c? \u041b\u0435\u0432\u0430\u044f \u043f\u044f\u0442\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0443\u0442\u0440\u043e\u043c \u0438 \u043f\u043e\u043d\u044f\u043b \u2014 \u0445\u043e\u0447\u0443. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043b\u0438\u0440\u0438\u043a\u0430.<\/p>\n<p>  \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0430\u0445 \u043d\u0430 C++: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/habrahabr.ru\/post\/154187\/\">FastCGI<\/a> \u0438\u043b\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/219899\/\">CppCMS<\/a>. \u041d\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u2014 HelloWorld&#8217;\u044b \u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b. \u042f \u0436\u0435 \u0432\u0430\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c (\u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0447\u0438\u0441\u0442\u043e\u0442\u044b \u043a\u043e\u0434\u0430) \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438.  <\/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-252449","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252449","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=252449"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252449\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=252449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=252449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=252449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}