Search
Write a publication
Pull to refresh
3
0.3
Send message

Вычисляем символьные выражения с нечеткими треугольными числами в python

Reading time9 min
Views5.9K
Привет, Хабр! Сегодня миниатюрный туториал о том, как сделать разбор строки с математическим выражением и вычислить его используя нечеткие треугольные числа. При соответствующих изменениях кода туториал сгодится для работы и с другими «кастомными» переменными. Справка: нечеткие треугольные числа — частный случай нечетких чисел (нечетких переменных на числовой оси). Ознакомиться подробнее рекомендую здесь и здесь.

Требования:

  • Язык программирования python 3.x (приводимый в статье код проверялся на python 3.5)
  • библиотека sympy
Читать дальше →

Оптимальные опции для x86 GCC

Reading time4 min
Views57K
      Распространено мнение, что GCC отстает по производительности от других компиляторов. В этой статье мы постараемся разобраться, какие базовые оптимизации GCC компилятора стоит применить для достижения приемлемой производительности.

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

Унифицированная обработка ошибок (C++ вариант для микроконтроллеров)

Reading time12 min
Views9.8K
При разработке ПО для микроконтроллеров на С++ очень часто можно столкнуться с тем, что использование стандартной библиотеки может привести к нежелательным дополнительным расходам ресурсов, как ОЗУ, так и ПЗУ. Поэтому зачастую классы и методы из библиотеки std не совсем подходят для реализации в микроконтроллере. Существуют также некоторые ограничения в использовании динамически выделяемой памяти, RTTI, исключений и так далее. В общем случае, чтобы писать компактный и быстрый код нельзя просто так взять библиотеку std и начать пользоваться, скажем операторами типа typeid, потому что необходима поддержка RTTI, а это уже накладные расходы, хоть и не очень большие.

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

Категории выражений в C++

Reading time7 min
Views52K

Категории выражений, такие как lvalue и rvalue, относятся, скорее, к фундаментальным теоретическим понятиям языка C++, чем к практическим аспектам его использования. По этой причине многие даже опытные программисты достаточно смутно представляют себе, что они означают. В этой статье я постараюсь максимально просто объяснить значение этих терминов, разбавляя теорию практическими примерами. Сразу оговорюсь: статья не претендует на максимально полное и строгое описание категорий выражений, за подробностями я рекомендую обращаться непосредственно в первоисточник: Стандарт языка C++.

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

Первый

Reading time8 min
Views10K
Томас резко вывернул руль влево, все восемь колёс его «крабика» протестующе заскрипели, впиваясь в грунт.

— Даю тебе пять минут, — раздалось в наушниках. Голос Джулии с трудом пробивался через помехи — он отъехал от станции чересчур далеко.

— Мне достаточно трёх.

— Уверен?..

— Ты издеваешься? — завопил он в микрофон.

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

Видимость сквозь турбулентную атмосферу. Компьютерная коррекция изображений удаленных объектов

Reading time6 min
Views11K
Авторский пересказ двух публикаций с демонстрационным фильмом.

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

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

Увеличь это! Современное увеличение разрешения

Reading time21 min
Views183K

Я уже перестал вздрагивать и удивляться, когда звонит телефон и в трубке раздается жесткий уверенный голос: «Вас беспокоит капитан такой-то (майор такой-то), вы можете ответить на пару вопросов?» Почему бы не поговорить с родной полицией…

Вопросы всегда одни и те же. «У нас есть видео с подозреваемым, пожалуйста, помогите восстановить лицо»… «Помогите увеличить номер с видеорегистратора»… «Здесь не видно рук человека, пожалуйста, помогите увеличить»… И так далее в том же духе.

Чтобы было понятно о чем речь — вот реальный пример присланного сильно сжатого видео, где просят восстановить размытое лицо (размер которого эквивалентен примерно 8 пикселям):


И ладно бы только русские дяди Степы беспокоили, пишут и западные Пинкертоны.
Читать дальше →

Цивилизация Пружин, 5/5

Reading time10 min
Views48K

Часть 5. В масштабе Вселенной


Предыдущая часть. Краткое содержание предыдущей части.

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


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

Редактирование видео в MPC с помощью шейдеров

Reading time2 min
Views16K
Есть задача: Изменить видео “на лету” при воспроизведении — поменять местами правую и левую часть. Не отразить, а именно поменять, т.е. разрезать картинку на две части и поменять их местами. Можно, конечно, сделать с помощью фреймсервера типа AviSynth'a, но это уже не совсем “на лету” — надо писать скрипт для каждого видео файла. Хочется сделать это быстро и без напрягов.

На фига? Чтобы сделать курс лекций по машинному обучению от Яндекса более удобным для просмотра. Лектор указывает на пункты презентации вживую, и приходится постоянно перескакивать через весь экран взглядом, чтобы понять, о чём речь:

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

Использование QML Map для построения воздушных трасс — Часть 1

Reading time4 min
Views8.2K
Уже довольно долго использую QML для построения графических интерфейсов, но возможности поработать в реальном проекте с Qt Location API и QML Map, до настоящего времени, не было.
Поэтому стало интересно попробовать эту компоненту для построения воздушных трасс.
Под катом описание реализации редактора, для создания подобных траекторий на карте:

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

Удивительная производительность параллельных алгоритмов C++17. Миф или Реальность?

Reading time8 min
Views22K
Добрый вечер!

От нашего курса «Разработчик C++» предлагаем вам небольшое и интересное исследование про параллельные алгоритмы.

Поехали.

С появлением параллельных алгоритмов в C++17, вы с легкостью можете обновить свой “вычислительный” код и получить выгоду от параллельного выполнения. В этой статье, я хочу рассмотреть STL алгоритм, который естественным образом раскрывает идею независимых вычислений. Можно ли ожидать 10-кратного ускорения при наличии 10-ядерного процессора? А может больше? Или меньше? Поговорим об этом.

Введение в параллельные алгоритмы

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

Трехмерный движок на формулах Excel для чайников

Reading time9 min
Views71K


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

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

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

Осторожно: 19 картинок и 3 анимации под катом.
Читать дальше →

Краткий гид по обучению С++: что, когда и на чём создавать

Reading time4 min
Views91K

Недавно у нас на GeekBrains стартовал свежий курс "Профессия: разработчик C++". Программа позволит всего за 9 месяцев освоить этот непростой язык и стать специалистом уровня junior. А это непростая задача. К примеру, в школах и ВУЗах на изучение С++ уходит минимум 2 года, чаще 4-5. Чтобы показать из чего состоит этот нелегкий путь, мы схематично описали для вас основные этапы.
Читать дальше →

Взгляд биолога на корни нашего старения

Reading time16 min
Views35K
Здравствуйте!

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

Дисклеймер: если вам кажется, что текст направлен определённому человеку, а не аудитории в целом, то так оно и есть, но менять я ничего не буду.

Эта статья написана полностью из головы, что называется на одном дыхании (правда в три захода), потому в ней минимальное количество ссылок и картинок – прошу понять и простить, либо написать в комментарии, возможно я что-то исправлю.
Читать дальше →

Qt: шаблон для корректной работы с потоками — более качественная реализация

Reading time7 min
Views34K
В своей предыдущей статье я затронул тему грамотной реализации потоков в Qt и предложил свой вариант. В комментариях мне подсказали более верное направление. Попробовал сделать — получилось и вправду легко и красиво! Я хотел было исправить старую статью, но Хабр повис — и все потерялось. В итоге я решил написать новую версию.
Смотрим новую версию!

Qt Everywhere: WebAssembly и WebGL стриминг

Reading time3 min
Views9.7K

Qt Everywhere — так именуются архивы с исходниками Qt. В 5.12.0 завезут WebAssembly и WebGL стриминг и everywhere звучит уже по другому. Так и просилось что-нибудь запрототипировать. Был быстро накидан прототип чатика на веб-сокетах, что бы протестировать поддержку сети. Под катом будет инструкция по сборке и запуска проекта на WebAssembly, пример вызова JavaScript из С++.

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

Комбинация кроссплатформенного и нативного подхода в разработке мобильных приложений

Reading time11 min
Views8.2K
Выпускать приложения для лишь одной мобильной платформы – не актуально и нужно заботиться о разработке сразу двух версий, для iOS и Android. И здесь можно выбрать два пути: работать на «нативных» языках программирования для каждой операционной системы или использовать кроссплатформенные фреймворки.

При разработке одного из проектов в компании DD Planet я сделал ставку на последний вариант. И в этой статье расскажу об опыте разработки кроссплатформенного приложения, проблемах, с которыми мы столкнулись, и найденных решениях.
Читать дальше →

Программирование на языке Ада

Reading time3 min
Views51K


Довелось намедни на одном белорусском ресурсе прочесть статью «10 языков программирования, которые больше никому не нужны». Среди «заживо погребенных» оказались Fortran, Basic, J#, Turbo Pascal, Ada и другие. Так вот, наибольшую полемику, как ни странно, вызвало обсуждение Aдa (надеюсь в этом месте я не оскорбляю чьи-либо чувства). Что, собственно говоря и сподвигло покопаться в этой увлекательной теме.
Читать дальше →

Плагин «Rainbow CSV» как альтернатива Excel

Reading time4 min
Views21K

Привет, Хабр! Эта статья про плагин Rainbow CSV, который я написал для 5 текстовых редакторов:


VS Code, Vim, Sublime Text 3, Atom, Gedit


Думаю, что многие читатели этой статьи периодически сталкиваются с CSV (comma-separated), ТSV (tab-separated) и подобными файлами. Если попробовать открыть их в текстовом редакторе (а как иначе узнать что там внутри?), то откроется совершенно невзрачная картина как с левой стороны изображения. Глядя на это сложно сказать даже сколько колонок в таблице. С правой стороны картинки тот же файл с включенным RainbowCSV, читаемость значительно повысилась за счет синтаксической подсветки.


image

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

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

Reading time18 min
Views24K
Началось все, как водится, с ошибки. Я первый раз работал с Java Native Interface и делал в C++ части обертку над функцией, создающей Java объект. Эта функция — CallVoidMethod — вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.

Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в CallVoidMethod использовал va_list, потому что по-другому в данном случае никак. Да, так и отправил va_list в CallVoidMethod. И уронил JVM банальным segmentation fault.

За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной CallVoidMethod есть CallVoidMethodV, которая произвольное число аргументов принимает через va_list.

Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и va_list. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list, и (поскольку речь все-таки о C++) с вариативными шаблонами.
Читать дальше →

Information

Rating
3,971-st
Location
Кызыл, Тува (Тувинская Респ.), Россия
Registered
Activity

Specialization

Software Developer, Application Developer
Senior
From 150,000 ₽
Python
C++
Linux
Docker