Pull to refresh
76
0.3
Сергей @lamerok

Хоккеист — на микроконтроллерах программист

Send message

Шпаргалка с командами для Windows, Linux и macOS (Терминал, VirtualEnv и Git)

Reading time3 min
Views15K

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

В ней вы найдете основные команды для работы в терминале Windows, Linux и macOS. Также описаны базовые команды по работе с VirtualEnv и Git.

Смотреть команды
Total votes 17: ↑5 and ↓12-7
Comments13

Как я нашёл 55-летний баг в первой игре о приземлении на Луну

Level of difficultyMedium
Reading time7 min
Views16K

Спустя всего несколько месяцев после исторической прогулки по Луне Нила Армстронга, ученик массачусетской школы Lexington High School Джим Сторер написал первую версию игры Lunar Landing. К 1973 году она стала самой популярной компьютерной игрой с большим отрывом от остальных. В этой простой текстовой игре вы управляете аппаратом для посадки на Луну, стремясь максимально плавно приземлиться. Всё движение происходит вертикально, каждые десять симулируемых секунд игрок решает, сколько топлива нужно сжечь.

Недавно я исследовал график оптимального сжигания топлива для наиболее мягкого приземления с максимумом оставшегося топлива. К моему удивлению, теоретически наилучшая стратегия не сработала. Игра ошибочно думает, что аппарат не коснулся поверхности, хотя на самом деле это так. Углубившись в анализ, я был потрясён сложной физикой и вычислениями в игре. В конечном итоге я обнаружил баг: отсутствующее деление пополам; похоже, почти за 55 лет никто не заметил этого.
Читать дальше →
Total votes 62: ↑62 and ↓0+82
Comments23

C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M

Level of difficultyMedium
Reading time43 min
Views9.4K

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

Статья предполагает, что читатель имеет базовые знания программирования bare-metal систем и языка С++, в том числе и современных стандартов. Это означает, что совсем базовые пояснения выходят за рамки этой статьи.

Читать далее
Total votes 58: ↑57 and ↓1+65
Comments26

Статический и динамический полиморфизм в C++

Level of difficultyEasy
Reading time6 min
Views5.1K

Привет, Хабр! К сегодняшнему дню написано уже немало учебников и статей по полиморфизму в целом и его воплощения в C++ в частности. Однако, к моему удивлению, при описании полиморфизма никто (или почти никто) не затрагивает тот факт, что помимо динамического полиморфизма в C++ имеется и достаточно мощная возможность использования его младшего брата – полиморфизма статического. Более того, он является одной из основных концепций STL – неотъемлемой части его стандартной библиотеке.

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

Читать далее
Total votes 10: ↑7 and ↓3+5
Comments28

Инкрементальный алгоритм привязки GPS-трека к дорожному графу

Reading time5 min
Views18K
The Puxi Viaduct by wikimedia

Геоинформационные системы постепенно входят в повседневный быт.

Большинство мобильных устройств снабжены GPS/ГЛОНАСС-приёмниками. Это позволяет разработчикам получать записи пути своих пользователей (треки). Треки можно использовать для решения целого ряда задач — от навигации по карте и информирования о местоположении друзей до построения пробок и предсказания дорожной ситуации.

К сожалению, без дополнительной обработки трек пользователя малоинформативен, поэтому требуется этап связи внешних данных и внутренней карты приложения. Для этого существуют специальные алгоритмы привязки данных (map matching algorithms).

Эта статья посвящена алгоритму привязки трека к дорожному графу и результатам его применения в проекте Карты@­Mail.ru.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments16

Как пройти собеседование в FAANG. Мой опыт и рекомендации в 2024 году

Level of difficultyEasy
Reading time18 min
Views16K

Всем привет, меня зовут Максим Иванов, я frontend-разработчик в компании Т-Банк (Тинькофф). Сегодня мы поговорим с вами о лайфхаках, которые могут вам пригодиться, если вы хотите устроиться в Google. С автором данной статьи я был лично знаком, когда он еще работал в Тинькофф. Смею заметить, что этот человек не был рядовым разработчиком. Он был очень талантливым как инженер, так и руководитель. Значительная часть его опыта была связана с курированием отдела Frontend Core Tech в Тинькофф, а это 200 инженеров в подчинении. Он постоянно проводил встречи для разработчиков и распространял самые передовые знания на всю компанию. Обучал, помогал, решал самые сложные задачи, которые стояли перед отделом. Когда я наткнулся на его статью, то решил отдать дань уважения и сделать перевод. Спасибо, если дочитаете до конца и давайте начнем!

Читать далее
Total votes 14: ↑10 and ↓4+8
Comments17

Быстрое вычисление степени

Level of difficultyMedium
Reading time15 min
Views11K

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

Читать далее
Total votes 17: ↑16 and ↓1+19
Comments8

Матричный шрифт с анимацией на микроконтроллере

Level of difficultyMedium
Reading time5 min
Views7.8K

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

Читать далее
Total votes 83: ↑83 and ↓0+103
Comments41

Реализация глобальных индексов в распределённой системе

Level of difficultyMedium
Reading time17 min
Views4.2K

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

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

Матрица компетенция/карьерного роста программистов

Level of difficultyEasy
Reading time8 min
Views2.4K

Как выглядят тайтлы и уровни у программистов в зарубежных компаниях, сколько надо лет опыта чтобы быть достойным их, ну и самое главное какая зарплата (до налогов) на этих уровня?

Я не претендую на истину в последней инстанции, это всего лишь мое видение, любые корректировки/добавки/комментарии - приветствуются

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

«А поменяйте мне фсе зубы» — история пациента с Хабра

Reading time17 min
Views38K
Тут мы продолжаем рассказывать про то, как вы взаимодействуете с нашими уютными клиниками. Иван (имя пациента изменено) пришёл к нам после долгого и вдумчивого чтения блога на Хабре, а до этого лет десять, наверное, не был вообще ни у каких стоматологов.

Когда он впервые сел ко мне в кресло, у него не было вообще ни одного целого зуба. Это не преувеличение ради красного словца — реально ни одного! Спустя год и примерно пятьдесят визитов в клинику у Вани улыбка, как говорится, — на миллион! Точнее, на три.

Он сам захотел рассказать здесь свою историю. Поэтому вот.

image
Это Иван, он прошёл зубной квест на хард-левеле и радуется

Сначала будут Ванины впечатления, а потом я, Леван, его ортопед, расскажу, как мы реставрировали его зубы. И заодно про то, как мы работали со сложным пациентом, который мог сорваться и уйти в закат с любого приёма, плюс дополнительно у нас не возникла симпатия с первого раза, что неудивительно, если знать его анамнез.
Читать дальше →
Total votes 118: ↑106 and ↓12+120
Comments230

REST API на котиках

Level of difficultyEasy
Reading time7 min
Views22K

Привет любителям котиков! Меня зовут Юля, я backend‑разработчик компании CDEK. Я сама не так давно изучала все эти сложные понятия в программировании, поэтому решила помочь и вам разобраться с одним из них.

С какой стороны IT вы бы не пытались войти — в какой‑то момент столкнётесь с понятием REST API. Эта статья создана, чтобы смягчить данное столкновение. Новые темы всегда легче воспринимаются на простых примерах, ну а если это примеры с котиками, то варианта не разобраться просто нет. Хочется обойтись без сложных научных определений, а рассказать самым простым языком. Поэтому, если вы любите сухие и точные формулировки, то вам нужна другая статья :)

Читать далее
Total votes 63: ↑60 and ↓3+61
Comments26

Привычка быть SOLIDным разработчиком

Level of difficultyMedium
Reading time20 min
Views14K

Привет, Хабр! Меня зовут Грант, я уже 5 лет занимаюсь backend-разработкой в SimbirSoft, а с 2021 года возглавляю Backend-отдел компании в Краснодаре. В последние несколько лет неоднократно замечаю, что на входном интервью соискатели часто путают принципы разработки. Поэтому в этой статье решил разобрать, как проще их понимать, какие связи между ними прослеживаются, стоит ли учить все или что-то можно пропустить. А еще попробую раскрыть некоторые особенности, какие секреты скрывают популярные принципы разработки.

Погрузиться 👀
Total votes 15: ↑12 and ↓3+11
Comments5

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Level of difficultyMedium
Reading time11 min
Views25K
Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации.

Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS).

Сразу хочу оговориться, что тема многопоточности — очень большая и серьезная. И эта статья — не полноценный анализ проблем многопоточки, а только частНЫе (но довольно частЫе) кейсы, когда мы вынуждены использовать мьютексы.
Читать дальше →
Total votes 53: ↑47 and ↓6+57
Comments148

16-битная операционная система на коленках

Level of difficultyMedium
Reading time15 min
Views18K

В мире компьютерных наук мало что может сравниться с созданием собственной операционной системы. В этой статье мы погрузимся в увлекательный мир разработки операционных систем, создав 16-битную ОС с помощью языка ассемблера NASM под архитектуру процессоров Intel x86-64. Мы рассмотрим каждый этап разработки, начиная с основ и заканчивая реализацией ключевых компонентов.

Заменит Windows?
Total votes 47: ↑47 and ↓0+54
Comments34

Применяем стандартные алгоритмы в C++. Семь примеров

Level of difficultyMedium
Reading time8 min
Views12K

Привет, Хабр! Меня зовут Николай, я разработчик С++ в SimbirSoft. В этой статье я хочу поделиться своим опытом применения алгоритмов. 

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

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

Прежде чем перейти к примерам, необходимо отметить основное преимущество алгоритмов: они позволяют упростить код и повысить читаемость (или самодокументирование, которое позволяет на основании названия алгоритма понять, что делается), обобщить код. Начиная с C++17, алгоритмы могут выполняться параллельно, реализация алгоритма может быть жестко с оптимизирована компилятором по сравнением с обычным кодом.

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

GPT-5 — чего ожидать от новой модели от Open AI? Возможности и потенциал искусственного интеллекта

Reading time4 min
Views14K

Уже сейчас ChatGPT и «коллеги» оказывают огромное влияние на различные отрасли бизнеса, науку и обычную жизнь интернет-пользователя. При этом модели постоянно совершенствуются, становясь всё более умелыми — они получают новые возможности, функции, осваивают недоступные ранее для ИИ отрасли. Чего ожидать от следующей версии ChatGPT, GPT-5? Подробности — под катом.

Читать далее
Total votes 8: ↑7 and ↓1+15
Comments8

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Level of difficultyMedium
Reading time45 min
Views154K

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

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

Читать далее
Total votes 446: ↑438 and ↓8+490
Comments358

Корутины C++ для чайников: пишем асинхронный веб-клиент

Level of difficultyMedium
Reading time24 min
Views23K

Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.

Читать далее
Total votes 55: ↑53 and ↓2+64
Comments34

Тестирование без моков: язык паттернов. Часть 1

Reading time26 min
Views4.1K

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

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

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

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

Читать далее
Total votes 10: ↑8 and ↓2+8
Comments15
1
23 ...

Information

Rating
2,084-th
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity