Обновить
0
0
Владимир Савин@WowaBBS

Пользователь

Отправить сообщение

Элементы функционального программирования в C++: частичное применение

Время на прочтение8 мин
Охват и читатели15K

Не буду сильно углубляться в теорию. Что такое частичное применение легко найти в интернете. В том числе на Википедии.


Если кратко, то это механизм, позволяющий зафиксировать k аргументов функции от n аргументов, сделав из неё функцию от (n - k) аргументов.


// Пусть имеется функция f от четырёх аргументов:
int f (int a, int b, int c, int d)
{
    return a + b + c + d;
}

// Фиксируем первые два аргумента:
auto g = part(f, 1, 2); // 1 + 2 + ...

// Добрасываем оставшиеся два:
assert(g(3, 4) == 10); // ... + 3 + 4 = 10

На эту тему уже существует масса публикаций, в том числе и на Хабре:


  1. C++ Variadic templates. Каррирование и частичное применение
  2. Частичное применение и каррирование в C++
  3. Каррируем на C++

А ветка "How should I make function curry?" на stackoverflow — просто кладезь для тех, кто впервые сталкивается с этой темой.


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


Замечательный факт №1. В упомянутых статьях присутствуют все техники, которые нужны для реализации правильного (по моему мнению) частичного применения.


Надо только всё внимательно проанализировать и сложить кубики в правильном порядке. Именно этим я и собираюсь заняться в данной статье.

Читать дальше →

learnopengl. Урок 1.5 — Shaders

Время на прочтение14 мин
Охват и читатели155K

Мы уже упоминали шейдеры в предыдущем уроке. Шейдеры — это небольшие программы выполняемые на графическом ускорителе (далее будем использовать более распространенное название — GPU). Эти программы выполняются для каждого конкретного участка графического конвейера. Если описывать шейдеры наиболее простым способом, то шейдеры — это не более чем программы преобразующие входы в выходы. Шейдеры обычно изолированы друг от друга, и не имеют механизмов коммуникации между собой кроме упомянутых выше входов и выходов.


В предыдущем уроке мы кратко коснулись темы “поверхностных шейдеров” и того, как их использовать. В данном уроке мы рассмотрим шейдеры подробнее и в частности шейдерный язык OpenGL (OpenGL Shading Language).

SFINAE — это просто

Время на прочтение7 мин
Охват и читатели116K
TLDR: как определять, есть ли в типе метод с данным именем и сигнатурой, а также узнавать другие свойства типов, не сойдя при этом с ума.
image

Здравствуйте, коллеги.
Хочу рассказать о SFINAE, интересном и очень полезном (к сожалению*) механизме языка C++, который, однако, может представляться неподготовленному человеку весьма мозгоразрывающим. В действительности принцип его использования достаточно прост и ясен, будучи сформулирован в виде нескольких чётких положений. Эта заметка рассчитана на читателей, обладающих базовыми знаниями о шаблонах в C++ и знакомых, хотя бы шапочно, с C++11.
* Почему к сожалению? Хотя использование SFINAE — интересный и красивый приём, переросший в широко используемую идиому языка, гораздо лучше было бы иметь средства, явно описывающие работу с типами.
Читать дальше →

Нейросеть научили сворачивать все открытые на экране окна при приближении начальника

Время на прочтение5 мин
Охват и читатели23K
image

Автоматизировать можно многое, хотя и не все. Но все же при помощи автоматизации можно значительно облегчить себе жизнь, сделав ее комфортнее и, в некоторых случаях, безопаснее. В смысле, обезопасить себя от начальства. Один из разработчиков нейросетей решил создать систему, которая при приближении начальника сразу же сворачивала «неподходящие окна», скрывая их с глаз долой.

Для пользователя действия системы выглядят вполне прозрачно, поскольку нейросеть после обнаружения приближающегося босса выдает соответствующее уведомление. И только потом сворачивает окна, выдавая еще одно предупреждение. Сама система занимается тем, что при помощи обычной веб-камеры хорошего качества фиксирует лица людей, приближающихся к рабочему столу, а при выявлении начальства быстро убирает все с экрана компьютера, от греха подальше. При разработке использована библиотека Keras, которая упростила задачу. Как все это работает?
Читать дальше →

Создание редактора квестов и диалогов для Unreal engine: Часть 1 описание плагина

Время на прочтение6 мин
Охват и читатели36K
image

Здравствуйте меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби.

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

Ambient Occlusion Volumes для прожженных самоваров

Время на прочтение7 мин
Охват и читатели14K
Скитаясь по интернету в поисках алгоритмом освещения, которые бы удовлетворили мои потребности, я наткнулся на весьма новый алгоритм, разработанный компанией NVIDIA, название которого AOV (Ambient Occlusion Volumes). Имея в своём распоряжении тёмные осенние ночи и несколько чашек горячего кофе, я решился изучить данный алгоритм, следствием чего является данная статья. Прежде чем я начну, хотелось бы отметить своё удивление по поводу того, что данный алгоритм имеет незаслуженно малую популярность в кругах разработчиков игр, в отличии от всеми знакомого нам SSAO. Содержание данной статьи будет, по большей мере, состоять из теории.
Читать дальше →

Zcash: первая по-настоящему анонимная криптовалюта

Время на прочтение5 мин
Охват и читатели48K

Официальный клиент Zcash работает только под Linux

28 октября 2016 года исполнительный директор компании Zcach Зуко Уилкокс (Zooko Wilcox-O’Hearn) провёл официальную «криптографическую церемонию» запуска новой криптовалюты Zcash — первой в мире криптовалюты, основанной на интерактивном криптографическом протоколе zero-knowledge proof (доказательство с нулевым разглашением). Принцип действия такого протокола предполагает, что одна из взаимодействующих сторон способна убедиться в достоверности математического утверждения, не имея при этом никакой другой информации от второй стороны. По сути, Zcash является первой по-настоящему анонимной валютой. Техническое описание протокола вполне могло бы стать темой кандидатской диссертации по криптографии.
Читать дальше →

Программирование&Музыка: Частотный фильтр Баттервота. Часть 3

Время на прочтение12 мин
Охват и читатели32K

Всем привет! Вы читаете третью часть статьи про создание VST-синтезатора на С#. В предыдущих частях был рассмотрен SDK и библиотеки для создания VST плагинов, рассмотрено программирование осциллятора и ADSR-огибающей для управления амплитудой сигнала.


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


Будет рассмотрен исходный код и применение эквалайзера из библиотеки NAudio (библиотека для работы со звуком под .NET).


Внимание — будет много матана — будем рассчитывать формулы для коэффициентов фильтра.


Исходный код написанного мною синтезатора доступен на GitHub'е.



Скриншот VST плагина-эквалайзера Fab Filter Pro Q


Читать дальше →

Сжатие мобильной графики в формат ETC1 и открытая утилита

Время на прочтение9 мин
Охват и читатели18K
При развитии free-to-play мобильной игры вместе с новыми фичами регулярно добавляется и новая графика. Часть ее включается в дистрибутив, часть скачивается в ходе игры. Для возможности запуска приложения на устройствах с небольшим размером оперативной памяти разработчики применяют аппаратно сжатые текстуры.



Формат ETC1 обязателен к поддержке на всех Android-устройствах с OpenGL ES 2.0 и является хорошей отправной точкой оптимизации потребляемой оперативной памяти. По сравнению с форматами PNG, JPEG, WebP загрузка текстур ETC1 осуществляется без интенсивных расчетов обычным копированием памяти. Также улучшается производительность игры по причине меньших размеров данных текстур пересылаемых из медленной памяти в быструю.
Читать дальше →

Юникод: необходимый практический минимум для каждого разработчика

Время на прочтение8 мин
Охват и читатели123K
Юникод — это очень большой и сложный мир, ведь стандарт позволяет ни много ни мало представлять и работать в компьютере со всеми основными письменностями мира. Некоторые системы письма существуют уже более тысячи лет, причём многие из них развивались почти независимо друг от друга в разных уголках мира. Люди так много всего придумали и оно зачастую настолько непохоже друг на друга, что объединить всё это в единый стандарт было крайне непростой и амбициозной задачей.

Чтобы по-настоящему разобраться с Юникодом нужно хотя бы поверхностно представлять себе особенности всех письменностей, с которыми позволяет работать стандарт. Но так ли это нужно каждому разработчику? Мы скажем, что нет. Для использования Юникода в большинстве повседневных задач, достаточно владеть разумным минимумом сведений, а дальше углубляться в стандарт по мере необходимости.

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

OpenGL ES 2.0. Отложенное освещение

Время на прочтение8 мин
Охват и читатели17K

В этой статье мы рассмотрим один из вариантов реализации отложенного освещения на OpenGL ES 2.0.


«Правда, чистая правда и статистика» или «15 распределений вероятности на все случаи жизни»

Время на прочтение15 мин
Охват и читатели311K
Статистика приходит к нам на помощь при решении многих задач, например: когда нет возможности построить детерминированную модель, когда слишком много факторов или когда нам необходимо оценить правдоподобие построенной модели с учётом имеющихся данных. Отношение к статистике неоднозначное. Есть мнение, что существует три вида лжи: ложь, наглая ложь и статистика. С другой стороны, многие «пользователи» статистики слишком ей верят, не понимая до конца, как она работает: применяя, например, тест Стьюдента к любым данным без проверки их нормальности. Такая небрежность способна порождать серьёзные ошибки и превращать «поклонников» теста Стьюдента в ненавистников статистики. Попробуем поставить точки над i и разобраться, какие модели случайных величин должны использоваться для описания тех или иных явлений и какая между ними существует генетическая связь.
Читать дальше →

Асинхронная (и не очень) загрузка данных в Unreal Engine 4

Время на прочтение8 мин
Охват и читатели27K


Содержание:



Всем привет!

Сегодня я расскажу о том, как обращаться с ассетами на Unreal Engine 4 так, чтобы не было мучительно больно за бесцельно занятую память и стоны игроков за время загрузки вашей игры.
Читать дальше →

Batch Normalization для ускорения обучения нейронных сетей

Время на прочтение5 мин
Охват и читатели82K

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


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


В какой-то момент, знакомясь с представленным в 2015 году методом Batch Normalization от компании Google мне, для решения задачи связанной с распознаванием лиц, удалось существенно улучшить скорость работы нейросети.



За подробностями прошу под кат.

Читать дальше →

Что такое свёрточная нейронная сеть

Время на прочтение13 мин
Охват и читатели277K


Введение


Свёрточные нейронные сети (СНС). Звучит как странное сочетание биологии и математики с примесью информатики, но как бы оно не звучало, эти сети — одни из самых влиятельных инноваций в области компьютерного зрения. Впервые нейронные сети привлекли всеобщее внимание в 2012 году, когда Алекс Крижевски благодаря им выиграл конкурс ImageNet (грубо говоря, это ежегодная олимпиада по машинному зрению), снизив рекорд ошибок классификации с 26% до 15%, что тогда стало прорывом. Сегодня глубинное обучения лежит в основе услуг многих компаний: Facebook использует нейронные сети для алгоритмов автоматического проставления тегов, Google — для поиска среди фотографий пользователя, Amazon — для генерации рекомендаций товаров, Pinterest — для персонализации домашней страницы пользователя, а Instagram — для поисковой инфраструктуры.


Но классический, и, возможно, самый популярный вариант использования сетей это обработка изображений. Давайте посмотрим, как СНС используются для классификации изображений.


Задача


Задача классификации изображений — это приём начального изображения и вывод его класса (кошка, собака и т.д.) или группы вероятных классов, которая лучше всего характеризует изображение. Для людей это один из первых навыков, который они начинают осваивать с рождения.


Читать дальше →

4 вида утечек памяти в JavaScript и как с ними бороться

Время на прочтение16 мин
Охват и читатели141K

В этой статье мы рассмотрим распространённые виды утечек памяти в клиентском JavaScript. Также мы узнаем, как их обнаружить с помощью Chrome Development Tools.


timeline в Chrome Dev Tools

Читать дальше →

Первый самодельный клиент, который подключается к Skype Network

Время на прочтение3 мин
Охват и читатели36K


Skype — один из самых небезопасных мессенджеров по объективным причинам. Одна из них — обфусцированный бинарный файл, чтобы затруднить реверс-инжиниринг. Корпорация Microsoft отказывается предоставить исходный код для аудита и проверки специалистами по безопасности, последняя проверка проводилась в 2005 году.

Несмотря на все риски, многие люди вынуждены использовать клиент Skype.
Читать дальше →

Нейросеть Google сжимает фотографии лучше JPEG

Время на прочтение4 мин
Охват и читатели27K

Фрагмент 32×32 пикселя оригинального изображения, сжатого разными методами. Иллюстрация: Google

Разработчики из компании Google поделились очередными достижениями в применении нейросетей для практических задач. 18 августа они опубликовали на arXiv научную статью «Сжатие полноразмерных изображений с помощью рекуррентных нейронных сетей» ("Full Resolution Image Compression with Recurrent Neural Networks"). В статье описан инновационный метод сжатия фотографий с помощью нейросети, показан процесс её обучения и примеры её работы.

Разработчики информируют, что это первая нейросеть в мире, которая на большинстве битрейтов сжимает фотографии лучше JPEG, при помощи энтропийного кодирования или без его помощи.
Читать дальше →

Как подружить Tensorflow и C++

Время на прочтение6 мин
Охват и читатели49K

Google TensorFlow — набирающая популярность библиотека машинного обучения с акцентом на нейросетях. У нее есть одна замечательная особенность, она умеет работать не только в программах на Python, а также и в программах на C++. Однако, как оказалось, в случае С++ нужно немного повозиться, чтобы правильно приготовить это блюдо. Конечно, основная часть разработчиков и исследователей, которые используют TensorFlow работают в Python. Однако, иногда бывает необходимо отказаться от этой схемы. Например вы натренировали вашу модель и хотите ее использовать в мобильном приложении или роботе. А может вы хотите интегрировать TensorFlow в существующий проект на С++. Если вам интересно как это сделать, добро пожаловать под кат.
Читать дальше →

Трёхпозиционный checkbox (aka tristate) без скриптов и смс

Время на прочтение2 мин
Охват и читатели34K
Понадобилось мне недавно реализовать трёхпозиционный переключатель. Ну это такой, у которого вместо двух состояний «включено/выключено», есть ещё промежуточное состояние. Это часто используется, например, в чекбоксе «выбрать всё», для того чтобы показать, что выбраны не все элементы, а только часть. В общем, захотелось такое реализовать, да чтобы без скриптов.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Самара, Самарская обл., Россия
Дата рождения
Зарегистрирован
Активность