{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41732271","id":41732271,"diff_hunk":"@@ -1,3 +1,295 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+    <head>\n+        <!-- Кодировка документа -->\n+        <meta charset=\"utf-8\">\n+        <!-- Ключевые слова документа -->\n+        <meta name=\"keywords\" content=\"Яндекс, Почта, Скорость загрузки, Алгоритм Флетчера\">\n+        <!-- Автор документа -->\n+        <meta name=\"author\" content=\"lenfly\">\n+        <!-- Подключение файла стилей -->\n+        <link rel=\"stylesheet\" href=\"main.css\">\n+        <!-- Подключение MathJax -->\n+        <script type=\"text/javascript\"\n+            src=\"https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\">\n+        </script>\n+        <!-- Заголовок документа -->\n+        <title>Яндекс.Блог</title>\n+    </head>\n+    <body>\n+        <article>\n+            <header> <!-- \"Шапка\" сайта -->\n+                    <h1>Блог компании Яндекс.</h1> <!-- Заголовок первого уровня -->\n+                    <h2>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h2> <!-- Заголовок второго уровня -->\n+            </header>\n+            <p>\n+                Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,\n+                какой он красивый, ни то, какой он удобный. Никому не понравится, когда все\n+                тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность,\n+                иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый код\n+                и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+            </p>\n+            <p><strong>Что мы измеряем</strong></p><!-- Параграф -->\n+            <p>Этапы первой загрузки:</p>\n+            <ul>\n+                <li>подготовка;</li>\n+                <li>загрузка статики (<abbr class=\"abbr\" title=\"англ. HyperText Transfer Protocol — «протокол передачи гипертекста»\">HTTP</abbr>\n+                - запрос и парсинг);</li>\n+                <li>исполнение модулей;</li>\n+                <li>инициализация базовых объектов;</li>\n+                <li>отрисовка.</li>\n+            </ul>\n+            <p>Этапы отрисовки любой страницы:</p>\n+            <ul>\n+                <li>подготовка к запросу на сервер;</li>\n+                <li>запрос данных с сервера;</li>\n+                <li>шаблонизация;</li>\n+                <li>обновление <abbr class=\"abbr\" title=\"англ. Document Object Model — «объектная модель документа»\">DOM</abbr>.</li>\n+            </ul>\n+            <p>\n+                —<q class=\"q\">Ок, теперь у нас есть метрики, мы можем отправить их на сервер</q> - говорим мы<br>\n+                —<q class=\"q\">Что же дальше?</q> - вопрошаете вы<br>\n+                —<q class=\"q\">А давай построим график!</q> - отвечаем мы<br>\n+                —<q class=\"q\">А что будем считать?</q> - уточняете вы\n+            </p>\n+            <p>\n+                <q>Как вы знаете, <dfn>медиана</dfn> – это серединное, а не среднее значение в выборке.\n+                Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5.\n+                В общем случае медиана отлично показывает, сколько грузится средний пользователь.</q>\n+            </p>\n+            <p>\n+                В случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+                рассказать, сколько пользователей ускорилось, а сколько замедлилось.\n+            </p>\n+            <p>\n+                <abbr class=\"abbr\" title=\"Application Performance Index\">APDEX</abbr> – \n+                метрика, которая сразу говорит: хорошо или плохо. Метрика\n+                работает очень просто. Мы выбираем временной интервал [0; t], такой, что если\n+                время показа страницы попало в него, то пользователь счастлив. Берем еще один\n+                интервал, (t; 4t] (в четыре раза больше первого), и считаем, что если страница\n+                показана за это время, то пользователь в целом удовлетворен скоростью работы,\n+                но уже не настолько счастлив. И применяем формулу:\n+            </p>\n+            <p>\n+                кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех).<br>\n+                Получается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+                хорошо или плохо работает почта.\n+            </p>\n+            <hr> <!-- Следующая часть повествования -->\n+            <p><strong>Как мы измеряем</strong></p>\n+            <p>\n+                Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+                причину замедления: медленнее стал отвечать сервер либо слишком долго\n+                выполняется JavaScript. Выглядит это примерно так:\n+            </p>\n+            <p>\n+                this.timings['look-ma-im-start'] = Date.now();<br>\n+                this.timings['look-ma-finish'] = Date.now();\n+            </p>\n+            <p>\n+                C помощью Date.now() мы получаем текущее время. Все тайминги собираются и при\n+                отправке рассчитываются. На этапах разница между “end” и “start” не считается,\n+                а все вычисления производятся в конце:\n+            </p>\n+            <p>var totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];</p>\n+            <p>И на сервер прилетают подобные записи:</p>\n+            <p>serverResponse=50&domUpdate=60</p>\n+            <hr> <!-- Следующая часть повествования -->\n+            <p><strong>Как мы ускоряем</strong></p>\n+            <p>\n+                Чтобы снизить время загрузки почты при выходе новых версий,<br>\n+                мы уже делаем следующее:\n+            </p>\n+            <ul>\n+                <li>включаем gzip;</li>\n+                <li>выставляем заголовки кэширования;</li>\n+                <li>фризим <abbr class=\"abbr\" title=\"англ. Cascading Style Sheets — каскадные таблицы стилей\">CSS</abbr>, \n+                <abbr class=\"abbr\" title=\"JavaScript\">JS</abbr>,шаблоны и картинки;</li>\n+                <li>используем <abbr class=\"abbr\" title=\"Сontent Delivery Network — сеть доставки контента\">CDN</abbr>;</li>\n+            </ul>\n+            <p>\n+                Мы подумали:<q class=\"q\">А что если хранить где-то старую версию файлов, а при выходе новой\n+                передавать только diff между ней и той, которая сохранена у пользователя?</q>\n+                В браузере же останется просто наложить патч на клиенте.\n+            </p>\n+            <p>\n+                На самое деле эта идея не нова. Уже существуют стандарты для HTTP — например,\n+                RFC 3229 «Delta encoding in HTTP» и «Google SDHC», — но по разным причинам они\n+                не получили должного распространения в браузерах и на серверах.\n+            </p>\n+            <p>\n+                Мы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления,\n+                начали искать реализации diff на JS. На популярных хостингах кода нашли\n+                библиотеки:<br>\n+                - VCDiff<br>\n+                - google-diff-patch-match\n+            </p>\n+            <p>Для окончательного выбора библиотеки нам нужно сравнить:</p>\n+                <table class=\"table\"> <!-- Табличка -->\n+                    <thead>\n+                        <tr>\n+                            <th class=\"th\">Библиотека</th>\n+                            <th class=\"th\">IE 9</th>\n+                            <th class=\"th\">Opera 12</th>\n+                        </tr>\n+                    </thead>\n+                    <tbody>\n+                        <tr>\n+                            <td class=\"td\">vcdiff</td>\n+                            <td class=\"td\">8</td>\n+                            <td class=\"td\">5</td>\n+                        </tr>\n+                        <tr>\n+                            <td class=\"td\">google diff</td>\n+                            <td class=\"td\">1363</td>\n+                            <td class=\"td\">76</td>\n+                        </tr>\n+                    </tbody>\n+                </table>\n+            <p>\n+                После того как мы определились с библиотекой для диффа, нужно определиться с тем,\n+                где и как хранить статику на клиенте.\n+            </p>\n+            <p>Формат файла с патчами для проекта выглядит так:</p>\n+            <p>[</p>\n+            <p class=\"p20px\">{</p>\n+            <p class=\"p40px\">\n+                \"k\": \"jane.css\",<br>\n+                \"p\": [patch],<br>\n+                \"s\": 4554\n+            </p>\n+            <p class=\"p20px\">},<br>{</p>\n+            <p class=\"p40px\">\n+                \"k\": \"jane.css\",<br>\n+                \"p\": [patch],<br>\n+                \"s\": 4554\n+            </p>\n+            <p class=\"p20px\">}</p>\n+            <p>]</p>\n+            <pre><!-- Вариант номер два -->\n+[\n+    {\n+        \"k\": \"jane.css\",\n+        \"p\": [patch],\n+        \"s\": 4554\n+    },\n+    {\n+        \"k\": \"jane.css\",\n+        \"p\": [patch],\n+        \"s\": 4554\n+    }\n+]\n+            </pre>\n+            <p>\n+                То есть это обычный массив из объектов. Каждый объект — отдельный ресурс. У\n+                каждого объекта есть три свойства. k — названия ключа в localStorage для этого\n+                ресурса. p — патч для ресурса, который сгенерировал vcdiff. s — чексумма для\n+                ресурса актуальной версии, чтобы потом можно было проверить правильность\n+                наложения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.\n+            </p>\n+            <p>\n+                Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно (BFGS)\n+                — итерационный метод численной оптимизации, предназначенный для\n+                нахождения локального максимума/минимума нелинейного функционала\n+                без ограничений.\n+            </p>\n+            <p><!-- Симпатичная формула в MathJax -->\n+                дано &epsilon;, \\(x_0\\)<br>\n+                инициализировать \\(H_0\\)<br>\n+                &kappa;=0<br>\n+                <span class=\"bold\">while</span>\\(&verbar;&verbar;&nabla;&fnof;_&kappa;&verbar;&verbar;>&epsilon;\\)<br>\n+                <span class=\"p20px\">найти направление \\(&rho;_&kappa;=-C_&kappa;&nabla;&fnof;_&kappa;\\)</span><br>\n+                <span class=\"p20px\">вычислить \\(x_{&kappa;+1}=x_&kappa;+&alpha;_&kappa;&rho;_&kappa;,&alpha;_&kappa;\\) \n+                удовлетворяет условиям Вольфе</span><br>\n+                <span class=\"p20px\">обозначить \\(s_&kappa;=x_{&kappa;+1}-x_&kappa;\\) и \n+                \\(y_&kappa;=&nabla;&fnof;_{&kappa;+1}-&nabla;&fnof;_&kappa;\\)</span><br>\n+                <span class=\"p20px\">вычислить \\(С_{&kappa;+1}\\)</span><br>\n+                <span class=\"p20px\">\\(&kappa;=&kappa;+1\\)</span><br>\n+                <span class=\"bold\">end</span>\n+            </p>\n+            <p><img src=\"https://clck.ru/9b3Sn\" width=\"529\" height=\"237\" alt=\"Очень симпатичный алгоритм в картинках\"></p>\n+            <p>\n+                Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:<br>\n+                CRC16/32 - алгоритм нахождения контрольной суммы, предназначенный для проверки\n+                целостности данных<br>\n+                md5 - 128-битный алгоритм хеширования. Предназначен для создания «отпечатков»\n+                или дайджестов сообщения произвольной длины и последующей проверки\n+                их подлинности.\n+            </p>\n+            <p>Потому что он быстрый, компактный и легок в реализации.</p>\n+            <p><strong>Итог</strong></p>\n+            <p>Фактически мы экономим 80-90% трафика. Размер загружаемой статитки в байтах:</p>\n+                <table class=\"table\">\n+                    <thead>\n+                        <tr>\n+                            <th class=\"th\">Релиз</th>\n+                            <th class=\"th\">С патчем</th>\n+                            <th class=\"th\">Без патча</th>\n+                        </tr>\n+                    </thead>\n+                    <tbody>\n+                        <tr>\n+                            <td class=\"td\">7.7.20</td>\n+                            <td class=\"td\">397</td>\n+                            <td class=\"td\">174 549</td>\n+                        </tr>\n+                        <tr>\n+                            <td class=\"td\">7.7.21</td>\n+                            <td class=\"td\">383</td> \n+                            <td class=\"td\">53 995</td>\n+                        </tr>\n+                        <tr>\n+                            <td class=\"td\">7.7.22</td>\n+                            <td class=\"td\">483</td>\n+                            <td class=\"td\">3 995</td>\n+                        </tr>\n+                    </tbody>\n+                </table>\n+            <footer> <!-- \"Подвал\" сайта -->\n+                <address> <!-- Информация об авторе статьи -->\n+                    Автор: @doochik<br>\n+                    С++ разработик<br>\n+                    Электронная почта: (doochik@yandex-team.ru)<br>\n+                    Компания: Яндекс\n+                </address>\n+                <p><strong>Комментарии (3):</strong></p>\n+                <address> <!-- Контактная информация -->\n+                    - Mogaika <a href=\"mailto:mogaika@yandex-team.ru\">(mogaika@yandex-team.ru)</a>\n+                    &nbsp;<time datetime=\"2014-11-30\">30 ноября 2014 в 17:05</time>\n+                </address>\n+                <p class=\"p10px\">А можете привести сравнение, на сколько быстрее грузится lite версия?</p>\n+                <address>\n+                    - JIguse <a href=\"mailto:mrawesome@yandex.ru\">(mrawesome@yandex.ru)</a>\n+                    &nbsp;<time datetime=\"2014-11-29\">29 ноября 2014 в 21:30</time>\n+                </address>\n+                <p class=\"p10px\">\n+                    Спасибо за статью, познавательно. Здорово, что Яндекс делится некоторыми\n+                    подробностями о внутренней работе сервисов.\n+                </p>\n+                <address>\n+                    - Brister <a href=\"mailto:brist89@yandex-team.ru\">(brist89@yandex-team.ru)</a>\n+                    &nbsp;<time datetime=\"2014-11-24\">24 ноября 2014 в 13:13</time>\n+                </address>\n+                <aside>","path":"index.html","position":275,"original_position":275,"commit_id":"8ad2a87edf886af66669b950f110262473071386","original_commit_id":"8ad2a87edf886af66669b950f110262473071386","user":{"login":"xiiivii","id":14858283,"avatar_url":"https://avatars.githubusercontent.com/u/14858283?v=3","gravatar_id":"","url":"https://api.github.com/users/xiiivii","html_url":"https://github.com/xiiivii","followers_url":"https://api.github.com/users/xiiivii/followers","following_url":"https://api.github.com/users/xiiivii/following{/other_user}","gists_url":"https://api.github.com/users/xiiivii/gists{/gist_id}","starred_url":"https://api.github.com/users/xiiivii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiiivii/subscriptions","organizations_url":"https://api.github.com/users/xiiivii/orgs","repos_url":"https://api.github.com/users/xiiivii/repos","events_url":"https://api.github.com/users/xiiivii/events{/privacy}","received_events_url":"https://api.github.com/users/xiiivii/received_events","type":"User","site_admin":false},"body":"`aside` - доп информация, сайдбар, а здесь человек процитировать текст статьи","created_at":"2015-10-12T08:06:39Z","updated_at":"2015-10-12T08:06:39Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/68#discussion_r41732271","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41732271"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/68#discussion_r41732271"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68","id":46771043,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/68","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/68.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/68.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/68","number":68,"state":"open","locked":false,"title":"Шмарова Елена","user":{"login":"lenfly","id":14886098,"avatar_url":"https://avatars.githubusercontent.com/u/14886098?v=3","gravatar_id":"","url":"https://api.github.com/users/lenfly","html_url":"https://github.com/lenfly","followers_url":"https://api.github.com/users/lenfly/followers","following_url":"https://api.github.com/users/lenfly/following{/other_user}","gists_url":"https://api.github.com/users/lenfly/gists{/gist_id}","starred_url":"https://api.github.com/users/lenfly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lenfly/subscriptions","organizations_url":"https://api.github.com/users/lenfly/orgs","repos_url":"https://api.github.com/users/lenfly/repos","events_url":"https://api.github.com/users/lenfly/events{/privacy}","received_events_url":"https://api.github.com/users/lenfly/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-05T11:46:55Z","updated_at":"2015-10-12T08:06:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"12ddda5bf5409e5aabff6b6d0a5d092a214b2f71","assignee":{"login":"xiiivii","id":14858283,"avatar_url":"https://avatars.githubusercontent.com/u/14858283?v=3","gravatar_id":"","url":"https://api.github.com/users/xiiivii","html_url":"https://github.com/xiiivii","followers_url":"https://api.github.com/users/xiiivii/followers","following_url":"https://api.github.com/users/xiiivii/following{/other_user}","gists_url":"https://api.github.com/users/xiiivii/gists{/gist_id}","starred_url":"https://api.github.com/users/xiiivii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiiivii/subscriptions","organizations_url":"https://api.github.com/users/xiiivii/orgs","repos_url":"https://api.github.com/users/xiiivii/repos","events_url":"https://api.github.com/users/xiiivii/events{/privacy}","received_events_url":"https://api.github.com/users/xiiivii/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68/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/68/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/8ad2a87edf886af66669b950f110262473071386","head":{"label":"lenfly:master","ref":"master","sha":"8ad2a87edf886af66669b950f110262473071386","user":{"login":"lenfly","id":14886098,"avatar_url":"https://avatars.githubusercontent.com/u/14886098?v=3","gravatar_id":"","url":"https://api.github.com/users/lenfly","html_url":"https://github.com/lenfly","followers_url":"https://api.github.com/users/lenfly/followers","following_url":"https://api.github.com/users/lenfly/following{/other_user}","gists_url":"https://api.github.com/users/lenfly/gists{/gist_id}","starred_url":"https://api.github.com/users/lenfly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lenfly/subscriptions","organizations_url":"https://api.github.com/users/lenfly/orgs","repos_url":"https://api.github.com/users/lenfly/repos","events_url":"https://api.github.com/users/lenfly/events{/privacy}","received_events_url":"https://api.github.com/users/lenfly/received_events","type":"User","site_admin":false},"repo":{"id":43609561,"name":"verstka-tasks-1","full_name":"lenfly/verstka-tasks-1","owner":{"login":"lenfly","id":14886098,"avatar_url":"https://avatars.githubusercontent.com/u/14886098?v=3","gravatar_id":"","url":"https://api.github.com/users/lenfly","html_url":"https://github.com/lenfly","followers_url":"https://api.github.com/users/lenfly/followers","following_url":"https://api.github.com/users/lenfly/following{/other_user}","gists_url":"https://api.github.com/users/lenfly/gists{/gist_id}","starred_url":"https://api.github.com/users/lenfly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lenfly/subscriptions","organizations_url":"https://api.github.com/users/lenfly/orgs","repos_url":"https://api.github.com/users/lenfly/repos","events_url":"https://api.github.com/users/lenfly/events{/privacy}","received_events_url":"https://api.github.com/users/lenfly/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lenfly/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/lenfly/verstka-tasks-1","forks_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/lenfly/verstka-tasks-1/releases{/id}","created_at":"2015-10-03T18:25:37Z","updated_at":"2015-10-06T19:11:38Z","pushed_at":"2015-10-11T16:40:31Z","git_url":"git://github.com/lenfly/verstka-tasks-1.git","ssh_url":"git@github.com:lenfly/verstka-tasks-1.git","clone_url":"https://github.com/lenfly/verstka-tasks-1.git","svn_url":"https://github.com/lenfly/verstka-tasks-1","homepage":"","size":109,"stargazers_count":1,"watchers_count":1,"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":1,"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-07T14:13:10Z","pushed_at":"2015-10-12T00:36:02Z","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":2665,"stargazers_count":15,"watchers_count":15,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":112,"mirror_url":null,"open_issues_count":50,"forks":112,"open_issues":50,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/68"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/68"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/68/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/68/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/68/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/8ad2a87edf886af66669b950f110262473071386"}}}}