dfx 07.08.2010 12:33
Скрипты — Аля виндовый 'ускоритель интернета'
Кто не в курсе: есть такой файлик в линуксе (да и в винде тоже) - hosts. Он остался с давних времён, когда DNS-серверов ещё не существовало в природе, а пара домен=IP-адрес распространялась в виде одного файла, который надо было регулярно обновлять, скачивая себе на компьютер. Этот самый hosts (в линуксе /etc/hosts) и по сей день используется системой и содержит в себе строки вида
IP-address domain.name
При обращении к какому-нибудь домену система сначала смотрит этот файл. Если она находит там запись для запрошенного домена, то сразу же переходит по указанному IP-адресу. Если не находит, то идёт уже спрашивать у DNS-сервера. Запрос к DNS серверу происходит намного дольше (что естественно), чем запрос к файлу. Так что в принципе скорость обработки запросов можно немного уменьшить (для модемных соединений это будет более существенная экономия времени, чем для скоростных соединений). Т.е. если для основных часто используемых сайтов добавить соответствующие записи в /etc/hosts, то странички будут открываться немного быстрее. На этом принципе работают многие "ускорители интернета" для винды.Мой скрипт тоже занимается этим же. Правда всё надо делать ручками и, если IP-адрес сайта поменяется, придётся в ручную обновлять записи (правда можно повесить в крон скрипт, который будет регулярно сам обновлять ip-адреса сайтов по списку, используя этот скрипт).
Скрипт написан на bash.
Вот, собственно, он сам:
Теперь кидаем его в одну из директорий из $PATH (для запуска скрипта от рута, путь должен быть в $PATH root'а). И просто запускаем:
$> scriptname yandex.ru
Проверяем /etc/hosts и видим там
........
........
77.88.21.11 yandex.ru
........
77.88.21.11 yandex.ru
Ch00k 07.08.2010 12:44 #
+ 12 -
Совершенно ненужная вещь, имхо. Во первых, кто щас сидит на модемных соединениях? Во вторых, есть DNS cache, в т.ч. в браузере.
Может и не нужная. Но на модемах многие. Не на обычных, а на мобильных, там скорость тоже не ахти в большинстве случаев.
А кэш имеет свойство устаревать. :)
А вообще, я и не говорю, что это супер полезно и нужно. Писался он большей частью just for fun.
А кэш имеет свойство устаревать. :)
А вообще, я и не говорю, что это супер полезно и нужно. Писался он большей частью just for fun.
Во первых, кто щас сидит на модемных соединениях?
Ты явно не бывал у меня дома = )
Беларусь сидит. Правда не на модемном соединении, но анлим АДСЛ очень уже близок к нему.
А кэш имеет свойство устаревать. :)
и
для основных часто используемых сайтов добавить соответствующие записи
как-то не вяжется :)
Неужели резолвинг на мобильном модеме занимает настолько много времени? о.О
:) да ладно тебе придираться-то :)) может я не только браузером пользуюсь. или то и дело меняю браузеры? :)
Да, через эти модемы, особенно когда они в режиме gprs работают, резовлинг занимает ощутимое время... порой до 8-10 секунд доходит - специально проверял, на плохеньком коннекте :)
Да, через эти модемы, особенно когда они в режиме gprs работают, резовлинг занимает ощутимое время... порой до 8-10 секунд доходит - специально проверял, на плохеньком коннекте :)
Да, настолько много. Я, когда сидел на gprs, вообще поднял себе дома кеширующий dns. :)
Хм... а всегда ли ответ на пинг будет содержать айпи? Если ip соответствует домену, но тот фильтрует пакеты? Консоль в данный момент далеко, проверить вывод не могу. Так точно делает aol.com, ещё кто-то, кого часто DDOS'ят.
Не, ну есть, конечно, исключения. Усложнять ради них скрипт смысла не вижу. Если уж попадётся такое исключение - проще руками просто сделать всё.
Если потери большие, то можно просто увеличить число пакетов у ping'а с одного, до 3-5... Тогда, если пинги не блокируются - айпишник будет получен почти 100%
а как ip-пакет вернется без обратного адреса в заголовке пакета, такое разве возможно?? Если я что-то понимаю в tcp/ip, то такой пакет должен зарезаться где-то на роутерах.
ICMP-запросы это одно, рабочие пакеты - это совсем другое. Заблокированные пинги никак не помешают обычной работе протокола :)
Лучше все-таки не ping, а nslookup.
Типа
Типа
nslookup $HOSTNAME | grep Address | head -n2 | tail -n1 | cut -d' ' -f2
.
Можно и так :) я не заморачивался с поиском оптимального варианта :)
То есть на welinux все настолько классные, что можно написать какого угодно качества скрипт и выложить?
edited by xT
edited by xT
Выложи свой.
Конкретно про тебя могу сказать - да, ты классный.
edited by xT
Конкретно про тебя могу сказать - да, ты классный.
edited by xT
#!/bin/bash
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 "
fi
HOST="$1"
IP=`getent hosts $HOST | head -1`
sed -i .bak -e "/$HOST/d" "$HOSTS"
echo "$HOST $IP" >> "$HOSTS"
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 "
fi
HOST="$1"
IP=`getent hosts $HOST | head -1`
sed -i .bak -e "/$HOST/d" "$HOSTS"
echo "$HOST $IP" >> "$HOSTS"
Так чуть лучше
#!/bin/bash
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 hostname"
fi
sed -i .bak -e "/$HOST/d" "$HOSTS"
HOST="$1"
IP=`getent hosts $HOST | head -1`
echo "$HOST $IP" >> "$HOSTS"
#!/bin/bash
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 hostname"
fi
sed -i .bak -e "/$HOST/d" "$HOSTS"
HOST="$1"
IP=`getent hosts $HOST | head -1`
echo "$HOST $IP" >> "$HOSTS"
У тебя было время писать его столько сколько влезет, у меня нет.
#!/bin/bash
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 hostname"
exit 1
fi
HOST="$1"
sed -i .bak -e "/$HOST/d" "$HOSTS"
IP=`getent hosts $HOST | head -1`
echo "$HOST $IP" >> "$HOSTS"
Так лучше? Учи лучше команды из скрипта - ибо юзать пинг для DNS Lookup это просто глупо.
#!/bin/bash
HOSTS="/etc/hosts"
if < -z "$1" > ; then
echo "Usage : $0 hostname"
exit 1
fi
HOST="$1"
sed -i .bak -e "/$HOST/d" "$HOSTS"
IP=`getent hosts $HOST | head -1`
echo "$HOST $IP" >> "$HOSTS"
Так лучше? Учи лучше команды из скрипта - ибо юзать пинг для DNS Lookup это просто глупо.
Ты на роль учителя нифига не тянешь, если чо. Банальный понторез, и ничего более.
Я этот скрипт написал за 5 минут, just for fun. А ты решил доказывать свою "крутость".
Я этот скрипт написал за 5 минут, just for fun. А ты решил доказывать свою "крутость".
А если запись с хостом уже есть? А если я не хочу от рута запускать? ты предложил по сути то же самое, что и я написал, только не предусмотрел вообще нифига, выпендрившись лишь другим способом получения ip (причём даже тут налажал, намного лучше было бы сделать echo `getent hosts "$1" | head -1` >> $HOSTS )
Не считая ещё того, что выложил "исправленный" скрипт, который будет завершаться с ошибкой на полпути.
Не считая ещё того, что выложил "исправленный" скрипт, который будет завершаться с ошибкой на полпути.
> А если запись с хостом уже есть?
sed -i.bak -e "/$HOST/d" "$HOSTS" жеж
> А если я не хочу от рута запускать?
$HOSTS можно менять
> только не предусмотрел вообще нифига, выпендрившись лишь другим способом получения
Я просто убрал много лишней и ненужной логики
> (причём даже тут налажал, намного лучше было бы сделать echo `getent hosts "$1" | head -1` >> $HOSTS )
Не лучше. Потому что так можно добавить еще проверку на то что в $IP вообще что-то есть.
Я вообще удивляюсь, что вместо того чтобы научиться у старших, ты плюешься ядом.
sed -i.bak -e "/$HOST/d" "$HOSTS" жеж
> А если я не хочу от рута запускать?
$HOSTS можно менять
> только не предусмотрел вообще нифига, выпендрившись лишь другим способом получения
Я просто убрал много лишней и ненужной логики
> (причём даже тут налажал, намного лучше было бы сделать echo `getent hosts "$1" | head -1` >> $HOSTS )
Не лучше. Потому что так можно добавить еще проверку на то что в $IP вообще что-то есть.
Я вообще удивляюсь, что вместо того чтобы научиться у старших, ты плюешься ядом.
> $HOSTS можно менять
да что ты?
Давай, измени его мне без рута.
да что ты?
$ ls -la /etc |grep hosts
drwxr-xr-x 4 root root 4096 Июл 16 11:52 ghostscript/
-rw-r--r-- 1 root root 538 Авг 7 15:38 hosts
Давай, измени его мне без рута.
Я просто убрал много лишней и ненужной логики
Не нужной тебе. Можешь сам для себя написать скрипт - пиши на здоровье. Я писал для себя, писал то, что нужно мне.
Не лучше. Потому что так можно добавить еще проверку на то что в $IP вообще что-то есть.
Т.е. если оно вставит пустую строку - это убъёт всё?.. ну-ну.
Я вообще удивляюсь, что вместо того чтобы научиться у старших, ты плюешься ядом.
Было бы у тебя чему учиться, кроме гонора...
Ты правда мне нравишься! Что мне с этого /tmp/newhosts ? В /etc/hosts всё-равно писать придётся. Или твой гений предлагает потом скопировать файл отдельно, но с правами рута?
edited by xT
edited by xT
> А если я не хочу от рута запускать?
> В /etc/hosts всё-равно писать придётся. Или твой гений предлагает потом скопировать файл отдельно, но с правами рута?
Какое-то противоречие в логике, никто не находит?
> В /etc/hosts всё-равно писать придётся. Или твой гений предлагает потом скопировать файл отдельно, но с правами рута?
Какое-то противоречие в логике, никто не находит?
Не находим. и ты бы не нашёл, если бы посмотрел скрипт. Он предусматриват как запуск от рута, так и запуск от простого пользователя.
Да, но зачем нужно его запускать от простого пользователя, если потом все равно придется добавлять руками?
Что добавлять руками? ввести пароль? Сложно, да.. сложнее, чем дописывать su или sudo и всё-равно вводить пароль...
Ты сейчас вот прекрасно показываешь, что не смотрел скрипт совершенно, уцепился за одну строчку и решил доказать, что умнее меня. Что ты доказал на самом - ты уже сам понял, наверное...
Если бы ты действительно хотел чему-то кого-то научить, то создал бы отдельный пост, со своим скриптом, и сделал бы его действительно лучше моего.
Если бы ты действительно хотел чему-то кого-то научить, то создал бы отдельный пост, со своим скриптом, и сделал бы его действительно лучше моего.
Кому бы он был бы нужен? :)
> if test `whoami` != 'root'
это же тоже неправильно
if < `id -u` != "0" > ; then echo "i'm not root" ; fi
рута могут звать не root, да и в системе может быть больше одного root
> if test `whoami` != 'root'
это же тоже неправильно
if < `id -u` != "0" > ; then echo "i'm not root" ; fi
рута могут звать не root, да и в системе может быть больше одного root
ты упорот. цепляешься к деталям, чтобы хоть как-то оправдать свой бред, что тут напорол.
Скрипт работает и работает хорошо. Ты ничего лучшего не предложил. Так что - спать!
и да... если у человека root переименован, то он если и воспользуется этим скриптом, то уж переделав под себя.
Скрипт работает и работает хорошо. Ты ничего лучшего не предложил. Так что - спать!
и да... если у человека root переименован, то он если и воспользуется этим скриптом, то уж переделав под себя.
Товарищи модераторы, удалили бы эту ветку - бессмысленный флуд же.. :) ну или хотя бы почистите, пожалуйста :)
dfx, ты бы лучше почитал его скрипты без пелены слепящего тебя гнева. Там есть чему поучится.
по unix way программированию следует писать в темповый файл, а затем замещать им основной
огромное спасибо за скрипт сижу с мегафона, пиковая скорость 7кб/с. одного тока резолва жду иногда по минуте. А Чукс просто не знает, что в России есть еще и такие интернеты
Можно поставить много чего. Но для этого нужны две вещи:
1. Знать, что поставить.
2. Должно быть пофиг, что у тебя в системе наставленно
Первое - не для всех. Куча разных программ, у каждой свои особенности и странности. А вариант с hosts работает всегда, везде и без конфигов :)
Второе - лично мне не хочется ставить кучу демонов в систему, особенно, если половина мне и не нужна по сути... :)
А вообще - каждому своё. Я решил вопрос так. Но никого даже не призываю следовать этому пути. Скрипт будет полезен хотя бы в качестве примера написания скриптов (или наоборот - примером того, как скрипты писать не надо %) )
1. Знать, что поставить.
2. Должно быть пофиг, что у тебя в системе наставленно
Первое - не для всех. Куча разных программ, у каждой свои особенности и странности. А вариант с hosts работает всегда, везде и без конфигов :)
Второе - лично мне не хочется ставить кучу демонов в систему, особенно, если половина мне и не нужна по сути... :)
А вообще - каждому своё. Я решил вопрос так. Но никого даже не призываю следовать этому пути. Скрипт будет полезен хотя бы в качестве примера написания скриптов (или наоборот - примером того, как скрипты писать не надо %) )
Велосипед такой велосипед..
Действительно, лучше поставить dnsmasq, прописать в его конфиге пару DNS-серверов, к которым он будет обращаться при первом обращении по некоторому адресу", прописать 127.0.0.1 в resolv.conf и запустить демон dnsmasq.
Дальше dnsmasq будет делать то же самое, что пытается делать автор топика, только никаких проблем при изменениях IP-адреса сервера уже не будет.
Этот вариант с dnsmasq работает тоже везде и всегда, ибо resolv.conf один для всех.
Вариант "1 демон" ничуть не хуже варианта "1 скрипт в cron".
Действительно, лучше поставить dnsmasq, прописать в его конфиге пару DNS-серверов, к которым он будет обращаться при первом обращении по некоторому адресу", прописать 127.0.0.1 в resolv.conf и запустить демон dnsmasq.
Дальше dnsmasq будет делать то же самое, что пытается делать автор топика, только никаких проблем при изменениях IP-адреса сервера уже не будет.
А вариант с hosts работает всегда, везде и без конфигов :)
Этот вариант с dnsmasq работает тоже везде и всегда, ибо resolv.conf один для всех.
лично мне не хочется ставить кучу демонов в систему
Вариант "1 демон" ничуть не хуже варианта "1 скрипт в cron".
твой вариант: Поставить, прописать, прописать, запустить.
мой вариант: Скопипастить-сохранить, пользоваться по мере надобности.
Тебе удобно ставить демона? Ставь. Мне удобней использовать скрипт. Велосипед? Ну да. dnsmasq тоже влосипед, ведь есть же bind...
скрипт в крон - вариант опциональный, это раз. а два - есть разница +1 демон или +1 задание для демона?
мой вариант: Скопипастить-сохранить, пользоваться по мере надобности.
Тебе удобно ставить демона? Ставь. Мне удобней использовать скрипт. Велосипед? Ну да. dnsmasq тоже влосипед, ведь есть же bind...
скрипт в крон - вариант опциональный, это раз. а два - есть разница +1 демон или +1 задание для демона?
у да. dnsmasq тоже влосипед, ведь есть же bind...
ага, тогда и nginx\lighttpd и прочие хттп(+)серверы тоже велосипед, ведь есть же Apachep.s. линукс тоже велосипед, ведь есть же виндоус
Попрошу не путать - nginx - это не чистые web-сервер. Изначально это проксирующий фронтенд над апачем.
Мне тут тоже программеры долго рассказывали, как крут нгинк и апач не нужен, пока я не запустил им в двух идентичных виртуалках nginx+python+django/nginx+php+drupal в одной и тоже самое, но с апчем в другой. Визуально страницы из виртуалки с апачем генерились быстрее раза в два. А когда я туда же, над апачем поставил проксирующий нгинкс для отдачи статики и разграничений для параллельной загрузки, всё вообще залетало.
Каждую вещь надо использовать по назначению.
Мне тут тоже программеры долго рассказывали, как крут нгинк и апач не нужен, пока я не запустил им в двух идентичных виртуалках nginx+python+django/nginx+php+drupal в одной и тоже самое, но с апчем в другой. Визуально страницы из виртуалки с апачем генерились быстрее раза в два. А когда я туда же, над апачем поставил проксирующий нгинкс для отдачи статики и разграничений для параллельной загрузки, всё вообще залетало.
Каждую вещь надо использовать по назначению.
не путаем : ) а что значит "не чистый" ?
вообще не об бенчмарках и о видах хттп-серверов(про варниш же я не стал писать, ибо вот он как раз прокся) речь, ведь можно и на баше велоскрипт написать для отдачи http-контента
вообще не об бенчмарках и о видах хттп-серверов(про варниш же я не стал писать, ибо вот он как раз прокся) речь, ведь можно и на баше велоскрипт написать для отдачи http-контента
nginx хорошо отдаёт статику. Например, страница, сгенерированная с помощью apache+php - это уже статика. А когда его пытаются заставить самому генерить эти страницы, например, с помощью прикручивания к нему php через cgi - это уже костыль. Он для этого не предназначен и начинает при больших нагрузках или сложных движках выдавать феерические тормоза. Т.е. как таковым web-сервером в современном понимании nginx не является. Как я уже писал - это frontend для снижения нагрузки на apache и кеширования часто повторяющихся объектов для увеличения скорости отдачи сайта конечному пользователю.
А костыль можно на чём угодно написать. На perl'е, например, простейший web-сервер с использованием нескольких модулей со cpan пишется за полчаса. Но надо ли это? Для тестов и опытов иногда не помешает. Но в реальных условиях такой продукт нежизнеспособен.
А костыль можно на чём угодно написать. На perl'е, например, простейший web-сервер с использованием нескольких модулей со cpan пишется за полчаса. Но надо ли это? Для тестов и опытов иногда не помешает. Но в реальных условиях такой продукт нежизнеспособен.
страница, _сгенерированная_ с помощью apache+php(который собственно тоже может быть как cgi и как модуль, и как cgi он тоже безбожно тормозит, и с ним не работают всякие опкодеры) это динамика, ибо в следующий раз она опять будет генерироваться, и запрашиваться будет опять же у апача
а статика это js, css и прочий жыпег который отдается клиенту напрямую, минуя бэкэнды
а статика это js, css и прочий жыпег который отдается клиенту напрямую, минуя бэкэнды
А вот в том-то и фишка, что апач её генерирует, но для nginx это уже просто html-страница и он её отдаёт. Как будто бы один раз лежал на сервере файлик index.html, в другой раз лежит он же, но внутренности немного изменились. И nginx работает с ним, как со статической страницей. Он не знаю, что то, что ему отдаёт апач, каждый раз на лету собирается. И вот из этого всего он и достаёт наиболее повторяющиеся вещи, кеширует и пользователю отдаёт быстрее. То же самое касается и css. Например, многие движки генерируют css на лету так же, как html. И при проксировании через nginx, можно поймать момент, при котором html изменился, а css остался от "предыдущего" запроса, вытащенный их кеша. Ну или наоборот - новый css, при старом html. Этого, конечно, надо избегать и подстраивать nginx так, чтобы такого не возникает, но как пример, по-моему, вполне наглядно показывает принцип его работы.
Хм… А я вот читал, что nginx пристраивают к apache в качестве фронтенда потому, что apache жрёт больше памяти, когда что-то отдаёт пользователю, и поэтому выгоднее разделить процессы генерации и отдачи файла — первым занимается апач (гибкий, хорошо ладящий с cgi), вторым — nginx (который, как уже было сказано, хорошо отдаёт статику). Меня обманули?
и поэтому тоже, по сути вы про одну и ту же ситуацию написали - многопоточность
Ну, сейчас время у меня есть, постараюсь накатать в ближайшие дни. На самом деле штука классная. Я сам до сих пор фонарею от его возможностей. :)
Сколько людей, столько и мнений. Кому нужно, тот возьмет для себя урок из этого, а доказывать кто круче скрипты пишет, смешно да и только!
А велосипед, не велосипед это тоже смутное понятие - И велосипед не каждый сделает! да и его нужно уметь делать!
А велосипед, не велосипед это тоже смутное понятие - И велосипед не каждый сделает! да и его нужно уметь делать!
Да...это еще те волки! за то сами путевого ни чего сказать не могут....
Пусть некоторые считают, что сабж не нужен. IMHO, любой КАЧЕСТВЕННО написанный скрипт полезен для обучения. А если кто-то видит явные недостатки, объективно изложите их, и вместе мы сможем повысить качество скрипта. Это касается не только сабжа, но и многих других творений, которые выкладываются здесь.
Очень обидно. Люди совсем разучились общаться друг с другом. Вместо конструктивной критики - сплошное хамство. Даже на ЛОРе так себя не ведут. Те, кто пытается иронизировать и обратить всё в шутку: ребята, хам всё равно не поймёт, что вы шутите, а будет только продолжать хамить. Поэтому, нет смысла отвечать на хамство резкими шутками. Конечно, на модератор не может за всеми уследить, но те, кто принимает участие в дискуссии, не должны давать хаму возможность превратить всё в перебранку.
Очень обидно. Люди совсем разучились общаться друг с другом. Вместо конструктивной критики - сплошное хамство. Даже на ЛОРе так себя не ведут. Те, кто пытается иронизировать и обратить всё в шутку: ребята, хам всё равно не поймёт, что вы шутите, а будет только продолжать хамить. Поэтому, нет смысла отвечать на хамство резкими шутками. Конечно, на модератор не может за всеми уследить, но те, кто принимает участие в дискуссии, не должны давать хаму возможность превратить всё в перебранку.
сейчас еще и удалить лишнее не можем, по двум причинам
1 - не работает удалялка
2 - ниже по ветке хамства и разброда идёт конструктив, который тоже улетит при удаление вышестоящих каментов
пришлось немного отредактировать : )
1 - не работает удалялка
2 - ниже по ветке хамства и разброда идёт конструктив, который тоже улетит при удаление вышестоящих каментов
пришлось немного отредактировать : )
Зачётно получилось, особенно если помнить, что было раньше, и сравнить =)
Мы видим, что Вы умеете писать скрипты.
В любом случае спасибо.
Ну, и как было указано выше, бесполезно.
P.S>Без обид.
В любом случае спасибо.
Ну, и как было указано выше, бесполезно.
P.S>Без обид.
Люди!!!, камрад выкладывает методу: комментариев уйма, а плюсов нуль. Что за фигня, человек жеш старался!? Не "Опен Сурс", товарищи...
Чет меня поперло. Чет мне кажется что тру Опен Сурс это когда от каждого по возможностям. И каждый тогда достоин награды (хотя бы в в виде плюса). А может я и не прав... Я не знаю, но так мне кажется.
ты всегда даешь официанту на чай? даже если не понравилось обслуживание?
А в чем проблема! если тебе это бесполезно, тогда ты чего тут делаешь....лишь бы в комментариях пос**ть. На том же Welinux еще полно людей которым этот скрипт или идея пригодится, но они даже спасибо не скажут, да и плюс не каждый поставит!
На welinux почти не вычитают(читай минусуют). Как видите, Вы не правы.
вычитают(читай минусуют)
Не знаю как Вы =) а Мы (одминистрация) НВБН, я и Астрамак читаем ВИЛИНУКС
Сударь, Вы меня не поняли.
Я имел ввиду математические операции, такие как "вычитание", "сложение", "деление" etc.
И когда я сказал, что на welinux не вычитают, я имел ввиду, что это прекрасное сообщество не разбрасывается минусами без очень серьёзной причины.
Я имел ввиду математические операции, такие как "вычитание", "сложение", "деление" etc.
И когда я сказал, что на welinux не вычитают, я имел ввиду, что это прекрасное сообщество не разбрасывается минусами без очень серьёзной причины.
Ну тогда объясни мне эту серьезную причину за что автору поста минусов наставили?
Я вижу только одну! тут кто то себя через чур умным считает!
Я вижу только одну! тут кто то себя через чур умным считает!
А я не понимаю =) почему мои посты минусуют =) Это же мой чатик =))
Не знаю как с DNS, но если так резать рекламу , то после 100 записей начинает безбожно тормозить
А понос не унимался, через уши вытекал... %) как же высока сила инерции на вилинуксе..
А вообще, я и не говорю, что это супер полезно и нужно. Писался он большей частью just for fun
Вот теперь расслабься и получай удовольствие ^___^
Я не понял, а че с ТС случилось?..