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

User

Send message

А что если учить школьников одновременно ПЛИС-ам и микроконтроллерам? Более объемная картина мира или шарики за ролики?

Reading time5 min
Views23K
В последние семь лет ко мне неоднократно обращались преподаватели детских кружков с вопросом, что бы такое придумать для детей в области электроники, чтобы было 1) интересно 2) конвертировалось бы в будущую специальность и 3) давало бы что-нибудь качественно другое, чем уже устоявшиеся среди преподавателей лего-ардуины-и-разберри-паи.

Подход, который я хотел бы предложить в этой заметке — это конструирование устройств на основе макентной платы, используя примитивы разных уровней абстракции. Прежде чем описать суть предложения, я приведу аналогию. Допустим, нам нужно исследовать местность между городом A и городом B. Из A в B можно проехать на автомашине, рассматривая окрестности дороги. Но еще лучше — проехать не только на автомашине, но и потом проплыть тот же маршрут на подводной лодке, пролететь его на самолете, походить в некоторых местах пешком, а также прорубить кусок шахты на участке между городами на проходческом комбайне. По ходу дела ученик получит не только опыт вождения автомобиля, но и представление о структуре недр, морской экосистеме, нравах жителей и общей карте местности.


Теперь суть предложения. Ученик за несколько дней выполняет серию простых электронных проектов, которые имеют сходную функциональность, но используют в качестве строительных кубиков разные объекты, в том числе:

1. Микросхемы малой степени интеграции, по несколько логических элементов в каждой
2. Программируемые логические интегральные схемы, десятки тысяч ячеек с изменяемой логической функцией
3. Микроконтроллеры
4. Встраиваемые процессоры
Читать дальше →

Движение в Галактике: гифки

Reading time4 min
Views29K


Наблюдая ясной ночью купол звездного неба легко поверить в его незыблемость и неподвижность, однако еще древние люди заметили, что движутся в небе не только Солнце и Луна. Наблюдая ночь за ночью, первые астрономы обнаружили планеты, что означает “бродячие”, и это было только самое начало. На самом деле, вся Вселенная находится в движении, и лишь наш короткий человеческий век не позволяет наблюдать всю масштабность и величие этого процесса. Пока наблюдение движения в космосе нам доступно в пределах Солнечной системы, но успехи астрономии позволяют заглянуть и дальше.
Читать дальше →

Создание вредоносных программ. Ответственность

Reading time12 min
Views35K
Я не работаю по RU и СНГ в частности, а значит, чист перед законом. Не надо меня тыкать в УК РФ, его знаю отлично и не нарушаю. Такое у нас УПК, что не считает нарушением 272/273, если не причинило вред Российской Федерации. Таким образом, я отказываюсь от ответственности от сказанного мною тут, а также не несу никакой ответственности за причиненные действия после прочтения этой статьи. И вообще — я завязал. Я добрый, хольте и лелейте.

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

Красота рендеринга игровых кадров: Краткий обзор инструментов + Интересное видео

Reading time5 min
Views20K
Пытливость ума и желание знать как все работает изнутри выделяет технаря из массы пользователей. В этом небольшом посте я бы хотел поделиться с любознательным сообществом небольшими роликами и кратким рецептом использования профилирующего софта для 3D приложений.


Кому любопытно, прошу пройти

Генераторы в действии

Reading time8 min
Views102K

Небольшое вступление


Не так давно я решил для себя, что пора восполнить большой пробел в знаниях и решил прочитать про переходы между версиями PHP, т.к. понимал, что остался где-то между 5.2 и 5.3 и этот пробел необходимо как-то устранить. До этого я читал про namespaces, traits и т.д, но дальше чтения не уходило. И вот тут я заметил генераторы, почитал документацию, одну из статей на хабре на этот счет и после этого возникла мысль — а как раньше без них жили-то?

Данным переводом хочу помочь хотя бы новичкам, поскольку на php.net документация по генераторам на английском и, на мой взгляд, должным образом не раскрывает всю идею и места применения. Текста много, кода чуть меньше, картинок нет. Потребуются общие знания, например, про итераторы. Очевидный код комментировать не буду, а вот сложные для понимания примеры постараюсь объяснить в силу своих знаний.

UPD1: Изменил расплывчатую формулировку, про которую говорили в комментариях.
UPD2: Добавил решение с принудительным break.

И сразу под хабракат

Иллюзии мозга. Иллюзия «конца истории»

Reading time4 min
Views24K

Рисунок: Randy Mora

Иллюзия конца истории — очень интересный феномен, который проявляется у людей практически всех возрастов (исследование 2013 года проводили на выборке более 19 000 респондентов в возрасте от 18 до 68 лет). Суть этой иллюзии в том, что люди любого возраста считают, что их личность сильно изменилась в прошлом, но слабо изменится в будущем. Эффект очень стабильный и, повторим, проявляется в любом возрасте.
Читать дальше →

Управление памятью: Взгляд изнутри

Reading time26 min
Views75K

Доброго времени суток!
Хочу представить вашему вниманию перевод статьи Джонатана Барлетта (Jonathan Bartlett), который является техническим директором в компании New Medio. Статья была опубликована 16 ноября 2004 года на сайте ibm.com и посвящена методам управления памятью. Хотя возраст статьи достаточно высок (по меркам IT), информация в ней является фундаментальной и описывает подходы к распределению памяти, их сильные и слабые стороны. Всё это сопровождается «самопальными» реализациями, для лучшего усвоения материала.

Аннотация от автора
Решения, компромиссы и реализации динамического распределения памяти
Получите представление о методах управления памятью, которые доступны Linux разработчикам. Данные методы не ограничиваются языком C, они также применяются и в других языках программирования. Эта статья даёт подробное описание как происходит управление памятью, на примерах ручного подхода (manually), полуавтоматического (semi-manually) с использованием подсчёта ссылок (referencing count) или пула (pooling) и автоматического при помощи сборщика мусора (garbage collection).

Читать далее...

Reedy – Скорочтение, которое действительно можно использовать

Level of difficultyEasy
Reading time9 min
Views245K
Reedy – продвинутая реализация технологии скоростного чтения

В последнее время наблюдается рост интереса к скорочтению на основе технологии RSVP. Однако большинство приложений и расширений на эту тему, при более близком знакомстве, увы, оказываются не очень удобны для ежедневного использования. А ведь в потенциале они могу помочь значительно экономить время и быстрее получать информацию. Мой друг OlegCherr решил доработать технологию, создав реализацию пригодную для постоянного использования, а я ему в этом помогаю. После двух месяцев постоянной практики чтения, тестирования, исследований и улучшений решил написать статью с разбором того, что получилось в результате, потому что результат, смею считать, будет интересен и другим. На текущий момент всё выполнено в виде расширения к браузеру Chrome и названо Reedy. Приложение под Android на подходе.
Подробности

Интеграция FATFS библиотеки для организации чтения дискового устройства на iOS

Reading time5 min
Views4.9K

Введение


Статья посвящена внедрению open source библиотеки на iOS для чтения/записи данных с MFI дискового устройства на основе FAT12/FAT16/FAT32/Exfat. Представлен способ построения архитектуры приложения, на основе FATFS библиотеки, а также методы отладки и тестирования проводных MFI-устройств. Статья практически не содержит кода из-за соблюдения NDA.
Читать дальше →

Новый кодек Codec2 700C сжимает речь до 700 бит/c

Reading time4 min
Views31K

В программе для цифровой радиопередачи FreeDV скоро можно будет проверить новый кодек в работе

Автор свободного голосового кодека Codec2, предназначенного для сверхплотного кодирования речи на голосовых каналах, выпустил новую версию Codec2 700C, в которой ему удалось закодировать различимую человеческую речь всего в 700 бит/с. Это значит, что трёхсекундная голосовая передача с различимой речью займёт всего лишь 260 байт.

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

Реализация блочного шифра «Кузнечик» с режимом CFB на С++

Reading time10 min
Views27K
Сегодня речь пойдёт о новом алгоритме блочного шифрования «Кузнечик» из стандарта ГОСТ Р 34.12 2015. В последнее время выходит множество публикаций, посвященных этому стандарту. В них с теоретической точки зрения описываются приведённый алгоритм, изучаются особенности отельных преобразований, а так же предлагаются способы оптимизации, путём включения вставок кода на языке ассемблера.

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

Структура программы


Программа состоит из трех частей
  • набор вспомогательных функций и классов — mycrypto.cpp mycrypto.hpp
  • блочный шифр «Кузнечик» — Kuznyechik.cpp Kuznyechik.hpp
  • режим шифрования Cipher Feed Back — modes.hpp
Читать дальше →

Сравнение библиотек логирования

Reading time26 min
Views76K


В сети огромное количество площадок формата Q&A где задаются вопросы из разряда:

  • Предложите С++ логер? (C++ logging framework suggestions)
  • Какой наиболее эффективный потоко-безопасный С++ логер? (What is the most efficient thread-safe C++ logger)
  • Библиотека логирования для игр (Logging library for c games)
  • Асинхронный потоко-безопасный С++ логер? (Asynchronous thread-safe logging in C++)

Люди делятся своим опытом и знаниями, но формат таких площадок позволяет лишь показать личные предпочтения отвечающего. К примеру, одним из самых производительных логеров чаще всего называют Pantheios, который даже по тестам производителя тратит больше 100 секунд на запись 1M строк лога, на современном железе это около 30 секунд, быстро ли это?

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

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

Reading time8 min
Views15K

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


Если кратко, то это механизм, позволяющий зафиксировать 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

Reading time14 min
Views144K

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


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

SFINAE — это просто

Reading time7 min
Views105K
TLDR: как определять, есть ли в типе метод с данным именем и сигнатурой, а также узнавать другие свойства типов, не сойдя при этом с ума.
image

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

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

Reading time5 min
Views23K
image

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

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

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

Reading time6 min
Views35K
image

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

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

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

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

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

Reading time5 min
Views46K

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

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

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

Reading time12 min
Views29K

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


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


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


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


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



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


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

Information

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