Pull to refresh
-5
0

Пользователь

Send message

Продаём iOS-подписки по науке: нобелевский лауреат Канеман и поведенческая экономика

Level of difficultyMedium
Reading time64 min
Views2K

Монетизация мобильных приложений через подписки — одна из самых непростых задач в современной iOS-разработке. Даже качественное приложение с полезным функционалом и сильным UX может столкнуться с тем, что конверсия в платную подписку остаётся на уровне 1–2%. Почему? Потому что пользователи принимают решения не только рационально. Их поведение практически ВСЕГДА определяется когнитивными искажениями, о которых большинство создателей приложений даже не догадывается.

Считаете, что это не влияет на вас? Уверены? Значит, вы уже под воздействием иллюзии. Даже если вам действительно удаётся распознать некоторые когнитивные ловушки — не забывайте: вы не репрезентативны. Ваш опыт — исключение, а не правило. Большинство пользователей реагирует именно так, как описано ниже.

Эта статья поможет вам взглянуть на процесс покупки подписки через призму поведенческой экономики и психологии принятия решений. Мы не будем гадать, «что сработает». Вместо этого разберём проверенные научные эффекты и эвристики (28 шт), описанные в работах Даниэля Канемана — психолога, лауреата Нобелевской премии по экономике — и покажем, как они могут увеличить ваши продажи именно в iOS-приложениях с подписочной моделью.

Хочу узнать все об увеличении подписок

Разбираем архитектуру. Часть 1. Чистая архитектура и её корни: история и взаимосвязи

Level of difficultyEasy
Reading time24 min
Views13K

Предисловие

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

Я решил написать серию статей, посвящённых различным аспектам проектирования программных систем, но первоначальной идеей было показать архитектурное решение моего pet-проекта на FastAPI — пример реализации «чистой архитектуры» с использованием современного стека: Python3.13, FastAPI, Uvicorn, Nginx, PostgreSQL, Alembic, Celery, Redis, Pytest, Filebeat, Logstash, Elasticsearch, Kibana, Prometheus, Grafana, Docker и Docker Compose.

Однако по мере проработки деталей стало очевидно: чтобы обсуждать структуру приложения предметно и аргументированно, необходимо сначала заложить общую теоретическую основу, чтобы читатель понимал, о чем речь.
Так родилась идея вынести базовые концепции архитектуры и проектирования в отдельную публикацию — не перегружать материал сразу всем, а построить серию объёмных, но логично связанных статей.

Читать далее

Jetpack Compose для Android TV: как происходит перемещение фокуса

Reading time10 min
Views1.5K

Привет, Хабр! Меня зовут Сергей Захаров, я разработчик в онлайн-кинотеатре KION. Jetpack Compose постепенно становится стандартом разработки UI для Android, и Android TV не остался в стороне. Вместо устаревшего и громоздкого Leanback теперь есть гибкий и мощный фреймворк, который обещает упростить разработку.

Однако на Android TV ключевую роль играет управление фокусом — без него невозможна навигация. Как же Compose справляется с этой задачей? Достаточно ли он удобен для больших TV-проектов, или лучше ограничиться им в мобильных приложениях? В этом и следующих материалах я отвечу на эти вопросы на примере конкретных кейсов. 

Это первый пост моего цикла про работу с фокусом в Jetpack Compose. В нем я расскажу, как в Jetpack Compose перемещается фокус, рассмотрю используемые при этом компоненты, покажу их плюсы и минусы, а также дам рекомендации по их применению в приложениях для Android TV.

Читать далее

Параметры конфигурации мастера, отслеживаемые репликами PostgreSQL

Level of difficultyMedium
Reading time9 min
Views1.8K

Значения восьми параметров конфигурации мастера (primary, ведущего сервера PostgreSQL) сохраняются в управляющих файлах и изменения их значений передаются через журнал (WAL) на реплики. Если реплика открыта для запросов (hot_standby=on), то значения пяти числовых параметров на реплике должны быть не меньше, чем на мастере, иначе процесс startup прекратит накат (replay) журнальных записей. А после рестарта экземпляры реплик не запустятся. В статье рассматриваются эти параметры особенности изменения их значений.

Значения пяти числовых параметров конфигурации, сохраненных в управляющем файле кластера, можно посмотреть утилитой pg_controldata:

Читать далее

Обновление Кибер Бэкапа — обзор новинок в версии 17.3

Reading time6 min
Views1.6K

В середине апреля вышло обновление нашей системы резервного копирования — Кибер Бэкап 17.3. В этой версии мы обеспечили рывок в производительности системы: относительно максимального числа защищаемых источников данных, дальнейшего развития возможностей работы агентов в многопоточном и кластерном режимах, а также гранулярного восстановления баз данных PostgreSQL.

Помимо этого мы развили защиту платформ виртуализации VMware, oVirt и подобных систем, а также OpenStack. Мы доработали механизмы резервного копирования и восстановления Kubernetes, расширили возможности аудита событий безопасности и интеграции с системами SIEM, внедрили ряд других улучшений.

Читать далее

Язык твой — друг твой. Дообучаем языковые модели, собираем корпуса, делаем книги на малоресурсных языках

Level of difficultyMedium
Reading time14 min
Views8.6K

📌 градиент обреченный

Всем привет. Хочу поделиться с сообществом небольшим опытом и наработками для исследования и развития языков, в особенности малых. Для большинства таких языков нет ни систем машинного перевода, ни виртуальных ассистентов, ни других языковых моделей. Основная проблема тут в недостатке данных и отсутствии большого интереса у крупных компаний в их развитии. Однако есть достаточно большое число людей, которым дорог их язык, и которые прикладывают усилия по их сохранению и развитию. Предлагаю обсудить это и познакомиться с инструментами, которые помогут не только собирать данные, но и делать на их основе полезные вещи, типа паралельных книг для изучения языка и систем машинного перевода.

Мы научимся:

1. Дообучать мультиязычные языковые модели, переводящие текст в векторное представление (эмбеддинги).

2. Использовать их для выравнивания текстов библиотекой lingtrain-aligner, извлекая из текстов параллельные корпуса.

3. Загружать датасеты и модели на HuggingFace, чтобы это было доступно всем.

4. Создавать из выравнивания параллельные книги для изучения языков.

5. Начнем собирать датасет инструкций на малых языках, чтобы языковые модели и виртуальные смогли понимать и общаться на чувашском, якутском, башкирском и других языках.

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

Читать далее

lazyjournal — ленивый интерфейс для поиска и анализа логов

Level of difficultyEasy
Reading time7 min
Views4.7K

Ранее, я уже писал статью о различных способах, которые мне приходилось использовать для чтения логов, и к какому решению в итоге пришел. Хотя прошло не так много времени, с тех пор приложение не переставало развиваться. Узнав о том, что на Хабре проходит сезон Open source, мне показалось это отличным поводом подчеркнуть, что именно стало причиной для создания данного инструмента, а также рассказать немного подробнее про основные и новые функции.

Читать далее

XML vs Compose, не можете решить? Часть 1: Введение

Level of difficultyMedium
Reading time2 min
Views3.3K

Jetpack Compose — не просто «альтернатива XML». Это совершенно другой парадигмальный сдвиг в том, как Android отрисовывает и управляет UI. Но чтобы по‑настоящему понять, чем Compose отличается от привычного XML, давайте посмотрим, что происходит под капотом в каждом случае.

Читать далее

Lingtrain. Приложение для создания мультиязычных книг и параллельных корпусов

Reading time13 min
Views11K

📌 градиент обреченный

Хочу показать, как создать мультиязычный параллельный корпус и книги при помощи моего пет-проекта.

Для примера возьмем 10 редакций "Мастера и Маргариты" Михаила Булгакова (ru, uk, by, en, fr, it, es, de, hu, zh). Сначала выровняем девять переводов с оригиналом, а затем выровняем все вместе. Получим параллельный корпус на 10 языках и много красивых книг. Приступим.

Код я оформил в виде веб-приложения, основная логика которого выполняется при помощи библиотеки lingtrain-aligner. Выравнивать можно прямиком из кода на python, либо через UI. В приложении будет удобней разрешать конфликты и там есть редактор, позволяющий корректировать получающийся корпус плюс дополнительные опции по верстке. Код у проекта открытый, можно посмотреть как все работает внутри. Приступим.

Читать далее

Организация ML-проекта с примерами

Level of difficultyMedium
Reading time5 min
Views2.5K

Организация - это важно. То же относится к ML-проектам. Из каких компонент он должен состоять? Как оформить проект, чтобы всего хватало и было удобно это масштабировать? Рассмотрим организацию по шаблону CookieCutter с примерами.

Читать далее

Аккаунт разработчика Google Play Console и Apple Developer. Как создать из России 2025. Пошаговая инструкция регистрации

Level of difficultyEasy
Reading time12 min
Views6.6K

В 2024 году помогли с регистрацией аккаунта разработчика в Google Play и App Store десяткам компаний. Казалось бы — что такого? Вводишь данные и готово. Но лицензия платная, а на пользователях РФ санкции, что доставляет определенные неудобства. Как в таких реалиях создать аккаунт, чтобы опубликовать мобильное приложение — рассказываем в статье.

Читать далее

Переходим с Microsoft Active Directory на РЕД АДМ. Два подхода к миграции ИТ-инфраструктуры

Reading time8 min
Views8.3K

Привет, Хабр! В сегодняшнем материале рассмотрим два подхода к переносу ИТ-инфраструктуры на отечественную систему централизованного управления. В комплекте: обзор возможностей и пошаговая инструкция, как подготовить домен к миграции, установить доверительные отношения или создать параллельную инфраструткуру.

Читать далее

Что в черном ящике, или Как разработчику понять, что требует оптимизации в БД PostgreSQL

Level of difficultyEasy
Reading time20 min
Views11K

Привет! Меня зовут Дмитрий Руденко, я из команды Databases Т-Банка. В последние годы наблюдается тенденция к переходу на Postgres со стороны многих команд и компаний, что приводит к увеличению количества Postgres-баз данных, требующих эффективного мониторинга и управления. 

Мы достигли впечатляющего масштаба — почти 10 000 работающих экземпляров PostgreSQL, с которыми работают более 2 000 команд. Каждый из этих инстансов обслуживает уникальные рабочие нагрузки, разработанные командами с различными подходами к архитектуре, используемыми фреймворками и паттернами проектирования.

Мы пришли к созданию общей системы мониторинга баз данных Postgres, предоставляющей пользователю в простом и понятном виде данные о состоянии инстанса. В этой статье я расскажу о нашем видении визуального представления информации для пользователя и о созданной нами группе дашбордов для наблюдения за базами данными Postgres. Вы увидите, что накопительная статистика Postgres совместно с Prometheus и Grafana способны творить чудеса. 

Читать далее

Model Context Protocol, обзор и практика

Level of difficultyEasy
Reading time9 min
Views9.5K

В конце 2024г компания Anthropic, создатель LLM-моделей Claude, опубликовала стандарт Model Context Protocol и выпустила статью, посвящённую видению Anthropic того, как строить эффективные системы с AI-агентами: Building effective agents (хорошая вводная статья по паттернам агентских систем).

Прошло всего 3 месяца, и к этому моменту поддержка MCP уже появилась почти во всех AI- вайб-IDE, во многих LLM-интерфейсах, были выпущены тысячи MCP-серверов от компаний и сообщества.
Самое время написать о том, что это такое :)

Читать далее

Wolfram Natural Language Understanding или спасение для студентов

Level of difficultyMedium
Reading time12 min
Views5.8K

Wolfram — крутая штука. Сколько школьников получило из-за него пятерку, а сколько студентов зачет, не сосчитать...

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

Хоть скопируй лабораторную по физике...

Поэтому главной загадкой этого сервиса становится перевод неподготовленной информации студента в удобоваримый для алгоритмов вариант данных.

Языковая модель (NLU) — разгадка.

Читать далее

Построение высоконагруженного WebSocket-сервера на Kotlin + Ktor: архитектура и лучшие практики

Level of difficultyMedium
Reading time24 min
Views3K

WebSocket-сервер на Ktor – это эффективное решение для реального времени, позволяющее держать тысячы двунаправленных соединений без создания потоков на каждое подключение. Благодаря корутинам Kotlin Ktor упрощает реализацию WebSocket-коммуникаций в реальном времени (Ktor 101: Efficient JVM HTTP Toolkit | The IntelliJ IDEA Blog). В данной статье мы разберём архитектуру такого сервера, использование корутин и каналов для масштабируемой обработки сессий, поддержку комнат (чатов, игровых лобби, сигналинга), управление состоянием клиентов (heartbeat, реконнекты), масштабирование на несколько узлов, интеграцию с внешними сервисами, а также приведём примеры кода и практические советы из боевого опыта.

Читать далее

TACACS in da Сloud

Level of difficultyHard
Reading time25 min
Views11K

Вот есть у вас сотня коммутаторов или маршрутизаторов. Это много или мало?

Ну вроде как мало. А если надо на всех разом нового сотрудника добавить? А потом удалить уволившегося? А потом поротировать скомпрометированные пароли и ключи?

И тут приходит служба безопасности, которая, во-первых, хочет централизованно контролировать, у кого какие доступы, во-вторых, актуальны ли они на железках, в-третьих, ещё и смотреть, кто что когда запускал, да ещё и разрешать или запрещать это делать («Просто продолжай, не останавливайся» © СИБ).

Ну вот совсем уже и не мало. Чувствуете, чем это пахнет? Даааа, TACACS-ом.

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

Читать далее

Переключение между контекстами убивает эффективность разработчиков на корню

Reading time10 min
Views30K

Я программист. Меня всё время отвлекают, и я хочу об этом поговорить.

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

Каждое короткое сообщение, которое вы отправляете коллеге в Slack, отнимает у него 23 минуты продуктивной работы. И это далеко не всё.

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

Читать далее

Бесплатное обучение фулстек-разработке веб-сервиса с нуля по видео-урокам с исходным кодом и поддержкой

Level of difficultyMedium
Reading time7 min
Views44K

TLDR. Я примерно год создавал курс из 141 урока. Курс получился хороший, все кто проходят рады и пишут положительные отзывы. Я пытался его продавать, в лучшем случае у меня получалось отбивать рекламу в ноль. Короче, я хороший разработчик, я хорошо доношу материал, но я плохой маркетолог. Все эти таргреты, ретаргеты, воронки, шморонки — тоска унылая. Мне гораздо веселее и понятнее заработать на создании и запуске IT-продуктов, чему я и учу в этом учебнике. Так что пишу эту статью, чтобы сообщить вам о существовании моего курса и предложить всем желающим абсолютно бесплатно получить от него пользу 🙂

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

Читать далее

Валидация полей формы в андроид приложении и не только

Reading time15 min
Views1.2K

Регулярно возникают задачи проверять, что пользователь вводит в поля и сообщать ему если он что-то сделал не правильно.

Ничего в этом сложного нет,

напишем парочку регулярных выражений

const val SNILS_PATTERN = "[0-9]{3}-[0-9]{3}-[0-9]{3}\\s[0-9]{2}"

const val LATIN_NAME_WITH_COMMA = "[${LATIN_LETTERS}0-9\\-`'.,()\\s]*"

и маски

const val SNILS_MASK = "[000]-[000]-[000] [00]"

применим DataBinding и будет норм..

Если вы так считаете, дальше можно не читать.

Другим путём, пойдём мы

Information

Rating
Does not participate
Location
Россия
Registered
Activity