Как стать автором
Обновить
1
0

Пользователь

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

Некоторые малоизвестные фичи, фокусы и причуды языка C

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

В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).

Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan() не может устанавливать errno, поскольку в определённых ситуациях поведёт себя как strtod()» не слишком интересны.

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

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

Бесполезный паттерн в полярных координатах, открывающий полезное свойство простых чисел

Время на прочтение2 мин
Количество просмотров21K
Началось всё с обсуждение на математическом StackOverflow: Meaning of Rays in Polar Plot of Prime Numbers
«Недавно я начал экспериментировать с gnuplot и быстро сделал интересное открытие. Я построил все простые числа ниже 1 миллиона в полярных координатах, так что для каждого простого p (r, θ) = (p, p). Ничего особенного не ожидал, просто пробовал. Результаты впечатляют».

image

Если посмотреть на простые числа ниже 30000, можно увидеть спиральный узор.
Всего голосов 68: ↑62 и ↓6+78
Комментарии28

Зачем в iPhone чип, который убивает FaceID

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров51K

Разбирался я в низкоуровневой работе камер iPhone, и дошёл до FaceID — системы распознавания лиц, используемой Apple для разблокировки смартфона. И наткнулся внутри на интересную вещь: чип, единственное предназначение которого в том, чтобы вывести из строя FaceID. Навсегда.

О том, как в iPhone вообще работает FaceID, где там этот чип стоит, что именно он делает, зачем его сделали таким злым, и как в ремонте справляются с этой напастью — под катом!

Читать далее
Всего голосов 630: ↑629 и ↓1+747
Комментарии177

Программируем полётный контроллер на основе DIY проекта Flix

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров18K

У нас в МАИ, в 8-м институте, учатся будущие разработчики IT‑продуктов и софта для авиационных систем, аэропортов, логистики и много чего ещё интересного. Один из курсов с 2023 года мы решили посвятить разработке программного обеспечения для автопилота. В курсе всё как положено, с красивыми диаграммами регуляторов, кватернионами и кодами таких проектов как Ardupilot, PX4, Betaflight, iNav и другими.

Однако, довольно сложно сразу вкатиться в тему полетных прошивок — они переполнены всякими фичами и функционалом, так что неподготовленному разработчику сложно понять как же это всё работает. Поэтому долгое время я искал такой проект, который позволяет «на пальцах» объяснить как работает прошивка полётника. Таким проектом для меня стал Flix от Олега Калачева. Про опыт сборки проекта и изучения на его основе полетной прошивки со студентами и пойдет разговор в этой статье.

Полетели !
Всего голосов 40: ↑39 и ↓1+50
Комментарии22

Linux Pipes – медленные

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров13K

Я пишу программу для сверхбыстрого кодирования/декодирования азбуки Морзе и использую pipe для передачи данных. При этом pipe работает очень медленно. Давайте разберемся почему.

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

Как подключить мультиметр к компьютеру

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров16K

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

В бюджетных мультиметрах ZT102 и ZT301, которые построены на чипе DTM0660, можно реализовать подключение к компьютеру, но для этого придётся редактировать EEPROM и вносить изменения на печатную плату. Это несложно и Kerry Wong описывал как это сделать на примере мультиметра ennoLogic eM860T.

В тоже время у моего настольного мультиметра Agilent U3402A на задней панели уже есть порт RS232, но на нём указано "используется только для калибровки". Аналогичное предупреждение есть и в инструкции пользователя на русском и английских языках.

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

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

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров8.1K

Статический анализ — это очень мощный инструмент, позволяющий следить за качеством кода. Предлагаем вместе попробовать написать простой Lua анализатор на Java, чтобы понять, как устроены статические анализаторы кода внутри.

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

Светящиеся конденсаторы и дисплеи на их основе (в том числе DIY) на любой поверхности? Почему нет…

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров12K
Картинка Freepik

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

Несмотря на странное, на первый взгляд, утверждение, всё более, чем реально, и, мало того, известно около века…
Читать дальше →
Всего голосов 54: ↑52 и ↓2+70
Комментарии24

Тысяча и одна библиотека С++

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

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++
Всего голосов 82: ↑81 и ↓1+92
Комментарии23

Разработка сложных процессорных систем на примере модуля SMARC

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров8.4K

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

Я решил описать некий шаблон (скорее один из), который, возможно, кому-то поможет в проектировании многослойных плат. Если мы говорим конкретно о разработке, то она включает в себя несколько этапов. Я буду писать об одном цикле — от получения технического задания, до передачи герберов на производство печатных плат. Затрону подготовку задания на согласование импедансов, так как это важно с самого начала трассировки. Сознательно не буду говорить о выборе компонентов, выгрузке конструкторской документации, поиске и исправлении ошибок после сборки плат и т. д.

Статья получилась большая, но, как говорится, из песни слова не выкинешь. Если вам все еще не страшно — добро пожаловать под кат!
Читать дальше →
Всего голосов 72: ↑72 и ↓0+91
Комментарии40

USB монитор из Futaba GP1160A02A

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров26K

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

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

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

Про один из таких дисплеев, изготовленный по этой технологии и будет рассказано в этой статье, а именно про дисплейный модуль Futaba GP1160A02A.

Эта статья не будет про подключение этого дисплея к какой-нибудь “ардуине” стандартными способами. Это слишком просто и скучно. Речь пойдёт про обход ограничений, наложенных производителем, и попытки выжать из этого дисплея всё, что позволяет технология.

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

Поиск по префиксу или тайные операторы PostgreSQL

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров4.8K

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

Интересно, что там?
Всего голосов 15: ↑15 и ↓0+20
Комментарии8

Постройка простой проволочной КВ антенны с согласующим устройством

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров19K

Живя вне города с его чудовищной помеховой обстановкой и периодически проводя время с паяльником в руках, грешно не прикоснуться и к миру радио, естественным образом начинающегося с антенны и заземления. Антенно-мачтовое хозяйство — пожалуй, самое крупное, материалоёмкое и дорогостоящее сооружение для КВ радиоустановки — на низкочастотных радиолюбительских диапазонах: это десятки метров вверх и в длину. Существуют, однако, и более скромные укороченные варианты с худшими, но всё ещё приемлемыми параметрами. Ими и займёмся.
Читать дальше →
Всего голосов 75: ↑73 и ↓2+94
Комментарии101

Дайте мне 15 минут, и я изменю ваш взгляд на GDB

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров14K

Материал подготовлен на основе выступления с CppCon 2015 "Greg Law: Give me 15 minutes & I'll change your view of GDB" (доступно по ссылке ). Многие моменты я изменял и корректировал, поэтому учтите, что перевод достаточно вольный.

И да, вынесем за скобки вопрос о том, насколько GDB в целом удобная или неудобная программа, и что в принципе лучше использовать для дебаггинга: в данной статье будет рассматриваться именно работа с GDB.

В статье будет рассматриваться отладка кода на C в ОС Linux.

Читать далее
Всего голосов 47: ↑45 и ↓2+63
Комментарии16

Запускаем Stable Diffusion на GPU AMD Radeon в Docker

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6.6K

Для запуска нам понадобится Ubuntu с установленными: git, make, docker и ROCm.

Инструкция по запуску короткая и простая, поэтому дополнительно разберём пример генерации изображения для этой статьи и продеманстрируем работу Stable Diffusion на AMD Radeon. Всё нижеизложенное протестировано на AMD Radeon RX 7900 XTX.

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

Управление напряжением PWM сигналом (PWM+RC=DAC)

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров11K

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

Существует очень остроумный способ собрать DAC используя PWM сигнал и аналоговый RC фильтр. На выходе будет желаемое напряжение. Причем, уровнем этого напряжения можно управлять цифровым образом из программы в микроконтроллере.

В этом тексте я написал как мне это удалось.

Читать далее
Всего голосов 15: ↑13 и ↓2+18
Комментарии182

Пайплайны в GitLab для микросервисов

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

Какие два самых любимых дела у программистов? Автоматизировать и переписывать на микросервисы. Так сложилось, что в нашу команду выделенных серверов тоже постучались микросервисы. Но в этой статье не будет плюсов и минусов архитектурных подходов. Вместо этого я расскажу про организацию CI для автоматизации сборки, тестирования и деплоя приложений.

Начнем с основ на примере монолитного приложения, а потом усложним их микросервисами и постараемся избавиться от однотипного кода. А еще…
Читать дальше →
Всего голосов 57: ↑57 и ↓0+74
Комментарии4

Сложнейшая проблема компьютерных наук: центрирование

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров34K

Заявляю: «Мы, как цивилизация, разучились использовать центрирование». Ну то есть мы, конечно, знаем, как это делать — очень просто:

display: flex;
justify-content: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

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

Ещё можно использовать сетку:

display: grid;
justify-items: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Также не спрашивайте, почему выражение justify-content стало justify-items.
Читать дальше →
Всего голосов 194: ↑189 и ↓5+227
Комментарии56

Краткое сравнение популярных функций измерения времени

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5.8K

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

Вот что получилось
Всего голосов 27: ↑27 и ↓0+31
Комментарии13

Какие возможности клавиатур подглядеть у Tinder, YouTube и Revolut

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.3K

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

В статье покажу:

что влияет на внешний вид клавиатур,

виды нативных клавиатур и их поведение,

как отличается применение клавиатур для одних и тех же команд.

Обычно разработчик сам решает, какую клавиатуру подключить в зависимости от назначения поля ввода. После прочтения статьи вы тоже будете знать, какие клавиатуры существуют, и сможете влиять на выбор клавиатуры для приложения.

Читать далее
Всего голосов 31: ↑30 и ↓1+34
Комментарии10
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность