Pull to refresh
11
13
Send message

Когда почта доставляет: боремся с потерями push-уведомлений в iOS

Reading time17 min
Views15K
Со стороны пользователя почтовый клиент — приложение нехитрое. Разработчики Яндекс.Почты даже шутят, что в приложении всего три экрана: список писем; отправка письма; экран about.

Но очень много интересного происходит под капотом. Как многие мобильные приложения, Почта использует push-уведомления, чтобы взаимодействовать с пользователями. Как многие iOS-приложения, Почта теряет часть уведомлений в силу особенностей работы Apple Push Notification Service.

Руководитель iOS-группы Яндекс.Почты Ася Свириденко докажет, что даже с учетом ограничений системы, с потерями push-уведомлений можно и нужно бороться, если они критичны для вашего приложения. Для Почты это так, потому что push-уведомления о новых письмах — это то, ради чего пользователь устанавливает приложение. Если же для вашего приложения доставка push-уведомлений не так критична, узнать, какие велосипеды нагородила мобильная Яндекс.Почта, все равно интересно.


Речь пойдет о remote notification, то есть уведомлениях, которые приходят с сервера через APNs (Apple Push Notification Service). Локальные уведомления затрагивать не будем и поговорим о том:

  • Как выглядит API для работы с push-уведомлениями. Рассмотрим схему доставки push-уведомлений и то, где в этой схеме могут возникать потери. 
  • Как решили бороться с потерями в Яндекс.Почте — об очереди push-уведомлений.
  • Как логировать и какие еще сложности могут встретиться.
Total votes 30: ↑30 and ↓0+30
Comments9

Сила дженериков в Swift. Часть 1

Reading time4 min
Views29K
Всем привет! Делимся с вами переводом, подготовленным специально для студентов курса «iOS Разработчик. Продвинутый курс». Приятного прочтения.



Generic-функция, generic-тип и ограничения типа

Что такое дженерики?


Когда они работают – вы их любите, а когда нет – ненавидите!

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

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

Generic код позволяет создавать многократно используемые функции и типы данных, которые могут работать с любым типом, отвечающем определенным ограничениям, обеспечивая при этом типобезопасность во время компиляции. Этот подход позволяет писать код, который помогает избежать дублирования и выражает свой функционал в понятной абстрактной манере. Например, такие типы как Array, Set и Dictionary используют дженерики для хранения элементов.
Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments10

Как проходят алгоритмические секции на собеседованиях в Яндекс

Reading time9 min
Views412K

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


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


  • Специальный контест, содержащий задачи, похожие на те, что мы даём на интервью.
  • Этот пост. В нём рассказывается, почему нужно проводить такие секции, а также разбираются все задачи контеста.
  • Два видео, в которых разбираются задачи из контеста: в первом — задача попроще, во втором — две задачи посложнее. Из этих видео вы узнаете о типичных ошибках, допускаемых и при прохождении алгоритмических секций, и при написании продакшен-кода.
Читать дальше →
Total votes 86: ↑52 and ↓34+18
Comments105

Работа с JSON в Swift

Reading time9 min
Views48K
JavaScript Object Notation, или сокращенно JSON является самым распространенным способом связи с сервером и получения информации с него. Он чрезвычайно популярен из-за простоты в использовании и восприятии.

Рассмотрим следующий фрагмент JSON:
[
  {
    "person": {
      "name": "Dani",
      "age": "24"
    }
  },
  {
    "person": {
      "name": "ray",
      "age": "70"
    }
  }
]

Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments11

Решаем задачу из интервью Google на JavaScript: 4 разных способа

Reading time5 min
Views49K


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

Эта статья — своеобразное сопровождение к видео. В ней я даю комментарии ко всем показанным решениям плюс собственную версию решения на JavaScript. Также обсуждаются нюансы каждого алгоритма.
Total votes 50: ↑42 and ↓8+34
Comments49

Стажёр Вася и его истории об идемпотентности API

Reading time11 min
Views224K

Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе.


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →
Total votes 219: ↑216 and ↓3+213
Comments163

Немного о Swift runtime или куда пропал NSObject

Reading time11 min
Views29K
Привет друзья! Я из тех, кому скучно просто дергать за ниточки, торчащие из черной коробки, хочется увидеть все своими глазами, как оно работает под капотом. Мы поговорим с вами про рантайм, да-да рантайм. Для наших опытов рассмотрим старого доброго дедушку Objective C и революционного, но пока еще находящегося в стадии развития, Swift. Нам с вами понадобиться нырнуть практически на самое дно абстракций, которые заботливо придумали программисты Apple. Давайте немного разберемся, зачем вообще понадобилось разрабатывать новый язык. Я слышал много негативных отзывов в самом начале, особенно от уже матерых разработчиков Objective C. Если посмотреть повнимательнее на новый язык Swift, он на мой взгляд значительнее взрослее и серьезнее. Во-первых, он написал на языке С++ в отличии от Си, который лежит в основе Objective C. Я здесь высказываю только свои сугубо личные предубеждения, с которыми можно согласиться, можно и поспорить.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments17

Как работать с валютными счетами?

Reading time4 min
Views117K
Скачущий курс рубля никого не оставил равнодушным. Бум валютных операций подвигнул нас пристально рассмотреть все особенности валютного законодательства.

С зарубежными партнерами расчет чаще всего происходит в иностранной валюте. Чтобы оплатить заказ или получить доход от покупателя в валюте необходимо иметь валютный счет.
Читать дальше →
Total votes 41: ↑38 and ↓3+35
Comments41

Люди и процессы: почему удаленка подходит не каждой компании?

Reading time9 min
Views12K
Вместе с развитием интернета в наш мир стремительно ворвалась удаленная работа. Но как с любым хайпом, это был путь завышенных ожиданий и разочарований. На фоне восхвалений нового формата взаимодействия регулярно появляются новости о том, что очередная крупная компания свернула эксперимент по удаленной работе, поскольку теряется эффективность, доходы и т.п.
В чем же разница между компаниями, которые возвращают сотрудников в офис, и теми, кто рапортует об успехах удаленного формата?

image
Вася Ложкин. «Вернем все взад!»
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments14

Разработка библиотеки: от API до публичного релиза

Reading time24 min
Views13K
Давайте посмотрим на библиотеки не с той стороны, которая нам привычнее всего, то есть пользовательской, а с точки зрения разработчика библиотеки мобильной разработки. Поговорим, каких подходов стоит придерживаться, разрабатывая свою библиотеку. Начнем, конечно, с проектирования такого API, которым вы сами хотели бы пользоваться, который был бы удобен. Подумаем, что нужно учесть, чтобы сделать не просто работающий код, а по-настоящему хорошую библиотеку, и дойдем до того, как выпускать настоящий взрослый публичный релиз. Поможет нам в этом Ася Свириденко, которая поделится своим немалым опытом разработки мобильной библиотеки SpeechKit в Яндексе.

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

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

Total votes 28: ↑27 and ↓1+26
Comments3

Архитектурный шаблон «Посетитель» (“Visitor”) во вселенной «iOS» и «Swift»

Reading time6 min
Views5.6K
«Посетитель» (“Visitor”) – это один из поведенческих шаблонов, описанных в хрестоматийной книге «банды четырех» (“Gang of Four”, “GoF”) “Шаблоны проектирования” (“Design Patterns: Elements of Reusable Object-Oriented Software”).
Читать дальше →
Total votes 2: ↑2 and ↓0+2
Comments1

Как убедить клиента или компанию использовать Flutter

Reading time12 min
Views26K
Привет, Хабр! Представляю вашему вниманию перевод с англ. статьи Pitching Flutter to your company or client (автор Wm Leler)

С момента публикации статьи What’s Revolutionary about Flutter прошло больше года (и этот материал всё ещё актуален). Когда я писал ту статью, лишь немногие мобильные разработчики слышали о Flutter, но с тех пор многое изменилось. Сейчас я не успеваю следить за потоком новых статей и видео, которые появляются в этом активном и постоянно развивающемся сообществе. Разработчики открыли для себя Flutter, и они от него без ума. Вот пример приложения от Reflectly, созданного с помощью Flutter:


Умное приложение-дневник Reflectly
Читать дальше →
Total votes 40: ↑31 and ↓9+22
Comments44

Манифест жёсткого программиста

Reading time4 min
Views74K

Предисловие


Данный текст предполагает, что читатель ознакомлен с т.н. agile-манифестом разработки программного обеспечения и его т.н. основополагающими принципами.


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



Содержание


  1. Манифест жёсткого программиста
  2. Основополагающие принципы манифеста жёсткого программиста
  3. Комментарии


Манифест жёсткого программиста


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


Концепция важнее новых требований
Качество важнее скорости
Делать как надо важнее, чем делать как просят


То есть, не отрицая важности того, что справа, мы всё-таки более ценим то, что слева.

Читать дальше →
Total votes 150: ↑120 and ↓30+90
Comments389

Как это устроено: работа команды аналитиков на примере разработки одного digital-сервиса

Reading time6 min
Views8.7K

Кто все эти люди?

Профессия аналитика – одна из самых востребованных в мире. По словам директора рекрутингового агентства Pruffi, Алены Владимирской, бизнес-аналитики и все, кто занимается оптимизацией, внедрением новых бизнес-процессов, сегодня очень востребованы и высокооплачиваемы.

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

О том, как это выглядит на практике и насколько разными бывают аналитические задачи даже внутри одного сервиса, рассказал Олег Сахно, руководитель направления исследований Rookee.
Total votes 7: ↑7 and ↓0+7
Comments2

Моё разочарование в софте

Reading time11 min
Views388K

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


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

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

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.
Total votes 505: ↑474 and ↓31+443
Comments2474

Роль тимлида в рекрутинге

Reading time21 min
Views15K
Мы знаем, как часто общение потенциальных кандидатов с HR воспринимается в штыки. Именно поэтому, когда вы сами в поиске новых классных сотрудников, вы не можете переложить все заботы на кого-то другого и надеяться, что вам принесут рок-звезду на блюдечке.

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



Доклад Катерины Гавриловой на Saint TeamLead Conf дает вполне конкретные, не слишком трудозатратные рекомендации для руководителей, которые хотят нанять к себе в команду своих людей и не потратить на поиски полгода.

Total votes 33: ↑30 and ↓3+27
Comments21

Прямой эфир: СI/CD в iOS и Android

Reading time3 min
Views7.1K

Всем привет! Меня зовут Дима Воронин, я архитектор мобильных приложений в Авито, занимаюсь инфраструктурой тестирования, CI. 27 сентября на нашем ютуб-канале мы проведем прямой эфир и обсудим continuous integration и continuous delivery в iOS и Android. Вещаем прямиком из нашего офиса. Поговорим об основах: зачем нужны CI/CD и как их настраивать, коснемся UI-тестирования и feature toggling, а дальше — глубже и интереснее. Сами не знаем, куда заведет разговор. В дискуссии будут участвовать эксперты из Яндекса, Альфа-Банка и Авито.


Под катом — примерные вопросы, которые планируем обсуждать (и предлагаем вам дополнить этот список), а также пароли и явки для тех, кто захочет присоединиться к трансляции. Добавляйте пост в закладки: после встречи обновим его и выложим видео.


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

Композиция UIViewController-ов и навигация между ними (и не только)

Reading time15 min
Views23K


В этой статье я хочу поделиться опытом который мы успешно используем уже несколько лет в наших iOS приложениях, 3 из которых в данный момент находятся в Appstore. Данный подход хорошо зарекомендовал себя и недавно мы сегрегировали его от остального кода и оформили в отдельную библиотеку RouteComposer о которой собственно и пойдет речь.

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

Помогаем выплыть: как ввести новичков в сложный проект

Reading time8 min
Views20K


Всем привет! Меня зовут Михаил Берёзин, я — тимлид в HFLabs. Мы делаем очень сложный enterprise-софт для банков, сотовых операторов, страховых компаний, ритейлеров.

Полгода назад мы совершили большую ошибку: набрали в команду сразу 8 человек, штат вырос в 2 раза. Раньше никогда не брали так много людей скопом, поэтому забуксовали с онбордингом новичков. Расскажу, как справились с проблемой.
Читать дальше →
Total votes 34: ↑27 and ↓7+20
Comments9

Основные практики обеспечения безопасности iOS-приложений

Reading time9 min
Views13K


При разработке любого мобильного приложения, обрабатывающего пользовательские данные, важно уделить внимание безопасности. Особенно остро этот вопрос стоит для приложений, где фигурируют ФИО, номера телефонов, паспортов и другая личная информация. Наша компания разрабатывала и продолжает развивать несколько проектов такого рода, в частности приложения для клиентов российских банков. На основе этого опыта мы выработали набор требований безопасности, которым руководствуемся. Естественно, каждый год появляются новые технологии и возможности, а вместе с ними — новые особенности поведения и уязвимости. В этой статье мы зафиксировали основные пункты обеспечения безопасности iOS-приложений, актуальные на начало 2018 года.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments14

Information

Rating
393-rd
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity