SlideShare une entreprise Scribd logo
1  sur  87
Télécharger pour lire hors ligne
Создание приложений
   со знанием Perl
     Анатолий Шарифулин
      YAPC::Russia 2012
Hello, World!
«Счастливый
Perl-программист»
   Андрей Шитов про меня
Я стал меньше
программировать на Perl
    Но не стал его меньше любить :-)
JFDI превратилось JFTI
      Just F*cking Talk about It
Success-story
одного приложения
  И как Perl мне/нам помог в этом
Нам — это Applifto
www.applifto.ru
Наши приложения
Опрос аудитории
DLTTR.com
Подробно
«Зачем?» и «Почему?»
http://www.slideshare.net/sharifulin/ss-12313103
Веский повод для меня
 Я переезжал с ЖЖ в Posterous, написал скрипты
переноса, но настроил кросс-постинг в Твиттер и
    Фейсбук, получил реплаи «Толя, хватит!»
Существующее
  аналоги — не очень
Медленные, неудобные, некрасивые, «криво» удаляют:
      TwitWipe, TwitCide, Delete My Tweets, ...
«Хватить техдирить,
пора попрограммировать»
    И выступить на #yr2012 с докладом :-)
Подход и решение
Основные цели

• Приложение должно быстро удалять твиты
• Чёткое удаление
• Кросс-платформенное приложение:
  iOS, Android, Web, ...
Серверное API —
     привет, Perl!
Вся логика на стороне сервера (не Твиттер API),
       клиенты — «тупые» интерфейсы
Знакомство
с Твиттер API
Опыта мало:

• Получение профилей пользователей
  после авторизации через Твиттер на сайте
• Автоматический постинг в Твиттер
  с помощью Net::Twitter(::Lite)
• AnyEvent::Twitter::Stream для риал-тайм
  поиска (привет, @miyagawa!)
Блокирующий вариант
На базе Net::Twitter(::Lite) можно решить задачу
LWP::UserAgent::POE
Можно заменить транспорт в Net::Twitter(::Lite)
НЕТ
Идея — 2 независимые
асинхронные очереди
    Получение таймлайна и удаление твитов,
используя REST Twitter API и асинхронные запросы
Такой вариант должен
  работать быстро!
Авторизация и OAuth
Net::OAuth::All
 Мы давно написали свой модуль для OAuth.
Поддерживает все версии OAuth (1.0, 1.0A, 2.0).
Net::OAuth::All
https://github.com/likhatskiy/Net-OAuth-All
my $oauth = Net::OAuth::All->new(
	

 consumer_secret => $conf->{consumer_secret},
	

 consumer_key => $conf->{consumer_key },

	

 token          => $data->{access_token       },
	

 token_secret   => $data->{access_token_secret},
);
$oauth
	

 ->via('GET')
	

 ->protected_resource_url('https://api.twiiter.com/...’)
	

 ->put_extra(
	

 	

 include_rts => 'true',
	

 	

 user_id     => $user->{id},
	

 	

 count      => 200,
	

 )
	

 ->request('protected_resource')
;
$oauth->to_header;
$oauth->url; # $oauth->url_with_extra;
Пропатчил модуль
     Пользователь неавторизован:
   ограничение150 запрос в час по IP,
а не 350 запросов в час на пользователя
Асинхронные запросы
Я использую Mojolicious
      Ни для кого не секрет :-)
Mojo::UserAgent
 Mojo::IOLoop
Отличный асинхронный HTTP-клиент
my $delay = Mojo::IOLoop->delay;
for (@$tasks) {
   ...
   $delay->begin;
   $ua->get($url => {'Authorization' => $h} => sub {
       my ($ua, $tx) = @_;
       ...
       $delay->end( ... );
   });
}

say $delay->wait;
Серверное API
Серверное API
API поддерживает GET и POST запросы,
  формат передачи данных — JSON,
        коды ответа: 200 и 50x.
Серверное API
   Starman + Mojolicious
Mojolicious::Plugin::ApiHelpers
Серверное API
   http://api.dlttr.com
package App::Api;
use App::Base -controller,
  with => [ 'App::Task', 'App::User' ];

sub error { shift->api_error(code => 1) }
sub any { shift->api_error(code => 5) }

...

1;
my $api = $r->route('/api')->to('api#', api => 1);
$api->route('/:action', action => qr/login|oauth/)->to;

my $apiu = $api->bridge->to('#auth', sign => 1);
$apiu->bridge('/task/new')->to('#task_check')
     ->route->to('#task_new');

$api->bridge('/')->to('#auth', maybe => 1, sign => 0)
    ->route->to('#hello');
10 методов,123 теста
   и документация
Большинство методов требуют авторизацию
пользователя и проверка sign (api_id + secret)
Test::Mojo и Test::More
       Тестируется доуступ к методам API,
входные-выходные данные, проверка подписи и т.д.
Test::Mojo и Test::More
Ставится реальная задача от тестового пользователя
Покрыты все методы
 Но нет никаких Mock-объектов, нет проверки,
    правильный ли удалён диапазон твитов
Это трудоёмко
    и излишне
  Нет тестирования реального цикла:
постинг твитов — удаление — проверка
$t->get_ok("$url/")
  ->status_is(200)
  ->header_is('Access-Control-Allow-Origin', '*')
  ->json_content_is({hello => 'Hello DLTTR!'})
;

$t->get_ok(sign get => "$url/task/new")
  ->status_is(200)
  ->json_content_is({error => {msg =>
    'User authorization failed', code => 2}})
;
Опасно тестить на
 своём аккаунте :-)

— Тебе всё равно на свой Твиттер?
— Да!
— Давай я удалю все твиты?
— Нееееееееет!!!
Простой
      debug-запросов
Для проверки качества работы «клиентов» удобно
        логировать запросы с помощью
         before_dispatch + after_dispatch
Три очереди-демона
1. Очередь работы
       с таймлайном
Фильтрация и поиск нужных для удаления ID твитов,
     пейджинг с помощью since_id и max_id
1. Очередь работы
   с таймлайном
 Максимум 200 твитов за один запрос,
 получение таймлайна один за одним,
         проверка Rate Limit
«Ограничения»
         Твиттера
Нет доступа ко всем твитам, только к последним
  ~3200 или не позднее определённой даты,
            счётчик не-ноль и т.д.
2. Очередь
  по удалению твитов
Удаление «пачками» по 200 штук, нет ограничений.
      «Отбойный молоток» или «Пушка» :-)
2. Очередь
по удалению твитов
   Обработка ошибок — не всегда ошибка
от Твиттер API означает невыполнение задачи
3. Очередь
        по отправке Push
                         Для iOS
     Net::APNS::Persistent (ещё есть AnyEvent::APNS),
для проверки валидности токенов — Net::APNS::Feedback
3. Очередь
   по отправке Push
                Для Android
WWW::Google::C2DM и WWW::Google::ClientLogin
База данных
Очень просто — mysql
    Для хранения и очереди задач,
     чтобы не парится совсем :-)
Два нюанса:
1. Правильно создать
      индексы
      Для очередей задач
2. Отключить
кеширование запросов
 select SQL_NO_CACHE * from task where ...
Сайт и веб-версия
www.dlttr.com
www.dlttr.com
Сайт и веб-версия
• Starman + Mojolicious
• Mojolicious::Plugin::I18N2
  — мой форк I18N-плаггина
• Mojolicious::Plugin::OAuth
  — логин через Net::OAuth::All
• Mojolicious::Plugin::ShareHelpers
• Mojolicious::Plugin::UtilHelpers
Админ и статистика
«Большой Брат»
Есть вся информация по пользователям, количеству
   задач, фидбекам, а также риал-тайм статистика
Статистика по пользователям
Стена пользователей
Такой статистики
 нет у «обычных»
   приложений
Удалено 1М+ твитов,
 3К+ пользователей,
   20% покупают
       За 2 месяца
Промоутинг
Промоутинг в Твиттере
  Фолловинг, фаворитс, поиск и реплаинг —
             Net::Twitter(::Lite)
Промоутинг в Твиттере
   Но меня уже три раза заблочили :-)
Резюме
Плюсы
• Получилось простое решение на Perl
  (чистое время разработки ~30 часов)
• Быстро, очень быстро работает
• Чётко удаляет твиты
• Любое изменение, доработка,
  расширение сервисов по удалению
  — на стороне сервера, несложно
• Риал-тайм статистика
Единственный минус
Упал/сломался сервер — не работает приложение,
пользователи негодуют, ставят колы и матерят :-)
Check out DLTTR!
http://dlttr.com/app http://dlttr.com/android
                www.dlttr.com
«С виду простое
   приложение,
 а на самом деле
— крутое и на Perl»
P. S.
На #BarCampKrr
      я рассказывал
«Разработка приложения:
   от идеи до запуска»
 (без упоминания о Perl)
И всё свелось к ...
       Perl :-)
«На каком языке программирования пишите?»,
                «А почему?»,
 «Трудно ли найти таких программистов?» :-)
use Perl or die;
Спасибо за внимание!
     Анатолий Шарифулин
      YAPC::Russia 2012

Contenu connexe

Tendances

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!SQALab
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложенийZestranec
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf Conference
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7Technopark
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 

Tendances (20)

Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!А не поговорить ли нам о XSS!
А не поговорить ли нам о XSS!
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
 
тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Spring data jee conf
Spring data jee confSpring data jee conf
Spring data jee conf
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
176023
176023176023
176023
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 

Similaire à Cоздание приложений со знанием Perl

еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
OAuthоризация и API социальных сетей
OAuthоризация и API социальных сетейOAuthоризация и API социальных сетей
OAuthоризация и API социальных сетейАртём Курапов
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...Positive Hack Days
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийPositive Hack Days
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищиCUSTIS
 
Тестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийТестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийSQALab
 
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Ontico
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJSYura Bogdanov
 
Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Yury Leonychev
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web APIByndyusoft
 
QaApi: взгляд на тестирование с другой стороны баррикад
QaApi: взгляд на тестирование с другой стороны баррикадQaApi: взгляд на тестирование с другой стороны баррикад
QaApi: взгляд на тестирование с другой стороны баррикадDmitry Maruschenko
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 

Similaire à Cоздание приложений со знанием Perl (20)

еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
OAuthоризация и API социальных сетей
OAuthоризация и API социальных сетейOAuthоризация и API социальных сетей
OAuthоризация и API социальных сетей
 
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
23may 1300 valday антон сапожников 'еще один недостаток современных клиент се...
 
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложенийАнтон Сапожников. Еще один недостаток современных клиент-серверных приложений
Антон Сапожников. Еще один недостаток современных клиент-серверных приложений
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Тестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийТестирование защищенности веб-приложений
Тестирование защищенности веб-приложений
 
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015Яндекс.АккаунтМенеджер - Mobius 2015
Яндекс.АккаунтМенеджер - Mobius 2015
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web API
 
QaApi: взгляд на тестирование с другой стороны баррикад
QaApi: взгляд на тестирование с другой стороны баррикадQaApi: взгляд на тестирование с другой стороны баррикад
QaApi: взгляд на тестирование с другой стороны баррикад
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Template Toolkit – зло!?
Template Toolkit – зло!?Template Toolkit – зло!?
Template Toolkit – зло!?
 
TT
TTTT
TT
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 

Plus de Anatoly Sharifulin

Ещё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхЕщё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхAnatoly Sharifulin
 
ASO Аудит для приложений и игр
ASO Аудит для приложений и игрASO Аудит для приложений и игр
ASO Аудит для приложений и игрAnatoly Sharifulin
 
ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)Anatoly Sharifulin
 
AppFollow митап в Москве
AppFollow митап в МосквеAppFollow митап в Москве
AppFollow митап в МосквеAnatoly Sharifulin
 
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...Anatoly Sharifulin
 
Аналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayАналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayAnatoly Sharifulin
 
Конкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийКонкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийAnatoly Sharifulin
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентовAnatoly Sharifulin
 
Аналитика магазинов приложений
Аналитика магазинов приложенийАналитика магазинов приложений
Аналитика магазинов приложенийAnatoly Sharifulin
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложенийAnatoly Sharifulin
 
Анализ приложений конкурентов
Анализ приложений конкурентовАнализ приложений конкурентов
Анализ приложений конкурентовAnatoly Sharifulin
 
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»Anatoly Sharifulin
 
Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Anatoly Sharifulin
 
Основной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruОсновной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruAnatoly Sharifulin
 
ASO оптимизация и продвижение мобильных приложений
ASO  оптимизация и продвижение мобильных приложенийASO  оптимизация и продвижение мобильных приложений
ASO оптимизация и продвижение мобильных приложенийAnatoly Sharifulin
 

Plus de Anatoly Sharifulin (20)

Ещё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играхЕщё один способ привлекать и удерживать пользователей в играх
Ещё один способ привлекать и удерживать пользователей в играх
 
ASO Аудит для приложений и игр
ASO Аудит для приложений и игрASO Аудит для приложений и игр
ASO Аудит для приложений и игр
 
ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)ASO для iOS 11 (продвижение In-App Prurchases)
ASO для iOS 11 (продвижение In-App Prurchases)
 
ASO для iOS 11
ASO для iOS 11ASO для iOS 11
ASO для iOS 11
 
AppFollow митап в Москве
AppFollow митап в МосквеAppFollow митап в Москве
AppFollow митап в Москве
 
ASO Best Practices 2016
ASO Best Practices 2016ASO Best Practices 2016
ASO Best Practices 2016
 
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
То, что русскому — ФРИИ, финну — Startup Sauna. Опыт прохождения акселерации ...
 
Аналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google PlayАналитика приложений конкурентов в Google Play
Аналитика приложений конкурентов в Google Play
 
ASO FAQ
ASO FAQASO FAQ
ASO FAQ
 
ASO: Best Practices 2015
ASO: Best Practices 2015ASO: Best Practices 2015
ASO: Best Practices 2015
 
AppFollow Demo Day ФРИИ
AppFollow Demo Day ФРИИAppFollow Demo Day ФРИИ
AppFollow Demo Day ФРИИ
 
Конкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложенийКонкурентный анализ мобильных приложений
Конкурентный анализ мобильных приложений
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
 
Аналитика магазинов приложений
Аналитика магазинов приложенийАналитика магазинов приложений
Аналитика магазинов приложений
 
Аналитика мобильных приложений
Аналитика мобильных приложенийАналитика мобильных приложений
Аналитика мобильных приложений
 
Анализ приложений конкурентов
Анализ приложений конкурентовАнализ приложений конкурентов
Анализ приложений конкурентов
 
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
ASO оптимизация мобильных приложений: «Что такое хорошо и что такое плохо?»
 
Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?Продвижение мобильных приложений: с чего начать?
Продвижение мобильных приложений: с чего начать?
 
Основной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ruОсновной продукт vs. мобильный на примере Ostrovok.ru
Основной продукт vs. мобильный на примере Ostrovok.ru
 
ASO оптимизация и продвижение мобильных приложений
ASO  оптимизация и продвижение мобильных приложенийASO  оптимизация и продвижение мобильных приложений
ASO оптимизация и продвижение мобильных приложений
 

Cоздание приложений со знанием Perl