В статье рассказываю о разработанном Desktop приложении для Windows для того, чтобы поделиться им со всеми желающими и получить обратную связь.
Программирование *
Искусство создания компьютерных программ
Новости
Нейросеть для генерации текста
Как я и ChatGPT писали текстовый генератор. Есть несколько изюминок
Модель нейросети больше, чем предложил чат-бот и она обучается нестандартным способом.
Все числа равны, но некоторые равнее. Как в Python сравниваются Int и Float
Ещё одна причуда Python, исследование её подноготной и попытка понять, почему так случается.
Недавно в сети X был популярен этот твит (см. скриншот), и я обратил внимание. Это очередной сюрприз в Python, связанный с характерными для него уникальными деталями реализации.
Тутор: как нажать на кнопку. Продвинутые техники работы с веб-элементами для Selenium
Привет!)
Возникали ситуации, когда стандартных методов поиска веб-элементов не хватало для полноценной автоматизации? То кнопка не нажимается, то элемент перекрывается, то не подгружается. У всего этого есть разные причины и самые разные решения.
В этой статье как раз таки рассмотрим некоторые из таких проблем.
Для тех кому не интересна база
Истории
Как избежать когнитивной перегрузки: способы оптимизации кода для разработчиков
По мнению Артема Закируллина*, одна из фундаментальных проблем, с которой сталкиваются разработчики при анализе кода – высокая когнитивная нагрузка. Это не абстрактное, а реальное ограничение возможностей, которое стоит времени и денег. На чтение и понимание кода, тратится больше времени, чем на его написание. Поэтому, разработчику нужно постоянно задаваться вопросом: не пишет ли он код, чтение которого создает чрезмерную когнитивную нагрузку?
Подробнее о том, с какими проблемами от высокой когнитивной нагрузки сталкиваются разработчики и какие решения помогут упростить понимание кода для последующей работы с ним читайте под катом.
*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.
Прогнозируем движение льда в Арктике с помощью фреймворка автоматически собираемых сверток
Привет! Меня зовут Андрей, я студент ИТМО. В вузе есть NSS-лаборатория, в которой создают AutoML-решения и моделируют природные процессы, например, прогнозируют концентрацию и толщину льда в Арктике. Но выводы и результаты таких исследований могут жить не только в кровавом энтерпрайзе.
В этой статье я покажу, как сделать свой первый ML-проект, используя только свертки CNN-моделей. И сделаю это на примере небольшой библиотеки, которую я написал как раз в рамках вузовской практики в лаборатории.
Как создать волшебника в Django: многошаговые формы
Сегодня мы поговорим о магии, но не той, что преподают в Хогвартсе. Речь пойдет о создании волшебника, точнее многошагового мастера форм в Django, который позволяет пользователю шаг за шагом продвигаться к желаемому результату. Эта статья расскажет, как использовать django-formtools
для реализации волшебства на вашем сайте.
А причем тут магия? Узнаете чуть позже.
Rust: за пределами синтаксиса. Обретение просветления в неожиданных местах
Я ненавижу C++. Обычно мне нравится программировать, но каждый проект на C++, за который я брался, казался мне утомительной рутиной. В январе 2023 года я решил изучить Rust, чтобы иметь возможность сказать, что знаю язык системного программирования, который мне действительно хотелось бы использовать.
Первая стабильная версия Rust вышла в 2015 году, и с тех пор, начиная с 2016 года, он ежегодно признается самым любимым языком в ежегодном опросе разработчиков на Stack Overflow (теперь, в 2023 году, это называется "Востребованный"). Почему же разработчики, попробовав Rust, не могут перестать его использовать? В мире разрекламированных преемников C/C++ Rust, похоже, выходит на первое место. Как получилось, что язык, который появился на основной сцене всего в прошлом десятилетии, стал таким популярным?
Подготовка к техническому собеседованию Senior/Team Lead backend
Недавно появились мысли походить на собеседования чем я успешно занялся. Если конкретно - смотрел лидовскую/сеньерскую позиции на Python и Golang(но статья может пригодиться backend разработчикам в целом). Не ставлю целью статьи объять все не объятное и дать какие-то гарантии. Я лишь зафиксирую данные для себя на будущее.
Вообще ходить на собеседования неплохой навык - в моем случае удается неплохо прокачать технические скилы и узнать запросы рынка на текущий момент(ведь может случиться так, что твои навыки перестанут быть актуальными).
Сразу сделаю пометку, что некоторые навыки/ресурсы специфичны(по типу нарешивания Leetcode), но отталкиваемся от текущих реалий рынка.
Neuralink Илона Маска не единственный. Как появились нейроимпланты, есть ли у них будущее и при чем тут программирование
В конце февраля этого года Илон Маск заявил, что первое испытание чипа Neuralink на человеке проходит успешно. Пациент чувствует себя хорошо, он уже перемещает указатель мыши силой мысли и постепенно учится делать клики. Скоро он сможет листать Хабр, не пошевелив ни единой мышцей своего тела.
Между холиваром и оверинжинирингом: что, если разработчик не доверяет тестам тестировщика
Кто-то после «а докажи, что это все действительно работает» или «а как ты проверял?» звереет и начинает открыто ругаться с коллегами — что ж, устраивать холивары, конечно, интересно, но бесполезно. Кто-то действительно начинает тратить ресурсы на воспроизведение бага. Однако можно выстроить такой процесс коммуникации, в котором разработчик доверяет результатам команды тестирования и даже иногда сам дополняет тесты, при этом не скатываясь в оверинжиниринг.
Меня зовут Илья Колесов, я — Senior SDET (Software Development Engineer in Test) в команде KasperskyOS Automotive & Embedded Quality Control «Лаборатории Касперского» и занимаюсь разработкой автоматизированных тестов на стыке embedded- и desktop-систем. В этой сфере я прошел весь путь с нуля до готовых решений. И в этой статье расскажу о взаимодействии с разработкой через автоматизацию тестирования — поделюсь своим опытом того, как удается преодолеть недоверие и сделать коммуникации более эффективными.
С Python на Go и обратно: мой опыт
Привет! Меня зовут Денис, я ведущий Golang-разработчик в МТС Диджитал. Еще год назад я работал экспертом по запуску новых сервисов и услуг в Корпоративном центре МТС и параллельно заканчивал курс «Продвинутый Go‑разработчик» от Практикума.
В этой статье я расскажу, как начал программировать на Python и зачем мне понадобился Go, как и чему я учился и почему теперь посматриваю на Rust.
Почему я отказался от разработки игр на Rust, часть 4
Dynamic borrow checking вызывает неожиданные вылеты после рефакторинга
В процессе написания статьи я обнаружил ещё один случай вылета нашей игры из-за пересекающегося World::query_mut
. Я работаю с hecs
уже около двух лет, такие проблемы — это не тривиальные «ой, я случайно сделал вложенными два запроса», с которыми сталкиваешься, только начав работать с библиотекой. Скорее, это ситуация, когда одна часть кода, находящаяся на верхнем уровне, запускает выполняющую что-то систему, а затем независимая часть кода делает что-то простое с ECS где-то глубоко внизу; после крупномасштабного рефакторинга они неожиданно оказываются пересекающимися.
Такое у меня случается не впервые; обычно советуют такое решение: «твой код просто плохо структурирован, поэтому ты сталкиваешься с такими проблемами; необходимо его отрефакторить и спроектировать правильно». Спорить с такими аргументами довольно сложно, потому что по сути своей они правдивы — это происходит, потому что какие-то части кодовой базы спроектированы неоптимально. Проблема в том. что это ещё один случай, когда Rust вынуждает делать рефакторинг там, где бы этого не требовал никакой другой язык. Пересекающиеся архетипы — не всегда преступление, и ECS-решения не на основе Rust (например, flecs) вполне их допускают.
Но эта проблема возникает не только в ECS. У нас она много раз возникала при использовании RefCell<T>
, когда два .borrow_mut()
создают пересечение и вызывают неожиданный вылет.
Дело в том, что это не всегда вызвано «плохим кодом». Люди говорят, что обойти эту проблему можно, «выполняя заимствование на кратчайшее время», но за это приходится расплачиваться. Очевидно, что это тоже зависит от правильного структурирования кода, но, как мы уже определили, геймдев — это не разработка серверов, а код в нём не всегда организуется оптимальным образом. Иногда в коде может быть цикл, которому нужно использовать что-то из RefCell
, и бывает очень логично расширить заимствование на весь цикл, а не заимствовать только там, где это необходимо. Если цикл достаточно большой и вызывает систему, которой та же ячейка может понадобиться где-то ещё (обычно для условной логики), то это способно сразу создать проблему. Кто-то снова может сказать «просто используй косвенность и выполняй условную логику через событие», но в таком случае мы снова идём на компромисс: геймплейная логика не будет двадцатью строками понятного читаемого кода, а окажется разбросанной по всей кодовой базе.
Ближайшие события
Обзор новых Open Source LLM. Или как локально запустить аналог ChatGPT
На прошедшей неделе вышло сразу несколько новых Open Source LLM. Разбираемся, что в них особенного, а также как и зачем их запускать локально.
Попалась тут задачка на поиск совпадений в строках (адреса)…
В рамках работ по "автоматизации процессов комплаенс-контроля" есть тема по поиску и фиксации совпадений по разным признакам между данными клиентов и данными "субъектов списков Росфинмониторинга" (разного рода террористы-экстремисты).
В данном случае - совпадения по адресам. Но не просто "адрес клиента равен адресу субъекта" - это было бы слишком просто, а "все уникальные элементы нормализованного адреса субъекта входят в адрес клиента" (но не наоборот). Порядок следования и наличие повторений эного элемента в адресе не играют роли.
Нормализация адреса - приведение его к верхнему регистру, удаление лишних пробелов и удаление всяких "город", "г.", "улица", "ул." и т.п. Т.е. "Российская Федерация, г.Мухосранск, ул.Коммунистический тупик, д.13, кв.666" нормализуется в "МУХОСРАНСК КОММУНИСТИЧЕСКИЙ ТУПИК 13 666". "Элементом" адреса является отдельное слово (разделенное пробелами).
Дабы облегчить себе жизнь, есть т.н. "витрины адресов" - три таблицы. В первой содержится идентификатор клиента/субъекта + идентификатор адреса (для субъектов есть еще т.н. "ключевое слово" - элемент адреса субъекта, который реже всего встречается в витрине адресов клиентов). Во второй - набор связей адрес-элемент - идентификатор адреса + идентификатор элемента + номер элемента в строке адреса. И в третьей - список элементов - элемент + идентификатор элемента. Т.о. имеем две "витрины" - адреса клиентов и адреса субъектов.
На промсреде витрина адресов клиентов содержит порядка 96млн адресов. Витрина адресов субъектов - порядка 8тыс адресов. Сравнить надо всех со всеми - 768млрд комбинаций где-то...
Масштабирование глубокого обучения с помощью Horovod и Kubernetes
Horovod — это фреймворк для распределенного глубокого обучения, изначально разработанный в Uber. Он позволяет масштабировать обучение моделей на сотни и тысячи GPU, сокращая время тренировки с недель до часов. Horovod поддерживает такие фреймворки, как TensorFlow, Keras, PyTorch и Apache MXNet, и легко интегрируется с существующими кодовыми базами, требуя минимум изменений.
В статье как раз и пойдет речь о том, как масштабировать модельки с помощью Horovod и Kubernetes.
Собственные проекты, углубленная практика алгоритмов и другое: поднимаем навыки программирования на новый уровень
Неважно, новичок ли вы, отлаживающий вашу первую программу «Hello World», или опытный инженер, — у каждого из нас всегда есть возможность улучшить свои навыки. Александр Шелютин, Data Architect в KarmaHQ, расскажет о разнице между тем, как просто заставить что-то работать, и написанием действительно хорошего кода.
Go напишем шахматный сервер? Часть вторая — структуры, интерфейсы и методы
В предыдущей части были сформулированы общие для всех фигур свойства и основные алгоритмы, которые позволят нам анализировать ситуацию на доске. Вот только как всё это реализовать в коде?
Amplicode: учим IDE говорить на языке фреймворка
Вы когда-нибудь задумывались, как много кода, который мы пишем, предназначено именно для решения поставленных задач? Казалось бы, странный вопрос: зачем писать код, который не нужен? Но давайте подумаем, ставят ли разработчику бизнес-задачу написать скрипты миграции? Или подключить Kafka? А может быть, написать тесты? Настроить annotation processor? Можно утверждать, что большая часть кода, который мы пишем ежедневно, обслуживает другой код, который решает бизнес-задачи. Демаркационную линию между ними провести очень сложно. Да и нужно ли?
Сегодня мы хотим представить вам наш новый продукт - Amplicode. Это целая коллекция инструментов, работающих на основе IntelliJ IDEA Community, Ultimate и VS Code. Amplicode учит вашу IDE говорить и думать на языке библиотек и фреймворков – Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct, StoryBook, ReactAdmin. Все эти инструменты объединены общими принципами, что гарантирует быстрое погружение и удобную работу, несмотря на обилие функций. В результате вы пишете «обслуживающий» код быстрее, эффективнее и качественнее. Как это работает? Расскажем под катом.
Туториал по Tokio. 2/2
Hello world!
Представляю вашему вниманию вторую часть туториала по Tokio.
Tokio — это асинхронная среда выполнения (runtime) кода Rust. Она предоставляет строительные блоки, необходимые для разработки сетевых приложений любого размера.
Вклад авторов
alizar 4434.2olegchir 3450.6ru_vds 3299.2haqreu 2916.0tangro 2672.2nmivan 2585.0MaxRokatansky 2424.4kesn 2353.0DmitrySpb79 2296.0grigoryvp 2212.2