Обзор книги NoSQL Distilled
Сегодня речь пойдет об интересной книге Мартина Фаулера и еще одного автора, имя-фамилия которого я понятия не имею как пишется на русском, потому оставлю как есть: Pramod Sadalage. Труд посвящен проблемам выбора типа хранилища под задачи проекта среди разнообразных NoSQL-решений.
Книга знакомит читателя с такими принципами организации и обработки данных, как Map-Reduce и Sharding. Также разбираются различные варианты репликаций: Master-Slave и Peer-to-peer. Стоит особенно отметить, что книга рассчитана на малоопытных разработчиков в освещаемой теме (как раз это подходит мне), но неплохо разбирающихся в вопросах реляционных решений.
Наиболее полезными, как на мой взгляд, в книге являются примеры ситуаций и задач, в которых применение NoSQL-решений наиболее оправдано. Для каждого типа NoSQL баз данных приведен свой список таких решений. Стоит отметить и тот факт, что авторы настоятельно рекомендуют не списывать со счетов привычные реляционные решения, а лишь дополнять их новыми собратьями в разрезе некоторого набора функций (Polyglot Persistence). Также интересной выглядит идея организации абстрактного слоя к таким хранилищам с возможностью последующей их заменой на аналоги, что кажется вполне разумным, ибо NoSQL баз данных становится все больше и больше.
Подводя некоторых итог вышесказанному хотелось бы отметить особенную пользу от прочтения книги в виде упорядоченного разложения «по полочкам» разных сведений о NoSQL, что позволяет более широко окинуть взглядом эту новую молодую категорию инструментов.
Принципы умного накопления денег
Сегодня я отойду немного от разработки, а перейду к заработку.
Жизнь разработчика — это борьба за выживание в короткое время трудовой деятельности. В 40 лет многим уже проблематично писать код также резво и красиво, как, например, в 25. К сожалению, многие разработчики до сих пор считают, что начинать нужно после ВУЗа, а не во время учебы или даже до учебы. Однако сколько бы вы не получали и какой пост не занимали, деньги, а точнее управление ими — вот тема этой статьи.
Управление финансами часто сводится к следующим действиям над деньгами:
- Ведение и оптимизация статьи расходов
- Ведение и оптимизация статьи доходов
- Управление накопленным капиталом
Третий пункт — то самое, что определяет наши финансовые возможности в будущем. Об этом и пойдет речь далее.
Continue Reading →
The Passionate Programmer: книга о карьере разработчика

Сейчас читаю книгу, в которой очень подробно освещен вопрос карьерного роста разработчика ПО. Пожалуй, это одна из лучших книг на мой взгляд, в которой столь остроумно и изящно объясняется процесс создания своей карьеры и улучшения жизни через совершенствование своих профессиональных навыков. Вряд ли она поможет Вам, если Вы хотите уйти с работы и запустить стартап, однако ее помощь трудно переоценить, если же работа наемника Вам нравится. Это касается как офисных сотрудников, так и фрилансеров, не имеющих своих решений-платформ.
В книге есть упражнения для закрепления полученных навыков после чтения. Их очень полезно делать. Первым из них является составление карты Ваших навыков в соответствии с потребностями рынка труда. Под катом моя карта и пояснения к ней, как ее составлять.
Continue Reading →
E2E тестирование AngularJS Single Page Applications
Приложения, работающие на одной странице браузера, или если говорить модно: Single Page Application (SPA), необратимо становятся трендом. Этот подход многое меняет в голове разработчиков, особенно тех, которые любят свой старый-добрый MVC-фреймворк на стороне сервера, например, Ruby On Rails или ASP.NET MVC. В скором времени, и я считаю это правильным, прижившиеся MVC-приложения отойдут в мир иной, а от былых фреймворков останется лишь небольшая часть функционала, которая реализует REST-сервисы. Чем же так примечательна эпоха SPA, которую мы обязательно застанем в ближайшем будущем? Пожалуй, на этот вопрос слишком много можно придумать ответов тем, кто уже пробует SPA, но наиболее очевидными преимуществами являются следующие:
- Полное разделение серверной и клиентской логики, взаимодействие будет построено на контрактной основе, вот-вот допилят json-schema и придет конец таким монстрам как XML и SOAP в качестве протоколов взаимодействия.
- Полная автоматизация тестирования клиентской стороны, так как она целиком статична, что в свою очередь означает возможность полной подмены REST-сервера на тестовый с последующей возможностью тестировать вплоть до расположения элементов на странице строго по спецификации.
Однако я думаю, что будущее уже здесь, а возможности таких инструментов как AngularJS и Brunch.IO уже позволяют без оглядки на прошлое реализовывать свои идеи в виде SPA. В этой статье мы рассмотрим возможности приемочного (E2E) тестирования для SPA, использующего движок AngularJS.
Continue Reading →
Двойственность интерфейсов. Критика дизайна атрибутов C#.
Интерфейсы как элементы языка программирования, играют большую роль в статически типизированном окружении. С их помощью разработчики ПО достигают выполнения принципа слабой связности, а также упрощают выполнение Unit-тестирования за счет возможности подстановки реализаций-заглушек.
С опытом, архитекторы ПО сталкиваются с некоторыми проблемами в интерпретации роли интерфейсов среди других семантических структур языка. Возникают жаркие споры: когда нужно использовать интерфейсы, когда не нужно, и какими они должны быть. Часто бывает, что отсутствие интерфейсов объясняется желанием «упростить» разработку, что, конечно, неверно — это всего лишь попытка оправдать свою лень оплатить технический долг.
В этой статье будет разбираться вопрос о том, какие интерфейсы бывают и почему оно так. Также будет затронут вопрос о том, чего так не хватает в языке C# до полного интерфейсного счастья.
Url Rewrite и IIS
Хорошие идеи часто порождают трудные проблемы. Как вам, например, идея разделить Web-проект на два подпроекта, один из которых отвечает только за REST-сервисы, а другой — только статичная часть в виде HTML/CSS/JavaScript? Как бы хороша не была такая идея, у нее есть один недостаток, который можно сразу заметить: статичная часть, будучи вгруженной в браузер, должна посылать запросы к сервисам строго по одному и тому же порту, одному и тому же хосту, одному и тому же домену. Конечно, можно использовать всякие трюки для обхода этих ограничений, но все же я не люблю спорить с ГОСТ’ом для Web’а. Потому можно хостить в рамках одного Web-сервера или использовать Reverse Proxy. Для IIS 7.5 есть оба варианта, но так как у меня только один Web-проект в Solution, то логично было бы разделить сервисы и статические файлы на уровне виртуальных папок.
- Все, что начинается с «/service/…» — пропускать как есть, это просто контролировать.
- Все остальное, обрабатывать так, как будто локальная папка /static/ является корнем.
С таким набором правил можно составить следующий Web.config:
Фишка в атрибуте stopProcessing, который показывает, что дальше преобразовывать путь нет необходимости, его можно использовать «в лоб». В качестве библиотеки для сервисов используется ServiceStack.
Более подробно по Url Rewrite можно почитать здесь.
Какими бывают репозитории?
При разработке приложения, взаимодействующего с базой данных, используют множество шаблонов, техник и методик для сокрытия этого факта, преследуя различные цели:
- Упростить написание кода.
- Повысить читаемость кода через укрепеление однородности конструкций.
- Избежать дублирования логики запросов.
- Допустить возможность unit-тестирования без написания интеграционных тестов для борьбы с ленью и уменьшением времени выполнения тестов.
- Избежать резкого падения производительности при выполнении условий выше.
Методология DDD призвана решить наболевшую проблему при помощи шаблонов Репозиторий и Спецификация. Однако при реализации «в лоб» можно столкнуться с проблемами отсутствия контроля над формированием запроса, что может быть печальным фактом с позиций производительности. Вопрос, обсуждаемый в статье, поднимался не раз и не два. Существует еще множество точек зрения, но всех их можно разделить на группы:
DI Container?
Долго-долго выбирал между различными DI-контейнерами в .NET. Сначала исследовал Autofac, потом посмотрел Munq, после взгляд бросил на Funq, но прочитав это, сразу понял, что вот она рыба моей мечты!
- Быстрый
- АОП
- Управление временем жизни
Представление иерархических данных в SQL совместно с ORM
Возникла потребность в проекте представить иерархию данных, т.е. граф-дерево. Хотел было использовать первое попавшееся в голову решение a la поставить ссылку из таблицы на ее же ключевой столбец, как задался вопросом, а не существуют ли решения по-лучше?
Похожая тема поднималась неоднократно, однако ни для кого не секрет, что любой ORM вносит свое видение прекрасного в архитектуру SQL-базы. Например, вторая статья из вышеуказанных, явно дает понять, что для построения эффективного сценария придется отказаться от инструментов ORM и писать SQL-запросы руками, причем вручную же приспосабливать их для разных СУБД, что вообще застрелиться можно сложно.
В первой же ссылке даются сравнения производительности ряда архитектурных решений для представления иерархичных данных в SQL, откуда, как можно убедиться, следует простое правило: если нет нужды выбирать всех потомков узла, то всегда используйте то самое решение, которое лезет в голову первым. Однако в реальной жизни такая операция может иметь место часто, а потому, если выбирать между вложенным набором (Nested Set) и явным путем (Materialized Path), то предпочтение по производительности отдавать последнему.
Отладка CoffeeScript в Chrome
После знакомства с CoffeeScript возникла потребность в отладке, однако, как известно, CoffeeScript преобразовывается в JavaScript, и отладка проходит с кодом на JS, что может быть весьма неудобно в ряде случаев. С целью решения этой проблемы Mozilla и Google составили документ, в котором были изложены основные направления и методы решения вышесказанной проблемы.