{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41487649","id":41487649,"diff_hunk":"@@ -1,3 +1,282 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+    <head>\n+        <meta charset=\"utf-8\">\n+        <meta name=\"author\" content=\"feofilov\">\n+        <style type=\"text/css\">\n+            h4 { margin-bottom: 15px; }\n+            table { border-collapse: collapse; }\n+            th, td { border: 1px solid black; }\n+        </style>\n+        <title>Яндекс.Блог</title>\n+    </head>\n+    <body style=\"width: 690px;\">\n+        <header>\n+            <h1>Блог компании Яндекс</h1>\n+        </header>\n+        <section>\n+            <h3>Яндекс.Почта: как мы измеряем скорость загрузки и улучшаем её</h3>\n+            <article>\n+                <p>\n+                    Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то, \n+                    какой он красивый, ни то, какой он удобный. Никому не понравится, когда все \n+                    тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность, \n+                    иногда - исправляем ошибки, а это значит, у нас постоянно появляются новый код \n+                    и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+                </p>\n+                <h4>Что мы измеряем</h4>\n+                <p>Этапы первой загрузки:</p>\n+                <ol type=\"1\">\n+                    <li>подготовка;</li>\n+                    <li>загрузка статики (HTTP-запрос и парсинг);</li>\n+                    <li>исполнение модулей;</li>\n+                    <li>инициализация базовых объектов;</li>\n+                    <li>отрисовка.</li>\n+                </ol>\n+                <p>Этапы отрисовки любой страницы:</p>\n+                <ol type=\"1\">\n+                    <li>подготовка к запросу на сервер;</li>\n+                    <li>запрос данных с сервера;</li>\n+                    <li>шаблонизация;</li>\n+                    <li>обновление DOM.</li>\n+                </ol>\n+                <aside>\n+                    <p>\n+                        &ndash;&nbsp;<q>Ок, теперь у нас есть метрики, мы можем отправить их на сервер</q> \n+                        - говорим мы\n+                    </p>\n+                    <p>&ndash;&nbsp;<q>Что же дальше?</q> - вопрошаете вы</p>\n+                    <p>&ndash;&nbsp;<q>А давайте построим график!</q> - отвечаем мы</p>\n+                    <p>&ndash;&nbsp;<q>А что будем считать?</q> - уточняете вы</p>\n+                </aside>\n+                <p>\n+                    Как вы знаете, медиана &ndash; это серединное, а не среднее, значение в выборке. \n+                    Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана &ndash; 3, а среднее &ndash; \n+                    6,5. В общем случае медиана отлично показывает, сколько грузится средний пользователь.\n+                </p>\n+                <p>\n+                    В случае ускорения или замедления медиана, конечно, изменится. Но она не может \n+                    рассказать, сколько пользователей ускорилось, а сколько замедлилось.\n+                </p>\n+                <p>\n+                    <abbr title=\"Application Performance Index\">APDEX</abbr>\n+                    &ndash; метрика, которая сразу говорит: хорошо или плохо. Метрика \n+                    работает очень просто. Мы выбираем временной интервал [0; t], такой, что если \n+                    время показа страницы попало в него, то пользователь счастлив. Берем еще один \n+                    интервал, (t, 4t] (в четыре раза больше первого), и считаем, что если \n+                    страница показана за это время, то пользователь в целом удовлетворен скоростью работы, \n+                    но уже не настолько счастлив. И применяем формулу:\n+                </p>\n+                <p>\n+                    (кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех). \n+                    Получается значение от нуля до единицы, которое, видимо, лучше всего показывает, \n+                    хорошо или плохо работает почта.\n+                </p>\n+                <h4>Как мы измеряем</h4>\n+                <p>\n+                    Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять \n+                    причину замедления: медленнее стал отвечать сервер либо слишком долго \n+                    выполняется JavaScript. Выглядит это примерно так:\n+                </p>\n+                <pre><code>\n+this.timings['look-ma-im-start'] = Date.now();\n+this.timings['look-ma-finish'] = Date.now();\n+                </code></pre>\n+                <p>\n+                    С помощью <code>Date.now()</code> мы получаем текущее время. Все тайминги собираются и \n+                    при отправке рассчитываются. На этапах разница между \"end\" и \"start\" не считается, \n+                    а все вычисления производятся в конце:\n+                </p>\n+                <pre><code>\n+var totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+                </code> <!--тут косяк--></pre>\n+                <p>И на сервер прилетают подобные записи:</p>\n+                <pre><code>\n+serverResponse=50&amp;domUpdate=60\n+                </code></pre>\n+                <h4>Как мы ускоряем</h4>\n+                <p>Чтобы снизить время загрузки почты при выходе новых версий, мы уже делаем следующее:</p>\n+                <ul>\n+                    <li>включаем gzip;</li>\n+                    <li>выставляем заголовки кэширования;</li>\n+                    <li>фризим CSS, JS, шаблоны и картинки;</li>\n+                    <li>используем CDN.</li>\n+                </ul>\n+                <p>\n+                    Мы подумали: <q>А что если хранить где-то старую версию файлов, а при выходе новой\n+                    передавать только diff между ней и той, которая сохранена у пользователя?</q> \n+                    В браузере же останется просто наложить патч на клиенте.\n+                </p>\n+                <p>\n+                    На самом деле эта идея не нова. Уже существуют стандарты для HTTP &ndash; например, \n+                    RFC 3229 &lt;&lt;Delta encoding in HTTP&gt;&gt; и &lt;&lt;Google SDHC&gt;&gt;, &ndash; \n+                    но по разным причинами они не получили должного распространения в браузерах и на \n+                    серверах.\n+                </p>\n+                <p>\n+                    Мы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления, \n+                    начали искать реализации diff на JS. На популярных хостингах кода нашли библиотеки:<br>\n+                    - VCDiff<br>\n+                    - google-diff-patch-match\n+                </p>\n+                <p>Для окончательного выбора библиотеки нам нужно сравнить:</p>\n+                <table>\n+                    <thead>\n+                        <tr>\n+                            <th>Библиотека</th>\n+                            <th>IE 9</th>\n+                            <th>Opera 12</th>\n+                        </tr>\n+                    </thead>\n+                    <tbody>\n+                        <tr>\n+                            <td>vcdiff</td>\n+                            <td>8</td>\n+                            <td>5</td>\n+                        </tr>\n+                        <tr>\n+                            <td>google diff</td>\n+                            <td>1363</td>\n+                            <td>76</td>\n+                        </tr>\n+                    </tbody>\n+                </table>\n+                <p>\n+                    После того как мы определились с библиотекой для диффа, нужно определиться с тем, \n+                    где и как хранить статику на клиенте.\n+                </p>\n+                <p>Формат файла с патчками для проекта выглядит так:<p>\n+                <pre><code>\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+                </code></pre>\n+                <p>\n+                    То есть это обычный массив из объектов. Каждый объект &ndash; отдельный ресурс. У \n+                    каждого объекта есть три свойства. k &ndash; названия ключа в <code>localStorage</code> \n+                    для этого ресурса. p - патч ресурса, который сгенерировал <code>vcdiff</code>. s - \n+                    чексумма для ресурса актуальной версии, чтобы потом можно было проверить правильность \n+                    наложения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.\n+                </p>\n+                <aside>\n+                    <dfn>Алгоритм Бройдена &ndash; Флетчера &ndash; Гольдфарба &ndash; Шанно (BFGS)</dfn> \n+                    &ndash; итерационный метод численной оптимизации, предназначенный для \n+                    нахождения локального максимума/минимума нелинейного функционала \n+                    без ограничений.\n+                </aside>\n+                <p>\n+                    дано <var>&#603;</var>, <var>x</var><sub>0</sub><br>\n+                    инициализировать <var>H</var><sub>0</sub><br>\n+                    <var>k</var> = 0<br>\n+                    <strong>while</strong>&#124;&#124;&#8711;<var>f<sub>k</sub></var>&#124;&#124; &gt; \n+                    <var>&#603;</var><br>\n+                    &nbsp;найти направление <var>p<sub>k</sub></var> = &ndash; <var>C<sub>k</sub></var>\n+                    &#8711;<var>f<sub>k</sub></var><br>\n+                    &nbsp;вычислить <var>x<sub>k</sub></var><sub>+1</sub> = <var>x<sub>k</sub></var> + \n+                    <var>a<sub>k</sub> p<sub>k</sub></var>, <var>a<sub>k</sub></var> удовлетворяет\n+                    условиям Вольфе<br>\n+                    &nbsp;обозначить <var>s<sub>k</sub></var> = <var>x<sub>k</sub></var><sub>+1</sub> \n+                    &ndash; <var>x<sub>k</sub></var> и <var>y<sub>k</sub></var> = &#8711;<var>f<sub>k</sub>\n+                    </var><sub>+1</sub> &ndash; &#8711;<var>f<sub>k</sub></var><br>\n+                    &nbsp;вычислить <var>C<sub>k</sub></var><sub>+1</sub><br>\n+                    &nbsp;<var>k</var> = <var>k</var> + 1<br>\n+                    <strong>end</strong>\n+                </p>\n+                <p>\n+                    Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:<br>\n+                    CRC16/32  алгоритм нахождения контрольной суммы, предназначенный для проверки \n+                    целостности данных<br>\n+                    md5 - 128-битный алгоритм хеширования. Предназначен для создания &lt;&lt;отпечатков\n+                    &gt;&gt; или дайджестов сообщения произвольной длины и последующей проверки их \n+                    подлинности.\n+                </p>\n+                <p>\n+                    Потому что он быстрый, компактный и легок в реализации.\n+                </p>\n+                <h4>Итог</h4>\n+                <p>Фактически мы экономим 80-90% трафика. Размер загружаемой статистики в байтах:</p>\n+                <table>\n+                    <thead>\n+                        <tr>\n+                            <th>Релиз</th>\n+                            <th>С патчем</th>\n+                            <th>Без патча</th>\n+                        </tr>\n+                    </thead>\n+                    <tbody>\n+                        <tr>\n+                            <td>7.7.20</td>\n+                            <td>397</td>\n+                            <td>174 549</td>\n+                        </tr>\n+                        <tr>\n+                            <td>7.7.21</td>\n+                            <td>383</td>\n+                            <td>53 995</td>\n+                        </tr>\n+                        <tr>\n+                            <td>7.7.22</td>\n+                            <td>483</td>\n+                            <td>3 995</td>\n+                        </tr>\n+                    </tbody>\n+                </table>\n+            </article>\n+            <footer>\n+                <p>Автор: @doochik</p>\n+                <p>C++ разработчик</p>\n+                <address>Электронная почта: <a href=\"mailto:doochik@yandex-team.ru\">(doochik@yandex-team.ru)\n+                </a></address>\n+                <p>Компания: Яндекс</p>\n+            </footer>\n+        </section>\n+        <section>\n+            <h3>Комментарии (4):</h3>\n+            <article>\n+                <address>- Mogaika <a href=\"mailto:mogaika@yandex-team.ru\">(mogaika@yandex-team.ru)\n+                </a>&nbsp;<time datetime=\"2014-11-30\">30 ноября 2014 в 17:05</time></address>\n+                <p>А можете привести сравнение, на сколько быстрее грузится lite версия?</p>\n+            </article>\n+            <article>\n+                <address>- JIguse <a href=\"mailto:mrawesome@yandex.ru\">(mrawesome@yandex.ru)\n+                </a>&nbsp;<time datetime=\"2014-11-29\">29 ноября 2014 в 21:30</time></address>\n+                <p>\n+                    Спасибо за статью, познавательно. Здорово, что Яндекс делится некоторыми подробностями \n+                    о внутренней работе сервисов.\n+                </p>\n+            </article>\n+            <article>\n+                <address>- Brister <a href=\"mailto:mbrist89@yandex-team.ru\">(brist89@yandex-team.ru)\n+                </a>&nbsp;<time datetime=\"2014-11-24\">24 ноября 2014 в 13:13</time></address>\n+                <blockquote>","path":"index.html","position":262,"original_position":262,"commit_id":"e8e88309215b42148daf88f73a8a7dd915c1cf34","original_commit_id":"e8e88309215b42148daf88f73a8a7dd915c1cf34","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":":+1: ","created_at":"2015-10-08T08:28:18Z","updated_at":"2015-10-08T08:28:18Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/92#discussion_r41487649","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41487649"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/92#discussion_r41487649"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92","id":47056877,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/92","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/92.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/92.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/92","number":92,"state":"open","locked":false,"title":"Феофилов Илья","user":{"login":"kill4funy","id":14975097,"avatar_url":"https://avatars.githubusercontent.com/u/14975097?v=3","gravatar_id":"","url":"https://api.github.com/users/kill4funy","html_url":"https://github.com/kill4funy","followers_url":"https://api.github.com/users/kill4funy/followers","following_url":"https://api.github.com/users/kill4funy/following{/other_user}","gists_url":"https://api.github.com/users/kill4funy/gists{/gist_id}","starred_url":"https://api.github.com/users/kill4funy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kill4funy/subscriptions","organizations_url":"https://api.github.com/users/kill4funy/orgs","repos_url":"https://api.github.com/users/kill4funy/repos","events_url":"https://api.github.com/users/kill4funy/events{/privacy}","received_events_url":"https://api.github.com/users/kill4funy/received_events","type":"User","site_admin":false},"body":null,"created_at":"2015-10-07T17:28:05Z","updated_at":"2015-10-08T08:28:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0cc6c62feca8629a81cd78942654c1e053997d3a","assignee":{"login":"sinseveriya","id":5352441,"avatar_url":"https://avatars.githubusercontent.com/u/5352441?v=3","gravatar_id":"","url":"https://api.github.com/users/sinseveriya","html_url":"https://github.com/sinseveriya","followers_url":"https://api.github.com/users/sinseveriya/followers","following_url":"https://api.github.com/users/sinseveriya/following{/other_user}","gists_url":"https://api.github.com/users/sinseveriya/gists{/gist_id}","starred_url":"https://api.github.com/users/sinseveriya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sinseveriya/subscriptions","organizations_url":"https://api.github.com/users/sinseveriya/orgs","repos_url":"https://api.github.com/users/sinseveriya/repos","events_url":"https://api.github.com/users/sinseveriya/events{/privacy}","received_events_url":"https://api.github.com/users/sinseveriya/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92/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/92/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/e8e88309215b42148daf88f73a8a7dd915c1cf34","head":{"label":"kill4funy:master","ref":"master","sha":"e8e88309215b42148daf88f73a8a7dd915c1cf34","user":{"login":"kill4funy","id":14975097,"avatar_url":"https://avatars.githubusercontent.com/u/14975097?v=3","gravatar_id":"","url":"https://api.github.com/users/kill4funy","html_url":"https://github.com/kill4funy","followers_url":"https://api.github.com/users/kill4funy/followers","following_url":"https://api.github.com/users/kill4funy/following{/other_user}","gists_url":"https://api.github.com/users/kill4funy/gists{/gist_id}","starred_url":"https://api.github.com/users/kill4funy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kill4funy/subscriptions","organizations_url":"https://api.github.com/users/kill4funy/orgs","repos_url":"https://api.github.com/users/kill4funy/repos","events_url":"https://api.github.com/users/kill4funy/events{/privacy}","received_events_url":"https://api.github.com/users/kill4funy/received_events","type":"User","site_admin":false},"repo":{"id":43767687,"name":"verstka-tasks-1","full_name":"kill4funy/verstka-tasks-1","owner":{"login":"kill4funy","id":14975097,"avatar_url":"https://avatars.githubusercontent.com/u/14975097?v=3","gravatar_id":"","url":"https://api.github.com/users/kill4funy","html_url":"https://github.com/kill4funy","followers_url":"https://api.github.com/users/kill4funy/followers","following_url":"https://api.github.com/users/kill4funy/following{/other_user}","gists_url":"https://api.github.com/users/kill4funy/gists{/gist_id}","starred_url":"https://api.github.com/users/kill4funy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kill4funy/subscriptions","organizations_url":"https://api.github.com/users/kill4funy/orgs","repos_url":"https://api.github.com/users/kill4funy/repos","events_url":"https://api.github.com/users/kill4funy/events{/privacy}","received_events_url":"https://api.github.com/users/kill4funy/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kill4funy/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/kill4funy/verstka-tasks-1","forks_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/kill4funy/verstka-tasks-1/releases{/id}","created_at":"2015-10-06T17:49:00Z","updated_at":"2015-10-06T17:49:00Z","pushed_at":"2015-10-07T19:24:14Z","git_url":"git://github.com/kill4funy/verstka-tasks-1.git","ssh_url":"git@github.com:kill4funy/verstka-tasks-1.git","clone_url":"https://github.com/kill4funy/verstka-tasks-1.git","svn_url":"https://github.com/kill4funy/verstka-tasks-1","homepage":"","size":63,"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-07T14:13:10Z","pushed_at":"2015-10-08T05:34:06Z","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":2218,"stargazers_count":15,"watchers_count":15,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":106,"mirror_url":null,"open_issues_count":63,"forks":106,"open_issues":63,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/92"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/92"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/92/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/92/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/92/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/e8e88309215b42148daf88f73a8a7dd915c1cf34"}}}}