{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40788674","id":40788674,"diff_hunk":"@@ -1,3 +1,302 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+<head>\n+    <meta charset=\"utf-8\">\n+    <title>Яндекс.Блог</title>\n+    <style>\n+        table {\n+            border-collapse: collapse;\n+        }\n+        td {\n+            border: 1px solid black;\n+        }\n+        .ya {\n+            color: red;\n+        }\n+        #comments article {\n+            border: black solid 2px;\n+            margin: 15px;\n+        }\n+        #comments article p {\n+            margin: 20px;\n+        }\n+        footer {\n+            text-align: center;\n+        }\n+    </style>\n+</head>\n+<body>\n+    <header>\n+        <h1 style=\"text-align: center\">Блог компании <span class=\"ya\">Я</span>ндекс.</h1>\n+    </header>\n+    <main>\n+        <h2><span class=\"ya\">Я</span>НДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h2>\n+        <p>\n+            Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,\n+            какой он красивый, ни то, какой он удобный. Никому не понравится, когда все\n+            тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность,\n+            иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый код\n+            и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+        </p>\n+    \n+        <h3>Что мы измеряем</h3>\n+    \n+        <p>\n+            Этапы первой загрузки:\n+            <ul>\n+                <li>подготовка;</li>\n+                <li>загрузка статики (HTTP-запрос и парсинг);</li>\n+                <li>исполнение модулей;</li>\n+                <li>инициализация базовых объектов;</li>\n+                <li>отрисовка.</li>\n+            </ul>\n+        </p>\n+        <p>\n+            Этапы отрисовки любой страницы:\n+            <ul>\n+                <li>подготовка к запросу на сервер;</li>\n+                <li>запрос данных с сервера;\n+                <li>шаблонизация;</li>\n+                <li>обновление DOM.</li>\n+            </ul>\n+        </p>\n+        <p>\n+            — <q><i>Ок, теперь у нас есть метрики, мы можем отправить их на сервер</i></q> - говорим мы<br>\n+            — <q><i>Что же дальше?</i></q> - вопрошаете вы<br>\n+            — <q><i>А давай построим график!</i></q> - отвечаем мы<br>\n+            — <q><i>А что будем считать?</i></q> - уточняете вы<br>\n+        </p>\n+        <p>\n+            Как вы знаете, <dfn>медиана</dfn> – это серединное, а не среднее значение в выборке.\n+            Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5.\n+            В общем случае медиана отлично показывает, сколько грузится средний пользователь.\n+        </p>\n+        <p>\n+            В случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+            рассказать, сколько пользователей ускорилось, а сколько замедлилось.\n+        </p>\n+    \n+        <p>\n+            <dfn>APDEX</dfn> – метрика, которая сразу говорит: хорошо или плохо. Метрика\n+            работает очень просто. Мы выбираем временной интервал [0; t], такой, что если\n+            время показа страницы попало в него, то пользователь счастлив. Берем еще один\n+            интервал, (t; 4t] (в четыре раза больше первого), и считаем, что если страница\n+            показана за это время, то пользователь в целом удовлетворен скоростью работы,\n+            но уже не настолько счастлив. И применяем формулу: \n+        </p>\n+    \n+        <p>\n+            <span style=\"font-weight: bold\">(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех)</span>.\n+        </p>\n+        <p>\n+            Получается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+            хорошо или плохо работает почта.\n+        </p>\n+    \n+        <h3>Как мы измеряем</h3>\n+        <p>\n+            Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+            причину замедления: медленнее стал отвечать сервер либо слишком долго\n+            выполняется JavaScript. Выглядит это примерно так:\n+        </p>\n+        <pre>\n+            <code>\n+                this.timings['look-ma-im-start'] = Date.now();\n+                this.timings['look-ma-finish'] = Date.now();\n+            </code>\n+        </pre>\n+        <p>\n+            C помощью <b><code>Date.now()</code></b> мы получаем текущее время. Все тайминги собираются и при\n+            отправке рассчитываются. На этапах разница между <i>“end”</i> и <i>“start”</i> не считается,\n+            а все вычисления производятся в конце:\n+        </p>\n+        <pre>\n+            <code>\n+                var totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+            </code>\n+        </pre>\n+    \n+        <p>\n+            И на сервер прилетают подобные записи:<br>\n+            <b>serverResponse=50&domUpdate=60</b>\n+        </p>\n+    \n+        <h3>Как мы ускоряем</h3>\n+        <p>\n+            Чтобы снизить время загрузки почты при выходе новых версий,\n+            мы уже делаем следующее:\n+        </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><br>\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+            библиотеки:\n+            <ul>\n+                <li>VCDiff</li>\n+                <li>google-diff-patch-match</li>\n+            </ul>\n+        </p>\n+        <p>\n+            Для окончательного выбора библиотеки нам нужно сравнить:\n+        </p>\n+        <p>\n+        <table>\n+            <thead>\n+                <tr>\n+                    <td>Библиотека</td>\n+                    <td>IE 9</td>\n+                    <td>Opera 12</td>\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+        [\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+            каждого объекта есть три свойства. <dfn>k</dfn> — названия ключа в localStorage для этого\n+            ресурса. <dfn>p</dfn> — патч для ресурса, который сгенерировал <abbr>vcdiff</abbr>. s — чексумма для\n+            ресурса актуальной версии, чтобы потом можно было проверить правильность\n+            наложения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.\n+        </p>\n+    \n+        <p>\n+            Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно (<abbr>BFGS</abbr>)\n+            — итерационный метод численной оптимизации, предназначенный для\n+            нахождения локального максимума/минимума нелинейного функционала\n+            без ограничений.\n+        </p>\n+    \n+        <p>\n+            Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:\n+            <abbr>CRC16/32</abbr> - алгоритм нахождения контрольной суммы, предназначенный для проверки\n+            целостности данных\n+            <br>\n+            <abbr>md5</abbr> - 128-битный алгоритм хеширования. Предназначен для создания «отпечатков»\n+            или дайджестов сообщения произвольной длины и последующей проверки\n+            их подлинности.<br>Потому что он быстрый, компактный и легок в реализации.\n+        </p>\n+        <h3>Итог</h3>\n+        <p>\n+            Фактически мы экономим 80-90% трафика. Размер загружаемой статитки в байтах:\n+        </p>\n+        <table>\n+            <thead>\n+            <tr>\n+                <td>\n+                    Релиз\n+                </td>\n+                <td>\n+                    С патчем\n+                </td>\n+                <td>\n+                    Без патча\n+                </td>\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+        <p style=\"text-align: right\">\n+            Автор: @doochik<br>\n+            С++ разработик<br>\n+            Электронная почта: (doochik@yandex-team.ru)<br>","path":"index.html","position":265,"original_position":265,"commit_id":"b61dcebb84d88c2a24471e14b5ed0fcc31e629a2","original_commit_id":"b61dcebb84d88c2a24471e14b5ed0fcc31e629a2","user":{"login":"VorontsovMaxim","id":14827792,"avatar_url":"https://avatars.githubusercontent.com/u/14827792?v=3","gravatar_id":"","url":"https://api.github.com/users/VorontsovMaxim","html_url":"https://github.com/VorontsovMaxim","followers_url":"https://api.github.com/users/VorontsovMaxim/followers","following_url":"https://api.github.com/users/VorontsovMaxim/following{/other_user}","gists_url":"https://api.github.com/users/VorontsovMaxim/gists{/gist_id}","starred_url":"https://api.github.com/users/VorontsovMaxim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VorontsovMaxim/subscriptions","organizations_url":"https://api.github.com/users/VorontsovMaxim/orgs","repos_url":"https://api.github.com/users/VorontsovMaxim/repos","events_url":"https://api.github.com/users/VorontsovMaxim/events{/privacy}","received_events_url":"https://api.github.com/users/VorontsovMaxim/received_events","type":"User","site_admin":false},"body":"Все адреса электронной почты можно оформить в виде ссылок","created_at":"2015-09-30T12:46:46Z","updated_at":"2015-09-30T12:46:46Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/23#discussion_r40788674","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40788674"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/23#discussion_r40788674"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23","id":46310008,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/23","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/23.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/23.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/23","number":23,"state":"open","locked":false,"title":"Миронов Алексей ","user":{"login":"mironov-alexey","id":6783167,"avatar_url":"https://avatars.githubusercontent.com/u/6783167?v=3","gravatar_id":"","url":"https://api.github.com/users/mironov-alexey","html_url":"https://github.com/mironov-alexey","followers_url":"https://api.github.com/users/mironov-alexey/followers","following_url":"https://api.github.com/users/mironov-alexey/following{/other_user}","gists_url":"https://api.github.com/users/mironov-alexey/gists{/gist_id}","starred_url":"https://api.github.com/users/mironov-alexey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironov-alexey/subscriptions","organizations_url":"https://api.github.com/users/mironov-alexey/orgs","repos_url":"https://api.github.com/users/mironov-alexey/repos","events_url":"https://api.github.com/users/mironov-alexey/events{/privacy}","received_events_url":"https://api.github.com/users/mironov-alexey/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-29T17:56:20Z","updated_at":"2015-09-30T12:46:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"be7052ed9b16058ef11fa0e9c1e93ca965dcce9a","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23/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/23/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/b61dcebb84d88c2a24471e14b5ed0fcc31e629a2","head":{"label":"mironov-alexey:master","ref":"master","sha":"b61dcebb84d88c2a24471e14b5ed0fcc31e629a2","user":{"login":"mironov-alexey","id":6783167,"avatar_url":"https://avatars.githubusercontent.com/u/6783167?v=3","gravatar_id":"","url":"https://api.github.com/users/mironov-alexey","html_url":"https://github.com/mironov-alexey","followers_url":"https://api.github.com/users/mironov-alexey/followers","following_url":"https://api.github.com/users/mironov-alexey/following{/other_user}","gists_url":"https://api.github.com/users/mironov-alexey/gists{/gist_id}","starred_url":"https://api.github.com/users/mironov-alexey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironov-alexey/subscriptions","organizations_url":"https://api.github.com/users/mironov-alexey/orgs","repos_url":"https://api.github.com/users/mironov-alexey/repos","events_url":"https://api.github.com/users/mironov-alexey/events{/privacy}","received_events_url":"https://api.github.com/users/mironov-alexey/received_events","type":"User","site_admin":false},"repo":{"id":43365383,"name":"verstka-tasks-1","full_name":"mironov-alexey/verstka-tasks-1","owner":{"login":"mironov-alexey","id":6783167,"avatar_url":"https://avatars.githubusercontent.com/u/6783167?v=3","gravatar_id":"","url":"https://api.github.com/users/mironov-alexey","html_url":"https://github.com/mironov-alexey","followers_url":"https://api.github.com/users/mironov-alexey/followers","following_url":"https://api.github.com/users/mironov-alexey/following{/other_user}","gists_url":"https://api.github.com/users/mironov-alexey/gists{/gist_id}","starred_url":"https://api.github.com/users/mironov-alexey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironov-alexey/subscriptions","organizations_url":"https://api.github.com/users/mironov-alexey/orgs","repos_url":"https://api.github.com/users/mironov-alexey/repos","events_url":"https://api.github.com/users/mironov-alexey/events{/privacy}","received_events_url":"https://api.github.com/users/mironov-alexey/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mironov-alexey/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1","forks_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/mironov-alexey/verstka-tasks-1/releases{/id}","created_at":"2015-09-29T12:16:34Z","updated_at":"2015-09-29T12:16:34Z","pushed_at":"2015-09-29T20:05:50Z","git_url":"git://github.com/mironov-alexey/verstka-tasks-1.git","ssh_url":"git@github.com:mironov-alexey/verstka-tasks-1.git","clone_url":"https://github.com/mironov-alexey/verstka-tasks-1.git","svn_url":"https://github.com/mironov-alexey/verstka-tasks-1","homepage":"","size":121,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"urfu-2015:master","ref":"master","sha":"92106c708076d457b6ffcd8175044271b4318dd9","user":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"repo":{"id":43061154,"name":"verstka-tasks-1","full_name":"urfu-2015/verstka-tasks-1","owner":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/urfu-2015/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":false,"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1","forks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/releases{/id}","created_at":"2015-09-24T10:45:26Z","updated_at":"2015-09-29T19:03:45Z","pushed_at":"2015-09-30T12:46:25Z","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":43,"mirror_url":null,"open_issues_count":22,"forks":43,"open_issues":22,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/23"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/23"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/23/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/23/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/23/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/b61dcebb84d88c2a24471e14b5ed0fcc31e629a2"}}}}