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

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

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

Барьеры и модели памяти – explained

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

Всем привет! 

Начну с предыстории.

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

Однако, на тот момент я тоже об этом не знал, и нам повезло, что мы изначально везде использовали модель памяти Sequential Consistency (что это – далее в статье), поэтому все прошло гладко. Теперь, зная про модели памяти и возможные последствия, боюсь представить, что было бы в противном случае.

Как родилась статья

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

Статья основана на материалах лекции Computer Science Center (CSC) с курса “Параллельные вычисления” преподавателя Калишенко Е.Л. Крайне рекомендую ознакомиться со всеми лекциями курса (более структурированного материала по теме я еще не встречал). Благо он в открытом доступе – ссылка.

Что такое барьеры памяти и зачем это все нужно?

Начнем с небольшого описания того, как устроена “условная” архитектура процессора. Почему условная? Потому что может отличаться в зависимости от конкретной реализации, но суть похожа. 

Читать далее

API Key Authentication в ASP.NET Core Web Api

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

Недавно я столкнулся с задачей реализации аутентификации с использованием API Key в ASP.NET Core Web API. Хотя многие авторы рекомендуют использовать IAuthorizationFilter для этой цели, я обнаружил, что это не самый подходящий вариант. У меня есть более удачный подход, которым я хотел бы поделиться, включая примеры. Реализация была протестирована как в .NET 8, так и в .NET 9.

Читать далее

Особенности написания эксплоитов под х64

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

Современные механизмы защиты от уязвимостей переполнения буфера существенно усложняют реализацию таких атак, однако buffer overflow по‑прежнему остается одним из самых распространенных видов уязвимостей. В этой статье мы поговорим об особенностях написания эксплоитов под 64-битную архитектуру.

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

Читать далее

CodeSigning для разработчиков под Windows по новым правилам

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

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

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

Безопасность должна быть более безопасной

Модернизация настольных электромеханических часов

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

У меня есть старые электромеханические часы «Янтарь», которым почти 50 лет. По паспорту их продали в 1976 году. Эти часы дороги мне как память, потому что достались от бабушки с дедушкой.

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

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

Погружаемся в схемотехнику, механику и код

Используем API Key и JWT Bearer аутентификацию вместе в ASP.NET Core Web API

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

Я расскажу, как реализовать аутентификацию с использованием как JWT, так и API-ключа на одном и том же endpoint в ASP.NET Core Web API. Совмещение этих схем аутентификации полезно, если вы хотите использовать токен JWT Bearer для аутентификации пользователей и API-ключ для аутентификации между сервисами.

Читать далее

Погружение в инструменты диагностики Linux. Часть 1 — sysdig

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

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

Читать далее

Операционная система в 1 000 строках кода (часть 2)

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

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

▍ Навигация по вышедшим частям


Читать дальше →

Маркировка DC/DC-преобразователей в корпусе SOT-23-5 и SOT-23-6

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

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

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

Читать далее

Как синтаксический сахар Kotlin может сломать вам логику работы приложения

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

Как использование object и data class сломало работу моего приложения и какие уроки я вынес про синтаксический сахар Kotlin и IDEA, которая так сладко предлагает замены.

Подробности

Аналого-цифровая автоматика и никаких микроконтроллеров на примере сушилки для рук

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

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

Кроме регулятора на ОУ, схема содержит ШИМ-преобразователь на транзисторном источнике тока и компараторе для управления нагревателем и вентилятором, схему задержки на логических микросхемах, инфракрасный детектор дистанционного включения, схему индикации и, как обычно в моих проектах, ни одного микроконтроллера.

А если вы считаете, что регуляторы на операционных усилителях утратили свою актуальность, посмотрите современные методички некоторых вузов по ТАУ. ))
Читать дальше →

Операционная система в 1 000 строках кода (часть 1)

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

Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.

▍ Навигация по частям



Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система Linux, которая воспринимается как масштабный опенсорсный проект, на стадии версии 0.01 включала всего 8 413 строк кода. Сегодня ядро Linux действительно огромно, но начиналось оно, как и типичный хобби-проект, с крохотной базы кода.

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

Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!

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

10 лучших приёмов логирования для разработчиков

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

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

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

Читать далее

Защита схемы от переполюсовки, что может быть проще?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров40K
image
«Я не такая», «со мной этого точно не может случиться» — говорили они, но упорно продолжали пихать батарейки в пульт для телевизора не той стороной…

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

Содержание:



Всех неравнодушных к электронике прошу под кат!
Читать дальше →

Как вас обманывают в лазерной коррекции зрения: сравнение SMILE с CLEAR и SmartSight

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

Хорошая новость — в России готова к конкуренции отечественная разработка технологии для экстракции лентикулы. Плюс отличная новость: в России теперь есть VISUMAX 800 от Zeiss, который делает коррекцию всего за 9 секунд! Это — SMILE Pro. И именно он — «тот же SMILE, но современнее».

Помните, как в начале пути технология SMILE встречала яростное сопротивление с профессиональной сцены и в кулуарах? Приходилось цифрами, статистикой, публикацией книги побеждать LASIK, доказывая, что 100%-но фемтосекундная экстракция лентикулы SMILE — это лучший метод.

Шли годы и те, кто «жевал попкорн», наблюдая баталии между SMILE и LASIK, сами стали осваивать технологию. Компании-конкуренты разрабатывали «дженерики» SMILE, и с их появлением началась новая эпоха — время лазеров для лентикулярной экстракции. Эти лазеры не относились к  SMILE-технологии, но везде рекламировались как «новейший, усовершенствованный SMILE.

Теперь плохая новость. Сегодня немало клиник, которые пытаются «примазаться к успеху проверенных технологий» и продать CLEAR и SmartSight как «тот же SMILE, но современнее». А страдаете от этого вы — пациенты, которые потом месяцами ждут, когда же, наконец, «просветлеет в глазах» после таких инноваций.

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

Читать далее

Математическая продлёнка. Изобретаем эллиптические числа

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

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

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

Читать далее

Математическая продлёнка. Изобретаем целые числа

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

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

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

2. Во второй части от целых мы перейдём к рациональным числам, которые тоже можно представить в виде пары — рациональной дроби. Главный вопрос на который мы постараемся ответить: «А чего у дробей всё так сложно-то?»

3. В третьей части мы сконструируем Гауссовы числа и порассуждаем над более общим вопросом: «Что такое число?». В этой части мы перейдём от пар к матричным представлениям чисел, что позволит нам ввести их классификацию.

4. Четвёртая часть будет посвящена эллиптическим арифметикам: комплексным числам и числам Эйзенштейна. Здесь мы порассуждаем над сакраментальным вопросом: «Реальная ли мнимая единица?»

5. В пятой части мы рассмотрим гиперболические арифметики и познакомимся с двойными числами, и немного используем их на практике, чтобы понять «Как работает формула Бине?»

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

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

Читать далее

Деревянная разделочная доска. Inside

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров17K
-Напиши ты уже заметку про кухонные доски, маме будет приятно
-Говорю же — «в ToDo!», тема принята в разработку :)
-Сейчас напиши, кратко. Статья нам не нужна. Хотя…
-Все равно из доски статья не выйдет
-Выйдет, всё можно расширить до масштабов Вселенной
-Доску — точно нет!
-Да!
из беседы с тульпой по SSH

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


Пользуешься разделочной доской на кухне? Жми!

Создаём простой копирующий сборщик мусора

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

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

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

SOLID. Проблема новичка

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

Здравствуйте, друзья! Меня зовут Константин, я python backend developer из компании «Окенит». Сегодня я хочу рассказать свое видение проблемы новичка при ознакомлении с принципами SOLID, описанными в книге «Стерильная Архитектура» Робина Мартерта.

За свой десятилетний опыт я часто был свидетелем ситуации, когда молодые разработчики, желая сделать свой проект как можно более открытым для расширения и редактирования, превращали его в груду нечитаемого и неподдерживаемого кода при попытке использовать у себя все рекомендации Матушки Роба. Отсюда вопрос: «Почему, при следовании советам более опытного разработчика, код стал только хуже?».

Ответ на этот вопрос пришел ко мне очень быстро. Из‑за описания и без того абстрактных вещей чересчур абстрактными словами и примерами, Робин Мартерта вместо упорядочивания знаний, наводит хаос в умы читателей. Во избежание этой ситуации я решил написать данную статью, где коротко расскажу о наборе принципов SOLID, для чего они нужны и, главное, как применять эти принципы в жизни. Начнем по порядку, с буквы «S». И так, что же она значит?

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

Информация

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