Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

God object. Анализ сложных проектов

Ненормальное программирование *.NET *

Введение


Ни для кого не секрет, что такой архитектурный антипаттерн как God object препятствует эффективному поддерживанию кода проекта. Однако его все равно можно встретить в Legacy-системах корпоративного сектора. Со временем код становится настолько сложным, что изменить его функциональность, даже при наличии Unit-тестирования, становится большой проблемой. Такие системы никто не хочет поддерживать, все боятся что-либо улучшать, количество проблем в трекере держится постоянным числом, но может и расти. Как правило, у команды упавшее настроение, которое со временем становится чемоданным: все хотят свалить.
Иллюстрация проблемы
Читать дальше →
Всего голосов 35: ↑30 и ↓5 +25
Просмотры 5.8K
Комментарии 18

Как завести драйвера для старых карт Mobility Radeon на Windows 8

Видеокарты
Относительно недавно AMD выпустила специальный пакет драйверов для Windows 8, AMD Catalyst Legacy 12.6 (ссылка на новость на сайте AMD), но на ноутбуке с Mobility Radeon HD 3400 он не заработал (это не значит, что он обязательно не заработает у вас — проверьте его прежде, чем приступать к процедуре, описанной в этом топике).

Побывав на сайте, я обнаружил, что в секции старых мобильных карт Windows 8 не упоминается вообще. Можно завести драйвер для Windows 7. Нужен ли он вам вообще, этот драйвер от производителя, если в восьмерке есть встроенный, который довольно неплохо работает — решать вам. Но сразу скажу, Catalyst Control Center (графическая утилита для настройки) может не заработать, увы и ах. Как завести драйвер для Windows 7 я расскажу под катом.
Читать дальше →
Всего голосов 14: ↑10 и ↓4 +6
Просмотры 40K
Комментарии 28

Анонс новых инженерных тренингов

Блог компании ScrumTrek Разработка веб-сайтов *Тестирование IT-систем *
Один из основных вопросов, которые задают себе участники почти всех тренингов — «Что мне с этим делать дальше?» Безусловно, на этих тренингах рассматривается много полезной информации, участники практикуют новые навыки, но все же реальные проекты сильно отличаются от тех, которые рассматриваются на обучении. Мы бы хотели изменить такую ситуацию и представляем вам анонс двух принципиально новых тренингов:

  • Использование практик XP для спасения проектов от 2 лет и более
  • Тестирование взрослых проектов: от стабильной боли к стабильному качеству с помощью XP практик

Читать дальше →
Всего голосов 5: ↑3 и ↓2 +1
Просмотры 3.1K
Комментарии 0

Программист из Латвии пытается в одиночку написать ОС

Ненормальное программирование *
Латвийский разработчик Густ Каксис начал писать новую операционную систему. Нужно сказать, что Каксис не шутит. Ему 29 лет, то есть о юношеском максимализме речи не идёт. Программист серьёзный, он опубликовал план проекта, свои исследования в области операционных систем и упомянул, что у него есть некие коммерческие идеи, как можно использовать новую ОС.

Густ Каксис планирует освещать ход проекта в своём блоге.

План


1. Система рассчитана на современную архитектуру Intel64 (автор берёт за базу Ivy Bridge, CPU Core i5 третьего поколения с интегрированным GPU Intel HD 4000 и чипсетом B75 Express).
Читать дальше →
Всего голосов 170: ↑98 и ↓72 +26
Просмотры 67K
Комментарии 241

Тонзиллэктомия ректально: работаем с AD в Powershell без AD cmdlets

PowerShell *
В Windows Server 2008 впервые появились замечательные командлеты PowerShell для работы с ActiveDirectory. Эти прекрасные, логичные, интуитивно понятные и чрезвычайно мощные инструменты вызывали у меня чувство грусти, если не сказать — «досады»: они были недоступны мне, эникейщику непрофильной конторы. Все одиннадцать сетей, которые я обслуживал были построены на базе Windows 2003 R2.

Одиннадцать несвязанных доменов в одиннадцати несвязанных сетях в разных городах, разбросанных по Дальнему востоку. И ни в одной из них — ни то, что «Семёрки», даже «Висты» нет, что ставит крест на попытках использования AD cmdlets в связке с две тысячи третьей.


Задача была сформулирована следующим образом — «создать код, способный выполнять основные операции по управлению AD из сценариев PowerShell, исполняемый в Windows XP / 2003». О том, как она была решена, читайте под хабракатом (осторожно, костыли; много текста и кода).
Из спичек и желудей соберем код для управления AD
Всего голосов 38: ↑27 и ↓11 +16
Просмотры 18K
Комментарии 13

«Работает — не трогай». Стоит ли нарушать правила?

Разработка веб-сайтов *Тестирование IT-систем *

Введение


Очень не хватало возможности ввести пользователей в контекст перед голосованием. Спасибо! И так

Преамбула


Работая со старым унаследованным кодом, порой встречаются достаточно проблемные участки, которые есть желание переписать\исправить\переделать, но нет такой возможности. Этот код может быть с ошибками, которые не исправляются годами и с ними приходится мириться. Что делать с таким кодом?
Читать дальше →
Всего голосов 25: ↑19 и ↓6 +13
Просмотры 32K
Комментарии 53

Используем фичи C# 5 (async и await) в .NET 2.0

.NET *Mono и Moonlight *
Посвящается тем 45% .NET разработчиков, что до сих пор сидят на фремворках 2.0-3.5.

Да, вы не ослышались. async и await во втором дотнете. Но обо всём по порядку.

Зачем?

В какой-то момент мне надоело вручную возиться с написанием асинхронного кода. Async/awat выглядели слишком вкусными, чтобы не попробовать. Зная, что Microsoft при добавлении новых возможностей в язык и компилятор не привязывает их жёстко к фреймворку (так, extension-методы и LINQ отлично можно использовать во втором .NET, если где-нибудь объявить System.Runtime.CompilerServices.ExtensionAttribute), и видя Async CTP, добавляющего возможность использования async/await в 2010-ую студию при использовании в качестве целевого фреймворка .NET 4.0, я подумал, а почему бы и нет?

Читать дальше →
Всего голосов 51: ↑48 и ↓3 +45
Просмотры 23K
Комментарии 4

Legacy-фобия

Разработка веб-сайтов *
Коллеги, у меня для вас есть замечательная новость, мы получили чудесный проект, его несколько лет писали неизвестные нам разработчики, адрес которых мы вряд ли узнаем (чтобы «поделиться обратной связью»), писали очень давно и не известно под чем, и нам предстоит его поддерживать и развивать. Проект сейчас находится на пике своей производительности и мы скоро упремся, любые неаккуратные изменения могут его положить, но мы будем его развивать. Ура!

Согласитесь, странно звучит? Как бред больного на голову программиста. Кто же любит legacy? Это же всегда говнокод (ведь только мы сами пишем идеально), в нем полно багов (а мы сами пишем без ошибок), ужасные решения (ведь только мы сами выбираем подходящую архитектуру), и почти всегда его сложно читать (ведь только мы сами пишем понятно и красиво).
Читать дальше →
Всего голосов 77: ↑65 и ↓12 +53
Просмотры 39K
Комментарии 27

Революция PHP7: Типы возвращаемых значений и удаление артефактов

PHP *
Перевод
Планируемая дата выпуска PHP7 стремительно приближается, внутренняя группа усиленно работает, пытаясь исправить наш любимый язык, сделать его как можно лучше, будут удалены артефакты прошлых версий и добавлено несколько столь желанных фич. Есть много RFC, которые можно изучить и обсудить, но в этом посте я хотел бы сосредоточиться на трех самых важных.

PHP 5.7 vs. PHP7


Как я уже говорил в прошлом письме, 5.7 был отклонен в пользу перехода непосредственно к PHP7. Это означает, что не будет новой версии между 5.6 и 7 — даже если она и появилась бы, то просто служила бы сигналом тем, кто все еще погряз в устаревшем коде. Первоначально, 5.7 не должна была иметь новые функции, но должна была выбросить уведомления и предупреждения об устаревании кода, который скоро изменится в v7.

Также необходимо предупредить о некоторых ключевых словах, которые будут зарезервированы в PHP7, чтобы люди могли быстро привести свой код в соответствие с помощью какой-нибудь «автоматической» проверки совместимости версий PHP. Однако, как я писал в рассылке, большинство людей, которые достаточно компетентны, чтобы соблюдать совместимость своего кода с последней версией PHP, на самом деле и не используют конструкции, которые может сломать PHP7.
Читать дальше →
Всего голосов 59: ↑50 и ↓9 +41
Просмотры 52K
Комментарии 60

Legacy-код — это рак

WordPress *Разработка веб-сайтов *PHP *Проектирование и рефакторинг *
Перевод
Все чаще и чаще я вижу, что люди уклоняются от новейших технологий, делая выбор в пользу обратной совместимости. «Мы не можем повышать минимальные требования к PHP до 5.5, потому что у нас 50% пользователей еще на 5.4» говорят они. «Нет никакого способа обновиться до Guzzle 4+, у нас бекенд на версии 3 и переделывать его слишком долго и дорого». И самый лучший аргумент от WordPress: «Мы не может придти к полному ООП, потому что большинство пользователей сидят на shared-хостингах с 5.1 или не знают про MVC».

Нонсенс.

Legacy-код – это большое НЕТ


Возможно, это спорный вывод, но я твердо уверен, нет места для legacy-кода в современных системах. Скажу несколько слов, прежде чем вы начнете точить свои вилы и зажжете факелы. Я имею ввиду, что не должно быть ни малейшего повода поддерживать старый функционал, вы добавляете обновления задним числом к старой версии только потому, что некоторые люди все еще используют ее. Даже если этих людей большинство — не делайте так.
Читать дальше →
Всего голосов 57: ↑31 и ↓26 +5
Просмотры 79K
Комментарии 44

Товар или сервис

Программирование *Проектирование и рефакторинг *Управление разработкой *Управление проектами *Управление продуктом *

На Хабре (да и в реальной IT жизни) встречаeтся много вопросов вида:


  • Надо ли обновлять систему (или зависимости в приложении), если и так всё работает?
  • Нужны ли вообще тесты (автотесты) в приложении (вы ведь на них потратите своё время и деньги заказчика)?
  • Если ли смысл в паттернах и выделении абстракций (ведь подобное размазывает код, приводит к снижению производительности и т.д.)?

Ключевой вопрос во всех примерах ниже: что вы разрабатываете: товар или сервис? Как ни странно, но как только вы ответите на этот вопрос о товарах и сервисах, все сомнения о необходимости тестов, абстракций и т.д. отпадут сами собой.

Читать дальше →
Всего голосов 26: ↑20 и ↓6 +14
Просмотры 6.2K
Комментарии 22

Что иметь в виду при переписывании программного обеспечения

Управление разработкой *Управление проектами *
Перевод

При разработке каких-либо продуктов у команды зачастую возникает желание перестать бороться с текущим состоянием проекта и переписать всё снова, на этот раз "правильно" и "по науке". Обычно такие порывы не одобряются, но в этот раз я бы хотел предложить к прочтению перевод поста Hugo Baraúna, посвященного тому, какие вопросы нужно задать себе, если всё же решили переписывать.


Также, как и большой рефакторинг, переписывание продукта — непростая штука. За много лет мы приобрели достаточно опыта, чтобы указать, что вам следует обдумать, планируя и осуществляя процесс переписывания.


Будут ли обе платформы существовать одновременно, или нет?

Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 13K
Комментарии 7

Кейс OZON.ru: Как сделать тарификацию доставки прозрачной и управляемой

Анализ и проектирование систем *Разработка под e-commerce *
image
Инфографика в посте сделана на R по реальным данным из Тарификатора.

Вы сталкиваетесь с тарификацией доставки, когда делаете заказ в интернет-магазине. Тарификатор — IT-система, которая говорит каким способом товар доставят, на какие посылки разобьется корзина, сколько стоит доставка и когда привезут заказ. Тарификатор собирает информацию со склада и служб доставки, перерабатывает и выдает результаты покупателям интернет-магазина на сайте.

Цена за доставку товара для покупателя интернет-магазина редко совпадает с ценой, которую транспортная компания возьмет с самого магазина. Захотели вы привезти книги с помощью DHL в Новосибирск. OZON.ru выставит вам конкурентную цену за доставку — 500 руб. При этом DHL за эту доставку выставит OZON.ru счет на 1000 руб. Это кажется странным, но такова реальность, которую диктует рынок.
Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 7K
Комментарии 18

Новая жизнь legacy проекта

PHP *Symfony *
На хабре есть много статей, как сделать хорошо. Есть много статей, как делать не стоит.
Но что, если у вас есть проект, который работает, приносит бизнесу деньги, но из программистов, что-то в нем понять, не способен почти никто. Каждое изменение делается на страх и риск сыграть в русскую рулетку.

Хорошо, когда у вас есть годик или два для подготовки нового проекта с нуля (был у меня и такой опыт). Но если владелец не готов вкладываться в то, что вы будете что-то делать параллельно с нуля, пока старый движок во всю загибается. Попытки даже заговорить, о том, чтобы написать все по новой, встречают моментальный отказ. Но можно попробовать маленькими шажками, делать новый движок, который постепенно бы начал забирать на себя всю большую и большую роль в работе проекта. Собственно об опыте осуществить такую замену, я бы и хотел вам рассказать.
Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Просмотры 8.8K
Комментарии 22

«Керосинка» против «Патриотов»: как американские военные программисты научились правильно округлять

Блог компании PVS-Studio Тестирование IT-систем *Отладка *Промышленное программирование *
11 февраля 1991 года Patriot Project Office получил израильские данные о дефекте в ракетной системе Patriot. Они нашли, что если система работает 8 часов, она начинает мазать на 20%. Они прикинули, что после 20 часов работы система начинает промахиваться настолько, что перестанет быть способной захватывать, отслеживать и поражать баллистические ракеты. Американские военные не приняли во внимание всю важность открытия, заявив, что система предназначена для портативных и краткосрочных защитных операций и что никто никогда не будет использовать систему больше 8 часов.

16 февраля был выпущен Bug Fix, но чтобы его внедрить во все единицы боевой техники, требовалось время, ибо война.

21 февраля военные выпускают указание, что система не должна работать «долго». Военные не уточнили сколько длится «долго».

25 февраля в Дахране (Саудовская Аравия) в казарму в гости к американцам прилетела баллистичекая ракета "керосинка" (она же Р-17, она же Scud). 28 убито 96 ранено, потому что ЗРК «Патриот» промахнулся из-за программной ошибки.

26 февраля Bug Fix был доставлен в Дахран.



Читать дальше →
Всего голосов 100: ↑92 и ↓8 +84
Просмотры 38K
Комментарии 29

Псевдо-инкапсуляция легаси include-ов когда нет времени рефакторить

Ненормальное программирование *PHP *Программирование *Проектирование и рефакторинг *ООП *
Сегодня хочу рассмотреть миграцию кода из далекого прошлого в современный фреймворк.

Наиболее частая ситуация, которую я могу привести в пример — str_repeat('очень-', 20) старый код, не знающий даже классов, планируется перенести или частично использовать в современном фреймворке, но переписывать тысячи строк и десятки зависимостей нет времени. Такое бывает, когда заказчик вдруг решает существенно модернизировать или развивать проект, который 10+ лет работал без изменений, а сапортил его один парттайм-олдскул-программист изредка перезагружая пару-тройку сервисов и восстанавливая пароли.
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры 6.3K
Комментарии 1

StringBuffer, и как тяжело избавиться от наследия старого кода

Java *
Всем привет. Эта статья — вольный перевод поста StringBuffer, and how hard it is to get rid of legacy code. Как-то очень он мне запал в душу, поэтому решил перевести. Поехали.

В 2006-м, в 5-й java появился StringBuilder. Более легковесная и разумная альтернатива StringBuffer. Вот, что говорит официальная документация по StringBuffer:

Этот класс дополнен аналогичным классом предназначенным для использования в одном потоке — StringBuilder. В общем случае нужно отдавать предпочтение классу StringBuilder, так как он поддерживает все те же операции, что и этот (StringBuffer), но быстрее, так как не выполняет никаких синхронизаций.

Иметь synchronized в StringBuffer вообще никогда не было хорошей идеей. Основная проблема в том, что одной операции никогда не достаточно. Одиночная конкатенация .append(x) бесполезная без других операций, таких как .append(y) и .toString(). В то время, когда каждый конкретный метод потокобезопасный, вы не можете сделать несколько вызовов без конкуренции между потоками. Ваша единственная опция — внешняя синхронизация.

Так, что? Получается, 10 лет спустя уже никто не использует StringBuffer!? Ну, по крайней мере, точно не для нового функционала!?

Сколько объектов создает этот код?


Как я уже писал раньше, виртуальная машина создает много объектов на старте или при загрузке основных библиотек. Гораздо больше, чем Вы могли бы представить, задавая вопрос выше:

public class Main {
    public static void main(String... args) {
        System.out.println("Hello " + "world");
    }
}

Oracle JVM 8-й версии создает приблизительно 10_000 объектов для выполнения этой программы.
Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Просмотры 12K
Комментарии 33

Yii 1.1.19

PHP *Yii *

Команда PHP-фреймворка Yii выпустила версию 1.1.19. Получить её можно либо через Composer, либо архивом со страницы.


Данная версия является релизом ветки Yii 1.1, которая достигла EOL и получает только исправления безопасности и поддержки PHP 7.


Релизы, такие как этот, позволяют обновить PHP на серверах с Yii 1.1 и, тем самым, обновиться на поддерживаемые командой PHP-версии.


Yii 1.1.19 совместим с PHP 7.1, патчи безопасности на который будут выходить до 1 декабря 2019.

Читать дальше →
Всего голосов 24: ↑21 и ↓3 +18
Просмотры 4.9K
Комментарии 0

Как перешагнуть через legacy и начать использовать статический анализ кода

Блог компании PVS-Studio Visual Studio *Разработка под Linux *Разработка под Windows *


Проблемы legacy-кода знакомы подавляющему большинству разработчиков программного обеспечения. Процесс превращения кода в legacy неизбежен, ведь прогресс в программировании не стоит на месте. Проекты либо «умирают» навсегда, либо требуют постоянной поддержки и написания новых функций. Таким образом, в любом проекте на любом языке программирования legacy-код возникает и доставляет разные неудобства при дальнейшей разработке. На примере PVS-Studio, в этой статье я расскажу, как сразу начать использовать статический анализатор кода в своём проекте.
Читать дальше →
Всего голосов 27: ↑21 и ↓6 +15
Просмотры 6.9K
Комментарии 17

Как прикрутить нормальный поиск к устаревшему SQL-бэкенду

Блог компании JUG Ru Group Java *SQL *NoSQL *
Предположим, нужно собрать персональную информацию, например, дни рождения, имя, пол, количество детей и т.п., а также некоторые маркетинговые данные — как часто пользователи используют кнопки в корзине мобильного приложения и т.п. У нас уже есть приложение на базе SQL, но (как мы увидим дальше) продолжать использовать SQL для поиска — не лучшая идея. Для поиска придется прикрутить какой-то NoSQL движок.

Как совместить миры SQL и NoSQL? В этой статье будет несколько живых примеров интеграции продвинутого поискового движка Elasticsearch в устаревшие приложения, работающие с RestX, Hibernate и PostgreSQL/MySQL.

Расскажет об этом Дэвид Пилато (David Pilato) — эксперт компании Elastic (это те ребята, что сделали Elasticsearch, Kibana, Beats, and Logstash — то есть, Elastic Stack). У Дэвида есть огромный опыт проведения докладов о продуктах Elastic (конференции Devoxx в Англии, Бельгии и Франции, всевозможные JUG, Web5, Agile France, Mix-IT, Javazone, доклады для конкретных компаний, и так далее). Иначе говоря, излагает Дэвид весьма понятно и доходчиво, а его доклады заменяют тренинги за сотни нефти.

В основе этой публикации — доклад Дэвида на конференции Joker 2016, которая прошла в Санкт-Петербурге в минувшем октябре. Тем не менее, обсуждаемые темы за прошедший год никак не потеряли актуальности.

Статья доступна в двух вариантах: видеозапись доклада и полная текстовая расшифровка (жмите кнопку «читать дальше»  ⇩). В текстовом варианте все необходимые данные представлены в виде скриншотов, так что вы ничего не потеряете.


Всего голосов 33: ↑33 и ↓0 +33
Просмотры 20K
Комментарии 12