Как стать автором
Обновить
70
Goder @Goderread⁠-⁠only

Пользователь

Отправить сообщение

Учимся проектировать на основе предметной области (DDD: Domain Driven Design)

Время на прочтение8 мин
Количество просмотров220K

1. Введение



В данной статье я хотел бы рассказать об этих трёх буквах, постоянно находящихся на слуху, но для многих являющихся тайной за семью печатями, а так же привести ряд ресурсов, с которыми неплохо было бы познакомиться при желании продолжить развитие в проектировании на основе предметной области (DDD: Domain Driven Design).


Читать дальше →
Всего голосов 66: ↑54 и ↓12+42
Комментарии25

О синглтонах и статических конструкторах

Время на прочтение8 мин
Количество просмотров29K
Изначально автор хотел назвать эту статью следующим образом: «О синглтонах, статических конструкторах и инициализаторах статических полей, о флаге beforeFieldInit и о его влиянии на deadlock-и статических конструкторов при старте сервисов релизных билдов в .Net Framework 3.5», однако в связи с тем, что многострочные названия по неведомой автору причине так и не прижились в современном компьютерном сообществе, он (автор) решил сократить это название, чудовищным образом исказив его исходный смысл.

-------------------------

Любая реализация паттерна Синглтон в общем случае преследует две цели: во-первых, реализация должна быть потокобезопасной, чтобы предотвратить создание более одного экземпляра в многопоточном мире .Net; а во-вторых, эта реализация должна быть «отложенной» (lazy), чтобы не создавать экземпляр (потенциально) дорого объекта раньше времени или в тех случаях, когда он вообще может не понадобиться. Но поскольку основное внимание при прочтении любой статьи про реализацию Синглтона отводится многопоточности, то на «ленивость» зачастую не хватает ни времени не желания.

Читать дальше →
Всего голосов 80: ↑65 и ↓15+50
Комментарии35

Документирование по ГОСТ 34* — это просто

Время на прочтение12 мин
Количество просмотров483K
Сегодня мы поговорим об отечественных стандартах на проектную документацию. Как эти стандарты работают на практике, чем они плохи и чем хороши. При разработке документации для государственных и серьезных частных заказчиков у нас обычно нет выбора — в требования по документированию ТЗ вписано соблюдение стандартов. На практике мне приходилось сталкиваться с различными примерами недопонимания структуры стандартов, того, что должно быть в документах и зачем эти документы нужны. В итоге из-под пера техписателей, аналитиков и специалистов выходят порой такие перлы, что непонятно, в каком состоянии сознания они писались. А ведь на самом деле все достаточно просто. Поиск по Хабру не вернул ссылок на более-менее целостный материал на данную тему, потому предлагаю закрасить этот досадный пробел.
Читать дальше →
Всего голосов 64: ↑60 и ↓4+56
Комментарии43

NOC: Комплексный подход к управлению сетью

Время на прочтение5 мин
Количество просмотров105K


Сложные сети требуют комплексного подхода к управлению. Если вся сеть состоит из десятка свичей и управляется одним инженером, то для поддержания ее в рабочем состоянии достаточно набота простейших скриптов, нескольких электронных таблиц и любой примитивной системы мониторинга. В более крупных сетях, сотоящих из разношерсного оборудования разных вендоров, поддерживаемого десятками инженеров, разбросанных по разным городам и странам, начинают вылезать весьма специфичные проблемы: ворох самописных скриптов становится абсолютно неуправляемым и непредсказуемым в поведении, на интеграцию различных систем управления между собой уходит больше ресурсов, чем на разработку с нуля и установку и так далее. В результате быстро приходит понимание, что решать задачу системы управления сложной сетью можно только комплексно.

Еще в начале 80-х комитет ISO выделил основные компоненты системы управления сетью. Модель получила название FCAPS. По версии ISO, для успешного управления сетью надо уметь управлять отказами (F), конфигурацией оборудования и сервисов (C ), собирать и обрабатывать статистику по потреблению услуг (A), оценивать производительность (P) и централизованно управлять безопасностью (S). Прошедшие три десятка лет не добавили ничего принципиально нового, и все задачи управления сетью так или иначе прыгают вокруг основных составляющих.

Коммерческие комплексы подобного рода весьма дороги и далеко не безгрешны, а среди open-source систем присутсвовал явный и откровенный пробел, что просто подталкивало на разработку своего велосипеда. В результате обобщения нашего личного опыта по созданию и эксплуатации сетей, после долгих проб и ошибок появилась система NOC
Читать дальше →
Всего голосов 69: ↑69 и ↓0+69
Комментарии52

Проект «Айсберг»

Время на прочтение6 мин
Количество просмотров17K
Третьего июля исполняется ровно 20 лет фильму «Терминатор 2». Запомнился он не только качественной режиссурой и щедрой улыбкой Арни, но и прорывными для того времени спецэффектами. Компьютерная графика, которую создавали в первой, еще не до конца «допиленной» версии Adobe Photoshop, смотрится неплохо и сегодня. Технологии с той поры серьезно изменились, а вот улучшились ли сами фильмы – большой вопрос. Сейчас индустрия развлечений активно развивает технологии трехмерного изображения: в «три-дэ» снимают фильмы, и их теперь можно смотреть даже на экране ноутбука. Индустрия развлечений неплохо продвигает перспективные разработки в массы. А насколько эффективно их можно использовать в несколько более серьезных задачах?

О таких задачах и поговорим. Картинка справа – не рендер, и не кадр из компьютерной игрушки. Это результат серьезной работы по моделированию реальных условий окружающей среды, с учетом всех мельчайших деталей – от погоды на заданной широте и вплоть до характеристик морской воды. Исследователь Антарктиды Жорж Мужен совместно со специалистами Dassault Systemes попытались ответить на достаточно сложный вопрос: можно ли «перетащить» айсберг туда, где испытывается острая нехватка питьевой воды? О том, как пытались решить эту задачу с помощью решений CATIA и SIMULIA, я и хочу рассказать.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии25

О вреде изменяемых значимых типов

Время на прочтение8 мин
Количество просмотров22K
Большинство программистов, которых нелегкая судьба свела с платформной.Net знают о существовании значимых типов (value types) и ссылочных типов (reference types). И довольно многие из них прекрасно знают, что помимо названия, эти типы имеют и другие различия, такие как расположение объектов оных типов в памяти, а также в семантике.

Что касается первого различия (о котором стоит упомянуть как минимум ради полноты изложения), то оно заключается в том, что экземпляры ссылочных типов всегда располагаются в управляемой куче, в то время как экземпляры значимых типов по умолчанию располагаются в стеке, но могут мигрировать в управляемую кучу вследствие упаковки, будучи членами ссылочных типов, а также при использовании их в хитрых экзотических конструкциях языка C#, типа замыканий (*).

Хотя это отличие является очень важным и именно благодаря нему значимые типы существуют и используются, у этой пары типов есть еще одно, не менее важное семантическое различие. Значимые типы, как подсказывает название, являются значениями, которое копируется каждый раз при передаче в функцию или при возвращении из нее. А поскольку при копировании, как, опять же, подсказывает название, передается и возвращается не исходный вариант, а копия, то все попытки изменений приведут к изменению копии, а не исходного экземпляра.
Читать дальше →
Всего голосов 79: ↑70 и ↓9+61
Комментарии27

Сложно о простом или особенности Linq to objects

Время на прочтение6 мин
Количество просмотров4.8K
LINQ to objects сейчас прочно вошел в нашу жизнь, победоносными шагами ступая по всему стеку .net приложений. В этой статье я бы хотел привести примеры нескольких не очевидных вещей, с которыми довелось столкнуться, работая с LINQ. Интересно — прошу под кат.
Читать дальше →
Всего голосов 62: ↑54 и ↓8+46
Комментарии10

Assert DSL на примере .Net

Время на прочтение8 мин
Количество просмотров3.6K
Никто уже не отрицает полезность тестов в любой сколько-нибудь сложной системе. Без тестов очень быстро можно скатиться в хаос и проводить большую часть времени в отладчике, занимаясь поиском и отловом косвенных эффектов от изменений той или иной части приложения. Тесты важны, нужны и так далее по тексту.

По науке, тесты являются документированием системы. Грамотно написанные тесты дают понять, как работает система, как ведет себя, причем читаться все это должно как готовая спецификация на поведение системы. Т.е. в идеале должен получаться связный и понятный текст. Это идеал, к которому постепенно приближаются методы тестирования, начиная от юнит тестирования и наиболее явно проявляясь в поведенческом/приемочном тестировании, когда сами тесты уже пишутся на языке бизнеса (в этом моменте вспоминаем Fitnesse).

При написании тестов не стоит скупиться на строчки кода и классы, важно только их правильно структурировать. Я считаю, что может быть вполне нормальной ситуация, когда у вас тестовый класс состоит только из одного тестового метода – не надо этого стесняться, это гораздо лучше, чем классы на 20 экранов. HD экранов.

В общем, все должно быть направлено на максимальную ясность и четкость тестов, чтобы явно было видно все взаимосвязи. Чтобы можно было восстановить логику программы по одним лишь тестам. В дело читабельности пойдет не только Assert DSL (Domain Specific Language), но и именование файлов, подход Arrange Act Assert. Все это не новые подходы как оказывается, но широкой известности пока не получившие, судя по тому, что я вижу в окружающих меня проектах. Да и сам я натолкнулся на новые темы случайно, изучая исходные коды StructureMap.

Чтобы не томить, сразу расскажу какие основные шаги предлагаются для улучшения тестов:
  • Именовать тестовые файлы по основному методу, который тестируется.
  • Использовать DSL  для создания объектов, чтобы методы делать максимально лаконичными.
  • Стараться писать тесты в стиле «один тестовый метод – один assert».
  • Структурировать внутренности теста.
  • Создать и использовать Assert DSL.

Думаю что для большинства многие перечисленные пункты не новость, и почти все они применяются в реальной разработке.

Раскрытие темы с примерами и в картинках
Всего голосов 23: ↑20 и ↓3+17
Комментарии11

Пишем плагин-диссектор для Wireshark

Время на прочтение14 мин
Количество просмотров25K
imageWireshark — одна из незаменимых утилит для «прослушки» сети, при работе с сетевыми протоколами. В состав программы уже входит некое количество диссекторов1, которое помогают детально рассмотреть пакеты базовых протоколов. Но при работе над проприетарным протоколом компании Nortel я столкнулся с отсутсвием подходящего диссектора. А нужен он был как воздух. Выход был очевиден — написать свой. Что я и сделал.
Таким образом, имея небольшой опыт написания плагина «анатома» под Wireshark, я решил поделиться знаниями и опытом с сообществом. Ну и для себя записать, на случай, если в будущем понадобится.

Диссекция — лат. dissectio, от dissecare, рассекать
Читать дальше →
Всего голосов 74: ↑74 и ↓0+74
Комментарии18

Социальная сеть как инструмент научной работы

Время на прочтение4 мин
Количество просмотров12K
Важным этапом научного исследования является выбор темы и оценка степени разработанности проблемы. В современных условиях лавинообразного роста информации проблема выбора тема усложняется еще больше: ученый оказывается просто не в состоянии отслеживать все публикации в собственной области (не говоря уже о смежных областях). Кроме того, на начальном этапе исследования достаточно сложно (кто писал кандидатскую диссертацию, тот знает) отслеживать процесс изучения собственной области на современном этапе (т. е., получать актуальную информацию о том, кто, где и чем занимается, какие публикации выходят, какие диссертации защищаются и т. п.). В настоящее время данная задача облегчается при помощи научных социальных сетей, позволяющих ученым отслеживать (а в некоторых случаях — и скачивать) последние публикации по собственной, устанавливать контакт друг с другом, а также предоставляющих некоторые дополнительные возможности. Рассмотрим некоторые популярные социальные сети для ученых более подробно. Данный обзор не претендует на исчерпывающий характер; при выборе социальных сетей я руководствовался следующими критериями: 1) интернациональность (именно поэтому в обзор не попали сервисы, ориентированные на ученых какой-то одной конкретной страны) и 2) междисциплинарность (в первую очередь меня интересовали социальные сети, которые могут использоваться учеными самой разной специализации; именно поэтому обзор не затрагивает сервисов, ориентированных на представителей какой-то одной конкретной дисциплины). Буду очень рад, если с помощью читателей удастся расширить и дополнить этот список.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии31
12 ...
7

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность