Передача указателя на набор полей примитивных типов, расположенных в определённом порядке, - широко используемый паттерн. Так передаются указатели на структуры и объекты, массивы, файловые и сетевые буферы, данные в общей памяти и специальные типы (к примеру, массивы виртуальных функций), а отладчик, получив указатель на стек, может просматривать значения содержащихся в нём переменных.
Рубрика «шаблоны»
С++ Concept-Based Polymorphism в продуктовом коде: PassManager в LLVM
2020-06-08 в 13:16, admin, рубрики: c++, LLVM, Блог компании Samsung, идиомы с++, Компиляторы, наследование, ооп, паттерны проектирования, полиморфизм, шаблоныСегодня речь пойдет про одну интересную идиому, которую ввел Шон Парент (Adobe) — известный деятель в C++-сообществе. Он часто выступает с докладами и публикует цикл статей Better Code. Одна из его идей, которую используют в Photoshop — это Concept-Based Polymorphism. Это когда мы реализуем полиморфизм не через явное наследование, а с помощью техники, включающей обобщенное программирование, и по итогам получаем некоторые дополнительные преимущества.
Статья устроена следующим образом:
- Что вообще такое Concept-Based Polymorphism и зачем он нужен
- Немного про LLVM и ее устройство
- Пример Concept-Based Polymorphism в LLVM PassManager
- Преимущества подхода
Картинка, иллюстрирующая тезис «Наследование — это зло». Источник
Читать полностью »
Краеугольные камни уничтожения медленного кода в Wolfram Language: ускоряем код в десятки, сотни и тысячи раз
2019-11-08 в 15:01, admin, рубрики: CUDA, opencl, Wolfram, wolfram language, wolfram mathematica, абсолютная точность, Алгоритмы, ассоциативные массивы, Блог компании Wolfram Research, векторизация, вычисления, дебаг, компиляция, компиляция в c, машинная точность, мемоизация, оптимизация кода, отладка, плавающая запятая, правила замены, Программирование, распараллеливание, символьные вычисления, списки, точность, ускорение кода, функциональное программирование, хеш-таблицы, хэширование, шаблоныСкачать файл с кодом и данные можно в оригинале поста в моем блоге
Картинка к вебинару и посту взята не просто так: в определенном смысле символьное ядро Wolfram Language можно сравнить с Таносом — если бы его мощь была бы направлена в правильное русло, он мог бы стать самым мощным и полезным «добряком». Так же и с символьным ядром Wolfram — его чудовищную мощь нужно правильно использовать, а если это делать не так, оно может стать настоящим «злом», замедляющим все очень сильно. Начинающие разработчики не знают многих важнейших парадигм, идей и принципов языка Wolfram Language, пишут код, который на самом деле дико неэффективен и после этого разочаровываются, хотя тут нет вины Wolfram Language. Эту ситуацию призвана исправить эта статья.
Мне довелось работать с Wolfram Language начиная с (уже довольно далекого) 2005 года (тогда еще была версия Mathematica 5.2, сейчас уже 12-я). За эти почти 15 лет произошло очень много: добавились тысячи новых встроенных функций и областей, в которых они работают (машинное обучение, точная геометрия, работа с аудио, работа в вебе, облачные возможности, глубокая поддержка единиц измерения, интеграция с базами данных Wolfram|Alpha, географические вычисления, поддержка работы с CUDA, Python, распараллеливание операций и многое многое другое), появились новые сервисы — облако Wolfram Cloud, широко известная система вычислительных значeний Wolfram|Alpha, репозиторий функций, репозиторий нейросетей и пр.
Читать полностью »
Единая масштабируемая система вознаграждений: наш опыт
2018-04-24 в 11:10, admin, рубрики: биллинговая система, биллинговые системы, Блог компании EastBanc Technologies, конструктор, лояльность, система лояльности, Управление продажами, шаблоныАвиакомпания продает билеты через сеть собственных и независимых агентов и партнеров, сотрудничает со всеми участниками рынка: агенты, тревел-порталы, туристические операторы. Клиентами являются как индивидуальные путешественники, так и корпоративные клиенты. Для стимулирования продаж у авиакомпании есть несколько систем вознаграждений и программ лояльности для агентов и клиентов. Появлялись они в разное время, инициированы разными департаментами авиакомпании и учет по каждой программе ведется независимый.
Как следствие, получить сводную картину по затратам и эффективности всех систем лояльности было довольно проблематично, т.к. это делалось в ручном режиме.
Введение же единых метрик и правил учета позволило не только этот процесс автоматизировать и получить аналитику в режиме реального времени, но и планировать развитие отдельных инструментов лояльности с учетом эффективности системы в целом.
Мы разработали конструктор условий вознаграждений, по сути биллинговую систему, которая позволяет сконфигурировать любое условие для каждой из программ и просчитать общую экономику систем лояльности на основе архивных данных о продажах (или оказанных услугах) за прошлые периоды.
Читать полностью »
Руководство по созданию расширений для Jinja2
2017-10-19 в 9:56, admin, рубрики: flask, jinja, jinja2, python, если тебя заставляют читать теги, мигни, Программирование, расширения, шаблоныJinja2 — Python-библиотека для рендеринга шаблонов, являющаяся де-факто стандартом при написании веб-приложений на Flask и довольно популярной альтернативой встроенной системе шаблонов Django. Хотя и будучи сильно привязана к языку, Jinja2 позиционирует себя как инструмент для дизайнеров и верстальщиков, упрощающий вёрстку и отделяющий её от разработки, и пытающийся по мере возможностей изолировать не-разработчиков от Python. Вёрстка, впрочем, не единственное возможное её применение; например, в своей работе я использую шаблоны Jinja2 для генерации SQL-запросов.
Jinja2 расширяема, и многие возможности (например, интернационализация и управление циклами) реализованы именно как расширения. Однако, документация по написанию расширений, как мне кажется, несколько неполна; от примера несложного (но тщательно прокомментированного) расширения она перескакивает сразу к описанию API некоторых классов Jinja2, которое довольно трудно читать подряд. В этой статье я попытаюсь исправить это упущение и создать в голове читателя полную и ясную картину того, как работает Jinja2, как устроены её расширения и как с помощью расширений модифицировать разные этапы обработки шаблонов.
Читать полностью »
Универсальный адаптер
2017-10-17 в 11:06, admin, рубрики: c++, асинхронность, ленивость, макросы, ненормальное программирование, С++14, шаблоныПредисловие
Данная статья является авторским переводом с английского собственной статьи под названием God Adapter. Вы также можете посмотреть видео выступления с конференции C++ Russia.
1 Аннотация
В статье представлен специальный адаптер, который позволяет оборачивать любой объект в другой с дополнением необходимой функциональности. Адаптированные объекты имеют один и тот же интерфейс, поэтому они полностью прозрачны с точки зрения использования. Будет последовательно введена общая концепция, использующая простые, но мощные и интересные примеры.
2 Введение
ПРЕДУПРЕЖДЕНИЕ. Почти все методы, указанные в статье, содержат грязные хаки и ненормальное использование языка C++. Так что, если вы не толерантны к таким извращениям, пожалуйста, не читайте эту статью.
Термин универсальный адаптер происходит от возможности универсальным образом добавить необходимое поведение для любого объекта.Читать полностью »
Тёмные паттерны — как зловредные интерфейсы пытаются атаковать и обманывать
2017-06-13 в 13:44, admin, рубрики: dark pattern, UX, Блог компании Мосигра, интерфейсы, темные паттерны, шаблоны, метки: dark pattern, тёмные паттерныЛюбые покупки — как поход по минному полю. Есть довольно тонкая граница между «не стоит упоминания» и «лучше тебе этого до покупки не знать». Давайте попробуем для начала найти её эмпирически. Вот это лично для меня — очевидный “dark pattern”:
Вот это тоже:
И смущает меня здесь даже не заголовок пункта про отсутствие страховки, а по умолчанию выбранный первый пункт. При том, что при их основной логике сортировки по повышению цены первым должен идти немного другой — вообще бесплатный. Более того, меня смущает, что это предлагается как пакет, а не как отказ от страховки.
Теперь давайте посмотрим на менее очевидные вещи.
Читать полностью »
Создание пользовательских шаблонов автонастройки IP телефонов в 3CX V15
2017-05-05 в 10:49, admin, рубрики: 3cx, autoprovisioning, yealink, автонастройка, Блог компании 3CX Ltd., пользовательские шаблоны, Серверное администрирование, Сетевые технологии, системное администрирование, шаблоныВ этой статье мы рассмотрим весьма полезную технологию – пользовательские шаблоны IP телефонов 3CX. Шаблоны автонастройки 3CX позволяют автоматически единообразно настроить большой парк IP телефонов в организации. Однако 3CX поставляется с готовыми шаблонами, настроенными разработчиками 3CX таким образом, чтобы они подходили большинству потребителей. Если у вашей организации есть какие-либо особые требования к конфигурации IP телефонов, например, собственная “раскладка” программируемых кнопок под дисплеем телефона, конфигурация мелодий вызова, специфические параметры SIP и т.п. – модифицируйте стоковый шаблон под ваши нужды. Как это сделать, описано ниже.
Начало работы
Прежде всего, сделайте копию стокового шаблона 3CX. И уже с копией продолжайте работу.