Как стать автором
Обновить
7
0
Влад @vladon

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

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

Миграция с Nginx на Envoy Proxy

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

Привет, Хабр! Предлагаю вашему вниманию перевод поста: Миграция с Nginx на Envoy Proxy.


Envoy — это высокопроизводительный распределенный прокси-сервер (написанный на C++), предназначенный для отдельных сервисов и приложений, также это коммуникационная шина и «universal data plane», разработанный для больших микросервисных архитектур «service mesh». При его создании были учтены решения проблем, которые возникали при разработке таких серверов, как NGINX, HAProxy, аппаратных балансировщиков нагрузки и облачных балансировщиков нагрузки. Envoy работает вместе с каждым приложением и абстрагирует сеть, предоставляя общие функции независимо от платформы. Когда весь служебный трафик в инфраструктуре проходит через сетку Envoy, становится легко визуализировать проблемные области с помощью согласованной наблюдаемости, настройки общей производительности и добавления основных функций в определённом месте.


Возможности


  • Архитектура вне процесса: envoy — это автономный, высокопроизводительный сервер занимающий небольшой объем оперативной памяти. Он работает совместно с любым языком приложения или фреймворком.
  • Поддержка http/2 и grpc: envoy имеет первоклассную поддержку http/2 и grpc для входящих и исходящих соединений. Это прозрачный прокси от http/1.1 до http/2.
  • Расширенная балансировка нагрузки: envoy поддерживает расширенные функции балансировки нагрузки, включая автоматические повторные попытки, разрыв цепи, глобальное ограничение скорости, затенение запросов, локальную балансировку нагрузки зоны и т. д.
  • API для управления конфигурацией: envoy предоставляет надежный API для динамического управления своей конфигурацией.
  • Наблюдаемость: глубокая наблюдаемость трафика L7, встроенная поддержка распределенной трассировки и наблюдаемость mongodb, dynamodb и многих других приложений.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии28

C++ велосипедостроение для профессионалов

Время на прочтение36 мин
Количество просмотров46K
Классы, которые люди самостоятельно пишут, а потом копируют из одного проекта в другой, хотя они уже есть в стандартных библиотеках, в простонародье называются велосипедами. Первый вопрос, который возникает при встрече с таким «велосипедом» — зачем люди переписывают что-то заново? Вариантов может быть несколько.

  • Некоторые делают это для самообучения: берут класс стандартной библиотеки, пишут его сами с нуля, сравнивают то, что получилось, с тем, что есть в стандартной библиотеке — в процессе узнают для себя что-то новое.
  • Некоторые проекты имеют особое требования к коду. В embedded-разработке принято работать без RTTI и без exception, поэтому части стандартной библиотеки, которые используют RTTI и exception, необходимо переписать без них.
  • Редко, но бывает, когда велосипед пишут, потому что могут написать лучше, чем в стандартной библиотеке. Как правило, такие нововведения рано или поздно попадают в стандартную библиотеку.
  • Другим только кажется, что они могут написать лучше, и таких людей больше. Но в процессе они обучаются, выясняют для себя что-то новое и что-то интересное открывают.
  • Могут быть другие причины.

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

  • бездумно переносить устаревшие технологии 20-30-летней давности в современные проекты;
  • пользоваться «вредными» бенчмарками и оптимизациями.

А также затронем «вредные» советы, обсудим новейшие практики программирования (C++ 11 и позднее), подумаем, что делать с «идеальным» велосипедом.

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

GCC Profile-guided optimization

Время на прочтение6 мин
Количество просмотров22K
Profile-guided optimization (далее PGO) — техника оптимизации программы компилятором, нацеленная на увеличение производительности выполнения программы. В отличии от традиционных способов оптимизации анализирующих исключительно исходные коды, PGO использует результаты измерений тестовых запусков оптимизируемой программы для генерации оптимального кода.
Читать дальше →
Всего голосов 46: ↑44 и ↓2+42
Комментарии26

Как программист машину покупал

Время на прочтение9 мин
Количество просмотров121K
Недавно я озадачился поиском б.у. автомобиля, взамен только что проданного, и, как это обычно бывает, на эту роль претендовали несколько конкурентов.

Как известно, для покупки авто на территории РФ существует несколько крупных авторитетных сайтов (auto.ru, drom.ru, avito.ru), поиску на которых я и отдал предпочтение. Моим требованиям отвечали сотни, а для некоторых моделей и тысячи, автомобилей, с перечисленных выше сайтов. Помимо того, что искать на нескольких ресурсах неудобно, так еще, прежде чем ехать смотреть авто “вживую”, я хотел бы отобрать выгодные (цена которых относительно рынка занижена) предложения по априорной информации которую предоставляет каждый из ресурсов. Я, конечно, очень хотел решить несколько переопределенных систем алгебраических уравнений (возможно и нелинейных) высокой размерности вручную, но пересилил себя, и решил этот процесс автоматизировать.
image
Читать дальше →
Всего голосов 73: ↑71 и ↓2+69
Комментарии208

Возражения против принятия Coroutines с await в C++17

Время на прочтение6 мин
Количество просмотров33K
Недавно Россию посетила группа экспертов С++, участвующих в работе комитета по стандартизации. 25 февраля они участвовали в Q&A сессии, организованной Яндексом, а после выступали на конференции С++ Russia 2016. Одним из них был Гор Нишанов, автор предложения о включении C#-подобных сопрограмм (те которые async/await) в стандарт С++17. Ранее Гор выступал на CppCon 2015 с докладом "С++ Сопрограммы — Абстракция с отрицательным оверхедом". Такая возможность структурировать асинхронный код выглядит привлекательно, Гор в докладе убедительно показывает, что количество кода сокращается, а скорость работы возрастает по сравнению с «рукописными» State Machine. Кроме того, это одно из самых больших потенциальных изменений в следующем стандарте и привлекает к себе внимание. Судя по публикациям, proposal получил значительное одобрение и комитет склоняется к включению в стандарт.

После этого я был весьма удивлен, когда загуглив упомянутый proposal P0057, получил в выдаче встречный документ "Coroutines belong in a TS", который подвергает предлагаемую реализацию сопрограмм жесткой и весьма эмоциональной критике и требует не включать в С++17, а отложить для «обкатки» в Technical Specification. Отмечу, что не являюсь сторонником этих возражений, а приглашаю интересующихся к обсуждению, насколько обоснованны перечисленные претензии и все ли так плохо. Под катом «выжимка» из документа с небольшими комментариями.
Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии109

Pathfinding: До одури простая реализация алгоритма воронки (Funnel Algorithm)

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


Алгоритм воронки — это простой алгоритм поиска наипростейшего пути, проходящего через «порталы». Наиболее подробное описание можно найти по ссылке Efficient Triangulation-Based Pathfinding (2)
Здесь же этот алгоритм будет реализован до одури просто. Вместо использования очередей и прочих очешуительных вещей, наша простейшая реализация перезапускает цикл каждый раз, когда обнаруживает очередной угол. Это значит, что некоторые порталы будут опрашиваться таки чаще, чем должны были бы, тем не менее, делая реализацию всяко проще.
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии11

Неожиданное поведение openssl_random_pseudo_bytes() приводящее к фатальной потере криптостойкости

Время на прочтение2 мин
Количество просмотров19K
Доброго времени суток всем.

Недавно в одном из проектов мы столкнулись со следующей проблемой — функция openssl_random_pseudo_bytes() выдавала дублирующиеся псевдослучайные последовательности!

Этого не может быть, потому что этого не может быть никогда! — Скажет любой, кто читал документацию этой функции. И, да, $crypto_strong исправно выдавал TRUE.

И тем не менее — ошибки уникальности при вставке в базу сыпались пачками и лог подтверждал — 32-байтные последовательности генерировались повторно через разные интервалы, от суток до недели. Расследование заняло целый месяц. Сейчас я на 99% уверен, что причина найдена — но буду благодарен, если Хабражители подтвердят или опровергнут мои выводы.

Так в чем же было дело?
Всего голосов 36: ↑32 и ↓4+28
Комментарии10

Ностальгия: роемся у «Танчиков» под капотом

Время на прочтение12 мин
Количество просмотров103K
Многие из нас выросли на «Танчиках», «Марио» и прочих нетленных шедеврах времён рассвета игровой индустрии. Приятно порой вспомнить, как днями напролёт резались с друзьями у экранов телевизоров, меняя джойстики как перчатки. Но время не стоит на месте, и одни интересы сменяются другими. Однако, порой любовь к старым-добрым игрушкам не угасает.
Я отношу себя к людям именно таким, и мой интерес к старым играм пошёл в сторону реверс-инжиниринга, что и привело меня в IT-сферу, где я и осел с концами.

Я хочу рассказать вам о том, что же под капотом у железных монстров из знаменитой игры Battle City (в простонародье «Танчики») с не менее знаменитой приставки Nintendo Entertainment System (сокращённо NES, в России более известен её китайский клон «Dendy»). Мне в своё время эта информация показалась довольно любопытной — надеюсь, такой же она покажется и вам.
Читать дальше →
Всего голосов 233: ↑232 и ↓1+231
Комментарии72

[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только

Время на прочтение9 мин
Количество просмотров85K
Многие студенты, впервые сталкиваясь с описанием какой-нибудь хитроумной штуки, вроде алгоритма Кнута – Морриса – Пратта или красно-чёрных деревьев, тут же задаются вопросами: «К чему такие сложности? И это, кроме авторов учебников, кому-нибудь нужно?». Лучший способ доказать пользу алгоритмов – это примеры из жизни. Причём, в идеале – конкретные примеры применения широко известных алгоритмов в современных, повсеместно используемых, программных продуктах.



Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Читать дальше →
Всего голосов 158: ↑149 и ↓9+140
Комментарии15

Сеть обменной сортировки со слиянием Бэтчера

Время на прочтение9 мин
Количество просмотров23K
Сортировка является одной из базовых операций при обработке данных, которая используется в самом широком спектре задач. В данной статье будет рассмотрена сеть обменной сортировки со слиянием Бэтчера для параллельной сортировки массива произвольного размера.

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

Свой шаблон отклика-письма на HeadHunter (и moikrug) без Copy-Paste

Время на прочтение7 мин
Количество просмотров25K
Многим хорош сервис поиска вакансий hh.ru, но ищущий всегда найдёт, что усовершенствовать. К примеру, на сервисе есть поле для заполнения письма — ответа на вакансию, но нет элементарного шаблона оформления письма — заголовок, кратко о себе, ответы на требования по вакансии.

Если нет — надо сделать. Ведь специалист по JS не будет многократно заниматься Copy-Paste-операциями, когда знает, что их можно автоматизировать, даже не обременяя просьбами службы сайта. Есть такие инструменты, как пользовательские скрипты.

UPD 12.1.2016: Скрипт расширен на сайты career.ru (клон HH с той же клиентской базой), itmozg.ru, superjob.ru.

Вначале, конечно, пришлось покопировать, пока не выявились закономерности и не получился юзерскрипт hhFiller. Шаблон отклика, на мой взгляд, должен содержать:
1. Заголовок-приветствие. После него пойдёт сразу рукописный текст, живой ответ на вакансию в 2-3 или более строчек.

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

«Boost.Asio C++ Network Programming». Глава 1: Приступая к работе с Boost.Asio

Время на прочтение15 мин
Количество просмотров221K
Привет Хабралюди!
Это мой первый пост, поэтому не судите строго. Я хочу начать вольный перевод книги John Torjo «Boost.Asio C++ Network Programming» вот ссылка на нее.

Содержание:


Во-первых разберем что есть Boost.Asio, как его собрать, а так же несколько примеров. Вы узнаете, что Boost.Asio больше, чем сетевая библиотека. Так же вы узнаете о самом важном классе, который находится в самом сердце Boost.Asio — io_service.

Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии13

DIY порошок для посудомойки: разбираем промышленные средства и улучшаем рецепт

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


Внимание! В рецепте с отбеливателем обнаружилась опасность коррозии металла! Не рекомендуется в стандартном применении!

Обзор экспериментов год спустя:
DIY порошок для посудомойки: как не растворить посуду и не повторить моих ошибок. Год экспериментов

В прошлой публикации мы создавали дешевый порошок для посудомойки из желудей и спичек кальцинированной соды и стирального порошка. В этой я расскажу о том, как можно его улучшить с помощью кислородного отбеливателя и где можно купить компоненты для более продвинутой версии. Будем делать упор на эффективности мойки, но даже при этом цена не выйдет за 100 рублей/килограмм. А еще будет рецепт ополаскивателя с себестоимостью в районе 1 рубля за литр. Как справедливо заметил amarao, занятие не для всех и многим проще использовать готовые таблетки. Но в подобных экспериментах с бытовой химией есть что-то от детства, первых опытов по смешиванию соды с уксусом и газировки с мятными конфетами. Так что ощутимая экономия здесь все-таки вторична. Будем развлекаться) Если кому-то лень читать весь текст — в конце поста будут подробные рецепты с рекомендациями.
Читать дальше →
Всего голосов 123: ↑123 и ↓0+123
Комментарии351

30 лет работы сисадмином

Время на прочтение10 мин
Количество просмотров49K
Sandra Henry-Stocker (Unix Dweeb, в данный момент работает в компании TeleCommunication Systems, разрабатывающей инновационные технические решения).

Оглядываясь в прошлое, спустя более 30 лет работы системным администратором Unix, я могу сказать, что это был долгий и интересный путь. В эти годы я конечно не выполняла одно и тоже. Развитие технологий приводили к невероятным изменениям в моей работе. Это были впечатляющие улучшения в “железе”, которое я обслуживала, и изобретение новых программных инструментов, которые я изучала и применяла на практике. На протяжении многих лет я получала невероятное наслаждение от того, насколько много работы я могла сделать в командной строке для выявления и устранения различных проблем и понимания того, как наилучшим образом обеспечить защиту данных моих работодателей. В течении 30 лет я работала с удивительными людьми, при этом была уволена однажды, а также узнала много нового о том, что работает и не работает, как с технической точки зрения, так и с точки зрения карьерного роста.
Профессия и все с ней связанное меняется драматичным образом, но она всегда приносила и будет приносить мне море удовольствия.
Вот мои размышления об изменениях, которые я увидела и тех, которые еще увижу.
Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии11

Об удобной навигации и отладке C++ кода в Vim

Время на прочтение7 мин
Количество просмотров41K
Компания, где я работаю, разрабатывает программное обеспечение на C++ под Linux. Долгое время мы использовали Qt Creator, с редкими ребятами работающими из Emacs и Vim. Когда я сам попытался пересесть на Vim, я понял, что ситуация с плагинами для разработки на С++ очень не простая. Поработав немного с CTags, я быстро понял, что без напильника работать в Vim будет очень сложно.
К сожалению, с ростом опыта работы с Vim редактор в Qt Creator в режиме эмуляции устраивал меня все меньше, и в какой-то момент я решил потратить немного времени и разобраться, как же сделать из Vim нормальную среду.
Я очертил для себя четыре вещи, которые я бы хотел от среды разработки, и которых мне бы хватило в Vim, чтобы полностью на него перейти:

1. Автодополнение
2. Навигация по коду
3. Отладка прямо из среды
4. Интеграция с Git (в частности Blame прямо в редакторе, и Git Grep)

Автодополнение в Vim — это решенная проблема, и название у решения YouCompleteMe. Это очень качественный плагин, который реализует автодополнение для большого количества языков программирования, в частности Python и C++. Ходят слухи, что внутри Google YouCompleteMe решает и вторую проблему с навигацией кода, но использует для этого внутренные инструменты гугла для индексирования.

Интеграция с Git в какой-то степени решена с помощью vim-fugitive. Это не такая комплексная интеграция, как бывает у Jet Brains, или в Visual Studio, но сравнимая с тем, что предлагает Qt Creator. Те два сценария, которые нужны были мне: blame и grep — работают хорошо.

Отладка и навигация были проблемами, решенными гораздо хуже. В этой статье я расскажу о плагине, который мы написали для навигации по С++ коду. В конце статьи я также расскажу о том, как мы для себя решили проблему с интегрированным отладчиком.
Читать дальше →
Всего голосов 56: ↑51 и ↓5+46
Комментарии92

StableBit DrivePool — дисковый массив с дублированием файлов

Время на прочтение4 мин
Количество просмотров101K
Я постоянно пытаюсь найти какие-то альтернативы RAID'ам в плане объединения нескольких жестких дисков в единый массив. Пробовал много что, но ни на чем так и не остановился окончательно. RAID не нравится тем, что штука достаточно капризная, негибкая и требовательная до дискового пространства.

image

Что мне вообще хочется:
  1. Объединить диски с данными в один массив большого объема, чтобы не приходилось вручную сортировать файлы — что возникает при нескольких дисках (пусть даже при монтировании их в папки).
  2. Иметь возможность добавлять/удалять/заменять диски в любой момент без развала массива.
  3. Независимость информации на дисках друг от друга — чтобы смерть одного из них не приводила к недоступности остальных.
  4. В идеале — какой-то метод хранения одного файла на нескольких дисках. Бэкапы — это хорошо и я их делаю, но лучше, когда к их помощи не приходится прибегать.


Читать дальше →
Всего голосов 36: ↑34 и ↓2+32
Комментарии109

sin 1° на калькуляторе

Время на прочтение5 мин
Количество просмотров82K
Важное уточнение — калькулятор обычный, без кнопки sin. Как в бухгалтерии или на рынке.

Калькулятор Casio

Под катом три разных варианта решения из разных эпох, от древнего Самарканда до США времён холодной войны.
Читать дальше →
Всего голосов 103: ↑100 и ↓3+97
Комментарии44

Подборка бесплатных инструментов для разработчиков

Время на прочтение28 мин
Количество просмотров186K
Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии38

Шпаргалка по HTTP-библиотекам для С++

Время на прочтение12 мин
Количество просмотров107K
К сожалению, в стандартной библиотеке языка С++ нет никаких средств для работы с протоколом HTTP. Возможно, в будущем появятся, но на данный момент каждый раз при необходимости дёрнуть какой-нибудь REST-сервис, пропарсить веб-страничку, написать простенького бота или краулера приходится задаваться вопросами «А какую же библиотеку взять, так чтобы побыстрее и попроще?». Иногда проект уже использует какой-то фреймворк (а иногда даже несколько) и тогда приходится вспоминать «А как же сделать HTTP-запрос имеющимися средствами?». Чтобы не путаться я решил написать для себя шпаргалку с примерами HTTP-запросов на С++ с применением разных библиотек. А самое удобное место для хранения подобных шпаргалок — Хабр: и сам не потеряешь, и другим может пригодиться.

Будут рассмотрены:
  • WinInet
  • WinHttp
  • Casablanca
  • Qt
  • POCO
  • wxWidgets
  • Boost.Asio
  • libcurl
  • neon
  • .NET (С++/CLI)
  • IXMLHTTPRequest
  • HappyHttp
  • cpp-netlib


Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии38

6 вещей, который я хотел бы знать перед разработкой своего первого Android-приложения

Время на прочтение5 мин
Количество просмотров28K
От переводчика: перевод делался сходу, за один присест, так что в некоторых местах может быть немного топорным. В любом случае, вы знаете, куда писать об ошибках.
В комментариях к оригинальной статье есть несколько здравых мыслей, как, например, не использовать библиотеки с мира «большой» джавы, так как они слишком объемные, или использовать всякие Glide-ы вместо Picasso (с чем я, впрочем, согласен). Можете посмотреть, если интересно.
И еще, я не придумал, как заставить отображаться сниппеты с гитхаба, так что я просто скопировал код.


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

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

Конечно, если вы пишете что-то по ходу изучения Android-разработки, скорее всего, позже вы все равно возненавидите свое творение. Как сказал @codestandards:

If the code you wrote a year ago doesn't seem bad to you, you're probably not learning enough.— Code Standards ( @codestandards) 21 мая 2015

(Если код, который вы написали год назад, не кажется вам плохим, вы, наверное, недостаточно учились)
Читать дальше →
Всего голосов 29: ↑20 и ↓9+11
Комментарии5
1
23 ...

Информация

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

Специализация

Backend Developer