Привет, Хабр! Это Глеб Михеев — член ПК, отвечающий за программу широко известной в узких фронтендерских кругах конференции FrontendConf, автор канала «Уставший техдир» и знатный амбассадор работы с джунами. Эту статью я написал по мотивам выпуска моего подкаста Фичи Катятся, где мы с Серёжей Паращенко, автором канала Product Cult, обсудили продуктовый подход. Предлагаю разобраться в теме разочарования. Что именно разочаровывает пользователей, и как это можно изменить. Поехали!
Клиентская оптимизация *
Делаем сайты удобнее и приятнее
Новости
Как мы разработали и добавили «истории» в сервис для поиска работы за 3 месяца
Привет, Хабр! В этой статье расскажу, зачем приложению по поиску работы понадобился видеоконтент, как нам с командой удалось его реализовать и с какими сложностями мы столкнулись.
Для начала расскажу о нашей платформе. Идея ее создания возникла из наблюдений за знакомыми, работающими в различных сферах. Мы заметили, что есть потребность в сервисе, который помогал бы индивидуальным предпринимателям и малому бизнесу находить не только постоянных, но и сменных сотрудников. Основная цель заключалась в том, чтобы упростить поиск временной работы для тех, кто не стремится работать на постоянной основе, и предоставить возможность находить подработку людям с различными навыками и профессиями.
При этом поиском подработки мы не ограничились. Мы ввели на платформу механики check-in и check-out, подобные тем, что есть у таксистов Яндекса. С их помощью человек мог регистрировать время выхода на работу, различные паузы, а также время завершения смены.
Постепенно мы расширили функционал нашей HR-платформы, добавив возможность поиска постоянных сотрудников. Это решение стало естественным этапом в развитии сервиса, позволяя не только находить временные вакансии, но и удовлетворять потребности бизнеса в постоянном найме. Но и здесь мы не остановились, решив, что пора сделать платформу более медийной.
Как я создавал бесплатный сервис оптимизации изображений FlashImg.ru
Всем привет. В этом материале я расскажу как создавал беспслатный сервис оптимизации изображений FlashImg.ru
Я прождал 10 миллиардов тактов и дождался лишь экрана загрузки
Современное оборудование невероятно быстрое. M1 Max, на котором я пишу эту статью, работает с частотой 3,2 ГГц. То есть 3,2 МИЛЛИАРДА тактов в секунду. Однако Microsoft Teams требуется 3 секунды, чтобы открыть ссылку, и я отказываюсь верить, что для открытия ссылки требуется 9,6 МИЛЛИАРДА тактов. Очевидно, я упрощаю, но смысл остаётся прежним: как так получается, что оборудование становится быстрее, а приложения — только медленнее?
«Потому, что мы выполняем гораздо больше задач». Так считает любитель позднего капитализма. Позвольте объяснить.
Превосходный пример мощи современного «железа» — это видеоигры. Я могу симулировать огромные 3D-среды с физикой и освещением, полученным трассировкой лучей, при этом играть в реальном времени с друзьями из других штатов и даже стран; вполне доступный компьютер потребительского уровня выдаёт 124 миллионов пикселей в секунду1.
[1. 1080p при 60 FPS = 1920 × 1080 × 60 = 124416000]
Можно посмотреть и в обратном направлении: людям удаётся запускать DOOM на почти любом устройстве с процессором: на калькуляторах, iPod, фотокамерах. Невероятно маломощные, зачастую одноразовые устройства обладают достаточными вычислительными ресурсами, чтобы выполнять сверхсовременную на 1993 год игру. Это не особо удивляет, ведь прошло три десятка лет, но показывает, какой путь мы проделали.
Истории
Насколько быстры B-деревья по сравнению с хэш-таблицами?
Во многих «скриптовых» языках для стандартных ассоциативных структур данных используется хэш-таблица (hashmap) (объекты Javascript, словари Python и так далее). Хэш-таблицы обладают множеством раздражающих свойств:
- Уязвимость к hash flooding.
- В случае защиты от hash flooding случайными seed порядок итераций становится недетерминированным, что мешает при тестировании снэпшотов, создании воспроизводимых сборок и так далее.
- При вставке может требоваться рехэширование, что в наихудших случаях создаёт для больших хэш-таблиц ужасные задержки.
- Многократное увеличение больших распределений памяти без фрагментации сложно реализовать в целевых платформах wasm, потому что трюки с виртуальной памятью недоступны, а для страниц невозможно выполнить unmapping.
- Векторные команды в wasm ограничены, а команды AES отсутствуют. Это делает многие хэш-функции ещё более медленными.
Упорядоченные структуры данных наподобие B-деревьев не имеют этих недостатков. Обычно они медленнее хэш-таблиц, но меня удивило, насколько разнятся ожидания людей относительно их скорости.
От коммивояжера до эмпатичного ИИ: как менялась работа с обратной связью
Теоретически в нашей вселенной можно найти компанию, которую не интересовало бы мнение ее клиентов. Сделать это будет крайне сложно, тут придется постараться. И, конечно, такая компания вызовет недоумение: как она до сих пор умудряется существовать?!
Сбор и анализ обратной связи – важнейшая задача любого бизнеса вне зависимости от его сегмента рынка, поэтому тенденции нужно если не знать, то хотя бы понимать, откуда что берется. И особенно она значима для традиционного ритейла: ему приходится конкурировать не только с аналогичными компаниями, но и с популярными в народе маркетплейсами.
Поэтому так важен ЛЮБОЙ отзыв. Каждый – от простого лайка в соцсети до развернутого описания опыта взаимодействия с брендом – тщательно анализируется компанией. После чего вносятся изменения в бизнес-процессы и улучшается клиентский опыт.
Сбор и анализ обратной связи – достаточно сложный процесс. Тут бизнесу пригодятся специальные инструменты. Скоро расскажем, как именно мы определяем настроения клиентов и как полученные данные используем. А начнем с поста про то, как «эволюционировала» работа с обратной связью. Это и интересно, и позволит понять, как она будет развиваться в будущем, в том числе и с точки зрения технологий. После прочтения статьи написанной Александром Бурыгиным, Директором Дивизиона Поволжье Группы М.Видео-Эльдорадо, вы сможете блеснуть почерпнутой информацией среди коллег или на каком-нибудь совещании (это минимум), а кто-то даже обзаведется каким-нибудь полезным для работы инсайтом.
Улучшение производительности рендеринга с помощью CSS content-visibility
Недавно я обнаружил интересную ошибку в работе emoji-picker-element
:
Я работаю на экземпляре fedi с 19 тыс. пользовательских эмодзи [...], и когда я открываю панель выбора эмодзи [...], страница замирает как минимум на целую секунду, а после этого на некоторое время замирает общая производительность.
Если вы не знакомы с Mastodon или Fediverse, то на разных серверах могут быть свои собственные эмодзи, как в Slack, Discord и т.д. Наличие 19k (на самом деле ближе к 20k в данном случае) крайне необычно, но не является чем-то неслыханным.
Как я ускорил свое мобильное приложение BookDesk на React Native в 3 раза?
strlcpy, или как CPU противоречат здравому смыслу
Один из моих старых постов о strlcpy недавно вызвал обсуждения на различных форумах. Вероятно, с этим как-то связан выпуск новой версии POSIX. Многие авторы приводили один контраргумент, который я слышал и раньше:
«В общем случае, когда исходная строка умещается в конечный буфер, strlcpy
будет обходить строку только один раз, а strlen + memcpy
будут обходить её дважды».
Под этим аргументом скрывается допущение о том, что однократный обход строки выполняется быстрее. И, честно говоря, это вполне разумное допущение. Но справедливо ли оно? Об этом мы и поговорим в статье.
Два потока, одно ядро: как устроена одновременная многопоточность
Одновременная многопоточность (Simultaneous multithreading, SMT) — это функция, позволяющая процессору одновременно обрабатывать команды из двух разных потоков. Но задавались ли вы когда-нибудь вопросом, как это работает? Как процессор отслеживает два потока и распределяет ресурсы между ними?
В статье я объясню, как устроена эта функция. Понимание внутреннего устройства SMT поможет вам решить, подходит ли она для ваших продакшен-серверов. Иногда SMT способна резко повысить производительность системы, но в некоторых случаях она приводит к замедлению. Знание подробностей позволит вам сделать правильный выбор.
Примечание: основная часть изложенного в статье относится к реализации SMT компании Intel, также называемой гипертредингом (hyper-threading). Она основана на научной статье компании, опубликованной в 2002 году.
Оптимизация производительности Flutter приложений
Привет, Хабр!
У меня есть несколько советов по оптимизации производительности приложений на Flutter. Хотя фреймворк и имеет высокую производительность по умолчанию, неправильное написание кода может привести к проблемам с быстродействием. Давайте рассмотрим несколько важных моментов, которые помогут вам написать быстрый и эффективный код.
CPP — custom product page для мобильных приложений
CPP - custom product page для мобильных приложений.
Привет, коллега! Пора обсудить такую тему, как CPP. В рядах прошаренных мобильщиков этот формат рекламной кампании уже давно используется для снижения стоимости закупки. Но если ты пропустил эту тему, то тебе к нам — читать статью и просвещаться.
Зачем лабораториям кастомные решения и как мы их создаем
Лаборатории могут работать на типовых коробочных решениях, которыми пользуется большинство компаний на рынке. Но если создать кастомное, заказчик получит конкурентное преимущество и хорошую возможность стать лидером в своей нише. Он сможет выполнять больше заказов за меньшее время, а значит, зарабатывать больше денег.
Ближайшие события
Factorio: оптимизации 2.0
▍ Оптимизация роботов (автор: Rseding)
За годы работы над Factorio я профилировал множество файлов сохранений и регулярно встречал сохранёнки, где большая часть времени обновления тратится на логистику и/или строительных дронов. В этом нет ничего нового, но наряду с дронами существуют и дронстанции (в больших количествах).
Типичная фабрика с кучей дронстанций (Roboport)
Дронстанции никогда не были «медленными», но они всегда присутствуют на карте, и у игроков есть мотивация строить их в больших количествах; к тому же, их будет ещё больше в грядущем Space Age, где нужно будет многое делать удалённо. Сохранение, полученное после последней сессии плейтестинга, снова показало, что они отнимают небольшое, но ненулевое количество времени, поэтому я снова задумался о них.
Как мы помогли клиентам автоматически настраивать программы для работы с КЭП
Устанавливать и настраивать программы для работы с электронной подписью можно разными способами. Когда-то мы это делали с помощью CD-дисков, а потом поняли, что это долго и неудобно. Тогда мы разработали решение, которое позволяет клиентам Удостоверяющего центра и других продуктов Контура устанавливать и настраивать программы без каких-либо действий со стороны пользователя и практически без инструкций. И имя ему — Контур.Веб-диск.
Я Андрей Чеканов, ведущий инженер-программист и разработчик в Контуре. В статье расскажу, как мы создавали это решение и почему не все получилось сразу.
Насколько быстр Javascript? Симулируем 20 миллионов частиц
Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.
Поехали.
Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.
Профайлер памяти. Зачем он нужен и как использовать
Профайлер памяти — это инструмент, который анализирует работу конкретного приложения, помогает выявить утечки памяти, показывает точное количество использованной памяти и количество выделений. Если программа потребляет больше памяти, чем ожидалось, то профайлер покажет все выделения ресурсов и позволит определить, почему и где они выделяются.
Профайлер можно использовать не только в разработке, но и в системном администрировании, чтобы отслеживать рабочие процессы конкретных приложений, скриптов и задач.
Юнит-экономика: база простыми словами с примерами
🤬 ARPC = (AvP – COGS) × APC — 1s COGS
🤬 LTV = (AVp − VC × AVp) × RPR × Lifetime
🤬 ARPPU = (AVp − COGS) × APC − 1COGS
Так вот: эта статья не о формулах (👍), а об основных принципах и подходах в работе с юнит-экономикой, чтоб ты смог разобраться и начать применять на практике.
Прежде чем делать выводы или переходить к практике, дочитай эту статью до конца. Каждый раздел статьи сам по себе не передает полного смысла и не раскрывает всю картину того, что я хочу в ней донести.
Проблемы нормализации НСИ и их решения
При эксплуатации учетных систем пользователи часто жалуются на «бардак» в справочниках: элементов слишком много, они задублированы, непонятно, какой элемент использовать, часть из них не используется вообще. При этом пользователи не могут ответить на вопрос, кем и для чего эти элементы были заведены. Если возникнет необходимость в отражении, например, нового факта хозяйственной деятельности, то пользователь часто «идет по пути наименьшего сопротивления» – заводит новый элемент справочника. Несмотря на то, что для этих целей уже был зарегистрирован элемент ранее, но о его наличии пользователь не знает или не хочет разбираться со старым «наследством» и проблема все более и более усугубляется.
Меня зовут Алексей Бырко, я консультант-эксперт в департаменте 1С «КОРУС Консалтинг» и в своей работе я часто сталкиваюсь с потребностью нормализации НСИ на проектах. Поделюсь своим опытом, почему это происходит и что с этим делать.
Ужасы работы с Интернетом в Антарктиде (и как это исправить), часть 2
В этой части я приведу ещё несколько примеров того, как нам мешает скачивание обновлений внутри приложений.
Пример 1: обновления macOS
Ни для кого не секрет, что обновления macOS огромны. Иногда это раздражает даже дома, но на Южном полюсе ситуация гораздо хуже.
Размер патча минорного обновления macOS обычно имеет размер от 0,5 до 1,5 гигабайтов. Патчи с крупными обновлениями иногда занимают до шести с лишним гигабайтов. Дополнительные инструменты, например Xcode, часто весят несколько гигабайтов.
Вклад авторов
sunnybear 1587.8ru_vds 430.6Lorents 364.0Leono 281.0olegbunin 239.0Antiever 224.0alexeimoisseev 201.0Mgrin 175.0duran-duran 173.0sirus 172.0