Вы когда-нибудь писали адаптеры для Keychain или NSUserDefaults? Они полностью состоят из однотипных сеттеров и геттеров. Предлагаю написать логику один раз, предоставив остальное рантайму. За реализацией прошу под кат.
Компания FUNCORP временно не ведёт блог на Хабре
Внедрение зависимостей в Go
Недавно я создал небольшой проект на языке Go. После нескольких лет работы с Java я был сильно удивлён тем, как вяло внедрение зависимостей (Dependency Injection, DI) применяется в экосистеме Go. Для своего проекта я решил использовать библиотеку dig от компании Uber, и она меня по-настоящему впечатлила.
Я обнаружил, что внедрение зависимостей позволяет решить множество проблем, с которыми я сталкивался в работе над Go-приложениями: злоупотребление функцией
init
и глобальными переменными, чрезмерная сложность настройки приложений и др.В этой статье я расскажу об основах внедрения зависимостей, а также покажу пример приложения до и после применения этого механизма (посредством библиотеки
dig
).Java и Project Reactor. Эпизод 2
Привет! Удивительно, но первая часть статьи даже кому-то понравилась.
Отдельное спасибо за ваши отзывы и комментарии. У меня для вас плохая хорошая новость: нам ещё есть о чём поговорить! А если точнее, то о некоторых деталях работы Reactor.
«Стартуем! Я сказала: стартуем!», или как мы реализовывали работу с faststart-видео под Android
Есть ли жизнь без архитектуры?
Основная часть кода большинства современных приложений наверняка была написана ещё во времена Android 4.0. Приложения пережили время ContentProvider, RoboSpice, различных библиотек и архитектурных подходов. Поэтому очень важно иметь архитектуру, которая будет оставаться гибкой не только к функциональным изменениям, но и готова к новым веяниям, технологиям и инструментам.
В этой статье я хотел бы рассказать об архитектуре приложения IFunny, о принципах, которых мы придерживаемся, и о том, как решаются основные проблемы, возникающие в процессе разработки.
Как повысить производительность, используя бессерверную архитектуру
Фото: Jesse Darland с Unsplash
В этой статье речь пойдёт о том, как перенести процесс предварительной обработки изображений с сервера приложений на абсолютно бессерверную архитектуру платформы AWS.
Сравнение Draft, Gitkube, Helm, Ksonnet, Metaparticle и Skaffold
В последнее время Kubernetes пользуется большой популярностью, и разработчики ищут дополнительные способы и методы для развёртывания приложений в кластере этой системы. Даже командная строка
kubectl
стала восприниматься как инструмент низкого уровня, при этом пользователи продолжают искать ещё более простые способы взаимодействия с кластером. Draft, Gitkube, Helm, Ksonnet, Metaparticle и Skaffold — вот лишь некоторые инструменты, помогающие разработчикам создавать и разворачивать приложения в Kubernetes.Draft, Gitkube и Skaffold упрощают разработку приложений, позволяя разработчикам как можно быстрее запускать их в кластере Kubernetes. Helm и Ksonnet помогают в процессе развёртывания, т.к. могут определять готовность приложения к отправке, а также управлять выпуском новых версий, обработки различных кластеров и т. д. Metaparticle — необычный инструмент, который позволяет вам в рамках собственного кода работать с любыми форматами (YAML, dockerfile).
Итак, что же использовать в конкретной ситуации?
Давайте посмотрим.
Как переехать с BuddyBuild на GitLab CI за 4 часа
Предыстория
Полтора года назад команда iOS FunCorp переехала на новый сервис для простой организации CI в iOS и Android-проектах.
До этого мы использовали CI на Bamboo, но с ним было много проблем, поэтому мы совсем отказались от него и перешли на BuddyBuild.
Он работал настолько просто, что можно было даже не знать, что такое CI и как заливать приложение в AppStore, а спокойно заниматься кодом, тестами и продуктовой разработкой.
Но времена поменялись, и BuddуBuild уже не тот, поэтому мы начали поиск альтернативы.
В этой статье мы расскажем о новом решении, которое выбрала наша команда, и дадим несколько скриптов для организации CI собственными силами.
Меловой леттеринг для «чайников» на примере работы над арт-объектом
Я расскажу о том, что такое леттеринг в современном дизайне на примере своей работы над арт-объектом; о трудностях, с которыми я столкнулась и как их решила; о грифельной краске и меловых маркерах. А ещё почему это «хорошо для бизнеса». И будет немного мотивации для дизайнеров, которые хотели бы встать со стула, но не знают как.
Magic Leap выпустили SDK. Посмотрим, что внутри?
Magic Leap — стартап, занимающийся устройствами дополненной реальности. Компания привлекла уже 1,4 миллиарда долларов инвестиций от внушительных инвесторов, среди которых Qualcomm, Google и Alibaba Group. В 2016 году Forbes оценил Magic Leap в 4,5 миллиарда долларов. При этом публике до этого момента Magic Leap показывали только рендеры.
Установка Facebook image recognition package. Все грабли в одном месте
Недавно Facebook выпустила свой open-source-проект по распознаванию образов. Конечно же, его сразу захотелось пощупать, посмотреть, как он работает и что с его помощью можно получить. Мы решили разобраться с его установкой и опытным путём проверить, так ли легко его использовать, как об этом пишут в инструкции разработчики.
Этот проект не самый простой, поэтому возникает вопрос, зачем он нужен, если есть готовые фреймворки типа Keras, TensorFlow и Caffe, где, как говорится, «сел и поехал»? А ответ прост: нужен гибкий инструмент с возможностью расширения, с которым подружится Python. Научились мы отличать кита от чайки, но что нам это даст? IFunny серьёзно делает весёлое приложение и хочет удивлять пользователей новыми фичами, так почему бы не изучить такое богатое направление и применить?
Прочитав этот разбор, вы станете на шаг ближе к просветлению. Готовы? Тогда хватайте ручку, бумагу и приступаем!
И да, можно смело считать эту статью мануалом по установке, причём пошаговым, но можно и обращаться к ней в случае, если вылезла ошибка, а Google отводит глаза в сторону или выдаёт в поисковике несусветную чушь.
ComputerVision и с чем его едят
Можно ли научить искусственный интеллект шутить?
Компания Gentleminds, разработчик систем машинного обучения и компьютерного зрения, совместно с FunCorp попробовали создать генератор весёлых подписей к картинкам, используя базу мемов iFunny. Поскольку приложение англоязычное и используется преимущественно в США, подписи будут на английском. Подробности под катом.
Люди не хотят чего-то действительно нового — они хотят привычное, но сделанное иначе
От переводчика: это довольно старая статья 2015 года, однако, на мой скромный вкус, она по-прежнему актуальна, как и многие другие материалы от Нира Эяля.
Если ваш новый продукт или сервис не набирает популярность, спросите себя: как найти мой ролл «Калифорния»?Должен признать, что бенто-ланч едва ли является источником серьёзных бизнес-уроков. Однако, давайте взглянем на ролл «Калифорния» — понимание влияния этого знакового блюда японской кухни может помочь привести ваш продукт к успеху и избежать провала.
Java и Project Reactor
Всем привет! Меня зовут Лёха, и я работаю бэкенд-разработчиком в FunCorp. Сегодня мы поговорим про реактивное программирование, библиотеку Reactor и немного про веб.
Реактивное программирование часто «подвергается упоминанию», но если вы (как и автор статьи) всё ещё не знаете, что это такое — устраивайтесь поудобнее, попробуем разобраться вместе.
Создание анимаций переходов между Activity в Android
Transitions Framework позволяет быстро и безболезненно создавать различные анимации. Поэтому в процессе работы над iFunny было невозможно пройти мимо этого инструментария. Вниманию читателей предлагается частный случай использования Transitions API — создание анимации перехода между Activity с эффектом «бесшовности».
Тренируемся на кошках: модификация коллекций и таблиц в iOS
Задача отображения какого-либо списка весьма распространённая, и это довольно легко программируется. Однако всё существенно усложняется, если этот список динамически меняется. Неожиданно поймать NSInternalInconsistencyException после очередного обновления содержимого таблицы или коллекции — удовольствие сомнительное. Давайте разберёмся, как этого избежать.
Кастомные анимации в мобильном приложении
Современная мобильная аудитория с каждым годом предъявляет всё более высокие требования к качеству приложений и сервисов. И в первую очередь это касается проектирования взаимодействий и мобильных анимаций.
Каждый день мы обмениваемся сообщениями, используем социальные сети, мессенджеры, и многие из этих сервисов содержат десятки нестандартных продуманных анимаций.
Кастомные (нестандартные) анимации — это большое поле для экспериментов и развития приложения. Какие знания понадобятся дизайнеру и какие проблемы могут поджидать в процессе разработки? Давайте рассмотрим эти вопросы на примере приложения iFunny.
Интервью портала A Cloud Guru с Келси Хайтауэром: о DevOps, Kubernetes и serverless
Наверняка не все знают, что по нагрузке и числу пользователей iFunny является настоящим highload-сервисом. API обслуживает в пиках порядка 15000 запросов в секунду, система аналитики обрабатывает около 5 миллиардов событий в сутки, а для поддержки полного функционала работает до 400 инстансов EC2. Поэтому для приложения очень важно иметь сильную команду инженеров. Чтобы решать типичные проблемы высоконагруженных систем и улучшать свою работу каждый день, команда iFunny постоянно ищет новые инструменты и решения. И в этот раз невозможно было пройти мимо интервью одного из основных контрибьюторов мирового IT-сообщества — Келси Хайтауэра. Достойно перевода и вашего внимания.
Санаторий для мозга: как не заставлять пользователя напрягаться
© The Awkward Yeti
Говорят, лень — двигатель прогресса. Это неправда. Лень ничего не двигает, потому что ей лень.
На самом деле, двигатель прогресса — это стремление к комфорту и к тому, чтобы для достижения результата приходилось совершать как можно меньше действий. А уже дальше можно либо быть ленивым, либо тратить освободившееся время на великие свершения, для которых мы все и рождены.
Думая о комфорте, мы представляем себе мягкую кровать, тёплую погоду, приятные звуки и прочие осязаемые телесные радости. Однако нельзя забывать, что наш мозг тоже нуждается в подобных приятностях (стоит заметить, что эту мысль мне подсказал как раз-таки мозг, так что, возможно, он просто хитрит).
Этот замечательный орган и сам стремится к тому, чтобы не заниматься рутинными делами, поэтому мы чистим зубы, вставляем ключи в замки и встаём с кресла не очень-то задумываясь об этих действиях. И важно помнить, что одна из главных задач дизайнеров и продуктологов состоит именно в том, чтобы обеспечить мозгу пользователя подобный комфорт, или, говоря поэтично, снизить когнитивную нагрузку.
Давайте разбираться, как этого достичь.