SSH Telnet под Windows

Давно работаю под ShellGuard, но в последнее время стал искать замену (мало того что он платный и уже не поддерживаемый, дак еще и не работает с UTF-8). Перепробовал много telnet-ов, но остановился на проверенном и нормально работающем — PuTTY. Но вот есть у него довольно неприятная проблема. ShellGuard работает почти с теми же клавиами, что привычные Unix терминалы — Alt + F1(F2, … F12) — переключает на нужные открытые консоли, а PuTTY работает всегда с одной консолью и для новой надо заново запускать новый процесс, а переключаться между ними не удобно — Alt+Tab — обычное переключение в Windows.

Долго искал — можно ли как-то приблизиться к сервису, близкому ShellGuard, и нашел максимально хорошее решение Читать далее SSH Telnet под Windows

perl, utf8 и encode & decode термины

Полезно будет знать Perl программерам. Дело в том, что часто в документациях к perl (perldoc utf8) и модулям (например JSON) употреблаются такие термины, которые лично меня часто путали своим смыслом, а именно: encode to UTF-8, decode to UTF-8. Что подумает нормальный программер, услышав слово encode to? То, что что-то кодируется во что-то, а именно «encode to UTF-8» -> «кодирование в UTF-8». Я знаю, что perl хранит внутри себя строки UTF-8 со специальным флагом — если он установлен — строка UTF-8, если нет — бинарная. Поэтому, когда в доке я читал encode to UTF-8, я все время путался — думал, что говорят про установку этого флага. Оказалось, все в точности наоборот.

Правильно так: когда пишут encode to UTF-8, это значит, что внутри перла строка с UTF-8 данными остается как есть, но флаг UTF-8 убирается, и perl начинает вести себя со строкой так, как будто там бинарные (octet) байтовые данные (то есть посути, строка внутри перла перестает быть UTF8, хотя слово «encode» несет в себе другой смысл). И наоборот — decode to UTF-8 -> UTF8 флаг ставится (то есть для perl-а строка становится UTF8).

P.S. В Perl есть такая функция — encode (модуль Encode). Смысл ее в том, чтобы перевести строку из внутреннего содержания на perl (которое всегда UTF-8 внутри, т.е. Unicode символы) в байтовую последовательность, которая бы отражала ту кодировку, которую ей указали (то есть раз байтовая — значит всегда utf8 флаг в результате отсутсвует). Если мы делаем $result = encode(‘utf-8’, $string), то результат как раз будет в том, что флаг utf8 будет просто снят для $result и в реальности никакого переводирования не будет (то есть побайтово внутри perl-а $string & $result будут содержать одни и те же байты, только $string еще будет иметь взведенный utf8 флаг). И это как раз вписывается в те понятия, которые я описал ранее. Для decode и байтового UTF8 всё обратно — флаг utf8 просто ставится в $result.

Вот такая абракодабра… Будьте внимательны!

Немного о супер направлениях в Web на Perl

Немогу не поделиться своими выводами об изучении нескольких новых технологий в Perl и в Web программировании. Немного предистории.

Я сам программирую динамические веб сайты (CGI) только на Perl. Никогда не использовал PHP. Это не только потому, что я фанат Perl, но и дань эффективности — под Perl много модулей, много возможностей, и при грамотном подходе сайты на Perl будут работать быстрее PHP — ведь Perl код после компиляции хранится в памяти в виде байт кода (типа «Пи кода» кода в Pascal). А если знаешь Perl, то и разработка может идти гораздо быстрее. Читать далее Немного о супер направлениях в Web на Perl

DNS — как сделать обратную запись (PTR), если зона не ваша

Бывают моменты, когда вам надо сделать корректное резрешение DNS из IP ареса в доменное имя для IP, который принадлежит провайдеру (и соответственно, он управляет DNS-ом обратной зоны), но сервер на этом IP ваш. Конечно, без его участия сделать это нельзя, но можно попросить провайдера прописать следующие настройки в DNS, чтобы вы могли в любое время на своём DNS менять имя записи PTR, а не просить сделать это каждый раз своего провайдера.

Здесь на английском официальная инструкция, как это сделать. Основной смысл — провайдер ставит записи CNAME вместо PTR в обратной зоне (IN-ADDR.ARPA), а вы уже меняете на своем DNS настройки. В примере дан более развернутый пример, когда провайдер описывает записи для целой подзоны, например сетки /27 (32 машины) и указывает NS записи вашего DNS. Можно сделать проще для одного IP — провайдер ставит на вас CNAME вместо PTR (но не NS), CNAME указывает на ваш доменный адрес (на адрес под вашим доменом), для которого вы уже описываете PTR запись. Тем самым, если захотели другое имя для IP, меняете его у себя в DNS и телемаркет…

Если не знаете, зачем это, то знайте: обратное разрешение нужно для более правильной работы e-mail (если у вас есть почтовый сервер — для его IP это лучше сделать 😉 ). В противном случае, письма, оправленные через ваш SMTP, могут «отвегаться» большинством почтовых релеев (relay).

Народные мудрости :)

Согласно народной примете, в новый дом первым нужно впускать интернет-кабель. И где он ляжет — там ставьте кровать. И стол. И комп. И жрачку.

Женятся и выходят замуж зайки, котики и солнышки, а разводятся козлы, суки и олени.