Нет, не о той рыбалке, что на озере, рано утром, под пиво\водку и ухой вечером, а о сборе "рыбы", то есть текстов, нужных лишь для того, чтобы заполнить ими что-то. Дизайнеры, верстальщики используют рыбу для заполнения каких-то блоков информации, когда необходимый контент от заказчика ещё не пришёл. Программисты используют рыбу для проверки БД, скриптов и программ эмулируя действия пользователя, якобы он передаёт какие-то тексты программе. В общем, удел рыбных текстов - тестирование чего-либо, имеющего дело с текстовой информацией.
Создать рыбу можно разными способами:
- Взять любое художественное произведение и выдрать оттуда главы, которые и будут текстами рыбы
- Взять любой достаточно большой текст и сгенерировать множество текстов, используя цепи Маркова
- Взять где-то базу уже нагенерированых текстов
Эти способы пришли мне в голову, особо эту тему я нигде не встречал, поэтому руководствуюсь лишь своим опытом. Вначале для тестирования скриптов я использовал лишь простой генератор записей "добавить строку тест тест тест", однако это не отражает реальных ситуаций - такие записи без проблем кешируются и вообще не очень пригодны для тестирования в условиях, приближённых к боевым.
После этого, используя готовый класс для генерации текстов используя цепи Маркова, я нагенерировал около 1000 текстов, однако, толи класс содержал ошибку(которую мне не очень хотелось искать, а беглый осмотр кода не дал результата), толи звёзды не так встали, но из 900-кб текста Сильмариллиона он выдрал только 3 слова и все тексты содержали только 3 различных слова. Затем я этот же текст разобрал на главы, коих насчиталось около 20. Затраты явно не оправдались. Поэтому я начал искать другой способ генерации рыбы, и тут мне на глаза попался сервис
Яндекс.Рефераты. Он создаёт совершенно несвязный текст по заданой тематике, но для тестирования - само то. Далее был написан простенький парсер, который берёт записи по случайным темам. Его код привожу ниже:
<?php
function process_urls($urls)
{
$errno = 0;
$errstr = '';
$texts = array();
$ids = array();
$eofs = array();
$counter = 0;
while (in_array(false, $ids) || (count($urls) != 0 && count($ids) == 0))
{
foreach ($urls as $id => $href)
{
if (!isset($ids[$id]) || $ids[$id] === false)
{
if ($counter != 0 && ceil($counter / 100) == $counter / 100)
sleep(1);
$counter ++;
$href = parse_url($href);
$ids[$id] = fsockopen('213.180.204.20', 80, $errno, $errstr, 5);
if ($ids[$id])
{
$out = "GET ".$href['path']."?".$href['query']." HTTP/1.1\r\n";
$out .= "Host: ".$href['host']."\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($ids[$id], $out);
$eofs[$id] = false;
$texts[$id] = '';
}
}
}
}
while (in_array(false, $eofs))
{
foreach ($eofs as $id => $eof)
{
if ($eof == false)
{
$texts[$id] .= fread($ids[$id], 4096);
$eofs[$id] = feof($ids[$id]);
}
}
}
foreach ($ids as $id => $id_val)
fclose($ids[$id]);
foreach ($texts as $id => $href)
{
$text = $texts[$id];
$text = str_replace(array("\n", "\r"
, '', $text);
preg_match(
'#<h1 style="color\:black\; margin\-left\:0\;">Тема\: \«([^»]+)»</h1>((<p>[^<]+>/p<
+)</div></td>#Sim',
$text, $matches);
preg_match_all('#<p>([^<]+)</p>#Sim', $matches[2], $matches2);
mysql_query(
'INSERT DELAYED INTO data (title, textdata) VALUES ("'.mysql_escape_string($matches[1]).
'", "'.mysql_escape_string(implode("\r\n", $matches2[1])).
'"
');
}
}
set_time_limit(3600);
mysql_connect('localhost', 'root', 'root');
mysql_select_db('data');
mysql_query('CREATE TABLE IF NOT EXISTS `data` (
`title` VARCHAR( 255 ) NOT NULL ,
`textdata` TEXT NOT NULL
);');
mysql_query('TRUNCATE TABLE `data`');
$themes = array('astronomy', 'geology', 'gyroscope', 'literature', 'marketing', 'mathematics', 'music', 'polit',
'agrobiologia', 'law', 'psychology', 'geography', 'physics', 'philosophy', 'chemistry', 'estetica');
$urls = array();
for ($i = 0; $i <= 50000; $i++)
{
$themes_copy = $themes;
$use_themes = array();
do
{
$rand_index = array_rand($themes_copy);
$use_themes[] = $themes_copy[$rand_index];
unset($themes_copy[$rand_index]);
} while (count($themes_copy) && rand(0, 5));
$urls[] = 'http://referats.yandex.ru/all.xml?mix='.implode('%2c', $use_themes).'&'.implode('=on&', $use_themes).'=on';
}
while (count($urls))
{
process_urls(array_splice($urls, -10));
}
Собственно ради него и затевалось написание данной заметки. Достаточно шустро обрабатывает страницы и помещает тексты, пригодные для занесения, например, в раздел новостей на сайте, в БД. Использовать его нужно осторожно, естественно только для тестирования.
Мне интересно увидеть комментарии по поводу скрипта и вообще идеи создания рыбы, ведь действительно, идею почти никто не освещает.
[1] |
опубликовано: 1 марта 2008, 17:34
Постараюсь описать советы оптимальной застройки городов в SimCity 4 Rush Hour. Этот аддон содержит улучшения по части транспортных магистралей. В оригинальном SimCity 4 главной проблемой был неимоверный трафик на дорогах и справиться старыми средствами было крайне затруднительно.
Итак, вот что я рекомендую:
- Лучший способ создать хороший город - представить в голове какой-нибудь реальный город.
- Специализация рулит. У меня в моём текущем развивающемся регионе(2 500 000 жителей) практически каждый город зависит от другого. Есть промышленные города, а есть постиндустриальные(промышленности либо нет вообще, либо 2-5% площади и та High Tech).
- Самый эффективный способ производить электроэнергию - угольные станции. Но они очень загрязняют окружающую среду, поэтому их лучше строить в центре промышленных районов города, либо вообще в отдельных промышленных городах(у меня на каждый средний город по 2 маленьких промышленных придатка, где только промышленность, дороги и электростанции). Передавать энергию в соседний город можно посредством ЛЭП.
- Грязной промышленности и производству не так важна вода, к тому же они её очень загрязняют, поэтому в промышленные районы\города я не провожу воду.
- Размечая промышленный район, следует помнить, что удаление клетки более чем на 2-3 клетки от дороги означает транспортную недоступность. Поэтому я строю промышленные районы полосками по 4 клетки между 2-мя проспектами или дорогами.
- Промышленность очень огнеопасна, поэтому такие районы должны быть обязательно прикрыты пожарными станциями.
- Сельскохозяйственные города также нужны, иначе симы умрут от голода(сам такого не встречал, но говорят что есть такое).
С промышленностью разобрались, переходим к коммерции:
- Не стоит строить коммерцию слишком далеко - покупатели и работники не любят долгих поездок.
- Плаза(торговая площадь) стимулирует коммерцию.
- Коммерция хорошо развивается только при наличии воды.
- Для коммерции максимальное удаление от дороги - 4 клетки. Но это только в благоприятных районах. В обычных - 3 клетки.
- Продавцам не нравятся ночные погромы, поэтому такие зоны лучше брать в кольцо защиты полицией.
- Работникам не мешает шум стадиона, поэтому последний окружать лучше коммерческими зонами, чем жилыми.
- Небоскрёбы врядли появятся на 1 клетке, но вот на 4-12ти(да-да, одно здание может занимать 12 клеток!) - вполне.
Советы по использованию жилых районов:
- Строить лучше клетками 2х3 или 3х3. Реже удаётся построить клетки 4х3.
- Жилые районы для процветания должны быть в полной мере медецинскими, образовательными(школы, колледж(можно 1-2 на город), библиотеки, музеи(3-4 на город)) учреждениями, парками, игровыми площадками для детей, спортсооружениями(в том числе большие стадионы, но их лучше строить подальше от жилых районов, ибо очень шумны), остановками общественного транспорта или метро, дорогами(начиная от обычной дороги и заканчивая шоссе для больших городов, где проспекты просто не справляются с массами автомобилей, либо с перемещением симов в другие города региона), охраной полиции и пожарников.
- Большим городам крайне необходима связь с внешним миром. Для этого подойдут порты, аэропорты, Ж\Д, уходящая за пределы города, шоссе в другие города и т.д.
- Вода является обязательным фактором развития жилых районов.
Советы касательно строительства зданий:
- Здания с простым покрытием территории для достижения результата можно строить вполне разреженно, но не упускать более 5% территории города(то есть можно поставить 1 большую пожарную станцию на маленький город и её будет вполне достаточно), а здания с "наполнением" (школы, больницы и т.д.) следует строить почаще, например, соседнюю школу строить не с расчётом на покрытие соседнего округа, а стрить на границе области покрытия предыдущей школы\больницы потому, что очень часто в ином случае эти учреждения оказываются переполнены.
- Зону действия лучше обеспечить по максимуму, ведь +$50 к 0 это небольшая территория, а +$50 к $200 это едва ли не двукратное увеличение площади(уже весьма солидной). Однако обратная сторона медали - чем больше территория, тем больше посетителей. В больших городах это ключевой фактор.
- Здания, которые негативно влияют на стоимость земли лучше строить скоплением подальше от жилых и коммерческих районов.
- Федеральная тюрьма - очень полезный объект. Она даёт 250 долларов в бюджет ежемесячно, может содержать очень много заключённых, но при этом потребляет много энергии и даётся только при проблемах с бюджетом.
- В SimCity 4 есть интересное здание - Казино. Оно даётся при наличии закона, легализирующего азартные игры. Выглядит красиво, даёт 300 долларов в бюджет, но навлекает преступность.
Советы по строительству транспортных развязок:
- Метро очень полезное, но дорогое удовольствие. Выживаемо только в хороших развитых городах. Размещать следует достаточно часто(где-то 1 станция на 25-36 клеток).
- Автобусные остановки дешвле, но зависят от городских дорог(которые обычно и так переполнены).
- Сторожки способны оздоровить городскую казну, но затрудняют движение автомобилей. Строю только если совсем туго с деньгами.
- В слаборазвитых городах достаточно и проспектов, но в развитых необходимо шоссе, ведь для таких городов 10 000 автомобилей, движущихся в одном направлении не редкость, а повсеместное явление.
- Съезды и въезды для шоссе лучше строить почаще. Например, каждые 12 клеток.
- Поднятое шоссе эффективнее, но дороже наземного. Но оно того стоит, поэтому я чаще строю поднятое.
- Паромы вполне могут заменить всяческие шоссе и ж\д сообщение между городами. Но, естественно, для этого нужна река. Строю по возможности.
Вот примерно такими гипотезами я пользуюсь, застраивая свои города. Если кто что хочет добавить - пожалуйста, форма комментария внизу.
[9] |
опубликовано: 29 июля 2007, 20:59
Что-то я забыл в последнее время про дневник… Сейчас вернулся немного в DestinySphere, помаленьку играю, иногда захожу в SanCity, там безработица и скука. Работаю над проектом, по завершении которого у меня будет собственная CMS, которую потом можно будет использовать очень для многих целей. Весьма занятная вещь получается. Познакомился с рокером, хотим вместе сайты делать, так что если Вам нужен сайт – обращайтесь, сделаем
В личной жизни всё супер, подарил любимой слоника со звездой с неба. Вроде понравилось
Мне она подарила часики, шоколадку(ммм…
и открыточку(мега). Сессию сдал на пятерки, пока иду без 4 и 3 в сессиях... Типа даже на красный диплом. Если всё так и будет, то это супер. В общем, в ближайшем будущем пополнится резюме очередным проектом, ждём весны или хотя бы хорошей погоды, в дальнейшем постараюсь не забывать вести дневник
До новых встреч!
[3] |
опубликовано: 3 января 2007, 23:46