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

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

Отправить сообщение

Как сделать так, чтобы твоими приложениями пользовались во всем мире: 10 советов от СЕО Wachanga

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


Знакомьтесь: Максим Колпаков и его крутой стартап Wachanga — платформа для развития семьи. Ребята умудряются стремительно расти в узкой нише, привлекать инвестиции, создавать новые приложения за несколько недель и бесконечно экспериментировать.

Максим поделится выводами о том, как локализация помогает им покорять мир. Это не преувеличение: приложениями Wachanga пользуются во всех странах мира. В десятке стран они уже обосновались на первом месте в своих категориях.

Идея быстрого роста за счет дополнительных локализаций пришла к Максиму давно, и уже более трех лет является моделью развития Wachanga. На сегодня самое масштабируемое приложение компании — Clover (трекер женских циклов) — переведено на 52 языка, приложение по уходу за новорожденным Babycare доступно на 34 языках, Календарь беременности — на 26 языках, Water Tracker — на 23 языках.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+18
Комментарии5

Прокачка проекта от Soft Launch до $1 млн выручки в месяц

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


Привет, Хабр! Я руковожу отделом закупки трафика для мобильных и десктопных проектов в Mail.ru Group. Сегодня в этом посте я подробно расскажу про трафик для игр. Он написан по мотивам моего доклада на конференции The Big Deal. Но сначала немного о себе. Я работал с огромным количеством проектов по различным маркетинговым задачам, последние полтора года работаю исключительно с мобильными приложениями. За это время успел поработать с несколькими десятками приложений, большинство из которых в soft launch, часть из них выпущена в global, а несколько «раскачали» более чем на $1 млн оборота в месяц. За время работы у меня сформировалось некое видение, как с точки зрения трафика проекта проанализировать метрики и понять, может ли ваш проект расти, развиваться и пропускать через себя огромный объем трафика.
Читать дальше →
Всего голосов 45: ↑43 и ↓2+41
Комментарии3

Визуализация больших графов для самых маленьких

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


Что делать, если вам нужно нарисовать граф, но попавшиеся под руку инструменты рисуют какой-то комок волос или вовсе пожирают всю оперативную память и вешают систему? За последние пару лет работы с большими графами (сотни миллионов вершин и рёбер) я испробовал много инструментов и подходов, и почти не находил достойных обзоров. Поэтому теперь пишу такой обзор сам.
Читать дальше →
Всего голосов 95: ↑94 и ↓1+93
Комментарии30

Шпаргалка по тестированию требований к мобильным приложениям

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

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


Статья ориентирована на тестировщиков, которых просят провести ревью ТЗ и найти в нём несоответствия, и на аналитиков, которым разработчики после прочтения ТЗ часто задают вопросы формата: «А что должно быть, если …?».

Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии2

Тестирование Android приложений

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

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



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

Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии8

ООП, «святая троица» и SOLID: некоторый минимум знаний о них

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

Необходимое вступление


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


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


Столь малые гарантии поднимают вопросы о причинах, по которым статья пишется. Я считаю, что этим вещам должны учить везде, где учат программированию, вплоть до уроков информатики в школах с углублённым её изучением. Тем не менее, для меня стала пугающе нормальной ситуация, когда я узнаю, что собеседник мой коллега, причём работающий уже не первый год, но про инкапсуляцию «что-то там слышал». Необходимость собрать всё это в одном месте и давать ссылку при возникновении вопросов зрела давно. А тут ещё и мой «pet-project» дал мне изрядно пищи для размышлений.


Тут мне могут возразить, что учить эти вещи в школе рановато, и вообще на ООП свет клином не сошёлся. Во-первых, это смотря как учить. Во-вторых, 70% материала этой статьи применимо не только к ООП. Что я буду отмечать отдельно.



Читать дальше →
Всего голосов 88: ↑82 и ↓6+76
Комментарии79

Смотри меня полностью: выжимаем максимум из live video на мобильных платформах

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


Самый простой способ воспроизвести видео на мобильном устройстве — это открыть ссылку имеющимся в системе плеером, но это не всегда эффективно.

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

Разберём это на примере конкретных приложений: мобильного клиента «Одноклассников» (где видео воспроизводят) и OK Live (где трансляции стримят с телефона в 1080p). Здесь не будет мастер-классов о том, как по ссылке проиграть видео, с примерами кода. Рассказ пойдёт о том, как видео выглядит изнутри, и как, зная общую архитектуру видеоплееров и видеостриминга, можно разобраться в любой системе и сделать её лучше.

В основе материала — расшифровка доклада Александра Тоболя(@alatobol) и Ивана Григорьева(@ivan_a) с конференции Mobius.



Читать дальше →
Всего голосов 50: ↑47 и ↓3+44
Комментарии2

Мне не страшен ваш NDA

Время на прочтение14 мин
Количество просмотров122K
Это громкая и страшная аббревиатура из трёх неприличных букв. Хотите поучаствовать в тендере, устраиваетесь на работу, нужно получить данные — вам подсовывают эту бумажку, мол, подпиши сначала, а то нашли дураков без NDA тебе что-нибудь рассказывать. При этом в большинстве случаев вы ничего сверхсекретного или коммерчески важного не узнаете, но процедура подписания NDA стала неким таинством посвящения, которое стороны выполняют не особо задумываясь над смыслом.

Это так же как вы неизбежно получите требование вместе с учредительными документами предоставить выписку из ЕГРЮЛ не старше 30 дней. Хотя всё доступно в онлайне, все распечатывают эту выписку из интернета, заверяют её и передают контрагенту, который даже не смотрит её, потому что всё есть в интернете. Ну, вы поняли, короче, отечественную любовь к таинствам.

image
Читать дальше →
Всего голосов 130: ↑130 и ↓0+130
Комментарии113

Яндекс открывает технологию машинного обучения CatBoost

Время на прочтение6 мин
Количество просмотров102K
Сегодня Яндекс выложил в open source собственную библиотеку CatBoost, разработанную с учетом многолетнего опыта компании в области машинного обучения. С ее помощью можно эффективно обучать модели на разнородных данных, в том числе таких, которые трудно представить в виде чисел (например, виды облаков или категории товаров). Исходный код, документация, бенчмарки и необходимые инструменты уже опубликованы на GitHub под лицензией Apache 2.0.



CatBoost – это новый метод машинного обучения, основанный на градиентном бустинге. Он внедряется в Яндексе для решения задач ранжирования, предсказания и построения рекомендаций. Более того, он уже применяется в рамках сотрудничества с Европейской организацией по ядерным исследованиям (CERN) и промышленными клиентами Yandex Data Factory. Так чем же CatBoost отличается от других открытых аналогов? Почему бустинг, а не метод нейронных сетей? Как эта технология связана с уже известным Матрикснетом? И причем здесь котики? Сегодня мы ответим на все эти вопросы.

Всего голосов 216: ↑215 и ↓1+214
Комментарии128

Дао интеграции Сбербанка: от локальных сетей к Kafka и потоковой разработке

Время на прочтение25 мин
Количество просмотров28K
Привет, Хабр! Меня зовут Михаил Голованов, в Сбертехе я занимаюсь технической архитектурой и перспективными разработками. У нас, как и у любого современного банка, есть множество систем, которые поддерживают разные стороны работы банка: вклады, счета, зачисление денег, кредитование, финансовые рынки, акции и т.д. Всякий раз, когда появляется какая-то новая система, мы начинаем следующий уровень увлекательной игры под названием «Интеграция». И каждый следующий уровень сложнее предыдущего — ведь систем нужно охватывать все больше и больше. Этот пост — то, что в геймерских кругах именуется walkthrough: сначала мы пробежимся по локальным сетям и затем через очереди сообщений перейдем к масштабному этапу потоковых вычислений посредством Apache Kafka в широко распределенных сетях.  


Читать дальше →
Всего голосов 53: ↑47 и ↓6+41
Комментарии20

Деловая переписка на английском языке: фразы и советы

Время на прочтение18 мин
Количество просмотров614K
Елена Соловьева, менеджер проектов в компании Лаборатория Касперского, специально для блога Нетологии поделилась советами о том, как вести деловую переписку с иностранными коллегами и партнерами на английском языке. Статья участвует в конкурсе.

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

Задача становится сложнее, если вы общаетесь на неродном английском языке с представителями других культур. В статье я поделюсь, на что в этом случае обратить внимание, как избежать ошибок и достичь взаимопонимания с иностранными коллегами и партнерами.
Читать дальше →
Всего голосов 104: ↑100 и ↓4+96
Комментарии80

Легко переходим на векторный формат картинок вместо нарезки под разные плотности экранов в Android 4.0+. Часть 1 из 2

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


Обычно дизайн приложения рисуется в векторном редакторе (например, Sketch), но типичным форматом картинок в приложении под Android является растровый (как правило, PNG). При разработке приложения необходимо для каждого векторного изображения заниматься утомительной работой по изготовлению набора растровых картинок для разных плотностей экранов. Количество таких комплектов может доходить до шести по числу возможных плотностей: ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi (плотность xxxhdpi необходима только для иконки приложения). При верстке иногда приходится задать в разметке явные размеры для изображения, что может потребовать перемасштабирования растровой картинки, а это, в свою очередь, наверняка приведет к появлению артефактов. К тому же наличие нескольких комплектов картинок отрицательно сказывается на размере выходного apk.
Читать решение...
Всего голосов 25: ↑24 и ↓1+23
Комментарии13

Мягкие ссылки на страже доступной памяти или как экономить память правильно

Время на прочтение13 мин
Количество просмотров163K
image
Все java-разработчики, рано или поздно, встречаются с пресловутой ошибкой OutOfMemoryError. 
После этой встречи мы начинаем более бережно относится к используемой памяти, экономить ее. Начиная с версии 1.2 в Java появился пакет java.lang.ref.* с классами SoftReference, WeakReference, PhantomReference. Далее я расскажу вам о том, как помогут эти классы в борьбе с OutOfMemoryError. И что более интересно, приведу реальные примеры их использования. Начнем.
Читать дальше →
Всего голосов 67: ↑62 и ↓5+57
Комментарии23

Обработка строк в Java. Часть I: String, StringBuffer, StringBuilder

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

Вступление


Что вы знаете о обработке строк в Java? Как много этих знаний и насколько они углублены и актуальны? Давайте попробуем вместе со мной разобрать все вопросы, связанные с этой важной, фундаментальной и часто используемой частью языка. Наш маленький гайд будет разбит на две публикации:

  1. String, StringBuffer, StringBuilder (реализация строк)
  2. Pattern, Matcher (регулярные выражения)

Реализация строк на Java представлена тремя основными классами: String, StringBuffer, StringBuilder. Давайте поговорим о них.
Читать дальше →
Всего голосов 30: ↑21 и ↓9+12
Комментарии68

Руководство по проектированию реляционных баз данных (7-9 часть из 15) [перевод]

Время на прочтение6 мин
Количество просмотров524K
Продолжение.
Предыдущие части: 1-3, 4-6

7. Связь один-ко-многим.


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

Другой пример связи один-ко-многим – это связь, которая существует между матерью и ее детьми. Мать может иметь множество детей, но каждый ребенок может иметь только одну мать.

(Технически лучше говорить о женщине и ее детях вместо матери и ее детях потому, что, в контексте связи один-ко-многим, мать может иметь 0, 1 или множество потомков, но мать с 0 детей не может считаться матерью. Но давайте закроем на это глаза, хорошо?)

Когда одна запись в таблице А может быть связана с 0, 1 или множеством записей в таблице B, вы имеете дело со связью один-ко-многим. В реляционной модели данных связь один-ко-многим использует две таблицы.

image
Схематическое представление связи один-ко-многим. Запись в таблице А имеет 0, 1 или множество ассоциированных ей записей в таблице B.
Читать дальше →
Всего голосов 15: ↑11 и ↓4+7
Комментарии27

Кофе с огурцами (Espresso + Cucumber)

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


    Относительно не так давно появилась замечательная библиотека Espresso для тестирования UI Android приложений. Её преимущества над аналогами обозревались не один раз. Если вкратце, то они заключаются в том, что это разработка Google для собственной ОС (ранее они сами использовали Robotium), а так же в лаконичности синтаксиса и скорости работы. Итак, мы решили идти в ногу со временем и использовать Espresso. Но нам мало тех плюсов, что уже есть, мы хотим BDD (http://en.wikipedia.org/wiki/Behavior-driven_development), мы хотим скриншотов и отчетов в json и html, мы хотим запускать это все на CI, в конце концов! Но обо всем по порядку. Я расскажу как подружить Cucumber (http://habrahabr.ru/post/62958/) и Espresso (http://habrahabr.ru/post/212425/) на небольшом примере. Всех, кто устал от Appium, кто хочет уйти от Robotium и тех, кому небезразлично тестирование Android, прошу под кат.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии4

Лекции Технопарка. 3 семестр. Проектирование высоконагруженных систем

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


И снова в эфире наша постоянная рубрика «Лекции Технопарка». На этот раз предлагаем вам ознакомиться с материалами курса «Проектирование высоконагруженных систем». Цель курса — получение студентами навыков проектирования высокоэффективных программных систем.
Читать дальше →
Всего голосов 56: ↑53 и ↓3+50
Комментарии5

RESTful API под Android: pattern B

Время на прочтение12 мин
Количество просмотров54K
Совсем недавно, на собеседовании в Яндексе, мне довелось обсуждать организацию Rest-взаимодействия в Android-приложениях. В ходе обсуждения всплыл вопрос – почему из трех паттернов, предложенных на Google IO 2010 Virgil Dobjanschi, первый используется существенно чаще двух других. Вопрос меня заинтересовал.

Поскольку тема обсуждения достаточно узкоспециализированная, я с позволения читателей пропущу слова о том, насколько правильная архитектура Rest-взаимодействия важна в Android-приложениях и как часто Android-разработчики сталкиваются с подобными задачами.
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии21

Пять очевидных ошибок, которые почему-то продолжают совершать

Время на прочтение3 мин
Количество просмотров53K
В этой статье я расскажу, как из одного сообщения об ошибке на сайте я случайно получил доступ к внутренней информации компании (и даже немного больше). Отмечу, что это можно проделать, используя один лишь браузер.

Пролог


Сайты иногда падают. Такое случается. Но вот то, что описано в статье, случаться не должно.

#1


Недавно зашёл на сайт одной компании и увидел (в очередной раз, замечу) вместо него сообщение об ошибке:



Почему сайт упал — это отдельный разговор. Скажу лишь, что это на совести его разработчиков.

Первая ошибка (слишком очевидная, но…): показ сообщений об ошибках. Да, все знают, что нужно отключать дебаг в продакшене. Но, чёрт возьми, почему я регулярно вижу сообщения об ошибках в своём браузере?!
Читать дальше →
Всего голосов 75: ↑68 и ↓7+61
Комментарии39

Мобильное приложение «Читатель» теперь для Android

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


Три года назад мы выпустили мобильное приложение «Читатель» для iOS и от многих пользователей нам стали приходить письма с вопросом, собираемся ли мы выпустить версию под Android. Разработка завершена, и состоялся официальный запуск «Читателя» в Google Play.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии33
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Минск, Минская обл., Беларусь
Зарегистрирован
Активность