Как стать автором
Поиск
Написать публикацию
Обновить
992.64

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Ранг-селект словари

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров2.8K

Это первая статья из планируемой серии про succinct data structures - класс наиболее компактных структур данных. Канонический пример такой структуры - это представление дерева в виде правильной скобочной последовательности, дерево изnвершин таким образом представляется с помощью2nбит в то время как типичная динамическая реализация требовала бы как два указателя по 64-бит на каждый узел (разумеется можно немного сократить простыми оптимизациями, но даже близко 2 бита не получить). Фундамент подобных структур - это rank-select словарь, представляющий собой битовый вектор и дополнительную структуру для выполнению двух операций ранг и селект. В указанном примере с деревом с помощью ранга и селекта можно сделать базовую навигацию: найти номера потомков/родителей, узнать размер поддерева. В статье расскажу как делать эти операции быстро используя при этом всего 3,6% дополнительной памяти.

Читать далее

ARM MTE и жёсткая память: как сделать С-процессы менее уязвимыми

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.1K

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

Если вы держали в руках любой крупный C или C++ код, то знаете, что память частенько ошибается . На ARM-системах давно есть TBI, возможность прятать биты в верхнем байте адреса. На этой базе появился Memory Tagging Extension, коротко MTE. Это аппаратная проверка того, что указатель действительно свой для конкретного куска памяти. Часть механизмов есть в ядре Linux, часть в libc, часть в компиляторах, и из этого можно собрать жёсткую память, строгую к факапам и терпимую к продакшен-нагрузке.

MTE добавляет к каждой 16-байтной грануле памяти 4-битный allocation tag. А в верхние биты адреса (59…56) вы добавляете logical tag указателя. Процессор на каждом доступе сравнивает тег указателя и тег памяти. Если не совпало, прилетит fault по выбранному режиму проверки. Гранула фиксированная — 16 байт. Тегов 16. Это значит, что при рандомизации тегов теоретический шанс пронести левый указатель без ошибки — 1 из 16, если атакующий не знает тег. Этот шанс можно давить паттернами тэгирования и дисциплиной работы аллокатора.

Читать далее

Быстрый старт автотестирования с Playwright

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

Добрый день, уважаемые хабровчане! Меня зовут Евгений Иванов, и вот уже год я работаю на позиции QA-lead в компании FixPrice. В прошлом году руководство поставило передо мной задачу: наладить быстрый старт автотестирования и масштабирование решений на все проекты нашего отдела.

Читать далее

Echo сервер на Zig: от потоков к event loop

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров1.7K

Давно присматривался к языку программирования Zig и наконец решил на нём что-то написать. Выбор пал на TCP/UDP echo сервер: задача не слишком сложная, но с интересными моментами, особенно при переходе на event loop. В статье поделюсь процессом и своими впечатлениями.

Читать далее

От реляционных СУБД к экосистеме Hadoop

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5.2K

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

Недавно я понял, что не знаю, что такое Hadoop.

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

Сам я являюсь разработчиком, и ежедневно взаимодействую с различными СУБД – в основном, с пресловутой PostgreSQL. Каково же было мое удивление, когда я узнал, что на проде в эту БД данные попадают не напрямую – а с какого-то Greenplum, а туда они, в свою очередь, приходят с некоего Hadoop.

В этот момент я решил узнать, чем обоснована необходимость использования этих инструментов и что они из себя представляют.

Читать далее

Youtube TG бот на GO cо всеми «прелестями»

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.1K

Привет, Хабр! Сегодня хочу поделиться с сообществом TG ботом, которого написал пару лет назад и который до сих пор актуален и работает.

Читать далее

Мне не нужен ORM, я могу просто использовать SQL

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров17K

Команда Spring АйО в новом переводе разобрала популярный аргумент «я просто использую SQL» и объяснила, почему Hibernate — это не замена, а дополнение к нативным запросам. А ещё — когда ORM действительно необходим, а когда можно без него обойтись.

Читать далее

От массивов до объектов в JavaScript: пособие для новичков

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров6K

Привет! Я — Александр Дудукало, автор базового курса по JavaScript. В этой статье мы продолжим изучение работы с данными в JavaScript. Если в прошлом материале мы говорили о массивах, то теперь пришло время познакомиться с объектами. Я расскажу, как они помогают эффективно организовать и обрабатывать связанные данные. Подробности под катом!

Читать далее

Выпущена версия Jmix 2.6

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров837

Мы рады объявить о выпуске Jmix 2.6, который включает новую функциональность, улучшения и оптимизацию производительности. Этот релиз приносит значительные обновления в Jmix Studio, представляет новые UI-компоненты и повышает продуктивность благодаря умным инструментам и интеграциям.

Ниже представлен краткий обзор ключевых возможностей Jmix 2.6.

Читать далее

Управление маршрутизацией на роутерах Keenetic при помощи Telegram-бота и правовые нормы доступа к информации

Уровень сложностиСредний
Время на прочтение29 мин
Количество просмотров14K

После начала Специальной Военной Операции многие западные компании объявили о прекращении своей деятельности в России и Белоруссии и некоторые из них стали блокировать пользователям с российскими и белорусскими IP-адресами доступ на свои ресурсы в сети Интернет. Яркими примерами таких блокировок являются сайты: intel.com, dell.com, chatgpt.com, community.cisco.com, mongodb.com, tenable.com, wiki.zimbra.com, releases.hashicorp.com, registry.terraform.io, vagrantcloud.com, solarwinds.com и множество других.

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

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

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

В это статье НЕ БУДЕТ инструкций о том откуда взять работающий VPN и НЕ БУДЕТ инструкций о том как обходить блокировки Роскомнадзора. Обсуждать это в комментариях к статье тоже НЕ НУЖНО.

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

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

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

Если вы не согласны хоть с чем-то из вышеописанного - вам следует немедленно прекратить чтение настоящей статьи.

Я согласен(-на) и хочу продолжить.

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 9. Первичный конструктор, _Ready

Уровень сложностиПростой
Время на прочтение20 мин
Количество просмотров846

В прошлой главе мы ненадолго прервали изучение синтаксиса F#, но в этой всё с лихвой нагоним, так как сегодня у нас в программе первичный конструктор, расширения типов (снова) и их архитектурные следствия. Я попытался описать их в одном тексте, но обычно они раскиданы по разным частям документации, что серьёзно мешает целостному восприятию, в результате чего даже весьма башковитые ребята тупят как мальчики с Википедией при обсуждении истории древнего Рима. То есть формально у них есть доступ ко всем знаниям человечества, но фактически они соображают слабее, чем человек, прочитавший трижды устаревшего Моммзена.

Начиная с этой главы мы будем постепенно отказываться от того сценария разработки, который предлагает Godot по умолчанию. Итогом отказа будет почти полное исчезновение C# (пока только в рамках проекта) и переход на удобную и идиоматически правильную архитектуру.

Читать далее

Как не испортить ребенку IT-будущее неправильным выбором школы

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

Каждую неделю нам пишут родители с одинаковыми вопросами: «Дочка хочет программировать, куда отдать?», «Сын играет в Майнкрафт, может, в IT пойти?». За 9 лет работы в детском образовании я насмотрелась на ошибки, которые совершают 90% родителей. И да, некоторые из них могут навсегда отбить у ребенка желание заниматься технологиями.

Читать далее

Первый Спутник, язык FORTH и немного о JIT-компиляции

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

Здесь не будет песен и сказок о том какой крутой и недооценённый язык Forth:) По совокупности обстоятельств он скорее уже история. Однако некоторые связанные с ним аспекты поучительны и перспективны (например, для энтузиастов и разработчиков языков и компиляторов) — и хочется их записать на память, да и поделиться с коллегами.

-

Читать далее

Ближайшие события

Почему ИИ не смог заменить меня в n8n, но стал идеальным ассистентом

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров6.3K

n8n — это мощный инструмент, который я, как и многие инженеры, полюбил за гибкость и простоту. Он позволяет собрать практически любую интеграцию, как из конструктора, но с возможностью в любой момент залезть «под капот» с кастомным JavaScript. Идеально.

Но у этой мощи есть и обратная сторона. Сложные воркфлоу превращаются в лабиринт из нод, где каждая требует тонкой настройки десятков полей. Постоянное переключение между вкладками документации, написание JSON-объектов, парсинг API через Curl, дебаггинг бесконечных ошибок... Знакомо? Время на продумывание логики уходило на рутину. И мне, как и многим, пришла в голову «гениальная» идея: а что, если всю эту рутину возьмет на себя ИИ?

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

Читать далее

ChatGPT против моего скрипта для очистки системы: кто кого?

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.1K

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

Какая у меня появилась идея? Проверить, сможет ли ChatGPT сделать то же (и насколько качественно), что и я, но грамотнее и «элегантнее». Результат получился весьма поучительным: ИИ отлично справился с архитектурой, но очень пытался угробить систему парой строчек. Далее расскажу, как это было.

Читать далее

CMake: герой, который споткнулся о 12 багов

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров4.3K

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

Читать далее

SSO на базе Spring Authorization Server. Можно ли в прод?

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров2.2K

В современных приложениях централизованная аутентификация и авторизация играют ключевую роль в обеспечении безопасности и удобства пользователей. Именно с такой задачей мы столкнулись в компании NAUKA при создании "Платформы" — экосистемы, предназначенной для функционирования наших решений и разработки собственных прикладных приложений. В качестве основного компонента системы аутентификации и авторизации был выбран Spring Authorization Server.

Настоящая статья - это небольшой практический обзор реализации SSO-сервера на основе технологии Spring Authorization Server с акцентом на решении типовых проблем, которые возникают при её использовании в реальной системе. Мы рассмотрим как технические детали, так и архитектурные решения, которые помогут создать надежный и масштабируемый сервер авторизации.

Читать далее

Как меня едва не уволили из Apple (в первый раз)

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров21K

Я устроился в Apple в октябре 1995 года. В это время Apple кружилась в сливном отверстии раковины, готовясь отправиться в канализацию. Возможно, вы помните все эти разговоры о том, что Apple скоро закроется. Немного странно, что она продолжала нанимать сотрудников, но, очевидно, в Apple считали, что им всё равно нужен ещё один «графический инженер» для работы над технологией QuickdrawGX. Тогда мне был 31 год, я жил в Канзасе и программировал игры для Macintosh. Разумеется, в компании решили, что я хорошо подойду на эту должность.

Процесс собеседования оказался для меня совершенно неожиданным и новым (подробно о нём написано здесь), но в конечном итоге мне предложили работать графическим инженером QuickdrawGX в Apple Computer, Inc.

Переезжать с моей девушкой, всеми вещами (и двумя кошками) из Канзаса в Калифорнию было безумно сложно, но мы справились. Как окажется позже, мне предстояло ещё многое узнать о программировании, да и о профессионализме в целом. И тут я сразу понял, что, возможно, взялся за задачу, которая мне не по зубам (как программисту). Другие инженеры Apple были дружелюбными, но и очень умными. (Наверно, мне стоит подробнее написать о панике, которую я ощущал первое время; казалось, будто я случайно забрёл в глубокую часть бассейна.)

Впрочем, постепенно (примерно через полгода) я, так сказать, вошёл в колею, и начал справляться с работой немного увереннее. Но вскоре я всё равно понял, что по-прежнему остаюсь недисциплинированной деревенщиной, не совсем отвечающим стандартам Профессиональной Корпорации™.

Вскоре после моего прихода в компанию проект QuickdrawGX расценили провалившимся, меня перевели в новую команду (ColorSync) и чуть позже выдали новый проект. У Apple было стандартное окно, в котором пользователь мог выбирать цвет, оно называлось Color Picker («Палитра»). Кроме того, в то время Apple начинала переход с чипов Motorola 68K на новые, более быстрые чипы PowerPC (PPC). Моя задача заключалась в том, чтобы проект Color Picker, написанный для чипов 68K, компилировался для новой архитектуры PPC.

Читать далее

Как платформа Linear завела меня в кроличью нору local-first-разработки

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.8K

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

Читать далее

Шарики и палочки или 1 минута интеграции методом Верле́

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

Метод Верле́ — один из самых элегантных и простых численных способов решать уравнения движения. Его можно встретить и в молекулярной физики, и в геймдеве (cloth sim 🧦). Недавно я сделал короткое видео с его наглядной демонстрацией (см. YouTube Shorts под катом и зеркало на GitHub).

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

Читать далее

Вклад авторов