Tagdevelopment

Laravel collections: изменить атрибут у элементов

Collections — это отличный инструмент для работы с коллекцией каких-либо данных (это может быть результат выборки Eloquent элементов, или массив объектов). Лично я его активно использовал для создания пагинации, а сегодня открыл для себя еще способ использования.

Итак, проблема заключалась в следующем: я получал из базы список дефолтных цен для товаров (таблица prices), и одновременно получал список измененных цен для них же в рамках конкретных акций. В силу построения архитектуры, я не мог получить эти данные через один SQL запрос (в моем случае — с помощью Eloquent Query Builder, если точнее). Отображать же пользователю нужно актуальные цены, а не дефолтные, поэтому я использовал получание этих значений через отдельный массив, ключом которого был guid цен.

Однако использование дополнительных массивов не «есть хорошо», поэтому мне стало интересно, есть ли в Laravel collections способ сделать код красивее. И оказалось, что решение есть!

Где «prices» — это стандартные цены (название, обычная цена и проч), а массив «currentPrices» — это актуальные цены. В blade шаблоне мне не приходится искать массив по ключу и обрабатывать ошибку если ключ не найден, теперь это делается по уму в контроллере.
 

Instant Run в Android Studio: медленно, а не быстро

Вообще на словах это офигенная фишка — проверяются локальные изменения, и заливаются только они, а не перекомпилируется весь проект. Однако на деле, лично для меня, это усложнило процесс разработки. Во-первых, первый запуск приложения стал о-о-очень долгим. Причем неважно, собирал ты его уже или нет — при смене девайсов считается, что все построить нужно с нуля. То же касается при переключении между flavors проекта…
Так что это имеет смысл, если тебе нужно посмотреть, как выглядит изменения в margin у вьюшки, например, но в целом, это чаще оборачивается капанием слюны на монитор во время сборки проекта.

Отключить Instant Run можно в настройках.

Websockets для Android

Изучая Fabric от Twitter, познакомился с отличным инструментом для создания REST запросов от клиента к серверу — Retrofit. Мало того, что само использование его удобно и, не побоюсь этого слова, элегантно, так еще оказалось, что в его разработке принимает участие Джейк Уортон, а кто не знает этого парня, верно :)? К сожалению, библиотеку пока еще не применял ни в одном из проектов (в последнем созданном использую Ion, например — тоже небольшая, но очень удобная), так что нюансы использования для меня еще скрыты. Все что есть — это первое знакомство.

Continue reading

MultiDex и java.lang.NoClassDefFoundError

Как правило, во время разработки я использую для тестирования приложений эмулятор Genymotion. Это удобный и быстрый инструмент, и он мне нравится куда больше того, что предлагает Google (хотя со времен незапускающихся эмуляторов на Eclipse многое изменилось, и я слышал, что дефолтные эмуляторы сейчас вполне ничего, но проверить не хватает времени), однако у него есть ряд ограничений. Так, для тестирования библиотек Google Cloud Messaging его нельзя использовать, потому что на нем отсутствуют библиотеки Google Play Services.

Другим моим постоянным тестовым устройством является Nexus 7 2013 — с ним все просто: это мой рабочий планшет, с кастомным ядром и рутованной прошивкой, но с ней все в порядке — это чистый Android Marshmallow (на текущий момент). На работе есть и другие устройства, и я сам ими довольно редко пользуюсь (Google Play Services не часто используется в рабочих проектах), но в этот раз мне пришлось изменить своим традициям.

При запуске рабочего приложения PlentyFi Social на Galaxy Nexus (Jelly Bean), я столкнулся с такой ошибкой

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

Continue reading

Когда приложение работает в фоне?

Для перехвата события, когда приложение уходит в фон (при сворачивании, открытии рабочего стола или другого приложения), можно использовать метод Application.registerActivityLifecycleCallbacks, в качестве параметра которому передается объект ComponentCallbacks (набор коллбеков, которые являются стандартными для всех компонентов приложения — Activity, Service, ContentProvider и Application).  Сам же метод registerActivityLifecycleCallbacks вызывается каждый раз, когда выполняются соответствующие методы у Activiy или сервисов.

Continue reading

Удаление неиспользуемых ресурсов в Android приложении

Аndroid-resource-remover — это утилита, которая позволяет очистить Android проект от неиспользуемых ресурсов. Раньше я использовал ее через запуск сохраненных в каком-то файлике команд, но пришло время для небольших автоматизаций. Все мои компьютеры теперь работают под OS X, но я не думаю, что будет большой проблемой изменить bash скрипт под линукс.

Шаг первый: необходимо установить Python на машине, если он ранее установлен не был. На своих компьютерах я использую brew, и команда установки выглядит следующим образом:

brew install python

Шаг второй: непосредственно инсталл самой утилиты. Качаем ее отсюда и далее делаем как описано в мануале

 pip install android-resource-remover

Как видим, все очень просто. Все, что нужно теперь — это воспользоваться написанным скриптом, передавая ему в качестве параметров следующие данные:

  1. Полный путь к вашему рабочему проекту.
  2. Если сразу же после подготовки данных необходимо удалить неиспользуемые ресурсы, вторым параметром будет единица
  3. Если после очистки ресурсов данные о том, какие именно ресурсы были помечены на удаление, а также причина этого вам не нужны, третьим параметром тоже будет единица.

Таким образом, команда для запуска скрипта выглядит следующим образом:

sh remover.sh <Path-to-work-directory>

sh remover.sh <Path-to-work-directory> 0 1

sh remover.sh <Path-to-work-directory> 1 0

P.S. Из официальной документации что такое Lint

The Android lint tool is a static code analysis tool that checks your Android project source files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization.

DePict на root-nation.ru

Буквально несколько лет назад большинство смартфонов не имели фронтальной камеры, а если таковая и была, то обладала крайне бедной возможностью съемки и использовалась чаще всего в мобильных видеозвонках. Сейчас фронталки в некоторых аппаратах обладают таким же количеством мегапикселей, как, например, в примере для подражания — iPhone 6 — и порой сложно сказать, какая камера на смартфоне популярней — фронтальная или основная.

Бум селфи возник где-то в 2012 году и достиг таких высот, что в 2013 году само слово «selfie» включили в Оксфордский онлайн-словарь английского языка. Селфи заполнили все соцсети — от фейсбука и инстаграма, до модного snapchat’а (того самого, где снимки удаляются раз и навсегда после просмотра), даже римский папа Франциск — и тот «заселфячил» себя для своей паствы. В общем, селфи — это, как было сказано в одном шоу, модно, стильно, молодежно.

Continue reading

Монетизируй то, монетизируй это!

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

Continue reading

Глава 6. Возвращение блудного попугая

Про майские праздники, решении о монетизации проекта (коварство в завоевании миров), изменения в функционале, а также просто мысли о новостных постах

Continue reading

Глава 5. В ASO столько же букв, сколько в слове «Зло»

Можно ли продвинуть приложение путем покупки отзывов и инсталлов? Да, только если не делать как я: использовал такие объемы, что можно сказать просто по луже ножками потопал.

Чтобы стать царем горы много знать не нужно. Необходимы установки — причем желателен взрыв — большое количество инсталлов за короткий срок — сутки, трое, неделя. Положительные отзывы тоже немаловажный аспект любого товара, где бы он не продавался — AppStore это, Google Play или Aliexpress. Ну, и описание товара было таким, чтоб его видимость для поисковых механизмов была на уровне досягаемости.

Continue reading