Pull to refresh

Паттерн — Вылить воду из чайника

Reading time 2 min
Views 3.1K
Lumber room
как программист кипятит воду в чайнике?
1. Набирает воду в чайник
2. Ставит чайник на огонь
3. Ждет пока тот не вскипит

как программист кипятит воду в чайнике если в нем уже есть вода?
1. Выливает воду из чайника что сводит задачу к уже решенной
(старый анекдот)

практическое применение
Total votes 21: ↑14 and ↓7 +7
Comments 16

Прогноз рынка по статистике запросов Google Domestic Trends

Reading time 1 min
Views 2.4K
Finance in IT
Год назад учёные из Google произвели революцию в эпидемиологии, когда определили паттерн поисковых запросов, который характерен для инфицированного гриппом человека (научная работа в PDF). Соответственно, путём анализа всего объёма поисковых запросов оказалось возможным с высокой точностью предсказывать эпидемию гриппа примерно за две недели до её начала. Так появился сервис Google Flu Trends.

В научно-исследовательских лабораториях Google решили не останавливаться на достигнутом. Если мы можем предсказать эпидемию гриппа по поисковым запросам, то предсказать движение фондовых индексов вообще легко, решили они, написали ещё одну научную работу (PDF) и запустили на сайте Google Finance новую фичу Google Domestic Trends, предназначенную специально для инвесторов.

Идея в том, что поисковые запросы являются опережающим индикатором для фондового рынка, также как они являются опережающим индикатором для эпидемии гриппа. Эти явления (сильное движение рынка и вирусная эпидемия) вообще похожи друг на друга по многим признакам.

В Google Domestic Trends используется похожий принцип для анализа состояния того или иного экономического сектора. Для каждого сектора выявляется набор характерных ключевых слов, а потом строится график по количеству поисковых запросов. Мы сразу видим, как меняется интерес публики к этому сектору, и можем сделать предположения, как изменится в связи с этим спрос на соответствующие акции.
Total votes 32: ↑30 and ↓2 +28
Comments 14

Memcached. Как найти ключи по паттерну?

Reading time 6 min
Views 9.1K
Website development *
Доброе утро|день|вечер|ночь, %username%!

При использовании Memcached, иногда могут возникнуть вопросы: «А как посмотреть все ключи Memcached?» или «Как найти все ключи по маске „*“ или „sql_*“ ?»
Вот тогда открываются мануалы и начинается поиск такой функции, но, к сожалению, такой не оказывается :-(
Потом начинается Гугление… И там особо ничего нет :-(
А потом начинается поиск незадокументированных возможностей :-) и тут «Ура! Нашел!»

Читать дальше →
Total votes 61: ↑39 and ↓22 +17
Comments 44

Многопоточный Observer на С++ (практика)

Reading time 12 min
Views 7.4K
C++ *
Sandbox
Есть много вариаций на тему данного паттерна, но большинство примеров не подходит для многопоточных приложений.
В этой статье я хочу поделится опытом применения паттерна в многопоточных приложениях и опишу основные проблемы, с которыми мне приходилось сталкиваться.
Цель данной стати — обратить внимание разработчиков на проблемы, с которыми можно столкнуться при создании многопоточных приложений. Выявить подводные камни в реализации коммуникации между компонентами в многопоточном приложении.
Если Вам необходимо готовое решение, обратите внимание на библиотеку Signals2, котрая включена в boost с мая 2009-го года.
Я не пытаюсь предоставить решение, которое можно было бы использовать в готовом виде. Но тем не менее, ознакомившись с материалом, можно обойтись без использования сторонних библиотек, в тех проектах, в которых они по каким-либо причинам не доступны или нежелательны (драйвера, низкоуровневые приложения и т.п.).
Читать дальше →
Total votes 43: ↑43 and ↓0 +43
Comments 16

Ставим объекты на поток, паттерн фабрика объектов

Reading time 12 min
Views 82K
Programming *C++ *
Sandbox
Доброго времени суток, читатель. Я хочу поделится с тобой знаниями об одном из наиболее часто используемых мною паттернов — фабрики объектов, для данного паттерна так же подходит другое название — виртуальный конструктор.

Что представляет из себя этот паттерн?

Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.

Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.

Читать дальше →
Total votes 51: ↑45 and ↓6 +39
Comments 25

Паттерны JavaScript модулей в Impress для node.js и браузеров

Reading time 4 min
Views 8.2K
Website development *JavaScript *Node.JS *
У меня сложилось впечатление, что в обществе все же есть предубеждение против использования глобальных переменных в служебных целях. В связи с этим, хочу дать некоторые разъяснения с примерами, которые снимут всякие сомнения и будут полезны всем, кто жаждет модульности и гибкости в JavaScript разработке. Я не могу проследить источники всех идей, приведенных ниже, но я не претендую на их авторство, а лишь на творческое обобщение. Так же я отказываюсь от претензий на один универсальных паттерн определения модулей для всех случаев жизни, надеюсь, всем ясно, что такого не может быть никогда. Все это существенно отличается от подходов RequireJS, CommonJS и того, как модули оформляются в node.js через module.exports, однако, каждый из этих паттернов имеет свое место, если подходить к задаче без фанатизма и предубеждений.
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Comments 6

Tell-Don’t-Ask

Reading time 2 min
Views 15K
Programming *ООP *
Tutorial
Translation
Tell-Don’t-Ask является принципом, который помогает вспомнить, что объектно-ориентированное программирование предназначено для связки данных и функций для их обработки. Он напоминает нам, что вместо того, чтобы спрашивать данные у объекта, мы должны сказать объекту что с ними делать. Для этого все поведение объекта надо заключить в его методы.
image
Читать дальше →
Total votes 11: ↑8 and ↓3 +5
Comments 10

MVVM Framework для Windows Phone своими руками. Часть 1

Reading time 11 min
Views 13K
.NET *Development for Windows Phone *C# *
Tutorial
Разработка приложений для платформ WPF, Silverlight, Windows Store и Windows Phone, почти всегда подразумевает использование паттерна MVVM. Это закономерно, так как базовой философией этих платформ, является разделение представления (так же я буду использовать термин интерфейс пользователя) и остальной логики программы. Этот подход позволяет получить следующие преимущества:

  1. Разделение пользовательского интерфейса и логики представления: что позволяет дизайнерам работать над пользовательским интерфейсом, а программистам над бизнес логикой приложения используя для взаимодействия абстрактный интерфейс модели представления
  2. Расширенные возможности автоматизированного тестирования: отделение пользовательского интерфейса от остальной логики, позволяет полностью протестировать логику представления без ограничений накладываемых автоматизацией тестирования через пользовательский интерфейс
  3. Множественные представления для одной модели представления: одна модель представления может использоваться многими реализациями интерфейса пользователя. Например, сокращенный и полный вариант представления данных, интерфейс зависящий от прав пользователя. Возможность использовать одну реализацию модели представления на различных платформах
  4. Расширенные возможности повторного использования компонентов: так как модели представления отделены от реализации представления, возможны любые варианты их использования, наследование от базовых моделей, композиция нескольких моделей и т.п.


Разрабатывая приложения под платформу Windows Phone, я столкнулся с тем, что большинство статей описывают базовую реализацию паттерна MVVM, которая обычно сводится к реализации в классе модели представления интерфейса INotifyPropertyChanged, создания простой реализации ICommand и простые сценарии связывания этих данных с представлением. К сожалению, остаются за рамками обсуждения такие важные вопросы как, реализация обобщенных классов с удобным интерфейсом, синхронизация потоков при асинхронном исполнении, навигация на уровне модели представления и многие другие.

Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 41

Стратегия (Перевод с английского главы «Strategy» из книги «Pro Objective-C Design Patterns for iOS» Carlo Chung)

Reading time 13 min
Views 17K
Development for iOS *Objective C *
Помните ли вы, когда вы в последний раз начиняли блок кода множеством разных алгоритмов и использовали спагетти из условий if-else / switch-case, чтобы определить, какой именно из них использовать. Алгоритмы могли представлять собой набор функций/методов похожих классов, которые решают схожие проблемы. К примеру, у вас есть процедура для проверки входных данных. Сами данные могут быть любых типов (например, CGFloat, NSString, NSInteger и прочее). Каждый из типов данных требует различных алгоритмов проверки. Если бы вы могли инкапсулировать каждый алгоритм в виде объекта, то можно было бы не использовать группу операторов if-else / switch-case для проверки данных и определения, какой из алгоритмов нужен.

Читать дальше →
Total votes 17: ↑12 and ↓5 +7
Comments 7

Шаблонная фабрика объектов (ещё раз, и в пятнадцать строк)

Reading time 7 min
Views 18K
Programming *C++ *
Tutorial
image

Привет!

Я очень новичок в C++, программирую в общем исключительно ради своего удовольствия (причём иногда для несколько экзотичных платформ), не читал теоретических книжек, в процессе написания активно использую гугл, Stack Overflow и интуицию, а ещё придерживаюсь мнения, что C++ знать невозможно.

Надеюсь, это снимет некоторые вопросы и предотвратит удивлённые взгляды. :)
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Comments 3

Краткая заметка про наследование в Node.js

Reading time 7 min
Views 22K
JavaScript *Node.JS *ООP *
В JavaScript существует множество разных способов наследования, классового и прототипного, фабричного и через примеси, прямого и непрямого, а так же гибриды нескольких методов. Но у Node.js есть его родной способ с применением util.inherits(ChildClass, ParentClass). До недавнего времени я использовал нодовский способ только для встроенных классов (когда нужно сделать своего наследника для EventEmitter, Readable/Writable Stream, Domain, Buffer и т.д.), а для моделирования предметной области применял общеупотребительные для всего JavaScript практики. И вот, впервые, понадобилось реализовать собственную иерархию системных классов, не наследников от встроенных, но и не классов предметной области, а классов, массово поражаемых в системном коде сервера приложений Impress. И простого использования util.inherits уже как-то не хватило, поискал я статьи и не найдя полностью всего, что мне нужно, изучил примеры наследования в исходниках самой ноды, подумал и сделал пример родного нодовского наследования себе на память и написал эту небольшую заметку, чтобы она, надеюсь, помогла еще и вам. Сразу предупреждаю, что реализация вызова метода родительского класса из переопределенного в дочернем классе метода, мне не очень нравится из-за громоздкости, поэтому, приветствую альтернативные способы и приглашаю коммитить их в репозиторий или в комментарии к этой заметке.

Читать дальше →
Total votes 17: ↑10 and ↓7 +3
Comments 66

Элегантные паттерны современного JavaScript: RORO

Reading time 9 min
Views 22K
RUVDS.com corporate blog Website development *JavaScript *
Translation
Автор материала, перевод которого мы публикуем сегодня, Билл Соро, говорит, что написал первые строки кода на JavaScript вскоре после появления этого языка. По его словам, если тогда ему сказали бы, что однажды он выпустит серию статей об элегантных шаблонах проектирования в JavaScript, он умер бы со смеху. Тогда он воспринимал JS как странный маленький язык, писанину на котором можно было с большой натяжкой называть «программированием».

Но за 20 лет многое изменилось. Теперь Билл воспринимает JavaScript таким, каким видел его Дуглас Крокфорд, когда работал над книгой «JavaScript. Сильные стороны»: красивым, элегантным и выразительным динамическим языком программирования.



В этой статье Билл хочет рассказать о замечательном маленьком паттерне, которым он уже какое-то время с удовольствием пользуется. Он надеется, что этот шаблон проектирования пригодится и другим программистам. Билл говорит, что не считает себя первооткрывателем этого паттерна, скорее, речь идёт о том, что он увидел нечто подобное в чьём-то коде, а потом адаптировал это под свои нужды.
Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Comments 13

Элегантные паттерны современного JavaScript: Ice Factory

Reading time 8 min
Views 32K
RUVDS.com corporate blog Website development *JavaScript *
Translation
Предлагаем вашему вниманию перевод очередного материала Билла Соро, который посвящён шаблонам проектирования в JavaScript. В прошлый раз мы рассказывали о паттерне RORO, а сегодня нашей темой будет шаблон Ice Factory. Если в двух словах, то этот шаблон представляет собой функцию, которая возвращает «замороженный» объект. Это — очень важный и мощный паттерн, и разговор о нём мы начнём с описания одной из проблем JS, на решение которой он направлен.

image
Читать дальше →
Total votes 31: ↑25 and ↓6 +19
Comments 8

CRTP: Пример на паттерне «Мост»

Reading time 5 min
Views 8.6K
C++ *
Sandbox

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

Читать далее
Total votes 9: ↑8 and ↓1 +7
Comments 29

“Связность” кода на примере генератора ASCII графиков, утилита для операций с интервалами и demo на Blazor WebAssembly

Reading time 13 min
Views 2.5K
Abnormal programming *Programming *.NET *C# *

Работа с периодами может быть запутанной. Представьте, что у вас бухгалтерское приложение. И вам нужно получить периоды, когда сотрудник работал по графику “2 через 2” до индексации зарплаты. При этом нужно учитывать отпуска, смены графиков работы, увольнения/восстановления, переходы в другие отделы и прочие кадровые мероприятия. Эта информация хранится в виде приказов, у которых есть “Дата начала действия” и “Дата конца”, т.е. у вас есть периоды времени, с которыми нужно производить операции.

Например найти пересечение всех интервалов:

Читать далее
Total votes 8: ↑7 and ↓1 +6
Comments 2

Люди, машины, программисты

Reading time 10 min
Views 3.6K
Programming *.NET *Designing and refactoring *

Если Вам нравится программировать - Вы наверняка помните то прекрасное детское кодирование - времен кружка  программирования в школе или первых курсов университета - как в консоль Вы вбиваете одному Вам ведомый набор цифр (через пробел), жмете “ввод” и получаете другой набор цифр. И чувство чистого инженерно-технического экстаза, от того, что Вы заставили машину отсортировать массив или найти путь на графе. Ведь клевое было ощущение? Да, перед этим программа много раз падала и выдавала не то, что нужно, но само по себе программирование было больше похоже на решение интересной головоломки. Как давно Вы испытывали похожее чувство во взрослой жизни, программируя очередную CMS, CRM и ERP или еще какую-нибудь аббревиатуру? Возню в тоннах запутанного кода интересной головоломкой назвать сложно. Возможно, у меня есть идея, как вернуть то чувство. Приглашаю, чтение на 10 минут - зашли и вышли!

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 1

«Выстрелить и забыть» в Cats Effect

Reading time 6 min
Views 1.8K
OTUS corporate blog Programming *Scala *
Translation

Последнее время меня часто спрашивают о паттерне "fire-and-forget": как его применить в Cats Effect и какие потенциальные проблемы могут возникнуть. Поэтому я решил написать небольшой пост. Надеюсь, вам понравится!

Подробнее о Cats Effect и конкурентности читайте в моей книге Essential Effects.

Читать далее
Total votes 4: ↑3 and ↓1 +2
Comments 0

Сказка про антипаттерны: как мужики град стольный строили

Reading time 11 min
Views 7K
System Analysis and Design *Designing and refactoring *Project management *Product Management *IT career

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

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

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

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

Приятного чтения!

Читать далее
Total votes 18: ↑15 and ↓3 +12
Comments 5

Обзор паттернов интеграции микросервисов. Часть 2

Reading time 5 min
Views 11K
Southbridge corporate blog System Programming *IT Infrastructure *Microservices *

Продолжаем обзор паттернов интеграции микросервисов. В первой части мы рассказали, зачем IT-специалистам нужны шаблоны интеграции, и для каких задач они подходят. Подробно остановилисьна Circuit Breaker, Sidecar, Ambassador, Anti-Corruption Layer и Async Request-Reply. Сегодня по плануразобрать Backends for Frontends, Cache-Aside, Gateway, Gateway Aggregation и Gateway Routing. 

Читать далее
Total votes 19: ↑17 and ↓2 +15
Comments 1