Как стать автором
Обновить

Компания FUNCORP временно не ведёт блог на Хабре

Сначала показывать

Особенности практического использования различных алгоритмов Многорукого бандита

Время на прочтение7 мин
Количество просмотров5.5K

Большинство статей про алгоритмы, используемые для решения задачи многорукого бандита, очень академичны. Они пестрят формулами, графиками и статистическими таблицами. При этом как будто подразумевается, что у нас есть неизменяемый набор ручек для дёргания и n→∞ попыток. В этой статье я постараюсь рассказать об этих алгоритмах с колокольни обычного разработчика применительно к реальным условиям, в которых работает наш продукт (но графики будут — с ними красивее).

Дисклеймер: эта статья написана обычным разработчиком, не дата-саентистом или аналитиком. Не стоит рассматривать её в качестве серьёзного научного труда и искать неточности, неполноту и крайности. Она не про это.

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

• просмотр(n) = попытка;
• смайл(s) = победа;
• смайлрейт(w, от worth) = количество смайлов/количество просмотров;
• контент = то, у чего есть эти самые просмотры и смайлы.

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

Читать далее
Всего голосов 48: ↑48 и ↓0+48
Комментарии2

Давайте будем прямыми в своих intent

Время на прочтение5 мин
Количество просмотров4.9K

В Android 12 появится важное изменение, улучшающее безопасность платформы целиком и всех приложений, предназначенных для работы с этой версией ОС. Активити, сервисы и бродкаст ресиверы (broadcast receivers), в которых указаны интент-фильтры (intent-filters), должны явно обозначать, будут ли они доступны для других приложений или компонентов системы.

Под катом — перевод статьи про проблемы и решения, которые могут возникнуть при переходе на новую версию.

Читать далее
Всего голосов 32: ↑32 и ↓0+32
Комментарии2

Провели внутренний хакатон впервые после карантина: как мы обучали машинки устраивать в офисе ДТП

Время на прочтение7 мин
Количество просмотров3.6K

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

Задание полностью отличалось от того, чем мы привыкли заниматься, разрабатывая мобильные приложения — нужно было научить машинку на основе Raspberry Pi 4.0 с камерой объезжать препятствия, искать врага определённого цвета и идти на таран. Кто показал в среднем лучший результат — тот и выиграл.

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

Read more
Всего голосов 40: ↑40 и ↓0+40
Комментарии8

Гайд по мобильной рекламе для тех, кто задумался о монетизации

Время на прочтение11 мин
Количество просмотров12K

Основной способ монетизации наших приложений — это реклама, и её рынок растёт с каждым годом. В этой статье рассмотрим четыре основных вида рекламы, каждый из которых делится ещё на несколько типов. И поговорим об особенностях каждого как с технической, так и с пользовательской стороны — что такое «баннерная слепота», сколько видов нативной рекламы существует, какие размеры выбрать для разных экранов и как работает видео с вознаграждением. А также немного о нашем опыте эффективности разной рекламы.

Читать далее
Всего голосов 41: ↑40 и ↓1+39
Комментарии5

DVC — Git для данных на примере ML-проекта

Время на прочтение7 мин
Количество просмотров7.5K

Data-science развивается очень быстро, в том числе благодаря росту объема доступных данных для анализа или построения моделей. Но для создания сложных моделей командам аналитиков нужно работать совместно и эффективно управлять большими датасетами. И вот здесь может помочь, например, DVC — open-source система контроля версий для проектов машинного обучения.

Нашел не так много информации по ней в рунете, поэтому под катом на примере простого ML-проекта расскажу, как работать с инструментом для хранения и обновления датасета.

Читать далее
Всего голосов 44: ↑44 и ↓0+44
Комментарии8

Как мы в 2 раза увеличили скорость формирования ленты в UGC-приложении

Время на прочтение5 мин
Количество просмотров3K

Несколько лет назад мы добавили в мобильное приложение iFunny социальные механики: подписку и фид с мемами, которые запостили друзья. В этом материале обсудим вызовы времени и ответы на них в виде нескольких подходов в технической реализации на бэкенде.

Ежедневно наши пользователи загружают десятки тысяч единиц контента. На таком объёме данных приходится применять ухищрения, чтобы сохранить приемлемое время ответа. Под катом расскажу, что именно мы делали, а в конце статьи поделюсь кодом на GitHub для ознакомления.

Читать далее
Всего голосов 47: ↑46 и ↓1+45
Комментарии6

Чаты на вебсокетах, когда на бэкенде WAMP. Теперь про Android

Время на прочтение7 мин
Количество просмотров6.8K

Мой коллега уже писал про наш опыт разработки чатов на вебсокетах для iOS, поэтому часть про особенности бэкенда с точки зрения клиента у нас общая. А вот реализация на Android, конечно, отличается. И ещё мне не приходилось, как в первой статье, искать библиотеку для поддержки старых версий операционной системы, потому что на Android каких-то глобальных изменений в сетевой части не было, всё работало и так.

К реализации вернёмся чуть ниже, а начнём с ответов на вопросы про бэкенд, которые появились после первой статьи: почему WAMP, какой брокер используем и некоторые другие моменты.

Читать далее
Всего голосов 50: ↑50 и ↓0+50
Комментарии3

Чаты на вебсокетах в iOS, если у вас WAMP

Время на прочтение7 мин
Количество просмотров4.6K


Разработка заняла примерно 9 месяцев, а я занимался реализацией клиент-серверного общения по сокету для iOS. Особенности нашей ситуации:

  1. Поддержка старых версий iOS, где нативных методов для общения по сокетам ещё не было — пришлось искать рабочую библиотеку и фиксить баги.
  2. Протокол WAMP на бэкенде — предстояло научить клиент декодировать any, декодировать протоколы и создать объект, который отвечает за отправку и приём сообщений.

Примечание: описанные ниже способы декодирования, можно применить и в других задачах.
Читать дальше →
Всего голосов 44: ↑44 и ↓0+44
Комментарии18

Финальные классы в PHP, Java и других языках

Время на прочтение3 мин
Количество просмотров8.5K
Использовать финальные классы или не использовать финальные классы? Вот в чём вопрос. А ещё в том, когда и как это делать правильно.


Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии23

Корутины и синхронизация. Лучше не смешивать

Время на прочтение3 мин
Количество просмотров14K

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

В мире Java одним из стандартных решений является добавление ключевого слова synchronized к сигнатуре метода. В Kotlin для получения того же эффекта используется аннотация @Synchronized

Читать далее
Всего голосов 38: ↑34 и ↓4+30
Комментарии24

Дополняем чек-лист тестирования при обновлении иконки и сплеша в мобильных приложениях

Время на прочтение3 мин
Количество просмотров7.1K


Алоха! Меня зовут Даша, я тестирую мобильные приложения. Скоро Хэллоуин, а FunCorp традиционно обновляет к некоторым праздникам иконку и сплеш. Сейчас именно такой случай, потому что большинство наших пользователей находятся в США. Задача показалась тривиальной, я быстро составила базовый чек-лист на 8 пунктов, но в процессе нашла ещё несколько кейсов, и он вырос до 13-ти (прилагается).

Здесь нет rocket science, я лишь расскажу, на что стоит обращать внимание в таких тасках, чтобы не пропустить лишних багов в прод — и на Android, и на iOS.
Читать дальше →
Всего голосов 56: ↑55 и ↓1+54
Комментарии8

Большие картинки? Deal with it

Время на прочтение3 мин
Количество просмотров6.3K
image

Привет, Хабр! Приложение iFunny создано, чтобы показывать контент, который генерируют пользователи. Это могут быть видео, гифки и картинки. Очень большие картинки. Представьте себе, сколько памяти займёт комикс, высотой в 10К пикселей. Представили? А теперь представьте, что вы не можете его сжимать, потому что в таком случае он потеряет в качестве настолько, что станет абсолютно нечитаемым. Под катом я расскажу, как iFunny работает с подобным контентом.
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии4

Navigation bar и анимация перехода

Время на прочтение4 мин
Количество просмотров7.5K

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

Немного общей теории

Если вы хорошо осведомлены, смело пролистывайте непосредственно к анимации.

Читать далее
Всего голосов 29: ↑28 и ↓1+27
Комментарии5

Lazy-loading видео

Время на прочтение4 мин
Количество просмотров11K
image

Обычно видео загружаются с помощью тега video (хотя, появился альтернативный метод с использованием img, правда, его возможности ограничены). Способ реализации отложенной загрузки видео зависит от варианта его использования. Давайте обсудим несколько сценариев, для каждого из которых требуется своё решение.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии3

Российские пасхалки в мобильных приложениях. Какие они?

Время на прочтение3 мин
Количество просмотров12K
Привет, Хабр! Уже завтра День программиста (12.09.2020), и специально к нашему профессиональному празднику я написал не хардкорно-технический пост, а лайтовую статью о маленьких, не всегда очевидных фичах, которые хоть и не часто, но встречаются в мобильных приложениях и не только. Как вы уже догадались — это пасхалки. И не просто пасхалки, а отечественного производства. Если хотите ненадолго погрузиться в детали, которые мы обычно не замечаем, либо которые сложно найти, — добро пожаловать под кат.


Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии17

Как будет выглядеть программирование в 2025 году?

Время на прочтение9 мин
Количество просмотров25K

Мы часто читаем о бэст практикс в программировании, о новых функциях фреймворков или о том, что нового в очередной версии PHP. Читаем, как поменять «то на это», почему какая-то техника хороша или плоха, или какой новый пакет вы можете использовать в своём проекте. Но всё это рассуждения только о прошлом или настоящем.

Сейчас я заканчиваю чтение книги «The Inevitable», написанной основателем журнала Wired, речь в которой исключительно про будущее. Вдохновившись этой книгой, предлагаю посмотреть на будущее программирования.
Читать дальше →
Всего голосов 56: ↑40 и ↓16+24
Комментарии149

Новости о машинном обучении Apple в 2020 году

Время на прочтение24 мин
Количество просмотров6.5K

В 2020 году машинное обучение на мобильных платформах перестало быть революционным новшеством. Интеграция интеллектуальных функций в приложения стала стандартной практикой.

К счастью, это вовсе не означает, что Apple прекратила разрабатывать инновационные технологии.

В этой публикации я кратко расскажу о новостях в отношении платформы Core ML и других технологий искусственного интеллекта и машинного обучения в экосистеме Apple.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии0

Todo-лист для командной строки на Deno

Время на прочтение11 мин
Количество просмотров5.8K

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


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


Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии13

Тёмная тема vs Светлая тема: что лучше?

Время на прочтение10 мин
Количество просмотров52K


Примечание переводчика: тёмная тема в дизайне интерфейсов к 2020 году стала чуть ли не обязательной. Вслед за Apple и Android на поезд Dark Mode «впрыгнули» и другие крупнейшие игроки рынка (например, Google, What’s App, Instagram). Тёмную тему любят по нескольким причинам:

  1. Она экономит расход батареи;
  2. Считается, что она снижает напряжение глаз, и с ней легче работать при слабом освещении;
  3. Некоторым она просто больше нравится.

Но, оставив в стороне рассуждения об эстетике тёмной темы, так ли уж она полезна для глаз? На самом ли деле тёмная тема повышает продуктивность работы с текстом? Ралука Будиу (Raluca Budiu) из Nielsen Norman Group даёт исчерпывающие ответы.
Читать дальше →
Всего голосов 55: ↑53 и ↓2+51
Комментарии91

Phrase.com или как мы автоматизировали флоу локализации

Время на прочтение6 мин
Количество просмотров2.5K


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

В этой статье я хочу рассказать о том, что и как удалось автоматизировать нам самим, а также об альтернативных решениях с использованием сервиса Phrase.com.
Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии3