Как стать автором
Обновить
86
0.4
Евгений Охотников @eao197

Велосипедостроитель, программист-камикадзе

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

Полезные команды GNU/Linux для разработчика. Часть 2

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

И снова приглашаем погрузиться в команды GNU/Linux, которые удобно использовать разработчику для решения повседневных задач. Напоминаем, подборка ориентирована на тех, кто не хочет залезать глубоко в систему, но по работе вынужден иногда ходить на Linux-сервер. 

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

Статья написана по мотивам ИТ-посиделки, где мы обменивались полезными лайфхаками.

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

Меньше багов богу разработки: плюсы, минусы и нюансы имплементации подхода Secure by design

Время на прочтение16 мин
Количество просмотров5.7K
По дефолту разработчики, стремясь достичь безопасности приложения, идут операционным путем: пишут тесты и делают ревью, чтобы устранять уязвимости уже по факту их выявления. Однако существует подход, в рамках которого классический комплекс мер становится не нужен, — все эти требования будут неявно выполнены за счет использования правильного дизайна и архитектуры системы.

image

Меня зовут Сергей Талантов, я — архитектор и Security Champion в команде KasperskyOS «Лаборатории Касперского» и занимаюсь разработкой продуктов, к которым предъявляются самые жесткие требования в плане безопасности. В этой статье расскажу про подход Secure by design: от теории (что это такое и какие виды этого подхода существуют, а также как и почему мы его применяем) к практике (паттерны безопасного дизайна и примеры их использования на С++).
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии3

Руководство по CMake для разработчиков C++ библиотек

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

Данное руководство позволит читателю составить полную картину того, как организовать сборку C++ библиотек с использованием современных возможностей CMake. Предполагается, что читатель имеет представление о базовых понятиях из мира CMake и динамических/статических C++ библиотек, так как в руководстве они могут не объясняться.

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

Яндекс выложил в опенсорс бету фреймворка userver

Время на прочтение10 мин
Количество просмотров75K
Сегодня мы анонсируем выход в опенсорс фреймворка userver для создания высоконагруженных приложений. Для нас это важный способ поделиться опытом в разработке микросервисов, который мы накопили. Вот ссылка на Гитхаб-репозиторий c исходным кодом, документацией, примерами, шаблоном для создания своих сервисов (с настроенным CI, сборкой и тестовым окружением) и сервисом динамических конфигов. Всё это опубликовано под лицензией Apache 2.0.



🐙userver позволяет быстро создавать эффективные микросервисы на языке C++ и уже много лет активно используется в Яндекс Go, Еде, Лавке, Доставке, Маркете, финтехе и других проектах. Вот из каких требований мы исходили в процессе разработки:

  • Простота. Стажёр или студент, приходя к нам, может уже через неделю написать и отправить в продакшен новый микросервис.
  • Надёжность. Многие ошибки, в том числе и связанные с многопоточностью, можно поймать на этапе компиляции. Кроме того, фреймворк даёт подсказки по исправлению проблем.
  • Полнота. В userver есть всё необходимое для тестирования, работы с разными базами данных, кеширования, логирования, трейсинга, распределённых блокировок, работы с JSON, BSON, YAML, изменения параметров сервиса на лету и так далее.

Сейчас я расскажу о том, как возникла идея userver, как фреймворк развивался, в каких задачах его сейчас используют и почему именно выход в опенсорс был логичным следующим шагом. А затем приведу пример написания нового микросервиса.
Читать дальше →
Всего голосов 141: ↑137 и ↓4+169
Комментарии142

Привлекательные структуры данных

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

В процессе изучения разных алгоритмов и структур данных приходит понимание, что не все они применимы в прикладных задачах (в отличие от задач про Васю и Петю/Алису и Боба). Но тот факт, что алгоритм/структура данных не является полезной на практике не означает, что идеи в них содержащиеся не привлекают пытливые умы даже из чистого любопытства. Потому речь пойдёт о красивых (субъективно) и, что важно, простых с точки зрения концепции структурах данных. 

Помните: если что-то не компилируется, это псевдокод. 

Привлечься!
Всего голосов 78: ↑78 и ↓0+78
Комментарии16

Особенности работы с POSIX-сигналами

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

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

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

What's new in rotor v0.09

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

actor system


rotor is a non-intrusive event loop friendly C++ actor micro framework, similar to its elder brothers like caf and sobjectizer. The new release came out under the flag of pluginization, which affects the entire lifetime of an actor.

Read more →
Всего голосов 12: ↑12 и ↓0+12
Комментарии11

Алгоритмы быстрой обработки HTTP-строк

Время на прочтение22 мин
Количество просмотров9.3K
В HTTP/2 появилась компрессия стандартных заголовков, но тело URI, Cookie, значения User-Agent по-прежнему могут составлять десятки килобайт и требуют токенизации, поиска и сравнения подстрок. Задача становится критичной, если HTTP-парсер должен обрабатывать интенсивный злонамеренный трафик. Стандартные библиотеки предоставляют обширный инструментарий обработки строк, но у HTTP-строки есть своя специфика. Именно для этой специфики разработан HTTP-парсер Tempesta FW. Его производительность в несколько раз выше по сравнению с современными Open Source решениями и превосходит быстрейшие из них.


Александр Крижановский (krizhanovsky) основатель и системный архитектор Tempesta Technologies, эксперт в области высокопроизводительных вычислений в Linux/x86-64. Александр расскажет об особенностях структуры HTTP-строк, объяснит, почему стандартные библиотеки плохо подходят для их обработки, и представит решение Tempesta FW.

Под катом: как HTTP Flood превращает ваш HTTP-парсер в узкое место, проблемы x86-64 с branch mispredictions, кэшированием и не выровненной памятью на типичных задачах HTTP-парсера, сравнение FSM с прямыми переходами, оптимизация GCC, автовекторизация, strspn()- и strcasecmp()-like алгоритмы для HTTP-строк, SSE, AVX2 и фильтрация инъекционных атак с использованием AVX2.
Всего голосов 26: ↑25 и ↓1+37
Комментарии2

Сверхсовременные иммутабельные структуры данных

Время на прочтение22 мин
Количество просмотров30K
Годами эксперты в С++ рассуждают о семантике значений, иммутабельности и разделении ресурсов за счет коммуникации. О новом мире без мьютексов и гонок, без паттернов Command и Observer. На деле все не так просто. Главная проблема по-прежнему в наших структурах данных.



Иммутабельные структуры данных не меняют своих значений. Чтобы что-то с ними сделать, нужно создавать новые значения. Старые же значения остаются на прежнем месте, поэтому их можно без проблем и блокировок читать из разных потоков. В итоге ресурсы можно совместно использовать более рационально и упорядоченно, ведь старые и новые значения могут использовать общие данные. Благодаря этому их куда быстрей сравнить между собой и компактно хранить историю операций с возможностью отмены. Все это отлично ложится на многопоточные и интерактивные системы: такие структуры данных упрощают архитектуру десктопных приложений и позволяют сервисам лучше масштабироваться. Иммутабельные структуры — секрет успеха Clojure и Scala, и даже сообщество JavaScript теперь пользуется их преимуществами, ведь у них есть библиотека Immutable.js, написанная в недрах компании Facebook.

Под катом — видео и перевод доклада Juan Puente с конференции C++ Russia 2019 Moscow. Хуан рассказывает про Immer — библиотеку иммутабельных структур для C++. В посте:

  • архитектурные преимущества иммутабельности;
  • создание эффективного персистентного векторного типа на основе RRB-деревьев;
  • разбор архитектуры на примере простого текстового редактора.

Всего голосов 84: ↑84 и ↓0+84
Комментарии57

Автоматная модель управления программ

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

1. Введение


В [1] был дан ответ на вопрос, что считать автоматным программированием (АП), но не была подробно описана модель конечного автомата (КА) в качестве модели управления автоматных программ. При этом понятно, что чистый абстрактный автомат на эту роль не годится, т.к. ограничен числом каналов. Но и структурная модель автомата, как и соответствующая ей теория структурных автоматов, не позволяют пока дать ответ по выбору модели автомата.

Проблема начинается с того, что среди множества работ по теории конечных автоматов (ТКА) мало дающих определение модели структурного конечного автомата (СКА). Правда, можно понять, что структурный автомат — это [структурная] схема из элементарных автоматов (функциональных элементов), реализующая модель абстрактного автомата [2]. Напомним, что в соответствии с теорией все начинается с создания модели устройства в форме абстрактного автомата, а затем ставится задача синтеза цифровой схемы, которая его реализует [3].

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

Правда, тут же закономерен вопрос — зачем еще один и довольно необычный «автоматный инструментарий»? На этот вопрос мы и попробуем ответить, дав определение модели [вложенного] автоматного управления, рассмотрев также ее преимущества по сравнению с обычной моделью программирования.
Читать дальше →
Всего голосов 2: ↑1 и ↓10
Комментарии2

Трактат о Pinе. Мысли о настройке и работе с пинами на С++ для микроконтроллеров (на примере CortexM)

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

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


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


Продолжу развивать тему о встроенном софте для небольших микроконтроллеров в устройствах для safety critical систем.


На этот раз попробую предложить способ работы с конкретными ножками микроконтроллера, используя обертку над регистрами, которую я описал в прошлой статье Безопасный доступ к полям регистров на С++ без ущерба эффективности (на примере CortexM)


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


using Led1Pin = Pin<Port<GPIOA>, 5U, PinWriteableConfigurable> ;
using Led2Pin = Pin<Port<GPIOC>, 5U, PinWriteableConfigurable> ;
using Led3Pin = Pin<Port<GPIOC>, 8U, PinWriteable> ;
using Led4Pin = Pin<Port<GPIOC>, 9U, PinWriteable> ;
using ButtonPin = Pin<Port<GPIOC>, 10U, PinReadable> ;

//Этот вызов развернется в  2 строчки
// GPIOA::BSRR::Set(32) ; // reinterpret_cast<volataile uint32_t *>(0x40020018) = 32U 
// GPIOС::BSRR::Set(800) ; // reinterpret_cast<volataile uint32_t *>(0x40020818) = 800U 
 PinsPack<Led1Pin, Led2Pin, Led3Pin, Led4Pin>::Set() ; 

//Ошибка компиляции, вывод к которому подключена кнопка настроен только на вход
ButtonPin::Set() 

auto res = ButtonPin::Get() ; 
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии181

Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++

Время на прочтение20 мин
Количество просмотров55K
Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».

Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.


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

Очень много YouTube-каналов для прокачки английского языка для программистов

Время на прочтение4 мин
Количество просмотров61K
Привет, Хабр!

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

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

Поучить английский


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

EngVid. Если бы можно было выбрать что-то одно для улучшения английского, то это оно. Разные преподы и тематики, постоянное обновление, бездонный ресурс. Ещё сайт одноимённый крутой, с удобной навигацией — можно найти очень узкую тему по интересам.
Читать дальше →
Всего голосов 59: ↑52 и ↓7+45
Комментарии19

Очень много менеджеров

Время на прочтение6 мин
Количество просмотров5.6K
Эта статья написана вместе с Екатериной Корнеевой (Wrike, Customer Success Manager). Екатерина является профессионалом с 4-летним опытом работы в продажах и клиентском сервисе.

В современных компаниях, распространяющих свой продукт под подписке (SaaS), количество менеджеров, вовлеченных в работу с клиентом на разных стадиях, значительно увеличилось. Раньше подход был несколько другим: как правило, компании предпочитали брать традиционные роли (такие как КАМ — менеджер по работе с ключевыми клиентами; сотрудник отдела технической поддержки и др.) и слегка модифицировать их. Но по мере роста и развития, приходит осознание важности фундаментального пересмотра ролей (иногда это приходится делать с чистого листа). Чтобы сохранить конкурентное преимущество и предложить клиентам лучший сервис, роли должны быть четко обозначены и, что немаловажно, наличие каждой из них должно быть четко обосновано.

image
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии1

Сравнение REST и GraphQL

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

Перевод статьи Sashko Stubailo GraphQL vs. REST

Два способа отправки данных по протоколу HTTP: в чем разница?


GraphQL часто представляют как революционно новый путь осмысления API. Вместо работы с жестко определенными на сервере конечными точками (endpoints) вы можете с помощью одного запроса получить именно те данные, которые вам нужны. И да — GraphQL гибок при внедрении в организации, он делает совместную работу команд frontend- и backend-разработки гладкой, как никогда раньше. Однако на практике обе эти технологии подразумевают отправку HTTP-запроса и получение какого-то результата, и внутри GraphQL встроено множество элементов из модели REST.


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


Так что давайте сразу к делу. Мы определим некоторые свойства API, а затем обсудим, как они реализованы в GraphQL и REST.
Читать дальше →
Всего голосов 28: ↑23 и ↓5+18
Комментарии282

Как построить IIoT архитектуру своими руками

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

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



IoT — интернет вещей — подразумевает управление устройствами, предназначенными для выполнения простых бытовых задач (открыть ворота гаража, когда подъезжает машина, включить свет по датчику движения или по команде, следить за температурой в помещении), то под IIoT — индустриальным интернетом вещей — обычно имеется в виду “оцифровка” данных с производств, на основе которых можно провести экспертный анализ, часто при помощи машинного обучения.

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

Пишем свой протокол поверх UDP

Время на прочтение24 мин
Количество просмотров41K
Первые прямые трансляции с места событий появились в России почти 70 лет назад и вели их из передвижной телевизионной станции (ПТС), которая внешне походила на «троллейбус» и позволяла вести эфиры не из студии. А всего лишь три года назад Periscope позволил вместо «троллейбуса» использовать мобильный телефон.

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


Еще через полгода, летом 2016, Одноклассники запустили свое мобильное приложение OK Live для стриминга, в котором постарались решить эти проблемы.

Александр Тоболь отвечает за техническую часть видео в Одноклассниках и на Highload++ 2017 рассказал про то, как писать свой UDP протокол, и зачем это может потребоваться.

Из расшифровки его доклада вы узнаете все про другие протоколы стриминга видео, какие есть нюансы, и про то, какие уловки иногда требуются.


Говорят, что надо всегда начинать с архитектуры и ТЗ — якобы без этого нельзя! Так и сделаем.
Всего голосов 55: ↑53 и ↓2+51
Комментарии44

Кто такой продакт-менеджер на проекте и может ли он получиться из ведущего разработчика?

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


Меня зовут Людмила, я 7 лет работаю продакт-менеджером. Сейчас расскажу, на что это похоже.

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

Продакт-менеджер сильно пересекается по функционалу со многими другими ролями. Может выполнять задачи руководителя проекта. И ещё делать кое-что до и после этого. Вот его функционал вкратце:

  1. Анализирует, что может понадобиться пользователям и исследует рынок. То есть придумывает идеи новых проектов и ставит им приоритеты.
  2. Совместно с техкомандой выбирает техническое решение.
  3. Просчитывает экономику продукта и определяет, стоит ли этим, вообще, заниматься.
  4. Собирает рабочую группу, ставит задачи архитекторам и остальным ключевым лицам проекта.
  5. Следит за всем-всем-всем по организации, в частности, отвечает за взаимодействие с партнёрами и вендорами.
  6. После внедрения сопровождает продукт, занимается его развитием и усовершенствованием минимум год.
  7. Время от времени просыпается ночью с горящими глазами и идеей нового продукта.

Продакт-менеджер может получиться из руководителя проекта. На этой роли ответственности больше, но и кайфа, оттого что ты сам что-то придумал и создал это — море. Самое крутое в нашей работе — это вместе с классной командой делать масштабные проекты, которые «взлетят». Это чувство окрыляет. Но и проблем в работе немало.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии10

Информация

В рейтинге
1 507-й
Откуда
Гомель, Гомельская обл., Беларусь
Зарегистрирован
Активность