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

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

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

Препарируем PHP. Как устроены while, foreach, array_walk и некоторые другие страшные слова

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


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

Исходники от master ветки (это сейчас 7.4 с вкраплениями 8)
Генератор опкодов от php 7.3.0.
Замеры производились на 7.3.6.

Дисклеймер для зануд: упоминание пары наносекунд и тактов процессора – это такой полемический приём под названием «гипербола».

Может быть, на самом деле, там десятки или сотни наносекунд и тысячи тактов, но это всё равно настолько малые величины, что необходимость экономить на них говорит о том, что что-то в вашем коде не так.
Читать дальше →
Всего голосов 62: ↑61 и ↓1+60
Комментарии26

Обработка ошибок во Vue

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

Весь прошлый год я работал с моим любимым фреймворком, Vue.js, описывал и представлял его. И я понял, что ещё не разобрался с обработкой ошибок во Vue. Мне бы хотелось объяснить это тем, что я пишу идеальный код, но мы все знаем, как обстоит дело в действительности. В течение нескольких последних дней я экспериментировал с различными методами обработки ошибок, которые предоставляет Vue, и решил поделиться своими открытиями. Очевидно, что этот обзор не охватит все возможные сценарии, но я надеюсь, что он вам поможет!
Всего голосов 45: ↑44 и ↓1+43
Комментарии5

GOTO Amsterdam

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


Привет, Хабр!

Под катом небольшой обзор конференции GOTO Amsterdam, которую мне довелось посетить в июне. И нет, выбрал я её не из-за локации, а потому что в программе были интересные мне доклады. Город был лишь приятной декорацией.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии8

Справочник по источникам событий в Rx

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


RxJava используется в большом количестве android-приложений, но при этом многие не знают других источников событий, кроме Observable и, может быть, Flowable. Они забывают о специализированных классах Single, Maybe и Completable, которые зачастую способны добавить больше ясности в код.

Под катом вас ждёт шпаргалка по источникам событий, которые существуют в RxJava.
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии4

Summer Droid Meetup

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


Привет! Приглашаем android-разработчиков на наш Summer Droid Meetup. 3-е августа, Сад Эрмитаж, Каретный ряд, д 3, стр 6, «Веранда 32.05». Начало в 12:00.

Программа митапа


«Сбор и анализ неординарных данных Android-приложения», Дмитрий Васильев, FunCorp


О докладе

Доклад про аналитику технических показателей приложения.

Цель — рассказать об инструментах сбора и анализа данных для мобильных приложений (и не только), которые мы используем. А также о том, какие технические характеристики приложения нуждаются в сборе и как их анализировать.

Поговорим о том:

  1. Как и куда мы осуществляем сбор данных по iFunny
  2. Какие технические данные собирать
  3. Как и где их анализировать
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии0

PHP в 2019: лучше, чем вы о нём думаете

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


Помните некогда популярную публикацию: «PHP: фрактал плохого дизайна»? Я, когда впервые её прочитал, работал в дурацком месте с большим количеством устаревших PHP-проектов. Она заставила меня задуматься: должен ли я уйти и заняться чем-то совершенно другим, нежели программирование.

К счастью для меня, вскоре я смог сменить место работы, и, что более важно, PHP сумел «немного» развиться со времён 5.* версий. А сегодня посредством этой статьи я хочу обратиться к людям, которые либо больше не программируют на PHP, либо застряли в устаревших проектах.
Читать дальше →
Всего голосов 95: ↑86 и ↓9+77
Комментарии99

Стоит ли высокое качество ПО затрат на его разработку?

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

Часто в процессе реализации проектов команды сталкиваются с вопросом: чему следует уделять больше внимания – выпуску новых фич или повышению качества кода? Обычно менеджеры делают выбор в пользу фич. Зачастую разработчики таким положением дел недовольны, считая, что им выделяется недостаточно времени для работы над архитектурой и качеством кода.

Закон Беттериджа гласит: «На любой заголовок, который заканчивается вопросительным знаком, можно ответить словом нет». Те, кто знаком со мной лично, знают, что я не разделяю эту мысль. Но в этой статье я хочу пойти ещё дальше и доказать, что постановка вопроса из заголовка этой статьи просто не имеет смысла. Такая постановка вопроса предполагает, что существует компромисс между затратами и качеством. И необходимо постоянно соблюдать баланс. В этой статье я докажу, что к миру разработки компьютерных систем этот компромисс не применим и, в действительности, создавать ПО высокого качества оказывается в конечном счёте дешевле.

Несмотря на то, что основная целевая аудитория статьи это разработчики, для её понимания не требуется специальных знаний. Мне бы хотелось чтобы эта статья принесла пользу всем, кто так или иначе связан с процессом разработки, а особенно менеджерам, которые формируют вектор развития продуктов.
Читать дальше →
Всего голосов 64: ↑59 и ↓5+54
Комментарии100

Новое в PHP 7.4

Время на прочтение5 мин
Количество просмотров79K
Новая версия PHP хоть и является минорной, но уже несёт множество новых, без преувеличения, крутых возможностей как для синтаксиса языка, так и для его производительности. Список новшеств не окончательный, но основные изменения уже внесены и приняты. Релиз планируется на декабрь 2019 года.
 

 
Ключевые изменения грядущей версии:

  • Типизированные свойства классов
  • Предзагрузка для улучшения производительности
  • Стрелочные функции для короткой записи анонимных функций
  • Присваивающий оператор объединения с null (??=)
  • Ковариантность/контравариантность в сигнатурах унаследованных методов
  • Интерфейс внешних функций, открывающий новые возможности для разработки расширений на PHP
  • Оператор распаковки в массивах

Подробнее об этих и других изменениях читайте под катом.
Узнать обо всех изменениях
Всего голосов 74: ↑71 и ↓3+68
Комментарии99

Творчество на iPad и iPhone

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


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

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

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

И сегодня я расскажу о музыкальных приложениях и гаджетах.
Читать дальше →
Всего голосов 39: ↑37 и ↓2+35
Комментарии16

5 ошибок в реализации push-уведомлений для мобильных приложений

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



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


* * *

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

В 2016 году, согласно исследованию Telefonica Research в Испании, пользователи мобильных телефонов получали в среднем 56 уведомлений в день. Сегодня это число, скорее всего, выросло. Поэтому к их разработке следует подходить с большим вниманием, иначе такой поток уведомлений может несомненно навредить пользовательскому опыту.
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии14

Поиск похожих изображений, разбор одного алгоритма

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


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

Существующее решение работает на довольно известной библиотеке, написанной на Python, — Image Match, основанной на работе «AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE» за авторством H. Chi Wong, Marshall Bern и David Goldberg.

По ряду причин было принято решение переписать всё на Kotlin, заодно отказавшись от хранения и поиска в ElasticSearch, который требует заметно больше ресурсов, как железных, так и человеческих на поддержку и администрирование, в пользу поиска в локальном in-memory кэше.

Для понимания того, как оно работает, пришлось с головой погружаться в «эталонный» код на Python, так как оригинальная работа порой не совсем очевидна, а в паре мест заставляет вспомнить мем «как нарисовать сову». Собственно, результатами этого изучения я и хочу поделиться, заодно рассказав про некоторые оптимизации, как по объёму данных, так и по скорости поиска. Может, кому пригодится.
Читать дальше →
Всего голосов 59: ↑56 и ↓3+53
Комментарии25

Гармония скриптов внутри Android приложения

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


Думаю, многие читатели хаба по android-разработке слышали, что Java позволяет в рантайме через ClassLoader модифицировать dex уже установленного приложения. С помощью этого можно в рантайме подгружать скомпилированный код и использовать его. Но Google к таким махинациям относится, мягко говоря, не слишком лояльно и банит уличённые в подобном приложения.

Однако есть альтернативные способы загрузки и выполнения скриптов на мобильном устройстве. За подробностями под кат!
Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии2

Про подсчёт битов, беззнаковые типы в Kotlin и про ситуации, когда экономия на спичках оправдана

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

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

Немного контекста


Приложение iFunny имеет дело с колоссальным объёмом графического и видеоконтента, а нечёткий поиск дубликатов является одной из очень важных задач. Сама по себе это большая тема, заслуживающая отдельной статьи, но сегодня я просто немного расскажу о некоторых подходах к обсчёту очень больших массивов чисел, применительно к этому поиску. Конечно же, у всех разное понимание «очень больших массивов», и тягаться с Адронным коллайдером было бы глупо, но всё же. :)

Если совсем коротко про алгоритм, то для каждого изображения создаётся его цифровая подпись (сигнатура) из 968 целых чисел, а сравнение производится путем нахождения «расстояния» между двумя сигнатурами. Учитывая, что объём контента только за два последних месяца составил порядка 10 миллионов изображений, то, как легко прикинет в уме внимательный читатель, — это как раз те самые «элементы в миллиардных объёмах». Кому интересно — добро пожаловать под кат.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии35

Видео докладов с FunTech QA-automation meetup

Время на прочтение1 мин
Количество просмотров6.5K
27 апреля команда FunTech Meetups провели первый митап по тестированию. Митап был полностью посвящён автоматизации, а спикеры из Mail.ru Group, Badoo, ivi.ru, Tinkoff.ru и FunCorp в своих докладах рассказывали, как и что они автоматизируют в своих компаниях. Предлагаем Вашему вниманию видео и слайды с этих выступлений.



«Автотесты, объединяющие подходы, платформы и сердца», Михаил Чирков, ivi.ru


Всего голосов 28: ↑28 и ↓0+28
Комментарии16

Мир! Труд! iOS! Да здравствует оффер за 1 день

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


Мы рады анонсировать hiring event для iOS-разработчиков в московском офисе FunCorp.

Всё просто: участник присылает нам тестовое задание до 13 мая, затем мы объявляем результаты участников и приглашаем авторов лучших решений к нам в офис 24 мая (где, собственно, и пройдёт наш hiring event).

В день мероприятия с каждым кандидатом мы проведём примерно 2-3 часа. За это время кандидат пройдёт четыре этапа собеседований (HR — Team — Lead — CTO). Далее определяем финалистов, которые получают оффер.

Задание, описание вакансии, тайминг и телеграм-чат поддержки мероприятия можно найти на странице ивента.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+20
Комментарии3

Обзор конференции SQA Days EU

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


Привет, Хабр! Меня зовут Алексей, я занимаюсь обеспечением качества в FunCorp. В конце марта я ездил в Ригу на SQA Days EU. Это первая конференция из линейки SQA Days, которая проводится за пределами СНГ. Программа выглядела многообещающе, а в списке докладчиков было много громких зарубежных имён. Ниже я поделюсь своим опытом и впечатлениями от этого путешествия.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+20
Комментарии0

Анонс FunTech QA-automation meetup

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

Всем привет! Приглашаем QA-инженеров на наш первый митап по тестированию, посвящённый автоматизации.

Программа


«Автотесты, объединяющие подходы, платформы и сердца», Михаил Чирков, ivi.ru


Преимущества и недостатки кроссплатформенных автотестов (в нашем случае речь о платформах android и web), сложности реализации и пути решения проблем при выстраивании автотестирования from scratch, screenplay vs pageobject. А может быть выбирать и не нужно?

Доклад будет интересен как тем, кто только стоит перед выбором писать моноплатформенные тесты или кроссплатформенные, так и тем, кто уже определился с выбором.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии1

Видео докладов с FunTech iOS-meetup #1

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


23 марта команда FunTech Meetups провела свой первый собственный iOS-meetup, с которого сегодня выкладываем видео докладов.

«Крутим RunLoop. Как устроена лента ВКонтакте», Александр Терентьев, VK


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

Анализ TSDB в Prometheus 2

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


База данных временных рядов (TSDB, time series database) в Prometheus 2 – это отличный пример инженерного решения, которое предлагает серьёзные улучшения в сравнении с хранилищем v2 в Prometheus 1 в плане скорости накопления данных и выполнения запросов, эффективности использования ресурсов. Мы внедряли Prometheus 2 в Percona Monitoring and Management (PMM), и у меня была возможность разобраться с производительностью Prometheus 2 TSDB. В этой статье я расскажу о результатах этих наблюдений.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+32
Комментарии2

Получи оффер за 1 день в backend-команду в День космонавтики

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


Всем привет!

FunCorp продолжает расширяться в Москве: мы открываем новое направление и ищем в backend-команду Senior PHP и Senior Java разработчиков.

Нам очень понравился формат однодневного Hiring event’a, который мы проводили для QA-отдела 16 марта, поэтому мы решили провести подобное мероприятие и для backend.

Итак, FunCorp Cosmic Hiring event пройдёт 12 апреля (пятница) в московском офисе. Ссылка на мероприятие.
Читать дальше →
Всего голосов 43: ↑34 и ↓9+25
Комментарии15