Pull to refresh
17
0
Кирилл Ашихмин @BOOMik

User

Send message

SwiftLint — чистота и порядок в iOS проекте

Reading time6 min
Views55K
image

Думаю, все знают, как бывает непросто поддерживать соблюдение code style и соглашений в iOS-проекте. Сегодня поговорим о том, как автоматизировать этот процесс с помощью утилиты SwiftLint.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments17

Новый LampTest.ru

Reading time4 min
Views17K
Светодиодные лампочки появились уже во многих домах, а скоро они будут у всех, но не все лампочки хорошие и не всегда реальные параметры лампы соответствует тому, что заявляет производитель. Чуть больше года назад у меня родилась идея сделать сайт с результатами инструментальных тестов светодиодных ламп. На мой клич о помощи откликнулся замечательный программист из Нижнего Новгорода Сергей Андреев, который создал быстрый, красивый и удобный сайт. LampTest.ru работает уже полгода, а сегодня я рад представить его обновлённую версию.



За это время я протестировал 278 ламп, включая 226 светодиодных.

Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments60

Еще одна статья про изготовление домашнего медиа-сервера

Reading time15 min
Views54K
На Гиктаймс уже не раз и не два размещались статьи про сборку своего домашнего NAS/медиа-сервера/ТВ-приставки и тому подобных произведений чешущихся и относительно прямых рук. Для тех, кто любит подобное рукоблудие, или планирует сам заняться таковым, ниже представлена еще одна вариация на эту тему.


Ну давай уже, что там у тебя?
Total votes 31: ↑29 and ↓2+27
Comments119

Let's Encrypt выходит в публичную бету: HTTPS всюду, каждому, отныне и навсегда бесплатно

Reading time3 min
Views67K
Let's Encrypt

Let's Encrypt — это некоммерческая инициатива, предоставляющая бесплатный, автоматизированный и открытый CA (certificate authority — центр сертификации), созданный ISRG на благо общества:

  • бесплатно: владелец всякого доменного имени может воспользоваться Let's Encrypt и получить доверенный (читать как «признаётся любым современным браузером») TLS-сертификат (TLS — наследник SSL) совершенно бесплатно;
  • автоматизированно: Let's Encrypt предоставляет бесплатное и свободное программное обеспечение (клиент), которое, будучи настроенным на веб-сервере, может полностью автоматически запрашивать безвозмездно предоставляемые сертификаты Let’s Encrypt, автоматически конфигурировать и обновлять их;
  • безопасно: Let’s Encrypt строится как платформа для продвижения наилучших практик безопасности TLS как на стороне центра сертификации (CA), так и на стороне веб-сайтов, помогая администраторам должным образом настраивать веб-серверы;
  • прозрачно: информация о выпуске и отзыве каждого сертификата Let's Encrypt доступна вполне и публично так, что любой желающий изучить её сможет это сделать;
  • свободно: протоколы взаимодействия со CA, позволяющие автоматизировать процессы выпуска и обновления сертификатов, будут опубликованы как открытый стандарт для максимального внедрения;
  • кооперативно: как и любой протокол, лежащий в основе Интернета и Всемирной паутины, Let’s Encrypt является совместным, неподконтрольным какой-либо конкретной организации некоммерческим проектом созданным исключительно для того, чтобы принести пользу обществу.

Читать дальше →
Total votes 72: ↑71 and ↓1+70
Comments138

Xamarin.UITest

Reading time5 min
Views16K
В этой статье я расскажу вам о Xamarin.UITest — фреймворке для приемочного UI тестирования от Xamarin.

Что это такое и как его готовить


Xamarin.UITest сделан на основе Calabash и имеет сходный с ним принцип работы. Однако, тесты на данном фреймворке пишутся на С# и NUnit (в отличие от Calabash, в котором используется Gherkin+Ruby). Фреймворк кроссплатформенный и, следовательно, он позволяет писать тесты как для платформы iOS, так и для Android. Windows Phone не поддерживается, что я лично считаю недостатком данного инструмента. Зато в нем вполне поддерживается тестирование нативных приложений на Java и Objective-C.

image

Как это работает
Total votes 15: ↑15 and ↓0+15
Comments2

Интеграция нативной рекламы Admob в ListView

Reading time21 min
Views15K
Весной 2015 года в рамках Google Admob был анонсирован новый для них способ отображения рекламных блоков, а именно Native ads (далее нативная реклама), который на текущий момент действует в режиме бета-релиза. Плюс нативной рекламы – это высокая адаптивность к дизайну приложения, которая позволяет показать рекламу таким образом, чтобы она не бросалась в глаза и не мешала работе с приложением. В статье будут отмечены определенные моменты, которые возникли в процессе интеграции Admob Native Ads в собственное приложение (пример того, что получилось показан на картинке, названия удалены), а также приведен практический пример с фрагментами кода (полный вариант при желании можно загрузить и посмотреть тут.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments12

3 способа задать разметку для различных устройств в C#/XAML приложениях Windows UWP

Reading time3 min
Views15K

Для начала, хотелось бы напомнить, каким образом можно было создавать универсальные приложения в Windows 8.1. Создавалось решение с тремя проектами: для телефона, для Windows 8.1 и проект с общим кодом. А как теперь в Windows 10? Сейчас расскажу.
Почитать больше об этом
Total votes 15: ↑14 and ↓1+13
Comments5

Публикация Android библиотеки в jCenter

Reading time8 min
Views19K


В жизни каждого андроид разработчика настаёт момент, когда количество самописных утилит и хелперов, качующих из проекта в проект, переваливает за десяток. В этом случае хорошей практикой будет оформление подобных хелперов в виде самостоятельных «модулей» в терминах Android Studio. Еще лучше, если Вы собираетесь поделиться Вашими наработками с комьюнити, снабдив исходный код подходящей лицензией. Но просто залить исходники на GitHub в этом случае будет недостаточно – хочется, чтобы любой желающий мог подключить библиотеку с помощью однострочной Gradle зависимости, например такой:

dependencies {
   compile 'com.github.romangromov:simpleprefs:0.0.8'
}

О том, как этого добиться и пойдет речь в данной статье.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments5

Первый месяц раскрутки бесплатного неигрового приложения: грабли, шишки, удачи, выводы

Reading time9 min
Views23K
Итак, позади первый месяц (ну, чуть больше), как на Гуглоплее появилось наше первое приложение. Мало того, что неигровое, так еще и в одной из самых грустных категорий – книги и справочники. Продвигать такое в наше смутное и нечитающее время – та еще задачка, хотя приложение и бесплатное. Ниже я постаралась собрать все, что может оказаться полезным другим таким же негеймдевам – статистика, выхлопы с разных площадок, мысли вслух.

Сразу – вводная, которую я сама себе нарисовала, еще планируя выход на рынок. Во-первых, на раскрутку приложения я не буду тратить ни копейки денег. Не потому что их нет (хотя…), а пока из принципа – чтобы собрать максимальный урожай с бесплатных вариантов. Во-вторых, ограничиться только установками через Гуглоплей. И сразу же спойлер – первое пока удается (потрачено 0 р. 00 коп.), второе – уже нет.

И еще один спойлер — под катом анализ конверсии до и после привлечения аудитории торрентофилов…

Первый месяц раскрутки бесплатного неигрового приложения: грабли, шишки, удачи, выводы (Хабрахабр)
Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments33

Программное создание NinePatchDrawable

Reading time9 min
Views9.1K
В новом Android Lollipop появился такой интересный компонент как VectorDrawable. Если использовать его с умом, можно значительно снизить объем приложения, сэкономив на графических ресурсах, плюс, использование векторной графики освобождает нас от муторного процесса создания изображений под разные плотности экрана. Первая мысль, которая меня посетила, когда я увидел VectorDrawable, была: “Ух ты! А его можно тянуть как NinePatch?”. Оказалось нельзя. Тут можно было бы немного огорчиться и довольствоваться тем, что хотя бы иконки можно в векторе держать. Однако, я на этом решил не останавливаться. В итоге получилась универсальная утилита, которая из любого Drawable способна сделать NinePatchDrawable.



В изображении, которое вы видите, используется вектор, но он растянут по центру. И это удивительно! Возможность растягивать вектор только в определенных областях предоставляет, по истине, колоссальные возможности. А если учесть, что есть проекты позволяющий использовать вектор на более ранних версиях андроида, векторные изображения начинают показывать себя во всем своем великолепии.
Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments2

Android Process: Я тебя породил, я тебя и …

Reading time12 min
Views39K


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

В этой статье я расскажу о некоторых ошибках, которые могут возникнуть в результате нарушения шестой заповеди (не убей) по отношению к процессу приложения, и о том как проверить на сколько качественно он возвращается с того света.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments18

Введение в новый CoordinatorLayout

Reading time5 min
Views54K
В этом году на конференции Google IO компания Google представила новую библиотеку Android Design Support Library, которая создана для того, чтобы помочь разработчикам внедрять материальный дизайн в их приложения. Билиотека содержит много компонентов, нужных для этого нового стиля, и работает со всеми уровнями API, начиная с седьмого. Если по какой-то причине вы пропустили её анонс, можете ознакомиться с постом Ian Lake, выложенным на Android Developers Blog.

Встречайте Android CoordinatorLayout


Из всех компонентов, включенных в Android Design Support Library, наиболее интересным выглядит новый «прокачанный FrameLayout», он же герой нашей статьи — CoordinatorLayout. По названию можно догадаться, что CoordinatorLayout позволяет координировать некие зависимости между включенными в него виджетами.

Всё, что нужно сделать — обернуть необходимые нам виджеты в CoordinatorLayout. Давайте посмотрим, как это будет выглядеть в коде. Наш демонстрационный код очень прост — Floating Action Button, по нажатию на которую на экране появляется Snackbar.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments5

Альтернативы Google Play и App Store или как живет Китай без Google Play

Reading time3 min
Views231K

Альтернативные сторы не столь популярны в России, но являются неотъемлемой частью китайского мобильного рынка, где Google Play заблокирован. Глядя на Андроид, некоторые китайские компании запустили собственные iOS сторы. При этом устанавливать игры и приложения с таких сторов можно и на обычные iPhone (не Jailbreak). Это одна из особенностей, которую было бы неплохо распространить по всему миру, ведь монополия официальных сторов это не есть хорошо. На российском рынке альтернативный стор запустил пока только Яндекс. Но его доля очень маленькая, поэтому его пока сложно назвать конкурентом Google Play. Возможно в будующем ситуация изменится, в первую очередь за счет выхода китайских сторов на другие рынки, так например уже многие слышали про приложение – Mobogenie. Но мы решили разместить более полный список альтернативных приложений, которые существую на сегодняшний день.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments17

Автоматическое увеличение номера сборки в Xcode

Reading time2 min
Views3.3K
Пользователи и тестировщики могут найти ошибки, которые вы наверняка уже исправили. Иногда пользователи используют старую версию приложения, иногда ваши исправления не так хороши, как вы думали. В обоих случаях небольшой уникальный номер версии, отображаемый в приложении, может сэкономить часы вашей работы.

Это можно сделать
Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments15

Генерируем номер версии и билда на иконке iOS приложения

Reading time2 min
Views11K


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

Зачастую эту информацию прячут где-нибудь, например, в приложении Яндекс.Маркет, нужно ткнуть в раздел Кабинет и выбрать пункт «О приложении»:

Пример

Для удобства (или потому, что этот экран ещё не готов), можно вынести эту полезную информацию прямо на иконку приложения.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments9

Malevich

Reading time3 min
Views16K
Так сложилось, что я люблю маленькие верткие библиотеки, которые с одной стороны — легко расширять, а с другой — удобны в использовании.

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

Так как человек я по натуре ленивый — решил пойти проторенным путем — открыл пример от гугла Loading Large Bitmaps Efficiently и решил вырезав из него все ненужное — получить с одной стороны легко расширяемую, а с другой стороны максимально эффективную библиотеку.

Так как кто как не эти чуваки лучше знают как грузить битмапы?

Так и получился Малевич:

image

Спойлер:

malevich.load(mImageUrl).into(mImageView);

Подробности
Total votes 29: ↑27 and ↓2+25
Comments27

Дизайн мобильных приложений: почему мы работаем в @1x

Reading time4 min
Views62K
image

В одной из предыдущих статей наши коллеги описали требования по передаче проекта от дизайнеров разработчикам мобильных приложений. Эти требования мы, как отдел дизайна в Rambler Digital Solutions, должны соблюдать.

В этот раз хотелось бы рассказать о некотором нюансе разработки дизайна приложений, который облегчает нам жизнь — о разрешении дизайн-макетов и о плюсах и минусах выбора того или иного исходного разрешения.
Читать далее
Total votes 18: ↑17 and ↓1+16
Comments15

Google Cloud Messaging: «Сова, открывай! Пуш пришел!»

Reading time6 min
Views63K
Всем известный сервис Google Cloud Messaging (GCM) нужен для того, чтобы ваше приложение всегда показывало актуальные данные пользователю. Схема работы сервиса включает в себя три компоненты.



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

В этом материале будут рассмотрены проблемы на двух участках, который обозначены на схеме: пуш-сервер – GCM и GCM – устройство.
Читать дальше →
Total votes 45: ↑44 and ↓1+43
Comments30

StorIO — человеческий API для работы с SQLiteDatabase и ContentResolver

Reading time3 min
Views14K
Не секрет, что API SQLiteDatabase и ContentResolver — отстой, поэтому многие стараются от них абстрагироваться. Кто-то выбирает ORM, кто-то DAO, кто-то пишет своё.

За долгие годы Android разработки мы прошли через все эти этапы: ORM часто становится узким местом в критический для проекта момент, своё DAO требует тестирования и разработки, что отнимает много времени, которое можно было тратить на другие детали реализации приложения, готовые DAO в принципе решают вопрос, но различные библиотеки имеют свои плюсы и минусы (15стандартов.jpg), посмотрите, что предлагаем мы:

1. API для людей: удобные билдеры (помните 5-7 nullов в запросах?), читаемые и очевидные конструкции, Immutability и Thread-safety.
2. Упрощенный набор операций: вместо стандартного CRUD (Create-Read-Update-Delete или Insert-Select-Update-Delete) мы предлагаем три операции — Put, Get, Delete, при этом вы имеете полный контроль над их реализацией, можете, например, упороться и хранить один объект в нескольких таблицах и так далее.
3. Опциональный Type-Safe Object Mapping без Reflection, но если вы хотите работать с Cursor или ContentValues — пожалуйста.
4. Некая схожесть с Retrofit: вы можете выполнить любую операцию как блокирующий вызов либо как rx.Observable, мы можем добавить callback модель выполнения операций в будущем.
5. Reactive — Observable из Get операции будет получать уведомления об изменении таблиц в случае SQLite или Uri в случае ContentResolver, это позволяет полностью заменить лоадеры, API которых просто отвратителен.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments9

Как вырастить айтишника

Reading time4 min
Views27K


Как недавно признался Цукерберг, «я никогда не стал бы программистом, если бы не играл ребёнком в компьютерные игры». Не станем утверждать, что путь к успеху в IT лежит через геймерство. Но всё же без тесного знакомства с самыми разными программами и гаджетами программисту не обойтись. И в наши дни знакомство это начинается с достаточно раннего детства. Информационные технологии уже давно проникли в нашу жизнь. Современные программисты, в детстве игравшие на приставках и компьютерах, зачастую сталкивались с непониманием родителей, в чьей молодости не было подобных вещей. Зато теперь эти самые программеры сами обзавелись детьми и гораздо лучше понимают их увлечения. Зачастую даже становятся этакими наставниками по хайтек-развлечениями, обучая детей премудростям комбо-ударов, постройки юнитов и частой отправки врагов на респаун. Как волки обучают волчат азам охоты. И нам стало любопытно, во что же программисты сегодня могут поиграть со своими детьми? И не просто поиграть, а с пользой для молодого ума.
Читать дальше →
Total votes 46: ↑39 and ↓7+32
Comments18
1
23 ...

Information

Rating
Does not participate
Location
Воронеж, Воронежская обл., Россия
Date of birth
Registered
Activity

Specialization

Mobile Application Developer
Lead