Как стать автором
Обновить
1
0
Oleg Romanenko @Slader

Архитектор/Разработчик highload сервисов

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

О простых вещах-сложно. «Cпящая сталь». Чем смазать заржавевшие болты или Не WD-40 единым…

Время на прочтение22 мин
Количество просмотров126K
Посвящается всем отчаявшимся и потерявшим надежду… открутить заржавевшую гайку!

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

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

Ну и, традиционно — не забудь закинуть в закладки, %USERNAME%, пригодится! :)


Читать дальше →
Всего голосов 196: ↑195 и ↓1+194
Комментарии297

Шпаргалки по безопасности: Docker

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


Docker контейнеры — самая популярная технология для контейнеризации. Изначально она использовалась в основном для dev и test окружений, со временем перешла и в production. Docker контейнеры начали плодиться в production среде, как грибы после дождя, однако мало из тех, кто использует данную технологию, задумывался о том, как же безопасно публиковать Docker контейнеры.

Основываясь на OWASP, мы подготовили список правил, выполнение которых позволит значительно обезопасить ваше окружение, построенное на Docker контейнерах.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии5
«Библиотеки для C++ нередко похожи на русскую классику: страдает либо их автор, либо пользователь, либо архитектура». Автор этой цитаты, Сергей Садовников из «Лаборатории Касперского», прошел свой путь от страданий к просветлению и узнал о метапрограммировании в С++ нечто важное и нужное. Сочувствующих приглашаем в волшебный мир макросов, шаблонов, boost и прочих loki.
Подробности – под катом
Всего голосов 65: ↑64 и ↓1+63
Комментарии39

Радиация: война с невидимым убийцей или еще немного о радоне

Время на прочтение9 мин
Количество просмотров39K
И снова здравствуйте. В комментариях к предыдущей статье я обещал написать о защите от радона и его ДПР. Что ж, выполняю это обещание.



Как я уже говорил в предыдущей статье, радон представляет для людей довольно серьезную опасность. Особенно она велика в некоторых регионах Земли, где радон с больших глубин выносится на поверхности по тектоническим разломам. И в этих местах жизненно необходимы меры по снижению его концентрации в человеческом жилье.
Читать дальше →
Всего голосов 63: ↑61 и ↓2+59
Комментарии87

Асинхронность в программировании

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

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


В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


Читать дальше →
Всего голосов 71: ↑67 и ↓4+63
Комментарии70

«Умный дом» — переосмысление

Время на прочтение10 мин
Количество просмотров59K
На Хабре уже было несколько публикаций о том, как айтишники строят себе дома и что из этого получается.

Хочу поделиться своим опытом («тестовый проект»).

Постройка собственного дома (особенно, если еще и своими силами) — крайне объемный кусок информации, поэтому я свое повествование буду вести больше про ИТ-системы (мы же все-таки сейчас на Хабре, а не на ФХ, хотя там тема тоже есть).
Читать дальше →
Всего голосов 50: ↑48 и ↓2+46
Комментарии193

Превращаем DSLogic Basic в DSLogic Plus

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

В данной статье расскажу как модифицировать DSLogic Basic до DSLogic Plus.

Возможно для кого-то это не будет новостью.

Во всяком случае — собрал инфу с зарубежного форума, убрал все лишнее и рассказываю вам.

Кому интересно — прошу под кат.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии52

XXH3: новый рекордсмен по скорости хеширования

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

Бенчмарки сделаны в программе SMHasher на Core 2 Duo 3,0 ГГц

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

Одно из самых популярных — семейство хеш-функций xxHash, которое появилось около пяти лет назад. Хотя изначально эти хеши задумывались для проверки контрольной суммы при сжатии LZ4, но их стали применять на самых разных задачах. Оно и понятно: достаточно посмотреть на таблицу вверху со сравнением производительности xxHash и некоторых других хеш-функций. В этом тесте xxHash обходит ближайшего конкурента по производительности в два раза. Новая версия XXH3 поднимает планку ещё выше.
Читать дальше →
Всего голосов 54: ↑49 и ↓5+44
Комментарии9

Пробуем контрактное программирование С++20 уже сейчас

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


В С++20 появилось контрактное программирование. На текущий момент ни один компилятор ещё не реализовал поддержку этой возможности.


Но есть способ уже сейчас попробовать использовать контракты из C++20, так как это описано в стандарте.

Заинтересовавшихся прошу под кат
Всего голосов 61: ↑60 и ↓1+59
Комментарии54

Топ-10 докладов конференции C++ Russia 2018: полные видеозаписи, слайды, комментарии

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

В этой статье вас ждёт десять лучших докладов от Андрея Александреску, Дэвида Вандервурда, Джона Калба и многих других.


Фичи компилятора C++, асинхронность, многопоточность, параллелизм, модель памяти, алгоритмы и STL, метапрограммирование и рефлекшен, огромное множество тем.



Всё это — записи с конференции C++ Russia, самой большой в истории. Восемь сотен участников, немаленький зал, спикеры с мировым именем. Прошёл год, но большинство докладов ничуть не утратило своей актуальности. Впрочем, и неудивительно — именно такие доклады и попадают в топ по оценке участников.


Формат таков:


  • Обязательное видео на YouTube
  • Слайды, если есть
  • Подробное описание доклада на русском языке
  • Краткая биография докладчика

Плюс у вас есть комментарии Хабра, чтобы обсудить увиденное. Реклама на ютубе отключена, никто не будет мешать. Есть всё, чтобы начать смотреть прямо сейчас.

Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии13

Работа с кортежами С++ (std::tuple). Функции foreach, map и call

Время на прочтение12 мин
Количество просмотров49K
Здесь я расскажу о работе с кортежами C++ (tuple), приведу несколько полезных функций, которые в состоянии существенно облегчить жизнь при использовании кортежей, а также приведу примеры использования этих функций. Всё из личного опыта.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии11

Оптимизация кода в уме, или «Ну так же однозначно быстрее»

Время на прочтение4 мин
Количество просмотров25K
Намедни работая над одной ошибкой в одном опенсорсном проекте, увидел как коллега (тоже работающий параллельно над той же проблемой) залил такой вот коммит [31a078bec7]:

   	/*
-	 * Select the list item based on the index. Negative operand means
-	 * end-based indexing (-2, ...), and -1 means out of range.
+	 * Decode end-offset index values.
   	 */
-	if (opnd < -1) {
-	    index = opnd+1 + objc;
-	} else {
-	    index = opnd;
-	}
+	index = opnd + (opnd <= TCL_INDEX_END)*(objc - 1 - TCL_INDEX_END);
   	pcAdjustment = 5;

Изменение само по себе правильное (теперь TCL_INDEX_END есть константное определение (-2)).

И грубо говоря в уме это разворачивается в следующее (все переменные int):

index = opnd + cmp(opnd, (-2))==>(0 | 1) * (objc - 1 - (-2));

Т. е. он как бы тем самым хотел сэкономить здесь один условный переход.
И всё как бы ничего, однако меня всё же насторожила такая казалось бы пустячная «оптимизация» с уклоном в арифметику.

Во первых, это изменение касается самой «главной» функции в этом проекте (TEBCresume), ибо она ответственна за исполнение байт-кода (JIT скомпилированных инструкций языка TCL). По этой причине эта функция еще и самая большая (порядка 6 тысяч строк + примитивы и макросы) и одна из самых сложных в кодовой базе проекта, с множественными `goto`, головоломными макросами для работы со «стеком» исполнения, свёртка/развертка NRE (nonrecursive evaluation) и т.д. и т.п.

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

Во вторых, по роду деятельности мне часто приходится оптимизировать сишный код, разглядывая его ассемблерное отражение, выжимая доли микро- а то и нано-секунд, и я часто вижу, что там очень всё совсем неоднозначно бывает. Как минимум иногда разворачивая такие вот «экономящие» условный jump конструкции обратно в if или даже if/else, я видел улучшение как и в результирующем ассемблерном коде, так и явно при конечном сравнении производительности результатов исполнения.

Собственно к чему я все это писал — хотелось на примере показать как оно бывает, ну и раз уж коснулись этой темы, собрать немного статистики. Посему пара опросов в конце статьи…
Развернуть в ассемблер ...
Всего голосов 51: ↑48 и ↓3+45
Комментарии55

Шагнуть в небо. Честная история про серьезное увлечение парашютным спортом

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

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

Всего голосов 128: ↑114 и ↓14+100
Комментарии162

Где покупать радиодетали? Часть II: зарубежные магазины

Время на прочтение5 мин
Количество просмотров88K
Продолжение поста про интернет-магазины электронных компонентов, инструментов и прочих ардуин.


Читать дальше →
Всего голосов 76: ↑75 и ↓1+74
Комментарии63

Где покупать радиодетали и компоненты? Часть I: Россия

Время на прочтение4 мин
Количество просмотров171K
Давайте поговорим о покупке электронных компонентов в интернете. Я собрал список интересных отечественных и зарубежных магазинов:

а) которые заточены под любителей DIY и делают свои собственные крутые продукты: конструкторы, модули, обучающие курсы и т.д.;

б) для профи, с широкой номенклатурой электронных компонентов.

Продолжение: Часть II: зарубежные магазины

Кадр из к/ф «Иван Васильевич меняет профессию»
Продолжение
Всего голосов 130: ↑120 и ↓10+110
Комментарии158

Инициализация в С++ действительно безумна. Лучше начинать с Си

Время на прочтение17 мин
Количество просмотров98K
Недавно мне напомнили, почему я считаю плохой идеей давать новичкам C++. Это плохая идея, потому что в C++ реальный бардак — хотя и красивый, но извращённый, трагический и удивительный бардак. Несмотря на нынешнее состояние сообщества, эта статья не направлена против современного C++. Скорее она частично продолжает статью Саймона Брэнда «Инициализация в C++ безумна», а частично — это послание каждому студенту, который хочет начать своё образование, глядя в бездну.

Типичные возражения студентов, когда им говорят об изучении C:

  • «Кто-то его ещё использует?»
  • «Это глупо»
  • «Почему мы изучаем C?»
  • «Мы должны учить что-то лучшее, например, C++» (смех в зале)
Всего голосов 83: ↑79 и ↓4+75
Комментарии183

10 навыков и знаний необходимых начинающему iOS разработчику

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

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

Ко мне и коллегам на собеседования приходит много кандидатов на открытые у нас вакансии, и я отчетливо вижу у многих новичков отсутствие базовых знаний или просто неуверенное владение ими. Хотя в интернете и много статей, книг и курсов (платных и бесплатных), из которых можно получить необходимые знания, не всегда просто понять, на изучении каких тем стоит сконцентрироваться.

В этой заметке я поделюсь информацией про то, какие навыки и знания я считаю важными для начинающего iOS разработчика, попробую объяснить зачем они нужны и дам ссылки на материалы для их изучения. 
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии15

По ту сторону чистоты: что может и чего не может обратноосмотическая мембрана

Время на прочтение9 мин
Количество просмотров67K
Обратноосмотическая вода — во всех смыслах иллюстрация дихотомии H2O / Примеси.
Мы в АКВАФОР привыкли, что мир делится на:

  1. тех кто считает, что осмотический фильтр чистит все, кроме кармы и совести
  2. и тех, кто подливает осмотическую воду в чай врагу, считая ее мертвой.

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

Поговорим о принципе работы мембраны, об отличии осмотической воды от дистиллята и электролита, а также о том, стоит ли искать в ней поры и варить в кислоте.


Всего голосов 63: ↑60 и ↓3+57
Комментарии106

Первый взгляд на FoundationDB, открытую Apple

Время на прочтение9 мин
Количество просмотров19K
В прошлой статье мы рассматривали ограничения и препятствия, которые возникают, когда нужно горизонтально масштабировать данные и иметь гарантию ACID-свойств транзакций. В этой статье рассказываем о технологии FoundationDB и разбираемся, как она помогает преодолеть эти ограничения при разработке mission-critical приложений.

FoundationDB — это распределенная NoSQL база данных с ACID-транзакциями уровня Serializable, хранящая отсортированные пары ключ-значение (ordered key-value store). Ключами и значениями могут быть произвольные последовательности байт. У неё нет единой точки падения — все машины кластера равноправны. Она сама распределяет данные по серверам кластера и  масштабируется на лету: когда в кластер нужно добавить ресурсов, ты просто добавляешь адрес новой машины на конфигурационных серверах и база сама подхватывает ее.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии15

Полнофункциональная динамическая трассировка в Linux с использованием eBPF и bpftrace

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


«В режиме трассировки программист видит последовательность выполнения команд и значения переменных на данном шаге выполнения программы, что позволяет легче обнаруживать ошибки» — сообщает нам Википедия. Сами будучи поклонниками Linux, мы регулярно сталкиваемся с вопросом, какими именно инструментами её лучше осуществлять. И хотим поделиться переводом статьи программиста Хонгли Лая, который рекомендует bpftrace. Забегая вперёд, скажу, что заканчивается статья лаконично: «bpftrace — это будущее». Так чем же он так впечатлил коллегу Лая? Развёрнутый ответ под катом.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии1

Информация

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