Ne v kontakte Asocial programmer's blog

Firefox 3 и самоподписанные сертификаты.

Надо сказать, что разработчики FireFox при разработке третьей версии много внимания уделили безопасности. На мой вкус, местами они даже перестарались. Один из таких случаев - сайты, доступные только по HTTPS и с самоподписанными сертификатами. Например, многие хостеры в целях экономии денег для панели управления хостингом сами генерируют и подписывают SSL сертификат. Почему это плохо? Теоретически, любой человек может понаделать таких сертификатов сколько угодно и, соответственно, доверять как благонадежным им нельзя. В то же время это само по себе не представляет никакого вреда.

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

  1. Открыть страницу about:config и установить свойство browser.xul.error_pages.expert_bad_cert равным true.
  2. Теперь при заходе на такой сайт на странице с сообщением об ошибке добавится кнопочка “Добавить исключение”. Жмем на нее.
  3. В появившемся диалоге жмем на “Получить сертификат” и “Подтвердить исключение безопасности”

Вуаля! Теперь сайт благополучно открывается!

Апгрейд

Свершилось! Наконец-то сделал своему компу апгрейд. Ощущения такие, как будто с копейки пересел на бмв. Впрочем, это неудивительно - против новой конфигурации стараявообще ни на что не годится.

Собственно, результаты апгрейда:

  • Процессор: Intel Core2 Duo E8400 - 3 Ghz, 6Mb L2, 1333 Mhz FSB
  • Материнка: Intel DG33FBC
  • Память: Kingston 2*1024, 800 Mhz.

Раньше же стояло:

  • Процессор: Intel CeleronD 2.66 Ghz, 256Kb L2 и не помню какая FSB
  • Мать: ASUS P4P800-VM
  • Память: 4*256Mb от Корсара, не помню частоту, но какая-то совсем уж маленькая :)

Переферию и всякие сидиромы оставил прежними.

Как бы то ни было, без граблей все же не обошлось. Первыми граблями оказалось то, что у меня стояло довольно старое ядро, которое не поддерживало новый чипсет и отказывалось грузиться. Винда, естественно, тоже не поняла шутки с подменой железа и свалилась в БСОД. Пришлось искать лив-сиди, делать бекапы и преставлять систему. Вот тут-то и лежали вторые грабли, детские. Черт меня дернул подставить openSUSE 11.0 с KDE4. Откровенно говоря, я так и не понял, где их хваленая красивость, зато в полной мере вкусил все глюки четвертых кедов. Пришлось промаяться целый день, чтобы хоть как-то настроить кеды для минимально глючной работы и научиться обходить неустранимые глюки.

Финты ICQ…

Так случилось, что именно 1 июля сего года я занялся апгрейдом железа на своем компе. В результате, я на два дня начисто выпал из онлайновой жизни и когда сегодня у меня все заработало настолько, что можно было подумать и о том, чтобы проверить свои дела в онлайне я обнаружил, что ни один асечный клиент не желает коннектиться. Оказывается, умные дяди из AOL перешли на 6 версию протокола, а подавляющее большинство линуксовых клиентов ориентированы на 5. Единственым клиентом, который включил необходимую поддержку и при этом имелся в репозиториях openSUSE 11.0 оказался Pidgin. Честно говоря, не самый плохой вариант, но функционалом, мягко говоря не изобилует…

В прочем, АОЛовцы добились своего - я начинаю думать о переходе на жаббер и перетаскиванию на него всех знакомых и клиентов. А то хрен их знает, в АОЛе, вдруг прибьют вообще все альтернативные клиенты за ненадобностью, что тогда делать? ну их нах.

Как не надо делать сайты автосерфинга или Получаем посетителей на халяву

Есть такая система обмена показами - asurf.net.ru. Идея заключается в том, что после того, как ты просмотришь (под чутким руководством их скриптов) N нужных сайтов, твой адрес заносится в этот список и те, кто будут добавлять свой сайт после вас будут вынуждены посмотреть ваш сайт. В итоге вы получите N просмотров. В целом система оказалась удачной, стала пользоваться популярностью и даже было запущено для аналогичных сервиса на других доменах. Особо замечательным свойством этой системы оказалось то, что она не требует ни регистрации, ни ввода какой бы то ни было капчи… Как вы думаете, какая мысль меня тут же посетила? Правильно, автоматизировать это дело и на халяву рубить посетителей. Ну а если еще и учесть, что на наиболее активно прокручиваемые в системе сайты вешаются сквозняки, в том числе со страничеко с PR5, то идея становится вообще крайне заманчивой. :) Ладно, автоматизировать, так автоматизировать. За пару минут я выяснил, что навигация осуществляется с помощью мета-тега в верхнем фрейме. В итоге выстроилась такая схема вызовов адресов:

0) http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru
1) http://asurf.net.ru/nextN.php
...
N) http://asurf.net.ru/nextN.php
N+1) http://asurf.net.ru/save.php

N - это количество хитов, которое мы хотим получить. Система поддерживает значения N только 3, 5, 9, 15, 23. Как человек ленивый, я подумал, что пусть даже скриптом, но столько скачиваний делать как-то совсем не здорово. Не долго думая, я попробовал вместо 23 вызовов делать всего 3 и это, как ни странно, сработало! Чуть-чуть поэксперементировав я пришел к выводу, что системе пофигу, сколько раз я загружаю страницу http://asurf.net.ru/nextN.php. При чем настолько пофигу, что если я вызову http://asurf.net.ru/save.php сразу после http://asurf.net.ru/next.php?h=N&url=http://nevkontakte.org.ru, то система все равно будет считать, что я честно посмотрел всю ту чушь, что полагается! B) Теперь дело осталось за малым. За пол-часа я наваял первую версию скрипта, который будет автоматом делать все необходимое.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
/**
 * AClicker 1.1
 * Asurf.net.ru auto surfing script by Alek$
 * http://nevkontakte.org.ru
 */
/**
 * Запрещается модифицировать данный скрипт без разрешения автора.
 */
// Usage [hits] [site] [promos]

// Define log entries types
define('ST_INFO', "Information");
define('ST_WARN', "Warning");
define('ST_ERROR', "Error");

// Include curl http library
require_once("http.php");

// Init argv[]
if(empty($argv))
{
	$argv = explode('S', $_REQUEST['q']);
	array_unshift($argv, '');
}
// Obtain number of requires hits
$hits = array(3,5,9,15,23);
if(in_array($argv[1],$hits))
{
	$hits = $argv[1];
}
else
{
	$hits = 3;
	log_action('Invalid hit number! Assuming 3...', ST_WARN);
}

// Obtain which site promote
$site = array(
	'http://testsite'.rand(3000,30000).'.ru',
	'http://nevkontakte.org.ru',
);

if(isset($site[$argv[2]]))
{
	$site = $site[$argv[2]];
}
else
{
	$site = $site[0];
	log_action("Invalid site id! Assuming $site ...", ST_WARN);
}

// Obtain which promoter use
$promos = array(
	'all',
	'asurf.net.ru',
	'rpanel.in',
	'surf.rpanel.info',
);

if(isset($promos[$argv[3]]))
{
	$promo = $promos[$argv[3]];
}
else
{
	$promo = $promos[1];
	log_action("Invalid promoter id! Assuming $promo ...", ST_WARN);
}

if($promo == 'all')
{
	log_action("Starting multipromo request queue for $hits hits to $site");
	for($i = 1; $i < sizeof($promos); $i++)
	{
		$promo = $promo = $promos[$i];
		log_action("Starting request for $hits hits to $site at $promo");

		$curl = &new Curl_HTTP_Client();

		//pretend to be IE6 on windows
		$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
		$curl->set_user_agent($useragent);

		$cookies_file = "./cookies.txt";
		fclose(fopen($cookies_file, 'w'));
		$curl->store_cookies($cookies_file);
		//if you want to send some post data
		//form post data array like this one
		$post_data = array(
			'h'		=> $hits,
			'url'	=> $site,
		);
		//and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
		$html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
		if(preg_match('##', $html_data))
		{
			$html_data = $curl->fetch_url("http://$promo/save.php");
			if(preg_match('##', $html_data))
			{
				log_action('Succeed');
			}
			else
			{
				echo $html_data;
				$html_data = str_replace("\n",'',$html_data);
				log_action("Error at step 2! Responce: $html_data", ST_ERROR);
			}
		}
		else
		{
			echo $html_data;
			$html_data = str_replace("\n",'',$html_data);
			log_action("Error at step 1! Responce: $html_data", ST_ERROR);
		}
	}
}
else
{
	log_action("Starting request for $hits hits to $site at $promo");

	$curl = &new Curl_HTTP_Client();

	//pretend to be IE6 on windows
	$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
	$curl->set_user_agent($useragent);

	$cookies_file = "./cookies.txt";
	fclose(fopen($cookies_file, 'w'));
	$curl->store_cookies($cookies_file);
	//if you want to send some post data
	//form post data array like this one
	$post_data = array(
		'h'		=> $hits,
		'url'	=> $site,
	);
	//and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
	$html_data = $curl->send_post_data("http://$promo/next.php", $post_data);
	if(preg_match('##', $html_data))
	{
		$html_data = $curl->fetch_url("http://$promo/save.php");
		if(preg_match('##', $html_data))
		{
			log_action('Succeed');
		}
		else
		{
			echo $html_data;
			$html_data = str_replace("\n",'',$html_data);
			log_action("Error at step 2! Responce: $html_data", ST_ERROR);
		}
	}
	else
	{
		echo $html_data;
		$html_data = str_replace("\n",'',$html_data);
		log_action("Error at step 1! Responce: $html_data", ST_ERROR);
	}
}

log_action();

function log_action($log = '', $status = ST_INFO, $display = true)
{
	static $aid;
	static $string = array();

	if(empty($log))
	{
		$out = implode('',$string);
		$fp = fopen(date('y-m-d').'.txt','a');
		fwrite($fp, $out);
		fclose($fp);
		return;
	}

	if(empty($aid))
	{
		$aid=number_format(microtime(true),5,'','');
	}
	$date = date('y-m-d H:M');
	$string[] = "$aid [$date] $status: $log\n";

	if($display)
		echo "$aid [$date] $status: $log\n";

}
?>

Скрипт можно использовать как из командной строки, так по http. В перво случае формат аргументов такой: clicker.php [hits] [site] [promos] В случае с вызовом во http это выглядит так: http://www.site.ru/clicker.php?q=[hits]S[site]S[promos] Теперь о самих параметрах. Все три параметра - числа.

  • [hits] - 3, 5, 9, 15, 23 - количество хитов, которое вы хотите получить на свой сайт
  • [site] - номер сайта, который будем раскручивать. чтобы добавить в скрипт свой сайт вам необходимо после строки 'http://nevkontakte.org.ru', добавить такую же, только указать URL своего сайта.
  • [promos] - номер сайта, на котором будем раскручивать наш сайт. Вот их список:
    1
    2
    3
    4
    5
    6
    
    $promos = array(
    	'all',
    	'asurf.net.ru',
    	'rpanel.in',
    	'surf.rpanel.info',
    );
    
    нумерация начинается с нуля, поэтому у asurf.net.ru номер 1, у rpanel.in - 2 и т.д. Чтобы одним махом добавиться на все сайты, нужно указать 0.

В итоге, чтобы потребовать 23 хита на каждом сайте автосерфинга для сайта nevkontakte.org.ru нужно открыть в браузере http://www.site.ru/clicker.php?q=23S1S0 Теперь остается залить скрипт на хостинг и настроить крон так, чтобы он регулярно вызывал этот скрипт. Отчеты о своей работе он будет складывать в простой текстовый файл, так что вы всегда сможете проконтролировать эффективность его работы. Вот и все. На последок скажу, что сейчас обкатываю новую версию скрипта с более удобными настройками :) Да, и последнее: я буду очень благодарен, если вы заодно со своим сайтом время от времени будете пиарить и мой :)

FF3: На старт… Внимание…

The Official Download Day Time | Spread Firefox Сегодня в 10:00 PDT (Pacific Daylight Time) будет обубликован для скачивания релиз FF3. В Москве в это время будет 21:00, а у меня в Новосибирске - полночь :) Время, конечно, не самое удачное, но что поделаешь :)

Chmod на пальцах.

Собственно, тема уже давно обсосана со всех сторон и любой неленивый человек с легкостью найдет всю нужную информацию, но… ХЗ, почему это “но” есть, но вопросы о правах доступа возникают с завидной регулярностью. Поэтому я попробую в тысячный раз изобрести велосипед и изложить основы прав доступа к файлам в *NIX системах, а так же некоторые неочевидные тонкости при работе с ними.

Часть первая. Какие существуют права доступа.

Существуют три основных разновидности прав доступа: чтение (r), запись (w) и выполнение(x). Первые два, думаю, никаких вопросов не вызывают. А вот последнее для людей, привыкших к Windows станет сюрпризом. Дело в том, что в *NIX и Windows используются разные подходы к различению исполняемых (программ) и не исполняемых файлов (файлов данных). В Windows за это отвечают расширения файлов (exe, com, bat и некоторые другие воспринимаются как исполняемые, а все остальные - нет), а в *NIX - право на выполнение файла. То есть для одного пользователя один и тот же файл может являться выполняемым, а для другого - нет. Это может быть очень полезно, если администратору необходимо запретить простым юзерам пользоваться какой-то программой, но в то же время самому иметь возможность пользоваться ею.

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

Часть вторая. Что значит 0755 или правила записи прав доступа.

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

1) Числовая форма записи.

Это четырехзначное восьмеричное число. Первый знак кодирует особые биты доступа, о которых я сейчас говорить не стану, скажу лишь, что в 95% случаев вам достаточно оставить его равным 0, а три последующих - права доступа для владельца, группы и всех остальных соответственно. В такой записи право на чтение кодируется числом 4, запись - 2, исполнение - 1. Результирующее число получается путем сложения чисел разрешенных прав доступа. Например, число 6=4+2 - право на чтение и запись, выполнение запрещено, 5=4+1 - чтение и выполнение, 7=4+2+1 - полный доступ. Таким образом, чтобы дать владельцу право делать с файлом все, что угодно, а всем прочим - только читать и исполнять, ставят права доступа 0755 (владелец: 7=4+2+1, группа: 5=4+1, остальные: 5=4+1). Это типичные права доступа на исполняемые файлы обычных программ и скриптов. Для файлов данных чаще используют 0644, 0640 или 0600. В первом случае владелец сможет читать и писать в файл, остальные только читать; во втором - писать сможет только владелец, читать - только владелец и группа, все остальные доступа иметь не будут; третий случай самый крайний - владелец сможет читать и писать в файл, а все остальные доступа к нему иметь не будут.

2) Символьная форма записи.

В этом случае права доступа представляются как 9 символов r, w, x или дефис. Идут они в следующем порядке: rwxrwxrwx. Первые три отвечают за права доступа владельца, следующие - группы и последние - всех остальных. Чтобы показать, что кто-то из них не имеет доступа к той или иной опции, ее заменяют на символ дефиса. Таким образом запись 0755, запрещающая изменять файл всем, кроме владельца, в символьном представлении будет выглядеть так: rwxr-xr-x.

Часть третья. Особые случаи.

1) Права доступа к папкам.

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

2) Кто может менять права доступа?

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

3) Внимание, лазейка!

Представим себе ситуацию: у вас есть файл с какими-то данными, которые читать должны все, а писать туда - только вы. Вы, не долго думая, ставите права доступа к файлу 0644 и живете припеваючи. Но в какой-то момент вы обнаруживаете, что в этом файле лежит совсем не то содержимое, которые вы туда записали. Как такое могло быть? А вот так: на папку, в которой лежал тот файл по каким-то причинам (по безалаберности или необходимости) права стояли, разрешающие всем желающим создавать и удалять файлы в этой папке. Злоумышленник же сделал копию вашего файла, затем удалил оригинал и записал на то же место под тем же именем свою копию. В результате этих манипуляций он оказался владельцем этого файла и смог выставить любые права доступа к нему, а так же модифицировать содержимое на свое усмотрение. Как такого избежать? Не давать права на запись в папку, содержащую этот файл, кому не надо и все будет отлично!

4) Наиболее полезные права доступа.

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

  • 0777 - rwxrwxrwx - Полный доступ для всех. Как правило, используется для папок, куда должны иметь возможность писать все желающие. Часто такой доступ ставят на папки, в которые движок сайта загружает файлы, отправленные пользователями.
  • 0755 - rwxr-xr-x - Право на чтение и исполнение для всех, право на запись для владельца. Как правило ставится на исполняемые файлы программ и системные или cgi скрипты.
  • 0644 - rw-r–r– - Право на чтение для всех, право на запись для владельца. Обычно ставится на большинство файлов с неприватными данными или скрипты php, выполняемые при помощи mod_php.
  • 0600 - rw——- - Право на чтение и запись для владельца, нет доступа для всех остальных. Обычно ставится на файлы с приватными данными.
  • 0750 - rwx-r-x— - Право на чтение, запись и выполнение для владельца, право на чтение и выполнение для группы и нет доступа для всех остальных. Часто ставится на домашние папки пользователей, наряду с 0700.
  • 0700 - rwx—— - Полный доступ для владельца, нет доступа для других. Как и 0750, часто ставится на домашние папки пользователей и папки с приватными данными, но является более жестким вариантом.

Надеюсь, эта статья поможет вам чуть больше освоится в такой нелегкой области, как *NIX B) Удачи!

PS. Навеяно темой http://www.eomy.net/forum/zapis-udalenie-vt2829-15.html

Лучшие бесплатные хостинги

Я не буду претендовать на 100% объективность, а лишь перечислю бесплатные хостинги, которые я считаю лучшими на данный момент.

EOMY.

Пожалуй, лучший среди русских хостингов. Быстрые сервера, отзывчивый администратор, развитая инфраструктура. Достоинства: нет рекламы (единственное требование - разместить небольшую кнопочку, которую, к слову, вы можете нарисовать сами под свой дизайн, со ссылкой на eomy и небольшую надпись “Бесплатный хостинг от EOMY.NET” и то, и другое вы можете разместить, как пожелаете, лишь бы их было видно), PHP5, до 10 БД MySQL, 300 МБ диска, до 10 паркованных доменов, cPanel, cron - все не перечислишь…

Из недостатков - не одобряются исходящие соединения и категорически запрещены всякие скрипты-демоны, но это, в принципе, понятно, требуется приглашение. Тут надо заметить отдельно, что любой стоящий проект код получит. Если вам пока не удалось доказать, что ваш сайт достоин этого, можно некоторое время перекантоваться на http://vagonchik.com/ , который является более доступной версией eomy и отличается лишь наличием рекламы, но этого вполен достаточно, чтобы дать начальный старт, а потом перебраться на eomy.

Internet Observatory.

Неплохой русский бесплатных хостинг, предоставляет PHP+Mysql+200MB, для среднестатистического сайта этого более чем достаточно. По запросу могут дать дополнительное место/базу/поддомен или еще,ч то надо. При регистрации так же есть ценз, осуществляемый модераторами, выбранными из числа пользователей хостинга. Проекты, получившие после проверки модераторами оценку хотябы 4 из 5 получают хостинг и бесплатный домен в зоне RU. Недостатки: как уже говорил, есть отбор заявок на хостинг, малофункциональная самописная панель управления, не всегда быстрая реакция техподдержки, высокая загруженность серверов. Еще одна проблема - выкупить домен практически нереально, правда случаев, чтобы его отобрали просто так, как это бывало на других аналогичных хостингах, еще ни разу не было. Требуют размещение небольшого блока текстовой рекламы на главной.

000webhost.com.

Крупный зарубежный бесплатный хостинг. Во многом аналогичен eomy, основные отличия: разрешены исходящие соединения, нет какого-либо ценза при регистрации, рекламу не вешают никакую. Панель управления предоставляют свою, но очень похожую на cPanel. Еще одна замечательная особенность этого хостинга - под одним главным аккаунтом можно создавать сколько угодно независимых сайтов. Очень радует скорость реакции техподдержки - одна из самых оперативных, по сравнению с конкурентами. Из недостатков: cron может запускать самое частое - раз в сутки, для более частого запуска необходимо апгрейдить аккаунт до платного, не работают функции для работы с командной строкой.

17 июня - Firefox Download Day

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

Don’t forget to be part of Firefox’s Download Day!

Mark your calendar, wrap a ribbon around your finger or write a little sticky yellow note. Download Day will start on June 17, 2008.

If you prefer to no longer receive emails from Mozilla concerning Download Day, you may unsubscribe here

The sender of this email is Mozilla Corporation, 1981 Landings Drive, Bldg.. K, Mountain View, CA 94043-0801.

Так что все ждем вторника :)

Yandex стал поддерживать файлы sitemap

Думаю, для любого веб-мастера не секрет, что Google может индексировать ваш сайт руководствуясь не только тем, что он видит на страницах, но и файлами Google Sitemap. Сегодня я обнаружил, что у Яндекса тоже появилась такая возможность. Сделать это можно на webmaster.yandex.ru, выбрав вкладку “Файлы Sitemap”. Яндекс поддерживает форматы, описанные на сайте sitemaps.org по адресу http://www.sitemaps.org/ru/protocol.php Краткий от самого Яндекса FAQ по картам сайтов можно почитать здесь: http://help.yandex.ru/webmaster/?id=1007070

Удачной индексации!

Обновление движка завершено

Уфф… Наконец-то последние баги были вылизаны, а новый движок был залит на хостинг. На всякий случай проверил скрины нового дизайна на browsershots.org и, как ни странно, никаких косяков не заметил. Правда, в IE 5.5 есть небольшой косячок, но он малозаметен и все равно вряд ли обладатель такого архаизма заглянет на мой сайт :)