Pull to refresh
9
0
Артём @timmer

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

Send message

Ассемблер для программистов на языках высокого уровня: Hello World

Level of difficultyMedium
Reading time6 min
Views23K

Если вы начинали изучение программирования с JavaScript, Rust, C или любого другого высокоуровневого языка, то ассемблерный код может показаться вам непонятным или даже пугающим.

Рассмотрим следующий код:

section .data
  msg db "Hello, World!"

section .text
  global _start

_start:
  mov rax, 1
  mov rdi, 1
  mov rsi, msg
  mov rdx, 13
  syscall

  mov rax, 60
  mov rdi, 0
  syscall

К счастью, по второй строке мы можем понять, что он делает.

Здесь нет ничего привычного нам: мы не видим ни условных операторов, ни циклов, нет никакого способа создавать функции… Да даже у переменных нет имён!

С чего же вообще начать?

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

Завершив прочтение этого руководства, вы сможете ориентироваться в ассемблерном коде, будете знать, где искать информацию, и даже сможете самостоятельно писать простые программы.
Читать дальше →
Total votes 61: ↑57 and ↓4+69
Comments41

Полезные фичи в Rust

Level of difficultyEasy
Reading time6 min
Views6.4K

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

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

Макросы в tentacli. Часть один

Level of difficultyMedium
Reading time12 min
Views827

Со времени публикации первых двух статей мой проект сменил имя и концепцию. Теперь он называется TentaCLI и это название, являющееся игрой слов tentacle и cli, полностью отражает новую суть проекта. Хотя tentacli по прежнему может быть скачан с github и использоваться, как отдельное клиентское приложение, он и его части также доступны в виде крэйтов. Внедряемость, а так же возможность добавлять собственные модули в tentacli делает его подходящим для создания собственных приложений. В частности, у меня таких два: мини wow сервер для тестирования tine и скрытый проект binary army, в котором tentacli полностью раскрывает свой потенциал как щупальца-исполнителя - и для управления которыми я пишу сердце.

А сердце tentacli - это чтение и обработка TCP пакетов и для облегчения работы с ними я использую макросы.

Дальше будет много букаф и примеры кода
Total votes 1: ↑1 and ↓0+3
Comments5

Как выбрать контроллер для DIY (сводная таблица по 30++ моделям с комментариями)

Level of difficultyEasy
Reading time7 min
Views14K


В этой статье речь пойдёт о выборе контроллера для DIY из ассортимента компании Kincony. Почему именно Kincony? Потому, что эта компания (в отличие от всех остальных) имеет беспрецедентно широкий модельный ряд контроллеров на ESP32 для DIY — на данный момент это около 40 моделей.

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

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

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

Итак…
Читать дальше →
Total votes 21: ↑19 and ↓2+27
Comments49

Готовим кеш правильно

Reading time5 min
Views14K

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


Под катом вас ожидает пара историй о том, как неправильно прикрученный кеш убил перфоманс.


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

Как работает протокол X11 на самом нижнем уровне

Level of difficultyMedium
Reading time13 min
Views40K

X11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.


Но мало кто знает как он работает на самом деле. Потому что с годами он оброс слоями и слоями библиотек, которые стремятся скрыть саму сущность протокола.


А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.


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


А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.


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


Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.

Читать дальше →
Total votes 160: ↑158 and ↓2+197
Comments182

Структура драйвера Linux для одноплатного компьютера

Level of difficultyEasy
Reading time7 min
Views14K

Здраствуйте меня зовут Дмитрий. Недавно я написал статью как собрать прошивку для одноплатного компьютера Orange PI i96 с нуля. Если вы не читали то очень советую. И там я упоминал что для того чтобы собрать прошивку на новом ядре Linux, мне пришлось переписать драйверы с учетом архитектуры Device Tree, которую использует современное ядро. В этой статье я опишу как я это сделал.

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

Отслеживание изменений в директории с помощью Inotify

Reading time4 min
Views6.1K
Столкнулся с задачей, где необходимо было отслеживать в ОС Linux изменение файла в директории на чистом С++. Так как чистый С++, Qt с его QFileSystemWatcher сразу отпадал, из-за того что необходимо было подключать QObject. В итоге решил пользоваться линуксовой функцией Inotify.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments8

Пишем gRPC сервис на Go — сервис авторизации

Level of difficultyMedium
Reading time63 min
Views57K

Пишем gRPC сервис на Go — сервис авторизации


В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер.


Видео-версия этого гайда с более подробными объяснениями

Исходный код проекта: https://github.com/GolangLessons/sso


Итого, наш план:


  • Напишем простой, но полноценный gRPC-сервис
  • Разберемся с базовыми принципами работы авторизации — чтобы не было скучно
  • Настроим автоматический деплой в прод — потому что руками деплоить лень
  • Подружим его с уже готовым сервисом URL Shortener — чтобы был практический смысл
  • Напишем полноценные функциональные тесты

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


Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал.

Читать дальше →
Total votes 62: ↑60 and ↓2+66
Comments44

Kubernetes Scheduler в Деталях: Ключевые Концепции. Часть 2

Level of difficultyHard
Reading time13 min
Views5.3K

В мире, где Kubernetes доминирует в управлении контейнеризированными приложениями, один вопрос часто встаёт перед теми, кто стремится понять его внутренние механизмы: 'Как на самом деле работает k8s scheduler?' Эта статья предназначена для развенчания мифов и предоставления чёткого объяснения работы Kubernetes планировщика. Мы исследуем ключевые моменты этого процесса, начиная от того, назначает ли планировщик модули узлам один за другим в очереди или выполняет эту задачу параллельно, и заканчивая более сложными аспектами его работы. Погрузитесь в детали этой сложной, но увлекательной темы вместе с нами, чтобы лучше понять, как Kubernetes оптимизирует размещение подов в вашем кластере

Погружение в Мир Kubernetes Scheduler
Total votes 14: ↑13 and ↓1+17
Comments1

Разговоры о Курсах, годнота или нет?

Level of difficultyEasy
Reading time8 min
Views24K

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

Давайте рассмотрим все "за" и "против". Для этого возьмём две противоположные точки зрения на эту тему. Первая точка зрения - Невозможно за 6-12 месяцев подготовить вменяемого джуна, не говоря уже о более высоких грейдах. 

Соответственно, любые курсы не могут дать нормальной базы, а как следствие, они бесполезны и не могут стоить тех денег, которые за них просят (30 -300 тыс.). По этому мнению, это не более, чем развод на деньги, и само собой, ни о каком трудоустройстве после них говорить нельзя. 

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

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

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

Читать далее
Total votes 26: ↑10 and ↓16-4
Comments60

Коллеги, вы меня огорчаете

Reading time12 min
Views181K
В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


Читать дальше →
Total votes 145: ↑101 and ↓44+93
Comments1153

Топ-10 самых мощных Android-смартфонов в 2023 году

Reading time7 min
Views112K

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

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

Читать далее
Total votes 7: ↑5 and ↓2+9
Comments26

Как я проектирую и разрабатываю расширения Python на Rust

Level of difficultyMedium
Reading time16 min
Views4.7K

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

Читать далее
Total votes 16: ↑14 and ↓2+15
Comments12

Behavioral-интервью в IT: что это и как подготовиться? (вопросы с ответами для Software Developer + грамматика)

Reading time8 min
Views12K

Многоэтапный процесс интервью в IT иногда занимает до 40 дней, но как правило большинство кандидатов отваливаются именно после одного из первых этапов отбора - behavioral interview.

Обычно behavioral questions включают в себя вопросы на следующие темы...

Читать далее
Total votes 20: ↑16 and ↓4+16
Comments2

Топ-10 артефактов Linux для расследования инцидентов

Reading time14 min
Views14K

Лада Антипова из команды киберкриминалистов Angara SOC подготовила новый материал о полезных инструментах при расследовании хакерских атак. Материал с удовольствием опубликовали коллеги из Positive Technologies на своих ресурсах, поэтому мы можем сделать его доступным и для нашей аудитории.

Несмотря на то, что Windows остается самой распространенной ОС, о чем знают в том числе атакующие, оставлять без внимания другие системы нельзя, а уж тем более Linux (ладно-ладно, GNU/Linux). Сегодня российские компании все чаще пользуются Linux из соображений импортозамещения, но эта ОС по-прежнему более распространена именно как серверное решение.

А теперь представьте ситуацию: вы работаете на Linux-машине, и вдруг что-то явно идет не так. Уровень нагрузки на процессор резко вырос, начались обращения на неизвестные ресурсы или пользователь www-data неожиданно оказался в группе wheel. Что делать?  

Составляем список команд

У вас есть два пути: либо работать с живой системой, либо делать так называемый пост-анализ. Начнем с первого. Я приведу свой список избранных и наиболее часто используемых команд. Универсального порядка здесь нет: вы, как ИБ-специалист, расставляете приоритеты самостоятельно.

Итак, команды:

Помимо базовых команд на просмотр текстовых файлов (а все мы знаем, что в Linux, по сути, все есть файл) типа cat ~/.bash_history, можно использовать более продвинутые варианты:

tail -n 15 /var/log/<file> по умолчанию выводит 10 строк, но при помощи параметра n их количество можно изменять.

tail -f -s 5 /var/log/<file> используется для отслеживания появления новых строк. Это аналог команды watch для тех же журналов. Может быть полезна для отслеживания определенных событий в реальном времени.

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

Bash Auto Completion в Linux

Level of difficultyEasy
Reading time5 min
Views18K

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

Однако в Linux предусмотрена удобная функция автодополнения для Bash. Этот инструмент, с которым знакомятся на начальных этапах изучения Linux, значительно ускоряет и упрощает процесс ввода команд. Он автоматически дополняет имена файлов, каталогов или опции команд, когда вы вводите их в командной строке.

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

Читать далее
Total votes 29: ↑27 and ↓2+29
Comments6

Битва за производительность: SparseMap vs GenerationsMap

Level of difficultyMedium
Reading time7 min
Views5.3K

Есть такая занимательная структура данных, описанная в статье Russ Cox — sparse map.


Она используется, например, в недрах компилятора Go. А ещё в некоторых пакетах его стандартной библиотеки.


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


Читать дальше →
Total votes 26: ↑25 and ↓1+31
Comments8

LRU, метод вытеснения из кэша

Reading time3 min
Views122K
К сожалению, в очередной раз заметил, что почти все мои коллеги не знают, что такое LRU, и как реализовать кэш определенного размера. Поэтому я решил написать небольшую статью, где расскажу как быстро реализовать метод LRU, и не вынуждать коллег вручную сбрасывать кэш там, где не требуется.

Мы будем под кэшированием понимать сохранение результатов вычислений в ответ на некоторые запросы. То есть, повторный результат запроса не всегда вычисляется заново, но иногда берется из таблицы, называемой кэшем. Сложно переоценить роль кеширования в современных системах. При этом часто возникает проблема, связанная с недостатком памяти. Действительно, что делать, если запросов много, а памяти хватает лишь для хранения ограниченного числа результатов? В этом случае, как правило, кеш стрится следующим образом. Фиксируется размер кэша, пусть будет N, и сохраняются результаты только для N самых «популярных» запросов.

То есть сохраняются результаты вычислений, которые скорее всего запросят заново.
Как определять эти «популярные» запросы? Наиболее известным способом является LRU, о котором я и расскажу в этой статье.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments10

Практика Go — Обработка ошибок (1 часть)

Level of difficultyEasy
Reading time9 min
Views6.4K

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

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

Читать далее
Total votes 4: ↑1 and ↓30
Comments19
1
23 ...

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity