Pull to refresh
27
0
Send message

Оператор Собеля-Фельдмана или Зачем нам так много фильтров

Reading time9 min
Views7.6K

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

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

Читать далее
Total votes 25: ↑25 and ↓0+25
Comments28

Мозговой штурм не работает. Почему его до сих пор используют?

Reading time8 min
Views7.9K

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

Наверняка многие из вас участвовали в мозговом штурме (или его подобии). Интересно, как они проходили? К сожалению, в представлении многих руководителей и тимлидов мозговой штурм чем-то похож на вечернее телевизионное ток-шоу. Каждый участник кричит что-то своё и никто друг друга не слушает. В итоге все расходятся довольными собой, но проблема так и остаётся нерешённой. Много вы видели ток-шоу, которые действительно предложили бы что-то разумное?

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments19

Самые интересные блоги и сайты для C++ программистов

Reading time4 min
Views16K

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

Читать дальше →
Total votes 20: ↑17 and ↓3+20
Comments2

Многозадачность и многопоточность — распространенные заблуждения и недопонимания

Reading time11 min
Views23K

Когда я предложил перевести на русский мою последнюю статью Easy Concurrency with Python Shared Objects на английском, поступило предложение "написать в несколько раз короче и понятнее". Просьба более чем обоснована. Поскольку я уже порядка десяти лет пишу многопоточку и БД, то описываемые мной логические связи выглядели самоочевидно, и я ошибочно расчитывал на аудиторию из трех с половиной человек, которые сидят сейчас где-то в яндексе или гугле. Судя по всему, они там и сидят, но тема им не интересна, поскольку в питоне нет настоящих потоков, а значит для этих людей такого языка программирования не существует. Потому я немножко снижаю планку и делаю общий обзор проблематики параллельных вычислений для людей, которые в них разбираются, но не являются экспертами в области.


Из-за чего весь сыр-бор?

Читать дальше →
Total votes 25: ↑23 and ↓2+29
Comments42

Я устал вручную удалять мобильное приложение с устройства и написал расширение для VS Code

Reading time8 min
Views4.9K

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

Когда я работал над нативными Android-приложениями, меня спасал плагин для Android Studio ADB Idea. Очень удобно через шорткат можно было вызвать окошко с основными ADB командами по типу "Удалить приложение", "Принудительно завершить приложение", "Перезапустить приложение" и т.п.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments2

Самый полный чек-лист для защиты от мошенников

Reading time17 min
Views157K

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

Читать далее
Total votes 117: ↑115 and ↓2+144
Comments169

Особенности работы с POSIX-сигналами

Reading time10 min
Views14K

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

Читать далее
Total votes 64: ↑64 and ↓0+64
Comments18

C#: Автоматизация Android без посредников (adb)

Reading time6 min
Views16K

Часто приходится автоматизировать то или действие, андроид приложения не являются исключениями.Конечно, все в этом случае прибегают к различным фреймворкам - Appium, Detox, UI Automator, Ranorex, но все эти приложения созданы для тестирования, соответственно потребляют больше ресурсов и их скорость оставляет желать лучшего.Однако есть выход - автоматизировать приложения напрямую с adb, для этого я и дописал эту библиотеку. Она ничем не уступает по возможностям этим фреймворкам , но при этом является достаточно простой и легко разворачиваемой на любой машине. Об этой библиотеке и пойдет речь в статье.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments8

Будь строже к себе: как ограничения помогают сделать код лучше

Reading time7 min
Views8.9K

Если вам приходилось задумываться о построении эффективной экосистемы проекта и определении ролей тимлида и разработчика — статья Артема Прозорова из ZeBrains для вас.

Предлагаю вам задуматься над одним вопросом. Но не спешите с ответом, потому что он не так очевиден, как может показаться:

Какая из команд может реализовать более технически стабильный продукт? 

Команда №1: Проектный менеджер, аналитик, тестировщик и несколько разработчиков, у каждого из которых за плечами минимум три года опыта. Все работают в одном офисе, посвящая свое время одному проекту в режиме fulltime.

Команда №2: Один сильный разработчик. Ему помогают множество не знакомых между собой людей из разных часовых поясов. У каждого — свой набор компетенций и уровень опыта. Работой над проектом участники занимаются в свободном режиме, по несколько часов в неделю.

* * *

Ответ на этот вопрос получим к концу статьи.

Читать далее
Total votes 19: ↑14 and ↓5+14
Comments12

Асинхронность в С++20. Доклад в Яндексе

Reading time14 min
Views22K
Привет, это Григорий Демченко из WhatsApp. Мой доклад посвящён использованию сопрограмм в C++20. Я не стал говорить про низкоуровневые примитивы и то, как компилятор поддерживает сопрограммы и преобразовывает соответствующий код. Вместо этого акцент сделан на практическом применении сопрограмм для решения конкретных задач высокопроизводительных масштабируемых систем. Это именно то, ради чего создавались сопрограммы в новом стандарте, и то, с чем разработчик будет иметь дело в процессе проектирования и программирования. Я постарался рассмотреть конкретные примеры и проблемы, с которыми можно столкнуться при использовании полностью асинхронного подхода.

— О чём я сегодня расскажу? Первое — введение в асинхронность. Далее мы рассмотрим примитивы, которые можно использовать в новом стандарте, и интеграцию с планировщиками. Также немаловажным аспектом будет являться работа со старым кодом, если мы пишем новый код с использованием нового подхода. Затем я покажу бонус, достаточно интересный и необычный. И подведём итоги того, что у нас получилось.
Читать дальше →
Total votes 21: ↑20 and ↓1+26
Comments6

Когда использовать mocks в юнит-тестировании

Reading time13 min
Views73K

Эта статья является переводом материала «When to Mock».

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

Ни одна из этих практик не является достаточно хорошей. В этой статье Владимир Хориков покажет, какие зависимости следует мокать, а какие использовать как есть в тестах.

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments6

Создаем новое ключевое слово в C++

Reading time27 min
Views23K

C++ - один из языков, который можно назвать "легендарным". Его история насчитывает несколько десятилетий, принципы программирования на нем революционным образом менялись не раз, а черновик стандарта уже разросся до 1800+ страниц мелкого шрифта.

На C++ есть много хороших библиотек. Но нередко изменения в самом языке делали неактуальными большие куски кода, потому что они становились менее надёжными и быстрыми по сравнению с функционалом в самом языке. Правки в стандарт имеют несоизмеримо более сильное влияние, чем любая библиотека.

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

Создать!
Total votes 64: ↑62 and ↓2+87
Comments43

Использование потоков WebAssembly из C, C++ и Rust

Reading time12 min
Views9.1K


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

В этой статье вы узнаете, как использовать потоки WebAssembly для переноса многопоточных приложений, написанных на языках C, C++ и Rust, в веб-среду.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments20

Отрезок качества

Reading time4 min
Views7.5K

Есть принцип «выбирай любые два понятия из "быстро, качественно и дёшево"». Да, он верен для проектных историй, но не верен для разработки. В разработке, как процессе, нет никакого треугольника качества. Ты можешь делать либо быстро и качественно, либо медленно и плохо. И нет ни одной причины выбирать «медленно и плохо (и дорого)», если только не в силу привычки и неосознанности.

Читать далее
Total votes 29: ↑25 and ↓4+26
Comments15

Приключения в портировании большой C++ кодовой базы на WASI WebAssembly

Reading time6 min
Views4.5K

Привет хакеры, сегодня мы с вами отправимся в путешествие в мир индустриального C++ и Webassembly. Недавно мне довелось поучаствовать в портировании такой сложной и большой кодовой базы на C/C++ как SpiderMonkey на WASI платформу и я хочу поделиться с вами этим опытом.

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments2

Ассемблер RISC-V для начинающих

Reading time12 min
Views37K

Если вы не знаете ни одного ассемблера, или, возможно, не имеете большого опыта кодинга как такового, то ассемблер RISC-V может быть одним из лучших вариантов для того, чтобы погрузиться в эту тему. Конечно, материалов по ассемблеру x86 гораздо больше. Больше людей, которые могут в этом помочь. Но x86 - это чудовище, имеющее более 1500 различных инструкций.

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

Если вам необходим хороший старт, и вы не знаете ничего о микропроцессорах, вы можете прочесть мою статью "Как работает современный микропроцессор?" (How Does a Modern Microprocessor Work?).

Если вы хотите чего-нибудь простого и весёлого, можете начать с различных игр, в основе которых лежит программирование на ассемблере: Learn Assembly Programming the Fun Way.

Другим может понравиться ретропроцессор, такой, как 6502, использовавшийся в Commodore 64. Но проблема в том, что он окончательно устарел. При его разработке не учитывались реалии сегодняшнего дня.

Большой плюс RISC-V состоит в том, что он обладает современным и простым набором команд, спроектированным с учётом современных требований, таких как медленный доступ к памяти, использование предсказателя переходов, суперскалярного out-of-order выполнения команд и т.д.

Если вам интересно всё это, прочтите: Why Is Apple’s M1 Chip So Fast?

Перед тем, как мы начнём, можете распечатать это: James Zhu RISC-V Reference.

Читать далее
Total votes 35: ↑34 and ↓1+50
Comments32

Gradle Plugin: Что, зачем и как?

Reading time15 min
Views27K

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

Под катом статьи проведём тур по Gradle-плагинам, разберёмся, для чего вы можете писать кастомные плагины уже сейчас, проникнемся процессом разработки на примере реализации плагина для Kotlin-кодогенерации и научимся обходить некоторые Gradle-грабли. 

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

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments3

Проекты в Gradle 7: как не зависеть от зависимостей

Reading time4 min
Views14K

Привет! Меня зовут Ксения Кайшева, я пишу приложения под Android в компании 65apps. Сегодня расскажу о новой возможности, которая позволяет централизованно описывать зависимости на проектах с системой сборки Gradle.

Читать далее
Total votes 11: ↑8 and ↓3+9
Comments10

Как компилятор C++ находит правильную функцию

Reading time13 min
Views15K

Увлекательный пересказ того, как компилятор C++ находит правильную функцию, которую надо вызвать, когда в коде вызывается функция. По сути, это просто сжатое объяснение алгоритма, уже описанного на cppreference.com, который, в свою очередь, является сокращенной версией стандарта C++.

Читать дальше →
Total votes 22: ↑19 and ↓3+21
Comments3

Как использовать облачную ферму устройств Huawei для тестирования и отладки в Android Studio

Reading time2 min
Views6.3K

Как ни странно, мало кто знает о том, что у Huawei есть ферма устройств в облаке, которую можно использовать для отладки и тестирования. И речь идет не об отладке через веб-интерфейс, что является более-менее известной фичёй консоли разработчика Huawei и нередко используется разработчиками. Мы же поговорим об отладке непосредственно из студии, с возможностью пользоваться ADB.

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

Следующим шагом открываем студию и устанавливаем плагин HMS Toolkit из магазин плагинов в самой студии (File -> Settings -> Plugins).

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments3

Information

Rating
Does not participate
Location
Сергиев Посад, Москва и Московская обл., Россия
Registered
Activity