Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Подменяем Runtime permissions в Android

ПрограммированиеРазработка под Android

Android Fake Permissions

Речь в статье пойдет о такой вещи как Runtime permissions, а именно – о возможности введения в заблуждение конечного пользователя путем демонстрации диалогового окна выдачи разрешения со своим текстом и иконкой поверх системного.

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

Под катом вы найдете пример реализации уязвимости и мою готовую библиотеку

Подробнее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры4.2K
Комментарии 11

Вы всё ещё ловите исключения? Тогда мы к вам

ПрограммированиеJavaScalaAPIC#

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

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

Но с другой стороны, обрабатывать ошибки всегда лениво и напряжно. Поэтому существует много инструментов для облегчения этой задачи. Стандартный механизм обработки ошибок в Java - Exceptions. Я не буду сейчас расписывать скучные описания, как бы отвечая на скучные вопросы со многих собеседований. Скажу лишь, что Исключение - это на мой взгляд, неправильный перевод понятия Exception. Я считаю, что исключение, то есть исключительная ситуация - это про другого представителя летающих монстров, java.lang.Error.

А Exception - это не исключение, это часть правила. Это всегда один из возможных исходов. Я бы перевёл этот класс не иначе как Отклонение. В смысле отклонение от прямого курса. Потому как перехватив это отклонение, можно курс выправить и продолжить работу. А Исключение - это для безответственных разработчиков.

Так вот. Давайте теперь перехватывать эти отклонения. Как можно это сделать?

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

Это вносит неудобства, да. Надо их везде ловить. Как упростить задачу? Обычно советуют тупо оборачивать исключение в java.lang.RuntimeException. Но такой подход чреват тяжёлыми последствиями, когда приложение выходит в релиз и на бой. Я как человек, имеющий ещё и плюсовый бэкграунд, прекрасно знаю, что некоторые ситуации невозможно предугадать даже очень внимательно вглядываясь в код. А потом искать их причины днями, неделями, иногда месяцами. Потому что кто-то в самом начале, в месте возникновения ошибки не объявил о возможности их возникновения.

Отклониться к статье
Всего голосов 22: ↑8 и ↓14 -6
Просмотры8.8K
Комментарии 86

SafetyNet Attestation — описание и реализация проверки на PHP

FunCorpPHPРазработка под AndroidGoogle API
Tutorial

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

После многочасовых поисков и скрупулёзного изучения официальной документации Google решил поделиться полученным опытом. Потому что, кроме официальной документации, я нашел только отрывочные описания частных примеров реализации на разных ЯП. И ни намека на комплексное объяснение особенностей проверки по SafetyNet на сервере.

Статья будет полезна разработчикам, которые хотят подробнее разобраться с технологией верификации устройств по протоколу SafetyNet Attestation. Для изучения описательной части не обязательно знать какой-либо язык программирования. Я сознательно убрал примеры кода, чтобы сфокусироваться именно на алгоритмах проверки. Сам пример реализации на PHP сформулирован в виде подключаемой через composer библиотеки и будет описан ниже.

А в конце статьи — ссылка на разработанную мной библиотеку на PHP, которая обеспечивает полный цикл верификации JWS.

Читать далее
Всего голосов 41: ↑41 и ↓0 +41
Просмотры3.7K
Комментарии 10

Путешествие в unmanaged code: туда и обратно

.NETC#Разработка под LinuxРазработка под Windows
Tutorial

Несмотря на популярность высокоуровневых языков программирования, существует значительное количество областей, в которых вам придется использовать в своем коде неуправляемые реализации библиотек. Это могут быть вызов специфических функций ОС, низкоуровневый доступ к устройствам, необходимость быстродействия в алгоритмах и другие. Под катом я расскажу, с чем можно столкнуться во время путешествия в unmanaged code и что стоит взять с собой.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры4.4K
Комментарии 6

Biscuit-store — еще один взгляд на state-management в JavaScript приложениях

JavaScriptReactJS
Из песочницы

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

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Просмотры1.7K
Комментарии 9

Борьба за жизни переменных. Или как я попытался упростить жизнь Android разработчикам

Разработка под Android
Из песочницы

Идея появилась из проблемы. Проблема появилась из негодования.

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

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

Я ранее слышал про то, что система подчищает ресурсы для чего-то, забивая на свернутые приложения, но когда я немного углубился в это, то очень сильно был огорчен. Именно из этого "негодования" у меня появилась проблема. Как мне сделать это красиво и не так болезненно?

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

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Просмотры3.1K
Комментарии 0

Логирование в телеграм, или история о том, как я сделал питон библиотеку

Python
Из песочницы

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

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Просмотры3.6K
Комментарии 3

FSTB – работа с файлами в Node.js без боли

JavaScriptNode.JSTypeScript

Когда я работаю с файлами в Node.js, меня не оставляет мысль, что я пишу очень много однотипного кода. Создание, чтение и запись, перемещение, удаление, обход файлов и подкаталогов, всё это обрастает неимоверным количеством бойлерплейта, который еще усугубляется странными названиями функций модуля fs. Со всем этим можно жить, но меня не оставляла мысль, что можно сделать удобнее. Хотелось, чтобы такие элементарные вещи, как, например, чтение или запись текста (или json) в файл можно было написать в одну строчку.

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

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Просмотры2.7K
Комментарии 2

Фреймворк Webix Jet глазами новичка. Часть 2. Взаимодействие с интерфейсом

Разработка веб-сайтовJavaScriptПрограммированиеHTML
Tutorial

В предыдущей статье “Фреймворк Webix Jet глазами новичка. Часть 1. Композиция и навигация” мы подробно разобрали создание интерфейса нашего приложения с помощью UI компонентов Webix и распределили полномочия между view-модулями и моделями внутри архитектуры Jet фреймворка. 

В этой статье мы продолжим изучать Jet и библиотеку Webix и реализуем следующее:

- добавим в уже известное вам приложение немного интерактива

- организуем серверные модели с разными подходами к загрузке и сохранению данных.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры1.2K
Комментарии 0

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

МаклаудPythonПрограммированиеСовершенный кодНаучно-популярное


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

Читать дальше →
Всего голосов 42: ↑41 и ↓1 +40
Просмотры11K
Комментарии 20

Webix Datatable. От простой таблицы к сложному приложению

Разработка веб-сайтовJavaScriptПрограммированиеHTML
Tutorial

Эта статья будет интересна для тех, кто привык решать сложные задачи простыми методами. Работа с большими данными, на первый взгляд, может показаться сложной задачей. Но если вы владеете специальными инструментами, то организация и отображение больших наборов данных покажется вам не более чем забавным развлечением. Сегодня мы поговорим об одном из самых неординарных инструментов для работы с данными, который предоставляет нам команда Webix. Речь пойдет о таком простом и одновременно сложном виджете библиотеки Webix UI как DataTable. Давайте разбираться в чем его сила.

Читать далее
Всего голосов 2: ↑1 и ↓1 0
Просмотры2.1K
Комментарии 2