вторник, 14 августа 2012 г.

Punycode

Библиотек для конвертирования в Punycode много. В общем случае оно называется IDN или IDNA, иногда Punycode.

Python
Встроенными средствами с 2.4:
>>> ru = "ДОМЕНЫ.РУ"
>>> u = unicode(ru, "koi8-r") # Из koi8 в unicode...
>>> u.encode("idna") #... и перекодируем
'xn--d1acufc5f.xn--p1ag'

Perl
Тут несколько библиотек, все работают по разному...
Net::IDN::Encode
URI::UTF8::Punycode
IDNA::Punycode (DEPRECATED)
Convert::RACE
Net::IDN::Nameprep
Net::LibIDN (бинды к libidn)

php
http://pear.speedpartner.de/,
http://fastserv.name.net/open_source/php/punycode/

C
idnkit, libidn

линки
http://s3blog.org/konvertacija-domena-v-zone-rf-v-punycode.html
http://www.rlnic.ru/technology/punycode.pl
http://www.koscheev.ru/articles/perl/?n=38

четверг, 12 апреля 2012 г.

perl

Входные аргументы
$ARGV[0]

$# оператор получения максимального индекса массива
if ($#ARGV<0) ... //нет аргументов

суббота, 7 апреля 2012 г.

Проверяем права

вторник, 13 декабря 2011 г.

Java development 2.0:
Часть 1. Вторая волна разработки Java-приложений: «Облачное» хранилище средствами Amazon SimpleDB
Часть 2. Вторая волна разработки Java-приложений: «Облачное» хранилище средствами Amazon SimpleDB
http://www.ibm.com/developerworks/ru/library/j-javadev2-9/index.html?ca=dre-
http://www.ibm.com/developerworks/ru/library/j-javadev2-10/index.html?ca=dre-

понедельник, 28 ноября 2011 г.

3 варианта подключения файла в перле

На примере сапы
my $sape_id = 'aaaaaa';
1) require sprintf('%s/%s/SAPE.pm', $ENV{'DOCUMENT_ROOT'}, $sape_id);
2) require "$ENV{DOCUMENT_ROOT}/${sape_id}/SAPE.pm";
3) "$ENV{DOCUMENT_ROOT}/aaaaaaa/SAPE.pm" =~ /^(.+)$/; require $1;

Как мне кажется, 2 метод оптимальный. Вопрос, как там со всякими null-byte уязвимостями.

среда, 23 ноября 2011 г.

Особенности подключения модулей и сообщений об ошибках

Переносили сайт.
Проблема возникла с TrustLink:

/var/www/site/htroot/ffffff at (eval 12) line 13.
{
{
        'ffffff';

        push @INC, "$ENV{DOCUMENT_ROOT}/$o->{TRUSTLINK_USER}";
->      eval("use TrustlinkClient;") or die $!;
        my $trustlink = new TrustlinkClient($o);
        undef($o);
#       use Data::Dumper;
#       print '<pre>',Dumper($trustlink),'</pre>';

        print $trustlink->build_links();
}

Права в порядке. Добавили перед евалом
warn join ("\n", @INC);
Вывод нормальный, аномалий нет, путь к нужному модулю есть.
Вставили вместо евала прямое подключение
require "$ENV{DOCUMENT_ROOT}/ffffff/TrustlinkClient.pm";
Оказалось, он не модуль не видит, а в модуле ошибка - нет библиотеки URI. Проблема была решена установкой libwww-perl
Так из-за абсолютно невменяемого показа ошибок диагностика заняла 3 часа.