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

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

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

Однотипные методы? Хватит это писать

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

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


клавиатура с кнопками copy и paste

Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии8

Внедрение зависимостей в Go

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

Недавно я создал небольшой проект на языке Go. После нескольких лет работы с Java я был сильно удивлён тем, как вяло внедрение зависимостей (Dependency Injection, DI) применяется в экосистеме Go. Для своего проекта я решил использовать библиотеку dig от компании Uber, и она меня по-настоящему впечатлила.

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

В этой статье я расскажу об основах внедрения зависимостей, а также покажу пример приложения до и после применения этого механизма (посредством библиотеки dig).
Читать дальше →
Всего голосов 48: ↑43 и ↓5+38
Комментарии92

Java и Project Reactor. Эпизод 2

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


Привет! Удивительно, но первая часть статьи даже кому-то понравилась.
Отдельное спасибо за ваши отзывы и комментарии. У меня для вас плохая хорошая новость: нам ещё есть о чём поговорить! А если точнее, то о некоторых деталях работы Reactor.

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

«Стартуем! Я сказала: стартуем!», или как мы реализовывали работу с faststart-видео под Android

Время на прочтение7 мин
Количество просмотров7.8K
Большинство владельцев смартфонов, планшетов и других гаджетов ежедневно потребляют огромное количество цифровой информации, включая медиа: изображения, музыку и, конечно же, видео. На последнем остановимся поподробнее. Очень важно не заставлять пользователей ждать контент, особенно когда приложением ежедневно пользуются миллионы людей. В приложении iFunny, над которым мы работаем, очень много видеоконтента, и мы подумали, что скачивать видео целиком — долго, неинтересно и не масштабируемо. А что, если в ближайшем будущем потребуется загрузить видео длительностью не в 30-60 секунд, а в 5-10 минут? Заставлять пользователя ждать полминуты, пока видео скачается? А если соединение плохое? Так и интерес к приложению потерять недолго. Поэтому мы решили сделать faststart-видео. Подробности под катом.


Стартуем
Всего голосов 30: ↑29 и ↓1+28
Комментарии1

Есть ли жизнь без архитектуры?

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

Основная часть кода большинства современных приложений наверняка была написана ещё во времена Android 4.0. Приложения пережили время ContentProvider, RoboSpice, различных библиотек и архитектурных подходов. Поэтому очень важно иметь архитектуру, которая будет оставаться гибкой не только к функциональным изменениям, но и готова к новым веяниям, технологиям и инструментам.


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

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

Как повысить производительность, используя бессерверную архитектуру

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

Фото: Jesse Darland с Unsplash

В этой статье речь пойдёт о том, как перенести процесс предварительной обработки изображений с сервера приложений на абсолютно бессерверную архитектуру платформы AWS.
Всего голосов 20: ↑18 и ↓2+16
Комментарии19

Сравнение Draft, Gitkube, Helm, Ksonnet, Metaparticle и Skaffold

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

В последнее время Kubernetes пользуется большой популярностью, и разработчики ищут дополнительные способы и методы для развёртывания приложений в кластере этой системы. Даже командная строка kubectl стала восприниматься как инструмент низкого уровня, при этом пользователи продолжают искать ещё более простые способы взаимодействия с кластером. Draft, Gitkube, Helm, Ksonnet, Metaparticle и Skaffold — вот лишь некоторые инструменты, помогающие разработчикам создавать и разворачивать приложения в Kubernetes.

Draft, Gitkube и Skaffold упрощают разработку приложений, позволяя разработчикам как можно быстрее запускать их в кластере Kubernetes. Helm и Ksonnet помогают в процессе развёртывания, т.к. могут определять готовность приложения к отправке, а также управлять выпуском новых версий, обработки различных кластеров и т. д. Metaparticle — необычный инструмент, который позволяет вам в рамках собственного кода работать с любыми форматами (YAML, dockerfile).

Итак, что же использовать в конкретной ситуации?

Давайте посмотрим.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии2

Как переехать с BuddyBuild на GitLab CI за 4 часа

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


Предыстория


Полтора года назад команда iOS FunCorp переехала на новый сервис для простой организации CI в iOS и Android-проектах.

До этого мы использовали CI на Bamboo, но с ним было много проблем, поэтому мы совсем отказались от него и перешли на BuddyBuild.

Он работал настолько просто, что можно было даже не знать, что такое CI и как заливать приложение в AppStore, а спокойно заниматься кодом, тестами и продуктовой разработкой.
Но времена поменялись, и BuddуBuild уже не тот, поэтому мы начали поиск альтернативы.
В этой статье мы расскажем о новом решении, которое выбрала наша команда, и дадим несколько скриптов для организации CI собственными силами.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии6

Меловой леттеринг для «чайников» на примере работы над арт-объектом

Время на прочтение11 мин
Количество просмотров19K
Это история личного опыта одного UX-дизайнера, который полюбил леттеринг ещё нечётко зная, что это такое.

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


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

Magic Leap выпустили SDK. Посмотрим, что внутри?

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

Magic Leap — стартап, занимающийся устройствами дополненной реальности. Компания привлекла уже 1,4 миллиарда долларов инвестиций от внушительных инвесторов, среди которых Qualcomm, Google и Alibaba Group. В 2016 году Forbes оценил Magic Leap в 4,5 миллиарда долларов. При этом публике до этого момента Magic Leap показывали только рендеры.


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

Установка Facebook image recognition package. Все грабли в одном месте

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

Недавно Facebook выпустила свой open-source-проект по распознаванию образов. Конечно же, его сразу захотелось пощупать, посмотреть, как он работает и что с его помощью можно получить. Мы решили разобраться с его установкой и опытным путём проверить, так ли легко его использовать, как об этом пишут в инструкции разработчики.


Этот проект не самый простой, поэтому возникает вопрос, зачем он нужен, если есть готовые фреймворки типа Keras, TensorFlow и Caffe, где, как говорится, «сел и поехал»? А ответ прост: нужен гибкий инструмент с возможностью расширения, с которым подружится Python. Научились мы отличать кита от чайки, но что нам это даст? IFunny серьёзно делает весёлое приложение и хочет удивлять пользователей новыми фичами, так почему бы не изучить такое богатое направление и применить?


Прочитав этот разбор, вы станете на шаг ближе к просветлению. Готовы? Тогда хватайте ручку, бумагу и приступаем!


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

Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии4

ComputerVision и с чем его едят

Время на прочтение7 мин
Количество просмотров12K
imageС развитием компьютерных мощностей и появлением множества технологий обработки изображений всё чаще стал возникать вопрос: а можно ли научить машину видеть и распознавать образы? Например, отличать кошку от собаки или даже бладхаунда от бассета? О точности распознавания говорить не приходится: наш мозг несравнимо быстрее может понять, что перед нами, при условии, что раньше мы получили достаточно сведений об объекте. Т.е. даже видя только часть собаки, мы можем с уверенностью сказать, что это собака. А если ты — собаковод, то легко определишь и породу собаки. Но как научить машину различать их? Какие существуют алгоритмы? А можно ли обмануть машину? (Спойлер: конечно можно! Точно так же, как и наш мозг.) Попробуем осмыслить все эти вопросы и по возможности ответить на них. Итак, приступим.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии1

Можно ли научить искусственный интеллект шутить?

Время на прочтение11 мин
Количество просмотров11K
imageВ последнее время машины одержали ряд убедительных побед над людьми: они уже лучше играют в го, шахматы и даже в Dota 2. Алгоритмы сочиняют музыку и пишут стихи. Учёные и предприниматели всего мира дают прогнозы по поводу будущего, в котором искусственный интеллект сильно превзойдёт человека. С большой вероятностью через несколько десятков лет мы будем жить в мире, в котором роботы не только водят автомобили и работают на заводах, но и развлекают нас. Одна из важных составляющих нашей жизни — юмор. Принято считать, что только человек может придумывать шутки. Несмотря на это, многие ученые, инженеры и даже простые обыватели задаются вопросом: можно ли научить компьютер шутить?

Компания Gentleminds, разработчик систем машинного обучения и компьютерного зрения, совместно с FunCorp попробовали создать генератор весёлых подписей к картинкам, используя базу мемов iFunny. Поскольку приложение англоязычное и используется преимущественно в США, подписи будут на английском. Подробности под катом.
Читать дальше →
Всего голосов 28: ↑25 и ↓3+22
Комментарии19

Люди не хотят чего-то действительно нового — они хотят привычное, но сделанное иначе

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

От переводчика: это довольно старая статья 2015 года, однако, на мой скромный вкус, она по-прежнему актуальна, как и многие другие материалы от Нира Эяля.
Если ваш новый продукт или сервис не набирает популярность, спросите себя: как найти мой ролл «Калифорния»?
Должен признать, что бенто-ланч едва ли является источником серьёзных бизнес-уроков. Однако, давайте взглянем на ролл «Калифорния» — понимание влияния этого знакового блюда японской кухни может помочь привести ваш продукт к успеху и избежать провала.
Читать дальше →
Всего голосов 40: ↑37 и ↓3+34
Комментарии40

Java и Project Reactor

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


Всем привет! Меня зовут Лёха, и я работаю бэкенд-разработчиком в FunCorp. Сегодня мы поговорим про реактивное программирование, библиотеку Reactor и немного про веб.


Реактивное программирование часто «подвергается упоминанию», но если вы (как и автор статьи) всё ещё не знаете, что это такое — устраивайтесь поудобнее, попробуем разобраться вместе.

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

Создание анимаций переходов между Activity в Android

Время на прочтение8 мин
Количество просмотров27K
Начиная с Android 4.4 в арсенале разработчиков появился дополнительный инструмент для создания анимаций — Transitions Framework. Изначально он предназначался для создания анимаций изменения состояния приложения путём манипулирования несколькими View. С выходом Android 5.0 набор доступных для использования анимаций был расширен, чтобы соответствовать представленной тогда же концепции Material Design.

Transitions Framework позволяет быстро и безболезненно создавать различные анимации. Поэтому в процессе работы над iFunny было невозможно пройти мимо этого инструментария. Вниманию читателей предлагается частный случай использования Transitions API — создание анимации перехода между Activity с эффектом «бесшовности».

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

Тренируемся на кошках: модификация коллекций и таблиц в iOS

Время на прочтение5 мин
Количество просмотров6.5K
image Для визуализации массивов произвольных данных Apple дала нам таблицы UITableView для одномерных визуализаций и коллекции UICollectionView для более сложных случаев. Например, в iFunny ежедневно десятки тысяч пользователей публикуют и рассылают «мемасики». Приложение постоянно работает с различными списками: мемы, пользователи, тэги, переписки и т.д.

Задача отображения какого-либо списка весьма распространённая, и это довольно легко программируется. Однако всё существенно усложняется, если этот список динамически меняется. Неожиданно поймать NSInternalInconsistencyException после очередного обновления содержимого таблицы или коллекции — удовольствие сомнительное. Давайте разберёмся, как этого избежать.
Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии1

Кастомные анимации в мобильном приложении

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

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

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

Кастомные (нестандартные) анимации — это большое поле для экспериментов и развития приложения. Какие знания понадобятся дизайнеру и какие проблемы могут поджидать в процессе разработки? Давайте рассмотрим эти вопросы на примере приложения iFunny.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии0

Интервью портала A Cloud Guru с Келси Хайтауэром: о DevOps, Kubernetes и serverless

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

image


Наверняка не все знают, что по нагрузке и числу пользователей iFunny является настоящим highload-сервисом. API обслуживает в пиках порядка 15000 запросов в секунду, система аналитики обрабатывает около 5 миллиардов событий в сутки, а для поддержки полного функционала работает до 400 инстансов EC2. Поэтому для приложения очень важно иметь сильную команду инженеров. Чтобы решать типичные проблемы высоконагруженных систем и улучшать свою работу каждый день, команда iFunny постоянно ищет новые инструменты и решения. И в этот раз невозможно было пройти мимо интервью одного из основных контрибьюторов мирового IT-сообщества — Келси Хайтауэра. Достойно перевода и вашего внимания.

Всего голосов 19: ↑18 и ↓1+17
Комментарии0

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

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

© The Awkward Yeti

Говорят, лень — двигатель прогресса. Это неправда. Лень ничего не двигает, потому что ей лень.
На самом деле, двигатель прогресса — это стремление к комфорту и к тому, чтобы для достижения результата приходилось совершать как можно меньше действий. А уже дальше можно либо быть ленивым, либо тратить освободившееся время на великие свершения, для которых мы все и рождены.

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

Давайте разбираться, как этого достичь.

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