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

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

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

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

Безболезненное внедрение статического анализа и победа над ложными срабатываниями

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

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

Читать далее

flowOn vs withContext: правильное переключение потоков в Flow в Kotlin

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

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

Сегодня мы рассмотрим, как правильно переключать контексты в Kotlin Flow и почему flowOn — это не то же самое, что withContext.

Читать далее

GIMP Script-Fu ООП. Статические поля класса

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

Библиотека функций к Script-fu

Итак, мы разработали практически полнофункциональную ООП систему для языка tinyscheme, так же работающую в script-fu GIMP. Но гложет меня одна мысль, реализовать поля общие для всех объектов класса. В разных языках они называются по разному, но смысл один, некие значения которые общие для всех объектов одного класса. В принципе как я уже указывал, такие поля реализуются как глобальные переменные, но реализация их в виде подсистемы ООП облегчит управление этими полями и использование их в обобщённых функциях. Тут есть тонкий момент: обобщённая функция может работать не только с объявленными типами параметров, но и с их наследниками. Если мы используем общие поля для класса в виде какой то глобальной переменной, то с этими полями могут работать не только объекты объявленных в параметрах классов, но и их потомки. И по идее методы обобщённой функции должны работать с типами соответствующим типам входных аргументов, а не просто типам объявленных параметров. А работа с глобальной переменной не будет различать одних потомков объявленных параметров метода от других. Во всяком случае такая персонализация работы будет затруднена и должна будет выполняться в ручную.

Читать далее

Типы прокси: как выбрать подходящий инструмент для своей задачи

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

Разберёмся, что именно скрывается под терминами "резидентский", "мобильный", "ISP" и "дата-центровый" прокси, в чём их технические отличия, как реализована маршрутизация и авторизация.

Читать далее

Как выжить в токсичном коллективе. Вредные советы

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

Привет! Сегодня поделюсь самыми «эффективными» способами разруливать рабочие конфликты, которые встречались на моём опыте. Гарантирую – после применения этих советов ты точно запомнишься всем в офисе. Правда, не факт, что в хорошем смысле…

Читать далее

Типы прокси: как выбрать подходящий инструмент для своей задачи

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

Разберёмся, что именно скрывается под терминами "резидентский", "мобильный", "ISP" и "дата-центровый" прокси, в чём их технические отличия, как реализована маршрутизация и авторизация.

Читать далее

Все почти готово — осталось лишь чуть-чуть доделать

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

Эпохе LLM, обзоров от Gartner и вайбкодинга для MVP проектов от кодинг агентов посвящается. Вспомнил несколько случаев из своего опыта.

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

На следующий день я вышел на новое рабочее место. Первые полдня получал доступы к Bamboo, Confluence, Jira и системе контроля версий, где лежал код проекта. Каково же было мое удивление, когда я наконец увидел исходники проекта, который до меня разрабатывали почти год. Мне до сдачи проекта заказчику и найма команды оставалось меньше месяца…

Читать далее

Как я заменил кучу флагов двумя словарями в Python

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

Я создаю приложение с GUI для сбора и обработки данных с микроконтроллера на Python с помощью PyQt. И вот я наконец-то доделал часть функционала, предназначенного для взаимодействия компьютера с платой STM32, теперь необходимо было сделать интерфейс для обработки данных, в котором легко можно было бы настраивать параметры выполнения программы. Я начал думать, как не вносить в программу кучу флагов с соответствующими if-else конструкциями, и вот, что я придумал.

Читать далее

Оптимизация поисковых систем: баланс между скоростью, релевантностью и масштабируемостью

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

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

Эта статья основана на нашем выступлении на конференции QCon San Francisco 2024, где мы рассмотрели эволюцию подходов к индексированию данных, их извлечению и ранжированию. Для платформ вроде Uber Eats, обрабатывающих сложные запросы на больших объёмах данных, оптимизация поиска — это серьёзный вызов, требующий продвинутых стратегий: индексирования, шардинга и параллельной обработки запросов.

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

Читать далее

Мы 30 лет делали сайты руками, а потом пришла нейросеть

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

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

Так что не судите строго — делюсь тем, что получилось, возможно, многое можно было сделать лучше или правильнее. Буду рад вашим советам!

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

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

Нужно было создать новый каталог для 400+ позиций лабораторного оборудования. Но это не классический интернет‑магазин с корзиной и оплатой, а каталог с формой «запросить цену» — в сфере B2B так часто работают.

Читать далее

Распознавание текста на изображении и общение с распознанным текстом. Paddle OCR + LLM

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

Данная статья описывает процесс создания проложения для распознавания текста на изображении и общения с распознанным текстом. 

В процессе разработки используются:

Язык: Python

Оптическое Распознавание Символов(OCR): Paddle OCR

Площадка для языковой модели: Ollama

Большая языковая модель(LLM): qwen2:7b

Сетевой фреймворк для API: FastAPI

Читать далее

GIMP Script-Fu ООП. Тестирование на «РОМБЕ СМЕРТИ»

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

Библиотека функций к Script-fu

Написание кода на Лисп это тестирование, я не знаю(это не значит что их нет, просто я их действительно не знаю) ни одного языка программирования в котором цикл: написание код - проверка(тестирование) был бы таким коротким. Кстати в Script-fu я работаю через буфер обмена, это не удобно! Там есть возможность работать из Емакс, через сервер Scrip-fu, но я эту возможность не использую(приятно видеть консоль), а с обычной схемой или лиспом, работа в передаче кода заключается в нажатии пары клавиш. Лисперы не пишут многостраничные листинги кода, а затем его тестируют, они пишут функцию, выполняют его в интерпретаторе и сразу тестируют. Всё это благодаря наличию в системе REPL. И всё таки не смотря на это настаёт момент, когда требуются отдельные тесты, которые удобно запустить и проверить консистентное состояние программной системы, а то в процессе такого интенсивного создания-тестирования программы всё равно можно что либо опустить, и какая нибудь функциональность да отвалится.

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

Читать далее

Move-only типы и ключевое слово move в Swift

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

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

Сегодня рассмотрим интересную вещь из из стека Swift 6 — move-only типы, ключевое слово move и всё, что с ними связано.

Читать далее

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

Программа «Hello World» на машинном коде под DOS

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

Как-то раз я послушал следующее интересное выступление (по-немецки): ссылка

В нём разобрано, как написать программу «hello world» для 64-разрядного дистрибутива Linux в шестнадцатеричном редакторе. Ассемблер здесь не используется, программа пишется непосредственно на машинном коде. Правда, в ней есть издержки на использование ELF.

Мне понравилась такая идея, и я решил повторить такой опыт, но немного в иной форме — а именно под 16-разрядной DOS в реальном режиме. У меня должен был получиться файл в формате COM, а не EXE, так как (на данном этапе) меня интересовал не столько формат файла, сколько кодировка инструкций. В вышеупомянутой лекции, если честно, не сообщается почти никаких подробностей о том, как именно перейти от ассемблерного кода к машинному — поскольку в случае разбора этих тем лекция, пожалуй, растянулась бы на несколько часов. Но здесь я всё разберу подробно, и при этом собираюсь пользоваться только документацией lntel, а также дизассемблировать код в целях верификации.

Также мы коротко поговорим о сегментации.

В качестве шестнадцатеричного редактора на этот раз воспользуемся hexedit.

Читать далее

Почему стоит использовать Tagged Unions при разработке на TypeScript

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

Почему стоит использовать Tagged Unions при разработке на TypeScript

👋 Привет! Меня зовут Александр, я работаю фронтенд-разработчиком в компании «МегаФон». Сегодня я хочу поговорить на тему Tagged Unions (размеченных объединений) и объяснить, почему они ваш секретный инструмент для написания надежного TypeScript-кода.

Читать далее

Отечественные Open Source-инструменты для ИИ-разработки

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

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

В контексте искусственного интеллекта Open Source-инструменты включают библиотеки, фреймворки, датасеты, модели и платформы, которые помогают разработчикам создавать, обучать и тестировать ИИ-системы.

Читать далее

Семь смертных грехов IT-резюме. Взгляд рекрутера, отсмотревшего 1 млн+ кандидатов

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

Привет, Хабр. Меня зовут Роман Изотов. Последние 5+ лет я провел «по ту сторону баррикад» — в IT-рекрутинге. За это время через мои руки (и глаза) прошло более миллиона резюме. Да, миллиона. И 95% из них — это тихий ужас.

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

Запомните одну простую истину: рекрутер тратит на первое сканирование вашего резюме от 15 до 30 секунд. У вас нет права на ошибку. За это время он принимает бинарное решение: «мусор» или «может быть».

В этой статье я вскрою 7 самых частых, самых фатальных ошибок, которые я видел тысячи раз. Это те самые «красные флаги», заметив которые, я (и сотни моих коллег) с легким сердцем нажимал кнопку «Отказать».

Готовы посмотреть на свое резюме моими циничными глазами? Поехали.

Читать далее

JEP 511: Импорт модулей в Java 25 — как упростить работу с библиотеками

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

Команда Spring АйО проанализировала JEP 511: импорт модулей. Теперь можно будет одним импортом подключать все пакеты, которые экспортирует модуль. Это сильно упростит работу с большими библиотеками, особенно в прототипах и обучении.

Читать далее

Аннотация Lazy как спасение от циклических зависимостей

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

В прошлом посте команда Spring АйО подробно разобрала, как @Lazy помогает экономить ресурсы и ускорять старт приложения. Но забыли упомянуть ещё один крайне полезный кейс применения этой аннотации — борьбу с циклическими зависимостями.

Читать далее

«Щи: симулятор жестокости» или «Как не надо делать игры»

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

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

Читать далее

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