В чем интернет-бум оказался прав

В 1998 и 1999 гг. мне довелось работать в Yahoo, поэтому я наблюдал интернет-бум из первого ряда. Однажды, когда цена акций Yahoo составила примерно $200, я решил рассчитать справедливую, на мой взгляд, цену. У меня получилось $12. Я рассказал об этом своему другу и коллеге Тревору. «Двенадцать!» – воскликнул он, попытавшись изобразить возмущение, но ему это не очень удалось. Мы оба знали, что это была сумасшедшая оценка.
Yahoo – это особый случай. Экономически неоправданными были не только отношение стоимости компании к ее доходам, но и половина наших доходов. Конечно, до Enron нам было далеко. . Финансисты компании очень дотошно относились к отчетам о доходах. Неоправданными наши доходы делал тот факт, что Yahoo по сути являлась основой финансовой пирамиды. Глядя на доходы Yahoo, инвесторы думали, что интернет-компании на самом деле могут приносить деньги. Поэтому они и инвестировали в новые стартапы, обещавшие стать следующими Yahoo. Но как же эти стартапы распоряжались только что полученными деньгами? Для раскрутки собственного бренда они тратили миллионы долларов на рекламу на том же Yahoo. И в результате деньги, вложенные в стартапы в первом квартале, уже во втором становились доходами Yahoo – стимулируя таким образом следующую волну инвестиций.
Система функционировала подобно финансовой пирамиде: то, что казалось прибылью, на самом деле было всего лишь последними инвестициями. От финансовой пирамиды эта схема отличалась только тем, что возникла непреднамеренно. По крайней мере, я так думаю. Хотя венчурный бизнес довольно непрозрачен, и, скорее всего, у некоторых людей была возможность если и не создать такую ситуацию, то, по крайней мере, понимать происходящее и воспользоваться этим.
Год спустя игра окончилась. Начиная с января 2000 года цена акций Yahoo стала снижаться, и в конечном итоге они потеряли 95% своей стоимости.
Но обратите внимание, что даже после такого невероятного усыхания Yahoo все еще стоил немалых денег. Даже согласно отрезвляющим оценкам марта и апреля 2001-го работники Yahoo смогли создать компанию стоимостью в восемь миллиардов долларов всего за шесть лет.
Хотя разговоры о «новой экономике», так часто звучавшие во время бума, казались абсурдом, все же доля истины в них есть. Ведь для по-настоящему большого бума необходимо нечто действительно стоящее, на что клюнут даже умные люди. Например, и Исаак Ньютон, и Джонатан Свифт в 1720 году потеряли деньги на акциях «The South Sea Company» (дополнительная информация о буме акций компании South Sea – прим. перев.).
Теперь же маятник качнулся в обратную сторону. Все, что вошло в моду во время бума, стало в силу самого этого факта немодным сейчас. Но это тоже ошибка – и даже большая, чем безоговорочная вера в «новую экономику» в 1999-м. Для будущего то, что было сделано правильно во времена бума, намного важнее совершенных ошибок.

Венчурный капитал в розницу

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

Интернет

Интернет – это на самом деле важнейшее явление. Это одна из причин, по которой даже умные люди были обмануты бумом. То, что Интернет вызовет огромные изменения, казалось очевидным. Достаточно ли этих изменений, чтобы утроить стоимость компаний, входящих в Nasdaq, в течение двух лет? Как оказалось, нет. Но тогда это не было известно наверняка. [1]
По такому же сценарию развивались и прочие бумы: Mississippi (дополнительная информация о буме акций компании Mississippi – прим. перев.) и South Sea. Они стали возможны благодаря появлению института публичного капитала (South Sea Company, несмотря на свое название, была по существу конкурентом Банку Англии). И в долгосрочной перспективе появление этого института оказалось действительно важным событием.
Распознать важную тенденцию зачастую проще, чем придумать способ заработать на ней. Инвесторы склонны постоянно совершать одну главную ошибку – слишком буквально воспринимать тенденцию. Так как Интернет оказался весьма значительным явлением, инвесторы предположили, что чем сильнее «интернетизирована» компания, тем лучше. Так появились компании типа Pets.Com.
На самом же деле большая часть прибылей от значительных сдвигов извлекается опосредованно. Во времена железнодорожного бума больше всех заработали не сами железные дороги, а такие компании, как «Carnegie’s steelworks», производитель шпал, и «Standard Oil», доставлявшая нефть на Восточное побережье, откуда ее отправляли в Европу.
Мне кажется, что появление Интернета будет иметь колоссальные последствия, причем грядущие несравнимы с уже имеющимися. Но большинство выигравших от него лишь с натяжкой можно будет назвать интернет компаниями; на каждый Google придется десять JetBlues.

Варианты выбора

Почему Интернет спровоцирует такие огромные изменения? Во-первых, так всегда происходит с новыми формами коммуникаций. Они редко появляются (до индустриальной эпохи были лишь речь, письменность и книгопечатание), но своим появлением всегда вызывают сильную ответную реакцию.
Во-вторых, Интернет предоставляет нам большую свободу выбора. В «старой» экономике высокая стоимость предоставления информации конечным потребителям обусловливала незначительное число вариантов. Крошечный и дорогостоящий путь к потребителю был красноречиво назван «каналом». «Контролируйте канал, и вы сможете скормить потребителю все что угодно, на выгодных вам условиях» – подобный подход исповедовали не только корпорации. Точно так же действовали профсоюзы, традиционные новостные СМИ, литературный и художественный истэблишмент. Успех зависел не от качества продукта, а от получения контроля над узким каналом передачи информации о нем.
Сейчас ситуация меняется. Google имеет 82 миллиона уникальных посетителей в месяц и ежегодный доход примерно в три миллиарда долларов. [2] А вы когда-нибудь видели рекламу Google? Что-то определенно меняется.
Правда, следует признать, что Google – это особый случай. Переключиться на использование другого поискового сервера очень легко. Найти новый поисковик можно приложив совсем небольшое усилие и не потратив ни копейки, и если его результаты окажутся лучше – это легко заметить. Именно поэтому Google не нуждается в рекламе. В его виде бизнеса достаточно просто быть лучшим.
Замечательнее же всего в Интернете то, что он постепенно все сдвигает в этом направлении. Если вы хотите победить за счет лучшего продукта, сложнее всего придется в начале. В конечном итоге, благодаря сарафанному радио, все узнают, что вы лучший, но как вы доживете до этого момента? Поэтому именно на этой критической стадии Интернет имеет наибольшее значение. Во-первых, он позволяет найти вас кому угодно и при минимальных затратах. Во-вторых, он резко увеличивает скорость распространения вашей репутации посредством сарафанного радио. В итоге это означает, что во многих областях справедливо следующее правило: создай продукт, и люди придут. Создай нечто стоящее и размести это в Интернете. Этот совет радикально отличается от рецепта успеха в прошлом веке.

Молодежь

Одним из фактов интернет-бума, привлекшим наибольшее внимание прессы, была молодость некоторых основателей стартапов. Эта тенденция сохранится и в дальнейшем. 26-летние люди невероятно разные. Одни способны выполнять лишь работу начального уровня, а другие готовы править миром, если смогут найти того, кто сделает за них бумажную работу.
26-летние могут не очень хорошо руководить людьми или работать с SEC (Securities and Exchange Commission – Комиссия по ценным бумагам и биржам США, – прим. перев.) – для этого нужен опыт. Но выполнение подобных функций можно легко возложить на заместителя. Ведь самое главное качество главы компании – это его видение будущего компании и ее следующих шагов. А на этом поле некоторые 26-летние дадут фору кому угодно.
В 70-х годах прошлого века президентами компаний были люди как минимум 50 лет. Если в компании работали технари, с ними обращались, как со скаковыми лошадьми: поощряли призами, но к власти не допускали. Однако вместе с ростом значения технологий росло и влияние технарей. И теперь главе компании уже недостаточно иметь под рукой умника, у которого можно проконсультироваться по техническим вопросам. Ему все чаще приходится самому быть таким умником.
Бизнесу тяжело отказаться от своих традиций. Поэтому венчурные капиталисты все еще стремятся назначать главой компании презентабельную публичную фигуру. Но основателям компании все чаще принадлежит реальная власть, а седовласый назначенец венчурных капиталистов скорее похож на музыкального менеджера, чем на боевого генерала.

Неформальность

В Нью-Йорке бум имел серьезные последствия: костюмы вышли из моды, они старили. И в 1998-м влиятельные люди Нью-Йорка все как один вдруг надели рубашки с открытым воротом, хаки и овальные очки с оправой, точь-в-точь как парни из Санта Клары.
Маятник немного качнулся обратно, отчасти из-за панической реакции производителей одежды. Но я ставлю на рубашки с открытым воротом. Это отнюдь не мелочь, как может показаться. Важность одежды чувствуют все ботаники, хотя они могут и не осознавать этого.
Если вы ботаник, вы поймете важность одежды, если зададите себе вопрос: как бы вы отнеслись к компании, заставляющей вас одевать на работу костюм и галстук. Даже представить ужасно, не правда ли? И ваша реакция вызвана отнюдь не одним только дискомфортом от ношения такой одежды. Только компания с серьезными внутренними проблемами станет заставлять программистов носить костюмы.
Проблема компании будет в том, что внешний вид работника будет значить больше, чем качество его идей. Именно в этом недостаток формальностей. Официальный стиль в одежде сам по себе не так уж плох. Проблема в вызываемых им ассоциациях: официальный стиль считается заменителем хороших идей. Неудивительно, что технически беспомощных деловых людей называют «пиджаками».
Неформальный стиль в одежде ботаники выбрали неспроста. Они делают это слишком единодушно. Сознательно или нет, их неформальный стиль одежды служит профилактикой глупости.

Ботаники

Одежда – это всего лишь самое явное поле боя в войне с формальностями. Ботаники стараются избегать всех видов формальностей. На них, например, нельзя произвести впечатление названием должности или любыми другими атрибутами власти.
На самом деле, это практически определение ботаника. Я недавно разговаривал с человеком из Голливуда, который собирался сделать шоу, посвященное ботаникам. Мне показалось полезным объяснить, кто такой ботаник. В результате я нашел следующее определение: ботаник – это тот, кто не прикладывает никаких усилий для саморекламы.
Другими словами, ботаник – это тот, кто концентрируется на содержании. Так что же общего у ботаников и технологии? Коротко говоря, то, что вы не можете обмануть матушку-природу. В технических задачах вам необходимы правильные результаты. Если ваша программа допустит ошибку в расчете траектории космического аппарата, вы не сможете выкрутиться, сказав, что у вас патриотичный или авангардистский программный код, или использовать любую другую отговорку, характерную для нетехнических областей.
По мере того, как технологии станут приобретать все большее экономическое значение, будет расти и влияние культуры ботаников. Быть ботаником сейчас уже гораздо круче, чем во времена моего детства. В середине восьмидесятых, когда я учился в колледже, слово «ботаник» считалось оскорблением. Поэтому изучавшие информационные технологии старались скрывать этот факт. А сейчас женщины спрашивают меня, где они могут познакомиться с ботаниками. (Первое, что приходит в голову, – «Usenix» – прим. перев.), но это то же самое, что пить из пожарного брандспойта).
Я не питаю иллюзий о том, почему культура ботаников расширяет круг своего влияния. И здесь дело не в том, что все вдруг осознали, что содержание важнее формы. Дело в том, что ботаники становятся богачами. И так будет продолжаться дальше.

Опционы

Обычно ботаники становятся богатыми благодаря опционам на акции. Сейчас предпринимаются шаги в сторону усложнения процесса предоставления опционов для компаний (уже принят Sorbanes Oxley Act – прим. перев.). Оправданы любые действия по устранению действительно существующего беспорядка в отчетности. Но не стоит убивать курицу, несущую золотые яйца. Передача акций компании работникам служит топливом, приводящим в движение технический прогресс.
Передача опционов – это хорошая практика потому, что а) она – честная, и б) она работает. Работники компании (будем надеяться) повышают ее стоимость, поэтому поделиться с ними – просто честно. А на практике люди работают гораздо лучше, если у них есть опционы. Я видел это собственными глазами.
Тот факт, что несколько мошенников во время бума ограбили свои компании, предоставив опционы самим себе, еще не означает, что опционы – это плохо. Во время железнодорожного бума некоторые управляющие обогатились на продаже «разбавленных» акций, выпустив больше акций, чем, по их словам, находилось в обращении. Но это не означает, что публичные торги акциями – плохая идея. Мошенники всегда воспользуются любым доступным способом.
Основной недостаток опционов в том, что они поощряют не совсем то, что нужно. Неудивительно, что люди делают то, за что им платят. Если вы платите им почасово, они будут работать много часов. Если вы платите за объем выполненной работы, они будут выполнять больший объем работы (но только в соответствии с вашим определением). А если вы платите им за повышение рыночной стоимости акций, как в случае с опционами, они будут ее повышать.
Но это не совсем то, что вам нужно. Ведь вы заинтересованы в повышении истинной стоимости компании, а не ее рыночной оценки. Со временем эти значения неизбежно выравниваются, но не всегда до того, как работники получат право выкупить опционы. Следовательно, опционы побуждают работников, в лучшем случае неосознанно, «накачивать и сбрасывать» – то есть действовать так, чтобы компания казалась более ценной. Я обнаружил это, когда работал в Yahoo. И вместо того, чтобы ответить самому себе на вопрос: «Хорошая ли это идея?», я все время думал: «Как к этому отнесутся инвесторы?».
Так что стандартный механизм предоставления опционов, может быть, и нуждается в небольшой доработке. Возможно, опционы должны быть заменены на нечто, более непосредственно связанное с прибылью. Мы еще только в начале пути.

Стартапы

Наибольшую пользу принесли опционы на акции стартапов. Стартапы, конечно же, – не изобретение бума, но в тот период они были заметны как никогда.
Но зато во время бума мы впервые столкнулись с созданием стартапа, нацеленного на продажу. Изначально стартап означал небольшую компанию, надеющуюся вырасти в большую. Но сейчас стартапы все больше превращаются в машину по созданию конкретной технологии.
В своей книге «Hackers & Painters» я написал, что работники, по-видимому, наиболее продуктивны тогда, когда оплата их труда пропорциональна создаваемой ими ценности. И преимущество стартапов, и основная причина их существования, в том, что они предлагают нечто, иначе никак не достижимое: способ измерения создаваемой каждым ценности.
Зачастую компаниям выгоднее получить технологию путем приобретения стартапа, чем самостоятельной разработки. Это стоит дороже, но зато меньше риска, а большие компании стремятся избегать рисков. Подобный подход делает разработчиков технологии гораздо более ответственными, поскольку они заработают только в том случае, если им удастся победить. В конечном итоге вы получите лучшую технологию, к тому же быстрее, потому что она разрабатывалась в инновационной атмосфере стартапов, а не в бюрократической среде больших компаний.
Наш стартап, Viaweb, изначально создавался для продажи. И мы с самого начала сказали об этом инвесторам. Поэтому мы прикладывали все усилия к созданию продукта, способного легко встроиться в большую компанию. Такой метод – модель будущего.

Калифорния

Бум был калифорнийским явлением. Когда в 1998 году я появился в Кремниевой Долине, я почувствовал себя иммигрантом из Восточной Европы, прибывшим в Америку 1900-х годов. Все вокруг были такими восторженными, здоровыми и богатыми. Казалось, что это новый идеальный мир.
Теперь же пресса, всегда склонная делать из мухи слона, упорно твердит о том, что Кремниевая Долина – это город-призрак. Я бы так не сказал. Когда я ехал из аэропорта по 101 шоссе, я ощущал бурлящую энергию, как будто поблизости находился огромный трансформатор. Недвижимость там и сейчас одна из самых дорогих в стране. Люди выглядят по-прежнему здоровыми, а погода все также великолепна. Там – будущее. (Я говорю «там», потому что после ухода из Yahoo вернулся на Восточное побережье, и до сих пор не уверен, что это была правильная идея.)
Побережье Сан-Франциско выигрывает благодаря настрою людей. Я понял это по возвращении в Бостон. Первым, кого я увидел при выходе из терминала аэропорта, оказался толстый сварливый мужик, отвечающий за подачу такси. Готовясь к встрече с грубостью, я сказал себе: не забывай, ты опять на Восточном побережье.
В разных городах и атмосфера различная, а такие хрупкие организмы, как стартапы, весьма чувствительны к подобным различиям. Для описания атмосферы, царящей на побережье Сан-Франциско, лучше всего подошло бы слово «прогрессивная», если бы оно не воспринималось как современный эвфемизм для «либерального». Там люди пытаются создавать будущее. В Бостоне есть Массачусетский технологический институт (MIT) и Гарвард, но там полно и агрессивных объединенных в профсоюзы работников. Например, полицейских, недавно проводивших Democratic National Convention (подробнее о DNC – прим. перев.) по вопросам освобождения под залог, и людей, пытающихся быть Терстоном Ховелом (Thurston Howell), – две стороны устаревшей медали.
Кремниевая Долину, возможно, и нельзя назвать новым Парижем или Лондоном, но это точно новый Чикаго. И в ближайшие 50 лет новые крупные состояния будут создаваться именно там.

Производительность

Во время бума оптимистично настроенные аналитики оправдывали высокое отношение стоимости компаний к их прибыли тем, что технология резко поднимет производительность. Они ошибались относительно конкретных компаний, но в целом были отчасти правы. Я считаю, что одной из основных тенденций наступившего века станет резкое увеличение производительности труда.
Точнее, огромный скачок в разбросе производительности. Технология – это рычаг. Она не прибавляет, а умножает. Если сейчас производительность варьируется от 0 до 100, то умножение на 10 расширит диапазон от 0 до 1000.
Вследствие этого компании будущего смогут быть поразительно небольшими. Я иногда фантазирую о том, какие огромные обороты могут быть у компании, в штате которой не более 10 человек. Что произойдет, если вы передадите на аутсорсинг все, кроме разработки продукта? Если бы вы рискнули осуществить этот эксперимент, я думаю, вы бы очень удивились, насколько многого вам удалось бы достичь. Как писал Фредерик Брукс, небольшие группы всегда более продуктивны, поскольку количество взаимодействий внутри группы растет пропорционально квадрату ее размера.
До недавних пор создание значимой компании означало управление армией служащих. Наши понятия о необходимом компании количестве сотрудников все еще находятся под влиянием стереотипов прошлого. Стартапы вынужденно малы, поскольку они не могут позволить себе нанять большое количество людей. Но я считаю серьезной ошибкой ослаблять ремни, как только вырастут доходы. Дело не в том, будете ли вы способны выплачивать дополнительные зарплаты. А в том, что потеря производительности как следствие увеличения компании – непозволительна.
Появление технологического рычага, конечно же, увеличит число безработных. Я удивлен, что люди до сих пор опасаются этого. Прогресс, по всеобщему мнению, всегда убивал рабочие места. Несмотря на это разница между количеством рабочих мест и числом желающих их получить не превышает 10%. Это не может быть простым совпадением, здесь явно существует некий балансирующий механизм.

Что новенького?

Если суммировать все вышесказанное, то можно ли найти во всех названных тенденциях некую общую закономерность? Похоже, что да:

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

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

Сноски

[1] На самом деле это неизвестно даже сейчас. Как утверждает Jeremy Siegel, если стоимость акций определяется будущими доходами, вы не можете определить, переоценены они или нет, до тех пор, пока не увидите фактические доходы. Несмотря на то что факт переоценки в 1999 году некоторых знаменитых интернет-компаний практически не вызывает сомнений, нельзя утверждать наверняка, был ли, например, переоценен Nasdaq.

Siegel, Jeremy J. «What Is an Asset Price Bubble? An Operational Definition.» European Financial Management, 9:1, 2003.

[2] Количество пользователей взято из исследования Нильсена (Nielsen), проведенного в июне 2003 года и на которое ссылается сайт Google. (Можно было бы ожидать, что у них найдется что-нибудь и посвежее.) Оценка доходов основана на заявленном ими при выходе на биржу доходе в 1,35 миллиарда долларов за І полугодие 2004 года.

Источник: В чем интернет-бум оказался прав

Оригинал: What the Bubble Got Right

, , , , , , ,

Нет комментариев

Qt: интерфейс, и не только…

Если вы связаны с программированием, то наверняка уже встречали сочетание Qt. Многие (0,1%) из вас даже использовали Qt в своих разработках, пусть даже как следствие инсталляции Borland Kylix. В общем, самое время посмотреть на Qt, что называется, «в упор, двумя глазами»…

Этот продукт на слуху у всех разработчиков, которые программируют для Linux. И не только у них — например, самый модный и удобный многоплатформенный клиент для сетей AIM/ICQ (точнее, ICQ/AIM), sim, написанный питерцем Володей Шутовым, создан именно с использованием Qt. Не говоря уже о Borland Kylix — там вообще все работает поверх Qt.

Такие совпадения — там вилочка, тут ножичек — поневоле задумаешься…

Идея

Норвежская компания Trolltech AG (изначально называвшаяся Quasar Technologies, откуда, собственно, и пошла аббревиатура Qt) образовалась из двух (хм…) норвежцев, Эйрика Енга (Eirik Eng) и Хаварда Норта (Haavard Nort) с целью… короче, как всегда, с целью подрубить бабла. Но, кроме того, еще и создать пару нетленок из разряда универсальных библиотек, которые завоюют весь мир. Уж такой народ норвежцы — не могут без славы и денег.

Дело было в 1994 г. в городе Осло. Само сочетание «Qt» некоторые произносят как «кьют» ака cute — то есть «мило, прикольно». В общем-то, так оно и есть, если, конечно, вы способны оценить красоту, выраженную в терминах С++.

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

Как известно, MS Windows использует «локальный» GUI API, который, однако, недавно был транспонирован на сетевые подключения в XP Remoting. Все UNIX-like, и Linux в том числе, были изначально (ну, как изначально — как только рабочие станции доросли до графики, естественно) завязаны на X Windows, который, хоть и работает от рождения по сети, но локально показывает худшие характеристики быстродействия и реактивности из всех рассматриваемых интерфейсов. Наконец, графика Mac OS, зашитая полуаппаратно в фирменных BIOS-»тулбоксах», всегда показывала скорость и красоту, даже когда Windows еще под стол пешком ходила. Но это было: а) проприетарно, б) ни с чем не совместимо — даже приблизительно.

Короче — бардак и брожение умов. Вот прибалты и задумались…

Точнее задумались-то не только они. В качестве переносимого графического интерфейса можно использовать хоть Java, хоть Tk/Tcl, а хоть и Macromedia Flash — на последних версиях этого Flash можно писать вполне приличные приложения. Это только те «задумавшиеся», у кого получилось,— об остальных мы просто не знаем.

Да, так вот, у Trolltech тоже неплохо получилось, как именно — сейчас посмотрим.

Кю-тэшное семейство, обзор

На самом деле существует несколько продуктов Qt, хотя все они «завязаны» на одном и том же коде. Собственно Qt — это межплатформенная библиотека для С++. Более конкретно — библиотека классов, «цешники»-натуралы отдыхают. То есть это даже и библиотекой-то не назовешь — сами создатели именуют это как framework, то есть программная оболочка. Но, конечно, от этого она не перестает быть обычной библиотекой.

qt1

Применение нового «стиля» в Qt может мгновенно придать вашему приложению новый вид

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

Третье, что было сделано (кстати, уже по ходу разработки — по просьбе многих клиентов), это системно-независимые механизмы доступа к базам данных. Конечно, я уже не говорю о таких вещах, как унифицированный сетевой доступ, XML, трехмерная графика и так далее — просто различия в этих сферах не так разительны, как в перечисленных выше.

Выходит, что Qt — это как бы «мегапатч» к стареньким си-либам, позволяющий:

  1. работать в графике;
  2. переводить программы;
  3. выполнять запросы к БД;
  4. унифицированно реализовывать все остальное, вроде мультимедиа.

Помимо основной библиотеки, существует основанный на том же коде framework для всякой мобильной живности вроде смарт-фонов и PDA под управлением Embedded Linux (особенно засветился в этом секторе Sharp). Называется эта штуковина Qtopia. Инструмент для разработки встроенных систем с ограниченной функциональностью называется Qt/Embedded.

Далее, QSA — скриптовый язык, позволяющий управлять готовыми приложениями на Qt/C и расширять их возможности в скриптовом контексте.

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

Ко всему, существует несколько «плугов» для известных сред разработки (говоря проще — для Visual Studio и Borland Builder), упрощающих разработку под Qt,— Qt Solutions.

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

Однако сосредоточимся на Qt — все остальное вторично.

Инсталл

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

Во-вторых, при инсталляции предпоследним пунктом идет установка примеров. Они приходят в виде исходных текстов, но в процессе установки будут компилироваться. Компиляция происходит в командной строке, так что без установленных переменных окружения это не сработает, получите ошибку «где линкер дел, гад?». Пофиксить проблему просто: создайте и запустите bat-файл типа:

call "C:\Program Files\Microsoft Visual Studio .NET
2003\Common7\Tools\vsvars32.bat"
qt-win-eval-msvc-3.3.3.exe

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

Если вы инсталлируетесь под Linux и BSD, то я вам ничего не стану рассказывать — сами с ушами. Скажу только, что уровень проблем при инсталляции под этой ОС может колебаться в очень больших пределах, в зависимости от поддержки вашего дистрибутива и его «комплектации» на момент установки. Я ставил на Slakware, RH и Mandrake без особых проблем. В любом случае Qt нужно ставить на KDE.

Библиотека, learning curve

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

Может быть, не первая по важности, но несомненно нужная после инсталляции вещь — просмотр, распечатка, (а возможно, и татуировка на груди — вверх ногами, чтобы читать было удобно) иерархии классов Qt.

Это, в общем-то, относится к любой библиотеке. Но в некоторых «системах ценностей» вы можете прожить три жизни, и проходить при этом «в лаптях», то есть использовать 3% от всех возможностей, обходя стороной то, что, собственно, и составляет ценность продукта. Пример: множество малопонятных функций в MS Exсel, масса никому не нужных ActiveX-компонент (помните, как они продавались почти по одной штучке — во цирк!) и т.д. В Qt все несколько иначе — вы в конце концов будете использовать 50-80% всех классов, так что «отбыть номер» не удастся.

На рисунке приведен сильно уменьшенный вариант этой самой схемы — но вы можете распечатать и большой вариант. Он расположен по адресу ftp://ftp.trolltech.com/qt/pdf/qt33-class-chart.pdf и, кроме того, лежит прямо здесь.

Непременно прочитайте whitepapers — в отличие от других «белок», это не просто набор рекламных лозунгов. После чтения приведенных там примеров вы даже сможете построить несколько приложений.

Как маршрут для вечерних прогулок вы должны избрать посещение сайта http://doc.trolltech.com/3.3/ — вас там многое заинтересует, начиная, конечно, с How To Learn Qt. Собственно, всегда лучше начинать с голого кодирования, не пользуясь автогенераторами — или пользуясь, но при этом тщательно разбирая код. В противном случае вы напишете что-то, что потом не сможете ни объяснить, ни поддержать, ни модифицировать.

Как оно работает

Говоря в общем, все вращается вокруг событий, называемых сигналами, и слотов — то есть регистрируемых реакций на эти события. В отличие от других «закрытых» событийных множеств (вроде тех, что встречаются в Active Script) система сигналов Qt полностью динамическая — каждый участок кода может регистрировать или обрабатывать сигналы. Это напоминает механизм, условно известный как WM_USER+1.

Сигналы имеют отдаленное отношение к системным событиям и являются их произвольной трансляцией — так же как это реализовано в Delphi. Естественно, что ни одна система не должна порождать таких шквалов нотификаций, как Windows. Обеспечивать приложению доступ к событиям неклиентской области — по-моему, большая ошибка архитекторов этой системы, породившая немало «смешных» интерфейсов.

Что касается графического интерфейса, то он более всего похож на Java Swing — тут тоже существуют схемы стилей, например Windows, CDE, Motif, копирующие известные оболочки. Присутствуют также layout’ы, автоматически размещающие элементы управления; кроме того, есть такие «пружинки», или «спейсеры», которые расталкивают сопредельные компоненты.

Есть также немало вещей, напоминающих Delphi: хинты размеров (то есть «как было бы лучше»), масштабирование компонент и прочие вещи, претендующие на красивость.

Как и в Swing, все элементы перерисованы от руки, то есть стандартные механизмы рисования элементов управления не применяются — вместо этого используется, например, GDI WinAPI. Автоматически определяется версия ОС и, соответственно, реализуются или игнорируются те или иные свойства, вроде прозрачности или XP-прибамбасов. В качестве небольшого попуска Qt использует стандартные диалоговые окна Windows, в частности диалоги открытия файла и настойки печати.

Под X11 Qt не использует тулкиты вроде Motif или Xt — ну, Qt вроде и сам такой же тулкит (то есть — зачем же?). Вместо этого напрямую используется Xlib — с расширениями вроде RENDER, если они доступны.

Схема «генеральной помпы», то есть основного цикла событий, не очень отличается от всех подобных во всех ОС — от MS Windows до PalmOS. Приложение строится просто, если не сказать примитивно: создается главное окно, устанавливаются его параметры, после чего приложение непосредственно «ранится». Вот как выглядит известный всем «Привет, мир!»:

 #include < qapplication.h >
 #include < qlabel.h >

 int main( int argc, char **argv )
 {
    QApplication app( argc, argv );
    QLabel *hello = new QLabel( "Привет, мир!", 0 );

    app.setMainWidget( hello );
    hello->show();

    return app.exec();
 }

Естественно, это вам не Visual Basic: вы можете создавать собственные элементы управления — это, как и в Delphi, поощряется, а не наоборот. Писать их не сложнее, чем дельфийские, а то и проще. Вот, к примеру, как реализуются LCD-часы на основе класса, отрисовывающего LCD-строку:

 #include < qdatetime.h >
 #include "clock.h"

 Clock::Clock( QWidget *parent, const char *name )
 : QLCDNumber( parent, name ), showingColon( true ) {
    showTime();
    startTimer( 1000 );
 }

 void Clock::timerEvent( QTimerEvent * ) {
    showTime();
 }

 void Clock::showTime() {
    QString time = QTime::currentTime().toString().left( 5 );

    if ( !showingColon )
       time[2] = ’ ’;

    display( time );
    showingColon = !showingColon;
 }

Не сложно — а если б выключить мигание двух точек, так и вовсе тривиально. Кстати, мне показалось что знак «!» перед showingColon можно «сэкономить» — ну, конечно, заменив для мнемоничности showcolon на hidecolon. Да и showTime() в конструкторе можно бы убрать…

Короче, в полном ходу лозунг Trolltech: code_less && create_more — только не стоит вычислять эту выражение по короткой схеме.

Интеграция

Это, конечно, не бог весть что, но, тем не менее, приятно и весьма полезно — Qt во время инсталляции интегрируется в Visual Studio, так что вы сможете добавлять потом новые проекты, формы и т.д. прямо из дополнительной панельки. Кроме того, там доступно быстрое переключение на подсказку в QtAssistant — раз уж вся среда не зависит от платформы, было бы просто позором сделать справку по ее системе. В результате html’ные «хелпы» от Microsoft тут нет — вместо них используются похожие, но собственного формата и, естественно, с оболочкой на самом Qt.

qt3

Qt также хорошо интегрируется в Visual Studio, хотя это и не совсем то, для чего он создавался


Аллилуя, то есть Славься!

Я не преследовал цели посвятить вас в самые сложные вещи Qt — точнее, таких вещей я там и не заметил. Всё ровно, логично, слаженно, сбито и задокументированно. Конечно, были и будут баги, возникают новые возможности — но для этого есть огромное сообщество разработчиков, да и конфы в Сети просто ужасно большое количество. В общем, с проблемами не «подвиснете». Кстати, и исходный код можно посмотреть, если уж что-то совсем непонятно, а при желании можно даже частично перекомпилировать. Этого я, правда, делать не советую — расстанетесь с совместимостью. Лучше станьте контрибьютором — а там, чего доброго, дорастете до должности «платного друга Trolltech», я бы гордился.

В заключение хочу сказать, что в процессе «кьютизаци» вы можете круто сэкономить на интернете — на КП-диске лежат отличные фрагменты видео, поясняющие концепции Qt, что называется, устами создателей. Там же — whitepapers. Там же — триальные инсталляшки Qt и QSA для Windows и X11. Для регистрации триала зайдите на сайт www.trolltech.com/download/index.html?cid=20 и зарегистрируйтесь без закачки, ключи придут по почте. Бесплатные версии для Линукс лучше всего закачать с сайта дистрибутива в виде пакета, чтобы не морочиться с компиляций — в последние дистро все и так наверняка включено, просмотрите список доступных пакетов, если что.

Короче: надумаете начинать новый портабельный «высокооктановый» проект… ну вы уже поняли, что делать. После «пингвинизации» Китая компанией Sun (контракт на поставку 200 миллионов пингвинов…) вам будет просто скучно писать для MS Windows. Хотя, с другой стороны, Билла Гейтса тоже еще никто не отменял, так что не без этого — лучше сохранять совместимость.

Кстати, кто первый создаст аутсорсинг «QTWorks.ua» — тот может реально подрубить не только у нас на районе, но и в окружающих поселениях, типа России, Германии и Кореи, поскольку в ближайшее время значение Linux-приложений во «взрослых» странах будет только расти.

В статье использованы материалы и примеры с сайта trolltech.com.

Источник: Qt: интерфейс, и не только…

, , , , , ,

Нет комментариев