воскресенье, 29 ноября 2009 г.

Границы между светом и тенью вы!

Как я писал ранее, мы видим предметы только потому, что все они отражают свет.
После того как луч света начинает свой путь от источника света, он прикасается к объектам, отражается и достигает наших глаз.
Иногда эти отраженные лучи света не могут достичь наших глаз, из-за других объектов между объектом и нашим глазом. И поэтому мы не видим часть этого объекта.
Что именно происходит, когда свет не может достичь наших глаз?
Представьте себе, что мы смотрим на стену, в темной комнате, с одной лампой ...
Свет, который исходит от источника света, лампы, доходит до стен, отражается от нее, и достигает наших глаз.
1. Если мы поставим нашу руку между стеной и нашими глаза, мы не сможем увидеть часть стены, потому что "отражаемый" свет не может достичь наших глаз. Но мы увидим нашу руку, потому что свет, отраженный от нашей руки достигнет наших глаз.
2. Если мы поставим нашу руку между стеной и лампой, свет от лампы, не попадет на стене, и вместо этого мы увидим темное пятно. Почему? Потому что светом и стеной есть препятствия, наши руки. Именно поэтому это место будет иметь форму нашей руки.
Границы между светом и тенью вы! (Станислав Ежи Лец, "Добро и зло")

четверг, 19 ноября 2009 г.

Объекты в зеркале на самом деле ближе чем кажутся

Объекты в зеркале на самом деле ближе чем кажутся
Вы когда нибудь видели эту фразу?
Если у Вас есть машина, то 90% что видели.
Но почему? Почему объекты в зеркале на самом деле ближе чем кажутся?
Когда Вы смотрите в зеркало, зеркало показывает Ваше точное отражение.
Расстояние между Вами и зеркалом, например 3 метра.
Но между тем парнем в зеркале, которого Вы видите, и зеркалом расстояние тоже 3 метра.
И так, Вы видите расстояние между Вами и зеркалом, и расстояние между зеркалом и Вашим отражением.
И поэтому Вы увидите в зеркале не 3 метра, а 6 метров.
Будьте осторожны при парковке автомобиля :-)

четверг, 12 ноября 2009 г.

Откуда появляется цвет?

Мы видим объекты только лишь потому что свет отражается от них.

На сколько вы знаете предметы состоят из молекул, молекулы - из атомов...

Каждый атом состоит из ядра (протоны и нейтроны) и электронов вертящихся вокруг ядра.

Для примера, возьмем самый простой атом, атом Водорода (H). Он состоит из одного протона и одного электрона.Этот электрон может вертеться на 6 орбитах вокруг ядра. В состоянии спокойствия оно вертится на самой близкой первой орбите.

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

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

Это излучение мы видим как цвет.

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

Как видите цвет отраженный от любого объекта зависит от структуры атомов и молекул из которых тот состоит.

четверг, 22 октября 2009 г.

Новый компонент генерации случайных чисел. Вы можете указать список символов и длину строки.
Создайте файл random_helper.php в app/controllers/components и вставьте туда след код:
<?php
class RandomHelperComponent extends Object {
  function generateRandomString ($length = 8, $possible = '0123456789abcdefghijklmnopqrstuvwxyz') {
    // initialize variables
    $password = "";
    $i = 0;
    // add random characters to $password until $length is reached
    while ($i < $length) {       // pick a random character from the possible ones       $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);       // we don't want this character if it's already in the password       if (!strstr($password, $char)) {         $password .= $char;         $i++;       }     }     return $password;   } } ?>

воскресенье, 18 октября 2009 г.

Про типы переменных

Зачем же все таки нужны эти типы переменных?

Я сам долгое время писал на С++, ворча, типа, зачем так нужны эти тиры переменные(до этого писал на РНР)

объясню быстро и грубо на примере:

a = 5;
b = 8;

если a и b числа(тип int), то a+b=13
а если это строки(string), то a+b=58

получается если попытаться сложить строки, то мы их просто склеим.

воскресенье, 11 октября 2009 г.

freedom to pray

If a man is free, he is free in everything. Prayer is one of his rights. No stereotypes. Freedom to pray.

пятница, 9 октября 2009 г.

«Поезд свободы»

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

Страны Восточной Европы празднуют сегодня освобождение от влияния Советского Союза. Чешский и немецкий народы ежегодно проводят различные культурные мероприятия по случаю падения в 1989 году Берлинской стены и начала процесса создания свободного Европейского Союза.

Oрганизуемая Евросоюзом в текущем году программа «Youth in Action» охватывает, в основном, европейскую молодежь. Так, приехавшая из республик постсоветского пространства молодежь прошла шествием из Чехии до германского города Хоф. В рамках указанных мероприятий состоялась символическая акция «Поезд свободы», носящая памятный характер в знак первых выходцев из СССР, добравшихся в Европу по железной дороге. Участники акции, в том числе и четверо азербайджанцев, выступили с пожеланиями мира и свободы народам.

По словам участвующей в программе от Азербайджана Эсмиры Мамедовой, эти мероприятия направлены на взаимную интеграцию народов Европы и бывшего СССР: «Первые советские граждане, набравшиеся смелости добраться поездом из Чехии в Германию, воспринимаются в Европе в качестве героев свободы. По этой причине недавно было организовано железнодорожное путешествие из Праги в немецкий город Хоф, в котором приняла участие молодежь из Грузии, Польши, Беларуси, Армении и Азербайджана. Данная программа охватывает, в основном мероприятия культурного характера - на каждой железнодорожной станции были организованы театральные постановки и художественные выставки». Участники программы тепло встретили пейзажи, нарисованные азербайджанцев Азизом Шахгусейновым, и видеоролики Руслана Асадова о вреде наркомании.

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

В.Мамедов - Vesti.az

воскресенье, 4 октября 2009 г.

Загружаем из Picasa прямо в Facebook

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

Естественно полно фотографий. Как всегда зашел в Facebook, чтобы хоть кинуть пару фоток.
Ну не хотелось мне делать это вручную, хотелось чтобы Picasa сама это сделала...начал уже ворчать, как вдруг подумал: а может в гугле посмотреть?
и правда поиск Picasa to Facebook дал много ссылов, ссылающихся на PicasaUploader

короче, как это есть:
  1. Устанавливаем Picasa, если пока не сделали, то всегда сможете сделать это.
  2. Устанавливаем Плагин.
  3. В появившемся списке добавляем новую кнопку на панель кнопок

Это как установить, а вот как пользоваться - это вообще проще:
  1. Выбираем какие фотографии хотим загрузить...для нескольких, в левом нижнем углу нажимаем Hold
  2. Нажимаем на кнопку Facebook. нам придется залогиниться, чтобы суметь загрузить фотографии в наш профайл.
  3. Выбираем Альбом или создаем новый
  4. Нажимаем на Upload...
  5. После того как программа загрузить фотографии на Facebook, мы передем на страницу подтверждения.
  6. ВСЕ!

суббота, 3 октября 2009 г.

Никогда так не делайте! Любите своих матерей!

Сынок, ты не можешь так поступить со мной! – взмолилась мать.

- Мама, прошу тебя, не начинай сначала. Мы ведь обсуждали этот вопрос уже много раз, – ответил сын.

- Я всегда надеялась на то, что это все только на словах. Оказывается, ты на самом деле хочешь отдать меня в дом престарелых. Как ты можешь?!

- Мама, ты же знаешь, что я не люблю эти сентиментальные разговоры. И потом, я лично смотрю на это все с другой призмы. Там за тобою будет особый уход. Будет с кем пообщаться, твой любимый пасьянс разложить, годы застойные вспомнить. Не будет ворчаний сына и причитаний невестки. Внуки доставать не будут. Так что я поступаю с тобой, как любящий и заботливый сын. А мы будем тебя навещать почаще. Правда, Эля?

- Обязательно, – сказала жена таким тоном, каким только можно было подчеркнуть переполняющую её радость долгожданной разлуке с «любимой» тёщей.

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

- Неправда, мама. Была в моём далеком детстве одна звонкая пощёчина. Ты, наверное, уже и не помнишь. Зато я помню.

- Этого не может быть. Мы с отцом никогда не били тебя.

- Да ладно, мам, не важно. Твой чемодан уже готов. Я подгоню машину, а вы через десять минут спускайтесь.

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

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

- Здраствуйте Мина ханум, - сказала женщина средних лет в халате, которая незаметно вошла. Мина ханум вздрогнула от неожиданности.

- Здравствуйте, Милочка. Мы разве знакомы?

- Меня зовут Лала. Я работаю здесь старшим санитаром вот уже почти 30 лет. А я Вас сразу узнала. Вы не помните меня? – спросила женщина.

- Простите, Милочка, но память уже не та. Особенно после смерти мужа она меня стала часто подводить. Многое забываю, знаете ли. Вы живете с нами по соседству или как? Где мы с Вами могли встречаться? – спросила Мина ханум рассеянно.

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

- Да, да. Это так, – сказала Мина ханум дрожащим от волнения голосом.

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

Лицо Мины ханум побледнело, как будто её вдруг осенило что-то. Внезапно нахлынувшие воспоминания стали для нее настоящим громом среди ясного дня.

- Да, да. Кажется я начинаю кое-что вспоминать, – сказала Мина ханум со слезами на глазах: - А ведь он был прав. Я действительно ударила его однажды. И теперь даже помню за что. Он сказал мне тогда, что когда он вырастет, то поступит со мною так же, как я поступила со своей матерью.

четверг, 24 сентября 2009 г.

Вышла новая версия qooxdoo 0.8.3

qooxdoo (произносится [ 'ку: ksdu:]) является объемным и новаторским фреймворком (основой) для создания Rich Internet Applications (RIA). Использование объектно-ориентированного JavaScript-а позволяет разработчикам создавать впечатляющие кросс-браузерные приложения. Никакого HTML, CSS, ни DOM знания не нужны. qooxdoo включает в себя независимую от платформы цепь инструментом развития, оответствующее современным достижениям GUI Toolkit и передовой клиент-сервер-ный слой связи.

qooxdoo целиком состоит из классов и наследовать возможности Объектно Ориентированного JavaScript-a. Он полностью опирается на пространства имен и не наследует стандартные типы Javascript, чтобы легко интегрироваться с другими библиотеками и пользовательским кодом. Большинство современных браузеров(например Firefox, Internet Explorer, Opera, WebKit/Safari) поддерживают его, и он защищен от утечек памяти. Поставляется с обширным API, который автоматически генерируется из Javadoc-подобных комментариев и из синтаксиса кода. Быстрый и полный парсер не только позволяет генерацию доков, но и является неотъемлемой частью процесса автоматической сборки, что делает оптимизацию, сжатие, связывание и развертывание собственных приложений очень удобным для пользователей. Интернационализация и локализация приложений для различных стран и Языки является основной функцией и легки в использовании.

суббота, 19 сентября 2009 г.

Vinadium: проверка на стороне клиента

http://vanadiumjs.com/
Простой, интуитивный, и мощный скрипт проверки на стороне клиента.
Нет необходимости в программировании, легко расширяем и настраиваем.
Поддерживает Ajax.
Все очень просто!
<input class=":min_length;4" type="text"/>
<input id="pass" class=":email" type="text"/>

четверг, 17 сентября 2009 г.

Простое решение красивых URL

Если Вы просматриваете какую-то запись/пост на Cake-сайте, то скорее всего адрес выглядит так:
/posts/view/5, где posts - модель, а 5 - номер id записи.
Чтобы сгенерировать такую ссылку надо порписать что-то вроде:$html->link('CakePHP Tips', array('controller' => 'Post','action' => 'view',5));
Но вы не будете писать id вручную, скорее всего это будет что-то вроде:
$html->link($post['Post']['title'], array('controller' => 'Post','action' => 'view',$post['Post']['id']));

А сейчас самое интересное:
Вы можете написать дополнительный параметр, и он будет перенаправлен туда же.
То есть /posts/views/5/Cakephp-tips, ведет туда же, куда и /posts/views/5

Все! Нам больше нигде не нужно хранить Slug. Достаточно прописать его в ссылке

$html->link($post['Post']['title'], array('controller' => 'Post', 'action'=>'view', $post['Post']['id'], Inflector::slug($post['Post']['title'], '-')));
Это даст нам что-то вроде: /posts/view/5/cakephp_tips

среда, 16 сентября 2009 г.

Cakephp TreeBehavior и отдельная ветка

Сегодня расскажу о замечательном свойстве TreeBehavior-a для Cakephp generatetreelist()
Как правило, он выдает большое дерево с подкатегориями и тому подобное.

чтобы использовать tree behavior, в вашей таблице должны быть хотя бы эти 3 поля:
parent_id, lft, rght

$this->Category->generatetreelist();
и все наше дерево готово!

Оказывается не все! а если я хочу не всю ветку, а начиная с id=5?
сразу скажу что варианты типа
$this->Category->generatetreelist(array('id'=>5));
Не прокатит. т.к. в этом случае он вернет только 'id'=5. а нам нужна ветка.

Ну что ж, пойдем дальше...
заменим $this->Category->generatetreelist(); на $this->Category->find('threaded');
этим мы ничего не изменили, а всего лишь вывели все поля, а не только key=>value

а для чего спросите Вы, здесь lft, rgth? странно. я сам долго не мог понять, а чем им id не понравился для сортировки?

как выяснилось, они вовсе не для сортировки.
пока у строк parent_id=0, т.е все они нулевого уровня, lft+1=rght
до того как Вы для какого нибудь элемента добавите дочерний.

Что же тут происходит? lft и rght продолжают нумерацию дальше, как ни в чем ни бывало, не смотря на то что это уже дочерние элементы.
А вот у родительского lft тот же самый, но вот rght = "последний дочерний rght"+1

и так приступим:
$prn = $this->Category->find('first',
array('conditions'=>array('id'=>5))
);
$out = $this->Category->find('threaded', array('conditions'=>array('Category.lft BETWEEN ? AND ?'=> array($prn['Category']['lft'], $prn['Category']['rght'])), 'order'=>'lft');

удачного приготовления :-)

понедельник, 14 сентября 2009 г.

jQuery решает проблему select-to-input

Джефри Олчовый разместил постой способ про использование jQuery для решения проблемы selet-to-input. Способ заключается в том, чтобы показывать или прятать текстовое поле, когда вы выбираете вариант "Другой". Оно использует то же название поля, так что сервер получает только одно значение, и не парится о том было ли оно выбрано в select-е, или введено в поле.

$(document).ready(function(){
  $('.leader').each(function(){
    var name = $(this).attr('name');
    if($(this).val()!='other'){
      $(this).next().removeAttr('name').hide();
    }
  });

  $('.leader').change(onChange);

  function onChange(){
    var desiredName = $(this).attr('name');
    if($('#'+desiredname).val()=='other'){
      $('#'+desiredname).next().attr('name',desiredName).fadeIn('fast');
    }else{
      $('#'+desiredname).next().removeAttr('name').fadeOut('fast');
    }
  }
});

воскресенье, 13 сентября 2009 г.

Выборка релевантных тегов (ярлыков)

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

Как это сделать на ?
Опишу только алгоритм.
Имеются 3 таблицы posts(id,content), tags(id,tag), posts_tags(id,post_id,tag_id).
как Вы поняли, третья таблица соединяет первые две.
1. сначала выбираю статью, со всеми тегами.
2. выбираю остальные статьи с этими же тегами.
3. выбираю список тегов в этих статьях.
4. сортирую этот список тегов, удаляю одинаковые (например через array_unique())

Если Вы хотите хранить теги через запятую, а потом искать их через "tags LIKE '%тег%'", то спешу Вас огорчить. Этот способ плохой до не узнаваемости. Все дело в том, что даже если на поле tags вы повесили index, то при использовании "tags LIKE '%тег%'" этот индекс учтен не будет.

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

Как поменять заголовок у Blogger-а

Обычно по умолчанию Blogger в заголовке прописывает title, который мы указали в настройках.
Не то что это не совсем удобно. Я бы сказал это совсем не удобно: каждый раз одно и то же, одно и то же.
Что нам делать?
1. Layout(Макет) -> Edit HTML (изменить HTML)
2. находим строку:
<title> <data:blog.pageTitle/> </title>
3. меняем ее на:
<b:if cond='data:blog.pageType == "index"'>
<title> <data:blog.title/> </title>
<b:else/>
<title> <data:blog.pageName/> </title>
</b:if>
 4. сохраняемся. и все!

Что делать с Ajax, при отключенном Javascript

Все мы знаем чтО такое Ajax.
Для тех кто не знает, вкратце скажу.
Что это такое?
Эта такая система, которая с помощью Javascript, делает запрос на какую-либо страницу и результат выводит на экран.
Зачем это нужно?
Больше не надо грузить всю странице целиком, а только ее часть. Я просто умалчиваю о других бесценных свойствах..
А что если пользователи отключили Javascript?
А вот об этом, я как-раз и хочу рассказать...


Первое что я делаю: все ссылки привожу к виду 
<a href="/articles/page:2" onclick="open('/articles/page:2'); return false;">Далее</a>


Далее, в начале страницы, между <script type="text/javascript> и </script> пишем Ajax запрос, который будет доставать ту самую '/articles/page:2', но ссылка не сработает, т.к. мы прописали "return false;"


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

13 сентября - День программиста!

13 сентября (12 в високосные годы) в России официально будет отмечаться День Программиста
Почему именно эта дата? Просто это 256 день года :-)
Существует также День системного администратора (последняя пятница июля). В качестве официального он не принят нигде.

Единственным официальным праздником, связанным с информационными технологиями (кроме российского Дня программиста), является Всемирный день информационного общества, принятый Генеральной Ассамблеей ООН. Он празднуется 17 мая.

Таким образом, со вчерашнего дня, Россия стала первой и пока единственной страной в мире со столь ИТ-шным праздником. Можно, конечно, говорить, что данный праздник не несет собой ничего материального, зато он пропагандирует важность программирования в культуре и обществе.

суббота, 12 сентября 2009 г.

Прикручиваем resuestAction к Cache-у

В документации Cakephp 1.2 говорится о том что если requestAction используется без кеширования, то то может уменьшить производительность.
If used without caching requestAction can lead to poor performance. It is rarely appropriate to use in a controller or model.
И правда, сами подумайте, каждый раз при просмотре сайта, кроме основнфх запросов к базе, делается куча мелких, с помощью requestAction-ов...
И как истинные политики, они говорят что может произойти, при этом не говоря КАК это избежать.
Привожу пример того, как с этим разбираюсь я. Это не догмат. Потому буду признателен чужим мнениям, тем более, что Вы, дорогие читатели, не чужие!

Коротко, о том как работает requestAction:
requestAction обычно используется вo view-файле (папка views). из view-файла, вы делаете запрос на другую страницу, и получаете значение.
синтаксис requestAction-а таков: $this->requestAction('/articles/home');
который говорит Cakephp что надо сделать запрос по адресу http://адрес.сайта/articles/home
в самом контроллере к которому обращается requestAction надо прописать return;
function home(){
   $out = $this->Article->find('all');
   Cache::write('articleHome', $out);
   return $out;
}

теперь мы можем смело дописать к $this->requestAction('/articles/home'); следующие строки
$out = Cache::read('articlesHome');
if(empty($out)){
   $out = $this->requestAction('/articles/home');
}

и теперь при каждом обновлении этого списка, если мы что-то добавили/изменили не забываем перезаписывать: Cache::write('articleHome', $out);

Супер справочник от Google

Компания Google запустила новый сервис — справочник различной статистической информации Internet Stats. Пока микросайт доступен на домене британского раздела «Гугла». Однако информация, представленная на нем, касается не только Великобритании и данных об интернете. Пользователи могут найти с его помощью статистические данные по разным вопросам.
Данные на сайте сгруппированы в пять разделов: макроэкономика, технологии, потребительские тенденции, аудитория СМИ и медиа в общем. Для каждого раздела можно просмотреть список подразделов. Пока меньше всего информации и, соответственно, подкатегорий представлено в разделе, описывающем макроэкономические тренды. А наиболее широко представлена на сайте тема использования современных медиа.
Информация на «Интернет-сатистике» представлена в максимально кратком виде: сервис больше напоминает сборник фактов, сгруппированных по темам. Каждый факт сопровождается источником и датой. Некоторые из них содержат ссылки на страницы с более подробной информацией по теме.
По базе фактов и цифр доступен поиск. Его работа, впрочем, оставляет желать лучшего: несколько запросов к сервису не дали результата, притом что запрашиваемые данные на сайте есть. Вероятно, это связано с разницой формулировок (например, Internet usage и online population).
В данный момент сервис использует данные, предоставленные информационными агентствами и исследовательскими компаниями, среди которых BusinessWeek, comScore, The Economist, Mindshare, Nielsen и другие. Желающие могут разместить на его страницах свои факты, для этого нужно заполнить специальную форму. После ее проверки модератором сайта данные пользователя попадут в список.
Запуск сервиса Google Internet Stats, скорее всего, тестирование более глобального проекта, который готовит компания Google. Возможно, база данных этого сервиса статистики станет элементом нового функционала поисковой системы Google, благодаря которому компания попытается стать конкурентом недавно запущенной поисковой системы Wolfram Alpha.
http://internetno.net/2009/09/14/ginet-stats/