{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40527011","id":40527011,"diff_hunk":"@@ -1,3 +1,425 @@\n <html>\n-    <!-- Ваш замечательный код -->\n-</html>\n+\n+<head>\n+    <meta charset=\"utf-8\">\n+    <meta name=\"keywords\" content=\"Яндекс, JS, почта\">\n+    <title>Блог компании Яндекс</title>\n+</head>\n+\n+<body>\n+<h1>Блог компании <span style=\"color: crimson\">Я</span>ндекс</h1>\n+<main>\n+    <article>\n+        <h2><span style=\"color: crimson\">Я</span>НДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h2>\n+        <section>\n+            <p>\n+                Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то, какой он красивый, ни то, какой он удобный. <em>Никому</em> не понравится, когда все тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность, иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый код и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+            </p>\n+        </section>\n+        <h3>Что мы измеряем</h3>\n+        <section>\n+            Этапы первой загрузки:\n+            <ol>\n+                <li>подготовка</li>\n+                <li>загрузка статики (HTTP-запрос и парсинг)</li>\n+                <li>исполнение модулей</li>\n+                <li>инициализация базовых объектов</li>\n+                <li>отрисовка</li>\n+            </ol>\n+            Этапы отрисовки любой страницы:\n+            <ol>\n+                <li>подготовка к запросу на сервер</li>\n+                <li>запрос данных с сервера</li>\n+                <li>шаблонизация</li>\n+                <li>обновление DOM</li>\n+            </ol>\n+\n+            <blockquote>— «Ок, теперь у нас есть метрики, мы можем отправить их на сервер» - говорим мы</blockquote>\n+            <blockquote>— «Что же дальше?» - вопрошаете вы</blockquote>\n+            <blockquote>— «А давай построим график!» - отвечаем мы</blockquote>\n+            <blockquote>— «А что будем считать?» - уточняете вы</blockquote>\n+\n+            <p>Как вы знаете, <dfn>медиана</dfn> – это серединное, а не среднее значение в выборке. Если у нас имеются числа <var>1, 2, 2, 3, 8, 10, 20</var> то медиана – <var>3</var>, а среднее – <var>6,5</var>. В общем случае медиана отлично показывает, сколько грузится средний пользователь. В случае ускорения или замедления медиана, конечно, изменится. Но она не может рассказать, сколько пользователей ускорилось, а сколько замедлилось.</p>\n+\n+            <p><dfn>APDEX</dfn> – метрика, которая сразу говорит: хорошо или плохо. Метрика работает очень просто. Мы выбираем временной интервал <var>[0; t]</var>, такой, что если время показа страницы попало в него, то пользователь счастлив. Берем еще один интервал, <var>(t; 4t]</var> (в четыре раза больше первого), и считаем, что если страница показана за это время, то пользователь в целом удовлетворен скоростью работы, но уже не настолько счастлив. И применяем формулу:\n+\n+            <pre><var>(кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех)</var>.</pre> Получается значение от нуля до единицы, которое, видимо, лучше всего показывает, хорошо или плохо работает почта.\n+            </p>\n+        </section>\n+        <h3>Как мы измеряем</h3>\n+        <section>\n+            <p>\n+                Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять причину замедления: медленнее стал отвечать сервер либо слишком долго выполняется JavaScript. Выглядит это примерно так:\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+            <p>\n+                C помощью <code>Date.now()</code> мы получаем текущее время. Все тайминги собираются и при отправке рассчитываются. На этапах разница между <code>“end”</code> и <code>“start”</code> не считается, а все вычисления производятся в конце:\n+                    <pre>\n+    <code>\n+        var totalTime = this.timings['look-ma-finish'] - this.timings['look-ma-im-start'];\n+    </code>\n+</pre>\n+            </p>\n+            И на сервер прилетают подобные записи:\n+                <pre>\n+    <code>\n+        serverResponse=50&domUpdate=60\n+    </code>\n+</pre>\n+\n+        </section>\n+        <h3>Как мы ускоряем</h3>\n+        <section>\n+            <p>\n+                Чтобы снизить время загрузки почты при выходе новых версий, мы уже делаем следующее:\n+            <ul>\n+                <li>включаем gzip</li>\n+                <li>выставляем заголовки кэширования</li>\n+                <li>фризим CSS, JS, шаблоны и картинки</li>\n+                <li>используем CDN</li>\n+            </ul>\n+            </p>\n+            <p>\n+                Мы подумали: <q>А что если хранить где-то старую версию файлов, а при выходе новой\n+                передавать только diff между ней и той, которая сохранена у пользователя?</q> В браузере же останется просто наложить патч на клиенте.\n+            </p>\n+\n+            <p>\n+                На самое деле эта идея не нова. Уже существуют стандарты для HTTP — например,\n+                <abbr title=\"«Delta encoding in HTTP»\">RFC 3229</abbr> и «Google SDHC», — но по разным причинам они не получили должного распространения в браузерах и на серверах.\n+            </p>\n+\n+            <p>\n+                Мы же решили сделать свой аналог на JS. Чтобы реализовать этот метод обновления, начали искать реализации diff на JS. На популярных хостингах кода нашли библиотеки:\n+            <ul>\n+                <li>VCDiff</li>\n+                <li>google-diff-patch-match</li>\n+            </ul>\n+            </p>\n+            <p>\n+                Для окончательного выбора библиотеки нам нужно сравнить:\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+            <p>\n+                После того как мы определились с библиотекой для диффа, нужно определиться с тем,\n+                <em>где</em> и <em>как</em> хранить статику на клиенте.\n+\n+                <figure>\n+                    <figcaption>Формат файла с патчами для проекта выглядит так:</figcaption>\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+                </figure>\n+            </p>\n+            <p>\n+                То есть это обычный массив из объектов. Каждый объект — отдельный ресурс. У каждого объекта есть три свойства. <var>k</var> — названия ключа в <code>localStorage</code> для этого ресурса. <var>p</var> — патч для ресурса, который сгенерировал <code>vcdiff</code>. <var>s</var> — чексумма для ресурса актуальной версии, чтобы потом можно было проверить правильность наложения патча на клиенте. Чексумма вычисляется по алгоритму Флетчера.\n+                <aside>\n+                    <p><dfn>Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно (BFGS)</dfn> — итерационный метод численной оптимизации, предназначенный для нахождения локального максимума/минимума нелинейного функционала без ограничений.\n+\n+                    <p>\n+                        Дано\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <mi>&#949;</mi>\n+                            <mo>,</mo>\n+                            <msub>\n+                                <mi>x</mi>\n+                                <mn>0</mn>\n+                            </msub>\n+                        </math>\n+                        <br> Инициализировать\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>H</mi>\n+                                <mn>0</mn>\n+                            </msub>\n+                        </math>\n+                        <br>\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <mi>k</mi>\n+                            <mo>=</mo>\n+                            <mn>0</mn>\n+                        </math>\n+                        <br>\n+                        <var>while</var>\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <mfenced open=\"||\" close=\"||\">\n+                                <mrow>\n+                                    <mo>&#8711;</mo>\n+                                    <msub>\n+                                        <mi>f</mi>\n+                                        <mi>k</mi>\n+                                    </msub>\n+                                </mrow>\n+                            </mfenced>\n+                            <mo>&gt;</mo>\n+                            <mi>&#949;</mi>\n+                        </math>\n+                        <br> найти направление\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>p</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <mo>=</mo>\n+                            <mo>-</mo>\n+                            <msub>\n+                                <mi>C</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <mo>&#8711;</mo>\n+                            <msub>\n+                                <mi>f</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                        </math>\n+                        <br> вычислить\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>x</mi>\n+                                <mrow>\n+                                    <mi>k</mi>\n+                                    <mo>+</mo>\n+                                    <mn>1</mn>\n+                                </mrow>\n+                            </msub>\n+                            <mo>=</mo>\n+                            <msub>\n+                                <mi>x</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <mo>+</mo>\n+                            <msub>\n+                                <mi>&#945;</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <msub>\n+                                <mi>p</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                        </math>\n+                        ,\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>&#945;</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                        </math>\n+                        удовлетворяет условиям Вольфе\n+                        <br> обозначить\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>s</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <mo>=</mo>\n+                            <msub>\n+                                <mi>x</mi>\n+                                <mrow>\n+                                    <mi>k</mi>\n+                                    <mo>+</mo>\n+                                    <mn>1</mn>\n+                                </mrow>\n+                            </msub>\n+                            <mo>-</mo>\n+                            <msub>\n+                                <mi>x</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                        </math>\n+                        и\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>y</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                            <mo>=</mo>\n+                            <mo>&#8711;</mo>\n+                            <msub>\n+                                <mi>f</mi>\n+                                <mrow>\n+                                    <mi>k</mi>\n+                                    <mo>+</mo>\n+                                    <mn>1</mn>\n+                                </mrow>\n+                            </msub>\n+                            <mo>-</mo>\n+                            <mo>&#8711;</mo>\n+                            <msub>\n+                                <mi>f</mi>\n+                                <mi>k</mi>\n+                            </msub>\n+                        </math>\n+                        <br> вычислить\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <msub>\n+                                <mi>C</mi>\n+                                <mrow>\n+                                    <mi>k</mi>\n+                                    <mo>+</mo>\n+                                    <mn>1</mn>\n+                                </mrow>\n+                            </msub>\n+                        </math>\n+                        <br>\n+                        <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                            <mi>k</mi>\n+                            <mo>=</mo>\n+                            <mi>k</mi>\n+                            <mo>+</mo>\n+                            <mn>1</mn>\n+                        </math>\n+                        <br>\n+                        <var>end</var>\n+                    </p>\n+            </p>\n+            </aside>\n+            </p>\n+            <p>\n+                Почему именно алгоритм Флетчера, а не другие популярные алгоритмы вроде:\n+            <ul>\n+                <li><dfn>CRC16/32</dfn> - алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных\n+                </li>\n+                <li>\n+                    <dfn>md5</dfn> - 128-битный алгоритм хеширования. Предназначен для создания «отпечатков» или дайджестов сообщения произвольной длины и последующей проверки их подлинности.\n+                </li>\n+            </ul>\n+\n+\n+            Потому что он <em>быстрый, компактный и легок в реализации</em>.\n+            </p>\n+        </section>\n+        <h3>Итог</h3>\n+        <section>\n+            <p>\n+                Фактически мы <strong>экономим <em>80-90%</em></strong> трафика. Размер загружаемой статитки в байтах:\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+            </p>\n+        </section>\n+        <section>\n+            <dt>Автор</dt>","path":"index.html","position":364,"original_position":364,"commit_id":"26a3924665ec9905c9c7872b346894f54c5bd8b4","original_commit_id":"26a3924665ec9905c9c7872b346894f54c5bd8b4","user":{"login":"trixartem","id":2376007,"avatar_url":"https://avatars.githubusercontent.com/u/2376007?v=3","gravatar_id":"","url":"https://api.github.com/users/trixartem","html_url":"https://github.com/trixartem","followers_url":"https://api.github.com/users/trixartem/followers","following_url":"https://api.github.com/users/trixartem/following{/other_user}","gists_url":"https://api.github.com/users/trixartem/gists{/gist_id}","starred_url":"https://api.github.com/users/trixartem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trixartem/subscriptions","organizations_url":"https://api.github.com/users/trixartem/orgs","repos_url":"https://api.github.com/users/trixartem/repos","events_url":"https://api.github.com/users/trixartem/events{/privacy}","received_events_url":"https://api.github.com/users/trixartem/received_events","type":"User","site_admin":false},"body":"Почему здесь используется элементы dt и dd ?","created_at":"2015-09-28T08:20:47Z","updated_at":"2015-09-28T08:20:47Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/10#discussion_r40527011","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/40527011"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/10#discussion_r40527011"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10","id":46106020,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/10","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/10.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/10.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/10","number":10,"state":"open","locked":false,"title":"Миронов Данил","user":{"login":"danmir","id":1074336,"avatar_url":"https://avatars.githubusercontent.com/u/1074336?v=3","gravatar_id":"","url":"https://api.github.com/users/danmir","html_url":"https://github.com/danmir","followers_url":"https://api.github.com/users/danmir/followers","following_url":"https://api.github.com/users/danmir/following{/other_user}","gists_url":"https://api.github.com/users/danmir/gists{/gist_id}","starred_url":"https://api.github.com/users/danmir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danmir/subscriptions","organizations_url":"https://api.github.com/users/danmir/orgs","repos_url":"https://api.github.com/users/danmir/repos","events_url":"https://api.github.com/users/danmir/events{/privacy}","received_events_url":"https://api.github.com/users/danmir/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-27T18:36:15Z","updated_at":"2015-09-28T08:20:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f015335e800c482739f432a218d51c3615c3bd57","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10/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/10/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/26a3924665ec9905c9c7872b346894f54c5bd8b4","head":{"label":"danmir:master","ref":"master","sha":"26a3924665ec9905c9c7872b346894f54c5bd8b4","user":{"login":"danmir","id":1074336,"avatar_url":"https://avatars.githubusercontent.com/u/1074336?v=3","gravatar_id":"","url":"https://api.github.com/users/danmir","html_url":"https://github.com/danmir","followers_url":"https://api.github.com/users/danmir/followers","following_url":"https://api.github.com/users/danmir/following{/other_user}","gists_url":"https://api.github.com/users/danmir/gists{/gist_id}","starred_url":"https://api.github.com/users/danmir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danmir/subscriptions","organizations_url":"https://api.github.com/users/danmir/orgs","repos_url":"https://api.github.com/users/danmir/repos","events_url":"https://api.github.com/users/danmir/events{/privacy}","received_events_url":"https://api.github.com/users/danmir/received_events","type":"User","site_admin":false},"repo":{"id":43243531,"name":"verstka-tasks-1","full_name":"danmir/verstka-tasks-1","owner":{"login":"danmir","id":1074336,"avatar_url":"https://avatars.githubusercontent.com/u/1074336?v=3","gravatar_id":"","url":"https://api.github.com/users/danmir","html_url":"https://github.com/danmir","followers_url":"https://api.github.com/users/danmir/followers","following_url":"https://api.github.com/users/danmir/following{/other_user}","gists_url":"https://api.github.com/users/danmir/gists{/gist_id}","starred_url":"https://api.github.com/users/danmir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danmir/subscriptions","organizations_url":"https://api.github.com/users/danmir/orgs","repos_url":"https://api.github.com/users/danmir/repos","events_url":"https://api.github.com/users/danmir/events{/privacy}","received_events_url":"https://api.github.com/users/danmir/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/danmir/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/danmir/verstka-tasks-1","forks_url":"https://api.github.com/repos/danmir/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/danmir/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/danmir/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/danmir/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/danmir/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/danmir/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/danmir/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/danmir/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/danmir/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/danmir/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/danmir/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/danmir/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/danmir/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/danmir/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/danmir/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/danmir/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/danmir/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/danmir/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/danmir/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/danmir/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/danmir/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/danmir/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/danmir/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/danmir/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/danmir/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/danmir/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/danmir/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/danmir/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/danmir/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/danmir/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/danmir/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/danmir/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/danmir/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/danmir/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/danmir/verstka-tasks-1/releases{/id}","created_at":"2015-09-27T11:07:12Z","updated_at":"2015-09-27T11:07:12Z","pushed_at":"2015-09-27T18:34:49Z","git_url":"git://github.com/danmir/verstka-tasks-1.git","ssh_url":"git@github.com:danmir/verstka-tasks-1.git","clone_url":"https://github.com/danmir/verstka-tasks-1.git","svn_url":"https://github.com/danmir/verstka-tasks-1","homepage":"","size":0,"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-27T18:43:39Z","pushed_at":"2015-09-28T05:07:54Z","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":0,"stargazers_count":9,"watchers_count":9,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"open_issues_count":9,"forks":15,"open_issues":9,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/10"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/10"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/10/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/10/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/26a3924665ec9905c9c7872b346894f54c5bd8b4"}}}}