Обновить
1073.58

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

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

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

3 инструмента, которые автоматически превращают код Python в формулы LaTeX

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

Команда Python for Devs подготовила перевод статьи о том, как превратить код Python в элегантные математические формулы прямо в Jupyter-ноутбуке. Если вы строите финансовые модели, алгоритмы или научные расчёты — LaTeX поможет оформить их профессионально. В статье разбираем четыре инструмента: IPython.display.Latexдля ручного рендеринга, handcalcs для пошаговых вычислений, latexify-py для автоматического преобразования функций и SymPy для символьной математики.

Читать далее

Combine – швейцарский нож iOS-разработчика. Или нет?

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

Привет! Меня зовут Антон, я iOS-разработчик в Банки.ру. Когда я только начинал изучать Combine, он казался для меня магией. Пара команд – и вот у тебя уже есть какие-то данные. Чтобы Combine перестал оставаться черным ящиком давайте заглянем внутрь. Эта статья – мое виденье этого фреймворка.

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

Давайте рассмотрим Combine изнутри!

Читать далее

Kubernetes кластер на миллион узлов. Обзор проекта k8s-1m

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

Команда Go for Devs подготовила перевод k8s-1m — кейса о том, как не догадки, а измерения двигают пределы Kubernetes. Ключевые идеи: изоляция QPS по типам ресурсов, смягчение гарантий хранения для эфемерных данных, и шардирование планировщика. Полезно всем, кто проектирует крупные кластеры или хочет работать с ними.

Читать далее

Паттерны ООП, так не издевались даже… Структурные шаблоны с примерами на Java

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

Привет! Меня зовут Бромбин Андрей. В этой статье разберём структурные паттерны ООП. Используя примеры на Java и простые метафоры, поймём природу шаблонов: как они работают, зачем нужны и чего требуют от нас взамен. Почему дизайн называют удачным при использовании паттернов по назначению, и почему так бывает не всегда.

Книг и статей о шаблонах проектирования, как песен о любви, потому что в разработке эта тема волнует каждого начинающего и не очень специалиста. Помните, как пели Чиж и Ко: «а не спеть ли мне песню о любви?» — давайте и я попробую.

Шаблонизироваться

Анализ смарт-контрактов на примере Solidity

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

Блокчейн-индустрия переживает период беспрецедентного роста, при этом общая стоимость заблокированных активов (Total Value Locked, TVL) в децентрализованных финансовых протоколах превышает 200 миллиардов долларов по состоянию на 2024 год. Вместе с ростом экосистемы растет и количество инцидентов безопасности, связанных с уязвимостями в смарт-контрактах. Согласно отчету Chainalysis, только в 2023 году потери от хакерских атак на DeFi-протоколы составили более 3.7 миллиардов долларов. История блокчейн-индустрии изобилует громкими случаями эксплуатации уязвимостей смарт-контрактов.

Я Радда Юрьева, работаю в команде AppSec и вместе с коллегами из отдела Web3 исследую вопросы безопасности смарт-контрактов. В этой статье хочу поделиться нашим опытом анализа уязвимостей Solidity-кода и рассказать, какие подходы помогают находить и предотвращать ошибки на ранних этапах разработки Solidity-контрактов.

Читать далее

Веб-архитектуры и Джеймикс

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

Это может прозвучать необычно, но развитие полноценных веб-приложений фактически началась с фронтенд-технологий. До разделения кода систем на фронтенд и бэкенд все они были как бы разновидностью сайтов, но с более сложными процессами, выполняющимися “на сервере”. На каждый запрос пользователя, сервером ему отдавался новый документ с такой же шапкой и подвалом. За редким исключением эти интерфейсы выходили достаточно примитивными, ведь каждое действие пользователя заставляло систему сначала немного подумать, и затем нарисовать новую страницу для результативного состояния. Значительные манипуляции с содержимым страницы в браузерах обычно были крайней непроизводительными, да и оказывались сложны для реализации. Изначально HTML-сайты или Web задумывались как упрощенный вариант издательской системы, в основе которой лежала идея "гипертекста” с переходами от одних страниц к другим через ссылки.  

Читать далее

Выжимаем из Go скорость до последних наносекунд

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

Будем оптимизировать программы на Go. Выжимать последние наносекунды, чтобы код приближался по скорости к Си или ассемблерному. Цель - скорость, чтобы процессор был загружен на 100% при высокопроизводительные вычислениях.

Читать далее

Совместимость в Java: что может пойти не так?

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

Совместимость — фундаментальная характеристика платформы Java, обеспечивающая стабильную работу программ при эволюции JDK. Однако понятие «совместимость» многогранно: исходный код, бинарные файлы и поведение программ оцениваются по разным стандартам.

В новом переводе от команды Spring АйО разберем три ключевых категории совместимости: на уровне исходного кода, бинарную и поведенческую, а также рассмотрим нюансы сериализуемой и миграционной совместимости.

Читать далее

Агент на Kotlin без фреймворков

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

Статья является продолжением Пишем агента на Kotlin: KOSMOS, но может читаться независимо. Мотивация к написанию — сохранить читателю время на возьню с фреймворками для решения относительно простой задачи.

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

В статье хочу показать, как самостоятельно написать аналог Koog или Langchain4j. У вас не будет всех их фичей, зато будет очень простая и расширяемая система.

Читать далее

Какие они, типичные DS-специалисты, и как часто ИИ пишет за них код: результаты совместного опроса Хабра и Авито

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

Хабр и технологическая платформа Авито решили заглянуть в мир ИИ и понять, кто всё это создаёт. Мы провели опрос среди пользователей Хабра, чтобы лучше узнать, кто такие современные дата-сайентисты и какие у них привычки, есть ли у них ИИ-любимчики, какие ИИ-инструменты они используют в работе. Около 500 разработчиков в сфере ML/DS ответили на самые разные вопросы — не только про свою профессиональную деятельности и нейросети, но и про увлечения и общение с родственниками.

Заглянуть в мир ИИ

Как написать собственную кинематику для робота-манипулятора и заставить его ловить объекты на лету

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

Привет, Хабр! Одна из задач при управлении роботами-манипуляторами – расчет обратной кинематики. Данный вид кинематики позволяет вычислить углы наклона суставов робота (joints) таким образом, чтобы захват (grip) робота пришел в заданные трехмерные координаты с правильным углом наклона. Для многих роботов уже есть алгоритмы и формулы вычисления обратной кинематики, мы (команда Zebrains) столкнулись с отсутствием готового решения для робота xArm 2.0.

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

Читать далее

Запускаем сервер в Minecraft: исследование конкурентов

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

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

Теперь, набив собственных шишек, я готов заглянуть к «соседям». Чем они завлекают свою аудиторию? Есть ли уникальные игровые механики? Какие плагины используются и какие ограничения в игровом мире? Paper или Spigot? Velocity или BungeeCord?  

Этот текст подходит даже тем, кто никогда не занимался администрированием и не планировал — в процессе исследования я нашел множество потех.

Читать далее

Для чего компании требуют высшее образование в IT

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

Всем привет! Меня зовут Алексей, я техлид Android направления в компании Домклик.

На одном из собеседований зашла с кандидатом дискуссия об образовании. И была произнесена примерно такая фраза: «Зачем тратить 4–6 лет на обучение в вузе, если нужные по вашей вакансии навыки можно получить за год?» Пообщавшись ещё с некоторыми недавно вошедшими в отрасль знакомыми, сложилось впечатление, что этим вопросом задаются многие. И действительно, если, условно, на заводе требуется фрезеровщик, и у кандидата есть стаж работы или он окончил профильное училище, то какая разница, получал ли он высшее образование или нет?

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

Читать далее

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

Шахматы, которые вас удивят: Полный гайд по созданию игры с туманом войны на Python

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

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

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

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

Так обычная подготовка к соревнованиям превратилась в увлекательный эксперимент, результатом которого стала эта статья и реализация шахмат с туманом войны на Python

Читать далее

Ошибка выжившего: почему рынок упускает будущих звёзд IT

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

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

Прежде чем углубиться в детали, позвольте представиться. Меня зовут Анзар, я работаю фронтенд-разработчиком уже 9 лет, последние 3 из которых — в Ozon Tech, где я занимаю позицию тимлида. За это время я побывал на десятках, а может, и сотнях собеседований — и как кандидат, и как интервьюер. Кроме того, у меня за плечами многолетний опыт менторства и мне приходилось наблюдать, как различные факторы влияют на скорость роста. Все это заставило меня глубоко задуматься о системных проблемах найма разработчиков. Думаю, эта статья будет особенно полезна нанимающим менеджерам, рекрутерам и, возможно, HR-специалистам — она поможет пересмотреть подход к найму.

Читать далее

Программирование Роботов — разбор задач «квалификации» соревнования от МТС — немного кода, видео и геометрии

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

Отборочный этап «TrueTechChamp» завершился и можно поговорить о подходах к задачам. Здесь будут описаны наивные решения программиста, почти незнакомого с робототехникой, впрочем, зато по всем трем задачам — из чего автор делает вывод что узкоспециальные познания тут не требуются — это развлечение доступное, в общем‑то, всем:‑)

Задачи были такие: 1) проехать по известному «лабиринту» из двух комнат с фиксированными препятствиями, то есть запрограммировать фиксированный маршрут — кое‑кто бился над этим неделю и больше — но всё же решений около сотни; 2) проехать неизвестный лабиринт из стенок под прямыми углами — с этим справились вчетверо меньше команд; 3) проехать по змеевидной платформе, используя камеру глубины, и не упасть за край — мне известно примерно о двух с половиной решениях её.

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

Погнали!

Решение проблемы двойного букинга: паттерны проектирования систем

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

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

Технологические компании наподобие Ticketmaster, BookMyShow, Airbnb, Delta Airlines и так далее сделали бронирование делом одного клика, позволившим покупать билеты из дома.

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

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

Поэтому важно создать надёжное решение классической задачи — двойного букинга.

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

Мы рассмотрим различные архитектурные паттерны и разберёмся в их плюсах и минусах. Статья поможет вам обрести глубокое понимание и наработать знания в системном мышлении.

Читать далее

itertools для тех, кто думал, что знает itertools

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

Привет, Хабр! Модуль itertools мне известен многим вдоль и поперёк. Ну действительно, что там сложного? Пара функций вроде chain да product, и кажется, что ничего нового для себя уже не найти. Однако стоит копнуть глубже, и выясняется, что у itertools есть немало нюансов и даже новых возможностей, появившихся в свежих версиях. В этой статье рассмотрим многие функции itertools: от базовых до самых интересных.

Понять силу итераторов

О миграции с Angular на React в деталях

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

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

Меня зовут Александр Марченко. Я руководитель команды Frontend-разработки в ОК. В этой статье я расскажу о особенностях и способах миграции Angular приложения на React, а также поделюсь своим опытом.

Читать далее

Одна строка — тысячи горутин: как мы поймали утечку памяти в сервисе на Go

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

В этом техническом разборе рассмотрим, как инженеры Harness обнаружили и исправили критическую утечку памяти в Go: переназначение переменной контекста в циклах воркеров порождало невидимые цепочки, мешавшие сборщику мусора освобождать память в тысячах горутин, из-за чего их сервис-делегат CI/CD в итоге потреблял гигабайты памяти.

Читать разбор

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