{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40839921","id":40839921,"diff_hunk":"@@ -1,3 +1,304 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n-</html>\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+\t<head>\n+\t<meta charset=\"utf-8\">\n+\t\t<title>\n+\t\t\tHomework\n+\t\t</title>\n+\n+\t</head>\n+<main>\n+<body>\n+\t<header>\n+\t\t<h1 style=\"text-align: center;\">Блог компании <span style=\"color: red;\">Я</span>ндекс.</h1>\n+\t</header>\n+\t<h2 style=\"text-align: center;\"><span style=\"color: red;\">Я</span>НДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ\n+\tЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ\n+\t</h2>\n+\t<p>\n+\t\tЕсли ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то, какой он красивый, ни то,\n+\t    какой он удобный. Никому не понравится, когда все тормозит. Мы регулярно добавляем в Яндекс.Почту \n+\t    новую функциональность, иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый \n+\t    код и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+    \t<h3>Что мы измеряем</h3>\n+    \tЭтапы первой загрузки:\n+\t\t<ul>\n+\t\t\t<li>подготовка;</li>\n+\t\t\t<li>загрузка статики (<abbr title=\" HyperText Transfer Protocol\">HTTP</abbr>-запрос и парсинг);\n+\t\t\t</li>\n+\t\t\t<li>исполнение модулей;</li>\n+\t\t\t<li>инициализация базовых объектов;</li>\n+\t\t\t<li>отрисовка.</li>\n+\t\t</ul>\n+\t</p>\n+\t<p>\n+\t\tЭтапы отрисовки любой страницы:\n+\t\t<ul>\n+\t\t\t<li>подготовка к запросу на сервер;</li>\n+\t\t\t<li>запрос данных с сервера;</li>\n+\t\t\t<li>шаблонизация;</li>\n+\t\t\t<li>обновление  <a href=\"https://ru.wikipedia.org/wiki/Document_Object_Model\"target=\"_blank\">\n+    \t\t\t<abbr title=\"Document Object Model\">DOM</abbr></a>;\n+    \t\t</li>\n+\t\t</ul>\n+\t\t<p style=\"font-style: italic\">\n+\t\t\t— «Ок, теперь у нас есть метрики, мы можем отправить их на сервер» - говорим мы<br>\n+\t\t\t— «Что же дальше?» - вопрошаете вы<br>\n+\t\t\t— «А давай построим график!» - отвечаем мы<br>\n+\t\t\t— «А что будем считать?» - уточняете вы<br>\n+\t\t</p>\n+\t</p>\n+\t<p>\n+\t\tКак вы знаете, <dfn>медиана</dfn> – это серединное, а не среднее значение в выборке. Если у нас \n+\t\tимеются \n+   \t\tчисла 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5. В общем случае медиана отлично показывает,\n+    \tсколько грузится средний пользователь.\n+    </p>\n+\t<p>\n+\t\tВ случае ускорения или замедления медиана, конечно, изменится. Но она не может рассказать, сколько\n+\t    пользователей ускорилось, а сколько замедлилось.\n+\t</p>\n+\t<p>\n+\t\t<a href=\"https://en.wikipedia.org/wiki/Apdex\"target=\"_blank\">\n+    \t<abbr title=\"Application Performance Index\">APDEX</abbr></a> – метрика, которая сразу говорит: хорошо \n+    \tили плохо. Метрика работает очень просто. Мы выбираем временной интервал [0; t], такой, что если время\n+\t    показа страницы попало в него, то пользователь счастлив. Берем еще один интервал, (t; 4t] (в четыре\n+\t    раза больше первого), и считаем, что если страница показана за это время, то пользователь в целом \n+\t    удовлетворен скоростью работы, но уже не настолько счастлив. И применяем формулу:</p>\n+\t<p> \n+\t\t<span style=\"font-weight: 800\">(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / \n+\t\t(кол-во всех).</span><br>\n+\t\tПолучается значение от нуля до единицы, которое, видимо, лучше всего показывает,хорошо или плохо \n+\t\tработает почта.\n+\t</p>\n+    <h3>Как мы измеряем</h3>\n+\t<p>\n+\t\tСейчас модуль обновления сам логирует все свои стадии, и можно легко понять причину замедления: \n+        медленнее стал отвечать сервер либо слишком долго выполняется JavaScript. Выглядит это примерно так:\n+    </p>\n+\t<code>\n+\t\tthis.timings['look-ma-im-start'] = Date.now();<br>\n+\t\tthis.timings['look-ma-finish'] = Date.now();\n+\t</code>\n+\t<p>\n+\t\tC помощью <span style=\"font-weight: 800\">Date.now()</span> мы получаем текущее время. Все тайминги \n+\t\tсобираются и при отправке рассчитываются. На этапах разница между \n+\t\t“<span style=\"font-style: italic\">end</span>” и “<span style=\"font-style: italic\">start</span>” не \n+\t\tсчитается,а все вычисления производятся в конце:\n+\t</p>\n+    <code>\n+    var <var>totalTime</var> = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+    </code>\n+\t<p>И на сервер прилетают подобные записи:</p>\n+    <code>\n+    serverResponse=50&domUpdate=60\n+    </code>\n+\t<h3>Как мы ускоряем</h3>\n+\t<p>Чтобы снизить время загрузки почты при выходе новых версий, мы уже делаем следующее:</p>\n+\t<p>\n+\t\t<ul>\n+\t\t\t<li>включаем gzip;</li>\n+\t\t\t<li>выставляем заголовки кэширования;</li>\n+\t\t\t<li>фризим CSS, JS, шаблоны и картинки;</li>\n+\t\t\t<li>используем <a href=\"https://ru.wikipedia.org/wiki/Content_Delivery_Network\"target=\"_blank\">\n+    \t\t\t<abbr title=\"Content Delivery Network\">CDN</abbr></a>;\n+    \t\t</li>\n+\t\t</ul>\n+\t</p>\n+\t<p>\n+\t\tМы подумали: <span style=\"font-style: italic\">«А что если хранить где-то старую версию файлов, а при \n+\t\tвыходе новой передавать только >diff между ней и той, которая сохранена у пользователя?»</span> В\n+\t\tбраузере же останется просто наложить патч на клиенте.\n+\t</p>\n+\t<p>\n+\t\tНа самое деле эта идея не нова. Уже существуют стандарты для \n+\t\t<abbr title=\" HyperText Transfer Protocol\">HTTP</abbr> — например, <span style=\"font-size 2em\"> RFC \n+\t\t3229 «Delta encoding in HTTP»</span> и <span style=\"font-weight: 800\">«Google SDHC»</span>, — но по \n+\t\tразным причинам они не получили должного распространения в браузерах и на серверах.\n+\t</p>\n+\t<p>\n+\t\tМы же решили сделать свой аналог на <abbr title=\"JavaScript\">JS</abbr>. Чтобы реализовать этот метод\n+\t\tобновления,начали искать реализации <span style=\"font-style: italic\">diff</span> на \n+\t\t<abbr title=\"JavaScript\">JS</abbr>. На популярных хостингах кода нашли библиотеки:\n+\t<ul>\n+\t\t<li><span style=\"font-style: italic\">VCDiff</span></li>\n+\t\t<li><span style=\"font-style: italic\">google-diff-patch-match</span></li>\n+\t</ul>\n+\t</p>\n+\t<p>Для окончательного выбора библиотеки нам нужно сравнить:</p>\n+\t<table border=\"1px solid black\">\n+\t\t<thead>\n+\t\t\t<tr>\n+\t\t\t\t<th>Библиотека </th>\n+\t\t\t\t<th>IE 9</th>\n+\t\t\t\t<th>Opera 12</th>\n+\t\t\t</tr>\n+\t\t</thead>\n+\t\t<tbody>\n+\t\t\t<tr>\n+\t\t\t\t<td>vcdiff  </td>\n+\t\t\t\t<td>8</td>\n+\t\t\t\t<td>5</td>\n+\t\t\t</tr>\n+\t\t\t<tr>\n+\t\t\t\t<td>google diff</td>\n+\t\t\t\t<td>1363 </td>\n+\t\t\t\t<td>76</td>\n+\t\t\t</tr>\n+\t\t</tbody>\n+\t</table>\n+\t<p>\n+\t\tПосле того как мы определились с библиотекой для диффа, нужно определиться с тем,где и как хранить \n+\t\tстатику на клиенте.\n+\t</p>\n+\t<p>\n+\t\tФормат файла с патчами для проекта выглядит так:\n+\t\t<pre>\n+\t\t\t<code>\n+\t\t\t\t[\n+   \t\t\t\t\t {\n+    \t   \t\t \"k\": \"jane.css\",\n+    \t   \t\t \"p\": [patch],\n+    \t  \t\t  \"s\": 4554\n+   \t\t\t },\n+   \t\t\t {\n+   \t\t\t     \"k\": \"jane.css\",\n+   \t\t\t     \"p\": [patch],\n+   \t\t\t     \"s\": 4554\n+  \t\t\t  }\n+\t\t\t]\n+    \t\t</code>\n+\t\t</pre>\n+\t</p>\n+\t<p>\n+\t\tТо есть это обычный массив из объектов. Каждый объект — отдельный ресурс. У каждого объекта есть три\n+    \tсвойства. <<span style=\"font-style: italic\">>k</span> — названия ключа в \n+    \t<<span style=\"font-style:italic\">>localStorage</span> для этого ресурса. \n+    \t<<span style=\"font-style: italic\">>p</span> — патч для ресурса,который сгенерировал \n+    \t<<span style=\"font-style: italic\">>vcdiff</span>. <<span style=\"font-style:italic\">>s</span> — \n+    \tчексумма для ресурса актуальной версии, чтобы потом можно было проверить правильность наложения патча \n+    \tна клиенте. Чексумма вычисляется по \n+    \t<a href=\"https://en.wikipedia.org/wiki/Broyden–Fletcher–Goldfarb–Shanno_algorithm\"target=\"_blank\">\n+    \tалгоритму Флетчера</a>.\n+\t</p>\n+\t<p>\n+\t\t<span style=\"font-weight: 800\">Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно</span> \n+\t\t(<abbr title=\"Broyden — Fletcher — Goldfarb — Shanno algorithm\">BFGS</abbr>BFGS)— итерационный метод\n+\t\tчисленной оптимизации, предназначенный для нахождения локального максимума/минимума нелинейного\n+\t\tфункционала без ограничений.</p>\n+\t<p>\n+\t\tПочему именно <span style=\"font-style: italic\">алгоритм Флетчера</span>, а не другие популярные \n+\t\tалгоритмы вроде:\n+\t\t<span style=\"font-weight: 800\">CRC16/32</span> - алгоритм нахождения контрольной суммы, \n+\t\tпредназначенный для проверки целостности данных <span style=\"font-weight: 800\">md5</span> - 128-битный\n+\t\tалгоритм хеширования. Предназначен для создания «отпечатков» или дайджестов сообщения произвольной\n+\t\tдлины и последующей проверки их подлинности.\n+\t</p>\n+\t<p>Потому что он быстрый, компактный и легок в реализации.</p>\n+\t<h2>Итог</h2>\n+\t<p>Фактически мы экономим 80-90% трафика. Размер загружаемой статитки в байтах:</p>\n+\t<table border=\"1px solid black\">\n+\t\t<thead>\n+\t\t\t<tr>\n+\t\t\t\t<th>Релиз </th>\n+\t\t\t\t<th>С патчем</th>\n+\t\t\t\t<th>Без патча</th>\n+\t\t\t</tr>\n+\t\t</thead>\n+\t\t<tbody>\n+\t\t\t<tr>\n+\t\t\t\t<td>7.7.20  </td>\n+\t\t\t\t<td>397</td>\n+\t\t\t\t<td>174 549</td>\n+\t\t\t</tr>\n+\t\t\t<tr>\n+\t\t\t\t<td>7.7.21d>\n+\t\t\t\t<td>383 </td>\n+\t\t\t\t<td>53 995</td>\n+\t\t\t</tr>\n+\t\t\t<tr>\n+\t\t\t\t<td>7.7.22d>\n+\t\t\t\t<td>483 </td>\n+\t\t\t\t<td>3 995</td>\n+\t\t\t</tr>\n+\t\t</tbody>\n+\t</table>\n+\t<h2>Алгоритм Флетчера</h2>\n+\t<p>\n+\t\tдано <var>&epsilon;</var>, <var>x</var><sub>0</sub> <br>\n+\t\tинициализировать <var>H</var> <sub>0</sub> <br>\n+\t\t<var>K</var> <span style=\"font-weight: 800\">= 0</span> <br>\n+\t\t<code>while</code> ||<var>&nabla;</var> <var>f</var> <sub>k</sub>|| <var>></var> <var>&epsilon;</var>\n+\t\t<br>\n+\t\t<p style=\"margin-left: 15px\">\n+\t\t\tнайти направление <var>p</var> <sub>k</sub> = <var>-C</var><sub>k</sub><var>&nabla;</var>\n+\t\t\t<var>f</var><sub>k</sub><br>\n+\t\t\tвычислить <var>x</var><sub>k+1</sub>=<var>x</var><sub>k</sub> + <var>&alpha;</var><sub>k</sub>\n+\t\t\t<var>p</var><sub>k</sub>,<var>&alpha;</var><sub>k</sub> удовлетворяет условиям Вольф<br>\n+\t\t\tобозначить <var>s</var><sub>k</sub>= <var>x</var><sub>k+1</sub>- <var>x</var><sub>k</sub> и \n+\t\t\t<var>y</var><sub>k</sub> = <var>&nabla;</var> <var>f</var> <sub>k+1</sub> - <var>&nabla;</var> \n+\t\t\t<var>f</var> <sub>k</sub><br>\n+\t\t\tвычислить <var>C</var><sub>k+1</sub><br>\n+\t\t\t<var>k</var> = <var>k</var> + 1\n+\t\t</p>\n+\t<code>end</code>\n+\t</p>\n+\t<p><hr></p>\n+ \t<address>\n+     \tАвтор: @doochik</a><br>\n+    \tС++ разработчик<br>\n+    \tЭлектронная почта: (<a href=\"mailto:doochik@yandex-team.ru\">doochik@yandex-team.ru</a>)<br>\n+    \tКомпания: <span style=\"color: red\">Я</span>ндекс\n+   </address>\n+   <p><hr></p>\n+   <h3>Комментарии(3):</h3>\n+   <ul id=\"comments\">\n+   \t\t<li>\n+   \t\t\t<span style=\"font-weight: 800\">Mogaika</span> \n+   \t\t\t(<a href=\"mailto:mogaika@yandex-team.ru\">mogaika@yandex-team.ru</a>) \n+   \t\t\t<time>30 ноября 2014 в 17:05</time> <br>\n+ \t  \t\t<p>А можете привести сравнение, на сколько быстрее грузится lite версия?</p>\n+  \t \t</li>\n+ \t  \t<li>\n+\t\t\t<address>\n+  \t \t\t\t<span style=\"font-weight: 800\">JIguse</span> \n+  \t \t\t\t(<a href=\"mailto:mrawesome@yandex.ru\">mrawesome@yandex.ru</a>) \n+  \t \t\t\t<time>29 ноября 2014 в 21:30</time> <br>\n+  \t \t\t</address>\n+  \t \t\t\tСпасибо за статью, познавательно. Здорово, что Яндекс делится некоторыми подробностями о \n+  \t \t\t\tвнутренней работе сервисов.\n+  \t \t\t</p>\n+\t\t</li>\n+   \t\t<li>\n+\t\t\t<address>\n+   \t\t\t\t<span style=\"font-weight: 800\">Brister</span> \n+  \t \t\t\t(<a href=\"brist89@yandex-team.ru\">brist89@yandex-team.ru</a>) \n+   \t\t\t\t<time>24 ноября 2014 в 13:13</time><br>\n+   \t\t\t</address>\n+   \t\t\t<q>\n+   \t\t\t\t(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех). Получается \n+   \t\t\t\tзначение от нуля до единицы, которое, видимо, лучше всего показывает, хорошо или плохо работает \n+   \t\t\t\tпочта.\n+   \t\t\t</q>\n+   \t\t    <p>наверное все-таки от 0.5 до 1</p>\n+   \t \t</li>\n+   \t\t<li>\n+   \t\t\t<address>\n+   \t\t    \t<span style=\"font-weight: 800\">alexeimois</span> \n+   \t\t    \t(<a href=\"mailto:test@yandex.ru\">test@yandex.ru</a>)\n+   \t\t    \t<time>22 ноября 2014 в 17:35</time>\n+   \t\t    \t</address>\n+   \t\t    <p>\n+   \t\t    \tМы измеряем скорость загрузки с помощью Яндекс.Метрики: \n+   \t\t    \t<a href=\"help.yandex.ru/metrika/reports/monitoring_timing.xml\">","path":"index.html","position":296,"original_position":296,"commit_id":"1ac540c535287def8521fe7334b3c5139173a924","original_commit_id":"1ac540c535287def8521fe7334b3c5139173a924","user":{"login":"bratva","id":1937870,"avatar_url":"https://avatars.githubusercontent.com/u/1937870?v=3","gravatar_id":"","url":"https://api.github.com/users/bratva","html_url":"https://github.com/bratva","followers_url":"https://api.github.com/users/bratva/followers","following_url":"https://api.github.com/users/bratva/following{/other_user}","gists_url":"https://api.github.com/users/bratva/gists{/gist_id}","starred_url":"https://api.github.com/users/bratva/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bratva/subscriptions","organizations_url":"https://api.github.com/users/bratva/orgs","repos_url":"https://api.github.com/users/bratva/repos","events_url":"https://api.github.com/users/bratva/events{/privacy}","received_events_url":"https://api.github.com/users/bratva/received_events","type":"User","site_admin":false},"body":"Здесь необходимо указать абсолютный путь до ресурса.\r\n`https://help...`","created_at":"2015-09-30T19:30:20Z","updated_at":"2015-09-30T19:30:20Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/21#discussion_r40839921","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40839921"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/21#discussion_r40839921"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21","id":46273363,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/21","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/21.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/21.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/21","number":21,"state":"open","locked":false,"title":"Balakin Vladislav","user":{"login":"BalakinVladislav","id":14889461,"avatar_url":"https://avatars.githubusercontent.com/u/14889461?v=3","gravatar_id":"","url":"https://api.github.com/users/BalakinVladislav","html_url":"https://github.com/BalakinVladislav","followers_url":"https://api.github.com/users/BalakinVladislav/followers","following_url":"https://api.github.com/users/BalakinVladislav/following{/other_user}","gists_url":"https://api.github.com/users/BalakinVladislav/gists{/gist_id}","starred_url":"https://api.github.com/users/BalakinVladislav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BalakinVladislav/subscriptions","organizations_url":"https://api.github.com/users/BalakinVladislav/orgs","repos_url":"https://api.github.com/users/BalakinVladislav/repos","events_url":"https://api.github.com/users/BalakinVladislav/events{/privacy}","received_events_url":"https://api.github.com/users/BalakinVladislav/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-29T12:59:28Z","updated_at":"2015-09-30T19:30:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7b01bc9a0e4198271f39cdf37f4c9231945fa7d6","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21/comments","review_comment_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments{/number}","comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/21/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/1ac540c535287def8521fe7334b3c5139173a924","head":{"label":"BalakinVladislav:master","ref":"master","sha":"1ac540c535287def8521fe7334b3c5139173a924","user":{"login":"BalakinVladislav","id":14889461,"avatar_url":"https://avatars.githubusercontent.com/u/14889461?v=3","gravatar_id":"","url":"https://api.github.com/users/BalakinVladislav","html_url":"https://github.com/BalakinVladislav","followers_url":"https://api.github.com/users/BalakinVladislav/followers","following_url":"https://api.github.com/users/BalakinVladislav/following{/other_user}","gists_url":"https://api.github.com/users/BalakinVladislav/gists{/gist_id}","starred_url":"https://api.github.com/users/BalakinVladislav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BalakinVladislav/subscriptions","organizations_url":"https://api.github.com/users/BalakinVladislav/orgs","repos_url":"https://api.github.com/users/BalakinVladislav/repos","events_url":"https://api.github.com/users/BalakinVladislav/events{/privacy}","received_events_url":"https://api.github.com/users/BalakinVladislav/received_events","type":"User","site_admin":false},"repo":{"id":43366018,"name":"verstka-tasks-1","full_name":"BalakinVladislav/verstka-tasks-1","owner":{"login":"BalakinVladislav","id":14889461,"avatar_url":"https://avatars.githubusercontent.com/u/14889461?v=3","gravatar_id":"","url":"https://api.github.com/users/BalakinVladislav","html_url":"https://github.com/BalakinVladislav","followers_url":"https://api.github.com/users/BalakinVladislav/followers","following_url":"https://api.github.com/users/BalakinVladislav/following{/other_user}","gists_url":"https://api.github.com/users/BalakinVladislav/gists{/gist_id}","starred_url":"https://api.github.com/users/BalakinVladislav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BalakinVladislav/subscriptions","organizations_url":"https://api.github.com/users/BalakinVladislav/orgs","repos_url":"https://api.github.com/users/BalakinVladislav/repos","events_url":"https://api.github.com/users/BalakinVladislav/events{/privacy}","received_events_url":"https://api.github.com/users/BalakinVladislav/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/BalakinVladislav/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1","forks_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/BalakinVladislav/verstka-tasks-1/releases{/id}","created_at":"2015-09-29T12:31:29Z","updated_at":"2015-09-29T12:31:29Z","pushed_at":"2015-09-30T18:15:23Z","git_url":"git://github.com/BalakinVladislav/verstka-tasks-1.git","ssh_url":"git@github.com:BalakinVladislav/verstka-tasks-1.git","clone_url":"https://github.com/BalakinVladislav/verstka-tasks-1.git","svn_url":"https://github.com/BalakinVladislav/verstka-tasks-1","homepage":"","size":98,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"urfu-2015:master","ref":"master","sha":"92106c708076d457b6ffcd8175044271b4318dd9","user":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"repo":{"id":43061154,"name":"verstka-tasks-1","full_name":"urfu-2015/verstka-tasks-1","owner":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/urfu-2015/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":false,"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1","forks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/releases{/id}","created_at":"2015-09-24T10:45:26Z","updated_at":"2015-09-29T19:03:45Z","pushed_at":"2015-09-30T18:56:20Z","git_url":"git://github.com/urfu-2015/verstka-tasks-1.git","ssh_url":"git@github.com:urfu-2015/verstka-tasks-1.git","clone_url":"https://github.com/urfu-2015/verstka-tasks-1.git","svn_url":"https://github.com/urfu-2015/verstka-tasks-1","homepage":"","size":1797,"stargazers_count":14,"watchers_count":14,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":50,"mirror_url":null,"open_issues_count":34,"forks":50,"open_issues":34,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/21"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/21"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/21/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21/comments"},"review_comment":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/21/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/1ac540c535287def8521fe7334b3c5139173a924"}}}}