CopyMaster: работа над индексатором началась

После того, как был сделан прототип загрузчика файлов, оказалось, что есть некторые вещи, которые я не учел во время проектирования системы хранения. Вначале я планировал сделать так, что все страницы будут храниться в папках, отражающих структуру доменных имен. Например, если у нас есть страница по адресу http://www.site.ru/folder2/page.html, то на диске она будет записана в файл page.html, который будет сохранен в папке x:\sites\ru\site\www\folder2\
Continue reading »

CopyMaster: индексатор

Итак, пламенным мотором сервиса является его индексатор. Индексатор должен делать следующие вещи:

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

Continue reading »

Из чего состоит CopyMaster?

Итак, копимастер должен состоять из следующих частей:

  • индексатор
  • поисковик
  • статистический анализатор

Рассмотрим эти части более подробно.

Индексатор. Нужен для того, чтобы собрать из инета все страницы.  По идее, достаточно указать одну-единственную страницу для начала загрузки, а индексатор найдет все остальные сайты. Но на самом деле это не так. Скорее всего придется добавлять новые стартовые страницы для того, чтобы охватить весь интернет. Второй функцией индексатора должен быть парсинг полученных страниц. О том, как это будет делаться, я расскажу в одном из следующих постов о КопиМастере.
Continue reading »

Начало нового проекта - CopyMaster

Мой хороший знакомый из Германии, с которым я подолгу общаюсь в аське, подсказал мне идею нового проекта. Ни много, ни мало, но создать аналог копискейпа. Кто не знает: копискейп - это сервис, который позволяет находить копии ваших документов в Сети. Для этого вы просто вводите адрес странички и, в случае совпадения, получаете список адресов, на которых есть похожий контент. Вроде бы все просто. Но тут есть несколько нюансов, которые все еще находятся на уровне обдумывания.
Continue reading »

Я в отпуске

Сегодня - первый день моего отпуска. Теперь я буду в онлайне не очень часто и не слишком долго. Если у вас будут появляться вопросы - пишите по аське или с помощью формы обратной связи на этом блоге. Я свяжусь с вами по мере возможности. Это безобразие продлится до 5 сентября. Так что пожелайте мне приятного отдыха! ;)

Синонимайзер: версия 0.2.1.6

Через полчаса после выкладывания версии 0.2.1.5 я пофиксил баг, который приводил к временной потере лицензии после импорта словаря или открывания текстового файла. Естественно, что была собрана новая сборка, которую я и выложил на сервер. Обновиться вы можете из программы.

Акция? Акция!

Сегодня, 22 августа, исполняется ровно два месяца, как я начал писать синонимайзер. И в честь этого дня я объявляю акцию: две лицензии по цене одной. Эта акция продлится только один день. А уже с 23-го августа стоимость некоммерческой лицензии будет увеличена в два раза - до 10 WMZ. Так что спешите успеть.

Пишем плагин для WordSyn. Часть 5.

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

Рассмотрим построение плагина для публикации текстов на сайт под управлением WordPress 2.6, который имеет замечательную функцию “PostIt”. Если вкратце, то с помощью этой функции вы можете опубликовать на своем блоге любой текст, который выделите в браузере. Затем достаточно нажать заветную кнопку, и выделенный текст уже в форме для публикации на вашем блоге. Очень удобно!
Continue reading »

Пишем плагин для WordSyn. Часть 4.

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

Для начала добавим в нашу программу небольшую функцию, которая будет искать плагины. Она выглядит следующим образом:

public static string PluginsDirectory = "plugins";
public static Dictionary<string, IPlugin> ListPlugins()
{
Dictionary<string, IPlugin> plugins = new Dictionary();
// папка с плагинами
string folder = System.AppDomain.CurrentDomain.BaseDirectory
+ PluginsDirectory;
if (Directory.Exists(folder))
{
// dll-файлы в этой папке
string[] files = Directory.GetFiles(folder, "*.dll");
foreach (string file in files)
{
try
{
Assembly assembly = Assembly.LoadFile(file);
foreach (Type type in assembly.GetTypes())
{
Type iface = type.GetInterface("Interfaces.IPlugin");
if (iface != null)
{
IPlugin plugin = (IPlugin)Activator.CreateInstance(type);
plugins.Add(plugin.Name, plugin);
}
}
}
catch
{
}
}
}
return plugins;
}

Continue reading »

Детская сказка

Этот пост не относится ни к одному из проектов. Просто захотелось поделиться. :)

Сегодня моя четырехлетняя дочь рассказала мне сказку: “В море плыли рыбки. Они захотели покушать, нашли себе хлебушка и съели его. И попадали на дно. А потом приплыли акулы и сьели их мясо.”
Continue reading »