Search
Write a publication
Pull to refresh
57
0.1
Alexander @speshuric

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

Send message

Как выстроить процессы и перестать издеваться над командой

Reading time10 min
Views58K
Всем привет! Сегодня хотел поговорить о процессах разработки. По мере роста компании не только развивается сам бизнес, но и копятся проблемы внутри, в частности в процессе разработки. Часто их пытаются решить внедрением каких-то практик и новомодных методологий. Увы, это насильное перестраивание процесса по книжкам и тренингам нередко это приводит к ещё большим проблемам — издевательству над людьми.

Недавно я выступал на конференции Saint TeamLead Conf 2019, в докладе я рассказал о том, как смог найти ряд проблем в рабочем процессе и потом постепенно поборол их. Здесь я постараюсь описать наиболее ценные практики, которые мне помогли не только наладить рабочий процесс, но и перестать издеваться над разработчиками. У сотрудников изменилось отношение к компании в целом и рабочему процессу.

Правильная работа с потоками в Qt

Reading time13 min
Views88K
Qt — чрезвычайно мощный и удобный фреймворк для C++. Но у этого удобства есть и обратная сторона: довольно много вещей в Qt происходят скрыто от пользователя. В большинстве случаев соответствующая функциональность в Qt «магически» работает и это приучает пользователя просто принимать эту магию как данность. Однако когда магия все же ломается то распознать и решить неожиданно возникшую на ровном казалось бы месте проблему оказывается чрезвычайно сложно.

Эта статья — попытка систематизации того как в Qt «под капотом» реализована работа с потоками и о некотором количестве неочевидных подводных камней связанных с ограничениями этой модели.

Основы
Thread affinity, инициализация и их ограничения
Главный поток, QCoreApplication и GUI
Rendering thread
Заключение

А Вы правильно работаете с QThread и сигналами?

Зачем нужны ranges из C++20 в простой числодробилке?

Reading time7 min
Views11K

В последнее время интервалы (ranges), которые должны войти в стандарт C++20, довольно много обсуждают, в том числе и на Хабре (пример, где много примеров). Критики интервалов хватает, поговаривают, что


  • они слишком абстрактны и нужны только для очень абстрактного кода
  • читаемость кода с ними только ухудшается
  • интервалы замедляют код

Давайте посмотрим совершенно рабоче-крестьянскую практическую задачку, для того, чтобы понять, справедлива ли эта критика и правда ли, что Эрик Ниблер был укушен Бартошем Милевски и пишет range-v3 только при полной луне.


kdpv


Будем интегрировать методом трапеций вот такую функцию: $f(t) = 3 t^2 \sin t^3$, в пределах от нуля до $\tau$. Если $\tau^3 / \pi$ равняется нечётному числу, то интеграл равен 2.

Читать дальше →

C++ Enterprise Edition. Возможно ли?

Reading time16 min
Views15K

C++ Enterprise Edition


Что такое "enterprise edition"


c++ee


Удивительно, но за все время моей работы в IT, я ни разу не слышал, чтобы кто-то говорил "enterprise edition" относительно языка программирования, кроме как для Java. Но ведь приложения для корпоративного сегмента люди пишут на многих языках программирования, и сущности, которыми оперируют программисты, если не идентичны, то схожи. И для c++ в частности, я бы хотел заполнить пробел enterpr'айзности, хотя бы рассказав об этом.

Читать дальше →

Доставку заказывали? Как «Перекрёсток» доставляет 6000 заказов в день

Reading time6 min
Views25K
Люди любят доставку. За небольшую плату ты покупаешь возможность получить нужные товары, не выходя из дома: еду из любимого ресторана, крупногабаритную мебель, книгу, которую хотел давно прочитать, да и вообще — что угодно. И рост числа сервисов по быстрой доставке всего на свете только подтверждает этот тезис. Да и для магазинов это плюс — запартнёрился с любой доставкой товаров до двери и увеличил свой чек.

У нас в «Перекрёстке» есть собственная доставка. Для человека со стороны процесс доставки из магазина до дома выглядит примерно так:

  1. Выбрал что-то на сайте и положил в корзину.
  2. Ввёл адрес и оплатил заказ.
  3. Магазин быстро отдал заказ курьеру.
  4. Курьер доставил заказ.

На самом деле, всё немного сложнее. Меня зовут Виталий, я руководитель отдела разработки, и сегодня я расскажу, как у нас всё работает. И на чём.


Читать дальше →

gRPC в качестве протокола межсервисного взаимодействия. Доклад Яндекса

Reading time16 min
Views239K
gRPC — опенсорсный фреймворк для удаленного вызова процедур. В Яндекс.Маркете gRPC используется как более удобная альтернатива REST. Сергей Федосеенков, который руководит службой разработки инструментов для партнеров Маркета, поделился опытом использования gRPC в качестве протокола для построения интеграций между сервисами на Java и C++. Из доклада вы узнаете, как избежать частых проблем, если вы начинаете использовать gRPC после REST, как возвращать ошибки, реализовать трассировку, отлаживать запросы и тестировать вызовы клиентов. В конце есть неофициальная запись доклада.

— Сначала хотелось бы познакомить вас с некоторыми фактами про Яндекс.Маркет, они будут полезны в рамках доклада. Первый факт: мы пишем сервисы на разных языках. Это накладывает требования по наличию клиентов для сервисов.
Читать дальше →

Для доказательства 30-летней гипотезы из области информатики хватило двух страничек

Reading time8 min
Views61K

Гипотеза «чувствительности» ставила в тупик многих выдающихся специалистов по информатике, но её новое доказательство оказалось настолько простым, что один исследователь смог свести его к единственному твиту



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

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

Инициализация и работа интерпретатора байткода в JVM HotSpot под x86

Reading time21 min
Views6.6K

Почти каждый Java разработчик знает, что программы, написанные на языке Java изначально компилируются в JVM-байткод и хранятся в виде class-файлов стандартизованного формата. После попадания таких class-файлов внутрь виртуальной машины и пока до них еще не успел добраться компилятор, JVM интерпретирует байткод, содержащийся в этих class-файлах. Данная статься содержит обзор принципов работы интерпретатора применительно к OpenJDK JVM HotSpot.

Читать дальше →

Reactor, WebFlux, Kotlin Coroutines, или Асинхронность на простом примере

Reading time12 min
Views23K


Многие сервисы в современном мире, по большей части, «ничего не делают». Их задачи сводятся к запросам к другим базам/сервисам/кешам и агрегации всех этих данных по различным правилам и разнообразной бизнес-логике. Поэтому неудивительно, что появляются такие языки, как Golang, с удобной встроенной конкурентной системой, позволяющей легко организовывать неблокирующий код.


В JVM-мире всё немного сложнее. Есть огромное количество фреймворков и библиотек, блокирующих потоки при использовании. Так и сама stdlib может делать то же самое порой. Да и в Java нет аналогичного механизма, похожего на горутины в Golang.


Тем не менее, JVM активно развивается и появляются новые интересные возможности. Есть Kotlin с корутинами, которые по своему использованию очень похожи на горутины из Golang (хоть и реализованы совершенно по-другому). Есть JEP Loom, который в будущем привнесёт fibers в JVM. Один из самых популярных веб-фреймворков — Spring — не так давно добавил возможность создавать полностью неблокирующие сервисы на Webflux. А с недавним релизом Spring boot 2.2 интеграция с Kotlin стала ещё лучше.


Предлагаю на примере небольшого сервиса по переводу денег с одной карты на другую самим написать приложение на Spring boot 2.2 и Kotlin для интеграции с несколькими внешними сервисами.

Читать дальше →

Как бороться с привычками запрограммированным людям

Reading time6 min
Views48K
Перевод статьи из микроблога биохакера Сержа Фаге.

В человеке есть запрограммированные паттерны поведения, которые всегда запускаются одним и тем же механическим, линейным способом. Так называемые «страстные желания» (англ. – cravings) – вещи и занятия, которые очень хочется начать делать в определённые моменты времени.

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


Читать дальше →

История видеопроцессоров, часть 3: консолидация рынка, начало эпохи конкуренции Nvidia и ATI

Reading time20 min
Views18K
image

Часть 1: 1976-1995 годы

Часть 2: 3Dfx Voodoo

Падение 3Dfx и расцвет двух гигантов


На рубеже веков отрасль графики демонстрировала тенденции к дальнейшей консолидации.

С профессионального рынка полностью ушла iXMICRO, а NEC и Hewlett-Packard выпустили свои последние продукты — серии TE5 и VISUALIZE FX10. После продажи RealVision компания Evans & Sutherland тоже покинула отрасль, сосредоточившись на проекционных системах для планетариев.

На рынке потребительской графики ATI объявила о приобретении в феврале 2000 года ArtX Inc. за 400 миллионов долларов. ArtX разрабатывала GPU под кодовым названием Project Dolphin (который позже назвали «Flipper») для Nintendo GameCube, что значительно увеличило годовую прибыль ATI.


GPU компании ATI для GameCube

Также в феврале 3dfx объявила о сокращении штата на 20%, а сразу после этого купила Gigapixel за 186 миллионов и получила её технологии рендеринга на основе тайлов.

CreateRemoteThread для Linux

Reading time46 min
Views15K

Мицуха несёт новые потокиВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.


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


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


Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.

Читать дальше →

Необычные задачи по физике развивающие научное мышление (для школьников)

Reading time3 min
Views28K
Возможно вы уже читали мои статьи:


А сегодня я хочу поделиться своим давним но интересным проектом и его идеей.

Когда я учился в аспирантуре, и работал в “Лаборатории методики преподавания физики” при Харьковском национального университета им. В.Н.Каразина, я обеспечивал свою семью за счет репетиторств. Хотелось давать ученикам возможность увидеть физику не только в учебнике но и в реальной жизни, удивить и завлечь их наукой. Тогда и пришла идея сделать простенький сайт, в помощь мне и учителям, которые приходили в нашу лабораторию на курсы повышения квалификации.



С тех пор прошло более 10 лет, сайт не развивался, но актуальность свою сохранил. Данный пост будет интересен как преподавателям, так и родителям, которые хотят, чтоб их ребенок любил и знал физику. Заодно сможете проверить и свои навыки.

В поисках LD_PRELOAD

Reading time12 min
Views28K
Эта заметка была написана в 2014-м году, но я как раз попал под репрессии на хабре и она не увидела свет. За время бана я про неё забыл, а сейчас нашёл в черновиках. Думал было удалить, но авось кому пригодится.



В общем, небольшое пятничное админское чтиво на тему поиска «включенного» LD_PRELOAD.
Читать дальше →

Мой опыт разработки на языке Nim

Reading time13 min
Views33K


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


Уже довольно давно я пишу свой игровой фреймворк — такой pet project для души. А так как для души нужно выбирать что-то, что нравится (а в данном случае — на чём нравится писать), то выбор мой пал на nim. В этой статье я хочу поговорить именно про nim, про его особенности, плюсы и минусы, а тема геймдева лишь задаёт контекст моего опыта — какие задачи я решал, какие трудности возникли.


Давным-давно, когда трава была зеленее, а небо чище, я встретил nim. Хотя нет, не так. Давным-давно я хотел заниматься разработкой игр, чтобы написать свою Самую Классную Игру — думаю, многие проходили через это. В те времена Unity и Unreal Engine только-только стали появляться на слуху и, вроде как, ещё не были бесплатными. Я не стал их использовать, не столько из-за жадности, сколько из-за желания написать всё самому, создать игровой мир полность с нуля, с самого первого нулевого байта. Да, долго, да, сложно, зато сам процесс приносит удовольствие — а что ещё для счастья надо?

Читать дальше →

Математики нашли закономерность, разбираясь в том, как избежать её появления

Reading time9 min
Views14K

Мы, наконец, узнали, насколько большим должно быть множество чисел, чтобы в нём гарантировано содержалась закономерность под названием «многочленная прогрессия»




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

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

«Этим закономерностям присуща своего рода неразрушимость», — сказал Теренс Тао из Калифорнийского университета в Лос-Анджелесе.
Читать дальше →

ELFийские трюки в Go

Reading time6 min
Views11K


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


Предупреждение: ничему полезному эта мини-статья вас не научит.

Читать дальше →

Как взлететь на батарейках или практика эксплуатации электропарамотора SkyMax. Часть 2

Reading time4 min
Views20K
Продолжение статьи «Как взлететь на батарейках или немного теории электропарамотора. Часть 1».

4. Описание электропарамотора SkyMax.

В предыдущей статье уже фигурировала фотография внутреннего устройства используемой батареи в проекте. Она же — в собранном виде:

image

Кратко ее характеристики еще раз:

  • конфигурация 15S16P LG HG2;
  • номинальное напряжение 55 В;
  • ёмкость: 46 А-ч;
  • диапазон рабочих напряжений: 45 — 63 В;
  • продолжительный ток разряда: 80 А;
  • кратковременный ток разряда: 320 А;
  • запасаемая энергия: 2.6 кВт-ч;
  • сечение силовых проводов 4х6 кв.мм;
  • вес 12 кг.

Отлаживаем развертывание ПО со strace

Reading time14 min
Views13K


Моя основная работа — это, по большей части, развертывание систем ПО, то есть уйму времени я трачу, пытаясь ответить на такие вот вопросы:


  • У разработчика это ПО работает, а у меня нет. Почему?
  • Вчера это ПО у меня работало, а сегодня нет. Почему?

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


Поэтому вместо обычных инструментов для отладки вроде gdb у меня есть другой набор инструментов для отладки развертывания. И мой любимый инструмент для борьбы с проблемой типа "Почему это ПО у меня не пашет?" называется strace.

Читать дальше →

Отслеживаем прогресс выполнения в Python

Reading time2 min
Views171K

Зачем нужны индикаторы прогресса?


Индикаторы прогресса (progress bar) — визуальное отображение процесса работы. Они избавляют нас от необходимости беспокоиться о том, не завис ли скрипт, дают интуитивное представление о скорости его выполнения и подсказывают, сколько времени осталось до завершения.


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

Читать дальше →

Information

Rating
4,727-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity