Pull to refresh
0
0
Alexander Ivanov @gagmaker

User

Send message

Использование монад в С++. Часть 1: монада списка

Reading time10 min
Views34K
Часть 1
Часть 2

Иногда программисты на С++ просят привести пример задачи, которая не может быть решена без использования монад. Начнём с того, что этот вопрос неверен сам по себе — это всё-равно, что спрашивать, существует ли задача, которая не может быть решена без циклов. Очевидно, если в вашем языке есть поддержка оператора goto, вы можете обойтись без использования операторов цикла. Что монады (и циклы) могут сделать для вас, это упростить ваш код и помочь лучше его структурировать. Как использование циклов превращает спагетти-код в нормальный, так и использование монад может превратить ваш код в императивном стиле в декларативный. Эта трансформация может помочь легче писать, понимать, поддерживать и расширять ваш код.

Ну и вот вам задачка, которая может попасться на собеседовании. Она не совсем тривиальна, возможно несколько подходов к решению и лучший из них не сразу очевиден — как-раз то, над чем стоит подумать.
Вам предлагается следующий пазл:

  s e n d
+ m o r e
---------
m o n e y


Каждая буква соответствует цифре от 0 до 9. Нужно написать программу, которая подберёт такие соответствия, чтобы написанная операция сложения была верной. Перед тем, как продолжить чтение статьи — подумайте минутку, как бы вы решили эту задачу?
Читать дальше →

Датчики и микроконтроллеры. Часть 3. Измеряем ток и напряжение

Reading time12 min
Views338K

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

Содержание


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

Система автопилотирования для радиоуправляемого вертолета. Часть 2: Перехват управления

Reading time4 min
Views20K
Это продолжение статьи по разработки системы автопилотирования для радиоуправляемого вертолета.
Читать дальше →

Модель марсохода MSL Curiosity

Reading time6 min
Views51K
На хабре много раз были различные кухонные боты и мне, как инженеру, тоже всегда хотелось сделать своего. Причем, я видел его обязательно с управляемой камерой и манипулятором. Решение строить не просто руку на колесах, а модель марсианской научной лаборатории, было каким-то само собой разумеющимся. Что может быть лучше, чем сделать модель реального ровера с той же функциональностью, какая была нужна мне?

В итоге после трех лет очень неспешной работы, кучи переделок и граблей я получил вот это:


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

Порт i2cdevlib на STM32 HAL

Reading time9 min
Views40K

Сильно удивился, когда выяснил, что под STM32 нет такого разнообразия готовых драйверов под разного рода i2c сенсоры, как под Arduino. Те, которые мне удалось найти, были частью какой либо ОС (например, ChubiOS, FreeRTOS, NuttX) и были более POSIX-like. А хотелось писать под HAL :(

Arduino комюнити использует библиотеку i2cdevlib для абстракции от железа при написании драйверов сенсоров. Собственно, делюсь своей работой — порт i2cdevlib на STM32 HAL (pull-request уже отправил), а под катом я расскажу о камушках, которые собрал по пути. Ну и примеры кода будут.
Читать дальше →

Датчики и микроконтроллеры. Часть 2. Климат-контроль

Reading time22 min
Views117K
Продолжим рассказ о датчиках и в этой части рассмотрим разнообразные датчики самых востребованных DIY-сообществом типов — это многочисленные датчики температуры и датчики влажности. Кроме того, затронем датчики давления воздуха и присутствия газов. Приведем описание номенклатуры датчиков и сошлемся на полезную литературу.

Содержание


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

Vim по полной: Введение

Reading time5 min
Views70K
Привет, хабраюзер!

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

В этой серии статей я решил поделиться собственными наработками и, возможно, показать, на что может быть способен этот редактор в руках программиста. Серия будет состоять из следующих частей:
  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim-quickrun)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные плагины

Хочется сразу заметить, что я не преследую цель «посадить как можно больше людей на иглу Vim», так как статья больше расчитана на опытных пользователей, нежели на новичков.

Готов? Вперед под кат!

Фильтр Маджвика

Reading time38 min
Views142K

Предисловие от переводчика


Здесь представлен один из новейших методов расчёта ориентации в пространстве по показаниям датчиков акселерометра, гироскопа и компаса — фильтр Маджвика, который, по словам автора, даёт результат лучший, чем применение фильтра на основе метода Калмана в результатах и производительности. Автор — Себастьян Маджвик (его интернет-магазин). Метод описан в статье на английском. Данная работа защищена в Университете г. Бристоля Перевода я не нашёл. Переводчик из меня так себе, особенно таких сложных текстов. Но нам же интересно, что за метод?

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


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

Дебаггинг в реальном времени через JTAG/SWJ-DP для микроконтроллеров на ядре ARM Cortex-M

Reading time4 min
Views40K

С некоторых пор фирма Segger предлагает технологию Real Time Terminal (RTT) для своих JTAG адаптеров J-Link. Суть ее в том, что программа на микроконтроллере может выводить и принимать отладочную информацию из JTAG/SWJ-DP порта, как это обычно делается через UART. И тогда нам больше не нужен реальный отладочный UART. Далее чуть подробнее о возможностях этой технологии.
Читать дальше →

Датчики и микроконтроллеры. Часть 1. Матчасть

Reading time19 min
Views215K
В эпоху готовых отладочных плат и тысяч готовых модулей к ним, где достаточно взять пару блоков, соединить их вместе, и получить нужный результат, далеко не каждый понимает основы схемотехники, почему и как это работает, а главное — что надо делать, если это работает не так.
Как раз открылся хаб Схемотехника, так что, как говорил Бьюфорд Бешеный Пёс Таннен
Здание суда уже строят, значит, пора кого-то вешать.

В этом цикле я расскажу о датчиках — как о немаловажном элементе системы управления неким объектом или тех. процессом.

Все свое повествование я буду вести касаемо практических вопросов реализации цифровых систем управления на базе микроконтроллеров.

Руководство не претендует на всеобщий обхват вопроса.
Хотя после того, как мой конспект перелез за 20 страниц текста, я решил разбить статью на следующие части:
  • Часть 1. Мат. часть. В ней мы рассмотрим датчик, не привязанный к какому-то конкретному измеряемому параметру. Рассмотрим передаточные функции и динамические характеристики датчика, разберемся с его возможными подключениями.
  • Часть 2. Датчики климат-контроля. В ней я рассмотрю особенности работы с датчиками температуры, влажности, давления и газового состава
  • Часть 3. Датчики электрических величин. В ней я коснусь измерения тока и напряжения

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

Мой интернет вещей: Гостевой замок

Reading time17 min
Views80K
Так сложились обстоятельства, что имеется у меня однокомнатная квартира, в которой я не живу, а сдавать ее «обычным способом» мне не интересно. Попробовал я ее сдать через сервис Airbnb, понравилось. И не то, что бы это выгоднее, но точно интереснее, процесс захватывает. Но я не об этом…

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

Не только софтом одним мы живы отныне. Поздравляю с появлением нового хаба «Схемотехника»

Reading time2 min
Views39K


Дорогие юзеры Хабрасообщества, поздравляю с появлением на нашей любимой площадке нового Хаба под названием Схемотехника.


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

Транзисторный усилитель класса А своими руками

Reading time6 min
Views265K


На Хабре уже были публикации о DIY-ламповых усилителях, которые было очень интересно читать. Спору нет, звук у них чудесный, но для повседневного использования проще использовать устройство на транзисторах. Транзисторы удобнее, поскольку не требуют прогрева перед работой и долговечнее. Да и не каждый рискнёт начинать ламповую сагу с анодными потенциалами под 400 В, а трансформаторы под транзисторные пару десятков вольт намного безопаснее и просто доступнее.

В качестве схемы для воспроизведения я выбрал схему от John Linsley Hood 1969 года, взяв авторские параметры в расчёте на импеданс своих колонок 8 Ом.

Классическая схема от британского инженера, опубликованная почти 50 лет назад, до сих пор является одной из самых воспроизводимых и собирает о себе исключительно положительные отзывы. Этому есть множество объяснений:
— минимальное количество элементов упрощает монтаж. Также считается, что чем проще конструкция, тем лучше звук;
— несмотря на то, что выходных транзисторов два, их не надо перебирать в комплементарные пары;
— выходных 10 Ватт с запасом хватает для обычных человеческих жилищ, а входная чувствительность 0.5-1 Вольт очень хорошо согласуется с выходом большинства звуковых карт или проигрывателей;
— класс А — он и в Африке класс А, если мы говорим о хорошем звучании. О сравнении с другими классами будет чуть ниже.
Читать дальше →

Windows 10 на Raspberry Pi 2, первые впечатления

Reading time3 min
Views236K
29 апреля мне пришло письмо от Микрософт о том, что наконец-то вышла первая бета адаптация Windows 10 для raspberry pi2. События этого ждали, вероятно, многие, в том числе и я. Как это будет выглядеть? Как будет работать? Быстро — не быстро. Да в целом, это чертовски интригующе!


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

Дискретное преобразование Фурье фрактального броуновского движения

Reading time2 min
Views14K
Фрактальное броуновское движение (ФБД) относится к классу рассматриваемых функций, заданные на конечном интервале и равные нулю вне его, которые включают кусочно непрерывные функции, удовлетворяющие условию роста:
image,
где функция image, удовлетворяет условию: image

Преобразование Фурье
Для ФБД будем интерпретировать процесс image как временной процесс. Существует частотная область, в которой функция — сумма составляющих, имеющих определенную частоту. Функция image может быть разложена как image.
Составляющая image с частотой image имеет вид:

image, где image.

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

Мой опыт работы с Intel Edison. Часть I (подготовительная)

Reading time3 min
Views27K
Наконец-то собрал волю в кулак, отодвинул все неотложные дела в сторону и сел написать о своих впечатлениях про штуковину, которую в прошлом году явила миру корпорация Intel. Попробую в нескольких статьях рассказать о платформе Edison. Точнее, о моих попытках работы с этой платформой. Я ученый физик, поэтому все, что связано с тематикой данной серии публикаций — моё хобби. Заранее прошу снисхождения, если что-то не так…
Читать дальше →

CAN-USB адаптер из stm32vldiscovery

Reading time15 min
Views146K


При разработке устройств с CAN-интерфейсом желательно иметь удобный инструмент для отслеживания сообщений в сети. Для RS232/485 существует множество бюджетных USB адаптеров и куча разнообразного софта, а вот для CAN мне не удалось найти недорогое готовое решение.

В то же самое время на сайтах автолюбителей находились самодельные устройства для подключения к CAN шине автомобиля. Одними из готовых проектов были USB<>CAN Bus Interface (CAN Hacker), реализованный на Atmega+SJA1000 и проект STM32-CAN-Busadapter, реализованный на STM32F105. Работают они с программой CAN Hacker, которая выглядит достаточно удобной для работы. Беглый анализ протокола команд по USB показал, что эти устройства представляются COM портом, и дальнейшее общение происходит в виде передачи команд из ASCII символов.

В закромах была найдена плата STM32VLDiscovery, которая и стала объектом испытаний. На ней мы будем повторять «STM32-CAN-Busadapter».
Что из этого получилось

Intel Edison. Первый запуск

Reading time9 min
Views111K
Intel Edison

В прошлом году на выставке CES 2014 Intel представила Linux мини-компьютер Edison для интернета вещей. Кратко почитать об анонсе Intel Edison можно тут. Интернет вещей — безусловный тренд этого года. Теперь не только домашний компьютер, планшет, или смартфон могут подключаться к сети Интернет. Но и привычные бытовые вещи, которыми мы пользуемся каждый день. Intel Edison, не ответ компании на Raspberry Pi, а новая ниша миниатюрных энергоэффективных компьютеров, в форм-факторе модуля. Любой разработчик может взять такой модуль, добавить к нему различные датчики, механику, и средство интерактивного взаимодействия, и получить новое устройство.

Intel Edison – мини-компьютер с Linux на борту, базис для построения нового мира вещей основанного на сетевом взаимодействии друг с другом.
Читать дальше →

Линейная алгебра: пробный заезд

Reading time7 min
Views149K
Привет, Хабр!

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

Часто первое знакомство с линейной алгеброй выглядит как-то так:

image

Не очень вдохновляет, правда? Сразу возникает два вопроса: откуда это все взялось и зачем оно нужно.

Начнем с практики


Когда я занимался вычислительной гидродинамикой (CFD), один из коллег говорил: «Мы не решаем уравнения Навье-Стокса. Мы обращаем матрицы.» И действительно, линейная алгебра — «рабочая лошадка» вычислительной математики:


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

Левитрон на Arduino

Reading time2 min
Views96K
Добрый вечер! В этой публикации я расскажу о своей маленькой самоделке, задумал которую я достаточно давно.

Некоторое время назад я прочитал статью об интересных устройствах – левитронах, которые бывают как чисто механическими, так и с электронным управлением.

Естественно, захотел собрать себе такую игрушку, но, поискав в интернете, к своему удивлению обнаружил(по крайней мере на тот момент), что большинство схем были исключительно аналоговыми. Так как в аналоговой технике я понимаю мало, решил «изобрести» левитрон заново. Для экспериментов под рукой оказался Arduino Uno. Заказал в Китае линейный датчик Холла (что такое эффект Холла), а именно UGN3503UA, насобирал некоторое количество старых трансформаторов для намотки пробных катушек и приступил к экспериментам.

Вот что из этого получилось:


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

Information

Rating
Does not participate
Location
San Diego, California, США
Registered
Activity