{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40771058","id":40771058,"diff_hunk":"@@ -1,3 +1,387 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n-</html>\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+    <head>\n+        <meta charset=\"utf-8\">\n+        <meta name=\"keywords\" content=\"javascript, яндекс.почта, web-разработка, скорость, фронтенд\">\n+        <meta name=\"author\" content=\"doochik\">        \n+        <title>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</title>\n+        <style>\n+            body {\n+                margin: 0 20px;\n+                text-align: justify;\n+            }\n+            a {\n+                text-decoration:none;\n+                color: RoyalBlue;\n+            }\n+            a:visited {\n+                color: DarkSlateBlue;\n+            }\n+            table {\n+                 border-collapse:collapse;\n+            }\n+            th, td {\n+                min-width: 60px;\n+                padding: 5px 10px;\n+                border: 1px solid gainsboro;\n+            }\n+            .ulnone {\n+                margin: -3px 0;\n+                list-style-type:none;\n+            }\n+            .math, .comments cite {\n+                display:inline-block;\n+                padding: 0.3em 0.6em;\n+                background-color: WhiteSmoke;\n+                border-radius: 5px;\n+            }\n+            sub {\n+                font-size: 0.6em;\n+            }\n+            aside {\n+                font-style: italic;\n+            }\n+            .comments address {\n+                font-style: normal;\n+                font-weight: bold;\n+            }\n+            .comments time {\n+                font-size: 0.7em;\n+                font-weight: normal;\n+            }\n+            .comments p {\n+                margin-left: 30px;\n+            }\n+            .reply {\n+                margin-left: 80px;\n+            }\n+            footer {\n+                text-align: center;\n+                margin: 15px 0;\n+                font-size: 0.9em;\n+            }\n+        </style>\n+    </head>\n+    <body>\n+        <article>\n+        <hgroup>\n+            <h1>Блог компании Яндекс.</h1>\n+            <h2>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h2>\n+        </hgroup>        \n+            <p>\n+                Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,\n+                какой он красивый, ни то, какой он удобный. Никому не понравится, когда все\n+                тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность,\n+                иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый код\n+                и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+            </p>\n+            <h3>\n+                Что мы измеряем\n+            </h3>\n+            <p>Этапы первой загрузки:</p>\n+            <ul>\n+                <li>подготовка;\n+                <li>загрузка статики (HTTP-запрос и парсинг);\n+                <li>исполнение модулей;\n+                <li>инициализация базовых объектов;\n+                <li>отрисовка.\n+            </ul>\n+            <p>Этапы отрисовки любой страницы:</p>\n+            <ul>\n+                <li>подготовка к запросу на сервер;\n+                <li>запрос данных с сервера;\n+                <li>шаблонизация;\n+                <li>обновление DOM.\n+            </ul>\n+            \n+            <aside>\n+                <q>Ок, теперь у нас есть метрики, мы можем отправить их на сервер</q> - говорим мы\n+                <br>\n+                <q>Что же дальше?</q> - вопрошаете вы\n+                <br>\n+                <q>А давай построим график!</q> - отвечаем мы\n+                <br>\n+                <q>А что будем считать?</q> - уточняете вы\n+            </aside>\n+            \n+            <p>                \n+                Как вы знаете, <a href=\"https://ru.wikipedia.org/wiki/Медиана_%28статистика%29\">медиана</a> – это серединное, а не среднее значение в выборке.\n+                Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5.\n+                В общем случае медиана отлично показывает, сколько грузится средний пользователь.\n+            </p>\n+            <p>\n+                В случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+                рассказать, сколько пользователей ускорилось, а сколько замедлилось.\n+            </p>\n+            <p>\n+                <a href=\"https://en.wikipedia.org/wiki/Apdex\">APDEX</a> – метрика, которая сразу говорит: хорошо или плохо. Метрика\n+                работает очень просто. Мы выбираем временной интервал [0; t], такой, что если\n+                время показа страницы попало в него, то пользователь счастлив. Берем еще один\n+                интервал, (t; 4t] (в четыре раза больше первого), и считаем, что если страница\n+                показана за это время, то пользователь в целом удовлетворен скоростью работы,\n+                но уже не настолько счастлив. И применяем формулу:\n+            </p>            \n+            <blockquote>\n+                <span class=\"math\">\n+                    (кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех).\n+                </span>\n+            </blockquote>\n+            <p>\n+                Получается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+                хорошо или плохо работает почта.\n+            </p>\n+            <h3>\n+                Как мы измеряем\n+            </h3>\n+            <p>\n+                Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+                причину замедления: медленнее стал отвечать сервер либо слишком долго\n+                выполняется JavaScript. Выглядит это примерно так:\n+            </p>\n+\n+            <code>this.timings['look-ma-im-start'] = Date.now();</code>\n+            <br>\n+            <code>this.timings['look-ma-finish'] = Date.now();</code>\n+\n+            <p>\n+                C помощью <code>Date.now()</code> мы получаем текущее время. Все тайминги собираются и                  при отправке рассчитываются. На этапах разница между “end” и “start” не считается,\n+                а все вычисления производятся в конце:\n+            </p>\n+            <code>\n+                var totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+            </code>\n+            <p>\n+                И на сервер прилетают подобные записи:\n+            </p>\n+            <code>serverResponse=50&domUpdate=60</code>\n+\n+            <h3>\n+                Как мы ускоряем\n+            </h3>\n+            <p>\n+                Чтобы снизить время загрузки почты при выходе новых версий,\n+                мы уже делаем следующее:\n+            </p>\n+            <ul>\n+                <li>включаем gzip;\n+                <li>выставляем заголовки кэширования;\n+                <li><a href=\"https://events.yandex.ru/lib/talks/837/\">фризим CSS, JS, шаблоны и картинки</a>;\n+                <li><a href=\"http://habrahabr.ru/company/yandex/blog/176893/\">используем CDN</a>;\n+            </ul>\n+            <p>\n+                Мы подумали: <q>А что если хранить где-то старую версию файлов, а при выходе новой\n+                передавать только diff между ней и той, которая сохранена у пользователя?</q>\n+                В браузере же останется просто наложить патч на клиенте.\n+            </p>\n+            <p>\n+                На самое деле эта идея не нова. Уже существуют стандарты для HTTP — например,\n+                <a href=\"http://tools.ietf.org/html/rfc3229\">RFC 3229</a>\n+                «Delta encoding in HTTP» и \n+                «<a href=\"http://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/att-0441/Shared_Dictionary_Compression_over_HTTP.pdf\">Google SDHC</a>»\n+                , — но по разным причинам они\n+                не получили должного распространения в браузерах и на серверах.\n+            </p>\n+            <p>\n+                Мы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления,\n+                начали искать реализации diff на JS. На популярных хостингах кода нашли\n+                библиотеки:\n+            </p>\n+            <ul class = \"ulnone\">\n+                <li>- <a href=\"https://github.com/plotnikoff/vcdiff.js\">VCDiff</a>\n+                <li>- <a href=\"https://code.google.com/p/google-diff-match-patch/\">google-diff-patch-match</a>\n+            </ul>\n+            <p>\n+                Для окончательного выбора библиотеки нам нужно сравнить:\n+            </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>\n+                Формат файла с патчами для проекта выглядит так:\n+            </p>\n+            <pre>\n+            <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>\n+            </pre>\n+            <p>           \n+                То есть это обычный массив из объектов. Каждый объект — отдельный ресурс. У\n+                каждого объекта есть три свойства. <var>k</var> — названия ключа в localStorage для этого\n+                ресурса. <var>p</var> — патч для ресурса, который сгенерировал vcdiff. <var>s</var> — чексумма для\n+                ресурса актуальной версии, чтобы потом можно было проверить правильность\n+                наложения патча на клиенте. Чексумма вычисляется по \n+                <a href=\"https://en.wikipedia.org/wiki/Broyden–Fletcher–Goldfarb–Shanno_algorithm\">алгоритму Флетчера</a>.\n+            </p>\n+            \n+            <blockquote>\n+                <span class=\"math\">\n+                    дано &epsilon;, x<sub>0</sub>\n+                    <br>\n+                    инициализировать H<sub>0</sub>\n+                    <br>\n+                    k = 0\n+                    <br>\n+                    while ||&nabla;f<sub>k</sub>||&ensp;&gt;&ensp;&epsilon;\n+                    <ul class=\"ulnone\">                    \n+                        <li>найти направление p<sub>k</sub> =\n+                             &ndash; C<sub>k</sub>&nabla;f<sub>k</sub>\n+                        <li>вычислить x<sub>k+1</sub> =\n+                             x<sub>k</sub> + &alpha;<sub>k</sub>p<sub>k</sub>,\n+                            &alpha;<sub>k</sub> удовлетворяет условиям Вольфе                          \n+                        <li>обозначить s<sub>k</sub> =\n+                             x<sub>k+1</sub> &ndash; x<sub>k</sub> и y<sub>k</sub> =\n+                             &nabla;f<sub>k+1</sub> &ndash; &nabla;f<sub>k</sub>\n+                        <li>вычислить C<sub>k+1</sub>\n+                        <li>k = k + 1\n+                    </ul>\n+                    end\n+                    <br>\n+                </span>\n+            </blockquote>\n+            \n+            <p>\n+                Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно (BFGS)\n+                — итерационный метод численной оптимизации, предназначенный для\n+                нахождения локального максимума/минимума нелинейного функционала\n+                без ограничений.\n+            </p>\n+            <p>\n+                Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:\n+            </p>\n+            \n+            <dl>\n+                <dt>CRC16/32</dt>\n+                <dd>алгоритм нахождения контрольной суммы, предназначенный для проверки\n+                    целостности данных.</dd>\n+                <dt>md5</dt>\n+                <dd>128-битный алгоритм хеширования. Предназначен для создания «отпечатков»\n+                    или дайджестов сообщения произвольной длины и последующей проверки\n+                    их подлинности.</dd>\n+            </dl>            \n+            \n+            <p>\n+                Потому что он быстрый, компактный и легок в реализации.\n+            </p>\n+            <h3>\n+                Итог\n+            </h3>\n+            <p>\n+                Фактически мы экономим 80-90% трафика. Размер загружаемой статитки в байтах:\n+            </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+            <br>\n+            <address>\n+                Автор: <a href=\"http://habrahabr.ru/users/doochik/\">@doochik</a>\n+                <br>\n+                С++ разработчик\n+                <br>\n+                Электронная почта: (<a href=\"mailto:doochik@yandex-team.ru\">doochik@yandex-team.ru</a>)\n+                <br>\n+                Компания: Яндекс\n+            </address>\n+        \n+        </article>\n+        \n+        <section class=\"comments\">\n+            <h1>Комментарии (3):</h1>\n+            <article>\n+                <address>Mogaika (<a href=\"mailto:mogaika@yandex-team.ru\">mogaika@yandex-team.ru</a>) <time>30 ноября 2014 в 17:05</time></address>\n+\n+                <p>А можете привести сравнение, на сколько быстрее грузится lite версия?</p>\n+            </article>\n+            <article>\n+                <address>JIguse (<a href=\"mailto:mrawesome@yandex.ru\">mrawesome@yandex.ru</a>) <time>29 ноября 2014 в 21:30</time></address>\n+\n+                <p>Спасибо за статью, познавательно. Здорово, что Яндекс делится некоторыми\n+                  подробностями о внутренней работе сервисов.</p>\n+            </article>\n+            <article>\n+                <address>Brister (<a href=\"mailto:brist89@yandex-team.ru\">brist89@yandex-team.ru</a>) <time>24 ноября 2014 в 13:13</time></address>\n+                <p>\n+                  <cite>(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех).","path":"index.html","position":362,"original_position":362,"commit_id":"c6532a506022267c6bacf473f35b9614499bf3db","original_commit_id":"c6532a506022267c6bacf473f35b9614499bf3db","user":{"login":"mrsamo","id":4165695,"avatar_url":"https://avatars.githubusercontent.com/u/4165695?v=3","gravatar_id":"","url":"https://api.github.com/users/mrsamo","html_url":"https://github.com/mrsamo","followers_url":"https://api.github.com/users/mrsamo/followers","following_url":"https://api.github.com/users/mrsamo/following{/other_user}","gists_url":"https://api.github.com/users/mrsamo/gists{/gist_id}","starred_url":"https://api.github.com/users/mrsamo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mrsamo/subscriptions","organizations_url":"https://api.github.com/users/mrsamo/orgs","repos_url":"https://api.github.com/users/mrsamo/repos","events_url":"https://api.github.com/users/mrsamo/events{/privacy}","received_events_url":"https://api.github.com/users/mrsamo/received_events","type":"User","site_admin":false},"body":"Внутрянку cite следует начать с новой строки и отбыть отспутом, по кодстайлу.","created_at":"2015-09-30T08:50:02Z","updated_at":"2015-09-30T08:50:02Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/3#discussion_r40771058","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40771058"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/3#discussion_r40771058"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3","id":46076379,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/3","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/3.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/3.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/3","number":3,"state":"open","locked":false,"title":"Лесникова Мария","user":{"login":"Minniezator","id":14816447,"avatar_url":"https://avatars.githubusercontent.com/u/14816447?v=3","gravatar_id":"","url":"https://api.github.com/users/Minniezator","html_url":"https://github.com/Minniezator","followers_url":"https://api.github.com/users/Minniezator/followers","following_url":"https://api.github.com/users/Minniezator/following{/other_user}","gists_url":"https://api.github.com/users/Minniezator/gists{/gist_id}","starred_url":"https://api.github.com/users/Minniezator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minniezator/subscriptions","organizations_url":"https://api.github.com/users/Minniezator/orgs","repos_url":"https://api.github.com/users/Minniezator/repos","events_url":"https://api.github.com/users/Minniezator/events{/privacy}","received_events_url":"https://api.github.com/users/Minniezator/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-26T06:09:25Z","updated_at":"2015-09-30T08:50:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3ebbd6d969ed28ae30e6d9ba05c5dbe2051d71e2","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3/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/3/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/c6532a506022267c6bacf473f35b9614499bf3db","head":{"label":"Minniezator:master","ref":"master","sha":"c6532a506022267c6bacf473f35b9614499bf3db","user":{"login":"Minniezator","id":14816447,"avatar_url":"https://avatars.githubusercontent.com/u/14816447?v=3","gravatar_id":"","url":"https://api.github.com/users/Minniezator","html_url":"https://github.com/Minniezator","followers_url":"https://api.github.com/users/Minniezator/followers","following_url":"https://api.github.com/users/Minniezator/following{/other_user}","gists_url":"https://api.github.com/users/Minniezator/gists{/gist_id}","starred_url":"https://api.github.com/users/Minniezator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minniezator/subscriptions","organizations_url":"https://api.github.com/users/Minniezator/orgs","repos_url":"https://api.github.com/users/Minniezator/repos","events_url":"https://api.github.com/users/Minniezator/events{/privacy}","received_events_url":"https://api.github.com/users/Minniezator/received_events","type":"User","site_admin":false},"repo":{"id":43194105,"name":"verstka-tasks-1","full_name":"Minniezator/verstka-tasks-1","owner":{"login":"Minniezator","id":14816447,"avatar_url":"https://avatars.githubusercontent.com/u/14816447?v=3","gravatar_id":"","url":"https://api.github.com/users/Minniezator","html_url":"https://github.com/Minniezator","followers_url":"https://api.github.com/users/Minniezator/followers","following_url":"https://api.github.com/users/Minniezator/following{/other_user}","gists_url":"https://api.github.com/users/Minniezator/gists{/gist_id}","starred_url":"https://api.github.com/users/Minniezator/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minniezator/subscriptions","organizations_url":"https://api.github.com/users/Minniezator/orgs","repos_url":"https://api.github.com/users/Minniezator/repos","events_url":"https://api.github.com/users/Minniezator/events{/privacy}","received_events_url":"https://api.github.com/users/Minniezator/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Minniezator/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/Minniezator/verstka-tasks-1","forks_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/Minniezator/verstka-tasks-1/releases{/id}","created_at":"2015-09-26T05:57:43Z","updated_at":"2015-09-26T05:57:44Z","pushed_at":"2015-09-26T06:01:16Z","git_url":"git://github.com/Minniezator/verstka-tasks-1.git","ssh_url":"git@github.com:Minniezator/verstka-tasks-1.git","clone_url":"https://github.com/Minniezator/verstka-tasks-1.git","svn_url":"https://github.com/Minniezator/verstka-tasks-1","homepage":"","size":91,"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":"6194fe1559d505ccac8ce39d859d9cbc342471b7","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-30T06:57:59Z","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":1199,"stargazers_count":14,"watchers_count":14,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":41,"mirror_url":null,"open_issues_count":19,"forks":41,"open_issues":19,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/3"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/3"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/3/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/3/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/c6532a506022267c6bacf473f35b9614499bf3db"}}}}