Page 3 of 11

Как подделать запрос с использованием CSRF токена для Instagram

Если вы увлекаетесь разработкой для Android и когда-то вам пришла в голову идея написать свое приложения для Instagram, то вы наверняка сталкивались с тем, что API, которое эта социальная сеть предоставляет своим разработчикам, отличается крайне скупыми ресурсами, и используя их сложно сделать приложение, от которого вообще возможна хоть какая-то польза. Получаемая информация от сервиса в основном крутится вокруг аккаунта, под которым произошла авторизация — последние посты, список тех, кто лайкнул пост, информация об отношениях между пользователями и проч., но никаких полезных действий — лайков, поисков по тегам и проч. произвести не получится.

С одной стороны, все логично и может быть легко объяснено. Это просто способ защиты соцсети от массовых накруток аккаунтов, от автоматизации процессов постинга и проч. Принимая это во внимание, можно предположить, что Instagram позиционирует себя как социальная сеть, все виды взаимодействия с которой могут быть произведены только вручную. К сожалению, это ограничивает многих, ведь помимо «незаконных» действий с инстаграмом можно было бы разрабатывать альтернативные клиенты для этой соцсети, ведь давно уже не секрет, что официальный (и единственный) клиент обладает рядом дико раздражающих минусов (плохо реализованный Material Design, например, или отсутствие ландшафтной ориентации на Android, или полное отсутствие версии для iPad и проч.).

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

Continue reading

Тормоза на Nexus 7 на Cyanogenmod

Столкнулся с крайне неприятной ситуацией — старичок Nexus 7 2013, на который накатил Cyanogenmod 13 через неделю стал неистово тормозить. Причем это проявлялось вообще во всем — неважно какое приложение открывалось, что хранится в списке последних приложений — результат всегда был один — гарантированный тормоз.

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

Continue reading

Качество фото в Instagram

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

Получить данные по посту не составляет никаких сложностей, если что, для чистоты эксперимента можете попробовать сами: все что нужно — это Firefox, Firebug, сервисы для симпатичного отображения json и немного вашего времени. Итак, поехали.

Для иллюстрации текущей картины я взял одну из своих последних фото в инстаграме.

Continue reading

Periodic JobScheduler в Android Nougat

Буквально в одну строку — начиная с Nougat нужно пересмотреть использование периодических задач с использованием JobScheduler и вот почему: минимальное время повторения составляет 15 минут!

То есть если у вас есть необходимость в фоновом вызове некоторого кода чаще (например, для обновления UI виджете), придется отказаться от вызова setPeriodic.

Таким образом в моем рабочем проекте уже 3 (ТРИ!) имплементации для фоновых повторяющихся задач — для старых версий Android, от Lollipop до Android M, и дальше.

Связано это с оптимизацией работы батареи, правда на спинах разработчиков.

 

Кратко: Nexus 7, Nougat и Google Apps

Решил наконец накатить Nougat на мой (по меркам Google — уже старенький) Nexus 7 2013. Только и единственно на Cyanogenmod 14.1, который как раз вышел (и как раз сегодня выкатил ночное обновление).

Установил. Нет Google сервисов с приложениями. Пытаюсь накатить GApps разных сборок — от Stock до нано-пиков и ничего. В ответ лишь получаю бесявую ошибку 70, которая означает, что в системном разделе не хватает места (stock весит 500 c лишним мегабайт, самая мелкая — pico — чуть больше сотки).

Решил копнуть в сторону recovery. Поставить TWRP через fastboot / adb у меня не получилось. Получилось однако через установку apk (впервые столкнулся с таким способом, раньше все в терминале прокатывало. Перезагрузился в Recovery, начал через adb sideload накатывать gapps, и вдруг получаю ошибку, в которой говорится, что я пытаюсь установить gapps версии 7.1, а у меня установлен Android 6.0.

Во дела…

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

Удивлен. Перезагрузил. Дальше белых букв, которые складываются в слово Google я ничего не увидел. Ладно, снова открываю TWRP и снова накатываю прошивку Nougat. Потом без проблем устанавливаются gapps и вуаля — немного танцев с бубном всегда выручают.

Теперь у меня есть Nexus 7 2013 с установленной нугой и рабочими (кажется) Google apps.

Добавить символ в конец EditText (как вариант)

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

Итак (как в школьных задачах по геометрии), дано — есть EditText, в который будут добавляться только проценты (в виде чисел, естественно). Чтобы сделать интерфейс чуть более понятным для пользователя, нужно добавить знак процента в конец поля. Можно немного погородить огород с помощью OnTextChangeListener, но я против такого подхода, нужно мыслить более системно.

Continue reading

How to share story on Facebook on Android

Привет всем!

Facebook  прекращает поддержку Graph API v2.1 30 октября 2016 года, а это значит, что некоторые проекты, которые работают на этих механизмах, требуется переписать.

Несмотря на то, что лично я часто ругаю Facebook за крайне запутанный способ ведения документации (и вообще все, там абсолютно все запутано!), он предоставляет довольный мощный инструмент для всего, который порой, правда выглядит как наведения пушки на воробья.

В одном из проектов мне пришлось переписать полностью класс по работе с Facebook — начиная от авторизации (как мы помним, класс по работе с сессиями Session канул в лету), заканчивая шарингом историй. И если с первым пунктом никаких проблем особенно не возникло (достаточно просто следовать документации и у вас все получится), то со вторым пришлось немного повозиться.

Continue reading

Fitness Challenge. История создания очередного приложения для фитнеса

Начало

Однажды я задумался о плюсах и минусах работы на долгоиграющих проектах. Один из таких проектов (клиент для Reddit) у меня длится уже пятый год, и довольно успешно: есть готовые наработки, есть большая аудитория, фидбеки от которых приходят довольно активно, так что считай большая база тестировщиков у тебя имеется и помимо штатных тестировщиков. При всем этом фронт работ уже не так высок, как раньше — новых фич добавляется немного, все баги уже лечены перелечены… и вот тут приходит время перейти к разговору о минусах.

А главным минусом я вдруг посчитал тот факт, что постоянно появляется в разработке так много интересного, что хотелось бы не только пощупать, но и куда-нибудь внедрить, а у тебя — тот самый проект, куда вклинивать что-то новое немного страшновато (все же помнят лозунг “Не трогай то, что работает”?), да и не очень нужно (менеджеры как правило не большие любители выделять время разработчиков под такие нужды). Но, минус на минус всегда дает плюс, так что я выгадал время, почитал что самое трендовое и вкусное на Android Weekly и сел писать план. Что я хочу изучить, ну или как-то так, название плану я не придумал, если честно.

Continue reading

BearFace For Selfie. Итоговое видео

Что для этого потребовалось?

  1. Около месяца разработки. Причем все шло более менее спокойно, пока не выложил на Google Play. И хотя количество скачиваний стремилось к нулю, меня ужалило находить и исправлять ошибки как можно больше и оперативнее. В итоге сорвался немного(((
  2. Чуть менее пяти сотен фотографий за чуть менее чем два года. Да, черт возьми, я люблю делать селфи!
    К слову, импорта было целых два — сначала с Dropbox на телефон, потом с телефона в приложение. Заняло это довольно много времени. Не скажу что я проверял выполнения ЧАСАМИ, однако сидеть и залипать в прогресс на телефоне не отвлекаясь ни на что — не стоит.
  3. Порядка пяти минут на создание и компиляцию. Если честно, не помню какая в этом ролике частота кадров. 4 или 10 или 20, точно не скажу.

Почему вам надо установить это приложение прямо сейчас?

  1. Оно бесплатно
  2. Можно не заморачиваясь на поиск каких-то сервисов создать таймлапс ролик из снимков абсолютно любого существа, у которого, по мнению FaceDetection library от Google, есть лицо. И да, это не волшебник в голубом вертолете, и иногда приложение может посчитать, что на снимке никого нет. Такое тоже бывает.
  3. Это немного организует. Какого черта, чувак, ты делаешь селфи каждый день, просто чтобы набить память своего телефона (и немного облака от предпочитаемого тобой поставщика — гугла, яндекса или майлру)? Пусть будет хоть небольшая польза в виде бОльшего наглаживания своего эго =)

Вопросы.

  1. Нужно ли соединение с интернетом для работы?
    Нет. Это не призма, тут нейронные сети не используются. Все волшебство происходит внутри твоего телефона
  2. Что делать, если какая-то ошибка появляется?
    Ну, во первых, не нужно мчаться в Google Play и ставить низкие оценки. Мы все люди-человеки, может лучше попытаться связаться со мной? Хотя честно говоря, если интернет у вас включен, я узнаю о вашей ошибке.
  3. При импорте папки не все фото были добавлены, почему?
    Тут такая штука. Ваше лицо вырезается из фотографии (прототипа) и по этому шаблону сравнивается каждая другая фотография. Так вот, если ваше лицо не умещается в нужный прямоугольник, то тут ничего приложение поделать не может. Да и никто не может. Поэтому такие фотографии игнорируются.

Скачать  BearFace For Selfies можно на Google Play

Паттерны проектирования: строитель

С паттерном «Строитель» (хотя лично я никогда его так не называю — для меня он Builder) знакомы все, кто хоть немного продвинулся в изучении уроков на startandroid или других подобных (Александр  Климов, например). Лично я впервые с ним столкнулся в незапамятно далеких временах, когда изучал AlertDialog. Думаю, не я один такой.

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

Итак, мой код изначально выглядел следующим образом
Continue reading