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

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

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

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

Nocode с MWS Tables: кейсы объединения разных команд в одном пространстве, системы выдачи пропусков и геймификации

Время на прочтение6 мин
Количество просмотров672

Привет, Хабр! Меня зовут Александр Антипов, я продакт-оунер MWS Tables.

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

В прошлом посте я рассказал, как MWS Tables помог внедрить единый реестр для работы с качеством данных, централизовать управление проектами и заменил таск-трекер. Сегодня будут еще три кейса: создание общего календаря и списка задач в распределенных региональных командах, единая система допусков и внедрение механики рейтингов.

Читать далее

10 техник оптимизации Java, которые выведут вас на новый уровень

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

Когда Java-приложение внезапно начинает «подвисать», причина почти всегда кроется в прозаичных деталях: неоптимизированных циклах, неудачном выборе коллекций, забытом кэше или агрессивном GC. В этой статье — 10 практических техник, которые помогут выжать максимум из JVM без преждевременной микрооптимизации и шаманства. Только доказавшие свою эффективность подходы, которые реально работают в проде — от финтеха до высоконагруженных API.

Читать далее

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

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

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

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

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

Но так ли это?

Читать далее

Как Яндекс и ИТМО сделали магистратуру по программированию, которая подойдёт и новичкам, и опытным специалистам

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

В сентябре 2025 года Яндекс и ИТМО открывают онлайн-магистратуру «Фронтенд- и бэкенд-разработка». Анастасия Ждановская, руководитель программы со стороны Яндекса, рассказала, как устроена магистратура для начинающих и опытных программистов, что входит в программу, как создаются учебные материалы и как на неё поступить.

Читать далее

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

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

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

Читать далее

Application Layer на примере Go — зачем он нужен, если уже есть сервисы?

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

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

Сегодня разберёмся, зачем Go-проекту слой Application / Use-Case: как он герметично изолирует бизнес-логику, позволяет переключаться между HTTP, gRPC, Cron-джобами и очередями, а заодно экономит тесты и нервные клетки.

Читать далее

Каждому сотруднику по личному помощнику: как мы подружились с AI-ревью

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

Вы любите делать код-ревью? 

«Не могу дождаться следующего PR!», — ответит абсолютно никто.

Понимаю! Ревью — штука необходимая, но давайте честно: утомляет, забирает время и ресурс, который можно потратить на другие задачи. Делегировать, казалось бы, хорошая идея… но кому? Личного ревьюера на полную ставку ни у кого нет.

Меня зовут Александр Федотов, я руководитель группы разработки в «Лаборатории Касперского». В своей команде я уже не раз пытался упростить ревью: менял подходы, вводил правила, подключал автоматизацию. Но все равно ощущение такое, что можно сделать еще лучше. Тем временем, коллеги реализовали интеграцию TFS с внутренней AI-моделью ЛК. И вот одним морозным зимним днем, во время настройки каких-то доступов, я попал в раздел Manage Features, где наткнулся на неприметный пунктик Pull Request AI, который позволял воспользоваться преимуществами этой интеграции.

Не теряя времени, я активировал фичу и стал счастливым обладателем раздела AI в каждом PR. С тех пор ревью стало другим. И теперь я не просто верю в автоматизацию — я ею пользуюсь и хочу поделиться с вами своими мыслями об этом.

Читать далее

Нейрошиза: как мы потеряли голову из-за искусственного интеллекта

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

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

Читать далее

xk6-browser как секретное оружие для умного исследования производительности

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

Привет, Хабр. Меня зовут Антон, я работаю в группе нагрузочного тестирования ЮMoney и занимаюсь исследованием производительности. В статье расскажу про xk6-browser — что у нас было до него, какие у этого решения преимущества и метрики.

Читать далее

Использование библиотек для программирования ПАК Рудирон

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

Продолжим серию статей про ПАК «Рудирон» и его программирование. Сегодня мы осветим тему использования библиотек при создании своего программного обеспечения.

Библиотеки являются мощным инструментом при работе с проектами. Особенно когда используются внешние модули, подключенные к Рудирону. Библиотека – файл или набор файлов, к котором используется такой же код по синтаксису, как и в основном тексте программы. Можно подключить библиотеку в свой код и использовать тот функционал, который она нам в этом случае предоставляет, а вариантов там может быть очень много: готовые функции высокого уровня для работы с внешними датчиками, различными модулями, экранами и т.п., для работы с внутренней периферией микроконтроллера (часы, таймеры, АЦП), библиотеки различных математических функций и многое другое, всего и не перечислить. Для опытного программиста это способ сократить время разработки программы, а для начинающего – готовые рабочие примеры работы с внешней периферией.

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

Шаблоны и примеры проектов ПАК Рудирон размещены в репозитории: https://gitflic.ru/project/akvarius-rudiron/rudiron-projects

Читать далее

Spring Data Ahead of Time репозитории

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

Команда Spring АйО перевела статью про новую версию AOT-репозиториев, которые позволяют генерировать реализацию методов запросов на этапе сборки. Это ускоряет запуск приложений, снижает потребление памяти и делает поведение репозиториев более прозрачным для разработчиков.

Читать далее

Мандельброта с анимации gif и сделанные fasm, Delphi, ffmpeg

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.2K
У нас есть много программ для рисования множество Мандельброта. Но сделать гиф с анимации — такового нет. Значит сделаем! )



Это гиф!
https://commons.wikimedia.org/wiki/File:Mandelbrot_Set_Color_Cycling_Animation_600px_3.gif
600 × 600 пкс, размер файла: 58,54 МБ, MIME-тип: image/gif, закольцованный
Читать дальше →

Как одной математической формулой определить цвет ячейки на рулетке?

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

Однажды моя девушка проходила курс по основам python. Она показала мне небольшую задачку на использование if-else: "по номеру кармана (ячейки) на рулетке определите его цвет".

Казалось бы, все довольно просто — используем условные операторы и не знаем проблем! Но можно ли вывести математическую формулу которая будет работать для всех ячеек? В этой статье я описал поиски такой формулы!

Читать далее

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

1С: Кабинет сотрудника: Как мы чинили то, что называлось «готовым продуктом»

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

Привет, Хабр (и просто случайные читатели, зашедшие сюда в поисках истины или интересной статейки на пару минут)!

Сегодня я расскажу вам историю о том, как я провёл полгода в тесных объятиях «1С: Кабинет сотрудника» на новой технологии 1С:Элемент — системы, которая обещала сделать кадровый документооборот простым, как бутерброд с колбасой. Но, как выяснилось, бутерброд этот оказался с сюрпризом… то ли огурцом, то ли гвоздём.

Читать далее

Выравнивание AST (и других структур данных, используемых при работе с компилятором)

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

Два варианта абстрактного синтаксического дерева (AST) для выражения a * b + c.

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

Многие по-разному понимают, что такое арены или регионы, поэтому здесь я собираюсь называть интересующую меня разновидность этих структур данных «выровненной», а сам процесс — «выравниванием» (flattening). Выровненная арена содержит всего один тип, то есть, в сущности, это обычный массив. В таком массиве можно обойтись индексами, тогда как обычно для работы с массивом требуются указатели. Здесь мы поговорим прежде всего о выравнивании абстрактных синтаксических деревьев (AST), но вообще описанная идея применима с любой структурой данных, отягощённой указателями.

Чтобы изучить выравнивание, мы дважды напишем простейший интерпретатор: сначала как обычно, а затем с применением выравнивания. Логика поста прослеживается по коду из этого репозитория, где можно сравнить две ветки. Здесь важнее всего отметить, что изменения минимальны, но при этом микробенчмарки показывают, что после выравнивания код работает в 2,4 раза быстрее. Благодаря выравниванию не только повышается производительность, но и сам код становится эргономичнее, на чём я также остановлюсь.

Читать далее

Как начать мыслить о создании цифрового интеллекта

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

С чего можно начать мыслить о создании цифрового интеллекта, даже если он будет очень простым. Несколько идей, которые должны показать, как можно мыслить о ИИ по-другому, какими основными свойствами должна обладать программа и с чего можно начать мыслить в направлении создания цифрового интеллекта.

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

Читать далее

Один за всех, и этого достаточно: мой эзотерический язык программирования Single

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

Годами люди писали программу «Hello world!» на языке Unary, но сегодняшнего дня появился новый односимвольный язык программирования! Односимвольный? Достойная замена Unary? Конечно! Представляю вам Single.

Читать далее

Иногда приходится¹ копаться² в кишках³ Apache Spark

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

¹ …просто потому, что другого варианта добиться необходимого результата тупо не существует.
² и да, довольно-таки глубоко.
³ нет, серьёзно!



Давайте рассмотрим следующий бизнесовый кейс.


Дано: реально большие данные. Очень много датасетов по много терабайтов каждый, — в сумме объём тянет на петабайты. Лежат в облаке, но это не важно. Важно, что мы эти данные покупаем в «сыром» виде, каким-то образом «готовим», а потом перепродаём конечному потребителю.


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


Довольно-таки сложный, продвинутый ETL у нас. Поясню на типичном примере.

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

Письмо участникам Arc, 2025 год

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

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

О проекте Arc, его будущем и появлении AI‑браузеров — момент ответить на самые масштабные вопросы, которые вы задавали нам в прошлом году.

Читать далее

Обратный вызов operator delete: когда, как и зачем он вызывается

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

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

Сегодня разбираемся, когда, как и зачем рантайм вызывает обратный вызов operator delete, откуда берётся sized delete, почему компилятор подсовывает placement-delete, и когда стоит выкинуть всю эту ручную экзотику, заменив коллбэки на std::function_ref или шаблонные параметры.

Читать далее

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