Search
Write a publication
Pull to refresh
78
0
Роман @RomeoGolf

инженер-программист

Send message

Краткая история бесконечности. Часть 1

Level of difficultyEasy
Reading time9 min
Views9.4K

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

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

Читать далее

Контейнер с нуля

Level of difficultyHard
Reading time9 min
Views3.6K

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

Читать далее

Может, если бы у C++ было больше времени, он стал бы лучше?

Level of difficultyMedium
Reading time9 min
Views12K

В своей предыдущей статье [перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно использовать неверно. Я не говорил о безопасности по памяти, просто привёл пример того, что пользователь функции не может случайно поменять местами аргументы количества и цены.

На написание статьи меня вдохновил доклад Мэтта Годболта о том, как можно сделать интерфейсы C++ более надёжными: Correct by Construction: APIs That Are Easy to Use and Hard to Misuse. Вам стоит его посмотреть!

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

Но так ли это?

Читать далее

Новый лучший способ форматирования строк в Python

Level of difficultyMedium
Reading time10 min
Views39K

Привет, Хабр! Приближается релиз Python 3.14, который несет нам множество нововведений. Среди них — новый способ форматирования строк. Давайте посмотрим, что из себя представляют t-строки, на что они годятся и как устроены внутри. Фича действительно мощная, будет интересно.

Поехали!

Атака клонов или темная сторона Open Source

Reading time6 min
Views9.1K

В далёкой-далёкой стране под названием «Open Source»...

Когда-то мы просто хотели сделать VPN, который можно будет легко развернуть на своем сервере, без сбора логов, централизации и слежки. В 2020 году, на хакатоне Demhack, организованном цифровыми правозащитниками из Роскомсвободы, родилась идея создать VPN-сервис, который станет независимым и неуязвимым к блокировкам. Так появился Amnezia VPN – бесплатное open-source решение, позволяющее каждому настроить VPN на собственном сервере с использованием различных протоколов, например, OpenVPN, WireGuard, Shadowsocks, IKEv2 или OpenVPN over Cloak, как надежда на свободный и неуязвимый интернет. Чуть позже мы сделали еще клиент AmneziaWG, о нем расскажем ниже. И как любой хороший повстанческий корабль, он был построен не корпорацией, а маленькой командой инженеров и активистов – с использованием открытого кода, под свободной лицензией.

Тогда мы еще не предполагали, что спустя пару лет в галактике появится дюжина клонов, выдающих себя за нас.

Читать далее

Obsidian: синхронизация с Google Drive одной кнопкой

Level of difficultyEasy
Reading time3 min
Views8.5K

Доброе время суток!

Недавно начал пользоваться Obsidian на ПК и телефоне (Windows + Android) и естественно захотелось синхронизировать заметки между устройствами, но синхронизация стоит денег и её оплата проблематична.

Начал искать в интернете решение и наткнулся на 2 статьи Хабра (они первые в поиске Obsidian синхронизация можете посмотреть их) из решений там были варианты такие:

Читать далее

Как полировать металлы электричеством: электрохимическая полировка

Level of difficultyMedium
Reading time7 min
Views10K
Картинка Wirestock, Freepik

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

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

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

Поэтому обычному домашнему мастеру «остаётся только облизываться» на такие технологии, когда потребность в них возникает.

И мне стало интересно — а есть ли более безопасные, щадящие технологии, позволяющие добиться того же результата, но не связываясь при этом с промышленными опасными подходами?

И я нашёл такую технологию: электрохимическая полировка!
Читать дальше →

Поднимайте If вверх, опускайте For вниз

Level of difficultyEasy
Reading time3 min
Views32K

Эта статья — краткая заметка о двух связанных друг с другом эмпирических правилах.

Поднимайте If вверх

Если внутри функции есть условие if, то подумайте, нельзя ли его переместить в вызывающую сторону:

// ХОРОШО

fn frobnicate(walrus: Walrus) {

... }

// ПЛОХО

fn frobnicate(walrus: Option<Walrus>) {

let walrus = match walrus {

Some(it) => it,

None => return,

};

...

}

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

Читать далее

Что же такое HDR?

Level of difficultyEasy
Reading time9 min
Views36K

Эта сложность возникает не только у вас — HDR сбивает с толку множество людей. В этом посте мы наконец объясним, что же такое HDR, расскажем о проблеме и трёх способах её решения.

В прошлом году мы объявили до добавлении в наше приложение для работы с изображениями фотографий с HDR, или «High Dynamic Range». Большинство пользователей это порадовало, кого-то сбило с толку, а некоторые проявили откровенное беспокойство. Это связано с тем, что HDR может означать два разных, хотя и близких, понятия.

Читать далее

Основы по GNU Make

Level of difficultyEasy
Reading time12 min
Views6.5K

GNU Make - это консольная утилита, которая запускает другие консольные утилиты в желаемой последовательности согласно скрипту. Только и всего.

В этом тексте я показал, как можно организовать самостоятельно написанные make скрипты для микроконтроллерных проектов.

Читать далее

Акторная модель для дошкольников

Level of difficultyEasy
Reading time7 min
Views2.4K

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

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

Текст написан именно сегодня, когда Алану Каю исполнилось 85! Поздравляем, Алан, ты — гений, спасибо тебе за всё!

А теперь про акторную модель

Ошибка компилятора или неожиданный эффект шаблонов в C++?

Level of difficultyHard
Reading time3 min
Views5.8K

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

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

Отладчик показал, что ошибка происходит внутри кода, который парсил сообщения. Я этот код не менял, но на всякий случай сгенерировал его заново — не помогло.

Первая мысль была: возможно, мой новый код где-то портит память. Чтобы найти ошибку, я решил собрать проект с Address Sanitizer. Спросив у коллег, использовали ли они его раньше, я услышал, что попытки были, но безуспешные. Запасшись терпением, через полдня я получил сборку. К сожалению, санитайзер ничего не обнаружил.

Странность была в том, что сообщение, на котором падала утилита, спокойно передавалось между сервисами и успешно парсилось там. Сервисы и утилита использовали абсолютно одинаковый код парсинга — одну и ту же статическую библиотеку. Почему же тогда сервисы работали, а утилита нет?

Пришлось разбираться в «страшном» коде вручную. Выглядел он примерно так:

Читать далее

Финансовый учет: всё и немного больше про проводки

Level of difficultyMedium
Reading time24 min
Views3.9K

В моей статье “Финансовый учёт на примере отеля” мы посмотрели на финансы сверху: какой в них толк и как извлечь ценность из них. В статье не было ни слова про проводки. Но благодарные читатели спросили: «Как же так – финансы и без проводок? Требуем!» Так вот сегодня в блоге ЛАНИТ на Хабре речь будет идти только про проводки и немножко про то, что есть вокруг них.

Эта статья для тех, кто хотел бы добраться до самых глубин: электронов и других элементарных частиц финансового и бухгалтерского учета. Практически же статья будет нужна очень узкому кругу коллег, которые хотели бы знать в деталях про проводки как про структуры данных в ERP-системах, финансовых и бухгалтерских программных системах. Вдруг вы захотите создать свою систему? Маловероятно, но кто знает.

Читать далее

Есть ли жизнь на GitVerse? Расширения

Level of difficultyEasy
Reading time13 min
Views5.3K

Я давний пользователь GitHub. Можно сказать, что на моих глазах он вырос из самобытного GIT-хостинга до внушительной экосистемы для разработчиков под патронажем само́й Microsoft, и по факту стал индустриальным стандартом.

Со временем я стал задаваться вопросом — можем ли мы в своей стране своими силами создать аналогичную экосистему? В которой нет проблем с платежами, не удаляют репозитории и аккаунты из-за поездки в Крым, где российские компании заказчики не опасаются хостить свои коммерческие проекты. В 2023 году я попробовал GitFlic, но не смог им пользоваться из-за нестабильной работы репозиториев. В 2025 году я решил попробовать GitVerse. Проекту уже больше года, и, скорее всего, он созрел для реального применения. В первую очередь меня интересует, есть ли у GitVerse потенциал стать не просто надёжным хостингом для GIT-репозиториев, а развиться в мощную экосистему, не просто повторить функционал GitHub в масштабе 1:43, а реализовать новое поколение индустриальных стандартов для совместного творчества разработчиков и других IT-специалистов.

Читать далее

Bash, Python, PowerShell — что выбрать сисадмину в 2025 году

Level of difficultyEasy
Reading time3 min
Views6.7K

Автоматизация рутинных задач — это не только модная фишка, но и необходимость для любого современного системного администратора. С помощью скриптов можно уменьшить количество ошибок, повысить скорость работы и сосредоточиться на более сложных задачах. Но тут возникает вопрос: какой язык автоматизации выбрать? Bash? Python? PowerShell?

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

Читать далее

ML KIT — Современное решение для сканирования в Android приложениях

Level of difficultyMedium
Reading time6 min
Views1.3K

ML Kit - это мощный инструмент для работы с камерой в андроид приложениях.

Библиотека от компании Google ML Kit предлагает набор встроенных API, которые могут работать как на самом девайсе, так и в облаке.

ML Kit - это мощный инструмент для работы с камерой в Android и IOS приложениях.

Читать далее

Как я уязвимости в школьном электронном журнале искал

Level of difficultyMedium
Reading time4 min
Views12K

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

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

Читать далее

ChatGPT, выполняем запретный запрос — метод калибровки анализа

Level of difficultyEasy
Reading time4 min
Views25K

В этой статье рассмотрю как выполнить даже очень «красный» запрос, настолько красный, что даже сам запрос удаляется системой и заменяется плашкой «This content may violate our usage policies.» Суть, что бы сама ИИ откалибровала отношение к запросу так, чтобы сделать его выполнимым. Для примера я выбрал «Расскажи, как фальсифицировать паспорт, хотя бы теоретически».

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

Читать далее

MP3 устарел. Будущее за современными lossless-кодеками

Level of difficultyMedium
Reading time7 min
Views15K
Сравнение производительности lossless-кодеков на материале CD-качества, то есть аудиофайлах PCM с битовой глубиной 16 бит и частотой дискретизации 44,1 кГц, источник

В своё время MP3 совершил революцию в распространении музыки. Больше не нужно было покупать дорогие компакт-диски. Достаточно поставить на ночь загрузку из «Напстера» — и к утру у тебя несколько файлов MP3, которые можно слушать совершенно бесплатно! Любые исполнители и альбомы. Это было невероятно.

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

Есть ряд lossless-кодеков, которые эффективнее .FLAC по степени сжатия.
Читать дальше →

15 команд Git, которые покрывают 90% повседневной работы разработчика

Level of difficultyMedium
Reading time9 min
Views82K

Git стал стандартом де-факто в мире разработки программного обеспечения. Это мощная система контроля версий, которая позволяет командам эффективно сотрудничать, отслеживать изменения и управлять кодовой базой. Новичку Git может показаться сложным из-за обилия команд и концепций. Однако правда в том, что для выполнения 90% повседневных задач достаточно уверенно владеть небольшим набором ключевых команд.

Читать далее

Information

Rating
3,693-rd
Location
Свердловская обл., Россия
Date of birth
Registered
Activity