Pull to refresh
38
0
Maxim Firsov @FirsofMaxim

Mobile developer, Golang backend developer

Send message

Пишем и собираем приложения для Android в linux консоли

Reading time6 min
Views38K

image


В данной статье я покажу как можно собрать apk файл в Ubuntu используя лишь
утилиты командной строки.


Обычно для создания приложений для Adroid используется Android Studio. Но для сборки небольших программ можно обойтись командной строкой. Например, когда ресурсы компьютера ограничены и ваше приложение очень простое.


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

Читать дальше →

Призрак локомотива или биржевой рынок через призму корреляций

Reading time12 min
Views6.5K
В этой статье будет продемонстрирована техника обработки информации по биржевым котировкам с помощью пакета pandas (python), а также изучены некоторые «мифы и легенды» биржевой торговли посредством применения методов математической статистики. Попутно кратко рассмотрим особенности использования библиотеки plotly.

Одной из легенд трейдеров является понятие «локомотива». Описать ее можно следующим образом: есть бумаги «ведущие» и есть бумаги «ведомые». Если поверить в существование подобной закономерности, то можно «предсказывать» будущие движения финансового инструмента по движению «локомотивов» («ведущих» бумаг). Так ли это? Есть ли под этим основания?
image
Читать дальше →

Android Architecture Components. Часть 2. Lifecycle

Reading time5 min
Views38K
image

Как я уже упоминал в предыдущем материале, компонент Lifecycle призван упростить работу с жизненным циклом, а имено избежать калбеков с Activity/Fragment в наш компонент, который должен реагировать на события жизненого цикла. В этой статье, мы подробно разберем как он устроен и как с ним работать.

Сам компонент состоит из классов: Lifecycle, LifecycleActivity, LifecycleFragment, LifecycleService, ProcessLifecycleOwner, LifecycleRegistry. Интерфейсов: LifecycleOwner, LifecycleObserver, LifecycleRegistryOwner.

Lifecycle — класс, который хранит информацию про состояние жизненного цикла и разрешает другим объектам отслеживать его c помощью реализации LifecycleObserver. Состоит из методов: addObserver(LifecycleObserver), removeObserver(LifecycleObserver) и getCurrentState(). Как понятно из названий для добавления подписчика, удаления и соответственно получения текущего состояния.
Читать дальше →

Определяем номера с помощью CallKit

Reading time7 min
Views21K


Когда в CRM 57000 контактов, людям совсем не хочется записывать их в айфон вручную. Надо найти решение поизящней, которое позволит не просто искать контакты в отдельном приложении, но и отображать имя человека при входящем звонке. Мы долго гуглили, а потом вспомнили про анонс фреймворка CallKit с WWDC. Информации по этой теме оказалось не так много: немногословная документация, статья на Хабре и ни одного пошагового руководства. Хочу восполнить этот пробел. На примере создания простого приложения покажу, как научить CallKit определять тысячи номеров.
Читать дальше →

8 полезных регэкспов с наглядным разбором

Reading time2 min
Views274K
О мощи и гибкости регулярных выражений написано много, и их использование давно уже является стандартом для различного рода операций над текстом. Пожалуй, чаще всего регэкспы работают при валидации вводимых данных — здесь им практически нет альтернативы, если не считать громоздкий циклический разбор с кучей неочевидных проверок. Начнём с самого простого:

1. Часть ЧПУ (человекопонятный URL)


По сути, слово с дефисами.

Паттерн: /^[a-z0-9-]+$/
short_url

Примеры посерьёзнее

Эффективная DI библиотека на Swift в 200 строк кода

Reading time7 min
Views10K
Библиотека EasyDi содержит контейнер зависимостей для Swift. Синтаксис этой библиотеки был специально разработан для быстрого освоения и эффективного использования. Она умещается в 200 строк, при этом умеет все, что нужно взрослой Di библиотеке:

— Создание объектов и внедрение зависимостей в существующие
— Разделение на контейнеры — Assemblies
— Типы разрешения зависимостей: граф объектов, синглетон, прототип
— Разрешение циклических зависимостей
— Подмена объектов и конктесты зависимостей для тестов

В EasyDi нет разделения на register/resolve. Вместо этого зависимости описываются вот так:

var apiClient: IAPIClient {
  return define(init: APIClient()) {
    $0.baseURl = self.baseURL
  }
}

Cocoapods / EasyDi
Github / EasyDi

Под катом очень краткое описание «Зачем DI и что это», также примеры использования библиотеки:

  • Как использовать и типы зависимостей
  • Как тестировать c подменой объектов
  • Как можно это использовать для A/B тестов
  • Как собрать VIPER-модуль
Читать дальше →

Как написать максимально хреновый бэкенд для мобильного приложения

Reading time6 min
Views62K


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


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


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


Приятного чтения.

Читать дальше →

«Прикорнуть немножечко»: чек-лист для короткого перерыва на сон

Reading time3 min
Views29K
Здоровый сон — понятие субъективное. Работать над улучшением качества сна сложно или практически невозможно в силу индивидуальных жизненных обстоятельств. Мы решили подготовить краткий чек-лист, который поможет быстро погрузиться в эту тему и найти подходящие тематические источники, которые подойдут именно вам.

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


Читать дальше →

ТОП-9 YouTube-каналов для изучения английского языка

Reading time3 min
Views134K
Впереди пора отпусков и каникул, поэтому мы просто поделимся с вами полезными YouTube-каналами на случай, если у вас будет пара свободных минут и желание немного заняться английским.

// "Enjoy the Content" — from author with Love 
Читать дальше →

Почему следует полностью переходить на Kotlin

Reading time6 min
Views95K


Хочу рассказать вам о новом языке программирования, который называется Kotlin, и объяснить, почему вам стоит использовать его в своём следующем проекте. Раньше я предпочитал Java, но в последний год пишу на Kotlin везде, где только можно. И в данный момент я не представляю себе ситуации, в которой лучше было бы выбрать Java.


Kotlin разработан в JetBrains, и участие тех же людей в создании наборов IDE, таких как IntelliJ и ReSharper, хорошо заметно по самому языку. Он прагматичен и краток, благодаря чему написание кода превращается в приятный и эффективный процесс.


Хотя Kotlin компилируется в JavaScript и скоро будет компилироваться в машинный код, я сконцентрируюсь на его первичной среде — JVM.


Итак, несколько причин, почему вам следует полностью переходить на Kotlin (порядок случаен):

Читать дальше →

Синхронизация состояний в многопользовательских играх

Reading time13 min
Views47K
image

Проблема многопользовательских игр


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

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

Обычно программа игры должна симулировать следующее:

изменения в окружении с учётом времени и вводимых игроками данных.

Игра — это программа, хранящая состояние, поэтому она зависит от времени (реального или логического). Например, PACMAN симулирует окружение, в котором постоянно перемещаются призраки.

Многопользовательская игра не является исключением, однако из-за взаимодействия игроков её сложность намного выше.
Читать дальше →

Реализация псевдо-3D в гоночных играх

Reading time40 min
Views52K

Введение


Почему псевдо-3d?

Зачем кому-то захочется создавать дороги в олдскульном стиле сегодня, когда каждый компьютер может на лету отрисовывать графику, состоящую из миллионов полигонов? Разве полигоны — не то же самое, только лучше? На самом деле нет. Полигоны действительно создают меньше искажений, но именно деформации в старых игровых движках дают такое сюрреалистическое, головокружительное чувство скорости, ощущаемое во многих дополигональных играх. Представьте, что область видимости управляется камерой. При движении по кривой в игре, использующей один из таких движков, похоже, что она заглядывает на кривую. Затем, когда дорога становится прямой, вид тоже выпрямляется. При движении в повороте с плохим обзором камера как будто заглядывает за выступ. И поскольку в таких играх не используется традиционный формат трасс с точными пространственными соотношениями, то можно без проблем создавать трассы, на которых игрок будет ездить с захватывающей дух скоростью. При этом не нужно беспокоиться о том, что объекты появляются на трассе быстрее, чем может среагировать игрок, потому что физическую реальность игры можно легко изменять в соответствии со стилем геймплея.

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

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

Работа с геолокацией в iOS 24/7

Reading time8 min
Views28K



В последнее время, часто вижу вопрос:
Можно ли в iOS работать с геолокацией, когда приложение свернули и отправлять данные на сервер?

Это действительно возможно и совсем не сложно.
How to вместится в превью статьи.

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


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


  1. Скачиваю приложение
  2. Запускаю
  3. Регистрируюсь
  4. Нажимаю куда просят
  5. Закрываю
  6. Катаюсь
  7. Запускаю
  8. Вижу результат

p.s. финальный код здесь.

Любые совпадения с реально существующим приложением случайны

Композиция протоколов для инъекции зависимостей

Reading time3 min
Views8K

Мне нравится использовать композицию и инъекцию зависимостей, но когда каждая сущность начинает инъектится несколькими зависимости, получается некое нагромождение.


Проект растет и приходится инъектить все больше зависимостей в объекты, рефакторить методы помногу раз, Xcode не особо с этим помогает, как мы знаем.


Но есть более управляемый способ.


Читать дальше →

Введение в криптографию и шифрование, часть первая. Лекция в Яндексе

Reading time20 min
Views261K
Чтобы сходу понимать материалы об инфраструктуре открытых ключей, сетевой безопасности и HTTPS, нужно знать основы криптографической теории. Один из самых быстрых способов изучить их — посмотреть или прочитать лекцию Владимира ivlad Иванова. Владимир — известный специалист по сетям и системам их защиты. Он долгое время работал в Яндексе, был одним из руководителей нашего департамента эксплуатации.


Мы впервые публикуем эту лекцию вместе с расшифровкой. Начнём с первой части. Под катом вы найдёте текст и часть слайдов.

Многопоточность (concurrency) в Swift 3. GCD и Dispatch Queues

Reading time28 min
Views342K
Надо сказать, что многопоточность (сoncurrency) в iOS всегда входит в вопросы, задаваемые на интервью разработчикам iOS приложений, а также в число топ ошибок, которые делают программисты при разработке iOS приложений. Поэтому так важно владеть этим инструментом в совершенстве.
Итак, у вас есть приложение, оно работает на main thread (главном потоке), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (UI). Как только вы начинаете добавлять к вашему приложению такие «затратные по времени» куски кода, как загрузка данных из сети или обработка изображений на main thread (главном потоке), то работа вашего UI начинает сильно замедляться и даже может привести к полному его «замораживанию».



Как можно изменить архитектуру приложения, чтобы таких проблем не возникало? В этом случае на помощь приходит многопоточность (сoncurrency), которая позволяет одновременно выполнять две или более независимые задачи (tasks): вычисления, загрузку данных из сети или с диска, обработку изображений и т.д.
Читать дальше →

Рекордное время: как мы увеличили скорость запуска приложения Почты Mail.Ru на iOS

Reading time21 min
Views16K


Скорость запуска — критически важный фактор для долгосрочного успеха приложения. Она особенно важна для таких приложений как Почта Mail.Ru, которые запускают по многу раз в день с целью быстро проверить новые письма во «Входящих».

В статье речь пойдет об оптимизации большого по объему кода приложения, имеющего относительно долгую историю разработки и успевшего обрасти за это время множеством видимой и скрытой от пользователя функциональности. Задача состояла в том, чтобы сократить время запуска без урезания функциональности.
Читать дальше →

Что надо знать, чтобы брать туры дешевле: как всё это устроено (и как взять отель в Сочи за 1116 рублей на 5 ночей)

Reading time5 min
Views80K

Двухместный номер за 112 рублей в сутки на человека будет примерно вот такой, это 750 метров от центра Красной Поляны.

Прошлый раз было много вопросов про ценообразование, постараюсь ответить. Начну с азов. Самостоятельный путешественник обычно ищет билеты на «Скайсканнере» или AWAD’е. Потом, взяв билеты, выбирает квартиру на AirB&B или отель на «Букинге». Потом идёт и страхуется. Экскурсии набирает на месте по ситуации. Туры нормальный ИТ-специалист, например, заказывает только для родителей, которые не знают языка.

Стратегия самостоятельной брони разумна в 70–80% случаев. Самые опытные путешественники знают, что есть ещё две волшебных фишки:

— Взять готовый тур (он может получиться раза в полтора дешевле, чем самостоятельная покупка билетов и отеля).
— Или же взять только отель из готового тура (это чаще всего вообще дичайший профит).

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

При поездке в Исландию так не выйдет. А вот по популярным направлениям есть варианты. Например, на сегодняшнее утро можно пожить 5 ночей в Сочи в хорошем двухместном номере, получить перелёт, завтраки и трансфер за 12 тысяч 35 рублей. Это на двоих, то есть 6018 рублей на человека. Именно столько стоят билеты в оба конца, если их брать за три недели, а тут ещё отель, завтраки и трансфер (такси от аэропорта до Сочи стоит 850 рублей в одну сторону, поезд — 150 рублей за взрослого). Ниже покажу ещё варианты для Турции и Греции.

Но начну с ответа на вопрос, где подвох.
Читать дальше →

Монитор качества воздуха в помещении

Reading time6 min
Views64K
image

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

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

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

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

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

Некоторые аспекты использования картографических материалов или как не попасть на 300 тыс.руб. за схему проезда на сайте

Reading time3 min
Views30K
Disclaimer: я не являюсь профессиональным юристом, поэтому все нижеизложенное — это попытки самостоятельно разобраться в вопросе на основе вдумчивого чтения различных источников. За профессиональной юридической консультацией лучше обращаться к людям, которые занимаются этим на постоянной основе (их называют "юристы").

Начнем с наглядного примера: у вас есть сайт коммерческой организации и вам нужно разместить схему проезда. Вы недолго думаете идете на Яндекс.Карты (Google Maps, 2Gis), делаете скриншот, рисуете в Photoshop какие-то ориентиры, чтобы человек не запутался, выкладываете на свой сайт в разделе "Контакты" и… попадаете на штраф 300 тыс. руб. за неправомерное использование объекта авторского права.

Читать дальше →

Information

Rating
1,992-nd
Location
Снежинск (Челябинская обл.), Челябинская обл., Россия
Date of birth
Registered
Activity