Пишу про заинтересовавшие сервисы, блоги, твиттеры, а также собственные идеи и задумки.
2 заметки с тегом

кодинг

mIRC-скриптинг. Часть 1

1 июня 2012, 9:54

К лету решил написать парочку-троечку статей о том, как же делать скрипты в mIRC. Точнее, как их делаю я. Для некоторых юзеров GS это может быть немного полезным. Для тех, кто не знает, IRC — это своеобразный протокол чата, mIRC — название программы-клиента для него, в котором можно писать собственные скрипты на его собственном же языке.

Начну немного нелогично: вместо того, чтоб описывать начало, я пока опишу несколько техник, которыми пользуюсь я для решения определённых задач.

Алиасы форматирования

Специфика моих скриптов такова, что требуется выравнивать текст на определённой длине — слева, справа или по центру. Некоторые клиенты не поддерживают наличие нескольких пробелов, идущих подряд, потому роль выравнивателя выполняют точки цвета фона текста. В каждом скрипте я делаю 3 алиаса: $leftal (left alignment), $central (не владимирский, central alignment), $rightal.

alias leftal {
 set %script_dot
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dot $str(...,33)
  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))
 }
 return  $+ $3 $+ , $+ $4 $+ $1 $+  $+ $4 $+ , $+ $4 $+ %script_dot
 unset %script_dot
}

alias central {
 set %script_dot1
 set %script_dot2
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dots $str(...,33)
  set %script_dot1 $left(%script_dots, $calc(($2 - $len($strip($1))) / 2))
  set %script_dot2 $left(%script_dots, $calc($2 - $len($strip($1)) - $len(%script_dot1)))
 }
 return  $+ $4 $+ , $+ $4 $+ %script_dot2 $+  $+ $3 $+ , $+ $4 $+ $1 $+  $+ $4 $+ , $+ $4 $+ %script_dot1
 unset %script_dot*
}

alias rightal {
 set %script_dot
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dot $str(...,33)
  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))
 }
 return  $+ $4 $+ , $+ $4 $+ %script_dot $+  $+ $3 $+ , $+ $4 $+ $1
 unset %script_dot
}

Работают они одинаково:

$leftal(text,length,color,backcolor)

Высчитывается длина текста без цветов, от строки точке отсекается часть до итоговой длины и добавляется к строке в зависимости от алиаса: к началу, концу, либо делится на половины и прибавляется и туда, и туда, если надо по центру.

Здесь важно проверять, не является ли длина текста больше, чем указано в алиасе: если проигнорировать, то к тексту будет прибавлена вся строка точек целиком, а это очень некрасиво.

Массивы

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

set %token_string первый второй третий четвёртый
set %token_string первый|второй|третий|четвёртый

Это обычные строки, но к ним можно использовать функции токенов с обозначением разделителя. В первом случае разделителем считается пробел, во втором — вертикальная черта ($chr(124)). Я привык использовать именно вторую, чтоб спокойно использовать пробел именно в его настоящем назначении, разделять слова.
Для токенов есть куча функций, о которых вы почитаете в мануале. У каждого токена есть свой номер, начиная с первого. Именно это можно считать индексом массива.

N-мерные массивы

По аналогии с предыдущим, N-мерные массивы можно заменить нужным числом строк токенов.

set %name Василий Иван Дмитрий Владимир Николай
set %last_name Медведев Пупкин Ургант Винокур Срулёв

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

Перемешивание токенов

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

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

IRC   кодинг

Раскладка Бирмана

23 октября 2009, 12:02

Как-то начитавшись «Ководства» я решил для себя почаще использовать разные типографские символы вроде длинного тире, «ёлочек», знака копирайта и т. п. Это необычно, интересно, красиво.

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

Суть в том, что теперь не обязательно зажимать альт и вспоминать коды символов, набивая их на нумпаде (хотя я выучил, что «—» — это 0151, ёлочки — 0171 и 0187, © — 0169, ™ — 0153 ), достаточно запомнить всего одну клавишу для каждого символа. При том теперь можно легче вводить знаки евро, фунтов, параграфа и многие другие, на сайте всё описано.

Дело за малым, освежить в памяти школьные уроки русского и начать применять все знаки в нужных местах (а то больно люблю — злоупотреблять тире и многоточием...).

Насколько полезна такая раскладка?

дизайн   кодинг   лайфхаки