О распределённом поиске YaCy, или бороться и искать, найти и не сдаваться.

Сеть YaCy Peer
Сеть YaCy Peer

И таки здравствуйте, дражайший читатель.

Сегодня речь пойдёт о такой специфичной для Web вещи, как поиск по интернетам. Да, все мы безусловно знаем и кошерный Google, и трефной Yandex. А ещё кучу всяких поисков помельче — рамблер, апорт, за рубежом популярен ещё Yahoo. Вроде бы — поиск да поиск, что тут такого? Алгоритмы индексации там, все дела — у всех почти всё одинаковое, и кто-то ищет получше, кто-то похуже, а кто-то и вовсе как яндекс выдаёт на первое место рекламу, и, возможно, проплаченные позиции. Но это лирика. У всех этих поисковых систем есть серьёзный недостаток (при наличии весьма большого числа достоинств). Знаете какой? А это фильтрация поиска. Вам дают то, что разрешено искать. Скажем, если вы попытаетесь найти что-то, что в этом поиске запрещено, то он вам ничего не покажет. За примерами я ходить не буду — сами найдите, но факт в том, что поисковики тесно сотрудничают со всеми заинтересованными лицами, и по их требованию/заказу удаляют из индекса массу кошерных вещей. Печально? Таки да, дражайший читатель. И что же делать?

Я уже не удивлён, что весьма интересные вещи из области технологий децентрализации придуманы в Германии. Стране жареных сосисок, отличного пива, и благоприятной, до некоторых пор, политики иммиграции. Знаете, есть старый такой прикол, и я кажется писал его уже где-то тут, о четырёх правовых моделях: английской — можно всё, кроме того, что нельзя; немецкой — нельзя ничего, кроме того, что можно; французской — можно всё, даже то, чего нельзя; и русской — нельзя ничего, даже то, что можно. Так вот, в странах с наиболее жёсткими моделями (к их числу относится и эта ваша франция, которая, как и все европейские страны, понемногу скатывается к немецкой модели), рождаются поистине гениальные решения по обходу «нельзя ничего, кроме…». Да, дражайший читатель, как ты уже возможно догадался — немцы придумали распределённый поиск — распределённый поисковый движок, если точнее. Называется он — YaCy (читается как ya see). Работает он по технологии, весьма близкой к торрентам — у каждого пользователя (т.н. YaCy Peer’а) есть локальный поисковый робот, индексатор, база. А также небольшой веб-интерфейс для доступа к результатам поиска. Поисковый робот шарится по интернетам, со ссылки на ссылку, с сайта на сайт, и собирает контент, после чего индексирует его через так называемый Reverse Word Index (RWI) и складывает в локальную поисковую базу. Плюс данная система относится также и к очень мной любимым оверлеям.

Читать далее О распределённом поиске YaCy, или бороться и искать, найти и не сдаваться.

Freenet, i2p, Java…

Не так давно, я скачивал и устанавливал систему Freenet. По некоторым причинам (больше время отклика, отсутствие динамического контента, низкая скорость загрузки, отсутствие нормального интерфейса, и т. д.) она удалена с моего компьютера, ибо на данный момент меня больше заинтересовал проект i2p (о том, что это такое, можно прочитать на вики, и на официальном сайте). Оба этих проекта объединяет то, что они OpenSource (который в последнее время всё больше и больше интересует меня), и то, что они написаны на Java. Меня заинтересовал этот язык, дело в том, что он очень похож на C# (а точнее, си-шарп похож на java, так как проектировался с оглядкой на него). А шарп я более-менее знаю, по крайней мере разрабатывал приложения контроля состояния распределённой сети серверов именно на нём. Но на данный момент у явы, как языка прикладного программирования приложений, есть огромное преимущество: он спокойно исполняется на линукс-системах. Т.е. исполняемый файл, в отличие от .NET exe, одинаково выглядит и работает на той же убунту, и на той же винде едва ли не любых версий. Это преимущество стало решающим в определении моего интереса к нему.

Чем же обеспечивается успех и живучесть Java в конкурентной борьбе с .NET? Тут надо сделать оговорку. Вообще, зависит от того, для какой платформы будет вестись разработка — для MS Windows, *Nix, или иных платформ. Если основным целевым сегментом является windows, то тут, безусловно, стоит выбирать .NET разработку, ибо она наилучшим образом интегрирована с системой, предоставляет массу платформо-зависимых инстументов, и писать на ней windows-приложения намного правильнее. Но у OpenSource проектов, как правило, целевые задачи совершенно другие. Зачастую приложения пишутся для бесплатного использования максимальным количеством пользователей (ибо от количества людей, у которых установлено то или иное приложение, зависит работоспособность сервиса, это и freenet, и i2p). И ввиду этого, привязывать к платформе приложение совершенно недопустимо. А поддержка .NET на той же линукс — практически отсутствует (да, я в курсе, что существует порт .NET на Linux, но я даже не проверял его работоспособность).

Единственной платформой, которая позволяет вести разработку для практически всех существующих операционных систем, обладает официальной поддержкой и довольно серьёзным финансированием, а как бонусы — имеет несколько открытых и бесплатных средств разработки (к примеру NetBeans IDE), является Java. Её разрабатывает компания Sun, которая, как можно видеть на их официальном сайте спонсирует и поддерживает также множество известных open source продуктов, среди которых MySQL, OpenOffice, NetBeans, Java… Ввиду этого, Java остаётся едва ли не единственным выбором для программиста, решившего написать прикладное приложение, и которое должно работать на многих платформах. За счёт чего это возможно? Дело в том, что Java-приложения исполняются не напрямую через вызов системных функций целевой системы (к примеру windows-API), а на промежуточном звене, так называемой «Java-машине). Условно, можно назвать это интерпретатором, а ещё точнее — JIT-компилятором. Исполняемый Java-файл не привязан к платформе, а состоит из так называемого «байт-кода», который исполняется на java-машине, которая, в свою очередь, переводит байт-код в исполняемые инструкции для процессора. Сама Java-машина уже привязана к платформе, т.е. машина для Linux не может быть запущена на windows, но прикладного программиста это не должно волновать. К слову, по быстродействию java-код, в настоящее время, не намного проигрывает чисто компилированным приложениям, за счёт применения JIT. Таким образом, лично для меня эти особенности стали поводом для знакомства с языком.

Также, если вас заинтересовала статья, рекомендую почитать ещё и вики: Java и сравнение Java и C#.

Для изучения же языка рекомендую вначале двухтомник Хорстмана и Корнелла «Java 2«, А затем трёхтомник Дейтела, «Технологии программирования на Java». Эти книги отличаются систематизированным изложением материала и по первому впечатлению вполне достойные представители технической литературы по Java. Единственный недостаток — цена бумажных версий, все книги обойдутся в сумму от 2,5 до 5 тысяч рублей. Но ведь мы в России живём, господа! :) И KAD с торрентами (1), (2), (3) ещё никто не отменял.