Архив за Ноябрь 2008

Freeze.com – делаем деньги на скринсейверах и обоях

Ноябрь 27, 2008

Тип компании: Частная
Численность работников: 40
Доход (2004 г.): $ 18 000 000

Freeze.com – это частная компания, специализирующаяся на создании и распространении бесплатных скринсейверов, обоев, клипарта. В управлении компании находятся следующие сайты: freeze.com, screensaver.com, my.freeze.com, ringtone.com, wallpapers.com. Также Freeze.com специализируется на почтовых рассылках. Компания была создана Роном и Раеном Веберами (Rob Weber, Ryan Weber) в Сант Клауд, Минесота, в период учебы в колледже. Основной доход компании в предоставлении персональной демографической информации рекламодателям. Это официально, на а если неофициально…

Поняв то, что большинство запросов в поисковиках – это поиск бесплатного и свободного к скачиванию контента, братья решаются создать сайт-каталог, на котором были бы размещены прямые ссылки на бесплатный контент и просто «халяву». Важно то, что этот контент не был варезом. Этому сайту удалось добиться посещаемости в 23,000 ежедневных посетителя. Аудитория этого сайта не «расползалась» по другим сайтам и была очень лояльна, потому что Веберы использовали сервис рассылки подобный subscribe.ru – пользователи постоянно уведомлялись о новых сайтах с «халявой». И этот бесплатный каталог приносил ощутимый доход – от $50,000 до $90,000 в месяц. Зарабатывать столько позволяла баннерная реклама и промо-акции – и за то и за другое Веберам платили американские компании.

В 2000-м году на Веберов вышел их первый настоящий инвестор Янг К. Сон (Young K. Sohn). И вложил $300,000 в новый проект братьев (это был Freeze.com, но собственными скринсейверами и обоями там пока что «не пахло»). Всем казалось, что судьба будет благоволить Веберам и дальше, но не тут то было – возникла серьезная проблема. Братья купили новый красивый домен за $2,600. Деньги были вложены не только в покупку, но и в раскрутку домена. Но оказалось, что продавец домена изначально не имел возможности передать права на домен полностью, а лишь сделал вид. Выяснилось, что братья Веберы не являются владельцем «Freeze.com», также владельцем домена не был и «продавец» – владельцем являлся другой человек (один предприимчивый киберсквотер). Веберам пришлось покупать свой домен во второй раз – за $37,000. И это стало для них уроком.

2000-ые … «Доткомовский пузырь» лопнул, многие компании обанкротились – компания Freeze.com тоже оказалась под ударом. Пришлось урезать большинство расходов, потому что доходов еле-еле хватало , чтобы не стать банкротом. Но Веберам и еще 9-ти рабочим удалось пережить этот период нестабильности – каждый работал «за троих».

В 2001 в компании было решено изменить курс – теперь приоритетным направлением было создание и распространение скринсейверов, рингтонов и обоев. Все было бесплатным. Единственным условием была регистрация. Законопослушные граждане США вводили в свои профайлы реальную информацию. Эти информация потом была дорого продана офлайновым рекламщиками ;)

Скринсейверы создавались как работниками компании так и независимыми разработчиками на сдельной основе. Материал для скринсейверов и обоев был лицензирован у профессиональных художественных студий и фотографов. На это было потрачено около $1 000 000. Все сайты компании были перелинкованы – это позволяло подольше удержать пользователя.

Через некоторое время средств на счетах стало достаточно для покупки нового офиса площадью 7,500 квадратных футов в Вэйт Парке (Waite Park).
В 2003 году доход компании составил $ 12 000 000. Веберы утверждали, что бесплатные материалы с их сайта скачали около 85 000 000 зарегистрированных пользователей. В августа 2004 компания Freeze купила своего конкурента – ScreenSaver.com, потом купила некогда главного своего поставщика скринсейверов «Rhode Island Soft Systems» (сумма покупки оценивалась в $750 000) – компания 19-ти летнего тинейджера :)

В 2005 году Freeze открывает партнерскую программу по распространению скринсейверов – «Freeze Cold Cash». Которая, в то время, платила один доллар (!) за качественную инсталляцию скринсейвера на компьютер американца и десять центов за инсталляции на компьютеры пользователей других стран.

Ну а теперь «приступим к вскрытию».

Партнерка.

Как и в любой партнерке там был свой подвох. Один доллар платился лишь за качественные инсталляции – пользователь должен был зарегистрироваться, введя правильные данные, скачать скринсейвер, установить его на свой компьютер в ПЕРВЫЙ раз. То есть, если пользователь уже до этого скачивал и устанавливал хоть какой-нибудь продукт компании, то эта инсталляция уже не засчитывалась. Еще одна ложка дегтя была в том, что порой не то, что доллар было трудно заработать, но и десятицентовая инсталляция могла быть не такой легкой. Не смотря на заявление о том, что учитываются инсталляции по всему миру, на самом деле, больше половины мира не учитывалось вообще. К примеру не учитывались страны бывшего СССР, страны Африки, Азии…

Adware

Компания Freeze.com никогда не была такой «белой и пушистой» как хотела всем казаться. Она утверждала, что основной доход получает с рассылок по базе зарегистрированных пользователей, но это было не так. Основной доход она получала через распространение Adware – как своего так и чужого. Например, одно время скринсейвер «Waterfalls 3» шел в комплекте с таким adware : SaveNow, New.net, Yak Community Client, the Crunch Bar, Desktop Weather. 5 adware в одном флаконе! Представляю как были удивлены пользователи после того, как устанавливали весь этот «Зоопарк» на своем компьютере. За каждую инсталляцию этого adware соответствующие компании платили по 0.4-0.6 доллара, следовательно один скринсейвер за один раз моментально приносил компании Freeze около $2.5. Компания Freeze в свою очередь платила членам партнерки «Freeze Cold Cash» $1, если платила вообще ;) Разницу в $1.5 клала себе в карман (!). Мне нравится такой бизнес!

Сейчас компания «цветет и пахнет». Народ продолжает ваять скринсейверы для этой компании – хорошие скринсейверы идут на Freeze.com, ну а те, что похуже – на screensaver.com. Доход растет, а прибыль успешно делиться между учредителями компании. После того как компания перешла на тесное сотрудничество с другими Adware компаниями, новостей от компании стало меньше – Freeze.com «загерметизировалась».

Недавно скачивал их творения – мой антивирус ругался. А значит с компанией все в порядке ;-)

Парсим страницы, тащим e-mail

Ноябрь 24, 2008

Сразу скажу, что эта статейка для программистов на C++. Ходил по форумам и заметил, что народу нужно отпарсить html страницу и вытянуть оттуда все e-mail. Но почти всегда «глас страждущего в пустыне» остается не услышанным – те, кто знают как парсить – не хотят говорить, а те, кто не знают – дают какие-то общие советы, подчастую, не по теме. Решил частично восполнить этот пробел. Способов парсинга несколько: Boost, PCRE, Td1 и др. Пробовал разобраться с ними, но так как я жутко ленивый, то не хватило сил и мотивации, чтобы вникнуть в архитектурно-шизофренические особенности этих библиотек. Поэтому решил, что лучше самому написать алгоритм парсинга. Для этого я использовал связку C++ (MSVC++ 2008) & STL (моя самая любимая библиотека) . Алгоритм прост: находим в строке символ «@», декрементируем позицию влево от «@» до самого первого символа e-mail и фиксируем начало, инкрементируем позицию вправо от «@» до самого последнего символа e-mail и фиксируем конец, копируем символы с начала до конца, выводим на экран готовый e-mail.

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>

using namespace std;

string ExtractEmail(string &strIN)
{
string tmpStr;
string::size_type idxAt,idxEmailBegin,idxEmailEnd;
idxAt=strIN.find(«@»); //ищем символ «@»
if(idxAt!=string::npos)
{
idxEmailBegin=idxAt;
//ищем самый первый символ e-mail
do
{
idxEmailBegin–;
}while(isalnum(strIN.at(idxEmailBegin)) || strIN.at(idxEmailBegin)==’.’ || strIN.at(idxEmailBegin)==’-');
idxEmailEnd=idxAt;
//ищем самый последний символ e-mail
do
{
idxEmailEnd++;
if(idxEmailEnd>=strIN.size())
return «»;
}while(isalnum(strIN.at(idxEmailEnd)) || strIN.at(idxEmailEnd)==’.’ || strIN.at(idxEmailEnd)==’-');
string email;
//Копируем в пременную «email» все символы
//- с первого по последний
for(UINT i=idxEmailBegin+1; i<idxEmailEnd; i++)
email+=strIN.at(i);
//возвращаем готовый e-mail
return email;
}
else
return «»;
}

int _tmain(int argc, _TCHAR* argv[])
{
//строка для парсинга
string rawT=»<a href= target=_blank>1</a>my.mail-box@gmal.com</td>»;
//получаем e-mail, если он есть
string tmp=ExtractEmail(rawT);
//выводим результат на экран
cout << tmp.c_str() << endl;
return 0;
}

В результате программа выводит: my.mail-box@gmal.com

Я человек жадный $:-) , поэтому этот алгоритм не полный (за полный денюжку платить надо, однако) – находит только самый первый e-mail и дальше не ищет. Также в этом алгоритме нет проверки корректности e-mail. Но если ты, читатель, пишешь на C++ программы более сложные нежели «Hello World!» и знаешь что такое рекурсия, то тебе не составит труда усовершенствовать алгоритм до нужной кондиции ;-)

Direct Revenue – Золотой Век Adware

Ноябрь 23, 2008

В свое время компания «Direct Revenue» по-праву считалась одной из самых успешных и агрессивных Adware компаний в Интернете. Эта компания, одна из немногих, информация о которой смогла стать достоянием гласности (не без помощи Бенджамина Эдельмана). Свою жизнедеятельность DR начала еще в 2001 году. Почти сразу же вышла на прибыль, в отличие от большинства других стартапов того времени. Несколько раз получала инвестиции от венчурных фондов. Время, когда появилась эта компания можно было назвать «временем непуганных юзеров». Основным инструментом дистрибьюции adware был «Интернет Эксплорер» (а точнее возможность запустить ActiveX на компьютере с минимальным вмешательством пользователя), политики безопасности которого, в то время, были минимальны и установить некий «Ускоритель Интернета» на компьютер пользователя не представляло проблем. Также adware распространялось через: пиринговые клиенты (P2P – Morpheus), программу интернет-телефонии (Kazaa), диалеры, порно-контент (самораспаковывающиеся архивы, которые инсталлировали adware без ведома пользователя), Интернет Ускорители (реально они ничего не ускоряли), скринсейверы…

Некоторые факты. Количество инсталляций adware было велико – каждый день было активно от 7 000 000 до 12 000 000 пользователей. Приблизительно 70% из них составляли американцы. Каждый месяц к общей базе инсталляций добавлялось от 1 500 000 до 3 000 000 пользователей. Каждый месяц тратилось от $200 000 до $1 000 000 на выплаты партнерам, распространяющих adware. На обновление и рост компьютерного парка DR тратилось $20 000 – $38 000 в месяц. На хостинг уходило по $50 000 в месяц. Вся система DR «крутилась» на 75 серверах IBM (OS: Linux, DB: MySQL) в двух дата-центрах. Общее количество народа непосредственно работавших в офисе DR в 2004 – 43 человека. С каждой инсталляции adware DR имело в среднем $2.5 в год. Доход компании в 2004 году составил $38 000 000.

Партнерская сеть DR была очень большой. А сами партнерские отношения могли строиться в три способа: 1). Плата за загрузку adware, 2). Процент от прибыли (от рекламы сайтов), 3). Процент от проданных программ (одной из таких программ была анти-спайварная «Aurora»).

Главной статьей доходов была контекстная реклама. В то время почти все пользователи Интернета использовали для серфинга Эксплорер. DR сделал для него BHO, которое мониторило пользовательскую активность – сайты, на которые заходил пользователь, время, которое он проводил на сайтах и т.д. – все это отправлялось на серверы DR , анализировалось, создавался профиль пользователя (возможный пол, возраст, …) и по этому профилю adware показывало рекламу. Этот профиль пользователя «жил» недолго – максимум сутки. «Короткая» жизнь профиля была обусловлена переменчивостью желаний серфера – сегодня ищет одно, а завтра другое. Основным способом рекламы были Pop-Up, генерируемые BHO. Эти Pop-Up в сочетании с анализом поведения пользователя давали поразительные результаты – пользователь со «свежей» инсталляцией adware реагировал(кликал) на рекламу в 30(!) раз активнее чем на самые красочные баннеры на лучших местах сайтов. Вначале одному пользователю показывались 3 Pop-Up в сутки, но боссам DR этого показалось мало и они стали увеличивать количество Pop-Up – дошло до того, что некоторым пользователям показывалось по 30-40 Pop-Up в сутки. Жадность возобладала – и это стало началом конца.

С конкурентами DR боролась активно. У компании был отдел программистов-куль-хацкеров. Отдел назывался «Dark Arts» («Темные Искусства» из книги о Гарри Поттере) :) Так вот этот самый отдел выпускал так называемые «торпеды» – программы, которые удаляли какое-то одно adware конкурента. На всех своих конкурентов DR имело по «торпеде» и успешно этим пользовалось. Дошло даже до суда – один из adware конкурентов пожаловался, что DR своими «торпедами» уничтожило половину инсталляций (около 1 000 000). На что представители DR ответили – «выживает сильнейший!». Потом DR оформило все свои «торпеды» в виде одного анти-спайваре приложения «Aurora» и начала распространять эту программу как shareware – хочешь полнофункциональную версию – плати и все adware (и DR, и других компаний) будет удалено, не хочешь платить – тогда бесплатная версия «Aurora» удалить все adware кроме DR (а если DR не будет на компьютере, то «Aurora» его установит:) ). Но этот проект оказался неудачным, несмотря на то, что программа работала «на Ура!».

Когда началась волна негодований пользователей, на компьютерах которых было установлено adware от DR, компании пришлось активнее сотрудничать с юристами. А так как в США закон превыше всего, то любое соглашение или контракт подписанный пользователем имеет юридическую силу. Поэтому, чтобы защититься от преследований со стороны пользователей юристы DR составили очень грамотную EULA (End User License Agreement). В этом документе на 30 страниц были вставлены несколько предложений, из которых выходило, что DR имеет право устанавливать на компьютер пользователя все, что пожелает, даже без уведомления пользователя об этом. Также DR разрешалось удалять любые программы, которые DR посчитает опасными для своего adware. Но кто из ВАС хоть раз в жизни полностью прочитал EULA к Microsoft Office, например? Вот и пользователи сразу соглашались с EULA, не прочитав ни строчки!

Но есть выражение – «Ничто не вечно под Луной». Так и DR – ее время пришло и ушло. Количество компаний занимающихся Adware стало так велико, что терпению пользователей (американских) пришел конец. Пользователи заставили конгрессменов принять соответствующие законы, регламентирующие деятельность Adware компаний. Потом Microsoft начала выпускать разные “Security Fixes», которые затруднили установку adware на компьютеры пользователей без их согласия. А Элиот Спитцер (прокурор штата Нью-Йорк) добился того, что DR пришлось заплатить многомиллионный штраф за незаконные способы инсталляции adware.

P.S. Этот пост не претендует на полноту описания деятельности DR – я не описал даже 1/50 того, что происходило в этой компании.

P.P.S. В adware бизнесе есть несколько особенностей, которые делают его привлекательным для РУ/УАнета: 1). минимальные инвестиции, 2). Почти полное отсутствие легальных игроков на нашем adware-рынке рекламы (только Агава более-менее светиться со своим FilePacker, а про Letitbit и говорить нечего – он со своим adware так задолбал Яндекс, что Яндекс вынудил его сойти с дистанции).

Легальное Adware – реально или нет?

Ноябрь 20, 2008

Любое Adware – утопия, если ориентироваться на «затрахивание» юзера рекламой в виде подмены контента в браузере (яркий пример – “180Solutions/Zango”) или безумное количество по-апов в сутки(“Direct Revenue”). Зарабатывать деньги в adware возможно двумя способами:

1.    Плевать на Все и на Всех! Запускаются черви (USB, E-Mail), которые инфицируют компьютеры пользователей. Потом на эти компьютеры устанавливаются рекламные модули с руткитами на борту и начинается «затрахивание» пользователя поп-апами, подменой контента, фолс  алармами всякого псевдо-anti-spyware… Деньги можно срубить сразу и прилично. Но есть одна незадача – как только подобная деятельность переходит определенный рубеж, то на эту adware-компанию сразу же набросятся антивирусники, ФСБ, ФБР, СБУ и еще хрен знает кто! Так что этот способ лично для меня – идет фтопку!

2.    Создается белая компания с официальным офисом, телефонами (хотя бы Скайп, но лучше реальные телефоны). Запускается партнерская компания – привязка рекламных модулей к разным shareware программам(например – Aureate/Radiate), скринсейверам(например – Vomba), обоям(например – Vomba), играм(например – Platrium (ex. Zango)),… Все партнеры, распространяющие adware мониторятся – как только начинается нелегальное распространение adware модулей (через СПАМ, черви, ботнет-загрузки…), то соответствующий экаунт блокируется, а вся инфа о партнере отправляется в отдел «К» по первому требованию. Adware модуль не прячется в системе пользовательского компьютера (НИКАКИХ руткитов!). Каждый пользователь имеет возможность легко и быстро деинсталировать adware со своего компьютера. А если деинсталяция невозможна, то пользователь должен иметь возможность получить соответствующую помощь через тех-поддержку (email, телефон). Бухгалтерская отчетность Adware компании ведется так, чтобы у налоговиков не возникало лишних вопросов.

В первом способе все делается быстро , но также быстро и заканчивается, к тому же в этом случае Adware компания не имеет возможности судиться с антивирусными вендорами по-поводу присутствия сигнатур соответствующего adware в антивирусных базах.  Во втором случае все делается несколько растянуто и легально, но именно благодаря этому НИКТО не будет иметь поводов закрыть компанию, отобрать домен… К тому же компания сможет ОТКРЫТО судиться с антивирусниками.

Я мог бы писать еще много и нудно, но пока выданной мною инфы достаточно. Если кому интересно, то я могу расписать развитие adware в ретроспективе (с моей точки зрения) или рассказать о том, как я встречался с одним из партнеров (из TOP10) ныне почившей в бозе компании «Direct Revenue» :-)

Много потоков, один ресурс. Как быть?

Ноябрь 19, 2008

Возникла необходимость в многопоточной обработке контента. Поэтому было решено купить хорошую книженцию из области Системного Программирования по C++. Выбор пал на книгу «Windows via C/C++ Программирование на Visual C++», Джефри Рихтер, Кристоф Назар, 2009 года (книжка из будущего?? :-) ). Впечатление от книги двоякое, но об этом как-нибудь потом. В этой книге было предоставлено несколько решений проблемы одновременного доступа нескольких потоков к одному ресурсу, будь то переменная, файловый дескриптор или еще что-то. На данный момент мне больше всего понравился способ – «Использование Критических Секций». Способ легкий (в книге правда он описан не так детально как хотелось бы – пришлось к книге использовать и MSDN). Суть способа состоит в том, что программист определяет переменную критической секции кода, инициализирует эту критическую секцию, а потом, по мере необходимости, один из нескольких одновременно исполняющихся потоков входит в эту критическую секцию, делает что ему надо, и выходит. Прелесть в том, что пока один поток находится в критической секции кода, то все другие потоки вынуждены ждать пока эта секция освободится. Как результат – нет коллизий при доступе нескольких потоков к одному ресурсу.
Вот небольшой пример того как можно использовать Критические Секции кода для того , чтобы несколько потоков могли писать в один файл не портя его:

#include <afx.h>
#include <afxwin.h>
#include <stdio.h>
#include <tchar.h>
#include <vector>
using namespace std;
CFile file;
CRITICAL_SECTION file_cs;

struct MyStruct
{
    char* thrdName;
};

DWORD WINAPI MyThread(PVOID pvParam)
{
    Sleep(3000);
    MyStruct* tpvParam = static_cast<MyStruct*>(pvParam);
    char bigStr[10];
    strncpy_s(bigStr,sizeof(tpvParam->thrdName),tpvParam->thrdName,10);
    EnterCriticalSection(&file_cs);
    for(UINT i=0;i<100;i++)
    {
        file.Write(bigStr,strlen(bigStr));
        Sleep(10);
    }
    file.Write(«\n\n»,strlen(«\n\n»));
    LeaveCriticalSection(&file_cs);
    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    file.Open(_T(«text.txt»),CFile::modeCreate|CFile::modeReadWrite);
    InitializeCriticalSection(&file_cs);
    DWORD thrdID[5];
    HANDLE hArr[5];
    MyStruct* object0 = new MyStruct();
    object0->thrdName=»0″;
    hArr[0]=CreateThread(NULL,0,MyThread,(PVOID)object0,0,&thrdID[0]);
    MyStruct* object1 = new MyStruct();
    object1->thrdName=»1″;
    hArr[1]=CreateThread(NULL,0,MyThread,(PVOID)object1,0,&thrdID[1]);
    MyStruct* object2 = new MyStruct();
    object2->thrdName=»2″;
    hArr[2]=CreateThread(NULL,0,MyThread,(PVOID)object2,0,&thrdID[2]);
    MyStruct* object3 = new MyStruct();
    object3->thrdName=»3″;
    hArr[3]=CreateThread(NULL,0,MyThread,(PVOID)object3,0,&thrdID[3]);
    MyStruct* object4 = new MyStruct();
    object4->thrdName=»4″;
    hArr[4]=CreateThread(NULL,0,MyThread,(PVOID)object4,0,&thrdID[4]);
    WaitForMultipleObjects(5,hArr,TRUE,100000);
    file.Close();
    DeleteCriticalSection(&file_cs);
    return 0;
}