Pull to refresh
2
0
Денис Фокин @mrFox

Программист

Send message

Как мы достигли 1 млн скачиваний с нулевым бюджетом

Reading time7 min
Views8.1K

Десять советов по бесплатному продвижению от автора приложения "Avocation", которое достигло отметки в миллион скачиваний на 441-й день после выхода.

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

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

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments1

Предельно дешёвая видеоаналитика для детских футбольных школ

Reading time9 min
Views20K


Привет, Хабр! Ещё до продажи Мосигры мы полезли в образование. Там оказалось чуть интереснее, чем могло показаться сначала, и на сегодня мы успели открыть 124 футбольных школы, киберспортивные секции, танцы, шахматы и всё такое. Карантин слегка подрезал нам работу до 70 активных точек. Тут надо сказать, что с учётом опыта розницы, в ДНК проекта сразу закладывали очень быструю масштабируемость, чтобы по возможности построить межгалактическую сеть дополнительного образования. А один из самых больших вопросов в такой ситуации — как контролировать качество этого самого образования.

Вот футбольные тренировки. С одной стороны, конечно, у нас есть методология, которая частично на базе испанской, а потом нам её очень сильно доработали умные дядьки в РГУФК. По идее, она даёт некий стандарт, как и чему тренеры будут учить детей, но этого мало. Каждый тренер — яркая индивидуальность. Это круто, но опасно: нужно как-то следить за прогрессом. Более того, это не только наша хотелка как организации, но и прямая хотелка родителей.

Родители в образовании обычно не чувствуют прогресса ребёнка. Есть, конечно, всякие турниры, отчётные концерты и годовые экзамены, но обратная связь длиной в полгода — плохой план. Мы решили, что нужно автоматически генерировать отчёты с каждой тренировки. И вот тут мы подходим к тому, что обычно делается руками для профессиональной футбольной команды — видеоаналитике действий игроков на поле. Садится человек и примерно за 50-100 долларов за час расшифровывает происходящее. Схема не масштабируемая: вот у нас в январе 2020 занималось 165 групп в среднем по 9 раз в месяц – это будет от 75 до 150 тысяч долларов в месяц.

Но, поскольку мы живём в веке свёрточных нейросеток, можно сделать всё с дешманской камерой (но всё же fullHD 30 FPS) прямо на школьной тренировке. И, более того, мы это уже сделали до стадии беты.
Читать дальше →
Total votes 99: ↑98 and ↓1+97
Comments53

Оптимизация микросервиса на Go на живом примере

Reading time17 min
Views20K

Всем привет. Меня зовут Нещадин Иван, и я расскажу про оптимизацию одного из микросервисов Авито на Go. История построена вокруг различных инструментов, которые доступны в языке, и пойдёт от простых примеров к более сложным.


Читать дальше →
Total votes 41: ↑37 and ↓4+33
Comments41

Практика использования спецификации CSS Scroll Snap

Reading time11 min
Views31K
Часто ли у вас возникало желание воспользоваться какой-нибудь возможностью CSS, позволяющей, без лишних усилий, создать элемент-контейнер, поддерживающий прокрутку? CSS, что очень хорошо, даёт нам такую возможность. Я, когда только начинал заниматься фронтенд-разработкой, пользовался для создания прокручиваемых элементов JavaScript-плагинами. Но иногда нужно что-то такое, что позволяет создавать подобные элементы просто и быстро, без привлечения JavaScript. Сделать это можно, воспользовавшись спецификацией CSS Scroll Snap.



Здесь я хочу раскрыть основы практического использования этой спецификации. Я сам только недавно разобрался с CSS Scroll Snap, поэтому рассказывать всё это буду, так сказать, «по горячим следам».
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments6

Объектно-ориентированный дизайн и как его использовать для проектирования систем

Reading time12 min
Views21K

В последние годы области проектирования и дизайна начали сближаться с разработкой. Проектирование соприкасается с дизайном, а дизайн — с версткой. В этом помогают, к примеру, дизайн-системы, storybook’и, созданные по правилам разработки интерфейсов, а также современные инструменты: Figma, Sketch, InVision Studio и другие.

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

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments13

JavaScript за 60 секунд: работаем с картой (Geolocation API, Leaflet.js, Nominatim)

Reading time6 min
Views35K


Доброго времени суток, друзья!

В этом небольшом туториале мы вместе с вами выполним три простых задания:

  • С помощью Geolocation API и Leaflet.js определим текущее местоположение пользователя и отобразим его на карте
  • Реализуем анимированный переход между городами
  • Реализуем переключение между адресами с предварительным получением названия объекта и его координат

Код проекта находится здесь.

Поиграть с кодом можно здесь:


Total votes 2: ↑2 and ↓0+2
Comments3

Service Workers

Reading time8 min
Views17K

В этой статье я хотел бы поговорить о Service Workers (SW). SW позволяют нам сделать наше приложение готовым к работе в автономном режиме, чтобы оно работало, даже если у нас нет подключения к Интернету. Они также позволяют нам использовать множество других расширенных функций, таких как push-уведомления или фоновая синхронизация. SW продолжает работать даже после закрытия браузера, то есть Service Workers продолжают работать. Это фоновый процесс. Итак, давайте зарегистрируем нашего первого Service Worker’a.

(В этой статье я реализую функциональность, связанную с SW, на простом JS, поскольку код написан на простом JS, мы можем интегрировать в любые JS-фреймворки, такие как Angular, React или Vue)

В качестве первого шага добавим файл sw.js в корневую папку проекта. В app.js мы должны проверить, доступен ли SW в навигаторе, то есть поддерживаются ли SW данным браузером. Теперь, когда мы знаем, что SW доступны, мы можем выполнить метод navigator.serviceWorker.register (), указывая путь к файлу, в котором находится наш SW, чтобы его зарегистрировать. Этот метод фактически возвращает Promise. Итак, чтобы получить информацию, как только это будет сделано, мы можем присоединиться к нему.

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments8

Полное визуальное руководство-шпаргалка по Flexbox и Grid + туториал

Reading time31 min
Views146K


Доброго времени суток, друзья!

Представляю вашему вниманию полное визуальное руководство-шпаргалку по всем свойствам CSS-модулей Flexbox и Grid.

Основные источники: A Complete Guide to Flexbox, A Complete Guide to Grid.

В конце статьи вас ждет небольшой туториал по созданию тренажера по Flexbox.

Без дальнейших предисловий.


Total votes 14: ↑10 and ↓4+6
Comments7

Как стать свободным от «цепей» старых браузеров

Reading time9 min
Views5.1K
Люди не готовы отказываться от старых друзей, старых традиций и старых-добрых предпочтений. А еще некоторые из них привыкли к устаревшим версиям браузеров, а современное ПО устанавливать отказываются. О том, что делать, если вы стали заложником старых браузеров, рассказал в своем докладе на конференции «Frontend Conf» руководитель направления разработки ДомКлик Денис Красновский.


Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments2

Визуализация сложных данных с использованием D3 и React

Reading time9 min
Views14K

Существует много возможныx вариантов реализации сложных графиков в ваших проектах. Я за несколько лет попробовал все возможные варианты. Сначала это были готовые библиотеки типа AmCharts 4. AmCharts сразу же оказался большим и неповоротливым. После этого были более гибкие и дружелюбные библиотеки, такие как Recharts. Recharts был поначалу очень хорош, но со временем сложные фичи создавались такими костылями, которые даже показывать стыдно, а какие-то фичи и вовсе были невозможны в реализации. Таким образом, я пришел к D3 и решаю на нем любые задачи, связанные с графиками. Иногда это занимает немного больше времени по сравнению с готовыми инструментами. Но остается одно неоспоримое преимущество – мы всегда знаем, что никогда не упремся в рамки и ваш код не захочется отправить в помойку через пару месяцев.


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


Total votes 10: ↑10 and ↓0+10
Comments14

10 современных раскладок в одну строку CSS-кода

Reading time7 min
Views33K

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

Читать далее
Total votes 41: ↑40 and ↓1+39
Comments12

Виртуальная АТС. Часть 1: Простая установка Asterisk на Ubuntu 20.04

Reading time4 min
Views68K


Из-за перехода на удаленку в небольших компаниях часто возникают проблемы с телефонной связью. Обычно такие фирмы сидят в арендованных офисах, а услуги телефонии им оказывает бизнес-центр. О подключении сотрудников из дому придется позаботиться самостоятельно: самый недорогой способ это сделать — развернуть бесплатный сервер VoIP с открытым исходным кодом Asterisk на виртуальной машине. В статье для примера мы использовали Ubuntu 20.04, но этот рецепт подойдет и для других версий популярного дистрибутива — 18.04 и 18.10, а также (в теории, мы не проверяли) для актуальных версий Debian.
Читать дальше →
Total votes 44: ↑36 and ↓8+28
Comments17

Охота за убегающей памятью в Go на этапе разработки

Reading time5 min
Views7.9K

В начале этого года я прочитал на habr любопытную статью "Почему Discord переходит с Go на Rust", переход был связан с неэффективным механизмом сборки мусора в Go. Тогда подумалось, что, наверное, было бы проще доработать приложение и не переходить. Но еще проще было бы избежать таких проблем на стадии разработки.

Читать далее
Total votes 17: ↑15 and ↓2+13
Comments6

50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков

Reading time44 min
Views214K


Go — простой и забавный язык. Но в нём, как и в любых других языках, есть свои подводные камни. И во многих из них сам Go не виноват. Одни — это естественное следствие прихода программистов из других языков, другие возникают из-за ложных представлений и нехватки подробностей. Если вы найдёте время и почитаете официальные спецификации, вики, почтовые рассылки, публикации в блогах и исходный код, то многие из подводных камней станут для вас очевидны. Но далеко не каждый так начинает, и это нормально. Если вы новичок в Go, статья поможет сэкономить немало часов, которые вы бы потратили на отладку кода. Мы будем рассматривать версии Go 1.5 и ниже.
Читать дальше →
Total votes 80: ↑76 and ↓4+72
Comments270

Исследование CSS-свойства flex

Reading time11 min
Views42K
Вам когда-нибудь было интересно узнать о том, как работает сокращённое CSS-свойство flex? Оно позволяет задавать значения свойств flex-grow, flex-shrink и flex-basis. Я обратил внимание на то, что данное свойство чаще всего используют в виде flex: 1, что позволяет flex-элементу растягиваться, занимая доступное пространство.



В этом материале я хочу поговорить о сокращённом свойстве flex и о тех свойствах, значения которых устанавливают с его помощью. Я собираюсь рассказать о том, когда и почему можно пользоваться этими свойствами, приведу практические примеры.
Читать дальше →
Total votes 36: ↑35 and ↓1+34
Comments6

6 мощных возможностей CSS, которые позволяют обойтись без JavaScript

Reading time8 min
Views48K
В последнее время часто сравнивают CSS и JavaScript, споря о применении этих технологий для решения определённых задач. Споры становятся жарче по мере появления новых замечательных возможностей CSS, которые позволяют упростить решение множества задач и отказаться при этом от JS.


Читать дальше →
Total votes 51: ↑45 and ↓6+39
Comments58

Использование Grid для макетов страниц, а Flexbox — для макетов компонентов

Reading time14 min
Views38K
Мой брат недавно отучился на компьютерщика и сейчас завершает стажировку в области фронтенд-разработки. Он узнал и о CSS Grid, и о CSS Flexbox, но в том, как он пользуется этими механизмами создания макетов, я отметил одну особенность, с которой я уже сталкивался. А именно, ему тяжело даётся принятие решений о том, когда использовать Grid, а когда — Flexbox. Например, он использовал CSS Grid для создания макета заголовка сайта. При этом он отметил, что довести проект до ума ему было нелегко, и что ему пришлось долго экспериментировать с grid-column и настраивать всё до тех пор, пока у него не получилось то, что ему было нужно.



Честно говоря, мне это не понравилось. Поэтому я решил поискать какой-нибудь ресурс, который помог бы моему брату как следует уяснить различия между Grid и Flexbox и дал бы возможность взглянуть на примеры, созданные с использованием обеих этих технологий. Но ничего подходящего мне найти не удалось. Тогда я решил написать статью, посвящённую Grid и Flexbox. Надеюсь, она получилась понятной.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments11

Redis на практических примерах

Reading time11 min
Views106K

Redis — достаточно популярный инструмент, который из коробки поддерживает большое количество различных типов данных и методов работы с ними. Во многих проектах он используется в качестве кэшируещего слоя, но его возможности намного шире. Мы в ManyChat очень любим Redis и активно используем его в нашем продукте для решения огромного количества задач. Про некоторые интересные кейсы использования этой in-memory key-value базы данных я расскажу на примерах. Надеюсь, вам они будут полезны, и вы сможете применить что-то в своих проектах.

Рассмотрим следующие кейсы:

  • Кэширование данных (да, банально и скучно, но это классный инструмент для кэширования и обойти стороной этот кейс, кажется будет не правильно)
  • Работа с очередями на базе redis
  • Организация блокировок (mutex)
  • Делаем систему rate-limit
  • Pubsub — делаем рассылки сообщений на клиенты

Буду работать с сырыми redis командами, чтобы не завязываться на какую-либо конкретную библиотеку, предоставляющую обертку над этими командами. Код буду писать на PHP с использованием ext-redis, но он здесь для наглядности, использовать представленные подходы можно в связке с любым другим языком программирования.


Читать дальше →
Total votes 40: ↑38 and ↓2+36
Comments14

Делаем маршрутизацию (роутинг) на OpenStreetMap. Введение

Reading time9 min
Views12K

Хотелось бы поделиться опытом создания систем маршрутизации PostgreSQL/PgRouting на карте OpenStreetMap. Речь пойдет о разработке [коммерческих] решений со сложными требованиями, для более простых проектов, вероятно, достаточно обратиться к документации. Насколько мне известно, такие вещи, как полная поддержка односторонних дорог и направлений движения, быстрый роутинг на тысячах адресов (порядка секунд на обычном лаптопе, к примеру, Macbook Pro 13" 2013 года), создание дорожного графа с заданными свойствами, мета-оптимизация маршрутов вообще нигде и никак не рассматриваются. Как обычно, все данные и результаты доступны в моем GitHub репозитории OSM Routing Tricks, который я буду пополнять по мере публикаций.



Небольшой маршрут из 330 адресов на карте OpenStreetMap (время построения около 5 секунд на вышеупомянутом лаптопе). Можно ли за это же время построить маршрут, скажем, из 5000 точек? Да, можно, и об этом мы тоже поговорим (в следующих частях статьи).

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments4

Как определить функционал MVP и влюбить клиента в пилотную версию продукта

Reading time5 min
Views12K

Итак, MVP. Достаточно заезженная тема, на мой взгляд. Каждый, кто хоть как-то связывал себя с разработкой программного обеспечения за последние 5 лет, с 99% вероятностью слышал эти 3 буквы. Но даже несмотря на обилие информации, народ все равно наступает на грабли «идеального продукта» при создании проектов.


Эта статья не претендует на то, чтобы быть истиной в последней инстанции. Она не про важность и необходимость MVP. И не про его роль в бережливом запуске стартапов. Я просто порассуждаю о том, каким должен быть минимально жизнеспособный продукт на момент пилотного выхода на рынок.


Начну с вирусной зарисовки пути развития стартапа по принципу MVP, которая гуляет по интернету и которую вы наверняка встречали.


image


90% авторов используют иллюстрацию в своих публикациях в буквальном смысле, что вводит в заблуждение читателей.

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments18
1
23 ...

Information

Rating
Does not participate
Location
Коломна, Москва и Московская обл., Россия
Date of birth
Registered
Activity