Search
Write a publication
Pull to refresh
0
@Daemychread⁠-⁠only

User

Send message

Фильтр Гаусса на стероидах: секреты ускорения вычислений

Level of difficultyMedium
Reading time8 min
Views5.7K

Привет, Хабр! Представьте, что вы пытаетесь обработать фотографию высокого разрешения на вашем смартфоне — добавить размытие, убрать шум или улучшить качество изображения. Кажется, задача проста, но за кулисами работает алгоритм, требующий немало вычислительных ресурсов. Речь идет о фильтре Гаусса – одной из самых популярных операций в области компьютерной обработки изображений.

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

Читать далее

Параллельный A на Rust и Rayon: ищем путь для воробушка*

Level of difficultyEasy
Reading time4 min
Views1.8K

Привет, Хабр! Сегодня у нас задачка из мира природы: представьте, что маленький воробушек потерялся в городе. Ему нужно срочно найти путь домой, а дороги кишат кошками, людьми и прочими препятствиями. Разумеется, вручную искать маршрут — не вариант. Нам нужен алгоритм, а лучше параллельный, чтобы воробушек не ждал вечность.

Какой алгоритм взять? Конечно же A*. Он и кратчайший путь найдёт, и с умом его построит. Но в одиночку он справляется медленно. Поэтому подключаем Rayon — библиотеку для многопоточных вычислений в Rust.

Читать далее

D&D: математика и удача

Level of difficultyEasy
Reading time9 min
Views10K

Приветствую, искатели приключений!
Меня зовут Данила Бахтин, и я специалист по анализу данных отдела управления ценностью данных в Лемана Тех (Леруа Мерлен).

Помимо работы у меня есть несколько увлечений. Одно из самых времязатратных — настольные ролевые игры и в частности — Dungeons & Dragons (aka DnD). В настольных играх очень много зависит от бросков костей, и в какой‑то момент моя профессия проникла в мои увлечения. В своей первой статье я расскажу, как попытался подойти к анализу результатов бросков двадцатигранного кубика в партиях, в коих участвовал лично, как дата‑аналитик.

Читать далее

Не очень стандартное использование Docker

Level of difficultyEasy
Reading time3 min
Views17K

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

Нет, в самом деле, а что еще нужно? Несколько файлов с исходным кодом, Makefile для сборки всего этого, MidnightCommander чтобы копировать файлы туда-сюда и удобный текстовый редактор, например Vim.

А еще куча установленных пакетов типа gcc, make, cmake - в общем, настроенная и подготовленная среда, вплоть до указания желаемой цветовой схемы в редакторе.
И вот однажды так получилось, что удобный настроенный компьютер вдруг накрылся медным тазом: жесткие диски тоже выходят из строя.

Читать далее

Создание Paint Dot Net плагина на C#/CodeLab для ЧБ дизеринга Jarvis Judice Ninke

Level of difficultyMedium
Reading time9 min
Views1.4K

Если вы фанат такой нелепой программы как Paint net, где отсутствуют бинды на горячие клавиши и прочие удобства современных редакторов, то эта статья для вас! Здесь вы узнаете как бесплатно создавать плагины с помощью CodeLab на языке C# и подготовить их к релизу.

Читать далее

Onlyoffice и Р7 офис: макросы на Javascript (туториал)

Level of difficultyEasy
Reading time11 min
Views8.3K

В этом туториале рассказывается про базовые возможности написания макросов в программе Р7 офис – российском пакете, являющемся ответвлением Onlyoffice. Код примеров одинаково работает в обеих программах. Есть некоторые отличия в деталях интерфейса, но в целом базовые функции работают одинаково.

Главная причина, почему так полюбились макросы в этих пакетах – автор статьи веб-разработчик, а эти макросы пишутся на Javascript :) Они, разумеется, не будут работать в Microsoft Office и других версиях офиса, но макросы чаще создаются для упрощения работы того, кто редактирует файл, а не для тех, кто потом будет смотреть на результат, и этого было вполне достаточно. Эта статья также ограничивается макросами для таблиц, поскольку большая часть автоматизации требуется именно для Excel-файлов.

Cтатья построена по принципу «какие базовые микрозадачи возникают в процессе решения большинства задач и как их решать». Также продемонстрирована доступность большей части функционала классического javascript на примере работы со строками, объекта Math и даже fetch.

Читать далее

Пишем плагины для Obsidian. Часть 1

Level of difficultyEasy
Reading time15 min
Views18K

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

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

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

Читать далее

Как начать создавать Flutter-приложения на Авроре: полная инструкция

Level of difficultyEasy
Reading time5 min
Views3.8K

Привет Хабр, это Юра Петров, Tech Lead Friflex. Последнее время многие меня спрашивают, как быстро начать разрабатывать приложения для системы Аврора с помощью фреймворка Flutter. Решил поделиться опытом и собрал ультимативный гайд. Всё, что я буду показывать, я буду делать на чистой системе Linux Mint. И в целом я рекомендую установить Linux для работы с Авророй, параллельно вашей системе. Это избавит вас от многих проблем. Я буду описывать процесс так, как будто вы никогда не использовали Linux.

Читать далее

Что не так с .NET в Yandex Cloud Functions

Level of difficultyMedium
Reading time9 min
Views3.8K

В статье объясню специфику Яндекс Функций. Покажу свой эксперимент с запуском приложений, которые опубликованы разными способами — в том числе с использованием AOT-компиляции. А в конце — сравнение результатов и выводы.

Интересны особенности работы .NET в Yandex Cloud Functions? Добро пожаловать под кат.

Хочу разобраться

ConcurrentBag в C#

Level of difficultyEasy
Reading time6 min
Views4.1K

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

В многопоточном программирование постоянно нужно решать задачи, связанные с доступом к данным из нескольких потоков одновременно. И тут очень кстати ConcurrentBag — коллекция, которая была добавлена в .NET Framework 4.0 специально для таких случаев. Она подходит для ситуаций, где порядок элементов не важен. Если нужно просто кидать данные в мешок, пока куча потоков их туда же добавляет.

Поэтому ConcurrentBag создана для сценариев, где один и тот же поток часто и добавляет, и извлекает данные. Поэтому эта коллекция идеальна для паттернов типа Producer-Consumer, где один поток наполняет коллекцию, а другой извлекает данные для дальнейшей обработки. Но самое классное, что работает она по принципу work-stealing.

Читать далее

Флаттер крыла самолёта

Reading time16 min
Views19K

Флаттер‑ это загадочное явление в аэродинамике, которое есть, но объяснения которого до сих пор нет.

Про «флаттер» я уже писал отдельную «главу № 4» в первой своей большой статье про «Подъёмную силу крыла без „закона Бернулли“.

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

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

Читать далее

big Big FLOAT! Произвольная точность: сравниваем opensource-программы для научных и математических вычислений

Level of difficultyMedium
Reading time42 min
Views7.9K


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

Аппаратной точности чисел с плавающей запятой (поддерживаемых современными CPU) в 32, 64 и 80 бит может не хватить. И даже чисел четверной точности может не хватить при многочисленных итерациях, в каждой из которой может происходить потеря точности. Если операции неэлементарны, то мы не сможем применить алгоритмы коррекции ошибок по типу алгоритма Кэхэна.

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

Obsidian+Github вместо Notion: синхронизация, бекап и версионность (3-в-1)

Level of difficultyEasy
Reading time9 min
Views107K

О том, как сделать прозрачную синхронизацию заметок Obsidian между устройствами (Desktop, Android, iOS) через GitHub:

1. Без сторонних приложений (вроде iCloud, SyncThing, Termux и пр)
2. Бесплатно
3. Бонусом — резервная копия: как самих заметок, так и истории изменений.

В результате получается полноценная замена Notion: структурированные заметки с автоматической синхронизацией между устройствами.

Инструкция:

Изобретаю свой сложный способ поиска координат точки пересечения двух линий

Level of difficultyHard
Reading time21 min
Views5.4K

Начну с громкого заявления: я придумал способ найти точку пересечения двух отрезков, заданных координатами концов. Придумал давно, лет 7 назад, в 2017 году, примерно, да, путь к этой публикации был долог, в основном из-за лени.

И да, я его придумал потому что не смог нагуглить, может он где-то и без меня описан был, может за эти 7 лет кто-то написал что-то похожее, а может я придумал какую-то фигню, которую умные люди изобретать не станут...

Да что там сложного?!

Размерность Минковского и Two Nearest Neighbours (TwoNN)

Level of difficultyHard
Reading time7 min
Views6K

В этой статье я кратко изложу абстрактную идею того, что такое внутренняя размерность геометрической фигуры, попутно введя один из вариантов размерности Минковского, а затем расскажу про другой, приблизительный способ оценки внутренней размерности, который применим к реальным (то есть, конечным) облакам точек и называется Two Nearest Neighbours (TwoNN). В конце статьи для интересующихся будут оставлены ссылки на несколько научных статей, в которых второй способ используется для анализов эмбеддингов нейросетей.

Итак, давайте разбираться!

Читать далее

Рефакторим легаси при помощи ООП

Level of difficultyMedium
Reading time15 min
Views6.6K

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

Читать далее

Симуляция ткани методом Стёрмера — Верле

Level of difficultyEasy
Reading time6 min
Views2.5K

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

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

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

Читать далее

Удивительная история развития сортировки в JDK

Level of difficultyMedium
Reading time11 min
Views7.4K

Как вы считаете, если выполнить java.util.Arrays.sort(), то какая сортировка будет вызвана? Quicksort? Timsort? И та, и другая, потому что для объектов вызывается Timsort, а для примитивов (чисел int, long, float и так далее) — Dual-Pivot Quicksort. В JDK 6 для объектов использовался стандартный Merge sort, а для чисел классическая реализация Quicksort с одним опорным элементом, предложенная Джоном Бентли и Дугласом МакИлрой. В JDK 7 оба алгоритма поменялись: теперь объекты сортируются с помощью Timsort, автор Тим Петерс, а для простых типов данных используется Dual-Pivot Quicksort, предложенный мною вместе с Джоном Бентли и Джошем Блоком в 2009 году. Эта сортировка используется более 15 лет не только в JDK, но и в Android (хотя и немного устаревшая версия).

А зачем нам вообще второй алгоритм сортировки, если есть Timsort? Почему не использовать один и для объектов, и для примитивов? Сегодня я, как автор, расскажу историю Dual-Pivot Quicksort: как он начинался, как развивался и как продолжает развиваться сейчас.

Читать далее

Кастомизация окна прогресса в оболочке Windows

Level of difficultyMedium
Reading time9 min
Views5.2K

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

Но есть здесь и нюанс: загрузчик — это первое, что встречают пользователи, поэтому ему нужен GUI. А поскольку написан он на C# и с целью сохранения лёгкости компилируется перед исполнением (AOT, ahead-of-time), традиционные решения исключаются. Соблазнительным вариантом выглядит Avalonia, но в этом случае сам установщик станет больше той программы, которую он должен устанавливать.

Итак, что у нас остаётся? Можно углубиться в Windows API и создать собственное «окно», но это кроличья нора, сулящая кошмары при обслуживании. К счастью, в Windows есть диалоговое окно прогресса.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity