Обновить
1047.41

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

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

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

Закройте сокет, даже если он не открылся

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

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

Недавно я писал об идущем соревновании МТС по "программированию роботов" - и упоминал вскользь что пока со стороны организационной наблюдаются проблемы. На днях энтузиасты выявили как раз такую ошибку в коде, используемом организаторами для проверки решений.

Если вы создали сокет, попытались его открыть и отвалились по таймауту - не переиспользуйте его! Для новой попытки обязательно создавайте новый сокет!

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

Читать далее

Как я подружил OpenAI, Rust и Solana: квиз, который платит токенами за правильные ответы

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

Что, если каждый правильный ответ в викторине приносил бы тебе крипту?

Я решил проверить эту идею — и собрал Solana Quiz, децентрализованное приложение, где пользователи проходят ежедневные квизы с вопросами от OpenAI и получают Solana‑токены за правильные ответы.

Да, это реально работает. И да — токен мы тоже создаём сами 😎

Читать далее

Тени секретов в etcd: удалил ≠ уничтожил

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

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

Узнать, куда исчезают секреты

Как мы нашли баг в компиляторе Go

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

Каждую секунду в дата-центры Cloudflare в 330 городах отправляется 84 миллиона HTTP-запросов. Из-за этого даже самые редкие из багов возникают достаточно часто. На самом деле, именно наши масштабы позволили нам недавно обнаружить в компиляторе Go на arm64 баг, вызывающий состояние гонки в генерируемом коде.

В этом посте мы расскажем о том, как впервые столкнулись с багом, исследовали его и докопались до его первопричины.

Читать далее

Локальный ИИ в OpenIDE: Mellum + Continue + Ollama

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

ИИ в разработке уже не новость, а обыденность. На этом фоне набирает обороты другая тенденция — запускать модели локально. Причины понятны: приватность кода, работа без интернета, предсказуемая задержка и никакого вендор-лок. Вы контролируете, какая модель у вас крутится, какие данные она видит и что именно отправляется «наружу» (спойлер: ничего).

Обратная сторона тоже есть. Большие модели прожорливы: им нужны CPU/GPU, память.. Настройка окружения, версии — всё это ложится на вас. Но хорошая новость в том, что для задач автокомплишена не всегда нужен «монстр» на десятки миллиардов параметров. В связи с этим появились легковесные модели, которые шустро работают на обычном рабочем ноутбуке и при этом прекрасно справляются с рутиной в IDE.

В этом гайде от команды Spring АйО вы узнаете, как настроить локальную LLM для вашей IDE, будь то IntelliJ IDEA или OpenIDE. Я буду использовать последнюю.

Читать далее

6 Docker-фич для продвинутого использования

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

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

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

Погрузиться

Какой табличный формат LLM понимают лучше всего? (Результаты по 11 форматам)

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

Команда AI for Devs подготовила перевод статьи о том, в каком формате лучше всего передавать таблицы LLM. Исследование охватило 11 популярных форматов — от CSV и JSON до YAML и Markdown. Результаты неожиданны: разница в точности достигает 16 процентных пунктов, а выбор формата напрямую влияет на стоимость инференса и стабильность RAG-пайплайнов.

Читать далее

Культура кода девяностых: как писали программы до Git, Jira и бесконечных Pull Request’ов

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

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

Читать далее

Книга «Программирование бэкенда на Python. Практическое руководство»

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

Приветствуем, коллеги. На связи Олег Сивченко @OlegSivchenko.

Уместен и закономерен ваш интерес, как мы обзаводимся правами на перевод зарубежных книг и где берём новинки. Такой вопрос задал нам читатель @PopovGP. Действительно, книгоиздательская отрасль не один год приспосабливалась к современным реалиям, но один интересный новый тренд действительно стоит раскрыть подробнее: мы стали активнее искать и рассматривать небольшие издательства, настроенные на сотрудничество. Так, уважаемый коллега @Holmogorov завершил длительный поиск базовой книги по Jetpack Compose, найдя в небольшом американском издательстве «Payload Publishing» отличный труд Нила Смита «Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin». Эта книга вышла в августе.

О другой очень похожей находке я хочу рассказать вам сегодня. Это совсем свежая новинка «Программирование бэкенда на Python. Практическое руководство» под авторством Тима Питерса. Обнаружили мы её в каталоге маленького индийского издательства «GitForGits».

Читать далее

Сборщик мусора в Go. Часть 3: Управление скоростью GC

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

Команда Go for Devs подготовила перевод статьи о том, как в Go устроено управление скоростью работы сборщика мусора. TL;DR: даже при тысячах горутин GC подстраивается под нагрузку, выбирая между меньшим числом долгих пауз и большим числом коротких. Итог — разработчику почти не нужно вручную «крутить» настройки, рантайм сам находит оптимальный ритм.

Читать далее

Python шпильки: как заменить многоэтажные if-else на изящный словарь функций

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

Блог Михаила | Python | Разработка | Best Practices

"Всем привет! Меня зовут Михаил, я веду Telegram-канал «Python Шпильки», где делюсь изящными приемами программирования. Сегодня хочу показать один из самых полезных паттернов..."

Читать далее

Структуры данных. Часть 1

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

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

Читать далее

Автоматический парсинг чеков с LlamaIndex и Pydantic

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

Команда Python for Devs подготовила перевод статьи о том, как с помощью LlamaIndex и Pydantic можно превратить сканы чеков в структурированные данные. Минимум кода — и у вас готовый CSV для анализа.

Читать далее

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

Как статический анализ побуждает разработчика рефакторить код. По мотивам Source SDK

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

Ранее утро. Туман окутал горные хребты. Просыпайся, Гордон, вставай. Нам пора отправляться в сердце тьмы и освободить этот мир от лап дремлющего зла. Да, и не забудь свою монтировку.

Читать далее

Как скрестить ужа с ежом: соединить Laravel и Битрикс в одном проде и не умереть (часть 1)

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

Если ваш Битрикс тормозит, а Laravel кажется из другой вселенной — эта статья для вас.

На связи Алиса — тимлид в e-commerce агентстве KISLOROD. Мы ежедневно имеем дело с большими каталогами, сложной коммерцией и 1С, которая дышит в затылок. И однажды мы решили сделать невозможное: подружить Битрикс с Laravel. Так, чтобы Битрикс остался каноном и привычной админкой, а Laravel стал помощником — взял на себя API, тяжёлую бизнес-логику и все, что тормозит. Без форка ядра, слез SEO-шника и без утечек в 1С. Да, это реально.

Читать далее

Шутки и веселье в публичном Android API

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

Ранее я рассказывал об относительно малоизвестной и ныне удалённой строке-заполнителе в Android, использовавшейся в качестве пасхалки. Это был выдуманный оператор сотовой связи под названием El Telco Loco. Сегодня я расскажу о методах и других частях публично доступного Android API, которые могут показаться больше смешными, чем полезными. Это пасхальные яйца, шутки, видимые только разработчикам приложений для Android, но не обычным пользователям.

Читать далее

Минималистский графический интерфейс, на C++ / WTL, для консольного загрузчика

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

Введение

Всё началось с комментирования статьи: «[Как я написал современный GUI для yt-dlp на Python]( https://habr.com/ru/articles/930260/)».

Программа автора мне понравилась, и я обещал ему попробовать сделать аналогичный проект на C++ / WTL.

Так вот, не прошло и полгода, как первая версия аналогичной программы уже готова. Её рабочее название – MiniDL, а исходники доступны на сайтах:

http://polezp.narod.ru/Prg/MiniDL100.zip

и

http://lecole.free.nf/Prg/MiniDL100.zip

или

https://disk.yandex.ru/d/yGQDXbkpk6LPqw

Архив содержит также скомпилированные бинарники для 32-х и 64-х разрядных, релизных версий, под Windows («MiniDL32r.exe» и «MiniDL64r.exe»).

Естественно, создать конкурентный интерфейс профессиональной библиотеке CustomTkinter, для Питона, на сверхлегком движке WTL, за обозримое время, практически невозможно. Но такая задача и не ставилась. Хотелось просто реализовать идею автора – работать с удобной графической оболочкой для консольной программы, в данном случае – внешнем загрузчике медиа-контента из Ютуба и других, поддерживаемых им сайтов.

Ради простоты, пришлось отказаться от попытки реализовать все интерфейсные плюшки автора и ограничиться минималистским вариантом. Тем более что, лично меня он вполне устраивает. Более того, поскольку я привык работать в Total Commander, то там вполне удобно использовать и консольные программы, особенно в паре с командным файлом их запуска, что позволяет перенести туда все параметры командной строки. А, в случае с загрузчиком yt-dlp.exe ситуация оказалась еще лучше, так как, он поддерживает конфигурационный файл, с мощными настройками. Если их хорошо освоить, то, в принципе, ничего больше и не надо. Ведь, эти настройки позволяют легко скачивать не только аудио и видео файлы, но и субтитры к ним и тому подобное. Также, легко и просто указать каталог загрузки, но уже в нашей программе, и не мучиться, как автор, с сохранением их на рабочий стол.

Читать далее

Создаём AI-ассистента для код-ревью с нуля

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

С нуля создаем Node.js-сервис для GitHub, который использует LLM (OpenRouter) для построчного код-ревью Pull Request. Разберем: верификацию вебхуков, борьбу с непредсказуемостью LLM и превращение хаоса в отказоустойчивый инструмент.

Начать внедрение LLM

Почему model-first и где истина?

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

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

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

И вроде не велика проблема - делаем структуру в нашем любимом языке, такую же, как в БД и из наших кубиков складывается слово "счастье". Складываться-то оно складывается, но ненадолго. Очень быстро структура БД и структура в коде начинают разъезжаться. А если не начинают, то потыкайте в свой проект палочкой - скорее всего он уже умер. Как говорится "не щебечет дохлый щегол, а мёртвый проект не меняет свою структуру". Ну и далее по тексту...

Познать истину

Что такое дескрипторы в Python и почему вам следует о них знать

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

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

Читать далее

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