В современной разработке ваш код сильно отличается от кода на «боевом» сервере (production) после компиляции, минификации, объединения и разных оптимизаций. Тут-то и вступают в игру карты кода (source maps), показывая точное соответствие элементов готового рабочего кода проекта и вашего кода разработки. В этом вводном уроке мы возьмём простой проект и запустим его с помощью различных компиляторов JavaScript с целью посмотреть работу карт кода в браузере.
Читать полностью »
Рубрика «Проектирование и рефакторинг» - 68
Время подключать исходники. Введение в Source Maps
2013-05-05 в 8:40, admin, рубрики: Closure Compiler, coffeescript, grunt, gruntjs, javascript, JSMin, TypeScript, UglifyJS, Проектирование и рефакторинг, метки: Closure Compiler, coffeescript, grunt, gruntjs, JSMin, TypeScript, UglifyJSРецепты против взаимных блокировок на сигнальных переменных
2013-05-03 в 9:22, admin, рубрики: deadlocks, Блог компании Нордавинд, многопоточное программирование, Программирование, Проектирование и рефакторинг, метки: deadlocks, многопоточное программирование, ПрограммированиеДоброго времени суток, уважаемые читатели!
Этим постом я продолжаю серию статей, направленных на борьбу за чистоту и безопасность разрабатываемых многопоточных программ.
Рисунок 1 – Взаимная блокировка 1-го рода с участием сигнальной переменной.
В рамках этого поста мы рассмотрим проблемы, которые возникают при использовании сигнальных переменных, и покажем, как их можно избежать.Читать полностью »
Рефакторинг с бубном, или как мы халка усмиряли
2013-04-24 в 7:54, admin, рубрики: .net, usercontrol, Блог компании «Дневник.ру», Веб-разработка, проектирование, Проектирование и рефакторинг, рефакторинг, метки: .net, usercontrol, Веб-разработка, проектирование, рефакторинг
Думаю, все согласятся, что большинство стартапов изначально сделаны на коленке. Только потом, в случае удачного выстреливания, при грамотном руководстве и понимании стратегических целей владельцы ресурса могут принять решение о рефакторинге существующего продукта. Хорошо, если это произошло раньше превращения Брюса Баннера в Халка. Но что делать, если такой момент был благополучно пропущен, и ресурс представляет собой огромного зеленого плохо-контролируемого гиганта? Как поступить в такой ситуации? Читать полностью »
Вариант организации контроля версий ПО для аппаратов с множеством сетевых устройств на борту
2013-04-23 в 11:11, admin, рубрики: Песочница, Проектирование и рефакторинг, система контроля версий, структура проекта, управление проектами, хранилище, метки: система контроля версий, структура проекта, хранилищеХочу поделиться некоторыми идеями по поводу организации хранилищ в системе контроля версий. Для определенности: мы используем Меркуриал, но это не столь важно.
В двух словах о задаче. Одновременно ведется несколько проектов. Под проектами понимаются аппараты с цифровыми устройствами на борту (десятки устройств), объединенными в сеть. Речь идет о программном обеспечении бортовых устройств, которое нужно отслеживать с помощью системы контроля версий.
Есть бортовые устройства, одинаковые для разных аппаратов, а есть и специфические. Устройства могут программироваться разными разработчиками, а некоторые из устройств программируют контрагенты. Марки процессоров (контроллеров) бортовых устройств различаются. В разных устройствах могут использоваться одинаковые библиотеки: драйверов, математики и пр.
Разработчики много времени проводят в командировках (на испытаниях), где оперативно нужно менять код и обмениваться обновлениями по Интернету.
Сейчас представляется удивительным, что такая работа проводилась без системы контроля версий. Возможно это удавалось потому, что проектов было не так много, а разработчиков всего двое. Но дальше так продолжаться дело уже не может.
Мы сформировали концепцию контроля версий и потихоньку начинаем рефакторинг проектов в русле данной концепции. Пока мы в начале пути, найденные решения нам нравятся, но возможно не видим всех подводных камней и можем поплатиться за это в будущем. Надеемся, что рекомендации читателей помогут исправить ошибки, пока мы не зашли очень далеко.
Два простых правила для предотвращения взаимных блокировок на мьютексах
2013-04-12 в 21:16, admin, рубрики: deadlocks, multithreading, Mutex, Блог компании Нордавинд, параллельное программирование, Проектирование и рефакторинг, метки: deadlocks, multithreading, mutexЗдравствуйте, уважаемые читатели!
Так сложилось, что это третий пост в блоге нашей компании, и, как и первые два, он посвящен вопросам многопоточного программирования и проблемам, которые при этом возникают. Получилось так неслучайно, ведь мы на собственной «шкуре» испытали, что ситуации, возникающие при написании многопоточных программ, невероятно сложны для отладки, так как во многом определяются динамикой работы программы на конкретной аппаратной платформе. Уверен, что большинство программистов сталкивались с ситуацией, когда программа, которая прекрасно работает на одном компьютере, на другом совершенно неожиданно начинает дедлочиться практически «на ровном месте».Читать полностью »
Техника: Перемещение функций между объектами (рефакторинг М. Фаулера)
2013-04-12 в 14:26, admin, рубрики: Проектирование и рефакторинг, рефакторинг, Совершенный код, фаулер, шпаргалка, метки: рефакторинг, фаулер, шпаргалка Начало Код с душком
Техника: Составление методов
В продолжении, техника рефакторинга по книге Рефакторинг. Улучшение существующего кода Мартин Фаулер.
Читать полностью »
«Strategy Pattern. Просто о простом» или почему я хожу на собеседования «PHP Junior» ради fun’а
2013-04-12 в 14:05, admin, рубрики: patterns, patterns and practices, php, php5, Программирование, Проектирование и рефакторинг, метки: patterns, patterns and practices, PHP, php5Приветствие
Всем привет! В этот радостный и, достаточно, теплый пятничный денек приключилась у меня (процитирую в более приятном варианте) «рука-лицо». Честно говоря, приключается сие действие достаточно часто, но, по обыкновению, вызывается оно от ощущения:
Боже, какой же я тупой.
В этот раз меня посетило несколько другое чувство, и, как я убедился, не только меня. Чувство это напомнило мне об одном из моих собеседований, где меня попросили написать скелет паттерна «Декоратор», который оказался в личном представлении интервьювера совершенно другим, нежели его классическое толкование.Читать полностью »
Критический взгляд на принцип инверсии зависимостей
2013-04-11 в 19:27, admin, рубрики: DIP, solid, ооп, Проектирование и рефакторинг, метки: DIP, solidDISCLAIMER: У автора этой статьи нет цели подорвать авторитет или каким-то образом обидеть столь уважаемого камрада, как «дядюшка» Боб Мартин. Речь здесь идет скорее о более тщательном обдумывании принципа инверсии зависимостей и анализ примеров, использованных при его описании.
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) был впервые описан Бобом Мартином в одноименной статье, опубликованной в журнале C++ Report в 1996 году. Затем, практически в неизменном виде он был опубликован в книгах Боба Мартина «Принципы, паттерны и методики гибкой разработки» [Mattin2006].
По ходу статьи я буду приводить все необходимые цитаты и примеры из вышеупомянутых источников. Но чтобы не было «спойлеров» и ваше мнение оставалось объективным, я бы рекомендовал потратить 10-15 минут и ознакомиться с оригинальным описанием этого принципа в статье [Martin96] или книге [Martin96].
Быстрый старт: Визуальное проектирование базы данных в MySQL Workbench
2013-04-09 в 6:36, admin, рубрики: mysql, sql, базы данных, Песочница, проектирование базы данных, Проектирование и рефакторинг, метки: sql, базы данных, проектирование базы данных
Цель данного поста — помочь начинающему разработчику быстро освоится и спроектировать простенькую базу с помощью инструмента для визуального проектирования баз данных MySQL Workbench от компании Oralce и получить её ER-модель и SQL-дамп.Читать полностью »
Пять правил успешного кросс-платформенного проекта
2013-04-07 в 15:28, admin, рубрики: cross-platform, кроссплатформенная разработка, Проектирование и рефакторинг, Совершенный код, управление проектамиОт переводчика: я сейчас по крупицам собираю литературу по проектированию кросс-платформенного ПО. Этот небольшой текст — самое интересное, что я пока нашёл.
Кодеру для реализации конкретной фичи достаточно гугла, но ведь есть особые требования к проектированию? Скажем, ветвление #ifdef в методах — единственное средство выделения platform-specific частей проекта? (Не много ли макарон?) Есть ли более высокоуровневые подходы, шаблоны, «надстройки» над #ifdef? Надеюсь, этот пост послужит пищей для дальнейшего обсуждения.Читать полностью »