{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41178848","id":41178848,"diff_hunk":"@@ -1,3 +1,246 @@\n+<!DOCUMENTSTYPE html>\n <html>\n-    <!-- Ваш замечательный код -->\n-</html>\n+\t<head>\n+\t\t<title>Яндекс.Блог</title>\n+\t\t<meta charset=\"utf-8\">\n+\t\t<style>\n+\t\t\tul li {\n+\t\t\t\tlist-style-type: none;\n+\t\t\t}\n+\t\t</style>\n+\t</head>\n+    <body>\n+    \t<span>\n+    \t\t<p>\n+    \t\t\tдано &epsilon;, <i><strong>x</strong></i><sub>0</sub>\n+    \t\t\t<br>\n+    \t\t\tинициализировать <i><strong>&Eta;</strong></i><sub>0</sub>\n+    \t\t\t<br>\n+    \t\t\t<i><strong>k</strong></i> = 0;\n+    \t\t\t<br>\n+    \t\t\t<strong>while</strong>\n+    \t\t\t<i><strong></strong></i> &#448;&#448; &#8711;<i><strong>f<sub>k</sub></strong></i>&#448;&#448; &gt; &epsilon;\n+    \t\t\t<br>\n+    \t\t\t&emsp; найти направление <i><strong>p<sub>k</sub> = &minus;C<sub>k</sub> &#8711;f<sub>k</sub></i></strong>\n+    \t\t\t<br>\n+    \t\t\t&emsp; вычислить <i><strong>x<sub>k+1</sub> = x<sub>k</sub> + &alpha;<sub>k</sub>p<sub>k</sub>, &alpha;<sub>k</sub></strong></i> удовлетворяет условиям Вольфе</strong></i>\n+    \t\t\t<br>\n+    \t\t\t&emsp; обозначить <i><strong>s<sub>k</sub> = x<sub>k+1</sub> &minus; x<sub>k</sub> </strong></i> и <i><strong>y<sub>k</sub> = &#8711;f<sub>k+1</sub> &minus; &#8711;f<sub>k</sub></strong></i>\n+    \t\t\t<br>\n+    \t\t\t&emsp; вычислить <i><strong>C<sub>k+1</sub></strong></i>\n+    \t\t\t<br>\n+    \t\t\t&emsp; <i><strong>k = k + 1</strong></i>\n+    \t\t\t<br>\n+    \t\t\tend\n+    \t\t</p>\n+    \t</span>\t\n+    \t<span>\n+\t    \t<h1>Блог компании Яндекс.</h1>\n+\t    \t<span>\n+\t\t    \t<h2>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h2>\n+\t\t    \t<p>\n+\t\t    \t\tЕсли ваш сайт медленно грузится, вы рискуете тем, что люди не оценят \n+\t\t    \t\tни то, какой он красивый, ни то, какой он удобный. Никому не нравится, \n+\t\t    \t\tкогда все тормозит. Мы регулярно добавляем в Яндекс.Почту новую \n+\t\t    \t\tфункциональность, иногда — исправляем ошибки, а это значит, у нас \n+\t\t    \t\tпостоянно появляются новый коди новая логика. Всё это напрямую влияет \n+\t\t    \t\tна скорость работы интерфейса.\n+\t\t\t\t</p>\n+\t\t\t\t<span>\n+\t\t\t\t\t<h3>Что мы измеряем</h3>\n+\t\t\t\t\t<h4>Этапы первой загрузки:</h4>\n+\t\t\t\t\t<ul>\n+\t\t\t\t\t\t<li>* подготовка;</li>\n+\t\t\t\t\t\t<li>* загрузка статики (HTTP-запрос и парсинг);</li>\n+\t\t\t\t\t\t<li>* исполнение модулей;</li>\n+\t\t\t\t\t\t<li>* инициализация базовых объектов;</li>\n+\t\t\t\t\t\t<li>* отрисовка.</li>\n+\t\t\t\t\t</ul>\n+\t\t\t\t\t<h4>Этапы отрисовки любой страницы:</h4>\n+\t\t\t\t\t<ul>\n+\t\t\t\t\t\t<li>* подготовка к запросу на сервер;</li>\n+\t\t\t\t\t\t<li>* ззапрос данных с сервера;</li>\n+\t\t\t\t\t\t<li>* ишаблонизация;</li>\n+\t\t\t\t\t\t<li>* инициализация базовых объектов;</li>\n+\t\t\t\t\t\t<li>* обновление DOM.</li>\n+\t\t\t\t\t</ul>\n+\t\t\t\t\t<ul>\n+\t\t\t\t\t\t<li>&ndash; &laquo;Ок, теперь у нас есть метрики, мы можем отправить их на сервер&raquo; - говорим мы</li>\n+\t\t\t\t\t\t<li>&ndash; &laquo;Что же дальше?&raquo; - вопрошаете вы</li>\n+\t\t\t\t\t\t<li>&ndash; &laquo;А давай построим график!&raquo; - отвечаем мы инициализация базовых объектов;</li>\n+\t\t\t\t\t\t<li>&ndash; &laquo;А что будем считать?&raquo; - уточняете вы</li>\n+\t\t\t\t\t</ul>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tКак вы знаете, медиана – это серединное, а не среднее значение в выборке.\n+\t\t\t\t\t\tЕсли у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5.\n+\t\t\t\t\t\tВ общем случае медиана отлично показывает, сколько грузится средний пользователь.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<br>\n+\t\t\t\t\t\tВ случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+\t\t\t\t\t\tрассказать, сколько пользователей ускорилось, а сколько замедлилось.\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tAPDEX – метрика, которая сразу говорит: хорошо или плохо. Метрика\n+\t\t\t\t\t\tработает очень просто. Мы выбираем временной интервал [0; t], такой, что если\n+\t\t\t\t\t\tвремя показа страницы попало в него, то пользователь счастлив. Берем еще один\n+\t\t\t\t\t\tинтервал, (t; 4t] (в четыре раза больше первого), и считаем, что если страница\n+\t\t\t\t\t\tпоказана за это время, то пользователь в целом удовлетворен скоростью работы,\n+\t\t\t\t\t\tно уже не настолько счастлив. И применяем формулу: \n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t(кол-во счастливых пользователей + кол-во удовлетворенных &frasl; 2) &frasl; (кол-во всех).\n+\t\t\t\t\t\tПолучается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+\t\t\t\t\t\tхорошо или плохо работает почта.\n+\t\t\t\t\t</p>\n+\t\t\t\t</span>\n+\t\t\t\t<span>\n+\t\t\t\t\t<h3>Как мы измеряем</h3>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tСейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+\t\t\t\t\t\tпричину замедления: медленнее стал отвечать сервер либо слишком долго\n+\t\t\t\t\t\tвыполняется JavaScript. Выглядит это примерно так:\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tthis.timings['look-ma-im-start'] = Date.now();<br>\n+\t\t\t\t\t\tthis.timings['look-ma-finish'] = Date.now();\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tC помощью Date.now() мы получаем текущее время. Все тайминги собираются и приотправке\n+\t\t\t\t\t\t рассчитываются. На этапах разница между &#8220;end&#8221; и &#8220;start&#8221;\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tvar totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tИ на сервер прилетают подобные записи:\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tserverResponse=50&#38;domUpdate=60\n+\t\t\t\t\t</p>\n+\t\t\t\t</span>\n+\t\t\t\t<span>\n+\t\t\t\t\t<h3>Как мы ускоряем</h3>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tЧтобы снизить время загрузки почты при выходе новых версий, мы уже делаем следующее:\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<ul>\t\t\t\t\n+\t\t\t\t\t\t<li>* включаем gzip;</li>\n+\t\t\t\t\t\t<li>* выставляем заголовки кэширования;</li>\n+\t\t\t\t\t\t<li>* фризим CSS, JS, шаблоны и картинки;</li>\n+\t\t\t\t\t\t<li>* используем CDN;</li>\n+\t\t\t\t\t</ul>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tМы подумали: &laquo;А что если хранить где-то старую версию файлов, а при выходе новой \n+\t\t\t\t\t\tпередавать только diff между ней и той, которая сохранена у пользователя?&raquo;\n+\t\t\t\t\t\tВ браузере же останется просто наложить патч на клиенте.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tНа самое деле эта идея не нова. Уже существуют стандарты для HTTP &ndash; например,\n+\t\t\t\t\t\tRFC 3229 &laquo;Delta encoding in HTTP&raquo; и &laquo;Google SDHC&raquo;, &ndash; но по разным причинам они\n+\t\t\t\t\t\tне получили должного распространения в браузерах и на серверах.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tМы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления,\n+\t\t\t\t\t\tначали искать реализации diff на JS. На популярных хостингах кода нашли\n+\t\t\t\t\t\tбиблиотеки:<br>\n+\t\t\t\t\t\t&ndash; VCDiff<br>\n+\t\t\t\t\t\t&ndash; google-diff-patch-match\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tДля окончательного выбора библиотеки нам нужно сравнить:\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<pre>Библиотека      | IE 9          | Opera 12<br>----------      | ----          | --------<br>vcdiff          | 8             | 5<br>google diff     | 1363          | 76<br>\n+\t\t\t\t\t</pre>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tПосле того как мы определились с библиотекой для диффа, нужно определиться с тем,\n+\t\t\t\t\t\tгде и как хранить статику на клиенте.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tФормат файла с патчами для проекта выглядит так:\n+\t\t\t\t\t\t<br>\n+\t\t\t\t\t\t[<br>\n+\t\t\t\t\t\t\t&emsp;&emsp;{<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;k&quot;: &quot;jane.css&quot;,<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;p&quot;: [patch],<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;s&quot;: 4554<br>\n+\t\t\t\t\t\t    &emsp;&emsp;},<br>\n+\t\t\t\t\t\t    &emsp;&emsp;{<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;k&quot;: \"jane.css\",<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;p&quot;: [patch],<br>\n+\t\t\t\t\t\t    &emsp;&emsp;&emsp;&emsp;&quot;s&quot;: 4554<br>\n+\t\t\t\t\t\t    &emsp;&emsp;}<br>\n+\t\t\t\t\t\t&#93;<br>\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tТо есть это обычный массив из объектов. Каждый объект &ndash; отдельный ресурс. У\n+\t\t\t\t\t\tкаждого объекта есть три свойства. k &ndash; названия ключа в localStorage для этого\n+\t\t\t\t\t\tресурса. p &ndash; патч для ресурса, который сгенерировал vcdiff. s &ndash; чексумма для\n+\t\t\t\t\t\tресурса актуальной версии, чтобы потом можно было проверить правильность\n+\t\t\t\t\t\tналожения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tАлгоритм Бройдена &ndash; Флетчера &ndash; Гольдфарба &ndash; Шанно (BFGS)\n+\t\t\t\t\t\t&ndash; итерационный метод численной оптимизации, предназначенный для\n+\t\t\t\t\t\tнахождения локального максимума/минимума нелинейного функционала\n+\t\t\t\t\t\tбез ограничений.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tПочему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:\n+\t\t\t\t\t\tCRC16&#47;32 - алгоритм нахождения контрольной суммы, предназначенный для проверки\n+\t\t\t\t\t\tцелостности данных\n+\t\t\t\t\t\tmd5 - 128-битный алгоритм хеширования. Предназначен для создания «отпечатков»\n+\t\t\t\t\t\tили дайджестов сообщения произвольной длины и последующей проверки\n+\t\t\t\t\t\tих подлинности.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tПотому что он быстрый, компактный и легок в реализации.\n+\t\t\t\t\t</p>\n+\t\t\t\t</span>\n+\t\t\t\t<span>\n+\t\t\t\t\t<h3>Итог</h3>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tФактически мы экономим 80-90&#37; трафика. Размер загружаемой статитки в байтах:\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<pre>Релиз  | С патчем     | Без патча<br>7.7.20  | 397          | 174 549<br>7.7.21  | 383          | 53 995<br>7.7.22  | 483          | 3 995</pre>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\tАвтор: &#64;doochik<br>\n+\t\t\t\t\t\tС++ разработик\n+\t\t\t\t\t\tЭлектронная почта: (doochik&#64;yandex-team.ru)\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>Комментарии (3):</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&ndash; Mogaika (mogaika&#64;yandex-team.ru) 30 ноября 2014 в 17:05<br>\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&emsp; А можете привести сравнение, на сколько быстрее грузится lite версия?\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&ndash; JIguse (mrawesome&#64;yandex.ru) 29 ноября 2014 в 21:30\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&emsp; Спасибо за статью, познавательно. Здорово, что Яндекс делится некоторыми \n+\t\t\t\t\t\tподробностями о внутренней работе сервисов.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&ndash; Brister (brist89&#64;yandex-team.ru) 24 ноября 2014 в 13:13\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&emsp;(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех).\n+\t\t\t\t\t\tПолучается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+\t\t\t\t\t\tхорошо или плохо работает почта.\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&emsp;наверное все-таки от 0.5 до 1\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&ndash; alexeimois (test&#64;yandex.ru) 22 ноября 2014 в 17:35\n+\t\t\t\t\t</p>\n+\t\t\t\t\t<p>\n+\t\t\t\t\t\t&emsp;Мы измеряем скорость загрузки с помощью Яндекс.Метрики:\n+\t\t\t\t\t\thelp.yandex.ru/metrika/reports/monitoring_timing.xml\n+\t\t\t\t\t</p>\n+\t\t\t\t\t&copy; Яндекс, help&#64;yandex.ru, Хохрякова, 10","path":"index.html","position":243,"original_position":243,"commit_id":"488c2edb3e8fc0bbf16d90eefdaa62900818edc0","original_commit_id":"488c2edb3e8fc0bbf16d90eefdaa62900818edc0","user":{"login":"f0rmat1k","id":769992,"avatar_url":"https://avatars.githubusercontent.com/u/769992?v=3","gravatar_id":"","url":"https://api.github.com/users/f0rmat1k","html_url":"https://github.com/f0rmat1k","followers_url":"https://api.github.com/users/f0rmat1k/followers","following_url":"https://api.github.com/users/f0rmat1k/following{/other_user}","gists_url":"https://api.github.com/users/f0rmat1k/gists{/gist_id}","starred_url":"https://api.github.com/users/f0rmat1k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/f0rmat1k/subscriptions","organizations_url":"https://api.github.com/users/f0rmat1k/orgs","repos_url":"https://api.github.com/users/f0rmat1k/repos","events_url":"https://api.github.com/users/f0rmat1k/events{/privacy}","received_events_url":"https://api.github.com/users/f0rmat1k/received_events","type":"User","site_admin":false},"body":"Для этой строки есть очень подходящий тег. Подумайте, какой.","created_at":"2015-10-05T18:24:14Z","updated_at":"2015-10-05T18:24:14Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/70#discussion_r41178848","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41178848"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/70#discussion_r41178848"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70","id":46810373,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/70","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/70.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/70.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/70","number":70,"state":"open","locked":false,"title":"Мозалов Павел","user":{"login":"MozalovPavel","id":10745755,"avatar_url":"https://avatars.githubusercontent.com/u/10745755?v=3","gravatar_id":"","url":"https://api.github.com/users/MozalovPavel","html_url":"https://github.com/MozalovPavel","followers_url":"https://api.github.com/users/MozalovPavel/followers","following_url":"https://api.github.com/users/MozalovPavel/following{/other_user}","gists_url":"https://api.github.com/users/MozalovPavel/gists{/gist_id}","starred_url":"https://api.github.com/users/MozalovPavel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MozalovPavel/subscriptions","organizations_url":"https://api.github.com/users/MozalovPavel/orgs","repos_url":"https://api.github.com/users/MozalovPavel/repos","events_url":"https://api.github.com/users/MozalovPavel/events{/privacy}","received_events_url":"https://api.github.com/users/MozalovPavel/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-05T17:40:47Z","updated_at":"2015-10-05T18:24:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"126da4a40e229cd7b0a106e108b05e4d292f7989","assignee":{"login":"f0rmat1k","id":769992,"avatar_url":"https://avatars.githubusercontent.com/u/769992?v=3","gravatar_id":"","url":"https://api.github.com/users/f0rmat1k","html_url":"https://github.com/f0rmat1k","followers_url":"https://api.github.com/users/f0rmat1k/followers","following_url":"https://api.github.com/users/f0rmat1k/following{/other_user}","gists_url":"https://api.github.com/users/f0rmat1k/gists{/gist_id}","starred_url":"https://api.github.com/users/f0rmat1k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/f0rmat1k/subscriptions","organizations_url":"https://api.github.com/users/f0rmat1k/orgs","repos_url":"https://api.github.com/users/f0rmat1k/repos","events_url":"https://api.github.com/users/f0rmat1k/events{/privacy}","received_events_url":"https://api.github.com/users/f0rmat1k/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70/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/70/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/488c2edb3e8fc0bbf16d90eefdaa62900818edc0","head":{"label":"MozalovPavel:master","ref":"master","sha":"488c2edb3e8fc0bbf16d90eefdaa62900818edc0","user":{"login":"MozalovPavel","id":10745755,"avatar_url":"https://avatars.githubusercontent.com/u/10745755?v=3","gravatar_id":"","url":"https://api.github.com/users/MozalovPavel","html_url":"https://github.com/MozalovPavel","followers_url":"https://api.github.com/users/MozalovPavel/followers","following_url":"https://api.github.com/users/MozalovPavel/following{/other_user}","gists_url":"https://api.github.com/users/MozalovPavel/gists{/gist_id}","starred_url":"https://api.github.com/users/MozalovPavel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MozalovPavel/subscriptions","organizations_url":"https://api.github.com/users/MozalovPavel/orgs","repos_url":"https://api.github.com/users/MozalovPavel/repos","events_url":"https://api.github.com/users/MozalovPavel/events{/privacy}","received_events_url":"https://api.github.com/users/MozalovPavel/received_events","type":"User","site_admin":false},"repo":{"id":43701311,"name":"verstka-tasks-1","full_name":"MozalovPavel/verstka-tasks-1","owner":{"login":"MozalovPavel","id":10745755,"avatar_url":"https://avatars.githubusercontent.com/u/10745755?v=3","gravatar_id":"","url":"https://api.github.com/users/MozalovPavel","html_url":"https://github.com/MozalovPavel","followers_url":"https://api.github.com/users/MozalovPavel/followers","following_url":"https://api.github.com/users/MozalovPavel/following{/other_user}","gists_url":"https://api.github.com/users/MozalovPavel/gists{/gist_id}","starred_url":"https://api.github.com/users/MozalovPavel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MozalovPavel/subscriptions","organizations_url":"https://api.github.com/users/MozalovPavel/orgs","repos_url":"https://api.github.com/users/MozalovPavel/repos","events_url":"https://api.github.com/users/MozalovPavel/events{/privacy}","received_events_url":"https://api.github.com/users/MozalovPavel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MozalovPavel/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1","forks_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/MozalovPavel/verstka-tasks-1/releases{/id}","created_at":"2015-10-05T17:25:20Z","updated_at":"2015-10-05T17:25:20Z","pushed_at":"2015-10-05T17:38:32Z","git_url":"git://github.com/MozalovPavel/verstka-tasks-1.git","ssh_url":"git@github.com:MozalovPavel/verstka-tasks-1.git","clone_url":"https://github.com/MozalovPavel/verstka-tasks-1.git","svn_url":"https://github.com/MozalovPavel/verstka-tasks-1","homepage":"","size":2114,"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-10-03T14:28:03Z","pushed_at":"2015-10-05T17:43:27Z","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":2114,"stargazers_count":15,"watchers_count":15,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":86,"mirror_url":null,"open_issues_count":49,"forks":86,"open_issues":49,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/70"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/70"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/70/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/70/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/70/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/488c2edb3e8fc0bbf16d90eefdaa62900818edc0"}}}}