как программист кипятит воду в чайнике? 1. Набирает воду в чайник 2. Ставит чайник на огонь 3. Ждет пока тот не вскипит как программист кипятит воду в чайнике если в нем уже есть вода? 1. Выливает воду из чайника что сводит задачу к уже решенной (старый анекдот)
Прогноз рынка по статистике запросов Google Domestic Trends
В научно-исследовательских лабораториях Google решили не останавливаться на достигнутом. Если мы можем предсказать эпидемию гриппа по поисковым запросам, то предсказать движение фондовых индексов вообще легко, решили они, написали ещё одну научную работу (PDF) и запустили на сайте Google Finance новую фичу Google Domestic Trends, предназначенную специально для инвесторов.
Идея в том, что поисковые запросы являются опережающим индикатором для фондового рынка, также как они являются опережающим индикатором для эпидемии гриппа. Эти явления (сильное движение рынка и вирусная эпидемия) вообще похожи друг на друга по многим признакам.
В Google Domestic Trends используется похожий принцип для анализа состояния того или иного экономического сектора. Для каждого сектора выявляется набор характерных ключевых слов, а потом строится график по количеству поисковых запросов. Мы сразу видим, как меняется интерес публики к этому сектору, и можем сделать предположения, как изменится в связи с этим спрос на соответствующие акции.
Memcached. Как найти ключи по паттерну?
При использовании Memcached, иногда могут возникнуть вопросы: «А как посмотреть все ключи Memcached?» или «Как найти все ключи по маске „*“ или „sql_*“ ?»
Вот тогда открываются мануалы и начинается поиск такой функции, но, к сожалению, такой не оказывается :-(
Потом начинается Гугление… И там особо ничего нет :-(
А потом начинается поиск незадокументированных возможностей :-) и тут «Ура! Нашел!»
Многопоточный Observer на С++ (практика)
В этой статье я хочу поделится опытом применения паттерна в многопоточных приложениях и опишу основные проблемы, с которыми мне приходилось сталкиваться.
Цель данной стати — обратить внимание разработчиков на проблемы, с которыми можно столкнуться при создании многопоточных приложений. Выявить подводные камни в реализации коммуникации между компонентами в многопоточном приложении.
Если Вам необходимо готовое решение, обратите внимание на библиотеку Signals2, котрая включена в boost с мая 2009-го года.
Я не пытаюсь предоставить решение, которое можно было бы использовать в готовом виде. Но тем не менее, ознакомившись с материалом, можно обойтись без использования сторонних библиотек, в тех проектах, в которых они по каким-либо причинам не доступны или нежелательны (драйвера, низкоуровневые приложения и т.п.).
Ставим объекты на поток, паттерн фабрика объектов
Что представляет из себя этот паттерн?
Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.
Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.
Паттерны JavaScript модулей в Impress для node.js и браузеров

Tell-Don’t-Ask

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

- Разделение пользовательского интерфейса и логики представления: что позволяет дизайнерам работать над пользовательским интерфейсом, а программистам над бизнес логикой приложения используя для взаимодействия абстрактный интерфейс модели представления
- Расширенные возможности автоматизированного тестирования: отделение пользовательского интерфейса от остальной логики, позволяет полностью протестировать логику представления без ограничений накладываемых автоматизацией тестирования через пользовательский интерфейс
- Множественные представления для одной модели представления: одна модель представления может использоваться многими реализациями интерфейса пользователя. Например, сокращенный и полный вариант представления данных, интерфейс зависящий от прав пользователя. Возможность использовать одну реализацию модели представления на различных платформах
- Расширенные возможности повторного использования компонентов: так как модели представления отделены от реализации представления, возможны любые варианты их использования, наследование от базовых моделей, композиция нескольких моделей и т.п.
Разрабатывая приложения под платформу Windows Phone, я столкнулся с тем, что большинство статей описывают базовую реализацию паттерна MVVM, которая обычно сводится к реализации в классе модели представления интерфейса INotifyPropertyChanged, создания простой реализации ICommand и простые сценарии связывания этих данных с представлением. К сожалению, остаются за рамками обсуждения такие важные вопросы как, реализация обобщенных классов с удобным интерфейсом, синхронизация потоков при асинхронном исполнении, навигация на уровне модели представления и многие другие.
Стратегия (Перевод с английского главы «Strategy» из книги «Pro Objective-C Design Patterns for iOS» Carlo Chung)
CGFloat
, NSString
, NSInteger
и прочее). Каждый из типов данных требует различных алгоритмов проверки. Если бы вы могли инкапсулировать каждый алгоритм в виде объекта, то можно было бы не использовать группу операторов if-else / switch-case для проверки данных и определения, какой из алгоритмов нужен.Шаблонная фабрика объектов (ещё раз, и в пятнадцать строк)

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

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

В этой статье Билл хочет рассказать о замечательном маленьком паттерне, которым он уже какое-то время с удовольствием пользуется. Он надеется, что этот шаблон проектирования пригодится и другим программистам. Билл говорит, что не считает себя первооткрывателем этого паттерна, скорее, речь идёт о том, что он увидел нечто подобное в чьём-то коде, а потом адаптировал это под свои нужды.
Элегантные паттерны современного JavaScript: Ice Factory

CRTP: Пример на паттерне «Мост»
CRTP - сложный снаружи, простой внутри паттерн, позволяющий заменить механику абстрактных классов и переопределения поведения функций на другой способ предоставления интерфейса.
“Связность” кода на примере генератора ASCII графиков, утилита для операций с интервалами и demo на Blazor WebAssembly

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

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

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

Всем привет! В своей работе архитектору всегда важно не только постоянно использовать и определять лучшие практики, но и знать то, как делать не нужно, то есть антипаттерны.
Под Новый Год мне захотелось немного созорничать, и я решил написать легкий текст-сказку про не самые правильные практики и их последствия. Конечно, мне бы хотелось сказать, что все ситуации выдуманные, но, увы, часть из них основана на личном опыте или опыте своих друзей. Думаю, вы тоже сможете увидеть ситуации, с которыми сами сталкивались в работе.
Я постарался образно описать антипаттерны из разных дисциплин: не только из ИТ-архитектуры, но и из разработки, а также проектного или продуктового управления, ведь архитектор часто сталкивается с этими дисциплинами. Посмотрим, сколько антипаттернов вам удастся найти – в конце сказки я приведу ряд примеров, которые точно присутствуют в тексте :)
Любые совпадения случайны, автор и в мыслях не хотел кого-то задеть или обидеть.
Приятного чтения!
Обзор паттернов интеграции микросервисов. Часть 2

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