Как стать автором
Поиск
Написать публикацию
Обновить
1123.59

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

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

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

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

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


Множество (Set) — структура данных, которая позволяет достаточно быстро (в зависимости от реализации) применить операции add, erase и is_in_set. Но иногда этого не достаточно: например, невозможно перебрать все элементы в порядке возрастания, получить следующий / предыдущий по величине или быстро узнать, сколько элементов меньше данного есть в множестве. В таких случаях приходится использовать Упорядоченное множество (ordered_set). О том, как оно работает, и какие реализации есть для питона — далее.

Читать дальше →

И еще несколько полезных библиотек для Python (с примерами)

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

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

Хотелось бы рассмотреть несколько интересных на мой взгляд библиотек.

Ознакомиться

Почему Kotlin лучше Java?

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

Это ответ на переведенную публикацию «Почему Kotlin хуже, чем Java?». Поскольку исходная аргументация опирается всего на два примера, то не теряя времени пройдем по этим «недостаткам» Kotlin.

Читать далее

Практическое руководство по именованию классов, функций и переменных

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

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

Читать далее

3D teeth instance segmentation. В темноте, но не один

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

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

Читать далее

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

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


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

Читать дальше →

Транзакции. Часть 2. Конспект книги «Designing Data-Intensive Applications»

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

Эта статья является конспектом книги «Designing Data-Intensive Applications».

В предыдущем конспекте мы рассмотрели «грязную» операцию чтения – это разновидность состояния гонки, возникающая при попытке конкурентной записи в одни объекты различными транзакциями. К этой категории проблем также относится ситуация потери обновления.

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

Читать далее

Легенды и мифы геофизики

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

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



Видите взаимосвязь ортофотоснимка и рельефа? Если да, то вы или геолог или можете им стать: корреляция компонентов (разложения в пространственный спектр) составляет 41% для длины волны 20 м, 58% для 50 м и 99% для 300 м (Jupyter Python ноутбук с вычислениями доступен по ссылкам ниже). Большинство геофизиков клянутся, что «это у вас спектры порченые» (записано с натуры), игнорируя и геофизику и прилагаемые вычисления и ссылки на публикации.

Читать дальше →

Старт в музыкальном программировании — для начинающих достаточно и простого браузера

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

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

Читать далее

Мета-программирование атрибутов для сериализации

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

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

Читать далее

Quantization Aware Training. Или как правильно использовать fp16 inference в TensorRT

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

Low-precision inference в TensorRT сегодня - мастхэв, бест практис и прочие иностранные. Сконвертить из TensorFlow легко, запустить легко, использовать fp16 легко. Да и КПД выше, чем у pruning или distillation. На первый взгляд всё работает идеально. Но на самом деле всё ли так гладко? Рассказываем, как мы в TrafficData споткнулись об fp16, встали и написали статью.

Читать далее

Мы работаем во тьме: кодинг «глазами» незрячих программистов

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


We work in the dark — we do what we can — we give what we have. Our doubt is our passion and our passion is our task. The rest is the madness of art.

Henry James, «The Middle Years»

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

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

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

Клавиатура, наушники и ничего лишнего


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


Тука Ояла в офисе Vincit, расположенном в Тампере
Читать дальше →

Архитектура кода программного обеспечения: декорируем стратегией. Рассказ в 10 эпизодах, основанный на реальных событиях

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

Разработка корпоративных приложений со сложной бизнес-логикой всегда несет за собой немалые затраты. Причём львиная доля затрат приходится не на саму разработку, а на поддержку кода приложения: добавление нового функционала, поиск и исправление допущенных ошибок, рефакторинг и т.п. Мне как разработчику ПО всегда хотелось найти “серебряную пулю” для вопросов, возникающих при конструировании кода приложений, как написать потенциально сложное приложение, чтобы его было поддерживать как можно легче и дешевле. В этой статье хочу поделиться практическими знаниями о проектировании архитектуры кода программного обеспечения, полученными из опыта.

Читать далее

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

Три паттерна для улучшения работы с автотестами

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

Меня зовут Владислав Романенко, я старший iOS QA Engineer в Badoo и Bumble. Несколько лет назад мы начали активнее использовать автотесты в процессе разработки, но столкнулись с несколькими трудностями на этом пути. 

Логичный вопрос: почему мы занялись автоматизацией тестирования? Ответ кроется в еженедельном выпуске новых версий наших мобильных приложений. QA отделу приходится тестировать новые фичи, их интеграцию  в приложение и заниматься регрессионным тестированием. За неделю нужно проводить как минимум одно комплексное регрессионное тестирование, что довольно утомительно. Все эти трудности мы преодолели с помощью автоматизации, которая помогла нам выпускать новые версии быстрее и без потери качества. Подробнее об автоматизации мобильного тестирования — в докладе наших коллег

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

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

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

Грязные трюки видеоигр

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

Бретт Дувилл, LucasArts

В начале 2002 года мы подготавливали Star Wars: Jedi Starfighter к передаче Sony для проверки. У нас оставался один пустячный баг TCR: при загрузке катсцен после миссий отключалась работа аналогового стика контроллера, что приводило и к отключению красного индикатора в центре контроллера. Этот баг проявился, когда мы обновились до версии библиотеки, которую требовала Sony, а программист, который писал и код загрузки видеороликов, и логику процессора ввода-вывода для контроллера, уволился из LucasArts за несколько месяцев до этого.

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

Существует старое выражение: если ты не понимаешь причины, то нельзя утверждать, что ты устранил баг. В данном случае у нас оставалось два-три дня до даты передачи игры Sony, и опоздание оказалось бы серьёзной проблемой. Поэтому я изменил все цвета сброса экрана на чёрный, пометил баг как устранённый и умыл руки. Мы выпустили игру вовремя, и никакие баги TCR больше не появлялись.

Читать далее

OpenCV в Python: Часть 1 — Работа с изображениями и видео

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

Добро пожаловать! Перед вами первая статья из серии OpenCV в Python, которая, как вы уже догадались по названию, посвящена тому, как научиться комфортно работать в OpenCV.

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

Не будем терять времени, начнем!

Читать далее

Google I/O: что нового представили Android-разработчикам

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

Перевод официального анонса с комментариями от Android Developer Surf Олега Жило.

Как Android разработчики мы стремимся создавать опыт, который будет радовать людей по всему миру. Работа разработчика не становится легче: сейчас, когда люди зависят от ваших приложений больше, чем когда-либо, их ожидания значительно выросли. Сегодня в рамках Google I/O мы рассказали о том, как мы помогаем разработчикам в создании красивых и качественных приложений. Мы представили Android 12, который получил масштабное обновление дизайна интерфейса, показали Jetpack, Jetpack Compose, Android Studio и Kotlin. Также мы помогаем увеличить охват ваших приложений будь то поддержка носимых устройств или устройств с большим экраном. Вы можете посмотреть полную версию Developer Keynote, но в этой статье мы расскажем обо всех ключевых пунктах конференции.

Читать далее

Go: Управление обработкой множественных ошибок

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

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

Читать далее

Как протестировать блокноты Jupyter с помощью pytest и nbmake

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

Файлы блокнотов Jupyter, в смысле количества одного из самых быстрорастущих типов файлов на Github, предоставляют простой интерфейс для итераций при решении визуальных задач, будь то анализ наборов данных или написание документов с большим объёмом кода. Однако популярность блокнотов Jupyter сопровождается проблемами: в репозитории накапливается большое количество файлов ipynb, многие из которых находятся в нерабочем состоянии. В результате другим людям трудно повторно запустить или даже понять ваши блокноты. В этом руководстве рассказывается, как для автоматизации сквозного (end-to-end) тестирования блокнотов можно воспользоваться плагином pytest nbmake.

К старту флагманского курса о Data Science — области, в которой блокноты Jupyter незаменимы — делимся переводом статьи из блога CI Semaphore о том, как при помощи Semaphore проверить, что ваши блокноты Jupyter находятся в рабочем состоянии и для этого больше не запускать блокноты вручную.

Читать далее

Парное программирование. Быть или не быть?

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

Привет. Меня зовут Вадим Бараненко. С украинским офисом EPAM я сотрудничаю в роли архитектора решений. И в этом материале я хотел бы поделиться своими взглядами и опытом в такой интересной теме, как парное программирование (далее — ПП).

С ПП я впервые познакомился около 9 лет назад и практиковал этот подход на разных проектах — часть в харьковском офисе EPAM, часть на территории заказчика в Англии. И этот опыт показался мне интересным и полезным.

Читать далее

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