Pull to refresh
0
0
Владимир Савин @WowaBBS

User

Send message

Lock-free структуры данных. Concurrent map: разминка

Reading time9 min
Views59K

Мне оказали честь — пригласили выступить на первой конференции C++ 2015 Russia 27-28 февраля. Я был насколько наглым, что запросил 2 часа на выступление вместо положенного одного и заявил тему, наиболее меня интересующую — конкурентные ассоциативные контейнеры. Это hash set/map и деревья. Организатор sermp пошел навстречу, за что ему большое спасибо.
Как подготовиться ко столь ответственному испытанию выступлению? Первое — нарисовать презентацию, то есть кучу картинок, желательно близко к теме. Но надо ещё и два часа озвучивать картинки, — как все это запомнить? Как избежать глубокомысленных «ээээмммм», «здесь мы видим», «на этом слайде показано», несвязных прыжков повествования и прочих вещей, характеризующих выступающего c не очень хорошей стороны в части владения родным языком (это я про русский, с C++ я разобрался быстро — никакого кода в презентации, только картинки)?
Конечно, надо записать свои мысли, глядя на слайды. А если что-то написано, то не худо бы и опубликовать. А если публиковать, — то на хабре.
Итак, по следам C++ 2015 Russia! Авторское изложение, надеюсь, без авторского косноязычия, без купюр и с отступлениями по теме, написанное до наступления события, в нескольких частях.
Читать дальше →

Нет ничего проще, чем вызвать функцию, я сам это делал неоднократно

Reading time12 min
Views36K

Предшествующая статья про исключения в С++ оставила кучу тёмных мест,
главное, что осталось непонятным — так как же всё-таки осуществляется
передача управления при возбуждении исключения?
С SJLJ всё понятно, но, утверждается, что эта технология практически
вытеснена некоторым без-затратным (при отсутствии исключений) табличным механизмом.
А вот что это за механизм такой и как он устроен, будем разбираться под катом.
Читать дальше →

Поддержка C++ модулей в Visual Studio 2015 Update 1

Reading time2 min
Views36K
На конференции CppCon, которая проходит прямо сейчас, команда разработчиков компилятора Visual C++ заявила, что в следующем обновлении (Visual Studio 2015 Update 1) в компилятор С++ от Microsoft будет добавлена экспериментальная возможность из нового (ещё не утверждённого) стандарта С++ — поддержка модулей!



Для тех, кто не в курсе в чём эпохальность данного события: так уж сложилось, что механизм использовани компонентов в программах на С++ придумывался где-то лет 35 назад. Его нельзя назвать удобным: если вы хотите создать библиотеку — вам нужно сделать заголовочный файл и распространять с ним либо код, либо скомпилированную версию библиотеки. При этом возникает куча проблем:
  • Заголовочный файл и библиотека — отдельные файлы, один из них может потеряться, либо они случайно могут рассинхронизироваться.
  • Заголовочный файл включается в код директивой препроцессора #include, что во-первых, замедляет компиляцию, а во-вторых добавляет влияние всего, что написано в заголовочных файлах друг на друга и на конечный код. Нередки случаи, когда заголовочные файлы нужно включать в определенном порядке или определять некоторые макросы чтобы код нормально собрался.


В итоге в инфраструктуре С++ отсутствуют понятия «сборок» или «пакетов» и, в отличии от С# или Python, где установка компонентов тривиальна, в С++ подключение каждой новой библиотеки может нести свои неожиданности. Предлагаемый механизм модулей в С++ призван убрать данную проблему, отказаться от директивы препроцессора #include и ссылаться на компоненты, как на некоторую сущность, состоящую из кода и метаданных, целостную и легко подключаемую. В итоге мы вскоре можем получить существенное ускорение внедрения новых компонентов в проект, появления полноценных менеджеров пакетов, установка новой библиотеки сведется к выполнению одной строки или нескольким кликам мышью. Это ли не счастье!

Под катом будут примеры использования и ссылки на документацию.
Читать дальше →

Brotli — новый алгоритм сжатия веб-данных от Google

Reading time2 min
Views29K
image

Так как веб-сайты и онлайн-сервисы с каждым годом становятся все «тяжелее», возрастает необходимость и сжатия данных в вебе. По этой причине Google выпустил новый алгоритм сжатия данных для веб-сайтов — Brotli, что в переводе с швейцарского немецкого означает «маленькая булка хлеба». Алгоритм уже доступен широкой аудитории на GitHub.
Читать дальше →

Можно ли увидеть невидимое? Прорыв в электродинамике: анаполь позволит скрытно передавать данные

Reading time9 min
Views29K
Сравнительно недавно в престижном журнале Physical Review X была опубликована научная статья на тему “Dielectric metamaterials with toroidal dipolar response”. В ней шла речь о возможности создания метаматериалов, полностью прозрачных для электромагнитных волн за счет возбуждения в них особых мод- “анаполей”.

Мы обратились к одному из авторов этой статьи Алексею Башарину, чтобы получить экспертное мнение относительно уникального явления в анапольной физике, а именно о неизлучающем «анаполе». Специально для нашего корпоративного блога на GT он согласился написать статью в научно-популярном формате и тезисно рассказать, в чем состояла уникальность его исследования, а также дать экспертный комментарий по статье, опубликованной в Nature Communications.

Алексей Башарин, без сомнения, является выдающимся экспертом в своей области, получившем многолетний зарубежный опыт исследований в ведущих исследовательских университетах Греции и Франции. В данный момент Алексей проводит свое исследование в лаборатории «Сверхпроводящие метаматериалы» НИТУ «МИСиС» под руководством Алексея Устинова.


Оборудование лаборатории «Сверхпроводящие метаматериалы» НИТУ «МИСиС» для исследования метаматериалов в сверхпроводящем режиме, которое используется для исследования анаполя в метаматериалах с Джозефсоновскими переходами.

Анаполь (от греч. an — отрицат. частица и polos — полюс) представляет собой неизлучающий источник или рассеиватель, который способен излучать векторные потенциалы, в отсутствие излученных электромагнитных полей, а также рассеивать векторные потенциалы, в отсутствие полей. Благодаря этому мы можем получить уникальную возможность скрывать различные объекты, точнее экранировать их от электромагнитных полей и получить устройства для скрытой передачи данных. При этом передача данных возможна за счет модуляции векторного потенциала, а привычное распространение электромагнитных волн (света) в системе будет отсутствовать. Более того, это может означать, что множество объектов и источников в природе мы просто не видим, потому что они не взаимодействуют с электромагнитными полями, а взаимодействуют исключительно с потенциалами!

Анапольная (тороидная) электродинамика настолько интересна и необычна, что мы даже не можем сказать на сегодняшний день, как потенциалы могут распространяться в вакууме и других средах, как сильно они затухают, каков их процесс дифракции на различных объектах и т.д. И самое главное, как их принимать и детектировать. Ведь нет еще приборов, способных фиксировать потенциалы и их поля.
Читать дальше →

Детское программирование на Scratch в 2015г

Reading time2 min
Views14K
Наконец-то!
В этом году вышло целых две книги о детском языке программирования Scratch.

Первая — переводная книга “Программирование для детей. Иллюстрированное руководство по языкам Scratch и Python” издательства «Манн, Иванов и Фербер»
www.mann-ivanov-ferber.ru/books/programmirovanie-dlya-detej
"Piccy.info - Free Image Hosting"
Читать дальше →

PE (Portable Executable): На странных берегах

Reading time18 min
Views164K


Эта статья представляет из себя рассказ о том как устроены исполняемые файлы (в точку! Это именно те штуки, которые получаются после компиляции приложений с расширением .exe). После того, как написан код, подключены библиотеки, подгружены к проекту ресурсы (иконки для окон, какие-либо текстовые файлы, картинки и прочее) всё это компонуется в один единственный исполняемый файл, преимущественно с расширением .exe. Вот именно в этот омут мы и погрузимся.
*Статья находится под эгидой «для начинающих» поэтому будет изобиловать схемами и описанием важных элементов загрузки.
На палубу

Привязка ресурсов в Microsoft DirectX 12

Reading time15 min
Views19K

20 марта 2014 года корпорация Microsoft объявила на конференции Game Developers Conference о выпуске DirectX* 12. За счет сокращения избыточной обработки ресурсов DirectX 12 будет способствовать более эффективной работе приложений и снижению потребления электроэнергии, благодаря чему можно будет дольше играть на мобильных устройствах без подзарядки.
На конференции SIGGRAPH 2014 специалисты Intel измерили потребляемую мощность ЦП при запуске простого демо с астероидами на планшете Microsoft Surface* Pro 3. Демонстрационное приложение можно переключать с API DirectX 11 на API DirectX 12 нажатием кнопки. Это демонстрационное приложение рисует огромное количество астероидов в космосе при фиксированной кадровой скорости. При использовании API DirectX 12 API потребляемая мощность ЦП снижается более чем вдвое по сравнению с DirectX 11**. Устройство работает в менее интенсивном тепловом режиме и способно дольше проработать от аккумулятора. В типичных игровых сценариях всю незадействованную мощность ЦП можно израсходовать на улучшение физики, искусственного интеллекта, алгоритмов поиска путей или других задач с интенсивной нагрузкой на ЦП. Таким образом, игра становится более мощной по функциональности или более экономичной с точки зрения потребления электричества.
Читать дальше →

Добавление поддержки двунаправленного текста в собственный TextBox

Reading time5 min
Views9.2K

Введение


Давно хотел поделиться опытом добавления поддержки двунаправленного текста в собственный редактор текста, но подвигли меня к этому корыстные соображения. В этой статье я напишу как интегрировал GNU FriBidi в свой TextBox для поддержки арабского языка. Надеюсь, моя статья окажется полезной, так как хороших материалов по поддержке арабского текста сложно найти.

Что мы имели


К моменту возникновения необходимости добавления поддержки арабского языка, самописный контрол TextBox уже умел многое: редактировать текст, управлять курсором, выделять часть текста, вставлять, вырезать, поддерживать много строк, выравнивание и т.д. Конечно, с Word не сравнится, но базовые вещи он умел. Также TextBox использовался в приложении для Windows и Mac OS X.

Привет Хабру
Читать дальше →

Мультиплатформенный аудио плеер на C++ и OpenAL

Reading time3 min
Views35K
Так сложилось, что большую часть жизни я пользовался Windows и привык воспроизводить аудио файлы с помощью Winamp. Он очень удобно интегрируется с командной строкой — запустил любой аудио файл и готово. После перехода на Linux и OS X (в основном по работе, но Mac использую и дома вместе с виндой) возникла острая необходимость найти альтернативу. Перепробывал большое количестко крафических плееров. Основная их проблема — это отсутствие нормальной интеграции с командной строкой и часто поддержка только одной из платформ: либо Linux, либо OS X. С консольными плеерами ситуация получше: mpg123 и mpg321 практически идеально делают именно то, что надо. Вот только появилось одно большое «но». Они не умеют играть .ogg и трекерную музыку (.it, .mod, .xm, .s3m и прочие), которой тоже накопилось достаточно и расставаться с ней совершенно не хотелось.
Читать дальше →

LLVM для исследователей

Reading time14 min
Views51K
В этой статье рассказывается о проведении исследований на базе инфраструктуры компилятора LLVM. Нашего рассказа должно хватить для того, чтобы исследователи, которым компиляторы прежде были по большей части безразличны, пришли в восторг от LLVM и сделали с его помощью что-нибудь интересное.

Что такое LLVM?


LLVM — это по-настоящему удобный для разборки и сборки «ранний» компилятор для таких традиционных языков программирования, как C и C++.

LLVM настолько хорош, что считается «больше, чем просто компилятором» (это динамический компилятор, он работает с языками, не относящимися к семейству C, он представляет собой новый формат доставки для App Store и т. д. и т. п.). Все перечисленное верно, но для нашей статьи важно лишь приведенное выше определение.

LLVM имеет несколько ключевых отличий от других компиляторов:

  • Главное новшество — промежуточное представление (ПП). LLVM работает с ПП, которое действительно можно прочитать (если вы умеете читать ассемблерный код). Возможно, кому-то это не покажется столь уж большим откровением, однако это свойство очень важно. ПП других компиляторов обычно имеют настолько сложную структуру, что их невозможно записать вручную, трудно понять и использовать.
Читать дальше →

Делаем свой итератор

Reading time6 min
Views86K
Не часто возникает необходимость создать свой итератор и хотелось бы иметь под рукой небольшой HowTo. В этой заметка хочу рассказать как создать простейший итератор, который можно использовать в стандартных алгоритмах типа std::copy, std::find. Какие методы и определения типов нужны в классе контейнере, чтобы его можно было обходить в циклах for из c++11 и BOOST_FOREACH.

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

Атмосферное рассеяние в ролике The Blacksmith

Reading time4 min
Views25K
Еще на стадии планирования The Blacksmith мы отказались от встроенных в Unity режимов тумана в пользу более гибкого и комплексного решения. Чтобы передать глубину и масштаб крупных сценических шотов, нам было нужно максимально реалистичное атмосферное рассеяние.


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

Когда размер имеет значение

Reading time6 min
Views17K


Иногда встречаются задачи, для которых уменьшение размера приложения, а точнее, правильный баланс между размером и производительностью, является даже более приоритетным, чем скорость его выполнения. Такого рода проблемы существуют, в частности, при разработке для встраиваемых (embedded) систем. Для них приложения «затачиваются» под конкретный тип процессора с очень ограниченным размером памяти, а значит размер нашего приложения будет напрямую влиять на стоимость конечного продукта. Кроме того, можно добавить больше функциональности и улучшить качество самого кода.

Компиляторы Intel обычно отдают предпочтение производительности и слабо заботятся о размере получаемого на выходе приложения. По умолчанию, фокус на максимальную скорость. Задача разработчика заключается в умении найти правильный баланс между скоростью выполнения приложения и используемыми оптимизациями компилятора, и его размером. В компиляторе Intel C/C++ имеется целый ряд возможностей, позволяющий контролировать этот баланс и делать размер приложения более приоритетным, чем его производительность. Давайте рассмотрим эти возможности.
Читать дальше →

Lock-free структуры данных. Основы: Модель памяти

Reading time18 min
Views103K

В предыдущей статье мы заглянули внутрь процессора, пусть и гипотетического. Мы выяснили, что для корректного выполнения параллельного кода процессору необходимо подсказывать, до каких пределов ему разрешено проводить свои внутренние оптимизации чтения/записи. Эти подсказки – барьеры памяти. Барьеры памяти позволяют в той или иной мере упорядочить обращения к памяти (точнее, кэшу, — процессор взаимодействует с внешним миром только через кэш). “Тяжесть” такого упорядочения может быть разной, — каждая архитектура может предоставлять целый набор барьеров “на выбор”. Используя те или иные барьеры памяти, мы можем построить разные модели памяти — набор гарантий, которые будут выполняться для наших программ.

В этой статье мы рассмотрим модель памяти C++11.
Читать дальше →

Технологии ASR и TTS для прикладного программиста: теоретический минимум

Reading time27 min
Views33K

Введение


В последние несколько лет голосовые интерфейсы окружают нас все плотнее. То, что когда-то демонстрировалось только в фильмах о далеком будущем, оказалось вполне реальным. Дело дошло уже до встраивания движков для синтеза (Text To Speech — TTS) и распознавания (Automatic Speech Recognition — ASR) речи в мобильные телефоны. Более того, появились вполне доступные API для встраивания ASR и TTS в приложения.

Ныне создавать программы с голосовым интерфейсом может любой желающий (не поскупившийся заплатить за движок). Наш обзор будет посвящен именно использованию имеющихся движков (на примере Nuance) а не созданию таковых. Также будут даны общие сведения необходимые каждому программисту впервые сталкивающемуся с речевыми интерфейсами. Статья также может быть полезна руководителям проектов, пытающимся оценить целесообразность интеграции голосовых технологий в их продукты.
Итак, начнем…

Но для затравки — анекдот:
Урок русского языка в грузинской школе.
Учитель говорит: «Дети, запомните: слова сол, фасол и вермишел пишутся с мягким знаком, а слова вилька, булька, тарелька – без мягкого знака. Дети, запомните, потому что понять это невозможно!»

Раньше этот анекдот казался мне смешным. Теперь — скорее жизненным. Почему так? Сейчас постараюсь объяснить…
Читать дальше →

Ученые Кембриджского университета разработали игру, помогающую лечить больных шизофренией

Reading time2 min
Views11K
image

Ученые Кембриджского университета разработали компьютерную игру, способствующую улучшению эпизодической памяти больных шизофренией. Игра, получившая название «Wizard», должна помочь больным справляться с повседневными жизненными задачами и работой. Первые результаты использования такого метода лечения, опубликованы в журнале Philosophical Transactions of the Royal Society B.
Читать дальше →

Азбука электронщика: увлекательная теория, занимательная практика и полезные решения для начинающих

Reading time4 min
Views59K
Я слушаю и забываю,
я вижу и запоминаю,
я делаю и понимаю.
Конфуций

Замечали ли вы, что интерес к электронике, радиотехнике, конструированию радиоэлектронных приборов в последнее время заметно возрос?

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



Понимая это, Мастер Кит начал выпуск серии наборов «Азбука электронщика».
Читать дальше →

Новый виток виртуальной реальности: Samsung Gear VR Innovator Edition

Reading time3 min
Views9K
Добрый день, Geektimes!

Сегодня мы хотели бы немного рассказать вам о новом сплаве носимых устройств и технологий мобильной виртуальной реальности — обновленных очках виртуальной реальности Samsung Gear VR Innovator Edition. Совместное детище компаний Samsung и Oculus полностью оптимизировано под флагманские смартфоны нового поколения Samsung Galaxy S6 и Galaxy S6 edge. Что изменилось в новой версии гаджета? Об этом вы узнаете под катом.


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

Information

Rating
Does not participate
Location
Самара, Самарская обл., Россия
Date of birth
Registered
Activity