Pull to refresh
1
0

Пенс

Send message

Экран для вывода данных через COM-порт

Level of difficultyEasy
Reading time3 min
Views9.6K
Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в COM-порт, который будет слушать микроконтроллер и отображать приходящую строку на своём дисплее. Под катом простейшая реализация этого на микроконтроллере ATtiny13 и 0,96'-экране SSD1306 с разрешением 128х32.


Читать дальше →
Total votes 19: ↑19 and ↓0+28
Comments62

Современные способы запуска фоновой работы в Android

Level of difficultyMedium
Reading time18 min
Views4.9K

На протяжении нескольких лет каждый релиз новой версии Android вводит ограничения на существующие API и новые API для запуска работа в фоне в зависимости от её типа. Я собрал все актуальные способы запуска для Android и рассказываю когда что стоит выбирать: WorkManager, Service или что-то другое

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments11

Опасность устарела: несколько важных нюансов в новых стандартах C++

Reading time16 min
Views16K
Undefined behavior (UB) — боль, знакомая каждому разработчику со стажем; эдакий «код Шредингера», когда не знаешь, правильно тот работает или нет. К счастью, стандарты языка С++20/23/26 привнесли относительно неопределенного поведения кое-что новое. И довольно важное, если вы — архитектор ПО, а «плюсы» — ключевой стек вашей компании (подробнее о том, как и почему мы в «Лаборатории Касперского» много используем С++, читайте здесь).

В этой статье я со своих позиций Senior Software Architect и Security Champion в микроядерной операционной системе KasperskyOS рассмотрю кейсы-ловушки, в которые можно попасть практически в любом из стандартов, и покажу, что меняется в С++20/23/26, — уменьшается ли количество кейсов с неопределенным поведением, и становится ли С++ безопаснее.


Читать дальше →
Total votes 58: ↑56 and ↓2+60
Comments76

Разработка ядра – API для прошивки

Level of difficultyMedium
Reading time9 min
Views4.3K

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

Читать далее
Total votes 20: ↑18 and ↓2+25
Comments4

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

Level of difficultyEasy
Reading time6 min
Views43K

Я всегда знал, что если отвлекать человека во время работы, это вредит делу. Но до конца не осознавал, насколько это серьёзная проблема. Особенно для разработчиков ПО.

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

Читать далее
Total votes 54: ↑46 and ↓8+44
Comments86

Описание внутреннего git протокола

Level of difficultyMedium
Reading time12 min
Views7.4K

Одним из важным инструментом разработчика, в не зависимости от языка (и религиозных убеждений), является система контроля версий (VCS). И практически промышленным стандартом стала такая распределенная система как GIT. В повседневной работе мы (разработчики, DevOps инженеры, технические писатели и все причастные) используем ее чтобы нести людям добро и свет объединять усилия команд в работе над нашими проектами. И все давно уже выучили «на зубок» основные команды (если не выучили то бегом учить, тут есть отличная книжка) и превратили в рутину то что совсем не давно (олды тут?) казалось гениальным, сложным, а кому то магическим. А современные IDE еще больше нам упростили жизнь, спрятав от нас командную строку и git команды, заменив на возможность кликать мышкой. Но постойте, разве вам в детстве не было интересно понять как та или иная игрушка устроена внутри, как работает холодильник или мотор в папиных жигулях (олды все же тут?)? Так вот и мне стало интересно заглянуть под капот GITу. Конечно как и с любым сложным механизмом уровень этого «заглядывания» под капот может быть разным, кому то будет достаточно увидеть крышку мотора и отверстие куда лить незамерзайку, а кому то «заглянуть под капот» это дойти до марки стали используемой для изготовления той или иной детали жигулей. Поэтому давайте сразу обозначим уровень нашего погружения в этой статье. В статье мы рассмотрим в деталях что происходит когда мы делаем привычные нам «git clone/push», посмотрим как этот процесс устроен и какие есть в нем возможности. Сущности и процессы, которые конечно же останутся за рамками этого повествования, можно будет самостоятельно найти (ссылку я указал выше), ибо охватить такую обширную тему как Git, а тем более его подкапотное пространство, не представляется возможным за раз. Так что все кому интересно прошу под кат.

Читать далее
Total votes 18: ↑14 and ↓4+16
Comments4

Виртуальная сетевая среда для тестирования сетевых протоколов. Используем QEMU+YOCTO+TAP

Reading time5 min
Views7.7K


Идея создания сетевой тестовой среды возникла когда пришла необходимость запускать и отлаживать устройства с IPsec и GRE протоколами. С похожими проблемами сталкивались и разработчики strongSwan. Проблема была с прогоном unit тестов. Они приготовили виртуальную сеть на базе UML (user mode linux). В этом документе описано в общих чертах, что это такое и как работает. Подносить виртуальную сеть под UML буду при первой возможности, a на первом этапе тестовая среда была поднята на QEMU и на дистрибуциях приготовленных под YOCTO. Итак даная статья описывает: как создать свою дистрибуцию linux, поднять и настроить несколько инстанций QEMU, настроить виртуальную сеть и как пример поставить GRE туннель. Получается очень полезная штука для отладки и тестирования маршрутизаторов. Так, что всех заинтересованных приглашаю ниже.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments5

Создаем ELF-файл с отладочной информацией (DWARF) вручную (для микроконтроллеров ARM)

Reading time27 min
Views30K

Введение


С недавнего времени я увлекся микроконтроллерами. Сначала AVR, затем ARM. Для программирования микроконтроллеров существует два основных варианта: ассемблер и С. Однако, я фанат языка программирования Форт и занялся портированием его на эти микроконтроллеры. Конечно, существуют и готовые решения, но ни в одном из них не было того, что я хотел: отладки с помощью gdb. И я задался целью заполнить этот пробел (пока только для ARM). В моем распоряжении была плата stm32vldiscovery с 32-битным процессором ARM Cortex-M3, 128кБ flash и 8 кБ RAM, поэтому я и начал с нее.
Писал я кросс-транслятор Форта конечно на Форте, и кода в статье не будет, так как этот язык считается экзотическим. Ограничусь достаточно подробными рекомендациями. Документации и примеров в сети по предмету почти нет, некоторые параметры подбирались мной путем проб и ошибок, некоторые — путем анализа выходных файлов компилятора gcc. Кроме того, я использовал только необходимый минимум отладочной информации, не касаясь, например, relocation-ов и множества других вещей. Тема очень обширна и, признаюсь, разобрался я с ней только процентов на 30, что оказалось для меня достаточным.
Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments3

PLC.JS — первый по настоящему свободно программируемый контроллер

Level of difficultyMedium
Reading time7 min
Views13K

PLC.JS — первый по настоящему свободно программируемый контроллер

Мы — небольшая команда инженеров в сфере автоматизации, и у нас есть мечта: чтобы инженерные профессии в сфере АСУ ТП стали престижными и уважаемыми в нашей стране.

Метод, который мы считаем наиболее эффективным в решении данной проблемы, — это снижение порога вхождения ИТ-специалистов в АСУ ТП и их «удержание» в отрасли с помощью популяризации GNU/Linux IIoT-устройств.

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

Читать далее
Total votes 41: ↑39 and ↓2+51
Comments160

Ассемблер RISC-V для начинающих

Reading time12 min
Views42K

Если вы не знаете ни одного ассемблера, или, возможно, не имеете большого опыта кодинга как такового, то ассемблер RISC-V может быть одним из лучших вариантов для того, чтобы погрузиться в эту тему. Конечно, материалов по ассемблеру x86 гораздо больше. Больше людей, которые могут в этом помочь. Но x86 - это чудовище, имеющее более 1500 различных инструкций.

Архитектура RISC-V, напротив, придумана специально для того, чтобы быть простой в изучении и вместе с тем, практически эффективна для реализации высокопроизводительных микропроцессоров.

Если вам необходим хороший старт, и вы не знаете ничего о микропроцессорах, вы можете прочесть мою статью "Как работает современный микропроцессор?" (How Does a Modern Microprocessor Work?).

Если вы хотите чего-нибудь простого и весёлого, можете начать с различных игр, в основе которых лежит программирование на ассемблере: Learn Assembly Programming the Fun Way.

Другим может понравиться ретропроцессор, такой, как 6502, использовавшийся в Commodore 64. Но проблема в том, что он окончательно устарел. При его разработке не учитывались реалии сегодняшнего дня.

Большой плюс RISC-V состоит в том, что он обладает современным и простым набором команд, спроектированным с учётом современных требований, таких как медленный доступ к памяти, использование предсказателя переходов, суперскалярного out-of-order выполнения команд и т.д.

Если вам интересно всё это, прочтите: Why Is Apple’s M1 Chip So Fast?

Перед тем, как мы начнём, можете распечатать это: James Zhu RISC-V Reference.

Читать далее
Total votes 35: ↑34 and ↓1+50
Comments33

Анализируем HTTP трафик в Wireshark

Reading time4 min
Views12K

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

При этом, не все умеют эффективно использовать тот функционал который представляет анализатор для работы с дампами трафика.

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

Читать далее
Total votes 13: ↑13 and ↓0+15
Comments1

Почему квантовая механика – это теория физики Мультивселенной

Level of difficultyMedium
Reading time32 min
Views5.4K

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

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

Читать далее
Total votes 14: ↑11 and ↓3+12
Comments65

Прогрессивный налог — социальная справедливость или латание дыр бюджета?

Reading time4 min
Views29K

Примечательная черта налоговой политики РФ «нулевых» годов — это фиксированная ставка налогообложения на доходы физлиц. Последние 20 лет 13% от полученного дохода платил любой гражданин: и перебивающийся минимальной зарплатой, и выбирающий, на какой из своих яхт встретить Новый год.

Недавно появились новости о введении в РФ новой прогрессивной шкалы налогообложения. Поскольку власти завели речь о справедливости, мы посчитали необходимым разобраться, о справедливости для кого идёт речь.

Читать далее
Total votes 130: ↑108 and ↓22+113
Comments357

Git. Руководство по оформлению веток и коммитов

Level of difficultyEasy
Reading time8 min
Views23K

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

Познать истину
Total votes 17: ↑15 and ↓2+13
Comments16

Почему MMAP не лучший выход

Level of difficultyMedium
Reading time23 min
Views6.1K

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


MMAP захватила умы программистов СУБД на многие десятилетия, как альтернатива буферу данных. И вот здесь следует отметить, что в mmap имеются серьёзные проблемы с корректностью и скоростью работы с данными в современных СУБД. В реальности, некоторые известные СУБД сперва использовали mmap для работы с "больше-чем-вмещается-в-память" базами данных, но вскоре обнаружили эти скрытые ограничения, которые принудили их к самостоятельному управлению файловым вводом/выводом, после заметных трат на инженерные исследования. В этом смысле mmap и СУБД подобны сочетанию кофе и острой пищи: неудачное сочетание, которое не очевидно, пока сам не попробуешь.


Покуда разработчики по прежнему пытаются использовать mmap в новых СУБД, мы написали эту статью, чтобы предупредить остальных, что mmap это не подходящая замена привычному буферу. Далее мы обсудим основные недостатки mmap, а также покажем явные ограничения производительности, которые мы обнаружили в наших экспериментах. На основании этих находок мы поделимся рецептами, когда разработчикам СУБД следует избегать mmap для реализации файлового ввода/вывода.

Читать дальше →
Total votes 24: ↑24 and ↓0+34
Comments7

Xv6: учебная Unix-подобная ОС. Заключение

Level of difficultyMedium
Reading time1 min
Views2K

Книга рассказала об идеях, что лежат в основе операционных систем, на примере xv6. Одна часть кода xv6 выражает основные идеи и каждая строка кода важна - переключение потоков, пространства пользователя и ядра, блокировки и т.д. Другая часть кода воплощает алгоритмы и структуры данных, которые легко заменить на другие - политика планирования процессов, структуры файлов на диске, устройство журнала файловой системы и т.д. Книга полагается на интерфейс системных вызовов Unix, который оказался успешным настолько, что идеи легли в основу и других современных ОС.

Книга об xv6 на русском языке в формате PDF, HTML и EPUB.

Читать далее
Total votes 7: ↑7 and ↓0+9
Comments1

Xv6: учебная Unix-подобная ОС. Глава 9. Еще раз о параллельных потоках

Level of difficultyMedium
Reading time5 min
Views1.3K

Трудно добиться быстродействия ядра, организовать параллельную работу потоков и при этом писать ясный код. Блокировки помогают параллельным потокам работать корректно, но иногда блокировки использовать трудно. Глава расскажет о хитрых сценариях с блокировками в xv6 и о сценариях без блокировок.

Читать далее
Total votes 3: ↑3 and ↓0+4
Comments0

Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки

Level of difficultyMedium
Reading time13 min
Views2.7K

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

Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе.

Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments3

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

Level of difficultyMedium
Reading time6 min
Views3.8K

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments0

Xv6: учебная Unix-подобная ОС. Глава 4. Прерывания и системные вызовы

Level of difficultyMedium
Reading time10 min
Views5K

Глава расскажет, как xv6 обрабатывает прерывания на RISC-V и о хитростях виртуальной памяти: как использовать ошибки доступа к страницам, чтобы оптимизировать работу ОС.

Глава расскажет о копировании страниц при записи, ленивой выдаче страниц, выдаче страниц по необходимости и сбросе страниц на диск.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments0

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Программист IBM mainframe