{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41013747","id":41013747,"diff_hunk":"@@ -1,3 +1,328 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+<head>\n+    <meta charset=\"UTF-8\">\n+    <title>Яндекс.Почта: Как мы измеряем скорость загрузки и улучшаем её.</title>\n+    <meta name=\"keyword\" content=\"яндекс, блог, почта, скорость, загрузки\">\n+    <meta name=\"author\" content=\"Sergey Kolobukhov\">\n+    <link rel=\"shortcut icon\" href=\"yastatic.net/morda-logo/i/favicon_islands.ico\">\n+    <meta property=\"og:url\" content=\"http://yandex.ru\">\n+    <meta property=\"og:image\" content=\"yastatic.net/morda-logo/i/arrow2/logo_simple.svg\">\n+    <meta property=\"og:title\" content=\"Яндекс.Почта: Как мы измеряем скорость загрузки и улучшаем её.\">\n+    <meta property=\"og:description\" content=\"Если ваш сайт медленно грузится, вы рискуете тем, что люди не \n+        оценят ни то, какой он красивый, ни то, какой он удобный. Никому не понравится, когда все тормозит. \n+        Мы регулярно добавляем в Яндекс.Почту новую функциональность, иногда — исправляем ошибки, а это значит, \n+        у нас постоянно появляются новый код и новая логика. Всё это напрямую влияет на скорость работы \n+        интерфейса.\"> \n+    <style>\n+        span {\n+            color: #f00;\n+        }\n+        table {\n+            border-spacing: 0px;\n+        }\n+        td, th, table {\n+            border: 1px solid Black;\n+        }\n+        .ul_dash>li {\n+            list-style-type: none;\n+        }\n+        .ul_dash>li:before {\n+            content: \"—\";\n+            display: inline-block;\n+            text-indent: -24px;\n+        }\n+    </style>\n+</head>\n+<body>\n+    <header>\n+        <div>\n+            Блог компании <span style=\"color: red\">Я</span>ндекс.\n+        </div>\n+    </header>\n+    <main>\n+        <article>\n+            <h1><span>Я</span>ндекс.Почта: Как мы измеряем скорость загрузки и улучшаем её.</h1>\n+            <p>\n+                Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,какой он красивый, ни \n+                то, какой он удобный. Никому не понравится, когда все тормозит. Мы регулярно добавляем в \n+                <span>Я</span>ндекс.Почту новую функциональность,иногда — исправляем ошибки, а это значит, у \n+                нас постоянно появляются новый код и новая логика. Всё это напрямую влияет на скорость работы \n+                интерфейса.\n+            </p>\n+            <div>\n+                <h3>Что мы измеряем?</h3>\n+                <p>Этапы первой загрузки:</p>\n+                <ol type=\"A\">\n+                    <li>подготовка</li>\n+                    <li>загрузка статики (HTTP-запрос и парсинг)</li>\n+                    <li>исполнение модулей</li>\n+                    <li>инициализация базовых объектов</li>\n+                    <li>отрисовка</li>\n+                </ol>\n+                <p>Этапы отрисовки любой страницы:</p>\n+                <ol type=\"I\">\n+                    <li>подготовка к запросу на сервер</li>\n+                    <li>запрос данных с сервера</li>\n+                    <li>шаблонизация</li>\n+                    <li>обновление DOM</li>\n+                </ol>\n+                <ul class=\"ul_dash\">\n+                    <li><q>Ок, теперь у нас есть метрики, мы можем отправить их на сервер</q> - говорим мы<br></li>\n+                    <li><q>Что же дальше?</q> - вопрошаете вы</li>\n+                    <li><q>А давай построим график!</q> - отвечаем мы</li>\n+                    <li><q>А что будем считать?</q> - уточняете вы</li>\n+                </ul>\n+                <p>\n+                    Как вы знаете, <dfn><strong>медиана</strong></dfn> – это <i>серединное</i>, а не среднее \n+                    значение в выборке.Если у нас имеются числа <em>1, 2, 2, 3, 8, 10, 20</em>, то медиана – \n+                    <em>3</em>, а среднее – <em>6,5</em>.В общем случае медиана отлично показывает, сколько \n+                    грузится средний пользователь. В случае ускорения или замедления медиана, конечно, изменится. \n+                    Но она не может рассказать, сколько пользователей ускорилось, а сколько замедлилось. \n+                    <dfn><strong>APDEX</strong></dfn> – метрика, которая сразу говорит: хорошо или плохо. Метрика \n+                    работает очень просто. Мы выбираем временной интервал <em>[0; t]</em>, такой, что если время \n+                    показа страницы попало в него, то пользователь счастлив. Берем еще один интервал, \n+                    <em>(t; 4t]</em> (в четыре раза больше первого), и считаем, что если страница показана за это \n+                    время, то пользователь в целом удовлетворен скоростью работы, но уже не настолько счастлив. И \n+                    применяем формулу:<em>(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / \n+                    (кол-во всех)</em>. Получается значение от нуля до единицы, которое, видимо, лучше всего \n+                    показывает, хорошо или плохо работает почта.\n+                </p>\n+            </div>\n+            <div>\n+                <h3>Как мы измеряем?</h3>\n+                <p>\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 помощью <em>Date.now()</em> мы получаем текущее время. Все тайминги собираются и при отправке рассчитываются. На этапах разница между “end” и “start” не считается, а все вычисления производятся в конце:\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+                <p>И на сервер прилетают подобные записи:</p>\n+                <pre>\n+                    <code>\n+serverResponse=50&amp;domUpdate=60\n+                    </code>\n+                </pre>\n+            </div>\n+            <div>\n+                <h3>Как мы ускоряем?</h3>\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+                    HTTP — например, <em>RFC 3229 «Delta encoding in HTTP»</em> и <em>«Google SDHC»</em>, — но по \n+                    разным причинам они не получили должного распространения в браузерах и на серверах. Мы же \n+                    решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления, начали искать \n+                    реализации diff на JS. На популярных хостингах кода нашли библиотеки:\n+                </p>\n+                <ul class=\"ul_dash\">\n+                    <li>VCDiff</li>\n+                    <li>google-diff-patch-match</li>\n+                </ul>\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+                <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> — названия ключа в <em>localStorage</em> для этого ресурса. \n+                    <var>p</var> — патч для ресурса, который сгенерировал vcdiff. s — чексумма для ресурса \n+                    актуальной версии, чтобы потом можно было проверить правильность наложения патча на клиенте. \n+                    Чексумма вычисляется по алгоритму Флетчера.\n+                </p>\n+            </div>\n+            <div>\n+                <h3>Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно(<em>BFGS</em>)</h3>\n+                <dl>\n+                    <dt><b>BFGS</b></dt>\n+                    <dd>\n+                        итерационный метод численной оптимизации, предназначенный для нахождения локального \n+                        максимума/минимума нелинейного функционала без ограничений.\n+                    </dd>\n+                </dl>\n+                <p>Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:</p>\n+                <dl>\n+                    <dt><b>CRC16/32</b></dt>\n+                    <dd>\n+                        алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных.\n+                    </dd>\n+                    <dt><b>md5</b></dt>\n+                    <dd>\n+                        128-битный алгоритм хеширования. Предназначен для создания «отпечатков» или дайджестов \n+                        сообщения произвольной длины и последующей проверки их подлинности.\n+                    </dd>\n+                </dl>\n+                <p>Потому что он быстрый, компактный и легок в реализации.</p>\n+                <p>Алгоритм:</p>\n+                <pre>\n+  Дано: <b><i>&epsilon;</i></b>, <b><i>x<sub>0</sub></i></b>\n+  инициализировать <b><i>H<sub>0</sub></i></b>\n+  <b><i>k</i> = 0</b>\n+  <b>while ||&#9661;<i>f<sub>k</sub></i>|| > <i>&epsilon;</i></b>\n+      найти направление <b><i>p<sub>k</sub></i> = -C<sub>k</sub>&#9661;<i>f<sub>k</sub></i></b>\n+      вычислить <b><i>x<sub>k+1</sub></i> = <i>x<sub>k</sub></i> + &alpha;<sub>k</sub><i>p<sub>k</sub></i></b>, &alpha;<sub>k</sub> удовлетворяет условиям Вольфе\n+      обозначить <b><i>s<sub>k</sub></i> = <i>x<sub>k+1</sub></i> - <i>x<sub>k</sub></i></b> и <b><i>y<sub>k</sub></i> = &#9661;<i>f<sub>k+1</sub></i> - &#9661;<i>f<sub>k</sub></i></b>\n+      вычислить <b><i>C<sub>k+1</sub></i></b>\n+      <b>k = k + 1</b>\n+  <b>end</b>\n+                </pre>\n+            </div>\n+            <div>\n+                <h3>Итог</h3>\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+            </div>\n+            <footer>\n+                <address>\n+                    Автор: <cite>@doochik</cite><br>\n+                    С++ разработик<br>\n+                    Электронная почта: (doochik@yandex-team.ru)<br>\n+                    Компания: Яндекс<br>\n+                </address>\n+            </footer>\n+        </article>\n+    </main>\n+    <section>\n+        <h3>Комментарии (4):</h3>\n+        <div>\n+            <span>-</span>\n+            <abbr title=\"mogaika@yandex-team.ru\">Mogaika</abbr>\n+            <small>\n+                (mogaika@yandex-team.ru)\n+                <time>30 ноября 2014 в 17:05</time>","path":"index.html","position":275,"original_position":275,"commit_id":"413e45d4e0692c15a23cabf953a75a49b61940f3","original_commit_id":"413e45d4e0692c15a23cabf953a75a49b61940f3","user":{"login":"gogoleff","id":4534405,"avatar_url":"https://avatars.githubusercontent.com/u/4534405?v=3","gravatar_id":"","url":"https://api.github.com/users/gogoleff","html_url":"https://github.com/gogoleff","followers_url":"https://api.github.com/users/gogoleff/followers","following_url":"https://api.github.com/users/gogoleff/following{/other_user}","gists_url":"https://api.github.com/users/gogoleff/gists{/gist_id}","starred_url":"https://api.github.com/users/gogoleff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gogoleff/subscriptions","organizations_url":"https://api.github.com/users/gogoleff/orgs","repos_url":"https://api.github.com/users/gogoleff/repos","events_url":"https://api.github.com/users/gogoleff/events{/privacy}","received_events_url":"https://api.github.com/users/gogoleff/received_events","type":"User","site_admin":false},"body":"Давай добавим время в удобном виде не только для пользователей, но и для поисковых систем.","created_at":"2015-10-02T11:55:17Z","updated_at":"2015-10-02T11:55:17Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/6#discussion_r41013747","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41013747"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/6#discussion_r41013747"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6","id":46098993,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/6","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/6.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/6.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/6","number":6,"state":"open","locked":false,"title":"Колобухов Сергей","user":{"login":"SKolobukhov","id":8927714,"avatar_url":"https://avatars.githubusercontent.com/u/8927714?v=3","gravatar_id":"","url":"https://api.github.com/users/SKolobukhov","html_url":"https://github.com/SKolobukhov","followers_url":"https://api.github.com/users/SKolobukhov/followers","following_url":"https://api.github.com/users/SKolobukhov/following{/other_user}","gists_url":"https://api.github.com/users/SKolobukhov/gists{/gist_id}","starred_url":"https://api.github.com/users/SKolobukhov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SKolobukhov/subscriptions","organizations_url":"https://api.github.com/users/SKolobukhov/orgs","repos_url":"https://api.github.com/users/SKolobukhov/repos","events_url":"https://api.github.com/users/SKolobukhov/events{/privacy}","received_events_url":"https://api.github.com/users/SKolobukhov/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-27T10:23:47Z","updated_at":"2015-10-02T11:55:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d16b4bb5b400c009d082164d921c8e91dcf9c187","assignee":{"login":"gogoleff","id":4534405,"avatar_url":"https://avatars.githubusercontent.com/u/4534405?v=3","gravatar_id":"","url":"https://api.github.com/users/gogoleff","html_url":"https://github.com/gogoleff","followers_url":"https://api.github.com/users/gogoleff/followers","following_url":"https://api.github.com/users/gogoleff/following{/other_user}","gists_url":"https://api.github.com/users/gogoleff/gists{/gist_id}","starred_url":"https://api.github.com/users/gogoleff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gogoleff/subscriptions","organizations_url":"https://api.github.com/users/gogoleff/orgs","repos_url":"https://api.github.com/users/gogoleff/repos","events_url":"https://api.github.com/users/gogoleff/events{/privacy}","received_events_url":"https://api.github.com/users/gogoleff/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6/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/6/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/413e45d4e0692c15a23cabf953a75a49b61940f3","head":{"label":"SKolobukhov:master","ref":"master","sha":"413e45d4e0692c15a23cabf953a75a49b61940f3","user":{"login":"SKolobukhov","id":8927714,"avatar_url":"https://avatars.githubusercontent.com/u/8927714?v=3","gravatar_id":"","url":"https://api.github.com/users/SKolobukhov","html_url":"https://github.com/SKolobukhov","followers_url":"https://api.github.com/users/SKolobukhov/followers","following_url":"https://api.github.com/users/SKolobukhov/following{/other_user}","gists_url":"https://api.github.com/users/SKolobukhov/gists{/gist_id}","starred_url":"https://api.github.com/users/SKolobukhov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SKolobukhov/subscriptions","organizations_url":"https://api.github.com/users/SKolobukhov/orgs","repos_url":"https://api.github.com/users/SKolobukhov/repos","events_url":"https://api.github.com/users/SKolobukhov/events{/privacy}","received_events_url":"https://api.github.com/users/SKolobukhov/received_events","type":"User","site_admin":false},"repo":{"id":43241976,"name":"verstka-tasks-1","full_name":"SKolobukhov/verstka-tasks-1","owner":{"login":"SKolobukhov","id":8927714,"avatar_url":"https://avatars.githubusercontent.com/u/8927714?v=3","gravatar_id":"","url":"https://api.github.com/users/SKolobukhov","html_url":"https://github.com/SKolobukhov","followers_url":"https://api.github.com/users/SKolobukhov/followers","following_url":"https://api.github.com/users/SKolobukhov/following{/other_user}","gists_url":"https://api.github.com/users/SKolobukhov/gists{/gist_id}","starred_url":"https://api.github.com/users/SKolobukhov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SKolobukhov/subscriptions","organizations_url":"https://api.github.com/users/SKolobukhov/orgs","repos_url":"https://api.github.com/users/SKolobukhov/repos","events_url":"https://api.github.com/users/SKolobukhov/events{/privacy}","received_events_url":"https://api.github.com/users/SKolobukhov/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SKolobukhov/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1","forks_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/SKolobukhov/verstka-tasks-1/releases{/id}","created_at":"2015-09-27T10:02:22Z","updated_at":"2015-09-27T10:02:23Z","pushed_at":"2015-09-29T12:20:41Z","git_url":"git://github.com/SKolobukhov/verstka-tasks-1.git","ssh_url":"git@github.com:SKolobukhov/verstka-tasks-1.git","clone_url":"https://github.com/SKolobukhov/verstka-tasks-1.git","svn_url":"https://github.com/SKolobukhov/verstka-tasks-1","homepage":"","size":120,"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":"74939664628b40cb51efdd5b6c81c3729ab3730b","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-10-02T11:41:30Z","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":1797,"stargazers_count":14,"watchers_count":14,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":64,"mirror_url":null,"open_issues_count":43,"forks":64,"open_issues":43,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/6"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/6"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/6/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/6/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/6/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/413e45d4e0692c15a23cabf953a75a49b61940f3"}}}}