Здравствуйте, уважаемые читатели. В этой статье речь пойдет об одном подходе к автоматическому порождению программ по блочной модели задачи, к решению обратной задачи (восстановления модели исходной проблемы по уже порожденной программе), а также к решению проблемы верификации порожденных программ. Сама по себе тема очень серьезная, но статью я, по возможности, постараюсь сделать популярной (без тяжеловесного обзора аналогов, строго оформленной теоретической части и прочих сложностей), с примерами и описанием различных применений.
Читать полностью »
Рубрика «Проектирование и рефакторинг» - 26
Автоматическое порождение программ, обратная задача и некоторые связанные с ними решения
2018-08-19 в 17:27, admin, рубрики: php, Prolog, Алгоритмы, верификация программ, естественно-языковой интерфейс, порождение программ, Программирование, Проектирование и рефакторинг, реконструкция алгоритмаТовар или сервис
2018-08-19 в 17:23, admin, рубрики: legacy, автоматические тесты, баги, качественный софт, программа, Программирование, продукт, Проектирование и рефакторинг, разработка, рефакторинг, сервис, тестирование, управление, Управление продуктом, управление проектами, Управление проектом, управление разработкойНа Хабре (да и в реальной IT жизни) встречаeтся много вопросов вида:
- Надо ли обновлять систему (или зависимости в приложении), если и так всё работает?
- Нужны ли вообще тесты (автотесты) в приложении (вы ведь на них потратите своё время и деньги заказчика)?
- Если ли смысл в паттернах и выделении абстракций (ведь подобное размазывает код, приводит к снижению производительности и т.д.)?
Ключевой вопрос во всех примерах ниже: что вы разрабатываете: товар или сервис? Как ни странно, но как только вы ответите на этот вопрос о товарах и сервисах, все сомнения о необходимости тестов, абстракций и т.д. отпадут сами собой.
Это пост с докладами и видео по MS SQL Server
2018-08-13 в 15:30, admin, рубрики: ETL-процессы, Microsoft SQL, Microsoft SQL Server, PowerBI, SSRS-отчеты, Администрирование баз данных, Блог компании Яндекс.Деньги, параллельная сортировка, Проектирование и рефакторингВ июне мы провели митап по Microsoft SQL Server — докладчики из Яндекс.Денег, «Лаборатории Касперского», AwaraIT и SpbDev поделились с коллегами опытом. А теперь выкладываем видео в общий доступ.
Под каждым видео — таймкоды ключевых мест, но советуем смотреть, слушать и внимать целиком.
Data-driven подписки в SSRS
Клиент-серверное взаимодействие в новом мобильном PvP-шутере и устройство игрового сервера: проблемы и решения
2018-08-13 в 10:43, admin, рубрики: client-server, Gamedev, pvp, unity, unity3d, Блог компании Pixonic, геймдев, клиент-сервер, мобильные игры, Проектирование и рефакторинг, разработка игр, разработка мобильных приложений, шутер, юнитиВ предыдущих статьях цикла (все ссылки в конце статьи) о разработке нового fast paced шутера мы рассмотрели механизмы основной архитектуры игровой логики, базирующейся на ECS, и особенности работы с шутером на клиенте, в частности, реализация системы предсказания локальных действий игрока для повышения отзывчивости игры. В этот раз подробнее остановимся на вопросах клиент-серверного взаимодействия в условиях плохого соединения мобильных сетей и способы повышения качества игры для конечного пользователя. Также вкратце опишу архитектуру игрового сервера.
Секреты отказоустойчивости нашего фронт-офиса
2018-08-13 в 7:00, admin, рубрики: Анализ и проектирование систем, Блог компании Сбербанк, отказоустойчивость, Проектирование и рефакторингКак устроен современный банк? Есть бэк-офис, где выполняются разные операции, ведутся счета и отчетность. Есть мидл-офис, где принимаются решения и оцениваются риски, где оценивают кредитные риски и противодействуют мошенникам. И есть фронт-офис, где обслуживают клиентов и отвечают за их взаимодействие с банком через разные каналы.

В Сбербанке работают сотни систем разной доступности и надежности. Здесь есть и свои разработки, и коробочные решения с разной степенью кастомизации, разными SLA. Все системы интегрированы друг с другом огромным количеством способов. В этом посте мы расскажем, как весь этот муравейник фронтенда собирается таким образом чтобы обеспечивать непрерывное обслуживание клиентов.
Читать полностью »
PWA — это просто. Hello Habr
2018-08-08 в 8:44, admin, рубрики: javascript, Progressive Web Applications, pwa, serviceworker, Клиентская оптимизация, Проектирование и рефакторинг, Разработка веб-сайтов, разработка мобильных приложенийПродолжаем знакомство с Progressive Web Applications. После теоретической прошлой части самое время перейти к практике.
Сегодня мы построим простое, но полноценное PWA «Hello Habr».

Приложение доступно по адресу https://altrusl.github.io/habr-pwa/hello-habr/. При открытии в браузере на мобильном устройстве возможно добавление ярлыка на домашний экран и запуск в полноэкранном режиме.
Читать полностью »
Ребусы в коде, и как их расшифровать. Тайная сила идентификаторов
2018-08-06 в 6:38, admin, рубрики: выразительные средства кода, длина функции, идентификаторы, метод ребуса, намерение и реализация, понятный код, Программирование, Проектирование и рефакторинг, ребусы, Совершенный код, хорошая прозаЧистый код читается, как хорошо написанная проза.
Грэди Буч в книге «Чистый код»
Ребус как код

Что такое ребус? Это зашифрованное послание. Автор ребуса берёт обычный человеческий текст и кодирует его при помощи рисунков, чисел и букв. А мы разглядываем такую шифровку и пытаемся прочесть исходный текст.
У ребуса есть две ипостаси. С одной стороны ребус — это исходный незашифрованный текст, а с другой — шифрорисунки. Текст — это «что» ребуса, его смысл, сообщение. Рисунки — это «как»: как именно зашифровано сообщение, с помощью каких средств. Отгадывая ребус, мы переводим «как» в «что».
Читать полностью »
Оркестрируемая сага или как построить бизнес-транзакции в сервисах с паттерном database per service
2018-08-02 в 11:09, admin, рубрики: distributed systems, distributed transactions, Microservices, postgresql, saga, Анализ и проектирование систем, Блог компании Avito, Проектирование и рефакторингПривет! Меня зовут Константин Евтеев, я работаю в Авито руководителем юнита DBA. Наша команда развивает системы хранения данных Авито, помогает в выборе или выдаче баз данных и сопутствующей инфраструктуры, поддерживает Service Level Objective для серверов баз данных, а еще мы отвечаем за эффективность использования ресурсов и мониторинг, консультируем по проектированию, а возможно и разрабатываем микросервисы, сильно завязанные на системы хранения, или сервисы для развития платформы в контексте хранилищ.
Я хочу рассказать, как мы решили один из вызовов микросервисной архитектуры — проведение бизнес-транзакций в инфраструктуре сервисов, построенных с помощью паттерна Database per service. С докладом на эту тему я выступал на конференции Highload++ Siberia 2018.
По дороге к 100% покрытия кода тестами в Go на примере sql-dumper
2018-07-29 в 13:09, admin, рубрики: code coverage, Go, покрытие кода, Программирование, Проектирование и рефакторинг, тестирование, Тестирование IT-систем
В этом посте я расскажу о том, как я писал консольную программу на языке Go для выгрузки данных из БД в файлы, стремясь покрыть весь код тестами на 100%. Начну с описания, зачем мне нужна была это программа. Продолжу описанием первых трудностей, некоторые из которых вызваны особенностями языка Go. Дальше немного упомяну сборку на Travis CI, а затем расскажу о том, как я писал тесты, пытаясь покрыть код на 100%. Немного затрону тестирование работы с БД и файловой системой. А в заключении скажу о том, к чему приводит стремление максимально покрыть код тестами и о чём говорит этот показатель. Материал я сопровожу ссылками как на документацию, так и на примеры коммитов из своего проекта.
Руководство по Java 9 для тех, кому приходится работать с legacy-кодом
2018-07-20 в 15:05, admin, рубрики: java, java 9, Jigsaw, legacy, Блог компании Издательский дом «Питер», книги, контроль версий, ооп, Программирование, Проектирование и рефакторингДобрый вечер, коллеги. Ровно месяц назад мы получили контракт на перевод книги "Modern Java" от издательства Manning, которая должна стать одной из наших самых заметных новинок в будущем году. Проблема «Modern» и «Legacy» в Java настолько остра, что необходимость такой книги довольно назрела. Масштабы бедствия и способы решения возникающих проблем в Java 9 кратко описаны в статье Уэйна Ситрина (Wayne Citrin), перевод которой мы и хотим вам сегодня предложить.
Читать полностью »


