From: |
Eugene Grosbein grosbein.net |
07 May 2020 05:56 +0300 |
To: |
Gennadij Pastuhov 2:5036/26 |
|
Subject: |
apache utf8 uri escaping?
|
06 мая 2020, среда, в 23:21 NOVT, Gennadij Pastuhov написал(а):
EG>> http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
EG>> Pattern is a perl compatible regular expression. On the first
EG>> RewriteRule it is applied to the (%-decoded) URL-path of the request;
EG>> subsequent patterns are applied to the output of the last matched
EG>> RewriteRule.
EG>> Ключевое слово %-decoded. То есть матчить надо уже декодированную
EG>> строку. Если же у тебя реально матчятся %-кодированные данные, значит
EG>> твои ссылки некорректно дважды %-кодируются при генерации.
GP> Я не очень большой спец по апачу, не очень понял ответ. То, что
RewriteRule
GP> применяется к %-decoded, означает, что сначала строка из директивы
декодируется,
GP> а потом к ней применяется правило? Или что правило уже должно быть
записано в
GP> декодированном виде?
Второе. Прежде чем mod_rewrite получит строку на обработку, она декодируется.
Eugene
--
Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения
с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что
жизнь меняется необычайно быстро.
From: |
Eugene Grosbein grosbein.net |
25 Apr 2020 23:40 +0300 |
To: |
Gennadij Pastuhov 2:5036/26 |
|
Subject: |
Что за фигня?
|
25 апр. 2020, суббота, в 18:24 NOVT, Gennadij Pastuhov написал(а):
GP>>>>> Дано: хэш:
GP>>>>> my $PRODUCTS = {
GP>>>>> ssl_dv_geotrust => 'GeoTrust Standard DV SSL Certificate',
GP>>>>> ssl_dv_rapidssl => 'RapidSSL Standard DV SSL Certificate',
GP>>>>> ssl_dv_thawte => 'Thawte SSL123 DV',
GP>>>>> };
GP>>>>> Кусок кода:
GP>>>>> for my $key (keys $result) {
GP>>>>> print "\nkey:" . Dumper $key;
GP>>>>> my ($product_name_id, $validity_years) = split
GP>>>>> '__', $key;
GP>>>>> print
GP>>>>> "\nproduct_name_id:'$product_name_id'\tvalidity_years:'$validit
GP>>>>> y_
EG>>>> years'";
GP>>>>> if (defined $PRODUCTS->{$product_name_id}) {
GP>>>>> ...
GP>>>>> } else {
GP>>>>> print "\nproduct_name_id:$product_name_id -- not found";
GP>>>>> print "\nPRODUCTS:" . Dumper $PRODUCTS->{$product_name_id};
GP>>>>> В $result хранится результат разjsonивания запроса. И этот код
GP>>>>> порождает такой лог:
EG>> А тогда всё зависит от версии perl. Типа намёк.
GP> $ perl -v
GP> This is perl 5, version 14, subversion 2 (v5.14.2) built for
GP> x86_64-linux-gnu-thread-multi
GP> (with 89 registered patches, see perl -V for more detail)
Это довольно старая версия perl и какие в ней были баги/особенности,
сейчас тебе тут вряд ли кто ответит. Проще всего заменить
весь твой диагностический вывод на один print Dumper($result)
и поглядеть на него. Вывод в студию.
Eugene
--
Choose no life
From: |
Michael Dukelsky 2:5020/1042 |
27 Jun 2020 21:37 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
unlink
|
Привет, Eugene!
21 June 2020 14:23, Eugene Grosbein послал(а) письмо к Michael Dukelsky:
MD>> Почему-то у меня unlink удаляет всё, даже файл, принадлежащий
MD>> руту. Что я делаю не так?
EG> Право на удаление файла по умолчанию это право записи в каталог.
EG> Если ты имеешь право на запись в каталог - ты имеешь право
EG> удалять в нём любые файлы независимо от их прав доступа и от
EG> их владельцев.
EG> Если ты хочешь, чтобы из каталога пользователь мог удалять
EG> только собственные файлы, поставь на каталог sticky bit:
EG> chmod +t dirname
EG> И это не имеет отношения к Perl, это основы юникса.
Спасибо за ответ, но почему-то он приехал только сейчас, через 6 дней.
@PATH: 5006/1 5080/102 5020/1042
Судя по всему, 5080/102 проснулся.
Желаю успехов, Eugene!
За сим откланиваюсь, Michael.
... node (at) f1042 (dot) ru
From: |
Stas Mishchenkov 2:460/5858 |
24 May 2020 15:28 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
имена файлов
|
Hi, Eugene!
24 май 20 07:57, Eugene Grosbein -> Stas Mishchenkov:
EG> Если в таблице тупо нет символа, то ты можешь только подобрать
EG> более-менее подходящий по виду символ или группу символов для замены.
Ну, да. Иначе никак.
EG> CP866 отличается от KOI8-R только порядком символов в таблице,
EG> а сам набор символов тот же самый, поэтому тебе, может быть,
EG> пригодится готовая таблица для такиз замен за авторством
EG> покойного Чернова из его утилиты fromwin, правда в синтаксисе C:
Спасибо. То, что нужно.
EG> win2koi8[] = {
EG> "Ъ", "Г", "\'", "г", "\"", "...", "+", "+", /* 80-87
Как я понял, кириллические символы я здесь вижу уже в cp866, а коментарии - это
номера симфволов в cp1251?
Have nice nights.
Stas Mishchenkov.
From: |
Michael Dukelsky 2:5020/1042 |
03 May 2020 18:10 +0300 |
To: |
Nil Alexandrov 2:5015/46 |
|
Subject: |
perl, python, ..
|
Привет, Nil!
02 May 2020 20:17, Nil Alexandrov послал(а) письмо к Yevgeny Zolotnitsky:
NA> Как у нас говорят, "horses for courses" (эх тупой гугл траслейт).
Я помогу тупому гуглу: "Jedem das seine".
NA> А так как питон изначально был "птичьим языком", типа нажимаешь шифт и
^^^^^
Тут ты, наверно, хотел обругать перл.
NA> по всем цифиркам пальцем туда-сюда [~!@#$%^&*()(*&^%$#@!~], вот так он
NA> примерно выглядит, то добавление ООП к перлу стало не читаемым от
NA> слова совсем.
NA> Питон изначально разрабатывался как функциональный, так и ООП.
NA> Синтаксис у него без всех этих @#$->&%, и даже ; не надо ставить в
NA> конце строки, и даже говно-код вынужден быть выровнен из-за блоков,
NA> что придаёт читаемости.
На этом месте читателю эхи ru.perl захочется посмотреть на замечательно
выравненный язык питон, обошедшийся даже без точки с запятой, не говоря уже об
этих ужасных выражениях, получаемых при проведении пальцем по клавишам
туда-сюда. Открываем документацию к Python 3.8.3, Text Processing Services, и в
"re - Regular expression operations" прямо в первой строчке читаем: "This module
provides regular expression matching operations similar to those found in Perl".
То есть точки с запятой нет, но пальцем проводить туда-сюда всё равно придётся.
Желаю успехов, Nil!
За сим откланиваюсь, Michael.
... node (at) f1042 (dot) ru
From: |
Eugene Grosbein grosbein.net |
03 May 2020 03:51 +0300 |
To: |
Nil Alexandrov 2:5015/46 |
|
Subject: |
perl, python, ..
|
02 мая 2020, суббота, в 20:17 NOVT, Nil Alexandrov написал(а):
NA> В последнее время питон, кроме написания скриптов так таковых, стал
NA> использоваться как R&D тул всякими ресёрчерами (умные дядьки с
магистратурами),
NA> которые на нём могут что-то попрототипировать, покрутить туда-сюда и всё
это с
NA> минимальным количеством строк кода. Как это стало возможным? Всё благодаря
NA> обёрткам вокруг C++ кода/библиотек. Получается, что ты пишешь одну/две
строчки
NA> взять данные по такому-то URL (пример urllib, код работает быстро со
скоростью
NA> C), второй строчкой парсим XML/JSON/.. тоже C библиотечным вызовом, а
дальше
NA> скармливаем нашей статистической модели или нейронке, библиотек для
(глубокого)
NA> машинного обучения (мы в шутку называет deep shit learning), и, пальцем в
небо
NA> (но с умным выражением лица), прогнозируем когда закончится карантин,
сколько
NA> будет стоить акции, когда доллару хана, и прочее прочее. Естесссно, что на
перле
NA> этого всего не завезли, и это хорошо.
А можно тебя попросить больше никогда не рассуждать
публично о том, о чём ты никакого понятия не имеешь?
Я тут себе чуть всё лицо фейспалмами не разбил
с одного этого параграфа.
Чуток из боевого perl-кода, который вызывается из embedded perl,
встроенного внутрь радиус-сервера и обрабатывающего голосовые
вызовы в реальном времени параллельно с их протеканием:
use HTTP::Tiny; # часть стандартного дистрибутива perl
...
our @urls = ($url1, $url2);
...
foreach my $baseurl (@urls) {
my $http = HTTP::Tiny->new ('timeout' => TIMEOUT);
my $url = $baseurl . "...";
my $response = $http->get($url);
...
}
Конечно, в Perl не завезли работу с URL!
И в metacpan тоже ничего нету на эту тему! Ой нет, есть, навскидку:
$ pkg search -x 'p5-' | egrep -i 'www|url|uri' | wc -l
172
Одних только дополнительных модулей, работающих с WWW/URL/URI
больше полутора сотен, среди них p5-Net-Curl, p5-WWW-Curl,
p5-libwww, p5-WWW-Telegram-BotAPI, p5-URI-ws (websockets) и т.д.
Что касается парсинга XML, то в Perl конечно этого нету.
Ой, тоже есть. Кусок боевого кода, который выгружает
и парсит пресловутый черный список РКH, который распространяется
в виде XML и сейчас весит 120160KB (то есть, 117MB),
и не дай бог подобный парсер заглючит и не выполнит свою работу
точно и без багов, 50 тысяч рублей штрафа.
use XML::Simple;
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
# Чтобы получить доступ к XML, нужно использовать SOAP
sub soap_fault($$);
use SOAP::Lite on_fault => sub { soap_fault($_[0], $_[1]); };
my $client = SOAP::Lite->new;
$SOAP::Constants::PREFIX_ENV = 'SOAP-ENV';
...
# Парсинг XML-файла схемы WSDL
$service = $client->service($endpoint);
...
# SOAP-запрос zip с XML внутри:
@result = $service->sendRequest($request, $signature, $dumpver);
...
for(my $t = $try; $t > 0; $t--) {
...
eval { $r = $service->call('getResult',
SOAP::Data->name('code')->value($code))->body->{'getResultResponse'};
};
...
}
# Парсинг XML-файла непосредственно из потока unzip:
eval { local $SIG{'__DIE__'}; $h = XMLin('-'); };
...
my $content = $h->{'content'};
# обработка содержимого XML
while (($key, $value) = each %$content) {
...
}
Hу уж машинного обучения в Perl не точно завезли?
Ой, и это активно обновляется! Последняя версия меньше
трех месяцев назад, автор Сергей Колычев из WhiteHat Security:
https://metacpan.org/release/AI-MXNet
Eugene
--
Поэты - страшные люди. У них все святое.
From: |
Stas Mishchenkov 2:460/5858 |
25 May 2020 14:53 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
имена файлов
|
Hi, Eugene!
25 май 20 00:15, Eugene Grosbein -> Stas Mishchenkov:
EG> В данной таблице ты видишь символы и их положение в koi8-r.
SM>> а коментарии - это номера симфволов в cp1251?
EG> Hет, это номера символов в koi8-r в данном случае.
Между тем, я проверил свое предположение и оно оказалось верным. Всё чудесно
перекодируется. Спасибо.
Have nice nights.
Stas Mishchenkov.
From: |
Eugene Grosbein grosbein.net |
25 May 2020 00:15 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
имена файлов
|
24 мая 2020, воскресенье, в 15:28 NOVT, Stas Mishchenkov написал(а):
EG>> win2koi8[] = {
EG>> "Ъ", "Г", "\'", "г", "\"", "...", "+", "+", /* 80-87
SM> Как я понял, кириллические символы я здесь вижу уже в cp866,
Символы это символы, это алфавит кодировки.
Буква "Г" русского языка один и тот же символ что в cp866,
что в koi8-r, что в win1251 и даже в Unicode,
разница только в машинном представлении.
В данной таблице ты видишь символы и их положение в koi8-r.
SM> а коментарии - это номера симфволов в cp1251?
Hет, это номера символов в koi8-r в данном случае.
Eugene
From: |
Eugene Grosbein grosbein.net |
28 Apr 2020 02:24 +0300 |
To: |
Gennadij Pastuhov 2:5036/26 |
|
Subject: |
Что за фигня?
|
27 апр. 2020, понедельник, в 12:55 NOVT, Gennadij Pastuhov написал(а):
EG>> Думаю, что ошибка тут. Вместо defined тут необходимо использовать
EG>> exists, потому что иначе срабатывает autovivification:
EG>> https://perlmaven.com/autovivification
GP>>> product_name_id:ssl_dv_thawte -- not found
GP>>> PRODUCTS:$VAR1 = undef;
GP> Спасибо, вопрос закрыт!
Что было-то?
Eugene
--
Сердце - малочувствительный, мускулистый, грубый и жесткий орган.
From: |
Nil Alexandrov 2:5015/46 |
02 May 2020 20:17 +0300 |
To: |
Yevgeny Zolotnitsky 2:5015/147 |
|
Subject: |
perl, python, ..
|
* Originally in nino.046.local
* Crossposted in ru.perl
* Crossposted in ru.python
Hello, Yevgeny!
Saturday May 02 2020 01:06, from Yevgeny Zolotnitsky -> Nil Alexandrov:
YZ> Я вот хоть не пограмист, но в какие-то скрипто-языки интересуюсь по
YZ> верхам, чтобы читать код уметь. И меня натурально добивает именно
YZ> мода, что сейчас "все носят двухбортный", т.е. на питоне лабают. А
YZ> "однобортный", который на перле -- уже фу-фу-фу. Хотя решают одни и
YZ> теже задачи.
Как у нас говорят, "horses for courses" (эх тупой гугл траслейт).
> An allusion to the fact that a racehorse performs best on a racecourse to
> which it is specifically suited.
Вера в то что, что скаковая лошадь лучше всего выступает на ипподроме, для
которого она специально предназначена.
Кароч, дело было так. Был типичный юникс сисадмин, тот, что с бородой, а не как
виндовзный гладко выбритый [unix_vs_windows_admin.jpg], и не тот, что мышкой в
виндовзе двигает MCSA (Microsoft Certified Systems Administrator), а прям
натурально сидит в текстмоде, и все свои рутинные операции по максимуму
автоматизирует с помощью шел скриптов. Шел скрипты - это такие комбинации из
grep, sed, awk,.. через пайп прописанные. И родился тогда скриптовый язык перл,
и совместил он в себе все эти grep+sed+awk и был заточен под парсенье текстовых
логов, читай регекспы, и прочей сисадминской рутины, типа завести нового
юзверя, прописал его в разных файлах. Но мир не стоял на месте, и стало
модно-молодёжно пейсать не процедурно, а объетко-ориентировано (орфография
сохранена). А так как питон изначально был "птичьим языком", типа нажимаешь шифт
и по всем цифиркам пальцем туда-сюда [~!@#$%^&*()(*&^%$#@!~], вот так он
примерно выглядит, то добавление ООП к перлу стало не читаемым от слова совсем.
Питон изначально разрабатывался как функциональный, так и ООП. Синтаксис у него
без всех этих @#$->&%, и даже ; не надо ставить в конце строки, и даже говно-код
вынужден быть выровнен из-за блоков, что придаёт читаемости. На этом месте
адепты ООП закидают питон тухлыми помидорами, ведь ни с того ни с сего тип
объекта может меняться на ходу, но это и его плюс/минус питона, в его
динамической типизации. Кстати, есть всякие рестриктыд-питон синтаксисы, читай
подмножество языка, когда нельзя походу действия менять тип для одной и той же
переменной, и тогда такой "кастрированный" питон легко транслируется
из-языка-в-язык, например, в C++ или просто JIT на этом участке кода ускоряется
в стопицот раз, если мы использует pypy.
В последнее время питон, кроме написания скриптов так таковых, стал
использоваться как R&D тул всякими ресёрчерами (умные дядьки с магистратурами),
которые на нём могут что-то попрототипировать, покрутить туда-сюда и всё это с
минимальным количеством строк кода. Как это стало возможным? Всё благодаря
обёрткам вокруг C++ кода/библиотек. Получается, что ты пишешь одну/две строчки
взять данные по такому-то URL (пример urllib, код работает быстро со скоростью
C), второй строчкой парсим XML/JSON/.. тоже C библиотечным вызовом, а дальше
скармливаем нашей статистической модели или нейронке, библиотек для (глубокого)
машинного обучения (мы в шутку называет deep shit learning), и, пальцем в небо
(но с умным выражением лица), прогнозируем когда закончится карантин, сколько
будет стоить акции, когда доллару хана, и прочее прочее. Естесссно, что на перле
этого всего не завезли, и это хорошо.
Best Regards, Nil