Про архиламеров Хуйла

Некое продолжение темы, развитой здесь
Отдел «К» на самом деле такие придурки, что я охуел. Склевали подставное лицо, как голуби семечки из рук гопника.
А технология-то проще, чем музыка у группы «Технология»:
1. Покупаем старый, относительно известный хотя бы в узких кругах блог, желательно вместе со всеми наработанными текстами и связанными ресурсами.
2. Нанимаем старого хозяина контент-менеджером на недолгий срок.
3. Изучаем его литературный стиль, учимся дублировать.
4. Разрываем контракт.
5. Устраиваем скандал, ведущий к «деанону» желательно в таких же узких кругах.
6. Инструктируем чела, как если что говорить с ментами.
7. Устраиваем в блоге скандал, который заинтересует ментов.
8. […] на самом деле, тут могут быть всякие дополнительные плюхи, типа установки на компьютер первоначального хозяина публичного прокси за дополнительные деньги, или даже проплата интервью региональным изданиям
9. Менты наябываются, и даже суда не получается.
10. ФАНФАРЫ! ЗАНАВЕС!

Это такой общий план проекта по наебыванию деанонимизаторов в сети, на деле, чтоб корректно все сделать, надо прикладывать разум и руки, без анализа конкретики и подстройки под ситуацию оно вряд-ли сработает, если вы такой же ламер, как сотрудники отдела «К». Но, если все продумать, то выполнить сможет даже школьник.

Как-то так.
Удачи!

Конфиги pptp для vpnbook.com

Кое-кто просил pptp-конфиги для vpnbook.com
Получите, распишитесь.

На Pastebin:

Общий конфиг options.pptp
Куда класть, понятно из конфигов пиров (помещаются в директорию /etc/ppp/peers)
vpnbook-ca1
vpnbook-de233
vpnbook-euro214
vpnbook-euro217
vpnbook-us1
vpnbook-us2

Скачать одним архивом с mega.nz

На euro-214 и 217 открыты все порты, на остальных доступен только HTTP/HTTPS, за торренты (ну так написано) могут типа по голове настучать, в смысле отрубить, но хз, я в принудительном режиме качал 100 метров, не отрубили.
217 на мой взгляд довольно падучий, 214 более стабильный, но чет последнее время тоже периодически разрывает коннект.
Сам пользуюсь в основном канадским, ну нравится мне, что сервер предоставляет моя любимая контора ZOG ЦРУ ФСБ СБУ CDC.

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

Решение проблемы отображения кириллицы в lynx

Собственно, некое продолжение темы из предыдущей заметки. Мне и потребовались русские буквы в консоли для того, чтобы вбивать их в строку поиска гугеля из консольного браузера lynx. Так уж получилось, что был недавно в ситуации, где окромя консоли ничего нет, а почитать новости или Мракопедию хотелось. Или в гугель что-нибудь вбить.
Но lynx с настройками по умолчанию подложил мне свинью, точнее маленького поросеночка. Русскоязычные сайты отображались translitom.

Оказалось, что лечится довольно просто (во всяком случае у меня)
1. Запускаем lynx на каком-нибудь сайте с русским текстом. Например lynx tolik-punkoff.com
2. Видим translit, но смело нажимаем кнопку «o» (латинская буква «о») и попадаем в окно с настройками браузера.
3. Пролистываем настройки (клавишами вверх/вниз) и становимся на пункт Display character set в разделе Display and Character Set, и видим там какую-нибудь фигню вроде Western (cp850)
4. Поднимаемся выше на пункт Use locale-based character set, жмем Enter, в выпадающем списке выбираем On, жмем Enter
5. Поднимаемся вверх до пункта сохранения изменений (Accept Changes) и жмем на нем Enter

Lynx сама определит кодировку, которую использует терминал, сохранит изменения на текущую сессию и перекинет нас обратно на сайт.

Если все получилось, значит, терминал русифицирован, и lynx определил его кодировку

Если нет — скорее всего, косяк где-то в русификации консоли.

Осталось сохранить это на веки вечные. 🙂

Еще раз нажимаем кнопку «o», спускаемся на пункт Save options to disk: [ ], устанавливаем чекбокс нажатием на нем Enter и сохраняем изменения, как описывалось выше.
Можно ради интереса спуститься к пункту Display character set и посмотреть, какую кодировку определил браузер. У меня, как и ожидалось, оказалась UNICODE (UTF-8)

Маленькая заметка по русификации консоли в Slackware

Понадобились мне русские буквы в чистой консоли. Решилось все на удивление просто.

I. Подключение консольного шрифта, поддерживающего кириллицу

Делается в файле /etc/rc.d/rc.font

Его надо изменить так, чтобы подгружался нужный шрифт. Мне повезло, и шрифт, устраивающий меня, подгружался из коробки.
Но если шрифт не устраивает, то идем в /usr/share/kbd/consolefonts и смотрим, какие там есть шрифты, соответственно изменяя /etc/rc.d/rc.font по своему вкусу.
Например, шрифты у меня были такие:
LatArCyrHeb-19.psfu.gz
LatArCyrHeb-16.psfu.gz
LatArCyrHeb-14.psfu.gz
LatArCyrHeb-16+.psfu.gz
LatArCyrHeb-08.psfu.gz
А сам rc.font выглядел так:
#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/share/kbd/consolefonts.
#
#setfont -v
setfont -v LatArCyrHeb-16.psfu.gz

Вроде все интуитивно понятно.

II. Настройка переключения раскладки клавиатуры.

В файл /etc/rc.d/rc.keymap дописываем (или правим соответствующую по виду) строчку:
/usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ruwin_ctrl-UTF-8.map.gz

Где самое интересное — файл ruwin_ctrl-UTF-8.map.gz В этом файле содержится описание раскладки клавиатуры и способа переключения.

Цитата из источника [2]:
Стоит прежде всего обратить внимание на ruwin под разные кодировки и варианты переключения:

$ (cd /usr/share/kbd/keymaps/i386/qwerty/; ls -1 ru*)
ru1.map.gz
ru2.map.gz
ru3.map.gz
ru4.map.gz
ru-cp1251.map.gz
ru.map.gz
ru-ms.map.gz
ruwin_alt-CP1251.map.gz
ruwin_alt-KOI8-R.map.gz
ruwin_alt-UTF-8.map.gz
ruwin_cplk-CP1251.map.gz
ruwin_cplk-KOI8-R.map.gz
ruwin_cplk-UTF-8.map.gz
ruwin_ctrl-CP1251.map.gz
ruwin_ctrl-KOI8-R.map.gz
ruwin_ctrl-UTF-8.map.gz
ruwin_ct_sh-CP1251.map.gz
ruwin_ct_sh-KOI8-R.map.gz
ruwin_ct_sh-UTF-8.map.gz
ru_win.map.gz
ru-yawerty.map.gz
Конец цитаты

На терминал, запускающийся из X, эти настройки не влияют, как и на PuTTY.
В PuTTY раскладка в консоли переключается аналогично раскладке во всем остальном Windows, а в иксах — соответственно настройкам иксов. Хотя на всякий случай я выбрал переключение левым Ctrl, которое отличается от моего виндового Ctrl+Shift, чисто на всякий случай, мало ли в PuTTY или еще где что поменяется, а я потом забуду где что менял.

III. Используемые источники.

1. Русификация Slackware 12
2. Русификация консоли в Slackware 14

Скрипт waiter, скрашиваем скучное ожидание в своих скриптах. Еще раз про обратный отсчет на BASH

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

Но иногда лень и где некритично можно «просто подождать», как пелось у классика. А чтобы юзеру не было скучно, и он не думал, что наш скрипт висит, можно подменить обычный sleep небольшим скриптом, показывающим обратный отсчет, да еще и с вращающейся псевдографической фенечкой.
Я уже когда-то поднимал этот вопрос, посему с ноля все делать не придется, нужно лишь чуть доработать имеющийся скрипт.

Итак, скрипту будут передаваться два параметра. Первый обязательный, содержащий время ожидания, и второй дополнительный — сообщение, выводимое в терминал. Если второй параметр не задан, то по умолчанию будет выдано сообщение, заранее определенное во внутренней переменной скрипта.
Определяем переменные (сообщение по умолчанию, время ожидания, счетчик текущего элемента в массиве псевдографической «мельницы» и сам массив элементов):
MESSAGE="Wait"
WTIMEOUT=0
ITEM_ARR=0 #current item counter
CH_S[0]='-' #pseudographic items
CH_S[1]='/'
CH_S[2]='|'
CH_S[3]='\'

Задаем функцию вызова краткой справки:
print_help()
{
    echo "use waiter <time> [message]"
    echo "<time> - wait time"
    echo "[message] - optional text message"
}
Проверяем первый параметр скрипта, на предмет того, нужно ли вывести справку и завершить работу: #parameters check
if [ -z $1 ];then #if no parameters
    print_help
    exit 2
fi

#if help request
if [ $1 = "-h" ];then
    print_help
    exit 2
fi

if [ $1 = "--help" ];then
    print_help
    exit 2
fi
Проверяем первый параметр скрипта на соответствие его числовому значению (подробнее описано здесь):
if (echo $1 | grep -E -q "^?[0-9]+$");then
    WTIMEOUT=$1
else
    echo "Not a number in first parameter <time>"
    exit 1
fi
И второй параметр. Если он не пустой, присваиваем его значение переменной, содержащей сообщение:
if [ -n "$2" ];then
    MESSAGE=$2
fi

Переходим к основной части скрипта:
Выводим сообщение для пользователя и сохраняем позицию курсора:
echo -n $MESSAGE" ("$WTIMEOUT" secounds): "
tput sc #save cursor position

Ключ -n в команде echo означает, что следующее сообщение будет печататься на той же строке, команда echo не совершит перевод курсора на следующую строку.

while [ $WTIMEOUT -ge 0 ]; do
    
    #print timeout and current pseudographic char
    printf '%3s %s' $WTIMEOUT ${CH_S[ITEM_ARR]}
    tput rc #restore cursor position
    sleep 1
    
    #decrease timeout and increase current item ctr.
    let "WTIMEOUT=WTIMEOUT-1"
    let "ITEM_ARR=ITEM_ARR+1"
    
    if [ $ITEM_ARR -eq 4 ];then 
	#if items ctr > number of array items
	#starting with 0 item
	let "ITEM_ARR=0"
    fi
        
done

В рабочем цикле сначала выводим оставшееся время ожидания и текущий символ из массива псевдографических элементов, шаблон %3s команды printf означает, что если выводимая строка меньше 3 символов, недостающие с начала строки знаки заменяются пробелами, %s, что просто выводим строку, как она есть. Далее указываются 2 переменных — оставшееся время ожидания и символ из массива.
Следующим шагом восстанавливаем позицию курсора (и все, что будет напечатано в следующей итерации цикла затрет предыдущие значения).
Далее ждем одну секунду и уменьшаем оставшееся время на 1, а счетчик текущего элемента массива увеличиваем и проверяем, не больше ли он, чем последний индекс в массиве. Если больше — присваиваем счетчику значение 0, в следующем цикле опять будет выведен нулевой элемент.
В завершении печатаем символ перехода на новую строку, чтобы следующие сообщения в следующих или в вызывающих этот скрипт скриптах начинались с новой строки

#next message starting with new string
printf '\n'

Скрипт на PasteBin
Скачать с mega.nz

Как скопировать текст из другого файла в редакторе mc (mcedit)

Бывает mcedit капризничает и при нажатии [Ctrl]-[Ins] не помещает данные в cooledit.clip хотя с правами все в порядке и файл есть. Что делать в этом случае, открываем на правку файл, выделяем нужный текст [F3], жмем [F9] «файл» — «копировать в файл» или [Ctrl]-[f], открывается окно и путь до cooledit.clip жмем «далее», теперь содержимое выделенного текста записано в cooledit.clip. Чтобы вставить, открываем другой файл, жмем [F9] «файл» — «Вставить файл» или [F15] (но таких клавиатур давно нет ^_^).

Мне не пришлось шаманить с файлом буфера редактора mc, но вот [Shift]+[Ins] перехватывает putty, так что оставлю от склероза.

Остальное здесь

BASH: Как проверить, число или строка в переменной.

Переменные в BASH, как известно, типа не имеют (и как же это иной раз бесит). А проверить, что в переменной — число или строка иногда надо. На помощь придет grep и регулярные выражения.

Команда grep -E -q regexp проверит, соответствует ли переданная grep строка, регулярному выражению regexp
Ключ -E укажет команде grep, что образец есть полное регулярное выражение (см. подробности здесь )
Ключ -q укажет, что в стандартный поток ввода-вывода отправятся соответствующие образцу строки, и если хоть одна из входных строк соответствует образцу, то код завершения команды будет 0, иначе 1.
Для простого примера больше одной строки и не надо.

Осталось составить регулярные выражения для нашего случая:
Целое положительное число: ^?[0-9]+$
Целое положительное, либо отрицательное число: ^-?[0-9]+$

Для примера проверим первый параметр скрипта, задаваемый из командной строки
1. положительные целые числа

#!/bin/bash

if (echo "$1" | grep -E -q "^?[0-9]+$"); then
    echo "Number"
else
    echo "Not Number"
fi

На pastebin

2. положительные и отрицательные целые числа

#!/bin/bash

if (echo "$1" | grep -E -q "^-?[0-9]+$"); then
    echo "Number"
else
    echo "Not Number"
fi

На pastebin

Отображение шорткодов в блоге WordPress, а точнее их синтаксиса, и как вредно не читать мануалы

ДОЧИТАЙТЕ ДО КОНЦА, КАК НЕЗНАНИЕ ИЛИ ПРЕНЕБРЕЖЕНИЕ К МАНУАЛАМ, ЗАСТАВЛЯЕТ ИЗОБРЕТАТЬ ВЕЛОСИПЕДЫ
Столкнулся я с проблемой, а как отобразить в посте не результат работы шорткода, а его вид в редакторе, т.е. его синтаксис. Для шорткодов, в том же самом блоге не используемых — все нормально. Но для тех шорткодов, которые в блоге используешь — возникает понятная проблема. Вставляешь шорткод в блог, и движок на место шорткода вставляет результат функции, его обрабатывающий. А задача стоит отобразить написание шорткода.
Отобразить синтаксис html-тегов проще, достаточно заменить угловые скобки «<» и «>» на эскейп-последовательности html. Для символов «[» и «]», заменяющих «<» и «>» для шорткода, я не нашел эксейп-последовательностей.

Решение: шорткод, для отображения синтаксиса шорткода.

Звучит так же просто, как и делается.
Вставляем следующий php-код куда удобно, хоть в functions.php, хоть в отдельный плагин.
Я сделал отдельный плагин, но можно и в файл функций, код небольшой:

<?php
/**
 * Plugin Name: shortcodes display
 */

function display_shortcode($atts, $content=null)
{			
	$ret=$content;
	return $ret;
}

add_shortcode ('shortcode','display_shortcode');

?>

ВНИМАНИЕ! Переменную $atts нужно добавить обязательно, хотя она фактически не используется, т.к. у данного шорткода параметров нет, но так уж устроен движок WordPress, что без наличия первого параметра не обработается и параметр $content

Как использовать.

Вставляете шорткод, синтаксис которого нужно отобразить, между открывающим и закрывающим псевдотегом shortcode.
Единственный минус — не работает для самих тегов для отображения синтаксиса шорткодов, посему ниже картинка с примером:

Результат работы:

И как я оказался дураком, надо иногда читать мануалы

Все делается гораздо проще, код шорткода заключается в дублирующиеся квадратные скобки, например [ljr user="hex_laden"], т.е. сам шорткод надо заключить не в одни скобки «[» и «]», а в дублирующие «[[» и «]]»

Благодарю злого анонимуса, который хотел постебаться, и случайно помог, хехе.

Плагин, отображающий пользователей ЖЖ/LJR в блоге WordPress в стиле ЖЖ/ЛЖР

Т.е. в виде ссылки с «головастиком», как в тестовом посте

Плюс добавим возможность открывать страницу пользователя ЖЖ/LJR в отдельном окне (вкладке)

Как работает стандартная ссылка на блог в ЖЖ/ЛЖР

При добавлении псевдотега <ljr user="username"> или <lj user="username">, данный псевдотег заменяется на ссылку с дополнительной картинкой-головастиком перед ней, клик по картинке ведет к открытию страницы userinfo пользователя ЖЖ и LJR, а клик по имени пользователя — к открытию главной страницы пользователя блогосервиса. Если вставить в пост на LJR псевдотег <lj user="username">, то к имени пользователя будет добавлена дополнительная строка — username@lj, указывающая, что дневник пользователя находится в Живом Журнале.

Что делает плагин

— обрабатывает шорткоды вида [ljr user="username"] или [lj user="username"],
— вставляет на их место в посте «головастика», пользователя того или иного сервиса, дописывая в конце имени префикс @lj или @ljr, и проставляет все нужные ссылки.
— Если указан параметр blank=1, например [ljr user="hex_laden" blank=1], то ссылки на userinfo (при клике по «головастику») или ссылка на главную страницу блога, откроются в новом окне/вкладке.

Подготовка к созданию плагина.

1. В wp-content/plugins, создаем отдельный каталог lj-ljr-users, в нем подкаталог img, и загружаем туда графические файлы «головастиков» http://lj.rossia.org/img/userinfo.gif и http://lj.rossia.org/img/userinfo-lj.gif
2. Создаем файл lj-ljr-users.php в каталоге wp-content/plugins/lj-ljr-users и вставляем в него нижеследующий код.

Код плагина

Код плагина
Небольшие минусы

— Css встроено сразу в плагин и заточено под тему оформления, которую юзаю я, по-хорошему, надо стилевые настройки из плагина вымести, и чтоб они прописывались в styles.css
— не определяется, пользователь это или сообщество. Но с другой стороны, это чрезмерно бы усложнило код и стабильность, вызвав необходимость обращаться к серверам блогосервисов (и обрабатывать случаи, если сервера «лежат»).
— ну может еще какие мелкие недочеты, кому надо — берите и сами исправляйте.

Скачать.

PHP-код на pastebin
Готовый плагин с mega.nz

Пидронимус лютует

Заглянул в логи — 25 неудачных попыток подобрать пароль и логин к админке.

Смешно, логин, который нигде не отображается, 35+ символьный пароль от админки, и что самое смешное — ежедневный бэкап постов, высылаемый на e-mail (специально для этого заведенный, который никто не знает).
Про отправку бэкапов на мыло сделаю отдельный пост, таких плагинов нет, ЕМНИС, полезно будет.

Отображение пользователей или сообществ livejournal/ljr в стиле ЖЖ/ЛЖР

Правда мы не стали заморачиваться, сообщество это или пользователь, поэтому иконка и для того, и для другого одинакова, например:
Пользователи:
[info]rutopist@lj
[info]tiphareth@ljr
Сообщества:
[info]potsreotizm@lj
[info]durdom@ljr

Наш шорткод имеет замечательную возможность — открывать нужного юзера/сообщество в новой вкладке, например:
[info]ketmar@ljr
[info]veniamin1@lj
[info]cat@ljr
[info]brigada_hella@lj

Отображение опросов из LJR (ЛЖР, «Тифаретник», LJ.ROSSIA.ORG) и, возможно, ЖЖ (livejournal) в блоге WordPress

1. Преамбула

Заметка посвящается тем, кто хочет перенести свой блог из ЖЖ, ЛЖР или другого блогосервиса, работающего на движке ЖЖ (LJ) в блог на WordPress

2. Суть

В ЖЖ и сайтах, работающих на движке ЖЖ существует определенный тип поста — опрос. И переносящие свой блог пользователи сталкиваются с невозможностью стандартными средствами перенести опрос из ЖЖ или (в моем примере LJR) в свой блог на WordPress.

3. Стратегия решения проблемы, плюсы и минусы.

А мы и не будем переносить результаты опроса из (в нашем случае) LJR, а будем отображать сам опрос, беря его с сайта.
+ Результаты опроса будут отображаться онлайн в нашем блоге, так же, как они будут и в блоге LJR
+ Пользователи сайта могут проголосовать в опросе, только зарегистрировавшись на старом сайте. Что плюс, если вы просто хотите сохранить результаты опроса на новом сайте/не хотите суммировать результаты из двух опросов.
— При отображении поста необходима связь с сайтом, если ее не будет или опрос будет удален, то это приведет к возникновению ошибки
— В конкретном примере я использовал довольно старую версию движка ЖЖ, которая применяется на сайте LJ.ROSSIA.ORG, посему вам потребуется подкорректировать код, если вы переносите блог с ЖЖ или другого сайта, работающего на том же движке.

4. Описание алгоритма.

1. Получить ID опроса (пользователь должен задать его вручную)
2. Выделить из страницы опроса его результаты и ссылки на участие в опросе.
3. Встроить эту информацию в пост WordPress и отобразить ее.

5. Тестовый опрос.

Создан здесь: http://lj.rossia.org/users/hex_laden/348192.html
ID: 1307
Страница опроса: http://lj.rossia.org/poll/?id=1307&mode=results

6. Что понадобится

Внешний html-парсер, я использовал этот готовый simple_html_dom.php
7. Готовый код.

Сначала создаем файл с функцией, непосредственно занимающейся парсингом страницы опроса:
Read more…
И создаем главный файл плагина с функцией обработки шорткода, который, будучи вставлен в пост отобразит наш опрос:

Read more…
Для того, чтобы вставить в свой блог на WordPress опрос с LJ.ROSSIA.ORG, останется добавить в пост следующий шорткод:
[ljrpoll id="<poll_id>"]
Где <poll_id> идентификатор опроса, например 1307

Тестовый пост с отображенным опросом здесь:
http://tolik-punkoff.com/2016/07/26/opros-s-lj-rossia-org-otobrazhaemyj-v-wordpress/

Код плагина доступен на PasteBin:
getpoll.php
Основной файл плагина
Или можно скачать архив с плагином с mega.nz
Папку из архива надо поместить в директорию wp-content/plugins вашего сайта, после чего зайти в консоль на страницу плагинов (или обновить ее) и активировать плагин LJR-pollDisplay

Опрос с LJ.ROSSIA.ORG, отображаемый в WordPress


Warning: file_get_contents(): stream does not support seeking in /home/punko102/domains/tolik-punkoff.com/public_html/wp-content/plugins/ljr-poll/simple_html_dom.php on line 75

Warning: file_get_contents(): Failed to seek to position -1 in the stream in /home/punko102/domains/tolik-punkoff.com/public_html/wp-content/plugins/ljr-poll/simple_html_dom.php on line 75

Позже напишу, как я такой финт ушами сделал (ну не совсем я, финны с китайцами, точнее с камбоджийцами даже, я только идею подал и над процессом руками водил, то бишь советовал):
ERROR: CONNECTION ERROR [http://lj.rossia.org/poll/?id=1307&mode=results]

Ящеръ

Просматривая старые записи нашел еще Панкарем опубликованного Ингерманландского Ящера (после разгрома оным Московии, по всей вероятности XD)

Скрипт пакетного переименования файлов

Опять же, с графическим интерфейсом на GTK. Тестировался на Puppy Slacko и на «большой» Slackware 12 версии:



Мопед, опять же, не мой.
Что умеет:
0. Последовательно пронумеровать все файлы в директории.
1. Найти префикс, например вида SCNJ-число, как на цифровых фотоаппаратах, и переименовать во что-то заданное пользователем (например kotik-число).
2. Сохранить переименованные файлы в другом каталоге.
3. Найти некоторую последовательность символов в имени файла и заменить их на другую (если другая последовательность не введена, то найденная последовательность будет удалена из имени файла)
4. Удалять из имени файла специальные символы и пробелы.
5. Заменять пробелы на знак подчеркивания (_).
6. Преобразовывать символы в имени и расширении файла в нижний регистр.
7. Транслителировать имена файлов.

Скрипт на PasteBin
Скачать с mega.nz

Скрипты, делающие скриншоты с видео

С графическим интерфейсом.
Сразу говорю, мопеды не мои, а хороший знакомый кодер к тем скриптам только что интерфейсы и дорисовал. Работает под GTK 3 в любых графических средах, где есть соответствующие библиотеки:
Вариант #1: делает несколько файлов со скриншотами. Вариант #2: делает несколько скриншотов (сколько задано) в одном графическом файле.




Скрипт #1 на PasteBin
Скрипт #2 на PasteBin

Скачать скрипт #1 на MEGA.NZ
Скачать скрипт #2 на MEGA.NZ

Тестовое стихотворение

Шли мы такие шли, и тут, хуяк,
Валяется математический знак <
Ну мы дальше пошли, второй нашли >
Рядом валялись кавычки «и» прочие ‘метки’ #;%^:?*().
Видать, кто-то проебал не =ную *разметку*/!

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/346416.html
Прокомментировать заметку можно по ссылке выше.