Все потоки
Поиск
Написать публикацию
Обновить
1047.71

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

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

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

Как сделать мобильное приложение, если у тебя лапки? Путь от PWA до TWA

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

Привет, Хабр! Меня зовут Влад, и я тот самый человек, который привык использовать костыли в решении задач. По крайней мере, я считаю, что это лучший подход при подготовке MVP. Яркий пример — прототипирование простых скриптов под микроконтроллеры на MicroPy или десктопных приложений на Electron. Но, как оказалось, это не все виды ухищрений в разработке.

Если вы веб-разработчик, но руки «чешутся» написать мобильное приложение, варианты есть. В этой статье я расскажу, как создать собственное прогрессивное веб-приложение (PWA) и доработать его до TWA, чтобы потом протестировать и опубликовать в разных сторах. Никакого rocket science, просто небольшое пособие, которое основывается на моем опыте. Подробности под катом.
Читать дальше →

Как проверить в C, является ли выражение константой

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

Вот вам маленькая задачка на программирование: реализуйте такой макрос, который принимает в качестве аргумента числовое выражение (числа могут быть целыми или с плавающей точкой) и:

Читать далее

Закат эпохи IT-школ

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

Многие из вас помнят, какими были IT-школы 10 лет назад. Это были просто сайты с полезными курсами по различным языкам программирования. Не было агрессивного маркетинга и обещаний звездных зарплат. Можно было с гордостью говорить о том, что ты прошёл какие-то курсы. Но главное — эти курсы действительно работали: после них удавалось устроиться на работу. Сейчас всё стало значительно хуже по всем направлениям. Перенасыщенный рынок, конкуренция между школами, вынужденная смена бизнес-модели, появление AI — всё это превратило IT-образование в то, каким мы видим его сегодня: в большой, неповоротливый и неэффективный организм с утраченной репутацией. Давайте разберёмся, как так получилось, и главное — что с этим делать.

Читать далее

Ускоряем разработку: инструменты экосистемы Python

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

Привет! С вами Леша Жиряков, техлид backend-команды витрины онлайн-кинотеатра KION и по совместительству пропагандист Python: в МТС я возглавляю Python-гильдию. Но как бы много я ни говорил про преимущества этого ЯП, многие стандартные инструменты экосистемы ограничены. Тот же pip не всегда эффективно разрешает конфликты зависимостей, например при сложных иерархиях пакетов. Это сказывается на производительности команд разработчиков, особенно когда проекты растут и кодовая база увеличивается.

И тут мы наблюдаем интересную тенденцию. Появляются инструменты нового поколения, написанные на Rust, которые значительно расширяют возможности Python-разработчиков. С одной стороны, они сохраняют привычный рабочий процесс, с другой — ускоряют выполнение стандартных задач в несколько раз.

Сегодня хочу обсудить два таких инструмента — Ruff и uv. Давайте посмотрим, как эти технологии могут трансформировать повседневный рабочий процесс и сэкономить нам время. Погнали!

Читать далее

Game++. while (!game(over))

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

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

Эта серия статей родилась как заметки на полях к замечательной книге Game Engine Architecture, книга большая, объемная и охватывает все аспекты создания движка. Но там нет нюансов практической разработки. А чтобы видеть нюансы надо понимать не только теорию, все же GAE больше теория, но знать как работает код игры изнутри. Чтобы понимать как, и главное почему, используются выбранные механизмы внутри игры, чтобы видеть проблемы с производительностью и архитектурой, как их искать и как чинить, для этого придется понять как работают и как создавались игровые движки.

Если мне не изменяет память - Кармак сказал, что лучший способ [создания игр] — написать собственный движок ( "The right move is to build your own engine" ), на что многие возразят: это вовсе не так просто. Но папа Doom'a известен не только своим вкладом в разработку игровых движков, но и довольно часто высказывался критически о развитии игровых движков в целом, и о преимуществах создания собственных технологических решений вместо использования готовых.

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

Читать далее

Как на самом деле хранятся изображения?

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

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

Что-то в этой идее пробудило любопытство автора, поэтому в статье он попытался удовлетворить его и ответить на вопрос: как на самом деле хранятся изображения?

Читать далее

Сопоставление с образцом на C#: объяснение и примеры

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

За годы своего развития C# существенно эволюционировал; одна из самых мощных фич языка — это сопоставление с образцом (pattern matching).

Работая недавно над небольшим хобби-проектом, я наткнулся на такую прекрасную строку кода C#.

if (person is not null and { Age: > 18 })

{}

Выглядит изящно. Откровенно говоря, она заставила меня призадуматься.

Годами я писал проверки на null и свойства-аксессоры классическим образом:

if (person != null && person.Age > 18)

{}

Функционально? Да. Удобочитаемо? Не особо. Безопасно? Спорно, особенно когда код становится сложнее.

Я решил создать шорт YouTube об этом современном синтаксисе. Это небольшое забавное напоминание о том, что C# позволяет при помощи сопоставления с образцом комбинировать проверки на null и обращение к свойству в одно условие.

Я понятия не имел, что это короткое видео приведёт к гораздо более глубокому исследованию, и покажет мне, насколько полезно и универсально сопоставление с образцом в современном C#.

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

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

Читать далее

Создаём арканоид в VGA-текстовом режиме на Rust без std и alloc (своя мини ОС)

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

Здравствуйте, уважаемые читатели!

В этой статье я хотел бы поделиться необычным и вдохновляющим проектом — реализацией арканоида в текстовом VGA-режиме, написанного полностью на Rust, без использования стандартной библиотеки и даже без аллокации памяти (#![no_std] + no_alloc).

Проект работает напрямую с VGA-памятью и PS/2 клавиатурой через порт 0x60, создавая абсолютно нативную игру в стиле 80-х, но с современным вниманием к качеству кода. И всё это — с участием милого талисмана Platinum-tan.

Читать далее

Новый язык от 1С: Зачем? Кому? Стоит ли лезть?

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

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

Так вышло, что последние полгода я провёл в тесных объятиях «Личного кабинета сотрудника» на Элементе — новом языке программирования от 1С. За это время я успел его изучить, полюбить, возненавидеть, снова полюбить и, наконец, написать эту статью, чтобы поделиться своими впечатлениями, страданиями и неожиданными открытиями.

Читать далее

Чистый код — красивая архитектура. А работает ли это?

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

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

Грязный код — это про непонятные переменные, запутанные модули и решения «на скорую руку». Вас ждёт после такого потеря во времени и в лучшем случае косые взгляды коллег. К сожалению, непонятный код часто пишут не только из-за спешки, но и из-за неопытности и чрезмерного энтузиазма тех, кто хочет всё переделать.

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

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

Давайте разберём, как превратить кошмар в конфетку — детали внутри.
Читать дальше →

Ты решаешь LeetCode неправильно. Как пройти любое собеседование в BigTech?

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

Привет! Я ex. Разработчик из VK, сейчас принял оффер от Ozon'a, и за последний месяц я прошел собеседования в 4х бигтех компаниях: Ozon, Avito, Wildberries и T-Bank и везде дошел до финалов/офферов. Пообщавшись во многих группах, посвященных Go-разработке, я понял, что много умных ребят готовясь к собесам не имеют четкой системы подготовки, и из-за этого заваливают технические собесы в компании. Не претендуя на истину в последней инстанции, предлагаю свою методику подготовки к собесам, которая помогла мне и моим знакомым подготовиться к техническим собесам во все популярные ру-бигтехи.

Читать далее

Распределённые транзакции в микросервисах: от SAGA до Two‑Phase Commit

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

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

Чтобы решить эту проблему, разработаны специальные паттерны и протоколы управления распределёнными транзакциями. В этой статье детально рассмотрим ограничения классических ACID-транзакций в распределённой архитектуре, а также два подхода к распределённым транзакциям – сага (SAGA) и двухфазный коммит (2PC). Разберём мотивацию, принципы работы, преимущества и недостатки каждого, сравним их по критериям. Кроме того, обсудим альтернативные подходы, такие как TCC (Try-Confirm-Cancel), паттерн Outbox, а также кратко упомянем eventual consistency, транзакционные сообщения, инструменты вроде Atomikos и др. В завершение – практические рекомендации, как выбрать подходящий способ обеспечения согласованности в ваших микросервисах.

Читать далее

Реализация базового метода Стёрмера-Верле

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

Используем силу уравнений Ньютона и численных методов для моделирования динамики простых плоских мешей в реальном времени! В конце вы сможете моделировать падение ножниц ✂️ как на анимации

Читать далее

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

Такого «Посетителя» вы ещё не видели — Visitor.NET

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


«Посетитель» (visitor) — один из самых сложных паттернов Банды Четырёх.

На языке C# для него можно создать множество реализаций, однако все они так или иначе имеют ограничения из-за возникающего динамического приведения типов.

В рамках статьи вы погрузитесь в проблематику мультиметодов и увидите новую реализацию паттерна, лишённую озвученных недостатков и открывающую возможность к написанию по-настоящему гибкого и типобезопасного кода!
Читать дальше →

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

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

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

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

Читать далее

14 интересных фич Python (возможно, не совсем pythonic)

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

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

Если загуглить лучшие 10 продвинутых хитростей Python, то вы найдёте кучу постов или статей на LinkedIn с обзором тривиальных (но всё же полезных) вещей типа генераторов или кортежей.

Я пишу на Python уже двенадцать лет, и за это время нашёл кучу очень интересных, недооценённых, уникальных или (как может кто-то сказать) «не-pythonic» хитростей, позволяющих по-настоящему расширить границы возможного для Python.

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

Халява приходит в программирование

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

Недавно прогремел пост Артура Думчева (@arturdumchev), как халява якобы уходит из программирования. Можете ознакомиться с ним, чтиво достойное. Особенно комментарии.

У меня сегодня день рождения: 39 лет. С 2003 года я работаю разработчиком, и сейчас делаю кое-что для ИИ. Интуиция подсказывает, что халява только начинается, мои чюваки. Сейчас — лучшее время быть разработчиком.

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

А дальше ясно, что из неверно поставленного условия может следовать что угодно.

Читать далее!

Релиз диалекта YDB для SQLAlchemy: как мы сделали интеграцию с Apache Superset

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

Меня зовут Олег, и в Яндексе мы с командой занимаемся Python-обвязкой вокруг нашей базы данных YDB. Python знаменит «батарейками в комплекте», широким ассортиментом библиотек на все случаи жизни, включая богатую экосистему для работы с базами данных. Есть свой интерфейс DBAPI (PEP-249), несколько конкурирующих ORM и многочисленные уровни абстракции между софтом и базами. В этой статье — о том, как мы делали полноценную интеграцию нашей базы данных с Apache Superset: чтобы достаточно было выбрать YDB из выпадающего меню и начать визуализировать аналитические данные.

Читать далее

Самоучка против инженера: кто лучше

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

В IT-сообществе не утихают споры о ценности формального образования. Одни считают, что только фундаментальное образование формирует инженерное мышление. Другие уверены, что самоучки не уступают выпускникам вузов благодаря свободному доступу к фреймворкам и онлайн-ресурсам. Мы в Artezio провели круглый стол с экспертами отрасли и собрали аргументы с обеих сторон и разобрались, кого ищут работодатели в эпоху, когда код пишут LLM.

Читать далее

Готовимся к встрече с Python 3.14: разбор суперсил

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

Всем привет! С вами Леша Жиряков, техлид backend-команды витрины онлайн-кинотеатра KION. Сегодня будет обзор Python 3.14 — в общем и целом он построен на официальной документации, которая ежедневно обновляется в преддверии финального релиза. Так что «улыбаемся и читаем» (привет, «Мадагаскару»), но сильно не напрягаемся.

Когда уже релиз? Скоро, коллеги, скоро. Финальная версия должна появиться на свет 7 октября. Багфиксы будут выходить примерно каждые два месяца в течение двух лет, а обновления безопасности — вплоть до 2030 года. Пока можно насладиться новыми фичами 7-ой альфа-версии. Точнее, последней альфа-версией — дальше нас ждет бета. Ну, погнали!

Читать далее

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