Как стать автором
Обновить
4
0
Максим @mctMaks

инженер-программист

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

Кунг-фу стиля Linux: регулярные выражения

Время на прочтение11 мин
Количество просмотров28K
Если вы считаете, что умеете готовить, то может, вы знаете о том, как сделать суфле или пахлаву, а может — и не знаете. Но есть кое-что такое, чему вы, вероятно, научились, просто готовя разные блюда. Например, вы, скорее всего, можете вскипятить воду, можете правильно разбить яйцо, можете поджарить мясо. Если говорить о работе в Linux или Unix, то тут тоже можно сделать похожие наблюдения. Возможно, вы не знаете о том, как установить сервер Wayland, или о том, как написать модуль ядра. Но есть определённые базовые навыки, вроде работы с файлами или редактирования текстов, которые люди осваивают независимо от того, чем они занимаются, навыки, которые помогают им в самых разных ситуациях. Один из навыков, полезных в самых разных ситуациях, овладение которым часто вызывает определённые сложности, это — умение пользоваться регулярными выражениями. Многие программы используют их в качестве средства описания шаблонов поиска чего-либо. Обычно — для поиска данных в строках, например — в файлах с каким-то текстом.



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

Разберём основы регулярных выражений, то, что нужно для того, чтобы хорошо их понимать и эффективно использовать.
Читать дальше →
Всего голосов 25: ↑22 и ↓3+33
Комментарии6

Изучаем RISC-V с нуля, часть 2: прерывания и стыковка с Си

Время на прочтение17 мин
Количество просмотров11K


Продолжаем погружаться в строение контроллера GD32VF103CBT6. Теперь рассмотрим как он может обрабатывать прерывания работать под управлением высокоуровневого кода.
Первая часть здесь

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии12

Qt. Создание виджета-консоли для графического приложения

Время на прочтение5 мин
Количество просмотров24K
Привет добрым людям.
При прочтении этого заголовка читатели могут подумать: зачем смешивать консольные и графические приложения – консоль в GUI-приложении не нужна. А вот и нет, смею заметить. Иногда совмещение функциональной консоли с полным набором команд и графического отображения для удобной навигации и просмотра данных может дать в итоге мощный инструмент.
И у меня есть пример.
Начав использовать быстрое key-value хранилище данных Redis для своих проектов, я обнаружил, что на данный момент нет ни одного вменяемого desktop-приложения для просмотра, редактирования и администрирования баз данных Redis. Есть только консоль от разработчиков, веб-интерфейс Redis Admin UI, который для своей работы требует .NET (что само по себе уже отпугивает) и пару Ruby-приложений, сделанных, похоже, на скорую руку, на коленке.
Хотелось бы иметь что-то удобное и быстрое, как сама база данных Redis. Поэтому я решил восполнить этот пробел и написать такой инструмент. Так как нужен быстрый – то C++, так как нужен кроссплатформенный – то Qt.

RedisConsole

Из-за того, что все возможности базы данных не реализуешь, да они и могут появляться каждый день новые, нужно было добавить в графический интерфейс консоль. На основе какого виджета в Qt ее имитировать, и как, и хочу вам рассказать.

Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии21

Тентакли животного мира

Время на прочтение5 мин
Количество просмотров29K

Tentacle как слово в русском языке - чистое заимствование, и прочитав «тентакль» вы, конечно же, подумаете о щупальцах. Но всё несколько деликатней: английское слово происходит от лат. «tentaculum», которое, в свою очередь, шаловливо отсылает нас к «tentare» или «temptare» и, соответственно, означает «пробовать», «чувствовать». Поэтому это не какое-то вульгарное щупальце, это прежде всего орган чувств - это вкус, это осязание и чувственное восприятие окружающего мира.

Читать далее
Всего голосов 24: ↑22 и ↓2+26
Комментарии9

Прививки прошлого — что мы знаем о вакцинах?

Время на прочтение17 мин
Количество просмотров10K

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

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

Но если всё так просто, спросите вы - куски бактерий или их белков безвредны и дают нам иммунитет - почему сегодня до сих пор нет вакцин от всего? А ещё лучше, одной вакцины, которая бы содержала в себе все убитые известные патогены и одним уколом делала нас неуязвимыми для микро вселенной? Давайте разберёмся.

Начинать приходится с того, что патогены, способные навредить нам, очень разные. Они настолько разные, что часто генетически отличаются друг от друга как, например, муха и слон. И то, что может защитить от укуса первого в задницу, абсолютно бесполезно против удара хоботом в лицо от второго.

Читать далее
Всего голосов 33: ↑29 и ↓4+36
Комментарии8

Спасительный пазл: механика экзоскелета дьявольского жука

Время на прочтение11 мин
Количество просмотров12K


Ни для кого не секрет, что эволюция это крайне длительный, сложный и порой невероятно странный процесс. Стоит взглянуть на муравьеда, птичку киви или на утконоса, как сразу же начинаешь задумываться про чувство юмора матушки-природы. Однако любые адаптационные изменения, приобретенные в ходе эволюции, всегда имеют логическое объяснение и вполне практическое применение, какими бы странными на первый взгляд они ни казались. Ученые из университета Пердью (США) решили повнимательнее изучить необычного жука вида Nosoderma diabolicum, который способен выдерживать внушительное давление. В чем особенность строения жука-экстремала, насколько он вынослив, и как человек может использовать секреты жука в инженерии? Ответы на эти вопросы мы найдем в докладе ученых. Поехали.
Всего голосов 30: ↑29 и ↓1+41
Комментарии28

Незаметные сложности ракетной техники

Время на прочтение5 мин
Количество просмотров282K

Строительство и эксплуатация ракет-носителей — это своеобразная «черная команда» космонавтики. Большая и сложная работа делается незаметно, а большинство лавров достаются разработчикам полезной нагрузки. Мы забыли о сложности задач, которые решаются при проектировании и производстве ракет-носителей. Эта статья призвана показать важность темы и представить небольшой ликбез тем, кто хотел бы узнать, «как оно летает».
Читать дальше →
Всего голосов 248: ↑247 и ↓1+246
Комментарии285

LDM. Моя любимая инструкция ARM

Время на прочтение3 мин
Количество просмотров8.9K
LDM — или load multiple — моя любимая инструкция в ассемблере для ARM. Вот почему.

Во-первых, что она делает. Вот пример:

ldm r4, {r0, r1, r2, r3}

Здесь она принимает базовый регистр (в данном случае r4) и набор регистров (в данном случае {r0, r1, r2, r3}). Загружает последовательные слова из адреса в базовом регистре в регистры из набора. Действие инструкции можно продемонстрировать с помощью такого C-подобного псевдокода:

r0 = r4[0];
r1 = r4[1];
r2 = r4[2];
r3 = r4[3];
Читать дальше →
Всего голосов 40: ↑40 и ↓0+40
Комментарии15

Qt? ImGUI? wxWidgets? Пишем свое

Время на прочтение16 мин
Количество просмотров23K

Привет, хабровчане! Хочу рассказать о своей системе UI, которую я написал для своего игрового движка, на которой делаю редактор для него же.

Читать далее
Всего голосов 75: ↑75 и ↓0+75
Комментарии29

Как нарисовать звезду (и не только) в полярных координатах

Время на прочтение6 мин
Количество просмотров33K
Вопрос о формуле для многоугольника в полярных координатах регулярно возникает на тематических ресурсах — и так же регулярно остаётся без внятного ответа. В лучшем случае попадается решение через функцию остатка от деления — что не является «чистым» с математической точки зрения, поскольку не позволяет производить над функцией аналитические преобразования. Видимо, настоящие математики слишком заняты решением проблем тысячелетия и поисками простого доказательства теоремы Ферма, чтобы обращать внимание на подобные банальные задачи. К счастью, в этом вопросе воображение важнее знания, и для решения этой задачи не нужно быть профессором топологических наук — достаточно знания школьного уровня.
Дальше больше картинок
Всего голосов 116: ↑114 и ↓2+148
Комментарии31

Используем template + constexpr для создания масок регистров периферии микроконтроллера на этапе компиляции (C++14)

Время на прочтение15 мин
Количество просмотров11K

Введение


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

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



Заинтересовавшихся в том, как это можно сделать, прошу под кат.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии9

Два подхода к проектированию ПО для embedded

Время на прочтение9 мин
Количество просмотров36K
Хочу немного рассказать о двух подходах проектирования ПО в embedded. Два подхода эти – c использованием суперцикла или же с использованием RTOS (Real-Time Operation System, операционная система реального времени).

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

Надеюсь, будет интересно всем тем, кто хочет заглянуть в мир разработки для встраиваемых систем. Для тех, кто в embedded уже собаку съел, скорее всего, не будет ничего нового.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии49

Оптимальный путь новичка в мире C++/Qt

Время на прочтение10 мин
Количество просмотров106K
Часто задаваемый начинающими программистами вопрос – какие материалы читать для повышения своего профессионального уровня? В таком, наиболее общем виде, ответить на данный вопрос невозможно. Это зависит от текущих знаний и умений человека, от его специализации, от задач, которые возникнут перед ним в будущем. Однако я попытаюсь ответить на данный вопрос для того направления программистской деятельности, в котором лучше всего разбираюсь – в создании кроссплатформенных сложных desktop-приложений. Приложений уровня и класса PhotoShop, VisualStudio, MS Word. Таких приложений, в которых с точки зрения программиста возникает больше количество разноплановых задач:

  • Отрисовка классического «офисного» GUI типа кнопок, прогресс-баров, виджетов, анимации.
  • Отрисовка любой нестандартной графики типа непрерывно движущихся графиков из миллионов точек.
  • Работа с базами данных
  • Работа с сетью
  • Работа с реестром операционной системы
  • Работа с принтером
  • Быстрое (в том числе параллельное) выполнение сложных вычислительных задач.
  • И многое, многое другое.

Наборов платформ и фреймворков, которые позволяют эффективно строить подобные приложения, не так уж много. В свое время, попробовав разные платформы, программисты в моей организации уверенно остановились на следующей связке: язык С++ и платформа Qt. Как показало время, этот выбор не подвел. Вот именно с оглядкой на этот выбор я начну излагать тот набор материалов, которые я рекомендую к изучению начинающими программистами, если они хотят стать настоящими гуру в этом направлении.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+13
Комментарии21

С++, метапрограммирование и регистры микроконтроллера

Время на прочтение7 мин
Количество просмотров7.4K

Привет, Хабр!


Вот уже несколько лет все свои проекты для линейки микроконтроллеров stm32 я делаю на C++.


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


Во избежание лишних вопросов: я использую связку QtCreator+gcc+gdb+openocd. Как с ней работать, описано многократно, поэтому не буду на этом останавливаться, а вот о своих подходах к работе с микроконтроллерами расскажу подробнее.


На нижнем уровне проекта, как правило, находятся драйвера периферии. С них и начнём.

Читать дальше →
Всего голосов 10: ↑9 и ↓1+15
Комментарии65

Трактат о Pinе. Мысли о настройке и работе с пинами на С++ для микроконтроллеров (на примере CortexM)

Время на прочтение15 мин
Количество просмотров8.4K

Последнее время я сильно увлекся вопросом надежности софта для микроконтроллеров, 0xd34df00d посоветовал мне сильнодействующие препараты, но к сожалению руки пока не дошли до изучения Haskell и Ivory для микроконтроллеров, да и вообще до совершенно новых подходов к разработке ПО отличных от ООП. Я лишь начал очень медленно вкуривать функциональное программирование и формальные методы.


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


Продолжу развивать тему о встроенном софте для небольших микроконтроллеров в устройствах для safety critical систем.


На этот раз попробую предложить способ работы с конкретными ножками микроконтроллера, используя обертку над регистрами, которую я описал в прошлой статье Безопасный доступ к полям регистров на С++ без ущерба эффективности (на примере CortexM)


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


using Led1Pin = Pin<Port<GPIOA>, 5U, PinWriteableConfigurable> ;
using Led2Pin = Pin<Port<GPIOC>, 5U, PinWriteableConfigurable> ;
using Led3Pin = Pin<Port<GPIOC>, 8U, PinWriteable> ;
using Led4Pin = Pin<Port<GPIOC>, 9U, PinWriteable> ;
using ButtonPin = Pin<Port<GPIOC>, 10U, PinReadable> ;

//Этот вызов развернется в  2 строчки
// GPIOA::BSRR::Set(32) ; // reinterpret_cast<volataile uint32_t *>(0x40020018) = 32U 
// GPIOС::BSRR::Set(800) ; // reinterpret_cast<volataile uint32_t *>(0x40020818) = 800U 
 PinsPack<Led1Pin, Led2Pin, Led3Pin, Led4Pin>::Set() ; 

//Ошибка компиляции, вывод к которому подключена кнопка настроен только на вход
ButtonPin::Set() 

auto res = ButtonPin::Get() ; 
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии181

Оформление документации в Doxygen

Время на прочтение5 мин
Количество просмотров59K


Данная статья входит в получившийся цикл статей о системе документирования Doxygen:

  1. Документируем код эффективно при помощи Doxygen
  2. Оформление документации в Doxygen
  3. Построение диаграмм и графов в Doxygen

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

В данной статье я отвечу на этот вопрос. Для этого мы рассмотрим общие принципы оформления документации Doxygen, познакомимся с ними, и посмотрим на примерах, чего можно добиться, основываясь на них.
Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии1

8 ловушек программирования

Время на прочтение13 мин
Количество просмотров223K


Эта статья содержит те ловушки программирования, в которые я попадал сам, продолжаю попадать и возможно никогда не прекращу, а также те, в которых я находил своих товарищей.

Однако я верю в то, что их можно избежать, если знать в какие ловушки можно попасть и как из них выбираться. Возможно эта вера — очередная ловушка.
Читать дальше →
Всего голосов 276: ↑256 и ↓20+236
Комментарии83

Документируем код эффективно при помощи Doxygen

Время на прочтение18 мин
Количество просмотров359K


Данная статья входит в получившийся цикл статей о системе документирования Doxygen:

  1. Документируем код эффективно при помощи Doxygen
  2. Оформление документации в Doxygen
  3. Построение диаграмм и графов в Doxygen

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

В этой статье мы сначала познакомимся с самой системой и её возможностями, затем разберёмся с её установкой и базовыми принципами работы, и, наконец, завершим знакомство рассмотрением различных примеров документации, примеров того, как следует документировать те или иные части кода. Словом, познакомимся со всем тем, что позволит вам освоиться и начать работать с этой замечательной системой.
Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии39
12 ...
9

Информация

В рейтинге
5 035-й
Откуда
Таганрог, Ростовская обл., Россия
Дата рождения
Зарегистрирован
Активность