В современной IT индустрии многие до сих пор удивляются: «зачем вообще нужен отдельный тестовый отдел?».
Компания Дневник.ру временно не ведёт блог на Хабре
Сначала показывать
Развиваем фронтенд Дневник.ру. Часть первая. Сборка и проверка JavaScript кода
9 мин
15KВступление
За время существования Дневник.ру (а это более 4-х лет) скопился огромный объем JavaScript кода: часть находилась в отдельном проекте в виде подключаемых файлов, часть определялась прямо на разметке контролов, а часть собиралась прямо в code-behind при помощи
StringBuilder
. К этому прибавлялись:- растущее количество HTTP запросов для получения статичного контента – так, например, на всех страницах только в теге
<head>
загружалось 11 JavaScript файлов; - глобальные переменные, которые иногда перекрывали друг друга;
Решив, что с этим пора что-то делать, мы поставили себе первоочередную задачу: вынести все подключаемые по отдельности файлы из тега
<head>
в один минифицированный пакет. При этом код делился на сторонний и «наш», который планировалось проверять каким-то синтаксическим анализатором.В этой статье мы расскажем вам о том, как решили эту задачу.
+16
Рефакторинг с бубном, или как мы Халка усмиряли
6 мин
12KДумаю, все согласятся, что большинство стартапов изначально сделаны на коленке. Только потом, в случае удачного выстреливания, при грамотном руководстве и понимании стратегических целей владельцы ресурса могут принять решение о рефакторинге существующего продукта. Хорошо, если это произошло раньше превращения Брюса Баннера в Халка. Но что делать, если такой момент был благополучно пропущен, и ресурс представляет собой огромного зеленого плохо-контролируемого гиганта? Как поступить в такой ситуации?
+2
Как я перестал волноваться и стал отдавать метаданные restful API
5 мин
18KЕсли вы делаете публичный API, то скорее всего сталкивались с проблемой его документации. Большие компании делают специальные порталы для разработчиков, где можно почитать и обсудить документацию, или скачать библиотеку-клиент для вашего любимого языка программирования.
Поддержка такого ресурса (особенно в условиях, когда API активно развивается) — достаточно трудозатратное дело. При изменениях, приходится синхронизировать документацию с фактической реализацией и это напрягает. Синхронизация состоит из:
Поддержка такого ресурса (особенно в условиях, когда API активно развивается) — достаточно трудозатратное дело. При изменениях, приходится синхронизировать документацию с фактической реализацией и это напрягает. Синхронизация состоит из:
- Проверки, что вся существующая функциональность описана в документации
- Проверки, что всё описанное работает как заявлено в документации
+17
Continuous Integration в Дневник.ру
8 мин
17KВ этой статье мы решили немного рассказать о средствах continuous integration (CI), которые используем в компании Дневник.ру, и поделиться небольшими наработками в этом направлении. Большая часть материала может показаться банальной рекламой выбранного движка CI или попыткой вызвать holy war (причем не один), но подобного не было в целях. Статья также не является путеводителем или описанием каких-либо фитч и может быть расценена как статья от кэпа – главное, чтобы она была интересна и вызвала дискуссию.
+15
SignalR в помощь, или как оживить web
7 мин
103KRecovery Mode
Введение
Во многих web проектах присутствуют элементы, значение которых необходимо часто менять. Это могут быть счётчики, индикаторы, уведомления и подобные элементы. Показывать ли актуальные значения после обновления страницы или же можно реализовать автообновление всех этих данных? Для нас ответ очевиден: если есть возможность динамически менять элементы, то для обновления страниц не остается места.
+22
ASP.NET MVC 4 Mobile Features устарели быстрее чем появились
5 мин
8.7KЧто такое Mobile Features в ASP.NET MVC 4
ASP.NET MVC 4 вышел с очень ожидаемой и долгожданной новой возможностью — то, что по английски называют Mobile Features — поддержкой мобильных устройств. По большому счету, название сразу удивило, так как немного расходится с техническим описанием нововведения. Но промоушен — есть промоушен. Все упоминания про шаблоны страниц (layout) с поддержкой HTML 5, указание viewport, CSS media — все это к MVC фреймворку непосредственно отношения не имеет.
К новой возможности самого фреймворка можно отнести только два пункта:
- создание View и шаблонов специфичных для мобильных браузеров
- возможность на лету изменять то, какое View будет рендерится пользователю — а именно переключаться в рантайме между различными View
И здесь сразу стоит заметить, что слово «мобильный» упоминается исключительно в рекламных целях. MVC 4 позволяет создавать несколько View для каждой из требуемых страниц и определять для какого браузера каждая из них должна показываться. То есть, возможности ни коем образом не ограничиваются именно мобильными браузерами.
Все гениальное просто — «hook» во ViewEngine
Реализация данной возможности очень проста. Это просто «hook» во ViewEngine.
Вы делаете разные страницы (Views) для разных устройств или браузеров. Именуете файлы добавляя ключевое слово:
- Catalog.cshtml
- Catalog.iPhone.cshtml
Задаете критерий по которому будет выбираться нужная View — пользуясь DisplayModeProvider задаете нужные DefaultDisplayMode с нужным именем.
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
В рантайме, когда отработает метод контроллера, подготовленный ViewResult передается во View Engine, проверяются условия DisplayModeProvider-a, он изменяет имя файла View, которое нужно загрузить.
Можем ли мы этим реально пользоваться?
+5
Несколько дней из жизни школы с Дневник.ру
6 мин
38KМы решили, что лучшим способом рассказать о Дневник.ру будет не просто описать набор функций (о них можно прочитать у нас на сайте), а показать на примере того, как используется система в одной из школ – назовем ее «Гимназия №0».
Все события и персонажи вымышлены, любые совпадения случайны.
В Гимназии №0, в 6-ом классе за одной партой сидят двое одноклассников и друзей:
Все события и персонажи вымышлены, любые совпадения случайны.
В Гимназии №0, в 6-ом классе за одной партой сидят двое одноклассников и друзей:
+2
Дневник.ру теперь и на Хабрахабр
2 мин
8.2KДобрый день, Хабрапользователи!
Мы, Дневник.ру – электронный образовательный проект. Площадка для всех участников образовательного процесса с функциями электронного документооборота и социальной сети. Кроме того мы даем пользователям набор инструментов, которые каждый день помогают учить, учиться и участвовать в процессе родителям.
Сфера интерактивного образования вызывает горячий интерес у ИТ-специалистов. Многие пользователи Хабрахабра (как школьники, так и родители) уже активно обсуждают учебный процесс в он-лайн и сложности, которые порой приходится преодолевать, делятся своими впечатлениями и ожиданиями.
С помощью нашего блога мы постараемся внести свой вклад в копилку знаний Хабрахабра и сможем ответить на многие вопросы.
+5