Pull to refresh
42
Karma
0.4
Rating

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

Как устроена работа thread_local переменных: разбираемся и добавляем поддержку в учебную ОС

Abnormal programming *C++ *Assembler *System Programming *Compilers *

Эта статья написана по мотивам моей курсовой работы, основной смысл которой описан здесь. В процессе работы над ней мне понадобилось добавить в учебной ОС, над которой я работал, поддержку thread_local переменных, о чём я и хочу здесь рассказать в надежде что кому-то это окажется полезно.

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

Код расположен в двух репозиториях.

Читать далее
Total votes 7: ↑6 and ↓1 +5
Views 1.5K
Comments 4

Apache Cassandra: механизмы репликации и поддержания согласованности

NoSQL *Distributed systems *
Sandbox

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

Читать далее
Total votes 14: ↑13 and ↓1 +12
Views 2.5K
Comments 0

Wasteland 1: The Original Classic (1988|2013)

Games and game consoles

Wasteland 1, разработанная Interplay и изданная Electronic Arts в 1988 году, самая старая компьютерная ролевая игра, которую мне удалось пройти на данный момент. Пишу об этом в начале, так как это важно для понимания того как игра воспринимается современными игроками. Игра была переиздана в 2013 году для современных платформ.

Во вселенной Wasteland в 1998 году произошёл ядерный конфликт межу США и Советским Союзом, в результате чего большая часть планеты стала необитаемой пустошью. Группу армейских инженеров США ядерный удар застал во время их строительных работ на юго-западе страны. В поисках укрытия они наткнулись на тюрьму для приговорённых к смерти преступников, которая была также снабжена производственными мощностями. Не долго думая, бравые военные выгнали преступников в пустошь, ну их же всё равно к смерти приговорили, а сами заняли здание тюрьмы. Через многие десятилетия, потомки этих военных и выживших жителей прилегающих территорий, стали называть себя «пустынными рейнджерами» в честь традиций техасских и аризонских рейнджеров. Действие Wasteland разворачивается в 2087 году, оказалось, что выжившие есть и в других населённых пунктах. Ваш отряд рейнджеров направляют исследовать беспокойную ситуацию в тех местах и помочь местному населению.

Читать далее
Total votes 18: ↑18 and ↓0 +18
Views 3.2K
Comments 1

Как стиральная машина управляет двигателем. Часть I — подключение двигателя и алгоритм стабилизации

Algorithms *Circuit design *Popular science Old hardware DIY
Tutorial


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

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

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

Погода на дворе не очень, очередной прототип отправляется на опытную эксплуатацию, почему бы не рассказать о чём то интересном? Давно я не писал на Хабр!
Почему двигатель, почему стиральные машины?
Ответ под катом
Total votes 105: ↑103 and ↓2 +101
Views 28K
Comments 273

Делаем из Mastech MS6100 частотомер

Manufacture and development of electronics *Electronics for beginners

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

Читать далее
Total votes 64: ↑64 and ↓0 +64
Views 5.7K
Comments 15

Подключаем алфавитно-цифровой экран к VGA

RUVDS.com corporate blog Interfaces *Periphery DIY Electronics for beginners
Tutorial

Нет, это не шутка. В действительности к VGA, DVI, HDMI можно подключать различные устройства, и даже питать их. И это очень удобный способ работы с различными устройствами и нестандартное использование обычного интерфейса.

Ларчик просто открывается, всё дело в том, что в интерфейсе VGA (а также в других видеоинтерфейсах) присутствует ещё одна шина данных I²C, которая доступна для использования и её легко можно применить в своих самоделках.
Читать дальше →
Total votes 129: ↑127 and ↓2 +125
Views 12K
Comments 46

Векторное управление электродвигателем «на пальцах»

НПФ ВЕКТОР corporate blog Computer hardware Robotics Physics
Tutorial
— Что такое векторное управление?
— Держать ток под 90 градусов.


Термин «векторное управление» электродвигателями знаком всем, кто хоть как-то интересовался вопросом, как с помощью микроконтроллера управлять двигателем переменного тока. Однако обычно в любой книге по электроприводу глава про векторное управление находится где-нибудь ближе к концу, состоит из кучи волосатых формул с отсылками ко всем остальным главам книги. Отчего разбираться в этом вопросе совсем не хочется. И даже самые простые объяснения всё равно держат путь через дифференциальные уравнения равновесия, векторные диаграммы и кучу другой математики. Из-за чего появляются примерно вот такие вот попытки как-то закрутить двигатель без использования мат.части. Но на самом деле векторное управление – это очень просто, если понимать принцип его работы «на пальцах». А там уже и с формулами разбираться в случае надобности будет веселее.
Читать дальше →
Total votes 46: ↑46 and ↓0 +46
Views 268K
Comments 47

Адаптивный ПИД-регулятор поддержания уровня металла в кристаллизаторе УНРС

High performance *System Analysis and Design *Industrial Programming *The future is here
Sandbox

Мы все обожаем восхищаться шедеврами инженерного искусства, поскольку в деталях понимаем как все устроено и сколько сил и ресурсов было вложено в решение, будь то смартфон, автомобиль или космический корабль. О встрече с таким шедевром я и хочу поведать.

Система поддержания уровня металла в кристаллизаторе компании Vesuvius Sert (Франция) как рождественский слоёный пирог, пропитанный насквозь изысканным французским коньяком. Чем глубже ковыряешся в деталях, тем более утончённые вкусы всплывают на поверхность.

В результате 40-летнего опыта развития системы, образовался шедевральный монстр, обросший расширенными корректорами и контроллерами.

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

Читать далее
Total votes 6: ↑6 and ↓0 +6
Views 2.2K
Comments 11

Глубокое погружение в Java Memory Model

Programming *Java *


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Total votes 109: ↑109 and ↓0 +109
Views 41K
Comments 58

Вы тоже любите дисплеи?

Reverse engineering *Programming microcontrollers *DIY Electronics for beginners
Sandbox

Началось всё с того, что, покупая какие-то вещи на барахолке, увидел у продавца разные симпатичные дисплейчики от мобильных телефонов и не только за небольшую цену. Решил взять за компанию в количестве трёх штук - "куда-нибудь пригодится". Шло время, делались разные проекты, а дисплеи мирно ждали своего часа где-то на полке. Но вот настал день, когда я добрался до них и решил всё-таки их оживить. Однако вот незадача, о данной модели экрана почти ничего неизвестно... Вот и обратная разработка на подходе. Интересно? Тогда поехали!

Читать далее
Total votes 222: ↑222 and ↓0 +222
Views 36K
Comments 38

Пособие по программированию модулей ядра Linux. Ч.3

RUVDS.com corporate blog Configuring Linux **nix *Development for Linux *
Translation

От редакции: Сегодня исполнился 31 год с момента первого анонсирования Linux. Именно в этот день, 25 августа 1991 года Линус Торвальдс разместил в новостях Usenet comp.os.minix соообщение следующего характера:
Привет всем тем, кто использует миникс — Я делаю (свободную) операционную систему (это только хобби, не столь большое и профессиональное, как GNU) для 386(486)AT клонов. Эта система пишется с апреля и скоро будет готова. Я хочу получить любой отзыв, касающийся вещей, которые нравятся/не нравятся людям в миникс, так как моя ОС похожа на неё (такое же устройство файловой системы (по практическим соображениям), среди прочего).

В настоящее время я портировал bash (1.08) и gcc (1.40), и, похоже, эти программы работают. Это значит, что я получу что-то практичное в ближайшие несколько месяцев, и я хочу узнать, какие возможности хотят большинство людей. Любые предложения принимаются, но я не обещаю, что я осуществлю их:-)

Линус (torvalds@kruuna.helsinki.fi)

PS. Да — в ней нет кода миникс, и будет мультипотоковая ФС. Система НЕПЕРЕНОСИМА (использует команды Intel 386 и т. д.) и, вероятно, будет поддерживать только жесткие диски AT, так как это всё, что у меня есть 🙁
Ну а мы — в этот интересный день, можем только пожелать, чтобы труды по переводу этого руководства были для вас полезны.

Продолжаем серию статей по созданию модулей ядра. В текущей части мы разберем работу с файловой системой /proc, взаимодействие с модулями при помощи sysfs, а также работу с файлами устройств.
Читать дальше →
Total votes 48: ↑48 and ↓0 +48
Views 6K
Comments 0

Physically-based rendering. Ray marching (часть 2)

Constanta corporate blog C++ *Image processing *Mathematics *Machine learning *
Tutorial

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

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

Читать далее
Total votes 27: ↑27 and ↓0 +27
Views 3.2K
Comments 6

Сразу три причины, из-за которых контроллер GD32F450 теряет UDP пакеты

System Programming *Programming microcontrollers *Computer hardware
Периодически на Хабре проскакивают статьи, где проверяется двоичная совместимость контроллеров GD32 с их аналогом STM32. Так получилось, что нам довелось поймать пусть и не на двоичном уровне, а на уровне исходников, ситуацию, где одно и то же проявление проблемы (теряются сетевые пакеты) было вызвано не одной, не двумя, а сразу тремя причинами, из которых две оказались признаками несовместимости с STM32. Вот о том, как мы эти причины ловили, я и хочу сегодня рассказать. Будет детектив, аналогичный тому, какой я приводил в своей старенькой статье про поддельную «голубую пилюлю». Ну, и выводы, куда же без них. Они тоже будут.


Читать дальше →
Total votes 89: ↑88 and ↓1 +87
Views 8.8K
Comments 32

*Нет связи*: эмулятор Сферы, часть 2

Game development *C# *Reverse engineering *Godot *

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

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

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

Читать далее
Total votes 9: ↑9 and ↓0 +9
Views 3K
Comments 4

Онлайн-сервер для NFS Underground 2 своими руками. Часть 1

Abnormal programming *Game development *Reverse engineering *

Привет, Хабр! Спустя 13 лет я решил рассказать как однажды начал писать dedicated-сервер для игры NFS Underground 2, как решил возродить функционал оригинального онлайн-сервера, закрытого ещё в 2007 году, и как получилось, что это всё ещё WIP, несмотря на килотонны написанного кода и сотни часов, проведённых в реверс-инжиниринге.

Материал поделю на 3 части: в этой статье будет предыстория, причины и общая картина сетевой реализации сервера. Во второй части расскажу про проблемы и нюансы реверс-инжиниринга. А в завершающей части уделю внимание организации структуры проекта и тому, “что” и “почему” до сих пор не реализовано.

Читать далее
Total votes 54: ↑54 and ↓0 +54
Views 12K
Comments 22

Заметки о вращении вектора кватернионом

Algorithms *Mathematics *
Sandbox

Структура публикации


  • Получение кватерниона из вектора и величины угла разворота
  • Обратный кватернион
  • Умножение кватернионов
  • Поворот вектора
  • Рысканье, тангаж, крен
  • Серия поворотов


Получение кватерниона из вектора и величины угла разворота


Ещё раз – что такое кватернион? Для разработчика – это прежде всего инструмент, описывающий действие – поворот вокруг оси на заданный угол:

(w, vx, vy, vz),

где v – ось, выраженная вектором;
w – компонента, описывающая поворот (косинус половины угла).
Читать дальше →
Total votes 24: ↑19 and ↓5 +14
Views 96K
Comments 22

Дизерпанк — статья о дизеринге изображений, которую мне хотелось бы прочитать

Wunder Fund corporate blog Algorithms *Graphic design *Game design *Design
Translation

Мне всегда нравилась визуальная эстетика дизеринга (dithering, псевдотонирование, псевдосмешение цветов), но я не знал о том, как он применяется. Поэтому я провёл кое-какие изыскания. Эта статья может содержать отголоски ностальгии, но в ней не будет никаких следов Лены.

Читать далее
Total votes 147: ↑147 and ↓0 +147
Views 20K
Comments 26

Отладка драйвера Windows

System Programming *Development for Windows *
Tutorial

Работая со студентами я заметил, что нередко от изучения некоторой области отталкивает не столько сложность непосредственно разработки, сколько проблемы, связанные с настройкой рабочей среды и тестового окружения. Особенно остро эта проблема стоит при низкоуровневой разработке, в частности, драйверов ядра ОС Windows. Данная публикация содержит подробное описание процесса создания, запуска и отладки простейшего драйвера Windows.

Хочу ронять Windows в BSOD
Total votes 57: ↑57 and ↓0 +57
Views 11K
Comments 64

Подробно о мониторинге и профилировании JVM

Издательский дом «Питер» corporate blog Programming *Java *Kotlin *Kubernetes *
Translation

Управление доступными ресурсами в облачной среде по запросу – тема, которая бывает очень непростой. Но эта работа стоит того, поскольку вы сможете использовать ресурсы гораздо эффективнее. Поэтому многие компании и проекты решаются мигрировать на облачные платформы, в частности, на Azul, AWS, Google Cloud или другие. С точки зрения программиста, есть одна истина, которая сохраняется и в облаке: рекомендуется понимать поведение и ограничения того JVM-приложения, что вы развернули (или не приложений, а подов, минимальных развертываемых единиц в Kubernetes). Платформа Java является многопоточной, и, даже если вы не собираетесь использовать какие-либо доступные для этого API, платформа все равно порождает множество потоков-демонов, работающих в фоновом режиме. Такие потоки нужны не только для очистки и подхватывания неиспользуемой памяти. Они относятся к платформе, а что насчет фреймворков? Фреймворки Java пытаются обслуживать большие эксплуатационные мощности; следовательно, инициируется работа множества вспомогательных потоков. Ниже мы немного заглянем под капот. В этой статье будет подробнее рассмотрено, как устроены популярные фреймворки Quarkus и Spring-Boot, сколько потоков они инициируют, чтобы обслужить все результаты. Давайте вместе пробежимся по примерам и для начала разберемся, какова разница между мониторингом и профилированием.

Читать далее
Total votes 10: ↑8 and ↓2 +6
Views 4.5K
Comments 0

Information

Rating
1,477-th
Date of birth
Registered
Activity