Как стать автором
Обновить
9
0
Артём @timmer

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

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

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

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

Если вы начинали изучение программирования с 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

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 19: ↑16 и ↓3+15
Комментарии8

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

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

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

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

Дальше будет много букаф и примеры кода
Всего голосов 1: ↑1 и ↓0+3
Комментарии5

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

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


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

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

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

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

Итак…
Читать дальше →
Всего голосов 21: ↑19 и ↓2+27
Комментарии49

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

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

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


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


Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии0

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

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

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


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


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


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


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


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


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

Читать дальше →
Всего голосов 160: ↑158 и ↓2+197
Комментарии182

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

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

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

Читать далее
Всего голосов 34: ↑33 и ↓1+35
Комментарии5

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

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

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

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

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


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


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

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


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


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

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


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

Читать дальше →
Всего голосов 62: ↑60 и ↓2+66
Комментарии44

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

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

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

Погружение в Мир Kubernetes Scheduler
Всего голосов 14: ↑13 и ↓1+17
Комментарии1

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 26: ↑10 и ↓16-4
Комментарии60

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

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

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

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


Читать дальше →
Всего голосов 145: ↑101 и ↓44+93
Комментарии1153

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

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

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

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

Читать далее
Всего голосов 7: ↑5 и ↓2+9
Комментарии26

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

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

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

Читать далее
Всего голосов 16: ↑14 и ↓2+15
Комментарии12

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

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

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

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

Читать далее
Всего голосов 20: ↑16 и ↓4+16
Комментарии2

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

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

Лада Антипова из команды киберкриминалистов 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 для тех же журналов. Может быть полезна для отслеживания определенных событий в реальном времени.

Читать далее
Всего голосов 14: ↑11 и ↓3+10
Комментарии18

Bash Auto Completion в Linux

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

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

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

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

Читать далее
Всего голосов 29: ↑27 и ↓2+29
Комментарии6

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

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

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


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


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


Читать дальше →
Всего голосов 26: ↑25 и ↓1+31
Комментарии8

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 4: ↑1 и ↓30
Комментарии19
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность