Search
Write a publication
Pull to refresh
0
Иван @sivolob93read⁠-⁠only

User

Send message

Изобретаем JPEG

Reading time28 min
Views178K

Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье «Декодирование JPEG для чайников»). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.

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

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

Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.
Читать дальше →

Второй номер народного FPGA журнала! «Погоди-ка, а когда был анонс первого?»

Level of difficultyEasy
Reading time4 min
Views5K

ПЛИС-культ привет, FPGA хабрунити.

На днях состоялся анонс уже второго номера народного FPGA журнала FPGA-Systems Magazine :: № BETA (state_1). В нем 200+ страниц и 20+ статей и небольших заметок по направлениям FPGA / RTL / Verification (ПЛИС сегодня это не только про знание HDL и Vivado c Quartus'ом). Журнал бесплатный и распространяется в виде pdf-ки.

Читать далее

Весь Росатом работал на Джире — и что случилось в день Х

Reading time10 min
Views132K
image

В 2018–2019 году мы уже догадывались, что нужно какое-то импортозамещение, потому что как-то немного странно, что Росатом зависит от зарубежного вендора. Джира проникала в структуру незаметно и понемногу, и в какой-то момент оказалось, что на ней ведутся многие проекты кроме строительства АЭС и других объектов. И речь не про ИТ-проекты, а вообще про все проекты, которые у нас есть.

Пару лет мы лежали в сторону поиска аналога (которого на самом деле нет).

1 февраля 2021 году Atlassian объявил о прекращении поддержки серверной версии. Решили запланировать переезд в дата-центр, но увидели, что это такой хитрый способ поднять цену в полтора раза. Стало грустно, но аналогов на рынке всё ещё не было.

Потом был технический сбой на 2 недели. Люди за 2 недели потеряли свои данные. Стало ещё грустнее.

Потом пришло письмо счастья, что аккаунты РФ будут отключены. Но сроки не обозначили.

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

Системы контроля версий: Fossil, часть I

Reading time10 min
Views42K
Приветствую вас, коллеги!

Относительно недавно здесь публиковался опрос по используемым системам контроля версий. Как и ожидалось, с большим отрывом победил Git, а Fossil даже не был включен в список, только в комментариях пару раз промелькнул. Поиск по Хабру показал, что здесь о Fossil практически ничего не писали. Поэтому я и решил опубликовать эту статью — тем более, что русскоязычная информация о Fossil крайне скудна и однообразна.
Читать дальше →

Кто реально угрожает C++ (нет, Rust, не ты)

Reading time14 min
Views81K

Привет! Меня зовут Александр Каленюк, и я крепко подсел на C++. Пишу на C++ 18 лет кряду, и все эти годы отчаянно пытаюсь избавиться от этой разрушительной зависимости.

Всё началось в конце 2005 года, когда мне довелось писать движок для симуляции 3D-пространства. В этом движке было буквально всё, чем язык C++ мог похвастаться в 2005 году. Трёхзвёздочные указатели, восьмиуровневые зависимости, C-подобные макросы повсюду. Кое-где – вкрапления ассемблера. Итераторы в стиле Степанова и мета-код в стиле Александреску. В общем, всё. Кроме ответа на самый важный вопрос: зачем?

Читать далее

Алгоритм деления 2W-разрядных чисел с использованием операций с числами разрядностью W

Level of difficultyMedium
Reading time9 min
Views2.3K

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

Читать далее

Питер Норвиг: автор лучшего в мире учебника по ИИ

Level of difficultyEasy
Reading time5 min
Views20K


Питер Норвиг (Peter Norvig) — выдающийся учёный, один из отцов современной ИИ-разработки. После сингулярности ИИ точно оставит его в живых в знак благодарности.

Норвиг не только хороший программист, но и теоретик программирования, учёный и преподаватель, в длинном резюме перечислено 58 статей, а количество цитирований на сегодняшний день составляет 78 830.

Основное признание Норвиг получил как автор учебника «Искусственный интеллект: современный подход», который в наше время считается самым популярным учебником по ИИ в вузах. Эта фундаментальная работа претерпела уже четыре переиздания.
Читать дальше →

NVM+RVC = вокал профи?

Level of difficultyMedium
Reading time17 min
Views20K

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

NVM (Neural Voice Model) — нейронная голосовая модель

RVC (Retrieval-Based Voice Conversion) — преобразование голоса на основе поиска

Я не претендую на полноту раскрытия темы — она емкая и стремительно развивается, в ней каждую неделю, месяц появляется что-то новое. Но надеюсь, что мой опыт поможет интересующимся войти в неё быстрее.

Да, еще. Обычно профессионалом считают того, кто навыку обучался, им владеет или того, кто этим зарабатывает. Но все мы знакомы с людьми, которые прекрасно поют, но они не заканчивали ДМШ, колледж, консерваторию, не учились вокалу и не зарабатывают пением. К слову, вокальное отделение — единственное в консерватории, в приеме на которое не требуется аттестат музыкального колледжа, а возрастной порог 35 лет (по крайней мере, так было 20 лет назад).

Читать далее

Почему B-деревья быстрые?

Level of difficultyEasy
Reading time7 min
Views55K

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее

Простая проблема приводит к слишком большим числам для нашей Вселенной

Reading time9 min
Views27K

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

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

Звучит достаточно просто. «Вы можете пойти в начальную школу и рассказать об этом детям», — сказал Кристоф Хаазе, учёный из Оксфордского университета. «Люди подумают: «Это должно быть легко». 

Но математическая задача, лежащая в основе дилеммы Алисы и называемая проблемой достижимости для систем сложения векторов, на удивление тонкая.

Читать далее

Formify: от идеи до публичной беты, как я создал бесплатный конструктор форм в виде текстового документа (2024)

Reading time3 min
Views1.4K

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

Читать далее

Собираем объёмный дисплей на Raspberry Pi

Level of difficultyMedium
Reading time16 min
Views23K

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

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

К вопросу о RS485

Level of difficultyMedium
Reading time7 min
Views13K

Недавно, при отладке одного устройства, внезапно выяснилось, что RS485 не хочет работать (вернее, работает через раз), если два устройства не связаны землей, от слова совсем. Вообще то данный факт не является откровением и я в своих кабелях земли протаскиваю, но в данном конкретном случае имел место обрыв провода. Но после того, как дефект был обнаружен и устранен, внезапно возник вопрос — а как вообще устроен приемник сигналов, если в соответствии со стандартом он должен правильно обрабатывать сигналы, имеющие общее напряжение (Vcm) от -7В до 12В, питаясь при этом от 3.3В (ну или от 5В) относительно земли. Да, я знаю о существовании операционных усилителей (а компаратор — то же ОУ), способных обрабатывать сигналы «rail‑to‑rail» (импорто‑замещенное обозначение «от шины до шины» мне не нравится, можете пожаловаться кому следует), но в данном случае входные сигналы откровенно за шины (землю и питание) выходят.

Если Вам тоже интересно, Вам сюда

Как утереть нос NumPy с помощью двумерного БПФ

Reading time5 min
Views10K

Двумерное преобразование Фурье — один из важнейших алгоритмов компьютерной науки этого столетия. Он нашел широкое применение в нашей повседневной жизни — от фильтров Instagram до обработки MP3-файлов.

Наиболее частой реализацией, используемой рядовым пользователем, иногда даже неосознанно, является адаптация из NumPy. Однако, несмотря на популярность, их алгоритм не является самым эффективным. С помощью нескольких простых манипуляций и статьи 2015 года мы обошли алгоритм NumPy по производительности аж на 30-60%. Основная проблема этой реализации заключается в том, что она изначально основана на слабом с точки зрения производительности алгоритме.

По своей сути алгоритм, реализуемый NumPy, является поочередным применением обычного одномерного БПФ (FFT) к двум измерениям, что очевидно не может быть оптимальным решением.

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

Читать далее

eXpress подкрался незаметно: рассматриваем российскую альтернативу Zoom

Level of difficultyMedium
Reading time7 min
Views21K

Хабр, привет! На связи Владимир Сергеев, эксперт направления инфраструктурных решений К2Тех. Мне все больше кажется, что взлет и популярность Zoom в последние несколько лет — это во многом про то, чтобы оказаться в нужное время в нужном месте и быть готовым к открывшимся возможностям. Пандемия 2020 года — яркий тому пример. 

Такой шанс теперь выпал и российским разработчикам. Привычные мировые сервисы — сегодня есть, а завтра нет уже не работают. Более того, тот же Zoom не получится развернуть в своей инфраструктуре. Нет просто такой возможности заякорить его on-prem. И естественно, на место зарубежных игроков выстроилась очередь из молодых и амбициозных отечественных команд, которые созрели для конкуренции. Давайте посмотрим на один из их продуктов поближе.

Встречайте eXpress!

Библиотека libopencm3: Быстрый старт (Часть 3). Работа с USART, прерываниями, I2C и таймерами

Level of difficultyMedium
Reading time26 min
Views5.9K

Часть 1. Настройка окружения для работы с libopencm3

Часть 2. Работа с GPIO, SPI, отладка проекта при помощи GDB

Часть 3. Работа с USART, прерываниями, I2C и таймерами

Данная статья является заключительной в цикле, посвященном быстрому старту разработки под STM32 при помощи libopencm3. Без лишних слов приступим к рассмотрению оставшейся периферии, наиболее часто используемой в микроконтроллерах.

Читать далее

Электронные книги? Аудиокниги? Смешать, но не взбалтывать

Level of difficultyEasy
Reading time13 min
Views14K

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

Читать далее

Настройка NVMe over TCP — для тех, кому надо подключить больше 1 диска единственной конфигурации из всех примеров в Сети

Level of difficultyMedium
Reading time13 min
Views19K

Технология NVMe через различные фабрики (далее NVMeOF) оформлена в качестве стандарта летом 2016 года, она была встроена в пятую ветку ядра Linux.

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

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

Меня зовут Алексей Дрожжов, я старший инженер в билайне, и в этом посте расскажу, как мы решали эту задачу.

Задача: подключить много дисков с нескольких серверов

Читать далее

Детектор Судного дня или как я разработал датчик радиации для Home Assistant

Level of difficultyEasy
Reading time6 min
Views10K


С чего всё началось


В начале 2023 года, во многих СМИ появилась информация, что стрелки часов Судного дня перевели на десять секунд. Сейчас они замерли на отметке 90 секунд до полуночи, и теперь часы показывают самый высокий уровень риска ядерной катастрофы за всю историю проекта. Эта информация побудила меня создать устройство для мониторинга фоновой радиации — мог бы написать я, но на самом деле, всё началось гораздо раньше и об этом расскажу далее.
Читать дальше →

Как я проектирую и разрабатываю расширения Python на Rust

Level of difficultyMedium
Reading time16 min
Views5.7K

В этой статье я хочу рассказать о том, как я проектирую комплексные расширения для Python на Rust с использованием PyO3 и почему я принимаю те или иные проектные решения.

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

Information

Rating
Does not participate
Registered
Activity

Specialization

Quality Assurance Engineer
Middle
Python
Linux
SQLite
OpenCV
Git
Docker