A Beginner's Guide to Caching Data in Drupal 7

14:27 Рубрика: Drupal

Building complicated, dynamic content in Drupal is easy, but it can come at a price. A lot of the stuff that makes a site engaging can spell 'performance nightmare' under heavy load, thrashing the database to perform complex queries and expensive calculations every time a user looks at a node or loads a particular page.

One solution is to turn on page caching on Drupal's performance options administration page. That speeds things up for anonymous users by caching the output of each page, greatly reducing the number of DB queries needed when they hit the site. That doesn't help with logged in users, however: because page level caching is an all-or-nothing affair, it only works for the standardized, always-the-same view that anonymous users see when they arrive.

Eventually there comes a time when you have to dig in to your code, identify the database access hot spots, and add caching yourself. Fortunately, Drupal's built-in caching APIs and some simple guidelines can make that task easy.

The basics

The first rule of optimization and caching is this: never do something time consuming twice if you can hold onto the results and re-use them. Let's look at a simple example of that principle in action:

function my_module_function() {
$my_data = &drupal_static(__FUNCTION__);
  if (!isset(
$my_data)) {
// Do your expensive calculations here, and populate $my_data
    // with the correct stuff..

The important part to look at in this function is the variable named $my_data; we're initializing it with an odd-looking call to drupal_static(). The drupal_static() function is new to Drupal 7, and provides functions with a temporary "storage bin" for data that should stick around even after they're done executing. drupal_static() will return an empty value the first time we call it, but any changes to the variable will be preserved when the function is called again. That means that our function can check if the variable is already populated, and return it immediately without doing any more work.

This pattern appears all over the place in Drupal -- including important functions like node_load(). Calling node_load() for a particular node ID requires database hits the first time, but the resulting information is kept in a static variable for the duration of the page load. That way, displaying a node once in a list, a second time in a block, and a third time in a list of related links (for example) doesn't require three full trips to the database.

In Drupal 6, these static variables were created using the PHP 'static' keyword rather than the drupal_static() function (see the Drupal 6 version of this article for an example). It was also common to provide a $reset parameter on each function that used this pattern, giving modules that needed the freshest information a way to bypass the caching code. While that approach still works in Drupal 7, drupal_static() allows the process to be centralized. When modules need absolutely fresh data, they can call drupal_static_reset() to clear out any temporarily cached information.

Making it stick: Drupal's cache functions

You might notice that the static variable technique only stores data for the duration of a single page load. For even better performance, it's often possible to cache data in a more permanent fashion...

function my_module_function() {
$my_data = &drupal_static(__FUNCTION__);
  if (!isset(
$my_data)) {
    if (
$cache = cache_get('my_module_data')) {
$my_data = $cache->data;
    else {
// Do your expensive calculations here, and populate $my_data
      // with the correct stuff..
cache_set('my_module_data', $my_data, 'cache');

This version of the function still uses the static variable, but it adds another layer: database caching. Drupal's APIs provide three key functions you'll need to be familiar with: cache_get(), cache_set(), and cache_clear_all(). Let's look at how they're used.

After the initial check of the static variable, this function looks in Drupal's cache for data stored with a particular key. If it finds it, $my_data is set to $cache->data and we're done. Combined with the static variable, future calls during this page request won't even need to call cache_get()!

If no cached version is found, the function does the actual work of generating the data. Then it saves it TO the cache so future requests will find it. The key that you pass in as the first parameter can by anything you choose, though it's important to avoid colliding with any other modules' keys. Starting the key with the name of your module is always a good idea.

The end result? A slick little function that saves time whenever it can -- first checking for an in-memory copy of the data, then checking the cache, and finally calculating it from scratch if necessary. You'll see this pattern a lot if you dig into the guts of data-intensive Drupal modules.

Keeping up to date

What happens, though, if the data that you've cached becomes outdated and needs to be recalculated? By default, cached information stays around until some module explicitly calls the cache_clear_all() function, emptying out your record. If your data is updated sporadically, you might consider simply calling cache_clear_all('my_module_data', 'cache') each time you save the changes to it. If you're caching quite a few pieces of data (perhaps versions of a particular block for each role on the site), there's a third 'wildcard' parameter:

('my_module', 'cache', TRUE);

This clears out all the cache values whose keys start with 'my_module'.

If you don't need your cached data to be perfectly up-to-the-second, but you want to keep it reasonably fresh, you can also pass in an expiration date to the cache_set() function. For example:

('my_module_data', $my_data, 'cache', time() + 360);

The final parameter is a unix timestamp value representing the 'expiration date' of the cache data. The easiest way to calculate it is to use the time() function, and add the data's desired lifetime in seconds. Expired entries will be automatically discarded as they pass that date.

Controlling where cached data is stored

You might have noticed that cache_set()'s third parameter is 'cache' -- the name of the table that stores the default cache data. If you're storing large amounts of data in the cache, you can set up your own dedicated cache table and pass its name into the function. That will help keep your cache lookups speedy no matter what other modules are sticking into their own tables. The Views module uses that technique to maintain full control over when its cache data is cleared.

The easiest place to set up a custom cache table is in your module's install file, in the hook_schema() function. It's where all of the custom tables used by your module are defined, and you can even make use of one of Drupal's internal helper functions to simplify the process.

function mymodule_schema() {
$schema['cache_mymodule'] = drupal_get_schema_unprocessed('system', 'cache');

Using the drupal_get_schema_unprocessed() function, the code above retrieves the definition of the System module's standard Cache table, and creates a clone of it named 'cache_mymodule'. Prefixing the name of custom cache tables with the word 'cache' is common practice in Drupal, and helps keep the assorted cache tables organized.

If you're really hoping to squeeze the most out of your server, Drupal also supports the use of alternative caching systems. By changing a single line in your site's settings.php file, you can point it to different implementations of the standard cache_set(), cache_get(), and cache_clear_all() functions. The most popular integration is with the open source memcached project, but other approaches are possible (such as a file-based cache or against PHP's APC). As long as you've used the standard Drupal caching functions, your module's code won't have to be altered.

Advanced caching with renderable content

In Drupal 7, "renderable arrays" are used extensively when building the contents of each page for display. Modules can define page elements like blocks, tables, forms, and even nodes as structured arrays; when the time comes to render the page to HTML, Drupal automatically uses the drupal_render() function to process them, calling the theme layer and other helper functions automatically. Some complex page elements, though, can take quite a bit of time to render into HTML. By adding a special #cache property onto the renderable element, you can instruct the drupal_render() function to cache and reuse the rendered HTML each time the page element is built.

['my_content'] = array(
'#cache' => array(
'cid' => 'my_module_data',
'bin' => 'cache',
'expire' => time() + 360,
// Other element properties go here...

The #cache property contains a list of values that mirror the parameters you would pass to the cache_get() and cache_set() if you were calling them manually. For more information on how caching of renderable elements works, check out the detailed documentation for the drupal_render() function on api.drupal.org.

A few caveats

Like all good things, it's possible to overdo it with caching. Sometimes, it just doesn't make sense -- if you're looking up a single record from a table, saving the result to a database cache is silly. Using the Devel module is a good way to spot the functions where caching will pay off: it can log the queries that are used on your site and highlight the ones that are slow, or the ones that are repeated numerous times on each page.

Other times, the data you're using will just be a bad fit for the standard caching system. If you need to join cached data in SQL queries, for example, cache_set()'s practice of string data as a serialized string will be a problem. In those cases, you'll need to come up with a solution that's specific to your module. VotingAPI maintains one table full of individual votes and another table full of calculated results (averages, sums, etc.) for quick joining when sorting and filtering nodes.

Finally, it's important to remember that the cache is not long term storage! Since other modules can call cache_clear_all() and wipe it out, you should never put something into it if you can't recalculate it again using the original source data.

Go west, young Drupaler!

Congratulations: you now have a powerful set of tools to speed up your code! Go forth, and optimize.

Note: This article is an updated version of an earlier article, and deals specifically with the Drupal 7 API. If you're working with an older version of Drupal, see the Drupal 4 and 5 or Drupal 6 of this article.



Способы очистки кэша с помощью функции cache_clear_all()

14:25 Рубрика: Drupal

Примеры работы функции cache_clear_all().

Для очистки кэша страниц и блоков с истёкшим временем хранения, нужно вызвать ф-ю без аргументов:


это равносильно:

cache_clear_all(NULL, 'cache_block');
cache_clear_all(NULL, 'cache_page');

null говорит о том, что нужно удалять данные только с истёкшим сроком.

Таким образом, чтобы удалить все устаревшие данные из указанной таблицы, нужно вторым аргументом передать название таблицы:

cache_clear_all(NULL, 'cache_TABLE');

Удалить все данные из указанной таблицы, даже тех, срок которых не истёк:

cache_clear_all('*', 'cache_TABLE', TRUE);

Удалить данные, ID которых имеет определённый префикс, даже тех, срок которых ещё не истёк:

cache_clear_all('ID_PREFIX', 'cache_TABLE', TRUE);

Например можно удалить кэш страниц таксономии:

cache_clear_all('http://example.com/taxonomy/term/', 'cache_page', TRUE);

Чтобы удалить из кэша данные по ID, нужно первым аргументом передать идентификатор, а вторым название таблицы:

cache_clear_all('ID', 'cache_TABLE');

Например можно удалить кэш определённой страницы:

cache_clear_all('http://example.com/node/123', 'cache_page');

Очистить все кэши можно с помощью функции:


По материалам An overview of Drupal's cache_clear_all uses.



Почему в России почти нет гражданского/коммерческого высокотехнологичного производства?

15:57 Рубрика: Всячина

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

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

Под катом попробуем разобраться чем отличаются «высокотехнологичные» компании от «низкотехнологичных», что нужно, чтобы высокотехнологичные компании могли рождаться и выживать, почему с софтом у нас лучше, чем с хардом, с чего начиналась силиконовая долина в США и можно ли её «скопировать», почему Китай всех рвет, а также — окинем взором все, что происходит в Сколково, Роснано, фонде перспективных исследований и приведут ли они к расцвету российских инноваций. Безусловно, я где-то могу ошибаться — буду рад дополнениям в комментариях.

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

Ситуация с высокотехнологичным производством с высоты


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

    В случае России по ряду причин низкотехнологичный бизнес (строительство, торговля, природные ресурсы) может иметь слишком высокую прибыль — и это делает высокотехнологичный бизнес совершенно бессмысленным занятием с экономической точки зрения. С другой стороны — схема работы над государственными контрактами исключает получение большой прибыли (обычно требуется показать чистую прибыль порядка 5%), требует обеспечения, двойное использование может быть затруднено из-за секретности и собственности государства на полученную интеллектуальную собственность — т.е. опять же, совершенно не привлекательно для коммерческого исполнителя.
  2. Стоимость и доступность капитала. Высокотехнологичный бизнес требует много денег, причем с самого начала. Не смотря на то, что денег в России достаточно, они по естественным причинам сосредоточены у людей, занимающихся простым бизнесом и с тонкостями высокотехнологичного бизнеса им разбираться может быть не интересно. Также, ввиду упомянутой более высокой доходности простого бизнеса — он оттягивает на себя бОльшую часть инвестиционного капитала, и соответственно делает его дороже для всех.
  3. Люди. Идея высокотехнологичного бизнеса — рождается и реализовывается людьми, имеющими хорошее техническое образование и (опционально) опыт работы. В последние десятилетия — качество технического образования падает, равно как и количество выпускников по техническим специальностям. Далее проблема усугубляется «экспортом сырого мозга»: эмиграцией и аутсорсингом.

    Считается, что фундаментальная и прикладная наука должны генерировать инновации — но на практике этого не происходит — опять же из-за бюрократии, невозможности быстро привлечь деньги для проверки идей, «вымывании мозгов» (уход людей на «низкотехнологичную», но высокооплачиваемую работу).
  4. Бюрократия и логистика: Поскольку товары необходимо производить в реальности — становится крайне важна скорость и стоимость работы служб доставки — как на прием (множество компонент со всего мира), так и отправку(включая и почту России), скорость и стоимость прохождения таможни, другие бюрократические ограничения (вроде ограничений госнаркоконтроля на оборот химических веществ промышленного значения и ФСБ с криптографией, сертификация товаров). Естественно, и сейчас все препятствия можно преодолеть — но на это уходит время и деньги, и конкуренты в других странах получают преимущество.
  5. Государственная политика других стран и патенты: Сложно ожидать от иностранных государств, достигших успехов в высоких технологиях (например в микроэлектронике) добровольного отказа от лидерских позиций — для этого есть экспортные лицензии и патенты. Россия естественно действует точно также и не продает например технологию производства самых современных авиадвигателей Китаю, предпочитая продавать сами двигатели. «Закрывающие» патенты не позволят делать то, что уже сделано — а лицензию на использование патента вам могут и не продать, а если продать — то по цене, не позволяющей выпустить конкурентоспособный продукт. Это все делает крайне затруднительным выход на уже занятые рынки с аналогичным продуктом — обязательно нужно придумывать что-то новое.


Самое большое заблуждение

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

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

Кроме того, те, кто слушают американские политические передачи для «внутреннего употребления» — наверняка слышали фразу «Bringing the Jobs Back Home»: это фактически признание, что постиндустриальная экономика («мы разрабатываем, а обезьяны за морем собирают») — себя не оправдала и приводит к вымиранию целых секторов экономики. Потому слепо копировать американский «пост-индустриальный» путь явно не стоит.

Вот цитата от vasiaa, проскочившая на форуме по микроэлектронике, удачно подчеркивающая текущую ситуацию:

Ангстрем совсем бедный, экспорт 132 млн руб., а полностью продукции продает на 700-800 млн руб, или 25-30млн долл… у меня друг как раз в Зеленограде компанию имеет по строительству, ремонту примерно столько же оборот в год.

Ссылка по теме с цифрами.

Подробнее об разнице между «высокотехнологичным» бизнесом и «низкотехнологичным»

Низкотехнологичный бизнес — создает прибавочную стоимость перемещая товары, созданные другими, и создают товары для производства которых нужна одна технологическая операция без большого количества собственной интеллектуальной собственности. Зачастую географически привязан к источнику ресурсов (ГЭС, угольный разрез, месторождение нефти, месторождение инженеров для аутсорса).


  • Купили товар оптом — продали в розницу.
  • Купили товар за границей, протащили через таможню, продали оптом/в розницу.
  • Купили квартиру — продали квартиру через год.
  • Построили здание — распродали квартиры/сдали под офисы.
  • Купили глинозем, на советских заводах электролизом получили алюминиевые чушки, продали оптом.
  • Просверлили дырки в земле, проложили трубопровод, качаем нефть и продаем оптом.
  • Купили нефть, разделили её на фракции (+каталитически переработали), продали нефтепродукты оптом.
  • Наняли инженеров, выполняем заказы на разработку с почасовой оплатой (=офшорное программирование)

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

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

Рассмотрим на примере - CD/DVD-RW

Почему бизнес в России с такой неохотой идет в высокие технологии?

Это самый важный вопрос, его даже неоднократно поднимал, но оставлял без ответа главный по нанотехнологиям в России.

Ответ прост — серьёзный бизнес всегда идет туда, где больше норма прибыли и меньше риски.

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

В России-же в начале 90-х выжил и был приватизирован именно простой бизнес, и первое поколение либеральных бизнесменов лоббировали такие изменения законодательства, которые позволяли сохранять высокие доходы без ухода в высокие технологии. Поскольку гражданского высокотехнологичного бизнеса практически не было — его интересы и некому было защищать.

Если бы существовал железный занавес — существование высокотехнологичного производства в таких условиях все равно было бы возможным, просто те, кто им занимается — продавали произведенные товары с худшими характеристиками по существенно более высоким ценам (в высоких технологиях — меньше серия = выше цена). Однако с открытыми границами отечественный производитель в таких условиях неминуемо проиграет конкурентную борьбу с импортом, и никакой разумный уровень пошлин тут ничего не изменит.

Текущая ситуация даже без ручного вмешательства в долгосрочной перспективе нестабильна и по мере «взросления капитализма» на протяжении 2-4 поколений (50-100 лет) норма прибыли простого бизнеса естественным образом снизится (в связи с естественной сменой поколений владельцев крупного бизнеса).

Откуда исторически родилось высокотехнологичное производство на западе?

Радиолампы обязаны своему агрессивному развитию не теплому ламповому звуку, а радиолокации и военной связи. Первые компьютеры придумали не для игры в крестики-нолики — а для баллистических расчетов: кто быстрее и точнее посчитал угол возвышения орудия — тот и победил. Затем — чем легче и меньше были компьютеры в баллистических ракетах — тем больше плутония с дейтеридом лития-6 и ложных мишеней можно было разместить в боеголовке баллистической ракеты и выше точность попадания. Тепловизоры придумали не для оценки утечек тепла на гражданских объектов, а чтобы танки и пехота могли вести прицельный огонь в безлунную ночь без демаскирующей ИК подсветки.

Лишь после того, как базовая технология на западе была доведена до серийного военного производства и оплачены все затраты на разработку, исполнителями получены «закрывающие» патенты — приходили коммерческие компании, и находили применения в гражданской сфере — с ростом объемов производства на порядки с соответствующим снижением себестоимости.

А когда серийная гражданская продукция начинала удовлетворять всем требованиям военных — её начинали напрямую использовать в военной технике — пользуясь её чудовищно низкой стоимостью. Это у буржуев называется COTS — Commercial Off-The-Shelf, дешево и сердито.

Как родилась силиконовая долина в США?

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

Можно оценить соотношение частных инвестиций и государственных заказов: потребовалось 20 лет заливать деньги через гос.контракты, чтобы столбик частных инвестиций стал хотя-бы виден. График из отчета по ссылке #3 ниже.

Наев за 20 лет жирка, набравшись опыта, заработав денег для частных инвестиций — новые компании смогли делать уже сложные микросхемы, имеющие коммерческую ценность, и из-за отсутствия конкуренции они смогли иметь фантастическую прибыль: так, процессор i8080 стоил 360$ (и это гражданская версия), с пластины 76мм их выходило порядка 50 годных (моя оценка по площади при выходе годных ~50%), стоимость строительства завода окупалась буквально за неделю работы — по нынешним меркам немыслимая прибыль. Для сравнения, сейчас микроэлектронный завод по новым технологическим нормам (10-14нм) имеет срок окупаемости порядка 5 лет и выше при требованиях к капиталу в ~500 раз выше (~10млрд$), по старым нормам — вообще с трудом окупается.

Отсюда вывод: силиконовая долина — не красивый офисный комплекс (его там вообще нет), не «атмосфера инноваций» — это огромные прибыли на основе технологий, разработанных за деньги военных в первые 20 лет. Затем — бизнес просто продолжал концентрироваться там по инерции. Слепое повторение этого сейчас невозможно нигде — просто потому что тех условий уже нет (открытие новой индустрии с огромным коммерческим потенциалом) и еще раз столько денег заливать на протяжении 20 лет никто не хочет.

1. Institutions and the growth of Silicon valley
2. How the West Was Won
3. Hidden in Plain Sight: The Secret History of Silicon Valley а также доклад на YouTube.

Проблемы высокотехнологичного «импортозамещения», стратегии «догнать и перегнать»

«Догнать и перегнать» и «импортозамещение» — 2 очень популярные темы для публичных выступлений государственных чиновников во все времена. Казалось бы, вот Intel — делает процессоры (владеет как технологией производства по самым тонким техпроцессам, так и разработки самих процессоров), что нам стоит срезать углы, самостоятельно разработать технологию производства, схему и сделать свои процессоры с блекджеком и куртизанками (в идеализированном случае)?

Как мы помним, Intel тратит на исследования и разработки (R&D) 10.6 млрд$ в год. Естественно, положить в чистое поле 10млрд и через год получить результат Intel не выйдет. Как минимум первые 5 лет новая «догоняющая» компания будет расти от 0.1млрд$ R&D расходов в год до 10млрд$ в год — будет расти штат, покупаться оборудование и проч. Через 5 лет — она сможет так же быстро эффективно тратить деньги, как и Intel. Теперь нам нужно еще 5 лет, чтобы прошел цикл разработки 1 продукта. Прошло уже 10 лет с начала проекта — мы потратили уже ~70млрд$ и смогли получить продукт, сравнимый по характеристикам c процессором Intel и произведенный на отечественной фабрике. Однако продавать мы его можем с оговорками только на местном рынке — т.к. Intel держит закрывающие патенты на ключевые технологии, которые они не продадут ни при каких условиях. На местном рынке мы зарабатываем сущие копейки, ведь это всего ~150млн покупателей против 7млрд мирового рынка. Поскольку бОльшую часть стоимости высокотехнологичного продукта составляет совокупная стоимость разработки — она мало зависит от объемов производства. Следовательно, процессор для местного рынка обречен быть в 7000/150 = 45 раз дороже. Но если мы пока не ставим цель вернуть инвестиции на местном рынке — то это не конец.

Продолжаем работать еще 20 лет по 10.6млрд$ в год — и через 30 лет после начала проекта, когда все старые патенты уже истекли, а новых патентов у нас примерно столько же, сколько и у конкурентов — мы наконец смогли конкурировать с Intel. Разница однако в том, что Intel свои расходы на R&D оплачивала из прибыли, а нам приходилось за все платить из денег государственного инвестора. Ну и еще нужны капитальные расходы — по 7млрд$ каждые 3 года на строительство заводов на переднем крае технологий, +70млрд$. Догнать и перегнать Intel обошлось нам… в 352 млрд$ и 30 лет работы.

Если бы мы жили в мире рыночной экономики эльфов — можно было бы просто купить Intel. Текущая рыночная капитализация — всего 127 млрд$, выкупить удалось бы с премией в 50% — итого нужно всего 190 млрд $, что выглядит лучше чем 352млрд$ и 30 лет каторжного труда. Однако стратегические технологические компании никто в здравом уме не продает ни за какие деньги. За деньги без ограничений можно только предметы роскоши покупать — яхты и часы с бриллиантами.

Наконец последняя проблема — объем мирового рынка процессоров от появления еще одного игрока вдвое больше не станет. Т.е. если всего-лишь достичь уровня Intel через 30 лет — то прибыль в первом приближении будет вдвое меньше того, что может получить одна Intel — рынок будет поделен пополам. Фактически получается, что «кто первый встал — того и тапки»: если включится в гонку процессоров в 80-е можно было с миллионными затратами — то сейчас и сотни миллиардов не хватит, чтобы обогнать Intel с их моделью бизнеса, причем без каких либо гарантий возврата инвестиций. Естественно, догонять можно и «фаблесс» компанию (ARM или AMD) — это будет стоить в 5-10 раз дешевле, но и результат хуже т.к. компания не будет самостоятельно владеть всеми необходимыми технологиями (гарантированное отставание по техпроцессу + «политические» риски связанные с использованием сторонней фабрики).

Исходя из всего этого совершенно бессмысленно ожидать от «Эльбруса» МЦСТ результатов Intel: у МЦСТ годовой бюджет на разработку — ~0.05% от Intel-а. Когда Бабаян (при всей неоднозначности его личности) просил жалкие (по меркам индустрии) 100млн$ на разработку и производство процессора в кремнии — все только пальцем у виска покрутили, хотя в реальности как мы видим сейчас нужны десятки и сотни миллиардов. За счет «мощи интеллекта» и каторжного труда можно «вытащить» 2-х кратную разницу бюджета, 5-и кратную — но никакая сила на земле не позволила бы МЦСТ достигнуть результатов Intel при 2000-кратной разнице бюджета.

Совершенно аналогичная ситуация и с автомобилями: Автоваз потратил на разработки в 2012-м году 1.7 млрд рублей, а Volkswagen — 12.8 млрд$, в 263 раза больше. Если бы Автоваз смог начать эффективно тратить на разработки 12.8млрд$ в год — то через 10-30 лет можно было бы ожидать результатов на уровне Volkswagen. Естественно, в начале 90-х затраты были бы в разы меньше — но новым частным собственникам тогда нужна была краткосрочная прибыль, а не инвестиции с отдачей через 10 и более лет. И точно также, как и с Интел — купить автопроизводителя, чтобы сразу получить доступ к его технологиям не выйдет, как показала история с попыткой покупки Опеля.

Если же начинать прорывные проекты с «шапкозакидательства» — получится Ё-мобиль. Оценка бюджета проекта была 150млн евро — сущие копейки в сравнении с конкурентами. Как можно пытаться создать конкурентоспособный продукт, рассчитывая за всю многолетнюю разработку и производство потратить 2% от того, что конкуренты тратят на разработку за 1 год?

О покупке технологий

А что если купить готовую технологию, построить свечной заводик на импортном оборудовании (в кредит) по производству процессоров и стричь купоны?

Высокотехнологичные компании — могут получать доход за счет:

1) Интеллектуальной собственности — когда они придумали что-то, чего нет у других
2) Капитала
3) Эффективной операционной деятельности (0-5% в год, в зависимости от удачи)

Если своей интеллектуальной собственности нет, и мы все купили/лицензировали — то и прибыль получит тот, кто эту технологию нам лицензировал. Да, если выторговать скидку — то какую-то прибыль можно будет отбить на протяжении 5-10 лет каторжного труда. Опять же — если все оборудование покупное — то интеллектуальную собственность, использованную при разработке и создании этого оборудования мы оплачиваем в первую очередь.

Если своего капитала нет — то прибыль на капитал естественно получает банк.

Остается только прибыль за «эффективную операционную деятельность» — но эти жалкие проценты по российским меркам — сущие копейки.

Теперь должно становится понятно, почему будущее проекта Ангстрем-Т, про который я писал ранее — покрыто мраком. Там еще и за оборудование заплатили дороговато, и пролежало оборудование на складе не принося прибыль 5 лет — в общем это канонический пример того, как можно устроить эпический провал на ровном месте.

При идеальной реализации, если бы переговоры о ценах на оборудование и лицензии доходили до драки (фигурально выражаясь), кредит был получен по ставке лидеров рынка (~4-5% а не двузначная), все было бы построено и пущено в работу в кратчайшие сроки в 2008 году — то тогда Ангстрем-Т смог бы работать в 0. А сейчас — остается наблюдать, кто возьмет на себя списание 50-66% долга.

Почему ИТ бизнес в России жив, а высокотехнологичное производство — нет?

Ввиду того, что продукт труда чистых ИТ-компаний «магически» проходит через таможенные границы и бюрократические барьеры — бОльшая часть негативных факторов тут не действует: остается только стоимость денег (=конкуренция за капитал с простым высокодоходным бизнесом) и дефицит инженеров. Даже эти 2 остающиеся проблемы можно обойти, реализуя проект до стадии прототипа/бета-теста силами друзей долгими зимними вечерами (т.е. без инвестиций и без мучительного найма разработчиков)

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

Сколково, Роснано и другие с высоты

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

Понимая, что с Таможней что-то не то, там также (в теории) компенсируют таможенные платежи по импортируемым товарам для строительства самого Сколково и используемого резидентами для исследований. На практике пользоваться этой льготой затруднительно.

После прочтения списка резидентов и посещения сайтов — у меня сложилось впечатление, что бОльшая часть компаний-резидентов становятся участниками в надежде найти деньги на реализацию своей идеи, не получают денег (~85% резидентов) — и умирают не родившись, оставляя после себя только «единичку» в статистике количества резидентов.

Также в Сколково несколько центров коллективного пользования (ЦКП) различного действительно полезного научного оборудования — они являются отдельными коммерческими компаниями, оборудование закупают за свои деньги + соинвестирование Сколково, очевидно используя таможенные льготы (распределение долей соинвестирования Сколково-ЦКП узнать не удалось). Услуги по пользованию ЦКП стоят существенных денег, и соответственно для 85% резидентов недоступны.

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

В целом, Сколково это безусловно 1 шаг в правильном направлении (~0.5% пути), 1 шаг в обратную сторону (поддержка центров разработки — привет Бангалор, они и сами нормально живут), но количество PR-а не соответствует микроскопическому объему грантов и инвестированных средств (по мировым меркам). В Сколково решают те проблемы, которые решать приятно: строить красивые офисы, раздавать гранты небольшому количеству компаний, светится в прессе, а не те, которые требуют решения: доступность дешевого капитала для десятков тысяч (а не 136 за 4 года) мелких стартапов на различных стадиях, скорость и стоимость логистики, таможня, необычно высокая доходность простого крупного бизнеса, делающего высокотехнологичный бизнес бессмысленным занятием без постоянных дотаций.

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

Роснано — на первый взгляд действует исходя из гипотез «Бизнес просто не хочет инвестировать в высокие технологии», «У бизнеса слишком мало денег» и «Нанотехнологии — это прорывное направление, достаточно немного поинвестировать на рыночных условиях и выйдем в лидеры». В отличии от Сколково — требуется создавать что-то физически в России, финансирование на рыночных условиях (в народе говорят, процентные ставки по кредитам двузначные), никаких налоговых льгот нет. Совершенно не удивительно, что на таких рыночных условиях конкурентоспособные высокотехнологичные проекты не выстроились в очередь за деньгами.

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

Из того, о чем мне приходилось слышать:

СИТРОНИКС-Нано — докупка оборудования и лицензии на 90нм технологию для Микрона. Производство мелкосерийное, для гражданского коммерческого рынка обречено быть слишком дорогим.
Mapper Lithography о которой я писал ранее. В России локализуется производство незначительной и некритичной части оборудования (часть электронной оптики, фактически «пластина с дырками»: литография с микронными нормами и ионное травление), впрочем и доля инвестиций Роснано в проекте небольшая — было бы сложно требовать бОльшего.
Оптоган — производство светодиодов и законченных устройств на основе кристаллов, произведенных за рубежом. Как раскопал Tiberius в своё время, кристаллы у Оптогана и СветаЛЕД были крайне похожи.
Нитол — построили завод по производству поликристаллического кремния, но оказалось что за время строительства стоимость поликремния упала в разы, за счет ударного роста производства в Китае. Пришлось закрыть. Осталось понять, почему не получается выпускать продукцию с «китайской» ценой.
Plastic Logic — деньги от Роснано с условием строительства завода в Зеленограде получили, но затем строить завод передумали. Планируют теперь продавать технологии. Производство и исследования остались в Великобритании/Германии.
Хэвел — собирались делать тонкопленочные солнечные батареи повышенной эффективности. Судя по открытой информации — эффективность получилось 8%, при том, что самые дешевые китайские поликристаллические батареи сейчас имеют эффективность 16-17% (при примерно той же цене за ватт, порядка 0.5$ за ватт и менее). Соответственно, на открытом рынке коммерческие перспективы ограниченные. Компания, поставщик технологии (Oerlikon) — солнечный бизнес успела продать Tokyo Electron Ltd., а та его прямо сейчас физически ликвидирует — проиграла конкуренцию Китаю.
Уником — раздробленные автомобильные покрышки как наполнитель для асфальта. Основатель проекта — знатный аферист. Компания в прошлом году подала на банкротство, но до сих там что-то шевелится.
Лиотех — производство LiFePO4 аккумуляторов. Выпросить у них образец аккумулятора не удалось, какие там цены продукции — не известно.
ЭЛВИС-НеоТек — fabless разработка микросхем для видеонаблюдения и систем видеонаблюдения на их основе.

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

Затем Роснано стало финансировать и «центры разработок» (опять «привет Бангалор») — аутсорсинг, не оставляющий в России ничего кроме налогов на зарплаты: Aquantia, Quantenna, SiTime.

Если смотреть на цифры инвестиций Роснано — может сложиться впечатление, что Роснано — во многих случаях мажоритарный инвестор. Однако Роснано похоже публикует цифры по конкретному инвестиционному проекту, а не общие по компании: так для SiTime указан бюджет проекта 541млн рублей, при том что еще в 2007 году SiTime получила инвестиций суммарно на 40+ млн $.

Кстати, микросхему SiTime SiT8008 удалось поковырять: это генератор на основе MEMS, а не кварца. Микромеханический резонатор запаян в вакууме _внутри_ кристалла. Это действительно хайтек — жаль что и производство и интеллектуальная собственность остается за рубежом.

В конечном итоге — Роснано делает что может, вынуждает гос.компании использовать производимую продукцию (там где это возможно), пройдено 0.5% пути вперед, 1 шаг назад (поддержка «центров разработки» по прообразу Индии) — фундаментальные сложности с появлением и выживанием коммерческих высокотехнологичных компаний в России не решаются. Инвестирование в компании на коммерческих условиях — это лишь последний и самый приятный шаг в высоких технологиях.

ФПИ (Фонд перспективных исследований) — создается как отечественный аналог DARPA, что может решить проблемы с доступностью капитала и бюрократией (если быть оптимистом). Однако есть и существенное отличие: в DARPA у государства остается лишь неэксклюзивная лицензия на использование полученной интеллектуальной собственности, а у нас — у исполнителя имущественных прав на ИС не остается. В США исполнитель без ограничений может коммерциализировать разработку, в том числе и на гражданском рынке, а у нас государство может остаться с этой интеллектуальной собственностью как собака на сене + исполнитель мотивирован только зарплатой и краткосрочной скромной прибылью за «сдачу темы».

Т.е. в текущем виде новая силиконовая долина не сможет родится из проекта профинансированного ФПИ, может получится лишь что-то вроде процессора F14A — который существенно превосходил первые процессоры Intel, но оставался засекреченным долгое время.

Право на интеллектуальную собственность принадлежит Российской Федерации в лице Фонда. Это определено законом.

Из интервью с генеральным директором ФПИ Андреем Григорьевым.

Почему Китай так рвет вперед?

Популярное объяснение — «низкие зарплаты». Но низкие зарплаты и в африке — а расцвета высокотехнологичного производства там не наблюдается.

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

Откуда там все берут деньги за создание бизнеса — лично мне не ясно. Существующий бизнес — активно кредитуется в гос.банках, и долговая нагрузка там чудовищная. Благодаря огромным государственным инвестициям («reverse build-operate-transfer» — финансирует государство, управляет частная компания, долги минимальны), Китай успел запрыгнуть на ступеньку уходящего поезда микроэлектроники. Если в начале 90-х годов Китай еще пытался импортировать микроэлектронные технологии у нас, то сейчас он далеко впереди (синий график — отставание ввода микроэлектронных технологий от США, красный — от Китая).

Крупнейшая китайская микроэлектронная фабрика — SMIC — играет «по-белому», выполняя все требования экспортного контроля США, за что получила статус «Validated end user», снимающие многие ограничения в отношении этой конкретной компании, ценой строгого исключения военных заказов.

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

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

О невозможности траты доходов от продажи нефти

Часто приходится слышать, что доходы от добычи и переработки нефти (и других ресурсов) невозможно потратить, т.к. они неизбежно вызовут инфляцию ("голландская болезнь").

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

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

Возвращаясь к списку популярных и неверных причин:

1) Нет умных людей. — Есть и много. Но они предпочитают работать там, где их труд оценивается максимально высоко — аутсорс, за границей, в простом но высокодоходном бизнесе.
2) Много умных людей и инновационных идей, но они не умеют их коммерциализировать. «Инновационные идеи» банально проигрывают по экономике простому бизнесу — так что никто за ними и не охотится. Чтобы выстрелила одна идея — проверка 99 идей должна быть оплачена и провалена.
3) Нет денег. Деньги есть, но они заработаны в основном на «простом» бизнесе людьми, которым высокие технологии мало интересны (как ввиду экономики, так и ввиду сложности).
4) Слишком много нефтеденег / только нефть качать и можем. Это хороший бизнес. При капитализме без ограничений бизнес именно этим и обязан заниматься.
5) НДС (в том числе таможенный). НДС есть во многих странах с развитым высокотехнологичным производством. Если работа ведется легально — то при конкуренции на внешнем рынке НДС возвращается (в том числе таможенный НДС за импортируемое оборудование), но это безусловно несколько увеличивает требования к капиталу.
6) Коррупция. Коррупция безусловно является частью проблемы — т.к. позволяет простому бизнесу иметь необоснованно-высокую прибыль. А так коррупция есть везде — откаты придумали не в России, и не от хорошей жизни в Китае приходится чиновников расстреливать — в азии коррупция без контроля особо свирепа.
7) Климат плохой (Паршев). В высокотехнологичном производстве обычно требуется контролируемая температура и влажность — а с учетом энергозатрат на осушение воздуха (когда его сначала охлаждают, а затем нагревают) с российским континентальным климатом затраты энергии на самом деле меньше.
8) Слишком мало построено офисных площадей для инновационных стартапов. Полагаю тут все очевидно — как показала практика, компании мирового масштаба и в гаражах/квартирах без гламура нормально рождаются.


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

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

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

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

Государство со своей стороны закрывает возможность «первоночального накопления капитала» для компаний, выполняющих гос.контракты (как это случилось в силиконовой долине в США) — оставляя у себя интеллектуальную собственность и требуя показывать при выполнении гос.контрактов по бумагам скромную чистую прибыль, что не дает даже в перспективе заработать достаточно денег для запуска своих рискованных высокотехнологичных проектов.

Хочешь порвать Intel?: Если вы хотите создать свой высокотехнологичный бизнес, связанный с реальным производством — в первую очередь нужна действительно новая идея (со старыми идеями — обычно нужно слишком много денег для коммерческого результата на занятом рынке), необходимо сразу думать, как максимально нивелировать существующие Российские проблемы: отказаться от сверх-крупнобюджетных проектов (вроде своего процессора, затыкающего за пояс Intel), делать действующий прототип своими силами, в первую очередь находить инженеров — в условиях дичайшего дефицита квалифицированной рабочей силы это фатальная проблема, использовать минимум слишком дорогого капитала (а не как Displair), минимизировать количество пересечений физическими вещами нашей таможенной границы (по возможности до 0). Если вы ориентируетесь на местный рынок или узкую нишу — нужно сразу реалистично оценивать объем рынка в штуках — чтобы было понятно, насколько мало денег можно потратить на разработку, и насколько сильно придется срезать углы ради снижения стоимости разработки.

Хочешь порвать Facebook?: Что-ж, тут все на порядок проще. Бюрократия, таможня и логистика проблем практически не создает. Остается лишь нахождение новой идеи, доступность капитала и квалифицированных инженеров — а решению этих последних 2 проблем посвящено множество более подробных статей.

Когда ждать конкурентоспособных отечественных процессоров и видеокарт?: x86 процессоры в США разрабатывают не потому, что там люди какие-то другие — в конце концов, наши соотечественники и в Intel, и в nVidia и во многих других высокотехнологичных компаниях работают. Тут действует принцип «кто первый встал — того и тапки». В силиконовую долину в 50-70-х годах залили огромную кучу денег американских налогоплательщиков (порядка 200млрд$ с учетом инфляции) через военные исследовательские контракты — и совершенно справедливо пользуются результатом до сих пор.

Кроме того, Intel уже более 40 лет доходы от продажи процессоров реинвестирует в усложнение технологии, владеют кучей патентов — и чтобы сейчас достичь их уровня в равных условиях (налоги, бюрократия, доступность капитала) понадобилось бы по моей грубой оценке порядка 352 млрд$ и 30 лет работы — на что конечно никто пойти не может. Всем нужен свой Intel за 0.1, а лучше 0.01млрд$ :-)

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

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

Будет интересно услышать ваши комментарии и дополнения.



Как сделать самый крутой сайт, чтобы все конкуренты завидовали

14:43 Рубрика: Web Development

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

Поиск исполнителя

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

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

Техническое задание

Помните: главный принцип составления грамотного ТЗ — лаконичность. Незачем расписывать все в деталях и снабжать ненужными подробностями. В идеале оно должно состоять из одного, максимум двух предложений; дайте вашим исполнителям простор для самореализации.

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


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

Общение с командой

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

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

На любые попытки возразить тычьте им в лицо кошельком, не забывая напоминать, что вы вершина этой пищевой цепочки.


Если что-то может мигать, блестеть или двигаться, оно должно мигать, блестеть и двигаться. Побольше картинок, флеша и анимированных менюшек. Сайт должен переливаться как новогодняя елка и только видом своим вводить пользователя в транс. И плевать, что потянуть его будет под силу только суперкомпьютеру НАСА, а машины с оперативкой меньше 2 гигабайт при попытке загрузить его будут искрить и взрываться.

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


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

Кроме того, у каждого сайта должно быть Святое Место — раздел “Новости компании”. Туда можно постить исключительно три вещи: поздравление всем женщинам-клиентам с 8 марта, поздравление всем мужчинам-клиентам с 23-м февраля и поздравление клиентам обоих полов с Новым годом. Все.

Не спрашивайте почему, это Традиция. И не дай бог вам ее нарушить — от вас сразу отвернутся клиенты, официанты начнут плевать вам в суп, а в офисе лопнут трубы.


За всю историю существования Интернета лишь 17 человек доходило до второй страницы поисковой выдачи в Гугле.

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

Если Вы хотите раскрутить свой сайт или осуществить раскрутку сайта и попасть в топ Гугл в Москве, то, чтобы раскрутить Ваш сайт в Москве недорого, вам неминуемо в Москве понадобится качественный СЕО-специалист в Москве, который займется раскруткой сайта в Москве или МО или выведет в топ Гугл, наполнив его текстом, слогу которого позавидует Кафка и Мандельштам.

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

Главное — это топ Гугла. Главное — это топ Гугла. Повторяйте эту фразу как мантру несколько раз в день, и жизнь ваша наладится.




10+ полезных jQuery сниппетов на каждый день

09:56 Рубрика: jQuery

Спустя годы библиотека jQuery стала неотъемлемой частью в работе каждого web-разработчика. Ведь она простая в использовании, быстрая и имеет очень широкие возможности. В этой статье я собрал список из более чем десяти сниппетов, которые вы можете свободно брать для использования. Их очень легко адаптировать под нужды ваших собственных проектов.

Плавный скролл к верху страницы

Давайте начнем этот список с очень популярного и полезного сниппета: эти 4 строки кода позволят вашим посетителям плавно проскролить страницу к верху простым нажатием ссылки (с id #top) расположенной внизу страницы.

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;


Дублирование thead в самый низ html таблицы

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

var $tfoot = $('<tfoot></tfoot>');
$($('thead').clone(true, true).children().get().reverse()).each(function() {
$tfoot.insertAfter('table thead');


Загрузка внешнего контента

Вам нужно добавить определенный внешний контент в div? Так вот это очень просто сделать с jQuery, как показано в нижеприведенном примере.

$("#content").load("somefile.html", function(response, status, xhr) {
  // error handling
  if(status == "error") {
    $("#content").html("An error occured: " + xhr.status + " " + xhr.statusText);


Колонки одинаковой высоты

В случае использования колонок для отображения контента вашего сайта, определенно будет смотреться лучше, если у колонок будет одинаковая высота. Код ниже возьмет все div элементы с классом .col и установит их высоту по самому высокому элементу. Супер полезно!

var maxheight = 0;
$("div.col").each(function() {
  if($(this).height() > maxheight) { maxheight = $(this).height(); }



Табличные полосы (зебра)

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

     $("table tr:even").addClass('stripe');


Частичное обновление страницы

Если вам нужно обновить только часть страницы, то эти 3 строки кода точно помогут. В примере div с id #refresh автоматически обновляется каждые 10 секунд.

setInterval(function() {
  $("#refresh").load(location.href+" #refresh>*","");
}, 10000); // milliseconds to wait


Предзагрузка изображений

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

$.preloadImages = function() {
       for(var i = 0; i<arguments.length; i++) {
               $("<img />").attr("src", arguments[i]);

$(document).ready(function() {


Открытие внешних ссылок в новом окне или новой вкладке

Аттрибут target="_blank" позволяет вам открывать ссылки в новых окнах. Но это относится к открытию внешних ссылок, внутридоменные ссылки должны окрываться в том же окне.
Этот код находит внешнюю ссылку и добавляет в найденный элемент аттрибут target="_blank".

$('a').each(function() {
   var a = new RegExp('/' + window.location.host + '/');
   if(!a.test(this.href)) {
       $(this).click(function(event) {
           window.open(this.href, '_blank');


Div по ширине/высоте вьюпорта

Этот удобный фрагмент кода позволяет создавать растянутый по ширине/высоте вьюпорта div. Код также поддерживает изменение размеров окна. Прекрасное решение для модальных диалогов и popup-окон.

// global vars
var winWidth = $(window).width();
var winHeight = $(window).height();

// set initial div height / width
    'width': winWidth,
'height': winHeight,

// make sure div stays full width/height on resize
    'width': winWidth,
    'height': winHeight,


Проверка сложности пароля

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

Для начала создадим поля ввода:

<input type="password" name="pass" id="pass" />
<span id="passstrength"></span>

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

$('#pass').keyup(function(e) {
     var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
     var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
     var enoughRegex = new RegExp("(?=.{6,}).*", "g");
     if (false == enoughRegex.test($(this).val())) {
             $('#passstrength').html('More Characters');
     } else if (strongRegex.test($(this).val())) {
             $('#passstrength').className = 'ok';
     } else if (mediumRegex.test($(this).val())) {
             $('#passstrength').className = 'alert';
     } else {
             $('#passstrength').className = 'error';
     return true;


Изменение размеров изображения

Вы конечно можете изменять размеры ваших изображений на стороне сервера (например, используя PHP и GD-библиотеку), но иногда полезно делать это на клиентской стороне с помощью jQuery. Вот сниппет для этого.

$(window).bind("load", function() {
    $('#product_cat_list img').each(function() {
        var maxWidth = 120;
        var maxHeight = 120;
        var ratio = 0;
        var width = $(this).width();
        var height = $(this).height();
        if(width > maxWidth){
            ratio = maxWidth / width;
            $(this).css("width", maxWidth);
            $(this).css("height", height * ratio);
            height = height * ratio;
        var width = $(this).width();
        var height = $(this).height();
        if(height > maxHeight){
            ratio = maxHeight / height;
            $(this).css("height", maxHeight);
            $(this).css("width", width * ratio);
            width = width * ratio;
    //$("#contentpage img").show();


Автоматическая загрузка контента по скроллу

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

var loading = false;
        if(loading == false){
            loading = true;
            $.get("load.php?start="+$('#loaded_max').val(), function(loaded){
                loading = false;

$(document).ready(function() {


Проверить, загрузилось ли изображение

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

var imgsrc = 'img/image1.png';
$('<img/>').load(function () {
    alert('image loaded');
}).error(function () {
    alert('error loading image');
}).attr('src', imgsrc);


Сортировка списка в алфавитном порядке

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

$(function() {
    $.fn.sortList = function() {
    var mylist = $(this);
    var listitems = $('li', mylist).get();
    listitems.sort(function(a, b) {
        var compA = $(a).text().toUpperCase();
        var compB = $(b).text().toUpperCase();
        return (compA < compB) ? -1 : 1;
    $.each(listitems, function(i, itm) {







WiFi точка доступа в Linux

13:54 Рубрика: Linux

Задача — воткнуть адаптер в компук, в моём случае, «подкроватный» сервачок с Дебианом, и настроить точку доступа. Изначально договоримся, что всё остальное настроено. Но адаптеры WiFi такие штуки, что и в виндах не всё гладко, так что данная статья может не совсем подойти к вашему адаптеру.


Mount MTP device on Debian 7 wheezy

11:19 Рубрика: Linux

Today I needed to transfer som pictures from my phone (a Google Nexus 4) to my computer running Crunchbang (based on Debian 7 wheezy). The required packages for this to work has not yet been added to Debian stable to work around this I manually built the required tools from source.

Install required packages


Работа с базой данных в Drupal 7

17:58 Рубрика: Drupal

Работа с базой данных в Drupal 7

Override Drupal 7 taxonomy display by vocabulary

17:57 Рубрика: Drupal

I've had a couple of cases recently where I've wanted to use views to override the output of taxonomy/term/%taxonomy_term on a site, but this can be tricky if you want to use different views for one or more specific vocabularies. Normally, you'd just enable the delivered Taxonomy Term view and modify it as needed for the site, and presumably that's how Drupal 8 will work by default with Views in Core. I've looked briefly at the Taxonomy Views Integrator module, but quite frankly, this task falls under customization for a specific site, so why not just customize for the site?

I looked around a little, and determined that the code I want to override is near the bottom of taxonomy_term_page(), starting where taxonomy_select_nodes() is called to build the contents. For this project, I really wanted to leave everything else alone (although I may come back and disable the RSS feeds, since I don't really need those, either.)

We start by overriding the page callback for taxonomy/term/%taxonomy_term to pass through a custom page callback function:

(view more)

how to create view that display just 2 level of taxonomy vocabulary

21:25 Рубрика: Drupal

This link saved me :), hopefully you get the results too....

Here is a quick tip that has proved helpful in a few different instances. Say you have a taxonomy vocabulary that has a set of root terms and these terms have children. For example:

Honda -Civic -Accord Toyota -Camry -Prius

Now say you want to configure a view that only shows the first level of this vocabulary. For example:

Honda Toyota

This is pretty easy to do and can prove useful when wanting to show a top level view of your terms. You can accomplish this with two steps within a term view:

  1. Add a relationship to the ‘Parent Term’.
  2. Add a filter using the ‘Parent Term’ relationship against the Term Name and set the operator to ‘Is Empty (NULL)’

Simple as that.

Happy Drupaling!