Pull to refresh
4
0
Агаджанов Владимир @smurfomen

Qt/C++

Send message

Сказка про собес наоборот

Level of difficultyEasy
Reading time11 min
Views34K

Вы помните свое первое собеседование? Я свое помню отлично, преподаватель дольше обычного гонял мою плис в симуляторе Keil-C, придирался к любой мелочи, докапывался до каждой запятой в коде прошивки. А потом начал гонять по алгоритмам трассировки печатных плат, которые мы должны были проходить только в следующем семестре. Я уже мысленно готовился на допсу, видно же что валит, как и предыдущих двух одногруппников. Но в конце сдачи лабы по проектированию мк преподаватель спросил хочу ли я делать "железное железо для железной дороги?" (с). Студенту второго курса ИТМО, которого кормили родители, и подрабатывавшего разгрузкой вагонов ночами, это было сродни офферу в гугль. С тех пор я много раз побывал с обеих сторон стола, и в качестве испытуемого, и как придирчивый лид (отнюдь этим не горжусь, но и не стыжусь), и как группа поддержки у коллег из соседних отделов. Всегда хотелось надеяться, что наши собеседования - это не таинственные квесты, где каждая задача - это каст сложного заклятия, а ошибки не выкидывают с данжа.

Но сначала сказка о том, как к нам попал Миша: однажды в славном городе Панкт-Сетербург погромист-джедай по имени Михаил отправился на собеседование в компанию "Кодозавры". Он был уверен, что знает все, и даже изучил новейшие фреймворки "NoScript" и "Unreal С--". Как он думал, ничто не может его остановить. Когда Миша пришел на собеседование, его встретил HR-менеджер по имени Анна. Она с улыбкой спросила: "Расскажите, как вы бы пояснили своей бабушке, что такое мьютекс?". Ага, прям с порога наш доблестный HR накинул Мишке затравочный вопрос. Ну а чё, это ж сказка, герои на белых самокатах и все такое...

Налево пойдешь, мидла потеряешь...
Total votes 43: ↑34 and ↓9+25
Comments82

Показываем видео в терминале

Level of difficultyEasy
Reading time5 min
Views15K

Приветствую, сегодня я опробую OpenCV, библиотеку для работы с видео, на примере простой задачи - символами ASCII вывести видеоролик в терминал.

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

Читать далее
Total votes 24: ↑23 and ↓1+22
Comments25

С какими сложностями встретится новичок в IT на первой работе?

Level of difficultyEasy
Reading time8 min
Views13K

Всем привет, меня зовут Борис, я iOS и Android разработчик. Сегодня я хочу поделиться своими наблюдениями о том, с какими проблемами встречается новичок в IT, устроившись на работу, и как вообще выглядит сам процесс.

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

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

А еще напоминаю, сейчас я занимаюсь менторингом и помощью начинающим в iOS, потому вы всегда можете написать мне в личные сообщения в телеграм по любому вопросу: verbitckii_b.

Приятного чтения!

Читать далее
Total votes 18: ↑9 and ↓90
Comments29

Пишем простой калькулятор используя фреймворк eframe (egui)

Level of difficultyMedium
Reading time34 min
Views9K

Всем здравствуйте. Ниже будет приведен пример написания PWA приложения готового для использования как в браузере, так и на компьютере с ОС Windows. Используется язык программирования Rust и фреймворк eframe (egui). В результате получим исполняемый файл для ОС Windows, и файл Webassembly. В процессе работы будет использоваться GitHub Action для отслеживания корректности написания нашего кода и сборки исполняемых файлов программы, а также для развертывания (версию программы с использованием Webassembly) как страницы в интернете (GitHub Pages).

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

Кросс-компилируем Rust приложения при помощи Nix

Level of difficultyEasy
Reading time7 min
Views3.8K

На текущем месте работы столкнулся с необходимости собирать Docker образы для сервисов написанных на Rust. Обычно в таком случае пишется Dockerfile, который внутри докера просто собирает контейнер и все. Но все оказалось не так однозначно: такая схема довольно неплохо работает, когда у тебя есть x86_64 Linux машина, но любой шаг в сторону и начинаются большие проблемы.

Все довольно неприятно уже на Intel MacBook машинах, докер поедает довольно много ресурсов с хоста, а еще возникают всякие странные приколы с монтированием файловой системы и правами доступа. Но настоящий ужас начинается на Макбуках с Apple Silicon процессорами, где обычной виртуализацией уже не обойдешься и можно часами ждать сборки простого сервиса через qemu. Можно решать эту проблему через сборку контейнеров в CI, но когда разработчиков много, а им надо часто что-то пересобирать, то там образовывалась очередь.

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

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

Знакомство с межпроцессным взаимодействием на Linux

Reading time11 min
Views206K
Межпроцессное взаимодействие (Inter-process communication (IPC)) — это набор методов для обмена данными между потоками процессов. Процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. IPC бывают нескольких типов: «сигнал», «сокет», «семафор», «файл», «сообщение»…

В данной статье я хочу рассмотреть всего 3 типа IPC:
  1. именованный канал
  2. разделенная память
  3. семафор
Отступление: данная статья является учебной и расчитана на людей, только еще вступающих на путь системного программирования. Ее главный замысел — познакомиться с различными способами взаимодействия между процессами на POSIX-совместимой ОС.
Читать дальше →
Total votes 79: ↑78 and ↓1+77
Comments22

Осваиваем кросс-компиляцию с помощью Clang и LLVM

Reading time21 min
Views20K

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

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

Си должен умереть

Reading time21 min
Views109K

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее
Total votes 232: ↑194 and ↓38+156
Comments643

Руководство по ассемблеру x86 для начинающих

Reading time16 min
Views146K
В наше время редко возникает необходимость писать на чистом ассемблере, но я определённо рекомендую это всем, кто интересуется программированием. Вы увидите вещи под иным углом, а навыки пригодятся при отладке кода на других языках.

В этой статье мы напишем с нуля калькулятор обратной польской записи (RPN) на чистом ассемблере x86. Когда закончим, то сможем использовать его так:

$ ./calc "32+6*" # "(3+2)*6" в инфиксной нотации
30

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

Начнём с написания базовой программы Hello world! для проверки настроек среды. Затем перейдём к системным вызовам, стеку вызовов, стековым кадрам и соглашению о вызовах x86. Потом для практики напишем некоторые базовые функции на ассемблере x86 — и начнём писать калькулятор RPN.
Читать дальше →
Total votes 51: ↑48 and ↓3+45
Comments26

«Игровухи» — история компьютерных клубов в России

Reading time17 min
Views29K
image

Это место могло шокировать неподготовленного посетителя. Подвал многоэтажки. Старый, сырой и пыльный, местами черная плесень и паутина. Иногда встречалась живность в лице мышей, крыс. При советах когда-то здесь располагался склад под картошку и хозяйственный инструмент, ныне весь сворованный на всё те же хозяйственные нужды ушлыми жильцами дома.

На входе встречались малолетние, но злобные ребята, словно суслики в темноте сверкая глазками, недобро ухмыляясь. С тех, кто помладше и послабее могли и спросить — кто такой, кого знаешь и есть ли мелочь. В подвале, освещенным тусклыми люминесцентными лампами витает мгла сигаретного дыма, от чего может показаться, что ты очутился в окрестностях города Сайлент-Хилл. Разве что пахнет иначе: пролитым пивом, «кириешками», «дошиком» и потом местных обитателей, не слишком отличающихся от монстров туманного города, только шумнее и агрессивнее.

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

О них и поговорим.
Читать дальше →
Total votes 55: ↑55 and ↓0+55
Comments48

Стандарт C++20: обзор новых возможностей C++. Часть 1 «Модули и краткая история C++»

Reading time10 min
Views65K


25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.

При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:

  1. Модули и краткая история C++.
  2. Операция «космический корабль».
  3. Концепты.
  4. Ranges.
  5. Корутины.
  6. Другие фичи ядра и стандартной библиотеки. Заключение.

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

Update. К статье добавлены правки и комментарии Антона Полухина.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments74

Обман обманщиков: форк-бомба нового уровня

Reading time4 min
Views62K
Сразу предупреждаю: не копируйте примеры кода из этой статьи и не запускайте их в своей командной оболочке.
Есть люди, которые развлекают себя жестокими шутками над новичками, обманом подводя их к запуску разрушительных инструкций в командной оболочке.



Часто это принимает форму грубо замаскированных команд, вроде той, что показана ниже. Её запуск приведёт к выполнению в текущей директории команды rm -rf *, которая всё удалит. Вот эта команда:

$(echo cm0gLXJmICoK | base64 -d)

Много лет назад я наткнулся на людей, которые играли в такие игры, и решил их проучить.
Читать дальше →
Total votes 196: ↑195 and ↓1+194
Comments101

Как извлечь пользу из статической типизации

Reading time29 min
Views15K

Эта статья о том, как извлечь максимум пользы из статической системы типов при дизайне вашего кода. Статья пытается быть language agnostic (получается не всегда), примеры на Java и взяты из жизни.

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

Прочти меня: код, который не выбесит соседа

Reading time10 min
Views27K


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

Я расскажу о подходах, которые мы используем в Яндекс.Такси для написания читаемого кода на C++, Python, JavaScript и других языках.
Читать дальше →
Total votes 67: ↑58 and ↓9+49
Comments75

Фитнес-трекер для скейта

Reading time18 min
Views18K

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

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

Компоненты, схема, плата, производство в Китае и результаты, обо всём этом –– под катом.

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

C++ в Практикуме. Как обучить студентов плюсам, не отпугивая

Reading time8 min
Views28K

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

Меня зовут Антон Полднев, я уже давно пишу в Яндексе на C++ и руковожу сервисом, написанным на этом языке. Параллельно я учу других людей навыкам разработки. С 2016 года я вёл курсы на Coursera, затем мы их прокачали и сделали на их основе курс для Практикума. В этом посте я расскажу, как мы учим людей C++, а также про основные особенности этого языка. 

Читать далее
Total votes 75: ↑58 and ↓17+41
Comments111

Самый беззащитный — уже не Сапсан. Всё оказалось куда хуже…

Reading time8 min
Views540K
{UPD 10.02.2021} Евгений Чаркин дал интервью на эту тему gudok.ru/newspaper/?ID=1552569
Под катом мои комментарии на некоторые тезисы.
{/UPD}

Больше года назад хабравчанин keklick1337 опубликовал свой единственный пост «Самый беззащитный — это Сапсан» в котором рассказывает как он без серьёзных ухищрений получил доступ ко внутренней сети РЖД через WiFi Сапсана.

В ОАО «РЖД» прокомментировали результаты этого расследования. «Есть результаты проверки. Почему удалось взломать? Наверное, потому, что злоумышленник. Наверное, из-за этого… Ну, он из „фана“. Юный натуралист. Там уязвимостей, которые бы влияли на утечку каких-то критических данных, нет. Мультимедийный портал „Сапсанов“ функционирует как положено и не нуждается в доработке», — заявил Евгений Чаркин.

То есть вместо того, чтобы выразить благодарность за обнаруженную уязвимость, автора обозвали «злоумышленником» и «Юным натуралистом».

К сожалению, но специалисты РЖД, начиная с директора по информационным технологиям, отнеслись к статье очень пренебрежительно, проигнорировав важное указание автора:
Также оттуда в сеть РЖД есть впн. Если захотите — найдёте её там сами.

И вот, год спустя я попал в сеть РЖД даже не садясь в Сапсан.



Видимо, только этот котэ добросовестно охраняет вокзал.

Как именно я попал в сеть РЖД с пруфами, чего не сделал директор по информационным технологиям ОАО «РЖД» Чаркин Евгений Игоревич и возможные последствия — под катом.
Читать дальше →
Total votes 1453: ↑1450 and ↓3+1447
Comments990

Micro Property — минималистичный сериализатор двоичных данных для embedded систем. Часть 2

Reading time3 min
Views2.8K
Некоторое время назад я опубликовал свою статью о разработке велосипедного велосипеда, в которой описал причины, побудившие меня этим заняться.

Если вкратце, то мне была нужна миниатюрная библиотека для микроконтроллеров с сериализатором двоичных данных и последующей передачей этих сообщений по низко скоростным линиям связи, тогда как обычные форматы xml, json, bson, yaml, protobuf, Thrift, ASN.1 и др. мне по разным причинам не подходили.

Как и ожидалось, решение оказалось более чем велосипедом, и тем не менее, сама публикация статьи на Хабре мне очень сильно помогла. Дело в том, что при первоначальном анализе возможных библиотек, я почему то упустил из вида сериализаторы MessagePack, CBOR и UBJSON.

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

После этого я прикрутил к библиотеке CBOR свой интерфейс (чтобы не перелопачивать исходники), и … решил от этого формата отказаться в пользу MessagePack :-)



Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments4

Бранч-стратегии при разработке в Git

Reading time4 min
Views21K
Если каждый член команды будет создавать ветки в Git так, как хочет, это обязательно приведет к хаосу и несогласованности. Чтобы избежать этого, лучше сформулировать и принять соответствующую бранч-стратегию — так вы сможете больше времени уделять разработке, а не управлению версиями. Нужно принять тот факт, что стратегия ветвления — важный рабочий инструмент.


Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments3

Переставляя кровати

Reading time9 min
Views40K
«Если лень работать – скажи, что надо всё поменять» © (только что придумал).

«Когда в борделе продажи падают, надо работниц менять, а не кровати переставлять» © (какой-то анекдот).

Ну всё, хватит цитат и умстований. Расскажу, как переставляли кровати на одном милом и уютном предприятии. Их прям хлебом кормить не надо было, дай только кроватки подвигать.
Читать дальше →
Total votes 68: ↑62 and ↓6+56
Comments23

Information

Rating
Does not participate
Location
Ессентуки, Ставропольский край, Россия
Date of birth
Registered
Activity