вторник, 1 января 2030 г.

О блоге

Более двадцати лет я занимался разработкой ПО, в основном как программист и тим-лид, а в 2012-2014гг как руководитель департамента разработки и внедрения ПО в компании Интервэйл (подробнее на LinkedIn). В настоящее время занимаюсь развитием компании по разработке ПО stiffstream, в которой являюсь одним из соучредителей. Поэтому в моем блоге много заметок о работе, в частности о программировании и компьютерах, а так же об управлении.

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

понедельник, 31 декабря 2029 г.

[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)

Вы художник? Бармен или музыкант? Или, может быть, коллекционер? Плотник или столяр? Кузнец или слесарь? Владеете маленьким магазинчиком или управляете большим производством? Реставрируете старинные часы или просто починяете примус? Всю жизнь занимаетесь своим любимым делом и хотели бы иметь фото на память?

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

суббота, 15 мая 2021 г.

[work] У stiffstream есть пара свободных рук. Моих свободных рук

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

В последние 7 лет занимался развитием таких открытых проектов, как SObjectizer/so5extra, RESTinio, json_dto. Что включало в себя выбор функциональности для нового релиза, проектирование, реализация, тестирование, документирование, реагирование на issues и какой-никакой PR (более 50 статей на Хабре с 2016-го года + выступления на конференциях CoreHard C++ и C++ Russia).

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

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

Могу изобрести велосипед, могу набросать архитектуру, могу раскритиковать архитектуру, могу провести код-ревью и объяснить почему код отстой (или нет), могу заставить окаменевший говнокод работать. И швец, и жнец, и на дуде игрец, если в двух словах.

В последние годы специализировался на велосипедостроении. Уровень мастерства в этом занятии можно оценить по easy_parser и easy_parser_router из RESTinio (на то, как это воплощено в коде, посмотреть можно здесь и здесь).

Составить впечатление о качестве моего кода можно здесь (timertt), здесь (so5extra) или здесь (atrataga). Именно эти разработки были сделаны практически в одиночку.

Могу сопровождать код документацией (см. Wiki для SObjectizer и so5extra, статьи на Хабре). Предполагаю, что умею связно излагать мысли в письменном виде, но это не точно.

Если кому-то интересно посмотреть на мое более развернутое резюме, то проще всего заглянуть в мой профиль на LinkedIn.

Чем я могу быть полезен вашему проекту и/или вашей компании:

  • в качестве консультанта по C++ или "играющего тренера" для вашей C++ной команды, если в ней мало опытных C++ников: проведение code review, объяснение почему тот или иной код опасен, прививание команде навыков написания более-менее идеоматического C++ кода (в том числе с учетом возможностей modern C++);
  • в качестве самостоятельного и автономного субконтрактора, который может создать для вас прототип нового решения и/или привести в нормальное состояние кусок старой кодовой базы;
  • в качестве члена проектной команды, работающего удаленно.

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

Рейт от 20 до 35 USD в час в зависимости от проекта. Чем ответственнее проект, чем более требовательны вы к гарантийным обязательствам, чем короче сроки, тем дороже.

Заранее предупрежу о своих недостатках чтобы не отнимать друг у друга время:

  • английский язык на уровне "читаю и перевожу со словарем" (как-то так). Вот уж чего не дадено, того не дадено;
  • не отношусь к числу тех, кто умеет все и берется за все. Если я чего-то не знаю или в чем-то не разбираюсь, то сразу говорю об этом. Вам решать готовы ли вы оплачивать мое погружение в нужную вам тему;
  • к работе подхожу вдумчиво и основательно. Из-за этого вы можете столкнуться с большим потоком уточняющих вопросов с моей стороны, а прогнозы по срокам работ могут иметь весьма широкий диапазон;
  • предпочитаю находить компромиссы и могу продолжать конструктивное общение даже в ситуациях, когда на исполнителя на повышенных тонах в нецензурной форме пытаются повесить всех собак, но политкорректностью не отличаюсь и рублю правду матку не взирая на лица и звания;
  • если вам нужен кто-то энергичный и способный резво махать шашкой в экстремальных условиях, то я вам точно не подойду. Когда случается пожар, все носятся с горящей жопой и никто не знает куда бежать, за что хвататься, то на вопрос "Ты ж программист, так какого хрена, а?" вы услышите от меня разве что "Дайте мне спокойно подумать";
  • обладаю специфическим чувством юмора, чрезмерной самоиронией и несерьезным отношением к самому себе;
  • врожденный NIH-синдром.

Если описанное выше вас устраивает, то связаться со мной можно через Telegram/WhatsUp/Viber по номеру +375-29-536-32-25 или по почте eao197 на stiffstream тчк com (более оперативно я доступен по eao197 на gmail).

[prog.flame] Стабильному Rust-у исполнилось 6 лет

Шесть лет назад состоялся релиз "стабильной" версии Rust 1.0. Так что именно с 15-го мая 2015 года можно смело отсчитывать возраст языка программирования Rust.

Давеча в FB я уже высказался на эту тему. А данный пост можно рассматривать как расширенную и дополненную версию FB-шной заметки.

Революции не случилось

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

суббота, 1 мая 2021 г.

[life.cinema] Очередной кинообзор (2021/04)

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

Аферистка (I Care a Lot, 2020). Весьма неплохо, смотреть было интересно.

Дикая (Wild, 2014). Хороший фильм. Меня неприятно удивило то, насколько невнятно в фильме показали уникальные по своей красоте места, которые попадали в кадр. Но это, наверное, уже придирка.

Никто (Nobody, 2021). Не впечатлил. Местами было скучно. Местами фрагменты фильма напоминали слишком затянутые видеоклипы. В сюжете никаких неожиданностей. В общем, не самая плохая попытка сделать бюджетный вариант "Джона Уика". Но именно что попытка. Глянуть можно, но чего-то выдающегося ждать не следует.

Взаперти (Run, 2020). Посмотреть можно, но общее впечатление такое, что достаточного бюджета фильму не выделили.

Выбивая долги (The Tax Collector, 2020). Занудная ерунда. Фильм, в котором никому не сочувствуешь и после просмотра жалеешь, что поубивали не всех. Шайа ЛаБаф, как актер, переиграл всех остальных актеров фильма вместе взятых, но его персонаж так и не "выстрелил", так что зачем в этот четверосотный фильмец зазвали такого мощного исполнителя я не понял.

суббота, 17 апреля 2021 г.

[prog.wtf] Пример творческого подхода некоторых софтописателей к трактовке спецификаций

Есть такой простой как две копейки протокол: SOCKS5. Этот протокол подразумевает последовательный обмен всего лишь несколькими сообщениями. Но именно обмен в режиме "запрос-ответ". Т.е. клиент отсылает первое сообщение, затем ждет, что ответит сервер, потом шлет второе сообщение.

Процедура подключения клиента к SOCKS5 серверу проста.

Клиент подключается и шлет первый PDU, в котором перечисляются методы аутентификации, поддерживаемые клиентом (например: без аутентификации вообще, на базе username/password).

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

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

Итак, простая схема, в которой клиент шлет сообщение серверу, сервер отвечает, затем клиент шлет второе сообщение и т.д.

Однако, как оказалось, некоторые софтописатели применяют любопытный хак: они шлют два первых сообщения от клиента сразу. Так, в первом PDU клиент говорит, что он желает использовать только способ аутентификации по username/password. И тут же приклеивает к первому PDU второй, который как раз и содержит username/password.

вторник, 13 апреля 2021 г.

[life.music] Продолжение саги о выборе хороших, но недорогих наушников на Aliexpress. Хороший звук за минимальный бюджет

Продолжаю делится впечатлениями от процесса поиска на Aliexpress недорогих, но хороших наушников. Делать обзор побывавших у меня наушников-вкладышей пока не готов (да и сомневаюсь, что это будет кому-то интересно). Поэтому сегодня расскажу о том, на что бы я сейчас, имея мой сегодняшний опыт, потратил бы деньги. Чтобы и хороший звук получить, и чтобы обошлось это в небольшую сумму, и чтобы не приходилось выходить за наш РБшный лимит в 25 USD за одну посылку.

Дисклаймер. Под хорошим звуком я понимаю звук, который устраивает меня. Т.е. когда я надеваю наушники, начинаю слушать музыку и меня перестает волновать через какие именно устройства я слушаю, какие у них характеристики, сколько они стоят и пр. Наверняка бывалые аудиофилы, профессионалы в обработке звука, да и просто люди с музыкальным слухом имеют совсем другое мнение по поводу понятия "хороший звук", но мне фиолетово :)

Главный фокус -- источник звука

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

Но гораздо меньше людей задумываются о том, что следующим важнейшим фактором является источник звука, т.к. устройство, которое и воспроизводит наш качественный MP3- или FLAC-файл. Я, например, на эту тему даже не задумывался. А зря.