From monk на nuked.su Wed Oct 2 03:55:06 2013 From: monk на nuked.su (=?utf-8?B?0JzQsNC60YHQuNC8?=) Date: Wed, 2 Oct 2013 14:55:06 +0400 Subject: [Moscow.pm] =?utf-8?b?INCh0L7Qt9C00LDQvdC40LUgemlwLdCw0YDRhdC4?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= Message-ID: Доброго дня. Буду рад если кто-то поможет разобораться в задаче создания zip-архива с русскими именами файлов в нём. Архив создаётся и читается под linux. Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, ничего не помогает. Есть пример скрипта (набрано в utf-8), который создает тестовый архив с одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт вместо имени файла крокозябры. cat pack.pl | sed '2,$s/^ *#.*//' #!/usr/bin/perl use strict; use warnings; use Encode; use IO::Compress::Zip qw(zip $ZipError) ; my $filename = 'русское имя.txt'; my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, CanonicalName => 1} or die "zip failed: $ZipError\n"; $z->print("Content\n"); $z->close; Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк с байтовыми строками. Если добавить принудительный decode, проблема не уходит. cat pack.pl | sed '2,$s/^ *#.*//' #!/usr/bin/perl use strict; use warnings; use Encode; use IO::Compress::Zip qw(zip $ZipError) ; my $filename = 'русское имя.txt'; $filename = decode('utf8', $filename ); my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, CanonicalName => 1} or die "zip failed: $ZipError\n"; $z->print("Content\n"); $z->close; Вывод листинга файлов 7z в обоих случаях такой 7z l result.zip 7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) Listing archive: result.zip -- Path = result.zip Type = zip Physical Size = 174 Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2013-10-02 14:48:14 ..... 8 10 ?????????????? ??????.txt ------------------- ----- ------------ ------------ ------------------------ 8 10 1 files, 0 folders From ali на ali.org.ua Wed Oct 2 04:30:20 2013 From: ali на ali.org.ua (Oleg Alistratov) Date: Wed, 02 Oct 2013 14:30:20 +0300 Subject: [Moscow.pm] =?koi8-r?b?88/axMHOycUgemlwLcHSyMnXwSDTINLV09PLyc3J?= =?koi8-r?b?IMnNxc7BzckgxsHKzM/XIN7F0sXaIElPOjpDb21wcmVzczo6Wmlw?= In-Reply-To: References: Message-ID: <561931380713420@web10g.yandex.ru> Это не проблема IO::Compress::Zlib (и не проблема Archive::Zip). В твоем случае это проблема с 7zip. Например, у меня твой скрипт генерирует архив, который отлично показывается unzip-ом со всеми буквами в имени файла: [15:26:18] local:~/enigmas/zip-rus% unzip -l result.zip Archive: result.zip Length Date Time Name -------- ---- ---- ---- 8 10-02-13 15:25 русское имя.txt -------- ------- 8 1 file Явление это проистекает из того, что формат zip достаточно старый, при его создании никто не заботился указанием кодировок в именах members. Поэтому разархиваторы додумывают уже кто на что горазд. Скорее всего, 7zip предполагает найти имена в кодировке cp866, попробй конвертнуть в нее. 02.10.2013, 13:55, "Максим" : > Доброго дня. > > Буду рад если кто-то поможет разобораться в задаче создания zip-архива с > русскими именами файлов в нём. Архив создаётся и читается под linux. > Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, > ничего не помогает. > > Есть пример скрипта (набрано в utf-8), который создает тестовый архив с > одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт > вместо имени файла крокозябры. > > cat pack.pl | sed '2,$s/^ *#.*//' > #!/usr/bin/perl > > use strict; > use warnings; > > use Encode; > > use IO::Compress::Zip qw(zip $ZipError) ; > > my $filename = 'русское имя.txt'; > > my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, > CanonicalName => 1} >   or die "zip failed: $ZipError\n"; > > $z->print("Content\n"); > > $z->close; > > Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк > с байтовыми строками. Если добавить принудительный decode, проблема не > уходит. > cat pack.pl | sed '2,$s/^ *#.*//' > #!/usr/bin/perl > > use strict; > use warnings; > > use Encode; > > use IO::Compress::Zip qw(zip $ZipError) ; > > my $filename = 'русское имя.txt'; > $filename = decode('utf8', $filename ); > > my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, > CanonicalName => 1} >   or die "zip failed: $ZipError\n"; > > $z->print("Content\n"); > > $z->close; > > Вывод листинга файлов 7z в обоих случаях такой > 7z l result.zip > > 7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18 > p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) > > Listing archive: result.zip > > -- > Path = result.zip > Type = zip > Physical Size = 174 > >    Date      Time    Attr         Size   Compressed  Name > ------------------- ----- ------------ ------------  ------------------------ > 2013-10-02 14:48:14 .....            8           10  ?????????????? > ??????.txt > ------------------- ----- ------------ ------------  ------------------------ >                                      8           10  1 files, 0 folders > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- Oleg Alistratov From dim0xff на gmail.com Wed Oct 2 04:35:45 2013 From: dim0xff на gmail.com (Dmitry L.) Date: Wed, 2 Oct 2013 15:35:45 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE?= =?utf-8?b?0LDQudC70L7QsiDRh9C10YDQtdC3IElPOjpDb21wcmVzczo6Wmlw?= In-Reply-To: <561931380713420@web10g.yandex.ru> References: <561931380713420@web10g.yandex.ru> Message-ID: 7z --help И есть такой свитч: -scs{UTF-8 | WIN | DOS}: set charset for list files Оно? И да, архив создаётся корреткно, по крайней мере unzip нормально распаковывает. 2013/10/2 Oleg Alistratov : > Это не проблема IO::Compress::Zlib (и не проблема Archive::Zip). > В твоем случае это проблема с 7zip. Например, у меня твой скрипт генерирует архив, > который отлично показывается unzip-ом со всеми буквами в имени файла: > > [15:26:18] local:~/enigmas/zip-rus% unzip -l result.zip > Archive: result.zip > Length Date Time Name > -------- ---- ---- ---- > 8 10-02-13 15:25 русское имя.txt > -------- ------- > 8 1 file > > Явление это проистекает из того, что формат zip достаточно старый, при его создании никто не заботился > указанием кодировок в именах members. Поэтому разархиваторы додумывают уже кто на что горазд. > Скорее всего, 7zip предполагает найти имена в кодировке cp866, попробй конвертнуть в нее. > > > 02.10.2013, 13:55, "Максим" : >> Доброго дня. >> >> Буду рад если кто-то поможет разобораться в задаче создания zip-архива с >> русскими именами файлов в нём. Архив создаётся и читается под linux. >> Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, >> ничего не помогает. >> >> Есть пример скрипта (набрано в utf-8), который создает тестовый архив с >> одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт >> вместо имени файла крокозябры. >> >> cat pack.pl | sed '2,$s/^ *#.*//' >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> >> use Encode; >> >> use IO::Compress::Zip qw(zip $ZipError) ; >> >> my $filename = 'русское имя.txt'; >> >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >> CanonicalName => 1} >> or die "zip failed: $ZipError\n"; >> >> $z->print("Content\n"); >> >> $z->close; >> >> Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк >> с байтовыми строками. Если добавить принудительный decode, проблема не >> уходит. >> cat pack.pl | sed '2,$s/^ *#.*//' >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> >> use Encode; >> >> use IO::Compress::Zip qw(zip $ZipError) ; >> >> my $filename = 'русское имя.txt'; >> $filename = decode('utf8', $filename ); >> >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >> CanonicalName => 1} >> or die "zip failed: $ZipError\n"; >> >> $z->print("Content\n"); >> >> $z->close; >> >> Вывод листинга файлов 7z в обоих случаях такой >> 7z l result.zip >> >> 7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 >> p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) >> >> Listing archive: result.zip >> >> -- >> Path = result.zip >> Type = zip >> Physical Size = 174 >> >> Date Time Attr Size Compressed Name >> ------------------- ----- ------------ ------------ ------------------------ >> 2013-10-02 14:48:14 ..... 8 10 ????? ? ?????? >> ????? .txt >> ------------------- ----- ------------ ------------ ------------------------ >> 8 10 1 files, 0 folders >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > Oleg Alistratov > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- //wbr, Dmitry L. From mons на cpan.org Wed Oct 2 05:49:04 2013 From: mons на cpan.org (Mons Anderson) Date: Wed, 2 Oct 2013 16:49:04 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= In-Reply-To: <561931380713420@web10g.yandex.ru> References: <561931380713420@web10g.yandex.ru> Message-ID: <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> А можно, плиз unzip -v perl -MIO::Compress::Zip -E 'say $IO::Compress::Zip::VERSION;' locale ну и версии 7z или 7za On 02.10.2013, at 15:30, Oleg Alistratov wrote: > Это не проблема IO::Compress::Zlib (и не проблема Archive::Zip). > В твоем случае это проблема с 7zip. Например, у меня твой скрипт генерирует архив, > который отлично показывается unzip-ом со всеми буквами в имени файла: > > [15:26:18] local:~/enigmas/zip-rus% unzip -l result.zip > Archive: result.zip > Length Date Time Name > -------- ---- ---- ---- > 8 10-02-13 15:25 русское имя.txt > -------- ------- > 8 1 file > > Явление это проистекает из того, что формат zip достаточно старый, при его создании никто не заботился > указанием кодировок в именах members. Поэтому разархиваторы додумывают уже кто на что горазд. > Скорее всего, 7zip предполагает найти имена в кодировке cp866, попробй конвертнуть в нее. > > > 02.10.2013, 13:55, "Максим" : >> Доброго дня. >> >> Буду рад если кто-то поможет разобораться в задаче создания zip-архива с >> русскими именами файлов в нём. Архив создаётся и читается под linux. >> Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, >> ничего не помогает. >> >> Есть пример скрипта (набрано в utf-8), который создает тестовый архив с >> одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт >> вместо имени файла крокозябры. >> >> cat pack.pl | sed '2,$s/^ *#.*//' >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> >> use Encode; >> >> use IO::Compress::Zip qw(zip $ZipError) ; >> >> my $filename = 'русское имя.txt'; >> >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >> CanonicalName => 1} >> or die "zip failed: $ZipError\n"; >> >> $z->print("Content\n"); >> >> $z->close; >> >> Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк >> с байтовыми строками. Если добавить принудительный decode, проблема не >> уходит. >> cat pack.pl | sed '2,$s/^ *#.*//' >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> >> use Encode; >> >> use IO::Compress::Zip qw(zip $ZipError) ; >> >> my $filename = 'русское имя.txt'; >> $filename = decode('utf8', $filename ); >> >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >> CanonicalName => 1} >> or die "zip failed: $ZipError\n"; >> >> $z->print("Content\n"); >> >> $z->close; >> >> Вывод листинга файлов 7z в обоих случаях такой >> 7z l result.zip >> >> 7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 >> p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) >> >> Listing archive: result.zip >> >> -- >> Path = result.zip >> Type = zip >> Physical Size = 174 >> >> Date Time Attr Size Compressed Name >> ------------------- ----- ------------ ------------ ------------------------ >> 2013-10-02 14:48:14 ..... 8 10 ?????????????? >> ??????.txt >> ------------------- ----- ------------ ------------ ------------------------ >> 8 10 1 files, 0 folders >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > Oleg Alistratov > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From ali на ali.org.ua Wed Oct 2 06:53:25 2013 From: ali на ali.org.ua (Oleg Alistratov) Date: Wed, 02 Oct 2013 16:53:25 +0300 Subject: [Moscow.pm] =?koi8-r?b?88/axMHOycUgemlwLcHSyMnXwSDTINLV09PLyc3J?= =?koi8-r?b?IMnNxc7BzckgxsHKzM/XIN7F0sXaIElPOjpDb21wcmVzczo6Wmlw?= In-Reply-To: <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> References: <561931380713420@web10g.yandex.ru> <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> Message-ID: <127821380722005@web3m.yandex.ru> Монс, это ко мне вопрос? к Максиму, наверное 02.10.2013, 15:49, "Mons Anderson" : > А можно, плиз > > unzip -v > perl -MIO::Compress::Zip -E 'say $IO::Compress::Zip::VERSION;' > locale > > ну и версии 7z или 7za > > On 02.10.2013, at 15:30, Oleg Alistratov wrote: > >>  Это не проблема IO::Compress::Zlib (и не проблема Archive::Zip). >>  В твоем случае это проблема с 7zip. Например, у меня твой скрипт генерирует архив, >>  который отлично показывается unzip-ом со всеми буквами в имени файла: >> >>  [15:26:18]  local:~/enigmas/zip-rus% unzip -l result.zip >>  Archive:  result.zip >>   Length     Date   Time    Name >>  --------    ----   ----    ---- >>         8  10-02-13 15:25   русское имя.txt >>  --------                   ------- >>         8                   1 file >> >>  Явление это проистекает из того, что формат zip достаточно старый, при его создании никто не заботился >>  указанием кодировок в именах members. Поэтому разархиваторы додумывают уже кто на что горазд. >>  Скорее всего, 7zip предполагает найти имена в кодировке cp866, попробй конвертнуть в нее. >> >>  02.10.2013, 13:55, "Максим" : >>>  Доброго дня. >>> >>>  Буду рад если кто-то поможет разобораться в задаче создания zip-архива с >>>  русскими именами файлов в нём. Архив создаётся и читается под linux. >>>  Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, >>>  ничего не помогает. >>> >>>  Есть пример скрипта (набрано в utf-8), который создает тестовый архив с >>>  одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт >>>  вместо имени файла крокозябры. >>> >>>  cat pack.pl | sed '2,$s/^ *#.*//' >>>  #!/usr/bin/perl >>> >>>  use strict; >>>  use warnings; >>> >>>  use Encode; >>> >>>  use IO::Compress::Zip qw(zip $ZipError) ; >>> >>>  my $filename = 'русское имя.txt'; >>> >>>  my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >>>  CanonicalName => 1} >>>    or die "zip failed: $ZipError\n"; >>> >>>  $z->print("Content\n"); >>> >>>  $z->close; >>> >>>  Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк >>>  с байтовыми строками. Если добавить принудительный decode, проблема не >>>  уходит. >>>  cat pack.pl | sed '2,$s/^ *#.*//' >>>  #!/usr/bin/perl >>> >>>  use strict; >>>  use warnings; >>> >>>  use Encode; >>> >>>  use IO::Compress::Zip qw(zip $ZipError) ; >>> >>>  my $filename = 'русское имя.txt'; >>>  $filename = decode('utf8', $filename ); >>> >>>  my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, >>>  CanonicalName => 1} >>>    or die "zip failed: $ZipError\n"; >>> >>>  $z->print("Content\n"); >>> >>>  $z->close; >>> >>>  Вывод листинга файлов 7z в обоих случаях такой >>>  7z l result.zip >>> >>>  7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18 >>>  p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) >>> >>>  Listing archive: result.zip >>> >>>  -- >>>  Path = result.zip >>>  Type = zip >>>  Physical Size = 174 >>> >>>     Date      Time    Attr         Size   Compressed  Name >>>  ------------------- ----- ------------ ------------  ------------------------ >>>  2013-10-02 14:48:14 .....            8           10  ?????????????? >>>  ??????.txt >>>  ------------------- ----- ------------ ------------  ------------------------ >>>                                       8           10  1 files, 0 folders >>> >>>  -- >>>  Moscow.pm mailing list >>>  moscow-pm на pm.org | http://moscow.pm.org >>  -- >>  Oleg Alistratov >>  -- >>  Moscow.pm mailing list >>  moscow-pm на pm.org | http://moscow.pm.org > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- Oleg Alistratov From grisxa на gmail.com Wed Oct 2 07:34:42 2013 From: grisxa на gmail.com (Grigory Batalov) Date: Wed, 2 Oct 2013 18:34:42 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= In-Reply-To: <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> References: <561931380713420@web10g.yandex.ru> <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> Message-ID: <20131002183442.01303465@gbatalov> В Wed, 2 Oct 2013 16:49:04 +0400 Mons Anderson пишет: > А можно, плиз > > unzip -v > perl -MIO::Compress::Zip -E 'say $IO::Compress::Zip::VERSION;' > locale > > ну и версии 7z или 7za Поскольку у меня пример Максима воспроизводится, то вот мои версии: (вдруг пригодятся) $ unzip -v UnZip 6.10b BETA of 10 Dec 10, by Info-ZIP. Maintained by C. Spieler. Send bug reports using http://www.info-zip.org/zip-bug.html; see README for details. Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ; see ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites. Compiled with gcc 4.4.5 for Unix (Linux ELF) on Feb 1 2012. UnZip special compilation options: ACORN_FTYPE_NFS COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported) SET_DIR_ATTRIB SYMLINKS (symbolic links supported, if RTL and file system permit) TIMESTAMP UNIXBACKUP (-B creates backup files) USE_EF_UT_TIME USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported) USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported) UNICODE_SUPPORT [wide-chars, char coding: UTF-8] (handle UTF-8 paths) LARGE_FILE_SUPPORT (large files over 2 GiB supported) ZIP64_SUPPORT (archives using Zip64 for large files supported) VMS_TEXT_CONV WILD_STOP_AT_DIR [decryption, version 2.11 of 05 Jan 2007] UnZip and ZipInfo environment options: UNZIP: [none] UNZIPOPT: [none] ZIPINFO: [none] ZIPINFOOPT: [none] $ perl -MIO::Compress::Zip -E 'say $IO::Compress::Zip::VERSION;' 2.058 $ locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= $ 7z 7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30 p7zip Version 9.04 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,4 CPUs) From grisxa на gmail.com Wed Oct 2 10:20:37 2013 From: grisxa на gmail.com (Grigory Batalov) Date: Wed, 2 Oct 2013 21:20:37 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= In-Reply-To: <20131002183442.01303465@gbatalov> References: <561931380713420@web10g.yandex.ru> <2B9B2D7F-3703-41B2-A099-14199D67DD48@corp.mail.ru> <20131002183442.01303465@gbatalov> Message-ID: <20131002212037.36b65b8a@gbatalov> В Wed, 2 Oct 2013 18:34:42 +0400 Grigory Batalov пишет: > > А можно, плиз > > > > unzip -v > > perl -MIO::Compress::Zip -E 'say $IO::Compress::Zip::VERSION;' > > locale > > > > ну и версии 7z или 7za > > Поскольку у меня пример Максима воспроизводится, то вот мои версии: > (вдруг пригодятся) > > $ unzip -v > UnZip 6.10b BETA of 10 Dec 10, by Info-ZIP. Maintained by C. > Spieler. Send bug reports using > http://www.info-zip.org/zip-bug.html; see README for details. Забыл добавить, что мой unzip справляется. Так что я тоже грешу на 7z ( опции -scs UTF-8 у меня нет). > $ 7z > > 7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30 > p7zip Version 9.04 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,4 CPUs) From monk на nuked.su Wed Oct 2 11:29:06 2013 From: monk на nuked.su (Maxim) Date: Wed, 02 Oct 2013 22:29:06 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= In-Reply-To: References: <561931380713420@web10g.yandex.ru> Message-ID: <1380738546.4105.53.camel@cruel.crystalnet.ru> Можно сказать задача решилась, спасибо участникам обсуждения за помощь. On Wed, 2013-10-02 at 15:35 +0400, Dmitry L. wrote: > 7z --help > > И есть такой свитч: > -scs{UTF-8 | WIN | DOS}: set charset for list files > > Оно? > Я этот ключ видел в --help, но в командлайне он отказался работать. > И да, архив создаётся корреткно, по крайней мере unzip нормально распаковывает. > Да, я недоглядел, из-за этого потерял много времени. unzip -v показывает кривые имена, но достаёт файлы нормально. > 2013/10/2 Oleg Alistratov : > > Это не проблема IO::Compress::Zlib (и не проблема Archive::Zip). > > В твоем случае это проблема с 7zip. Например, у меня твой скрипт генерирует архив, > > который отлично показывается unzip-ом со всеми буквами в имени файла: > > > > [15:26:18] local:~/enigmas/zip-rus% unzip -l result.zip > > Archive: result.zip > > Length Date Time Name > > -------- ---- ---- ---- > > 8 10-02-13 15:25 русское имя.txt > > -------- ------- > > 8 1 file > > > > Явление это проистекает из того, что формат zip достаточно старый, при его создании никто не заботился > > указанием кодировок в именах members. Поэтому разархиваторы додумывают уже кто на что горазд. > > Скорее всего, 7zip предполагает найти имена в кодировке cp866, попробй конвертнуть в нее. > > Как выяснилось, в zip формате возможно хранение имен файлов в utf-8. Для этого выставляется 11-й бит в поле general purpose bit flag. Однако интерфейс для этого в IO::Compress::Zip не предусмотрен. Также здесь http://www.pkware.com/documents/casestudies/APPNOTE.TXT буквально только что наткнулся на описание расширений, позволяющих хранить коментарии к архиву тоже в UTF > > > > 02.10.2013, 13:55, "Максим" : > >> Доброго дня. > >> > >> Буду рад если кто-то поможет разобораться в задаче создания zip-архива с > >> русскими именами файлов в нём. Архив создаётся и читается под linux. > >> Версия IO::Compress::Zlib свежая. Все что нашел в гугле уже попробовал, > >> ничего не помогает. > >> > >> Есть пример скрипта (набрано в utf-8), который создает тестовый архив с > >> одним файлом. Если сделать его имя русским, при распаковке 7z выдаёт > >> вместо имени файла крокозябры. > >> > >> cat pack.pl | sed '2,$s/^ *#.*//' > >> #!/usr/bin/perl > >> > >> use strict; > >> use warnings; > >> > >> use Encode; > >> > >> use IO::Compress::Zip qw(zip $ZipError) ; > >> > >> my $filename = 'русское имя.txt'; > >> > >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, > >> CanonicalName => 1} > >> or die "zip failed: $ZipError\n"; > >> > >> $z->print("Content\n"); > >> > >> $z->close; > >> > >> Крокозябры похожи на те что вылезают при конкатенации символьных utf-строк > >> с байтовыми строками. Если добавить принудительный decode, проблема не > >> уходит. > >> cat pack.pl | sed '2,$s/^ *#.*//' > >> #!/usr/bin/perl > >> > >> use strict; > >> use warnings; > >> > >> use Encode; > >> > >> use IO::Compress::Zip qw(zip $ZipError) ; > >> > >> my $filename = 'русское имя.txt'; > >> $filename = decode('utf8', $filename ); > >> > >> my $z = new IO::Compress::Zip 'result.zip', { name=> $filename, > >> CanonicalName => 1} > >> or die "zip failed: $ZipError\n"; > >> > >> $z->print("Content\n"); > >> > >> $z->close; > >> > >> Вывод листинга файлов 7z в обоих случаях такой > >> 7z l result.zip > >> > >> 7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 > >> p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs) > >> > >> Listing archive: result.zip > >> > >> -- > >> Path = result.zip > >> Type = zip > >> Physical Size = 174 > >> > >> Date Time Attr Size Compressed Name > >> ------------------- ----- ------------ ------------ ------------------------ > >> 2013-10-02 14:48:14 ..... 8 10 ????? ? ?????? > >> ????? .txt > >> ------------------- ----- ------------ ------------ ------------------------ > >> 8 10 1 files, 0 folders > >> > >> -- > >> Moscow.pm mailing list > >> moscow-pm на pm.org | http://moscow.pm.org > > > > -- > > Oleg Alistratov > > -- > > Moscow.pm mailing list > > moscow-pm на pm.org | http://moscow.pm.org > > > > -- > //wbr, Dmitry L. From mons на cpan.org Wed Oct 2 17:06:30 2013 From: mons на cpan.org (Mons Anderson) Date: Thu, 3 Oct 2013 04:06:30 +0400 Subject: [Moscow.pm] =?utf-8?b?0KHQvtC30LTQsNC90LjQtSB6aXAt0LDRgNGF0Lg=?= =?utf-8?b?0LLQsCDRgSDRgNGD0YHRgdC60LjQvNC4INC40LzQtdC90LDQvNC4INGE0LA=?= =?utf-8?b?0LnQu9C+0LIg0YfQtdGA0LXQtyBJTzo6Q29tcHJlc3M6OlppcA==?= In-Reply-To: <1380738546.4105.53.camel@cruel.crystalnet.ru> References: <561931380713420@web10g.yandex.ru> <1380738546.4105.53.camel@cruel.crystalnet.ru> Message-ID: Итог таков: В последней версии IO::Compress::Zip есть код для запаковки в utf-8, но он весь закомментарен https://metacpan.org/source/PMQS/IO-Compress-2.062/lib/IO/Compress/Zip.pm#L325 есть еще extrafield 0x0008, кто на него смотрит не знаю. т.е. мы воспользовались патченной версией IO::Compress::Zip. 1. раскомментили и поправили под флаг utf8 2. добавляем ExtraFieldLocal => pack('s',8), "65001" 3. добавляем my $pathextra = pack 'C v a*', 1, Compress::Raw::Zlib::crc32($opts->{Name}), $opts->{Name}; ExtraFieldLocal => pack('s',0x7075), pack('sa*',length ($pathextra),$pathextra ) Возможно кому-то еще пригодится. PS: По дефолту в зипе однобайтные кодировки, и сама винда никогда и ни при каком условии не сможет распаковать utf-8 архив. она всегда пытается трактовать имена как однобайтные, в той локали, которая у нее дефолтная. Теоретически, под кириллическую винду нужно было-бы паковать как cp866 Но если винда не кириллическая, то получить архив с кириллическими именами в ней невозможно средствами самой винды. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From worldmind на mail.ru Thu Oct 3 22:59:08 2013 From: worldmind на mail.ru (=?UTF-8?B?QWxleGV5IFNocnVi?=) Date: Fri, 04 Oct 2013 09:59:08 +0400 Subject: [Moscow.pm] =?utf-8?b?TW9zY293LnBtIHBhcnR5OiDQtNC+0LrQu9Cw0LQt?= =?utf-8?b?0YDQtdC60LLQtdGB0YLRiw==?= Message-ID: <1380866347.946598316@f313.i.mail.ru> Приветствую, Вчера звучал очередной призыв к докладыванию докладов, и после тусни подумалось что людей что-то знающих и могущих сделать доклад должно быть достаточно, но не всегда они знают что доклад востребован, поэтому предлагаю пособирать темы докладов которые трудовые массы желают услышать. Для затравки: - доклад про механизмы IPC, мне например интересны только варианты с обменом сообщениями (послать сообщение такому-то процессу, а в нём описать обработчик сообщений), а с этим всё достаточно печально, есть какой-то AnyEvent-MP , но ещё не добрался потестить, всё остальное что попадалось это какое-то уродство на сигналах или сокетах, надо всё-таки на уровень выше переходить - Marpa::XS - интересный модуль, но опять же руки не доходят, может кто может сделать презентацию с коротким и ясным примером -- Alexey Shrub ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From kopytov на webhackers.ru Fri Oct 4 01:31:20 2013 From: kopytov на webhackers.ru (Dmitry Kopytov) Date: Fri, 4 Oct 2013 12:31:20 +0400 Subject: [Moscow.pm] =?utf-8?b?TW9zY293LnBtIHBhcnR5OiDQtNC+0LrQu9Cw0LQt?= =?utf-8?b?0YDQtdC60LLQtdGB0YLRiw==?= In-Reply-To: <1380866347.946598316@f313.i.mail.ru> References: <1380866347.946598316@f313.i.mail.ru> Message-ID: <20131004083120.GA1900@acer> On Fri, Oct 04, 2013 at 09:59:08AM +0400, Alexey Shrub wrote: > доклад про механизмы IPC, мне например интересны только варианты с > обменом сообщениями (послать сообщение такому-то процессу, а в нём > описать обработчик сообщений), а с этим всё достаточно печально, есть > какой-то AnyEvent-MP , но ещё не добрался потестить, всё остальное > что попадалось это какое-то уродство на сигналах или сокетах, надо > всё-таки на уровень выше переходить Интересная тема. На YAPC был доклад про ZeroMQ как раз примерно об этом (правда там IPC на сокетах), можно сделать перевод. http://domm.plix.at/talks/2013_kiev_zeromq_perl/ Мне было бы интересно послушать про применение Coro с каким-нибудь хорошим примером. -- Dmitry Kopytov, Webhackers kopytov на webhackers.ru | https://www.webhackers.ru From worldmind на mail.ru Fri Oct 4 01:53:30 2013 From: worldmind на mail.ru (=?UTF-8?B?QWxleGV5IFNocnVi?=) Date: Fri, 04 Oct 2013 12:53:30 +0400 Subject: [Moscow.pm] =?utf-8?b?TW9zY293LnBtIHBhcnR5OiDQtNC+0LrQu9Cw0LQt?= =?utf-8?b?0YDQtdC60LLQtdGB0YLRiw==?= In-Reply-To: <20131004083120.GA1900@acer> References: <1380866347.946598316@f313.i.mail.ru> <20131004083120.GA1900@acer> Message-ID: <1380876810.710101751@f269.i.mail.ru> Пятница, 4 октября 2013, 12:31 +04:00 от Dmitry Kopytov : > Интересная тема. На YAPC был доклад про ZeroMQ как раз примерно об этом > (правда там IPC на сокетах), можно сделать перевод. под капотом от сокетов скорее всего никуда не деться, ОС лучшего механизма не предоставляет, вроде как-то была новость что в линуксовое ядро приняли патчи от андроида с обменом сообщений, но пока реального применения не видал -- Alexey Shrub From dsimonov на gmail.com Fri Oct 4 07:26:31 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Fri, 4 Oct 2013 18:26:31 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= Message-ID: Дарова, мужики. У моих друзей в этот раз потребность в живом перловике из Москвы :) Если кто-то хочет охуенную работу, стучитесь. П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу только охуенные вакансии. --- Dmitriy V. Simonov, Perl & Python programmer ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From denis.fedoseev на gmail.com Fri Oct 4 07:32:22 2013 From: denis.fedoseev на gmail.com (Denis Fedoseev) Date: Fri, 4 Oct 2013 18:32:22 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: <3621881F-8794-4379-B77F-D3C9EAB53BBF@gmail.com> Судя по упоминанию Москвы - работа только в офисе?:) > On 04 окт. 2013 г., at 18:26, Dmitry Simonov wrote: > > Дарова, мужики. > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если кто-то хочет охуенную работу, стучитесь. > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу только охуенные вакансии. > > --- > Dmitriy V. Simonov, > Perl & Python programmer > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From dsimonov на gmail.com Fri Oct 4 07:34:01 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Fri, 4 Oct 2013 18:34:01 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: <3621881F-8794-4379-B77F-D3C9EAB53BBF@gmail.com> References: <3621881F-8794-4379-B77F-D3C9EAB53BBF@gmail.com> Message-ID: Да, в этот раз СТРОГО в офис. --- Dmitriy V. Simonov, Perl & Python programmer 2013/10/4 Denis Fedoseev > Судя по упоминанию Москвы - работа только в офисе?:) > > > On 04 окт. 2013 г., at 18:26, Dmitry Simonov wrote: > > > > Дарова, мужики. > > > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > кто-то хочет охуенную работу, стучитесь. > > > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > только охуенные вакансии. > > > > --- > > Dmitriy V. Simonov, > > Perl & Python programmer > > -- > > Moscow.pm mailing list > > moscow-pm на pm.org | http://moscow.pm.org > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From foxcool333 на gmail.com Fri Oct 4 07:40:42 2013 From: foxcool333 на gmail.com (Foxcool) Date: Fri, 04 Oct 2013 18:40:42 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: <3621881F-8794-4379-B77F-D3C9EAB53BBF@gmail.com> Message-ID: <524ED36A.8020406@gmail.com> Работаю с Димой. Все круто! Правда на удаленке. (: -- http://foxcool.ru foxcool на jabber.ru From dionys на gmail.com Fri Oct 4 07:45:29 2013 From: dionys на gmail.com (Denis Ibaev) Date: Fri, 4 Oct 2013 18:45:29 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: Подтверждаю. Дима веников не вяжет. 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > кто-то хочет охуенную работу, стучитесь. > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > только охуенные вакансии. -- Денис Ибаев From xuntaka на gmail.com Fri Oct 4 07:48:26 2013 From: xuntaka на gmail.com (=?KOI8-R?B?5cfP0iDiwcrCwdLB?=) Date: Fri, 4 Oct 2013 18:48:26 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: Вяжет-вяжет. Но как он это делает!!... 4 октября 2013 г., 18:45 пользователь Denis Ibaev написал: > Подтверждаю. Дима веников не вяжет. > > 4 октября 2013 г., 18:26 пользователь Dmitry Simonov > написал: > > > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > > кто-то хочет охуенную работу, стучитесь. > > > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > > только охуенные вакансии. > > -- > Денис Ибаев > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- С уважением, Егор Байбара +7-963-675-29-49 ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sergey на homenkow.ru Fri Oct 4 08:01:49 2013 From: sergey на homenkow.ru (Sergey Homenkow) Date: Fri, 4 Oct 2013 19:01:49 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: Дима сказал оху*ная работа - значит оху*ная. А описание вакансии, направление работы, рабочий график, вилка ЗП - это всё мелочи, которые оху*ых разработчиков не интересуют. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From ccnweb на gmail.com Fri Oct 4 08:02:12 2013 From: ccnweb на gmail.com (Alexander Onokhov) Date: Fri, 4 Oct 2013 18:02:12 +0300 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: От меня +1 в репутацию Димы а то уволит^W^W^W у Димы всё круто )) 2013/10/4 Егор Байбара > Вяжет-вяжет. > Но как он это делает!!... > > > 4 октября 2013 г., 18:45 пользователь Denis Ibaev написал: > > Подтверждаю. Дима веников не вяжет. >> >> 4 октября 2013 г., 18:26 пользователь Dmitry Simonov >> написал: >> > >> > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если >> > кто-то хочет охуенную работу, стучитесь. >> > >> > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу >> > только охуенные вакансии. >> >> -- >> Денис Ибаев >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> > > > > -- > С уважением, > Егор Байбара > > +7-963-675-29-49 > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Alexander ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From eugene.toropov на gmail.com Fri Oct 4 08:04:08 2013 From: eugene.toropov на gmail.com (Eugene Toropov) Date: Fri, 4 Oct 2013 19:04:08 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: <3717F45E-130E-4AC2-A79D-40CC3E6EE996@gmail.com> Как же он вас всех там запугал :) On Oct 4, 2013, at 7:02 PM, Alexander Onokhov wrote: > От меня +1 в репутацию Димы > а то уволит^W^W^W > у Димы всё круто )) > > > > 2013/10/4 Егор Байбара > Вяжет-вяжет. > Но как он это делает!!... > > > 4 октября 2013 г., 18:45 пользователь Denis Ibaev написал: > > Подтверждаю. Дима веников не вяжет. > > 4 октября 2013 г., 18:26 пользователь Dmitry Simonov > написал: > > > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > > кто-то хочет охуенную работу, стучитесь. > > > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > > только охуенные вакансии. > > -- > Денис Ибаев > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > > > -- > С уважением, > Егор Байбара > > +7-963-675-29-49 > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > > > > -- > Alexander > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From stork2000 на yandex.ru Fri Oct 4 08:05:42 2013 From: stork2000 на yandex.ru (Loginoff Nick) Date: Fri, 04 Oct 2013 19:05:42 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: <3717F45E-130E-4AC2-A79D-40CC3E6EE996@gmail.com> References: <3717F45E-130E-4AC2-A79D-40CC3E6EE996@gmail.com> Message-ID: <209281380899142@web8h.yandex.ru> Вложение в формате HTML было извлечено… URL: From simashin на gmail.com Fri Oct 4 08:07:26 2013 From: simashin на gmail.com (Alexander Simashin) Date: Fri, 4 Oct 2013 19:07:26 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: Подтверждаю. Сам по его вакансии уже год работаю, не жалуюсь. Паспорт не отбирали ;) 2013/10/4 Dmitry Simonov > Дарова, мужики. > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > кто-то хочет охуенную работу, стучитесь. > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > только охуенные вакансии. > > --- > Dmitriy V. Simonov, > Perl & Python programmer > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akzhan.abdulin на gmail.com Fri Oct 4 08:34:21 2013 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Fri, 4 Oct 2013 19:34:21 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар переехал, чтобы теплее и сезон дольше ) 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: > Дарова, мужики. > > У моих друзей в этот раз потребность в живом перловике из Москвы :) Если > кто-то хочет охуенную работу, стучитесь. > > П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу > только охуенные вакансии. > > --- > Dmitriy V. Simonov, > Perl & Python programmer > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dsimonov на gmail.com Fri Oct 4 08:43:26 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Fri, 4 Oct 2013 19:43:26 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: Переходи ко мне. Мне фронтендеры нужны на удаленку, а плачу я выше рынка. пятница, 4 октября 2013 г. пользователь Akzhan Abdulin писал: > А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар > переехал, чтобы теплее и сезон дольше ) > > > 4 октября 2013 г., 18:26 пользователь Dmitry Simonov > > написал: > >> Дарова, мужики. >> >> У моих друзей в этот раз потребность в живом перловике из Москвы :) Если >> кто-то хочет охуенную работу, стучитесь. >> >> П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу >> только охуенные вакансии. >> >> --- >> Dmitriy V. Simonov, >> Perl & Python programmer >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | >> http://moscow.pm.org >> >> > -- --- Dmitriy V. Simonov, Perl & Python programmer ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akzhan.abdulin на gmail.com Fri Oct 4 08:54:49 2013 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Fri, 4 Oct 2013 19:54:49 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: Дим, я давно не перловик, не фронтендер, и даже не девопс. И работу не ищу, я бы сам взял несколько фронтэндеров на удалёнку ;) 4 октября 2013 г., 19:43 пользователь Dmitry Simonov написал: > Переходи ко мне. Мне фронтендеры нужны на удаленку, а плачу я выше рынка. > > пятница, 4 октября 2013 г. пользователь Akzhan Abdulin писал: > > А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар >> переехал, чтобы теплее и сезон дольше ) >> >> >> 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: >> >>> Дарова, мужики. >>> >>> У моих друзей в этот раз потребность в живом перловике из Москвы :) Если >>> кто-то хочет охуенную работу, стучитесь. >>> >>> П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу >>> только охуенные вакансии. >>> >>> --- >>> Dmitriy V. Simonov, >>> Perl & Python programmer >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org >>> >>> >> > > -- > --- > Dmitriy V. Simonov, > Perl & Python programmer > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From denis.fedoseev на gmail.com Fri Oct 4 09:41:31 2013 From: denis.fedoseev на gmail.com (Denis Fedoseev) Date: Fri, 4 Oct 2013 20:41:31 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: А что почем? Я бы может заинтересовался :) > On 04 окт. 2013 г., at 19:43, Dmitry Simonov wrote: > > Переходи ко мне. Мне фронтендеры нужны на удаленку, а плачу я выше рынка. > > пятница, 4 октября 2013 г. пользователь Akzhan Abdulin писал: >> А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар переехал, чтобы теплее и сезон дольше ) >> >> >> 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: >>> Дарова, мужики. >>> >>> У моих друзей в этот раз потребность в живом перловике из Москвы :) Если кто-то хочет охуенную работу, стучитесь. >>> >>> П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу только охуенные вакансии. >>> >>> --- >>> Dmitriy V. Simonov, >>> Perl & Python programmer >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org > > > -- > --- > Dmitriy V. Simonov, > Perl & Python programmer > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dsimonov на gmail.com Fri Oct 4 09:47:15 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Fri, 4 Oct 2013 20:47:15 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: Дак Ты пришли мне резюме, образцы кода и ссылки на проекты запущенные! :) пятница, 4 октября 2013 г. пользователь Denis Fedoseev писал: > А что почем? Я бы может заинтересовался :) > > On 04 окт. 2013 г., at 19:43, Dmitry Simonov > > wrote: > > Переходи ко мне. Мне фронтендеры нужны на удаленку, а плачу я выше рынка. > > пятница, 4 октября 2013 г. пользователь Akzhan Abdulin писал: > >> А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар >> переехал, чтобы теплее и сезон дольше ) >> >> >> 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: >> >>> Дарова, мужики. >>> >>> У моих друзей в этот раз потребность в живом перловике из Москвы :) Если >>> кто-то хочет охуенную работу, стучитесь. >>> >>> П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу >>> только охуенные вакансии. >>> >>> --- >>> Dmitriy V. Simonov, >>> Perl & Python programmer >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org >>> >>> >> > > -- > --- > Dmitriy V. Simonov, > Perl & Python programmer > > -- > Moscow.pm mailing list > moscow-pm на pm.org | > http://moscow.pm.org > > -- --- Dmitriy V. Simonov, Perl & Python programmer ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dionys на gmail.com Fri Oct 4 09:59:49 2013 From: dionys на gmail.com (Denis Ibaev) Date: Fri, 4 Oct 2013 20:59:49 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQsNC60LDQvdGB0LjRjw==?= In-Reply-To: References: Message-ID: И паспорт. 4 октября 2013 г., 20:47 пользователь Dmitry Simonov написал: > Дак Ты пришли мне резюме, образцы кода и ссылки на проекты запущенные! :) > > пятница, 4 октября 2013 г. пользователь Denis Fedoseev писал: >> А что почем? Я бы может заинтересовался :) -- Денис Ибаев From denis.fedoseev на gmail.com Fri Oct 4 10:05:59 2013 From: denis.fedoseev на gmail.com (Denis Fedoseev) Date: Fri, 4 Oct 2013 21:05:59 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: DHL'ем, ага :) > On 04 окт. 2013 г., at 20:59, Denis Ibaev wrote: > > И паспорт. > > 4 октября 2013 г., 20:47 пользователь Dmitry Simonov > написал: >> Дак Ты пришли мне резюме, образцы кода и ссылки на проекты запущенные! :) >> >> пятница, 4 октября 2013 г. пользователь Denis Fedoseev писал: >>> А что почем? Я бы может заинтересовался :) > > -- > Денис Ибаев > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From denis.fedoseev на gmail.com Fri Oct 4 10:07:32 2013 From: denis.fedoseev на gmail.com (Denis Fedoseev) Date: Fri, 4 Oct 2013 21:07:32 +0400 Subject: [Moscow.pm] =?koi8-r?b?98HLwc7TydE=?= In-Reply-To: References: Message-ID: <93F8ABFB-263C-465A-8191-B55B86A2138B@gmail.com> Нарисую чего-нить на досуге :) хотя фронтэндер из меня весьма условный ибо опыта нет боевого :( > On 04 окт. 2013 г., at 20:47, Dmitry Simonov wrote: > > Дак Ты пришли мне резюме, образцы кода и ссылки на проекты запущенные! :) > > пятница, 4 октября 2013 г. пользователь Denis Fedoseev писал: >> А что почем? Я бы может заинтересовался :) >> >>> On 04 окт. 2013 г., at 19:43, Dmitry Simonov wrote: >>> >>> Переходи ко мне. Мне фронтендеры нужны на удаленку, а плачу я выше рынка. >>> >>> пятница, 4 октября 2013 г. пользователь Akzhan Abdulin писал: >>>> А смысл искать хорошего перловика "в офис"? Я вот вообще в Краснодар переехал, чтобы теплее и сезон дольше ) >>>> >>>> >>>> 4 октября 2013 г., 18:26 пользователь Dmitry Simonov написал: >>>>> Дарова, мужики. >>>>> >>>>> У моих друзей в этот раз потребность в живом перловике из Москвы :) Если кто-то хочет охуенную работу, стучитесь. >>>>> >>>>> П.С. задачи интересные, да. Кто меня тут знает, подтвердите, что я пощу только охуенные вакансии. >>>>> >>>>> --- >>>>> Dmitriy V. Simonov, >>>>> Perl & Python programmer >>>>> >>>>> -- >>>>> Moscow.pm mailing list >>>>> moscow-pm на pm.org | http://moscow.pm.org >>> >>> >>> -- >>> --- >>> Dmitriy V. Simonov, >>> Perl & Python programmer >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org > > > -- > --- > Dmitriy V. Simonov, > Perl & Python programmer > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Sun Oct 6 13:03:17 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 07 Oct 2013 00:03:17 +0400 Subject: [Moscow.pm] Ack Message-ID: <206111381089797@web13j.yandex.ru> Вложение в формате HTML было извлечено… URL: From dmitry на eremeev.ru Sun Oct 6 13:23:37 2013 From: dmitry на eremeev.ru (Dmitry Eremeev) Date: Mon, 7 Oct 2013 00:23:37 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: <206111381089797@web13j.yandex.ru> References: <206111381089797@web13j.yandex.ru> Message-ID: <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> Коллеги, здравствуйте! Есть такая задача: на входе url некой страницы и сигнатуры (куски текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На полученной картинке нужно пометить место с найденной сигнатурой (наложить картинку с галкой, например). Ситуация усложняется тем, что искать нужно не только текст, но и куски html-кода и в этом случае помечать на картинке места, в которых примерно находится код. То есть, например, если в сигнатуре будет References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> Message-ID: <232241381092261@web13j.yandex.ru> я бы попробовал use WWW::Mechanize::Firefox; он умеет скриншоты делать https://github.com/gitpan/WWW-Mechanize-Firefox/blob/master/eg/screenshot.pl потом use GD; https://metacpan.org/module/GD в общем, думаю, задача вполне решаема, вот только вопрос в производительности можете поконкретнее сказать что искать на странице и как это должно выглядеть в итоге? 07.10.2013, 00:24, "Dmitry Eremeev" : > Коллеги, здравствуйте! > > Есть такая задача: на входе url некой страницы и сигнатуры (куски текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На полученной картинке нужно пометить место с найденной сигнатурой (наложить картинку с галкой, например). > > Ситуация усложняется тем, что искать нужно не только текст, но и куски html-кода и в этом случае помечать на картинке места, в которых примерно находится код. То есть, например, если в сигнатуре будет > В общем, надо отрендерить страницу как бы в браузере шириной 1024 и правильно показать-отметить на ней то, что находится по строчным сигнатурам в html-исходнике. > > Это решаемо силами перла? Кто-то может взяться это слабать за разумные бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. > > Перл относительно критичен тем, что данный модуль будет заинтегрирован в уже работающий внутренний продукт конторы, а продукту 100 лет и он на древнем пятом портяночном перле. > > Yours, > Dmitry Eremeev > +7 906 7005771 > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From sergey на homenkow.ru Sun Oct 6 13:45:15 2013 From: sergey на homenkow.ru (Sergey Homenkow) Date: Mon, 7 Oct 2013 00:45:15 +0400 Subject: [Moscow.pm] =?utf-8?b?0JPQu9GD0L/Ri9C5INCy0L7Qv9GA0L7RgQ==?= In-Reply-To: <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> Message-ID: - скачать html - запихнуть в неё (ну или все относительные ссылки исправить на абсолютные) - найти нужный кусок в html / dom. добавить ему ... - отрендерить с помощью cutycapt в картинку http://cutycapt.sourceforge.net/ - не возьмусь :) 7 октября 2013 г., 0:23 пользователь Dmitry Eremeev написал: > Коллеги, здравствуйте! > > Есть такая задача: на входе url некой страницы и сигнатуры (куски текста > или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, > срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На > полученной картинке нужно пометить место с найденной сигнатурой (наложить > картинку с галкой, например). > > Ситуация усложняется тем, что искать нужно не только текст, но и куски > html-кода и в этом случае помечать на картинке места, в которых примерно > находится код. То есть, например, если в сигнатуре будет будет указать на странице-скриншоте место с этой самой картинкой. > > В общем, надо отрендерить страницу как бы в браузере шириной 1024 и > правильно показать-отметить на ней то, что находится по строчным сигнатурам > в html-исходнике. > > Это решаемо силами перла? Кто-то может взяться это слабать за разумные > бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. > > Перл относительно критичен тем, что данный модуль будет заинтегрирован в > уже работающий внутренний продукт конторы, а продукту 100 лет и он на > древнем пятом портяночном перле. > > > Yours, > Dmitry Eremeev > +7 906 7005771 > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- Sergey Homenkow, skype:homenkow_s ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dmitry на eremeev.ru Sun Oct 6 13:51:37 2013 From: dmitry на eremeev.ru (Dmitry Eremeev) Date: Mon, 07 Oct 2013 00:51:37 +0400 Subject: [Moscow.pm] =?utf-8?b?0JPQu9GD0L/Ri9C5INCy0L7Qv9GA0L7RgQ==?= In-Reply-To: <232241381092261@web13j.yandex.ru> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> Message-ID: <5251CD59.4050904@eremeev.ru> Николай, спасибо за оперативный ответ. Например, есть сайты с установленными кодами баннерных движков (море их, разных кодов). Рекламное агентство продает размещения. Нужно выгружать скриншоты для рекламодетелей, типа "дата, время, запрос с такого-то региона, выглядело так". И, соответственно, показать галкой место, где нужный баннер (тут поможет сигнатура конкретной баннерной площадки). Сейчас это частично делается руками (выгружается тупо скриншот без пометок), хочется доавтоматизировать для простоты использования. > Nikolay Mishin > 7 октября 2013 г., 0:44 > я бы попробовал > use WWW::Mechanize::Firefox; > он умеет скриншоты делать > https://github.com/gitpan/WWW-Mechanize-Firefox/blob/master/eg/screenshot.pl > потом > use GD; > https://metacpan.org/module/GD > в общем, думаю, задача вполне решаема, вот только вопрос в > производительности > > можете поконкретнее сказать что искать на странице и как это должно > выглядеть в итоге? > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: postbox-contact.jpg Type: image/jpeg Size: 1215 bytes Desc: отсутствует URL: From dim0xff на gmail.com Sun Oct 6 21:19:17 2013 From: dim0xff на gmail.com (Dmitry L.) Date: Mon, 7 Oct 2013 08:19:17 +0400 Subject: [Moscow.pm] =?utf-8?b?0JPQu9GD0L/Ri9C5INCy0L7Qv9GA0L7RgQ==?= In-Reply-To: <232241381092261@web13j.yandex.ru> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> Message-ID: +1 к WWW::Mechanize::Firefox. Или какой-нибудь WebDriver. А искать я бы стал средствами js в самом браузере (и менять DOM как вздумается, например как предложил Сергей - обернуть нужный кусок в span), а потом просто сделать скриншот. 2013/10/7 Nikolay Mishin : > я бы попробовал > use WWW::Mechanize::Firefox; > он умеет скриншоты делать > https://github.com/gitpan/WWW-Mechanize-Firefox/blob/master/eg/screenshot.pl > потом > use GD; > https://metacpan.org/module/GD > в общем, думаю, задача вполне решаема, вот только вопрос в производительности > > можете поконкретнее сказать что искать на странице и как это должно выглядеть в итоге? > 07.10.2013, 00:24, "Dmitry Eremeev" : >> Коллеги, здравствуйте! >> >> Есть такая задача: на входе url некой страницы и сигнатуры (куски текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На полученной картинке нужно пометить место с найденной сигнатурой (наложить картинку с галкой, например). >> >> Ситуация усложняется тем, что искать нужно не только текст, но и куски html-кода и в этом случае помечать на картинке места, в которых примерно находится код. То есть, например, если в сигнатуре будет > >> В общем, надо отрендерить страницу как бы в браузере шириной 1024 и правильно показать-отметить на ней то, что находится по строчным сигнатурам в html-исходнике. >> >> Это решаемо силами перла? Кто-то может взяться это слабать за разумные бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. >> >> Перл относительно критичен тем, что данный модуль будет заинтегрирован в уже работающий внутренний продукт конторы, а продукту 100 лет и он на древнем пятом портяночном перле. >> >> Yours, >> Dmitry Eremeev >> +7 906 7005771 >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > С уважением > Николай Мишин > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- //wbr, Dmitry L. From lostinbrain на gmail.com Sun Oct 6 23:36:07 2013 From: lostinbrain на gmail.com (=?KOI8-R?B?5dfHxc7JyiD6wdfB0tnLyc4=?=) Date: Mon, 7 Oct 2013 10:36:07 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> Message-ID: Тут отлично подойдет phantomjs ( http://phantomjs.org/ ). На perl можно сделать обертку под него. 7 октября 2013 г., 8:19 пользователь Dmitry L. написал: > +1 к WWW::Mechanize::Firefox. Или какой-нибудь WebDriver. > > А искать я бы стал средствами js в самом браузере (и менять DOM как > вздумается, например как предложил Сергей - обернуть нужный кусок в > span), а потом просто сделать скриншот. > > 2013/10/7 Nikolay Mishin : > > я бы попробовал > > use WWW::Mechanize::Firefox; > > он умеет скриншоты делать > > > https://github.com/gitpan/WWW-Mechanize-Firefox/blob/master/eg/screenshot.pl > > потом > > use GD; > > https://metacpan.org/module/GD > > в общем, думаю, задача вполне решаема, вот только вопрос в > производительности > > > > можете поконкретнее сказать что искать на странице и как это должно > выглядеть в итоге? > > 07.10.2013, 00:24, "Dmitry Eremeev" : > >> Коллеги, здравствуйте! > >> > >> Есть такая задача: на входе url некой страницы и сигнатуры (куски > текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, > срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На > полученной картинке нужно пометить место с найденной сигнатурой (наложить > картинку с галкой, например). > >> > >> Ситуация усложняется тем, что искать нужно не только текст, но и куски > html-кода и в этом случае помечать на картинке места, в которых примерно > находится код. То есть, например, если в сигнатуре будет будет указать на странице-скриншоте место с этой самой картинкой. > >> > >> В общем, надо отрендерить страницу как бы в браузере шириной 1024 и > правильно показать-отметить на ней то, что находится по строчным сигнатурам > в html-исходнике. > >> > >> Это решаемо силами перла? Кто-то может взяться это слабать за разумные > бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. > >> > >> Перл относительно критичен тем, что данный модуль будет заинтегрирован > в уже работающий внутренний продукт конторы, а продукту 100 лет и он на > древнем пятом портяночном перле. > >> > >> Yours, > >> Dmitry Eremeev > >> +7 906 7005771 > >> -- > >> Moscow.pm mailing list > >> moscow-pm на pm.org | http://moscow.pm.org > > > > -- > > С уважением > > Николай Мишин > > > > -- > > Moscow.pm mailing list > > moscow-pm на pm.org | http://moscow.pm.org > > > > -- > //wbr, Dmitry L. > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From creaktive на gmail.com Sun Oct 6 23:47:50 2013 From: creaktive на gmail.com (Stanislaw Pusep) Date: Mon, 7 Oct 2013 08:47:50 +0200 Subject: [Moscow.pm] =?utf-8?b?0JPQu9GD0L/Ri9C5INCy0L7Qv9GA0L7RgQ==?= In-Reply-To: References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> Message-ID: PhantomJS + Selenium::Remote::Driver http://blogs.perl.org/users/robhammond/2013/02/web-scraping-with-perl-phantomjs.html https://metacpan.org/module/Selenium::Remote::Driver понедельник, 7 октября 2013 г. пользователь Евгений Заварыкин писал: > Тут отлично подойдет phantomjs ( http://phantomjs.org/ ). На perl можно > сделать обертку под него. > > > 7 октября 2013 г., 8:19 пользователь Dmitry L. > > написал: > >> +1 к WWW::Mechanize::Firefox. Или какой-нибудь WebDriver. >> >> А искать я бы стал средствами js в самом браузере (и менять DOM как >> вздумается, например как предложил Сергей - обернуть нужный кусок в >> span), а потом просто сделать скриншот. >> >> 2013/10/7 Nikolay Mishin > 'mi на ya.ru');>>: >> > я бы попробовал >> > use WWW::Mechanize::Firefox; >> > он умеет скриншоты делать >> > >> https://github.com/gitpan/WWW-Mechanize-Firefox/blob/master/eg/screenshot.pl >> > потом >> > use GD; >> > https://metacpan.org/module/GD >> > в общем, думаю, задача вполне решаема, вот только вопрос в >> производительности >> > >> > можете поконкретнее сказать что искать на странице и как это должно >> выглядеть в итоге? >> > 07.10.2013, 00:24, "Dmitry Eremeev" >> >: >> >> Коллеги, здравствуйте! >> >> >> >> Есть такая задача: на входе url некой страницы и сигнатуры (куски >> текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, >> срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На >> полученной картинке нужно пометить место с найденной сигнатурой (наложить >> картинку с галкой, например). >> >> >> >> Ситуация усложняется тем, что искать нужно не только текст, но и куски >> html-кода и в этом случае помечать на картинке места, в которых примерно >> находится код. То есть, например, если в сигнатуре будет > будет указать на странице-скриншоте место с этой самой картинкой. >> >> >> >> В общем, надо отрендерить страницу как бы в браузере шириной 1024 и >> правильно показать-отметить на ней то, что находится по строчным сигнатурам >> в html-исходнике. >> >> >> >> Это решаемо силами перла? Кто-то может взяться это слабать за разумные >> бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. >> >> >> >> Перл относительно критичен тем, что данный модуль будет заинтегрирован >> в уже работающий внутренний продукт конторы, а продукту 100 лет и он на >> древнем пятом портяночном перле. >> >> >> >> Yours, >> >> Dmitry Eremeev >> >> +7 906 7005771 >> >> -- >> >> Moscow.pm mailing list >> >> moscow-pm на pm.org | >> http://moscow.pm.org >> > >> > -- >> > С уважением >> > Николай Мишин >> > >> > -- >> > Moscow.pm mailing list >> > moscow-pm на pm.org | >> http://moscow.pm.org >> >> >> >> -- >> //wbr, Dmitry L. >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | >> http://moscow.pm.org >> > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From postmaster на softsearch.ru Sun Oct 6 23:49:47 2013 From: postmaster на softsearch.ru (=?koi8-r?B?7cnIwcnMIO3PzsHbo9c=?=) Date: Mon, 7 Oct 2013 10:49:47 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> Message-ID: <1310214429.20131007104947@softsearch.ru> Здравствуйте. > Тут отлично подойдет phantomjs ( http://phantomjs.org/ ). На perl можно сделать обертку под него. >> +1 к WWW::Mechanize::Firefox. Или какой-нибудь WebDriver. А есть возможность в JS-е как-то определить, что он запущен не в браузере, а в этих эмуляторах браузера? -- С уважением, Михаил mailto:postmaster на softsearch.ru From lostinbrain на gmail.com Mon Oct 7 00:13:00 2013 From: lostinbrain на gmail.com (=?KOI8-R?B?5dfHxc7JyiD6wdfB0tnLyc4=?=) Date: Mon, 7 Oct 2013 11:13:00 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: <1310214429.20131007104947@softsearch.ru> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <232241381092261@web13j.yandex.ru> <1310214429.20131007104947@softsearch.ru> Message-ID: Сомневаюсь, что можно. PhantomJS это webkit с управлением на JS. Webkit сейчас используется в Safari и мобильных браузерах. Если только проверять "чисто" браузерные метрики, которые также можно эмулировать. Flash-ем можно определить. 7 октября 2013 г., 10:49 пользователь Михаил Монашёв < postmaster на softsearch.ru> написал: > Здравствуйте. > > > Тут отлично подойдет phantomjs ( http://phantomjs.org/ ). На perl можно > сделать обертку под него. > > >> +1 к WWW::Mechanize::Firefox. Или какой-нибудь WebDriver. > > А есть возможность в JS-е как-то определить, что он запущен не в > браузере, а в этих эмуляторах браузера? > > -- > С уважением, > Михаил mailto:postmaster на softsearch.ru > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dim0xff на gmail.com Mon Oct 7 00:48:37 2013 From: dim0xff на gmail.com (Dmitry Latin) Date: Mon, 07 Oct 2013 11:48:37 +0400 Subject: [Moscow.pm] =?utf-8?b?0JPQu9GD0L/Ri9C5INCy0L7Qv9GA0L7RgQ==?= In-Reply-To: References: <206111381089797@web13j.yandex.ru> <1310214429.20131007104947@softsearch.ru> Message-ID: <3563860.sxRH6XYU3m@latin.vopmes.mes> > Если только проверять > "чисто" браузерные метрики, которые также можно эмулировать. > Flash-ем можно определить. > Ну это только если PhantomJS использовать (они выпилили поддержку флэша с какой-то версии). Вместо PhantomJS может находиться любой браузер, который поддерживает WebDriver (ну т.е. на сколько я понимаю - любой популярный) -- //wbr, Dmitry L. From vividsnow на gmail.com Mon Oct 7 02:37:58 2013 From: vividsnow на gmail.com (vividsnow) Date: Mon, 07 Oct 2013 13:37:58 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> Message-ID: <525280F6.5010506@gmail.com> вариант через Gtk3::WebKit пример тут: https://gist.github.com/vividsnow/729c90023001927108be (поиск элемента и модификация стиля в 11 строке) - результат: http://imgur.com/hRLwSx3 * как вариант можно eval'ить js - $view->execute_script('...'); если нужно размечать рандомные куски в html коде, то или проксировать запросы или вешать обработчики: http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-resource-load-finished On 10/07/2013 12:23 AM, Dmitry Eremeev wrote: > Коллеги, здравствуйте! > > Есть такая задача: на входе url некой страницы и сигнатуры (куски текста или строки из html-кода). Нужно туда сходить вебкитом, или еще чем, срендерить и вернуть png-скриншот шириной 1024px (высота не ограничена). На полученной картинке нужно пометить место с найденной сигнатурой (наложить картинку с галкой, например). > > Ситуация усложняется тем, что искать нужно не только текст, но и куски html-кода и в этом случае помечать на картинке места, в которых примерно находится код. То есть, например, если в сигнатуре будет > В общем, надо отрендерить страницу как бы в браузере шириной 1024 и правильно показать-отметить на ней то, что находится по строчным сигнатурам в html-исходнике. > > Это решаемо силами перла? Кто-то может взяться это слабать за разумные бабки? Нужно в виде подключаемой либы, что надо из сипана на тачку поставим. > > Перл относительно критичен тем, что данный модуль будет заинтегрирован в уже работающий внутренний продукт конторы, а продукту 100 лет и он на древнем пятом портяночном перле. > > > Yours, > Dmitry Eremeev > +7 906 7005771 > From sergiy.borodych на gmail.com Mon Oct 7 02:54:22 2013 From: sergiy.borodych на gmail.com (Sergiy Borodych) Date: Mon, 7 Oct 2013 12:54:22 +0300 Subject: [Moscow.pm] Ack In-Reply-To: <206111381089797@web13j.yandex.ru> References: <206111381089797@web13j.yandex.ru> Message-ID: Да штука мощная :) От меня, тоже небольшой "юзе кейс": $ ack "TODO\s*:?\s?([^{].+)" --output '$1' lib выбрать и показать все TODO, исключая тестовые labels (TODO: {}) 2013/10/6 Nikolay Mishin > MoscowPM, всем привет, > отличная была пицца и про тесты и авторизацию тоже понравилось, но я не об > этом > все время заходя на страницу Энди Лестера (Andy Lester) > https://metacpan.org/author/PETDANCE > обращал внимание на его приложение ack и все никак не мог понять почему же > оно так популярно, > но оказалось, что это заменитель grep и к тому же отлично работающего под > window(7) > например после установки ак `cpanm App::Ack` : > > > `perl -c script.pl 2>&1 | ack -i "Can't locate ((\w+\/)*(\w+)).pm" > --output=$1 | perl -pe "s{/}{::}g" | cpanm` > > так можно установить зависимости у скрипта, модули, которые у него > прописаны в области use > > скажем в скрипте script.pl есть единственная строчка > use Perl::Critic::More; > > тогда запуская вышеозначенную строчку мы установим автоматически этот > модуль,а > запуская так N-ое количество раз установятся все зависимости, > разве не здорово! > > use Perl or die! > > > -- > С уважением > Николай Мишин > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Sergiy Borodych ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From thecrux на gmail.com Mon Oct 7 07:27:55 2013 From: thecrux на gmail.com (Vladimir Lettiev) Date: Mon, 7 Oct 2013 18:27:55 +0400 Subject: [Moscow.pm] =?koi8-r?b?58zV0NnKINfP0NLP0w==?= In-Reply-To: <525280F6.5010506@gmail.com> References: <206111381089797@web13j.yandex.ru> <27FF0FC2-7091-491E-B913-665BDD077612@eremeev.ru> <525280F6.5010506@gmail.com> Message-ID: <20131007142755.GB8632@mail.truecrux.org> On Mon, Oct 07, 2013 at 01:37:58PM +0400, vividsnow wrote: > вариант через Gtk3::WebKit > > пример тут: https://gist.github.com/vividsnow/729c90023001927108be > (поиск элемента и модификация стиля в 11 строке) - > > результат: http://imgur.com/hRLwSx3 > * как вариант можно eval'ить js - $view->execute_script('...'); > > если нужно размечать рандомные куски в html коде, то или проксировать > запросы или вешать обработчики: > http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-resource-load-finished Если наличие запущенных X-ов нежелательно, то можно запускать такой скрипт через xvfb-run. -- Vladimir Lettiev aka crux ? theCrux на gmail.com From dsimonov на gmail.com Mon Oct 7 12:32:31 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Mon, 7 Oct 2013 23:32:31 +0400 Subject: [Moscow.pm] =?utf-8?b?0JXRidGRINC+0LTQvdCwINCy0LDQutCw0L3RgdC4?= =?utf-8?b?0Y86IEFueUV2ZW50LdGJ0LjQutCw?= Message-ID: Привет!. Есть ещё одна вакансия на удалённого разработчика. Очень важно: вы должны знать и уметь готовить асинхронное программирование. Работать работу, зарплата деньгами (белыми), задачи интересные. Если вы мой враг и вдруг терпеть меня не можете, - стучитесь за вакансией в первую очередь. Мне нужны независимые специалисты, которые круче и умнее меня. Если вы мой друг, - снова стучитесь. Я очень люблю работать с друзьями! Если мы не знакомы или знакомы косвенно, - всё-равно напишите. Возможно в душе вы Фредии Крюгер и развлекаетесь тем, что пьёте кровь младенцев по утрам. Но при этом вы знаете AE лучше Монса (вдруг!), - я сложу к вашим ногам весь мир! --- Dmitriy V. Simonov, Perl & Python programmer ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From andy на shitov.ru Mon Oct 7 12:40:20 2013 From: andy на shitov.ru (Andrew Shitov) Date: Mon, 7 Oct 2013 21:40:20 +0200 Subject: [Moscow.pm] =?utf-8?b?0JXRidGRINC+0LTQvdCwINCy0LDQutCw0L3RgdC4?= =?utf-8?b?0Y86IEFueUV2ZW50LdGJ0LjQutCw?= In-Reply-To: References: Message-ID: > Если вы <...> терпеть меня не можете, Неужели есть такие? 2013/10/7 Dmitry Simonov > Привет!. Есть ещё одна вакансия на удалённого разработчика. Очень важно: > вы должны знать и уметь готовить асинхронное программирование. > > Работать работу, зарплата деньгами (белыми), задачи интересные. > > Если вы мой враг и вдруг терпеть меня не можете, - стучитесь за вакансией > в первую очередь. Мне нужны независимые специалисты, которые круче и умнее > меня. > > Если вы мой друг, - снова стучитесь. Я очень люблю работать с друзьями! > > Если мы не знакомы или знакомы косвенно, - всё-равно напишите. > > Возможно в душе вы Фредии Крюгер и развлекаетесь тем, что пьёте кровь > младенцев по утрам. Но при этом вы знаете AE лучше Монса (вдруг!), - я > сложу к вашим ногам весь мир! > > --- > Dmitriy V. Simonov, > Perl & Python programmer > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Andrew Shitov ______________________________________________________________________ andy на shitov.ru | http://shitov.ru ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From devrow на gmail.com Mon Oct 7 12:42:14 2013 From: devrow на gmail.com (devrow на gmail.com) Date: Mon, 07 Oct 2013 23:42:14 +0400 Subject: [Moscow.pm] =?windows-1251?b?xfm4IO7k7eAg4uDq4O3x6P86IEFueUV2ZW50?= =?windows-1251?b?Lfno6uA=?= In-Reply-To: References: Message-ID: <52530E96.6010800@gmail.com> серия "глупые вопросы" намного интереснее. On 07.10.2013 23:32, Dmitry Simonov wrote: > Привет!. Есть ещё одна вакансия на удалённого разработчика. Очень важно: > вы должны знать и уметь готовить асинхронное программирование. > > Работать работу, зарплата деньгами (белыми), задачи интересные. > > Если вы мой враг и вдруг терпеть меня не можете, - стучитесь за > вакансией в первую очередь. Мне нужны независимые специалисты, которые > круче и умнее меня. > > Если вы мой друг, - снова стучитесь. Я очень люблю работать с друзьями! > > Если мы не знакомы или знакомы косвенно, - всё-равно напишите. > > Возможно в душе вы Фредии Крюгер и развлекаетесь тем, что пьёте кровь > младенцев по утрам. Но при этом вы знаете AE лучше Монса (вдруг!), - я > сложу к вашим ногам весь мир! > > --- > Dmitriy V. Simonov, > Perl & Python programmer > > From dsimonov на gmail.com Mon Oct 7 12:43:40 2013 From: dsimonov на gmail.com (Dmitry Simonov) Date: Mon, 7 Oct 2013 23:43:40 +0400 Subject: [Moscow.pm] =?utf-8?b?0JXRidGRINC+0LTQvdCwINCy0LDQutCw0L3RgdC4?= =?utf-8?b?0Y86IEFueUV2ZW50LdGJ0LjQutCw?= In-Reply-To: References: Message-ID: У меня бурное прошлое, Андрей! И не менее фантастическое будущее :) --- Dmitriy V. Simonov, Perl & Python programmer 2013/10/7 Andrew Shitov > Неужели есть такие? > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From member на linkedin.com Tue Oct 8 05:55:24 2013 From: member на linkedin.com (Pavel Scherbinin via LinkedIn) Date: Tue, 8 Oct 2013 12:55:24 +0000 (UTC) Subject: [Moscow.pm] Eugene, please add me to your LinkedIn network Message-ID: <2020847568.4312246.1381236924444.JavaMail.app@ela4-app0131.prod> LinkedIn ------------ Pavel Scherbinin requested to add you as a connection on LinkedIn: ------------------------------------------ Eugene, I'd like to add you to my professional network on LinkedIn. - Pavel Accept invitation from Pavel Scherbinin http://www.linkedin.com/e/kcw15v-hmj4svrc-k/pXYbgsitMXnSsLzHCoPbx5zhVDB/blk/I716543617_17/3wOtCVFbmdxnSVFbm8JrnpKqlZJrmZzbmNJpjRQnOpBtn9QfmhBt71BoSd1p65Lr6lOfPsNnPsNdzcQdjoNdQALlOQMlAFMqTwLcjgRc30Mcz4Mcz4LrCBxbOYWrSlI/eml-comm_invm-b-in_ac-inv28/?hs=false&tok=2_BAwTKr97h5Y1 View profile of Pavel Scherbinin http://www.linkedin.com/e/kcw15v-hmj4svrc-k/rso/215219586/RoPp/name/14994558_I716543617_17/?hs=false&tok=2_a2koicl7h5Y1 ------------------------------------------ You are receiving Invitation emails. This email was intended for Eugene Toropov. Learn why this is included: http://www.linkedin.com/e/kcw15v-hmj4svrc-k/plh/http%3A%2F%2Fhelp%2Elinkedin%2Ecom%2Fapp%2Fanswers%2Fdetail%2Fa_id%2F4788/-GXI/?hs=false&tok=0WlNvkavh7h5Y1 (c) 2012, LinkedIn Corporation. 2029 Stierlin Ct, Mountain View, CA 94043, USA. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From ksvs1996 на ymail.com Tue Oct 8 20:26:13 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 9 Oct 2013 04:26:13 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= Message-ID: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> Есть приложение, в котором главный процесс и дочерние общаются между собой по сокетам, используя EV модуль. Дочерние процессы получают информацию от главного, делают HTTP запросы, анализируют и возвращают результат главному. В дочерних процессах запросы идут параллельно с использованием либо Net::Curl::Multi, либо AnyEven::HTTP. Все было отлично, пока не понадобилось в главном процессе перед fork, сделать HTTMP запрос. LWP использовать можно, но не хочется. Используемые варианты: 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с Curl - все отлично. Это для проверки. 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий адрес, дочерние работают с AnyEven::HTTP - все нормально. 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом общение между процессами идет: гонял ping для подтверждения того, что EV не завис и система коммуникаций между процессами жива. Может кто-то сталкивался с таким поведением AnyEven::HTTP? Сделал максимально простой вариант для теста. В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все зависит от того, как карты лягут: без первого вызова время выполнения 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед форком. Да и делается ведь EV::break перед форком. Интересно понять причину этого. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Wed Oct 9 00:03:23 2013 From: mi на ya.ru (Nikolay Mishin) Date: Wed, 09 Oct 2013 11:03:23 +0400 Subject: [Moscow.pm] =?koi8-r?b?QW55RXZlbjo6SFRUUCDQxdLFxCDJINDP08zFIGZv?= =?koi8-r?b?cmsg0yDTz8vF1MHNySDNxdbE1SDQ0s/DxdPTwc3J?= In-Reply-To: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> Message-ID: <56581381302203@web12g.yandex.ru> а ссылку на пример поиграться? 09.10.2013, 07:26, "ksvs" : > Есть приложение, в котором главный процесс и дочерние общаются между собой по сокетам, используя EV модуль. > Дочерние процессы получают информацию от главного, делают HTTP запросы, анализируют и возвращают результат главному. В дочерних процессах запросы идут параллельно с использованием либо Net::Curl::Multi, либо AnyEven::HTTP. > > Все было отлично, пока не понадобилось в главном процессе перед fork, сделать HTTMP запрос. LWP использовать можно, но не хочется. > Используемые варианты: > 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с Curl - все отлично. Это для проверки. > 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий адрес, дочерние работают с AnyEven::HTTP - все нормально. > 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом общение между процессами идет: гонял ping для подтверждения того, что EV не завис и система коммуникаций между процессами жива. > > Может кто-то сталкивался с таким поведением AnyEven::HTTP? > > Сделал максимально простой вариант для теста. > В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все зависит от того, как карты лягут: без первого вызова время выполнения 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. > > Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. > Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. > > AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед форком. Да и делается ведь EV::break перед форком. > > Интересно понять причину этого. > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From 0body0 на rambler.ru Wed Oct 9 01:46:48 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 09 Oct 2013 12:46:48 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> Message-ID: <525517F8.7090504@rambler.ru> AnyEvent::HTTP сохраняет коннекты для повторного использования и после fork с ними происходит каша... Попробуй до fork использовать AnyEvent::HTTP с параметром keepalive => 0 09.10.2013 7:26, ksvs пишет: > Есть приложение, в котором главный процесс и дочерние общаются между > собой по сокетам, используя EV модуль. > Дочерние процессы получают информацию от главного, делают HTTP > запросы, анализируют и возвращают результат главному. В дочерних > процессах запросы идут параллельно с использованием либо > Net::Curl::Multi, либо AnyEven::HTTP. > > Все было отлично, пока не понадобилось в главном процессе перед fork, > сделать HTTMP запрос. LWP использовать можно, но не хочется. > Используемые варианты: > 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с > Curl - все отлично. Это для проверки. > 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий > адрес, дочерние работают с AnyEven::HTTP - все нормально. > 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий > адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом > общение между процессами идет: гонял ping для подтверждения того, что > EV не завис и система коммуникаций между процессами жива. > > Может кто-то сталкивался с таким поведением AnyEven::HTTP? > > Сделал максимально простой вариант для теста. > В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе > AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все > зависит от того, как карты лягут: без первого вызова время выполнения > 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. > > > Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. > Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал > просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. > > AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед > форком. Да и делается ведь EV::break перед форком. > > Интересно понять причину этого. > > -- С уважением Анатолий. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From misha на rattler.kiev.ua Wed Oct 9 08:07:17 2013 From: misha на rattler.kiev.ua (Michael Bochkaryov) Date: Wed, 9 Oct 2013 18:07:17 +0300 Subject: [Moscow.pm] =?koi8-r?b?98/azc/Wxc4gzMkgz8LNxc4gU3RvcmFibGUgzcXW?= =?koi8-r?b?xNUgcGVybCA1LjggySA1LjE2IM3BzM/KIMvSz9fYwD8=?= Message-ID: Всем привет! Сорри за дурацкий вопрос, но потребовалось тут задачку решить. Есть стопка системок под perl 5.8, которые общаются с помощью Storable. Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с минимальными изменениями в коде. Обмен двусторонний - собственно, проблема только с записью на 5.16 и последующим чтением на 5.8 Решается ли такое или без влезания в потроха Storable не обойтись? Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) Спасибо! Regards, Michael Bochkaryov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sergey на homenkow.ru Wed Oct 9 08:13:31 2013 From: sergey на homenkow.ru (Sergey Homenkow) Date: Wed, 9 Oct 2013 19:13:31 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQvtC30LzQvtC20LXQvSDQu9C4INC+0LHQvNC1?= =?utf-8?b?0L0gU3RvcmFibGUg0LzQtdC20LTRgyBwZXJsIDUuOCDQuCA1LjE2INC8?= =?utf-8?b?0LDQu9C+0Lkg0LrRgNC+0LLRjNGOPw==?= In-Reply-To: References: Message-ID: А в чём там проблема между версиями? Вроде бы всё совместимо. Кроме различия freeze для 32/64 битных систем. Решается заменой на nfreeze. Ещё и результат становится меньше (затраты на паковку кажется на 5% больше). 9 октября 2013 г., 19:07 пользователь Michael Bochkaryov < misha на rattler.kiev.ua> написал: > > Всем привет! > > Сорри за дурацкий вопрос, но потребовалось тут задачку решить. > Есть стопка системок под perl 5.8, которые общаются с помощью Storable. > Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с минимальными изменениями в коде. > Обмен двусторонний - собственно, проблема только с записью на 5.16 и последующим чтением на 5.8 > > Решается ли такое или без влезания в потроха Storable не обойтись? > > Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) > > Спасибо! > > > Regards, > Michael Bochkaryov > > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- Sergey Homenkow, skype:homenkow_s ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From andrei.protasovitski на gmail.com Wed Oct 9 08:20:05 2013 From: andrei.protasovitski на gmail.com (Andrei) Date: Wed, 9 Oct 2013 17:20:05 +0200 Subject: [Moscow.pm] =?utf-8?b?0JLQvtC30LzQvtC20LXQvSDQu9C4INC+0LHQvNC1?= =?utf-8?b?0L0gU3RvcmFibGUg0LzQtdC20LTRgyBwZXJsIDUuOCDQuCA1LjE2INC8?= =?utf-8?b?0LDQu9C+0Lkg0LrRgNC+0LLRjNGOPw==?= In-Reply-To: References: Message-ID: Мы мучались с этим Storable при переходе с 5.8 на 5.14. В результате плюнули и написали Sereal. http://blog.booking.com/sereal-a-binary-data-serialization-format.html Подробностей не расскажу, но одна из основных проблем при уходе с 5.8. была именно в Storable. -- Андрей. 9 октября 2013 г., 17:07 пользователь Michael Bochkaryov < misha на rattler.kiev.ua> написал: > Всем привет! > > Сорри за дурацкий вопрос, но потребовалось тут задачку решить. > Есть стопка системок под perl 5.8, которые общаются с помощью Storable. > Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с > минимальными изменениями в коде. > Обмен двусторонний - собственно, проблема только с записью на 5.16 и > последующим чтением на 5.8 > > Решается ли такое или без влезания в потроха Storable не обойтись? > > Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) > > Спасибо! > > > Regards, > Michael Bochkaryov > > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Andrei Protasovitski < andrei[dot]protasovitski[at]gmail[dot]com > Diemen, Netherlands ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From misha на rattler.kiev.ua Wed Oct 9 08:50:23 2013 From: misha на rattler.kiev.ua (Michael Bochkaryov) Date: Wed, 9 Oct 2013 18:50:23 +0300 Subject: [Moscow.pm] =?koi8-r?b?98/azc/Wxc4gzMkgz8LNxc4gU3RvcmFibGUgzcXW?= =?koi8-r?b?xNUgcGVybCA1LjggySA1LjE2IM3BzM/KIMvSz9fYwD8=?= In-Reply-To: References: Message-ID: Там бинарный формат малость отличается. Так что при попытке прочитать на 5.8 записанное в 5.16 имеем ругань вида "Storable binary image v2.8 more recent than I am (v2.6) at ......." Естественно, пишется в network-ordered через nfreeeze/nstore, да и вообще это все в 32-битной среде. Regards, Michael Bochkaryov 2013/10/9 Sergey Homenkow > А в чём там проблема между версиями? Вроде бы всё совместимо. > Кроме различия freeze для 32/64 битных систем. > > Решается заменой на nfreeze. > Ещё и результат становится меньше (затраты на паковку кажется на 5% > больше). > > > > > 9 октября 2013 г., 19:07 пользователь Michael Bochkaryov < > misha на rattler.kiev.ua> написал: > > > > > Всем привет! > > > > Сорри за дурацкий вопрос, но потребовалось тут задачку решить. > > Есть стопка системок под perl 5.8, которые общаются с помощью Storable. > > Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с > минимальными изменениями в коде. > > Обмен двусторонний - собственно, проблема только с записью на 5.16 и > последующим чтением на 5.8 > > > > Решается ли такое или без влезания в потроха Storable не обойтись? > > > > Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) > > > > Спасибо! > > > > > > Regards, > > Michael Bochkaryov > > > > > > > > -- > > Moscow.pm mailing list > > moscow-pm на pm.org | http://moscow.pm.org > > > > > > -- > Sergey Homenkow, skype:homenkow_s > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From misha на rattler.kiev.ua Wed Oct 9 08:52:23 2013 From: misha на rattler.kiev.ua (Michael Bochkaryov) Date: Wed, 9 Oct 2013 18:52:23 +0300 Subject: [Moscow.pm] =?koi8-r?b?98/azc/Wxc4gzMkgz8LNxc4gU3RvcmFibGUgzcXW?= =?koi8-r?b?xNUgcGVybCA1LjggySA1LjE2IM3BzM/KIMvSz9fYwD8=?= In-Reply-To: References: Message-ID: Злой ты. Нет, чтобы порадовать рецептом :) Впрочем, похоже, что я накопал уже решение. Regards, Michael Bochkaryov 2013/10/9 Andrei > Мы мучались с этим Storable при переходе с 5.8 на 5.14. В результате > плюнули и написали Sereal. > > http://blog.booking.com/sereal-a-binary-data-serialization-format.html > > Подробностей не расскажу, но одна из основных проблем при уходе с 5.8. > была именно в Storable. > > -- > Андрей. > > > 9 октября 2013 г., 17:07 пользователь Michael Bochkaryov < > misha на rattler.kiev.ua> написал: > >> Всем привет! >> >> Сорри за дурацкий вопрос, но потребовалось тут задачку решить. >> Есть стопка системок под perl 5.8, которые общаются с помощью Storable. >> Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с >> минимальными изменениями в коде. >> Обмен двусторонний - собственно, проблема только с записью на 5.16 и >> последующим чтением на 5.8 >> >> Решается ли такое или без влезания в потроха Storable не обойтись? >> >> Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) >> >> Спасибо! >> >> >> Regards, >> Michael Bochkaryov >> >> >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> >> > > > -- > Andrei Protasovitski > < andrei[dot]protasovitski[at]gmail[dot]com > > Diemen, Netherlands > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From 0body0 на rambler.ru Wed Oct 9 09:07:40 2013 From: 0body0 на rambler.ru (=?KOI8-R?Q?=E1=CE=C1=D4=CF=CC=C9=CA_=E7=D2=C9=DB=C1=C5=D7?=) Date: Wed, 09 Oct 2013 20:07:40 +0400 Subject: [Moscow.pm] =?koi8-r?b?98/azc/Wxc4gzMkgz8LNxc4gU3RvcmFibGUgzcXW?= =?koi8-r?b?xNUgcGVybCA1LjggySA1LjE2IM3BzM/KIMvSz9fYwD8=?= In-Reply-To: References: Message-ID: <52557F4C.6050003@rambler.ru> А чего вы с https://metacpan.org/module/Storable::AMF0 и не сравнили скорость и объём? Два года назад он был самым быстрым паковщиком/распаковщиком. Мы его вовсю использовали в продакшине из-за его скорости. 09.10.2013 19:20, Andrei пишет: > Мы мучались с этим Storable при переходе с 5.8 на 5.14. В результате > плюнули и написали Sereal. > > http://blog.booking.com/sereal-a-binary-data-serialization-format.html > > Подробностей не расскажу, но одна из основных проблем при уходе с 5.8. > была именно в Storable. > > -- > Андрей. > Спасибо! > > > > > > > -- > Andrei Protasovitski > < andrei[dot]protasovitski[at]gmail[dot]com > > Diemen, Netherlands > > Анатолий. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akzhan.abdulin на gmail.com Wed Oct 9 12:38:10 2013 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Wed, 9 Oct 2013 23:38:10 +0400 Subject: [Moscow.pm] =?utf-8?b?0JLQvtC30LzQvtC20LXQvSDQu9C4INC+0LHQvNC1?= =?utf-8?b?0L0gU3RvcmFibGUg0LzQtdC20LTRgyBwZXJsIDUuOCDQuCA1LjE2INC8?= =?utf-8?b?0LDQu9C+0Lkg0LrRgNC+0LLRjNGOPw==?= In-Reply-To: References: Message-ID: Я бы не писал свой формат, а смотрел в сторону JSON::XS, MsgPack или BSON::XS (вроде в составе драйвера MongoDB). 9 октября 2013 г., 19:20 пользователь Andrei написал: > Мы мучались с этим Storable при переходе с 5.8 на 5.14. В результате > плюнули и написали Sereal. > > http://blog.booking.com/sereal-a-binary-data-serialization-format.html > > Подробностей не расскажу, но одна из основных проблем при уходе с 5.8. > была именно в Storable. > > -- > Андрей. > > > 9 октября 2013 г., 17:07 пользователь Michael Bochkaryov < > misha на rattler.kiev.ua> написал: > >> Всем привет! >> >> Сорри за дурацкий вопрос, но потребовалось тут задачку решить. >> Есть стопка системок под perl 5.8, которые общаются с помощью Storable. >> Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с >> минимальными изменениями в коде. >> Обмен двусторонний - собственно, проблема только с записью на 5.16 и >> последующим чтением на 5.8 >> >> Решается ли такое или без влезания в потроха Storable не обойтись? >> >> Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) >> >> Спасибо! >> >> >> Regards, >> Michael Bochkaryov >> >> >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> >> > > > -- > Andrei Protasovitski > < andrei[dot]protasovitski[at]gmail[dot]com > > Diemen, Netherlands > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From andrei.protasovitski на gmail.com Wed Oct 9 14:51:23 2013 From: andrei.protasovitski на gmail.com (Andrei) Date: Wed, 9 Oct 2013 23:51:23 +0200 Subject: [Moscow.pm] =?utf-8?b?0JLQvtC30LzQvtC20LXQvSDQu9C4INC+0LHQvNC1?= =?utf-8?b?0L0gU3RvcmFibGUg0LzQtdC20LTRgyBwZXJsIDUuOCDQuCA1LjE2INC8?= =?utf-8?b?0LDQu9C+0Lkg0LrRgNC+0LLRjNGOPw==?= In-Reply-To: References: Message-ID: Мы смотрели в сторону всего, у каждого сериализатора свои проблемы. Поэтому и появился Sereal. 09.10.2013 21:38 пользователь "Akzhan Abdulin" написал: > Я бы не писал свой формат, а смотрел в сторону JSON::XS, MsgPack или > BSON::XS (вроде в составе драйвера MongoDB). > > > 9 октября 2013 г., 19:20 пользователь Andrei < > andrei.protasovitski на gmail.com> написал: > >> Мы мучались с этим Storable при переходе с 5.8 на 5.14. В результате >> плюнули и написали Sereal. >> >> http://blog.booking.com/sereal-a-binary-data-serialization-format.html >> >> Подробностей не расскажу, но одна из основных проблем при уходе с 5.8. >> была именно в Storable. >> >> -- >> Андрей. >> >> >> 9 октября 2013 г., 17:07 пользователь Michael Bochkaryov < >> misha на rattler.kiev.ua> написал: >> >>> Всем привет! >>> >>> Сорри за дурацкий вопрос, но потребовалось тут задачку решить. >>> Есть стопка системок под perl 5.8, которые общаются с помощью Storable. >>> Нужно обеспечить возможность общаться с другими системами на Perl 5.16 с >>> минимальными изменениями в коде. >>> Обмен двусторонний - собственно, проблема только с записью на 5.16 и >>> последующим чтением на 5.8 >>> >>> Решается ли такое или без влезания в потроха Storable не обойтись? >>> >>> Альтернативные форматы не предлагать - я и сам этот Storable не люблю :-) >>> >>> Спасибо! >>> >>> >>> Regards, >>> Michael Bochkaryov >>> >>> >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org >>> >>> >> >> >> -- >> Andrei Protasovitski >> < andrei[dot]protasovitski[at]gmail[dot]com > >> Diemen, Netherlands >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> >> > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From maxim.vuets на gmail.com Thu Oct 10 05:44:42 2013 From: maxim.vuets на gmail.com (Maxim Vuets) Date: Thu, 10 Oct 2013 14:44:42 +0200 Subject: [Moscow.pm] =?utf-8?b?0JLQvtC30LzQvtC20LXQvSDQu9C4INC+0LHQvNC1?= =?utf-8?b?0L0gU3RvcmFibGUg0LzQtdC20LTRgyBwZXJsIDUuOCDQuCA1LjE2INC8?= =?utf-8?b?0LDQu9C+0Lkg0LrRgNC+0LLRjNGOPw==?= In-Reply-To: References: Message-ID: 2013/10/9 Michael Bochkaryov : > Злой ты. > Нет, чтобы порадовать рецептом :) > > Впрочем, похоже, что я накопал уже решение. Проблема перехода со Storable на Sereal (о котором говорил Андрей) была существенно упрощена при помощи http://search.cpan.org/perldoc?Data::FlexSerializer. From 0body0 на rambler.ru Fri Oct 11 02:00:48 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Fri, 11 Oct 2013 13:00:48 +0400 Subject: [Moscow.pm] =?utf-8?b?0JrQsNC6INGD0LfQvdCw0YLRjCDQv9Cw0LrQtdGC?= =?utf-8?b?INCyINC60L7RgtC+0YDQvtC8INCx0YvQu9CwINC+0L/RgNC10LTQtdC70LU=?= =?utf-8?b?0L0g0LTQsNC90L3Ri9C5INC60L7QtNC10YDQtdGEPw==?= Message-ID: <5257BE40.6070204@rambler.ru> Есть ли какой-нибудь модуль на CPAN с помощью которого можно узнать в каком пакете/файле была определена/создана конкретная подпрограмма/CODEREF? Можно ли определить ещё и его имя? -- С уважением Анатолий. From roman.dev на gmail.com Fri Oct 11 02:21:59 2013 From: roman.dev на gmail.com (Roman Parshin) Date: Fri, 11 Oct 2013 11:21:59 +0200 Subject: [Moscow.pm] =?utf-8?b?0JrQsNC6INGD0LfQvdCw0YLRjCDQv9Cw0LrQtdGC?= =?utf-8?b?INCyINC60L7RgtC+0YDQvtC8INCx0YvQu9CwINC+0L/RgNC10LTQtdC70LU=?= =?utf-8?b?0L0g0LTQsNC90L3Ri9C5INC60L7QtNC10YDQtdGEPw==?= In-Reply-To: <5257BE40.6070204@rambler.ru> References: <5257BE40.6070204@rambler.ru> Message-ID: <5257C337.5070302@gmail.com> http://perldoc.perl.org/functions/caller.html ? Am 11.10.2013 11:00, schrieb Гришаев Анатолий: > Есть ли какой-нибудь модуль на CPAN с помощью которого можно узнать в > каком пакете/файле была определена/создана конкретная > подпрограмма/CODEREF? > > Можно ли определить ещё и его имя? > -- Roman Parshin ? From 0body0 на rambler.ru Fri Oct 11 02:39:44 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Fri, 11 Oct 2013 13:39:44 +0400 Subject: [Moscow.pm] =?utf-8?b?0JrQsNC6INGD0LfQvdCw0YLRjCDQv9Cw0LrQtdGC?= =?utf-8?b?INCyINC60L7RgtC+0YDQvtC8INCx0YvQu9CwINC+0L/RgNC10LTQtdC70LU=?= =?utf-8?b?0L0g0LTQsNC90L3Ri9C5INC60L7QtNC10YDQtdGEPw==?= In-Reply-To: <5257C337.5070302@gmail.com> References: <5257BE40.6070204@rambler.ru> <5257C337.5070302@gmail.com> Message-ID: <5257C760.8020705@rambler.ru> У меня есть массив из CODE, который я хочу отфильтровать по пакету в котором они определены. Дебаггер предоставляет такую информацию: ==================== DB<4> x $a ==================== 0 CODE(0x9524c0c) -> &main::main in row.pl:21-71 ==================== Т.е. дебаггер знает и пакет и файл и строчки в которых данная сабба определена и даже работает на анонимных подпрограммах. Я и хочу это получить только без дебаггера. 11.10.2013 13:21, Roman Parshin пишет: > http://perldoc.perl.org/functions/caller.html ? > > Am 11.10.2013 11:00, schrieb Гришаев Анатолий: >> Есть ли какой-нибудь модуль на CPAN с помощью которого можно узнать в >> каком пакете/файле была определена/создана конкретная >> подпрограмма/CODEREF? >> >> Можно ли определить ещё и его имя? >> > > -- С уважением Анатолий. From khedin на gmail.com Fri Oct 11 03:14:59 2013 From: khedin на gmail.com (Konstantin S. Uvarin) Date: Fri, 11 Oct 2013 13:14:59 +0300 Subject: [Moscow.pm] =?koi8-r?b?68HLINXazsHU2CDQwcvF1CDXIMvP1M/Sz80gwtnM?= =?koi8-r?b?wSDP0NLFxMXMxc4gxMHOztnKIMvPxMXSxcY/?= In-Reply-To: <5257BE40.6070204@rambler.ru> References: <5257BE40.6070204@rambler.ru> Message-ID: Приветствую. https://metacpan.org/module/Sub::Information Не оно? (сам не тестил) 2013/10/11 Гришаев Анатолий <0body0 на rambler.ru> > Есть ли какой-нибудь модуль на CPAN с помощью которого можно узнать в > каком пакете/файле была определена/создана конкретная подпрограмма/CODEREF? > > Можно ли определить ещё и его имя? > > -- > С уважением Анатолий. > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -------------- next part -------------- An HTML attachment was scrubbed... URL: From khedin на gmail.com Fri Oct 11 03:21:02 2013 From: khedin на gmail.com (Konstantin S. Uvarin) Date: Fri, 11 Oct 2013 13:21:02 +0300 Subject: [Moscow.pm] =?koi8-r?b?68HLINXazsHU2CDQwcvF1CDXIMvP1M/Sz80gwtnM?= =?koi8-r?b?wSDP0NLFxMXMxc4gxMHOztnKIMvPxMXSxcY/?= In-Reply-To: References: <5257BE40.6070204@rambler.ru> Message-ID: Sub::Identify - точно работает: perl -we 'use Sub::Identify qw(stash_name); $sub = Foo->getsub; print( stash_name($sub)); package Foo; sub getsub { return sub { print "ok" } }' 2013/10/11 Konstantin S. Uvarin > Приветствую. > > https://metacpan.org/module/Sub::Information > > Не оно? (сам не тестил) > > > 2013/10/11 Гришаев Анатолий <0body0 на rambler.ru> > >> Есть ли какой-нибудь модуль на CPAN с помощью которого можно узнать в >> каком пакете/файле была определена/создана конкретная подпрограмма/CODEREF? >> >> Можно ли определить ещё и его имя? >> >> -- >> С уважением Анатолий. >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From 0body0 на rambler.ru Fri Oct 11 04:18:06 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Fri, 11 Oct 2013 15:18:06 +0400 Subject: [Moscow.pm] =?utf-8?b?0JrQsNC6INGD0LfQvdCw0YLRjCDQv9Cw0LrQtdGC?= =?utf-8?b?INCyINC60L7RgtC+0YDQvtC8INCx0YvQu9CwINC+0L/RgNC10LTQtdC70LU=?= =?utf-8?b?0L0g0LTQsNC90L3Ri9C5INC60L7QtNC10YDQtdGEPw==?= In-Reply-To: References: <5257BE40.6070204@rambler.ru> Message-ID: <5257DE6E.3080905@rambler.ru> Помогло. 11.10.2013 14:21, Konstantin S. Uvarin пишет: > Sub::Identify - точно работает: > > perl -we 'use Sub::Identify qw(stash_name); $sub = Foo->getsub; print( > stash_name($sub)); package Foo; sub getsub { return sub { print "ok" } }' > > -- С уважением Анатолий. From mi на ya.ru Sat Oct 12 16:25:25 2013 From: mi на ya.ru (Nikolay Mishin) Date: Sun, 13 Oct 2013 03:25:25 +0400 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) Message-ID: <103861381620325@web14j.yandex.ru> Вложение в формате HTML было извлечено… URL: From andrey на kostenko.name Sat Oct 12 18:09:33 2013 From: andrey на kostenko.name (=?UTF-8?B?0JDQvdC00YDQtdC5INCa0L7RgdGC0LXQvdC60L4=?=) Date: Sun, 13 Oct 2013 03:09:33 +0200 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) In-Reply-To: <23451440.270895.1381620348821.JavaMail.mobile-sync@vcrq9> References: <23451440.270895.1381620348821.JavaMail.mobile-sync@vcrq9> Message-ID: <8608295692231980491@unknownmsgid> Можно еще в двойные кавычки с эскейпингом взять. Но вообще это одно из множества правил Perl::Critic, которые придуманы чужими для хищников 13 жовт. 2013 о 01:25 Nikolay Mishin написав(ла): > MoscowPM, доброй ночи, > > почему файл с содержанием > > my %hash={'test$test' => 1}; > > не проходит > > perlcritic --single-policy=RequireInterpolation t_crit.pl > выдавая > > String *may* require interpolation at line 1, column 11. See page 51 of PBP. (Severity: 1) > получается, что такую полиси нужно всегда отключать? зачем она тогда была придумана? > > спасибо > > -- > С уважением > Николай Мишин > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From mi на ya.ru Sun Oct 13 01:03:18 2013 From: mi на ya.ru (Nikolay Mishin) Date: Sun, 13 Oct 2013 12:03:18 +0400 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) In-Reply-To: <8608295692231980491@unknownmsgid> References: <23451440.270895.1381620348821.JavaMail.mobile-sync@vcrq9> <8608295692231980491@unknownmsgid> Message-ID: <847551381651398@web29j.yandex.ru> в общем ясно, что теперь это уже не только PBP, но набо плагинов для проверки чего угодно, но это уже мусорка какая-то получается, хотелось бы критицизма кода, чтобы он был наиболее чистым, а здесь получается, что RequireCheckedSyscalls мог бы у себя прописать эту строчку по умолчанию, а RequireInterpolationOfMetachars - вообще нужно выключить, если он специально не включается полдьхзователем.. надо писать на perl5-porters на perl.org или на http://www.irc.perl.org/ https://github.com/mishin/gists/blob/master/.perlcriticrc severity = 1 [InputOutput::RequireCheckedSyscalls] functions = open opendir read readline readdir close closedir [-Documentation::PodSpelling] severity = 5 spell_command = aspell [-ValuesAndExpressions::RequireInterpolationOfMetachars] 13.10.2013, 05:09, "Андрей Костенко" : > Можно еще в двойные кавычки с эскейпингом взять. Но вообще это одно из > множества правил Perl::Critic, которые придуманы чужими для хищников > > 13 жовт. 2013 о 01:25 Nikolay Mishin написав(ла): > >>  MoscowPM, доброй ночи, >> >>  почему файл с содержанием >> >>  my %hash={'test$test' => 1}; >> >>  не проходит >> >>  perlcritic --single-policy=RequireInterpolation t_crit.pl >>  выдавая >> >>  String *may* require interpolation at line 1, column 11.  See page 51 of PBP.  (Severity: 1) >>  получается, что такую полиси нужно всегда отключать? зачем она тогда была придумана? >> >>  спасибо >> >>  -- >>  С уважением >>  Николай Мишин >> >>  -- >>  Moscow.pm mailing list >>  moscow-pm на pm.org | http://moscow.pm.org > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From chesnokov.ilya на gmail.com Sun Oct 13 01:50:51 2013 From: chesnokov.ilya на gmail.com (Ilya Chesnokov) Date: Sun, 13 Oct 2013 12:50:51 +0400 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) In-Reply-To: <103861381620325@web14j.yandex.ru> References: <103861381620325@web14j.yandex.ru> Message-ID: Привет. 13 октября 2013 г., 3:25 пользователь Nikolay Mishin написал: > MoscowPM, доброй ночи, > > почему файл с содержанием > > my %hash={'test$test' => 1}; > > не проходит > > perlcritic --single-policy=RequireInterpolation t_crit.pl > выдавая > > String *may* require interpolation at line 1, column 11. See page 51 of > PBP. (Severity: 1) > получается, что такую полиси нужно всегда отключать? > Можно отключать вообще все нестрогие проверки - с severity меньше определенного уровня. К тому же всегда можно настроить perlcriticrc так, чтобы включались только нужные проверки (в том числе, и не входящие в дефолтную поставку), а ненужные отключались. зачем она тогда была придумана? > Для того, чтобы напомнить программисту, что при одиночных кавычках интерполяции не будет - на тот случай, если он по ошибке использовал их вместо двойных - по-моему, очевидно? ) > > спасибо > > -- > С уважением > Николай Мишин > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Best regards, Ilya Chesnokov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Sun Oct 13 02:00:35 2013 From: mi на ya.ru (Nikolay Mishin) Date: Sun, 13 Oct 2013 13:00:35 +0400 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) In-Reply-To: References: <103861381620325@web14j.yandex.ru> Message-ID: <44441381654835@web17j.yandex.ru> Я понял идею этой проверки и она, наверное, правильная и имеет смысл, чтобы напомнить, что ваши переменные не будут интерполироваться,т.к. они в q{$не_интерполируюсь} или в одинарных 'кавычках' хотя неинтерполяция как раз более безопасное поведение, ну да ладно -ок 2) ну тогда хотя бы параметры RequireCheckedSyscalls могли бы быть зашиты где-то в ее животе [InputOutput::RequireCheckedSyscalls] functions = open opendir read readline readdir close closedir как параметры по умолчанию.. тут противоречие одной критицизмы против другой 13.10.2013, 12:51, "Ilya Chesnokov" : > Привет. > > 13 октября 2013 г., 3:25 пользователь Nikolay Mishin написал: >> MoscowPM, доброй ночи, >> >> почему файл с содержанием >> >> my %hash={'test$test' => 1}; >> >> не проходит >> >> perlcritic --single-policy=RequireInterpolation t_crit.pl >> выдавая >> >> String *may* require interpolation at line 1, column 11.  See page 51 of PBP.  (Severity: 1) >> получается, что такую полиси нужно всегда отключать? > > Можно отключать вообще все нестрогие проверки - с severity меньше определенного уровня. > К тому же всегда можно настроить perlcriticrc так, чтобы включались только нужные проверки (в том числе, и не входящие в дефолтную поставку), а ненужные отключались. > >> зачем она тогда была придумана? > > Для того, чтобы напомнить программисту, что при одиночных кавычках интерполяции не будет - на тот случай, если он по ошибке использовал их вместо двойных - по-моему, очевидно? ) > >> спасибо >> >> -- >> С уважением >> Николай Мишин >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > Best regards, > Ilya Chesnokov > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From me на lelf.lu Sun Oct 13 04:07:28 2013 From: me на lelf.lu (Anton Nikishaev) Date: Sun, 13 Oct 2013 15:07:28 +0400 Subject: [Moscow.pm] String *may* require interpolation See page 51 of PBP. (Severity: 1) In-Reply-To: <103861381620325@web14j.yandex.ru> References: <103861381620325@web14j.yandex.ru> Message-ID: <4058AA30-EC30-4B2F-80E6-F7F270D5EF62@lelf.lu> On Oct 13, 2013, at 3:25 AM, Nikolay Mishin wrote: > MoscowPM, доброй ночи, > > почему файл с содержанием > > my %hash={'test$test' => 1}; > > не проходит > > perlcritic --single-policy=RequireInterpolation t_crit.pl > выдавая > > String *may* require interpolation at line 1, column 11. See page 51 of PBP. (Severity: 1) > получается, что такую полиси нужно всегда отключать? зачем она тогда была придумана? Высосали из. PerlCritic со списками правил по умолчанию ? бесполезен. И на ?page 51 of PBP? ссылаться немного странно, ибо там Use interpolating string delimiters only for strings that actually interpolate. Unexpectedly interpolating a variable in a character string is a common source of errors in Perl programs. So is unexpected non-interpolation. Fortunately, Perl provides two distinct types of strings that make it easy to specify exactly what you want. If you?re creating a literal character string and you definitely intend to interpolate one or more variables into it, use a double-quoted string: my $spam_name = "$title $first_name $surname"; my $pay_rate = "$minimal for maximal work"; If you?re creating a literal character string and not intending to interpolate any variables into it, use a single-quoted string: my $spam_name = 'Dr Lawrence Mwalle'; my $pay_rate = '$minimal for maximal work'; -- lelf -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 455 bytes Desc: Message signed with OpenPGP using GPGMail URL: From mi на ya.ru Mon Oct 14 03:08:39 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 14 Oct 2013 14:08:39 +0400 Subject: [Moscow.pm] Cannot figure out an encoding to use Message-ID: <188921381745319@web9j.yandex.ru> Вложение в формате HTML было извлечено… URL: From daxim на cpan.org Mon Oct 14 03:38:42 2013 From: daxim на cpan.org (Lars =?UTF-8?B?RMmq4bSH4bSE4bSL4bSP4bShIOi/quaLieaWrw==?=) Date: Mon, 14 Oct 2013 12:38:42 +0200 Subject: [Moscow.pm] Cannot figure out an encoding to use In-Reply-To: <188921381745319@web9j.yandex.ru> References: <188921381745319@web9j.yandex.ru> Message-ID: <20131014123842.14a7fc4f@champion.fmtyew.tk> -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: not available URL: From mi на ya.ru Mon Oct 14 04:27:57 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 14 Oct 2013 15:27:57 +0400 Subject: [Moscow.pm] Cannot figure out an encoding to use In-Reply-To: <20131014123842.14a7fc4f@champion.fmtyew.tk> References: <188921381745319@web9j.yandex.ru> <20131014123842.14a7fc4f@champion.fmtyew.tk> Message-ID: <215101381750077@web27g.yandex.ru> thanks, good module, it could be useful 14.10.2013, 14:39, "Lars D?????? ???" : > > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From mi на ya.ru Mon Oct 14 09:44:01 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 14 Oct 2013 20:44:01 +0400 Subject: [Moscow.pm] Cannot figure out an encoding to use In-Reply-To: <215101381750077@web27g.yandex.ru> References: <188921381745319@web9j.yandex.ru> <20131014123842.14a7fc4f@champion.fmtyew.tk> <215101381750077@web27g.yandex.ru> Message-ID: <30091381769041@web10j.yandex.ru> Вложение в формате HTML было извлечено… URL: From somerandomlogin на gmail.com Mon Oct 14 13:19:34 2013 From: somerandomlogin на gmail.com (Jack of Shadows) Date: Tue, 15 Oct 2013 00:19:34 +0400 Subject: [Moscow.pm] =?koi8-r?b?8M/J08sg1dTF3sXLINDBzdHUyQ==?= Message-ID: Господа, подскажите, есть ли что-нибудь хорошее для поиска мест, где течёт память для perl 5.14. Помнится, когда использовал Devel::LeakTrace::Fast, но он перестал собираться то ли под 5.10, то ли под 5.12 в связи с какими-то изменениями в недрах перла. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mialinx на gmail.com Mon Oct 14 20:09:40 2013 From: mialinx на gmail.com (Dmitry Smal) Date: Tue, 15 Oct 2013 07:09:40 +0400 Subject: [Moscow.pm] =?koi8-r?b?8M/J08sg1dTF3sXLINDBzdHUyQ==?= In-Reply-To: References: Message-ID: <525CB1F4.20206@gmail.com> Test::LeakTrace Правда он скорее для тестирования, но для отладки тоже пригодится. On 10/15/2013 12:19 AM, Jack of Shadows wrote: > Господа, подскажите, есть ли что-нибудь хорошее для поиска мест, где > течёт память для perl 5.14. > Помнится, когда использовал Devel::LeakTrace::Fast, но он перестал > собираться то ли под 5.10, то ли под 5.12 в связи с какими-то > изменениями в недрах перла. > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From ali на ali.org.ua Mon Oct 14 20:15:41 2013 From: ali на ali.org.ua (Oleg Alistratov) Date: Tue, 15 Oct 2013 06:15:41 +0300 Subject: [Moscow.pm] =?koi8-r?b?8M/J08sg1dTF3sXLINDBzdHUyQ==?= In-Reply-To: References: Message-ID: <68191381806941@web9g.yandex.ru> Вложение в формате HTML было извлечено… URL: From mi на ya.ru Mon Oct 14 20:28:01 2013 From: mi на ya.ru (Nikolay Mishin) Date: Tue, 15 Oct 2013 07:28:01 +0400 Subject: [Moscow.pm] =?koi8-r?b?8M/J08sg1dTF3sXLINDBzdHUyQ==?= In-Reply-To: References: Message-ID: <14251381807681@web4m.yandex.ru> привет, да, интересная тема use Devel::Peek; perl -e 'print qx{ grep VmSize /proc/$$/status };' https://metacpan.org/module/Devel::Peek#Memory-footprint-debugging http://techblog.net-a-porter.com/2013/02/finding-memory-leaks/ http://letsgetdugg.com/2009/04/19/finding-circular-reference-leaks-in-perl/ http://www.freshports.org/devel/p5-Devel-Peek/ Devel::Peek - Инструмент отладки данных для XSпрограммиста Давайте рассмотрим пример выделении буфера в Perl только один раз, независимо от my() границы, хотя это будет realloc(), если размер больше, чем SvLEN: use Devel::Peek; for (1..3) { foo(); } sub foo { my $sv; Dump $sv; $sv = 'x' x 100_000; $sv = ""; } Вывод: SV = NULL(0x0) at 0x8138008 REFCNT = 1 FLAGS = (PADBUSY,PADMY) SV = PV(0x80e5794) at 0x8138008 REFCNT = 1 FLAGS = (PADBUSY,PADMY) PV = 0x815f808 ""\0 CUR = 0 LEN = 100001 SV = PV(0x80e5794) at 0x8138008 REFCNT = 1 FLAGS = (PADBUSY,PADMY) PV = 0x815f808 ""\0 CUR = 0 Мы видим, что на втором и последующих вызовах $sv уже использует предварительно выделенную память. Таким образом, если вы можете позволить себе больше памяти, больший буфер означает меньше системных вызовов brk() ( syscalls) . Если вы захотите увидеть привер с `strace` вы увидите только вызовы brk() в первый раз во время цикла. Так что это тот случай, когда ваш модуль может предварительно выделить буфер вот так: package Your::Proxy; my $buffer = ' ' x 100_000; $buffer = ""; Теперь только родитель вызывает brk() при запуске сервера, каждый дочерний вызов уже будет иметь выделенный буфер. Просто сбросьте буфер в "" ,когда завершится выполнение процедуры. Примечание: Ранее распределение скаляра таким образом экономит перераспределение (reallocation) в v5.005, но может не сделать так в других версиях. (из http://perl.apache.org/docs/1.0/guide/debug.html#Devel__Peek) 15.10.2013, 00:20, "Jack of Shadows" : > Господа, подскажите, есть ли что-нибудь хорошее для поиска мест, где течёт память для perl 5.14.Помнится, когда использовал Devel::LeakTrace::Fast, но он перестал собираться то ли под 5.10, то ли под 5.12 в связи с какими-то изменениями в недрах перла. > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From ksvs1996 на ymail.com Tue Oct 15 17:23:23 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 01:23:23 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <56581381302203@web12g.yandex.ru> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> Message-ID: <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> Вот упрростил до совсем маленького примерчика. Запускать так: - с первым: time perl ae_http_slow_simple.pl 1 - без:      time perl ae_http_slow_simple.pl 0 Иногда может повести и "с" отработает быстро. У меня "без" отрабатывает до 2 секунд. "С" - обычно 15-30 (хотя может и 2). Знакомый запускал у себя на линоде, так там было пару раз до 5 минут. Вот этот пример. $| = 1; use strict; use warnings; use EV; $EV::FLAG_FORKCHECK = 1; use AnyEvent; use AnyEvent::HTTP; my $URL = "http://www.bing.com"; if ($ARGV[0]) {     my $w = AnyEvent->condvar;     http_get $URL, persistent => 0, keepalive => 0, sub {         print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";         $w->send;     };     $w->recv;     print "...\n"; } use IO::Socket; socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair: $!"; my $kid_pid = fork; defined $kid_pid or die "Can't fork: $!"; unless ($kid_pid) {     close $child;     my $w = AnyEvent->condvar;     my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub {         my $len = sysread $parent, my $buf, 1024;         unless ($len) {             # print"child EXIT\n";             exit;         };         print $buf;         http_get $URL, persistent => 0, sub {             print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";             syswrite $parent, "pong\n";         };     });     $w->recv;     exit; } else {     close $parent;     my $i = 0;     my $w = AnyEvent->condvar;     my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub {         sysread $child, my $buf, 1024;         # print $buf;         if (++$i > 3) {             # print "parent EXIT\n";             exit;         } else {             syswrite $child, "ping $i\n";         }     });     syswrite $child, "ping $i\n";     $w->recv; } On Wednesday, 9 October 2013, 10:03, Nikolay Mishin wrote: а ссылку на пример поиграться? 09.10.2013, 07:26, "ksvs" : > Есть приложение, в котором главный процесс и дочерние общаются между собой по сокетам, используя EV модуль. > Дочерние процессы получают информацию от главного, делают HTTP запросы, анализируют и возвращают результат главному. В дочерних процессах запросы идут параллельно с использованием либо Net::Curl::Multi, либо AnyEven::HTTP. > > Все было отлично, пока не понадобилось в главном процессе перед fork, сделать HTTMP запрос. LWP использовать можно, но не хочется. > Используемые варианты: > 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с Curl - все отлично. Это для проверки. > 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий адрес, дочерние работают с AnyEven::HTTP - все нормально. > 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом общение между процессами идет: гонял ping для подтверждения того, что EV не завис и система коммуникаций между процессами жива. > > Может кто-то сталкивался с таким поведением AnyEven::HTTP? > > Сделал максимально простой вариант для теста. > В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все зависит от того, как карты лягут: без первого вызова время выполнения 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. > > Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. > Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. > > AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед форком. Да и делается ведь EV::break перед форком. > > Интересно понять причину этого. > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин -- Moscow.pm mailing list moscow-pm на pm.org | http://moscow.pm.org From ksvs1996 на ymail.com Tue Oct 15 17:25:10 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 01:25:10 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <525517F8.7090504@rambler.ru> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525517F8.7090504@rambler.ru> Message-ID: <1381883110.57875.YahooMailNeo@web171506.mail.ir2.yahoo.com> Так в последнем предложении было сказано, что это учитывается. On Wednesday, 9 October 2013, 11:47, Гришаев Анатолий <0body0 на rambler.ru> wrote: AnyEvent::HTTP сохраняет коннекты для повторного использования и после fork с ними происходит каша... Попробуй до fork использовать AnyEvent::HTTP с параметром keepalive => 0 09.10.2013 7:26, ksvs пишет: Есть приложение, в котором главный процесс и дочерние общаются между собой по сокетам, используя EV модуль. >Дочерние процессы получают информацию от главного, делают HTTP запросы, анализируют и возвращают результат главному. В дочерних процессах запросы идут параллельно с использованием либо Net::Curl::Multi, либо AnyEven::HTTP. > >Все было отлично, пока не понадобилось в главном процессе перед fork, сделать HTTMP запрос. LWP использовать можно, но не хочется. >Используемые варианты: >1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с Curl - все отлично. Это для проверки. >2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий адрес, дочерние работают с AnyEven::HTTP - все нормально. >3. Делаем первый запрос при помощи AnyEven::HTTP на существующий адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом общение между процессами идет: гонял ping для подтверждения того, что EV не завис и система коммуникаций между процессами жива. > >Может кто-то сталкивался с таким поведением AnyEven::HTTP? > >Сделал максимально простой вариант для теста. >В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все зависит от того, как карты лягут: без первого вызова время выполнения 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. > > >Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. >Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. > >AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед форком. Да и делается ведь EV::break перед форком. > >Интересно понять причину этого. > > -- С уважением Анатолий. -- Moscow.pm mailing list moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From 0body0 на rambler.ru Wed Oct 16 02:19:23 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 16 Oct 2013 13:19:23 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> Message-ID: <525E5A1B.2060502@rambler.ru> Тут виноват не AnyEvent::HTTP, а AnyEvent::DNS, который используетcя AnyEvent::HTTP. Если чуть изменить ваш примерчик и выкинуть в нем резоливинг www.bing.com, например так: 1) добавить сабу. my $tcp_connect = sub { use AnyEvent::Socket (); $_[0] = "204.79.197.200"; # ( www.bing.com => 204.79.197.200 ) &AnyEvent::Socket::tcp_connect( @_ ); }; 2) и заменить в нем ============================= http_get $URL, persistent => 0, sub { print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; syswrite $parent, "pong\n"; }; ============================= на http_get $URL, persistent => 0, tcp_connect => $tcp_connect, sub { print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; syswrite $parent, "pong\n"; }; ============================= то пример начинает работать. Возможно AnyEvent::DNS хранит сокеты внутри себя... 16.10.2013 4:23, ksvs пишет: > Вот упрростил до совсем маленького примерчика. > Запускать так: > - с первым: time perl ae_http_slow_simple.pl 1 > - без: time perl ae_http_slow_simple.pl 0 > > Иногда может повести и "с" отработает быстро. > У меня "без" отрабатывает до 2 секунд. "С" - обычно 15-30 (хотя может и 2). > > Знакомый запускал у себя на линоде, так там было пару раз до 5 минут. > > Вот этот пример. > > > $| = 1; > use strict; > use warnings; > > use EV; > $EV::FLAG_FORKCHECK = 1; > use AnyEvent; > use AnyEvent::HTTP; > > my $URL = "http://www.bing.com"; > > if ($ARGV[0]) { > my $w = AnyEvent->condvar; > http_get $URL, persistent => 0, keepalive => 0, sub { > print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; > $w->send; > }; > $w->recv; > print "...\n"; > } > > use IO::Socket; > socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair: $!"; > > my $kid_pid = fork; > defined $kid_pid or die "Can't fork: $!"; > > unless ($kid_pid) { > close $child; > my $w = AnyEvent->condvar; > my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub { > my $len = sysread $parent, my $buf, 1024; > unless ($len) { > # print"child EXIT\n"; > exit; > }; > print $buf; > > http_get $URL, persistent => 0, sub { > print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; > syswrite $parent, "pong\n"; > }; > }); > $w->recv; > exit; > } else { > close $parent; > my $i = 0; > my $w = AnyEvent->condvar; > my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub { > sysread $child, my $buf, 1024; > # print $buf; > if (++$i > 3) { > # print "parent EXIT\n"; > exit; > } else { > syswrite $child, "ping $i\n"; > } > }); > syswrite $child, "ping $i\n"; > $w->recv; > } > > > > > > On Wednesday, 9 October 2013, 10:03, Nikolay Mishin wrote: > а ссылку на пример поиграться? > > > 09.10.2013, 07:26, "ksvs" : >> Есть приложение, в котором главный процесс и дочерние общаются между собой по сокетам, используя EV модуль. >> Дочерние процессы получают информацию от главного, делают HTTP запросы, анализируют и возвращают результат главному. В дочерних процессах запросы идут параллельно с использованием либо Net::Curl::Multi, либо AnyEven::HTTP. >> >> Все было отлично, пока не понадобилось в главном процессе перед fork, сделать HTTMP запрос. LWP использовать можно, но не хочется. >> Используемые варианты: >> 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с Curl - все отлично. Это для проверки. >> 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий адрес, дочерние работают с AnyEven::HTTP - все нормально. >> 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом общение между процессами идет: гонял ping для подтверждения того, что EV не завис и система коммуникаций между процессами жива. >> >> Может кто-то сталкивался с таким поведением AnyEven::HTTP? >> >> Сделал максимально простой вариант для теста. >> В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все зависит от того, как карты лягут: без первого вызова время выполнения 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд. >> >> Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP. >> Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал просто открытие сокета, EV::WRITE, EV::READ - все работает отлично. >> >> AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед форком. Да и делается ведь EV::break перед форком. >> >> Интересно понять причину этого. >> >> , >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org -- С уважением Анатолий. From 0body0 на rambler.ru Wed Oct 16 03:02:32 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 16 Oct 2013 14:02:32 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> Message-ID: <525E6438.7030103@rambler.ru> Перед форком или сразу после нужно очистить кэш DNS: $AnyEvent::DNS::RESOLVER = undef; Вот уже работающий пример: ============================== $| = 1; use strict; use warnings; use AnyEvent::DNS (); use EV; $EV::FLAG_FORKCHECK = 1; use AnyEvent; use AnyEvent::HTTP; my $URL = "http://www.bing.com"; if ($ARGV[0]) { my $w = AnyEvent->condvar; http_get $URL, persistent => 0, keepalive => 0, sub { print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; $w->send; }; $w->recv; print "...\n"; } use IO::Socket; socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair: $!"; $AnyEvent::DNS::RESOLVER = undef; my $kid_pid = fork; defined $kid_pid or die "Can't fork: $!"; unless ($kid_pid) { close $child; my $w = AnyEvent->condvar; my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub { my $len = sysread $parent, my $buf, 1024; unless ($len) { # print"child EXIT\n"; exit; }; print $buf; http_get $URL, persistent => 0, sub { print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; syswrite $parent, "pong\n"; }; }); $w->recv; exit; } else { close $parent; my $i = 0; my $w = AnyEvent->condvar; my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub { sysread $child, my $buf, 1024; # print $buf; if (++$i > 3) { # print "parent EXIT\n"; exit; } else { syswrite $child, "ping $i\n"; } }); syswrite $child, "ping $i\n"; $w->recv; } ============================== -- С уважением Анатолий. From ksvs1996 на ymail.com Wed Oct 16 03:46:02 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 11:46:02 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <525E6438.7030103@rambler.ru> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> Message-ID: <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> А у меня зависает. On Wednesday, 16 October 2013, 13:02, Гришаев Анатолий <0body0 на rambler.ru> wrote: Перед форком или сразу после нужно очистить кэш DNS: $AnyEvent::DNS::RESOLVER = undef; Вот уже работающий пример: ============================== $| = 1; use strict; use warnings; use AnyEvent::DNS (); use EV; $EV::FLAG_FORKCHECK = 1; use AnyEvent; use AnyEvent::HTTP; my $URL = "http://www.bing.com"; if ($ARGV[0]) {     my $w = AnyEvent->condvar;     http_get $URL, persistent => 0, keepalive => 0, sub {         print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";         $w->send;     };     $w->recv;     print "...\n"; } use IO::Socket; socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die "socketpair: $!"; $AnyEvent::DNS::RESOLVER = undef; my $kid_pid = fork; defined $kid_pid or die "Can't fork: $!"; unless ($kid_pid) {     close $child;     my $w = AnyEvent->condvar;     my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub {         my $len = sysread $parent, my $buf, 1024;         unless ($len) {             # print"child EXIT\n";             exit;         };         print $buf;         http_get $URL, persistent => 0, sub {             print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n";             syswrite $parent, "pong\n";         };     });     $w->recv;     exit; } else {     close $parent;     my $i = 0;     my $w = AnyEvent->condvar;     my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub {         sysread $child, my $buf, 1024;         # print $buf;         if (++$i > 3) {             # print "parent EXIT\n";             exit;         } else {             syswrite $child, "ping $i\n";         }     });     syswrite $child, "ping $i\n";     $w->recv; } ============================== -- С уважением Анатолий. -- Moscow.pm mailing list moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From 0body0 на rambler.ru Wed Oct 16 03:50:39 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 16 Oct 2013 14:50:39 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> Message-ID: <525E6F7F.1040703@rambler.ru> А если исключить ресолвер как в предыдущем письме? Тоже зависает? 16.10.2013 14:46, ksvs пишет: > А у меня зависает. > > > > On Wednesday, 16 October 2013, 13:02, Гришаев Анатолий > <0body0 на rambler.ru> wrote: > Перед форком или сразу после нужно очистить кэш DNS: > $AnyEvent::DNS::RESOLVER = undef; > > > Вот уже работающий пример: > ============================== > $| = 1; > use strict; > use warnings; > use AnyEvent::DNS (); > > use EV; > $EV::FLAG_FORKCHECK = 1; > use AnyEvent; > use AnyEvent::HTTP; > > my $URL = "http://www.bing.com "; > > if ($ARGV[0]) { > my $w = AnyEvent->condvar; > http_get $URL, persistent => 0, keepalive => 0, sub { > print ". $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; > $w->send; > }; > $w->recv; > print "...\n"; > } > > use IO::Socket; > socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or > die "socketpair: $!"; > > $AnyEvent::DNS::RESOLVER = undef; > my $kid_pid = fork; > defined $kid_pid or die "Can't fork: $!"; > > unless ($kid_pid) { > close $child; > my $w = AnyEvent->condvar; > my $wr = AnyEvent->io(fh => $parent, poll => "r", cb => sub { > my $len = sysread $parent, my $buf, 1024; > unless ($len) { > # print"child EXIT\n"; > exit; > }; > print $buf; > > http_get $URL, persistent => 0, sub { > print "+ $_[1]{Status} $_[1]{Reason} $_[1]{URL}; $$\n"; > syswrite $parent, "pong\n"; > }; > }); > $w->recv; > exit; > } else { > close $parent; > my $i = 0; > my $w = AnyEvent->condvar; > my $wr = AnyEvent->io(fh => $child, poll => "r", cb => sub { > sysread $child, my $buf, 1024; > # print $buf; > if (++$i > 3) { > # print "parent EXIT\n"; > exit; > } else { > syswrite $child, "ping $i\n"; > } > }); > syswrite $child, "ping $i\n"; > $w->recv; > } > > ============================== > > > -- > С уважением Анатолий. > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > > > > -- С уважением Анатолий. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From 0body0 на rambler.ru Wed Oct 16 04:47:47 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 16 Oct 2013 15:47:47 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> Message-ID: <525E7CE3.3060404@rambler.ru> Либо тебе не повезло, либо у тебя забавные библиотеки: Проверил на FreeBSD + Linux с perl 5.10, 5.14, 5.16 с EV и без него. Со строчкой работает, без строчки нет. 16.10.2013 14:46, ksvs пишет: > А у меня зависает. > > -- С уважением Анатолий. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From ksvs1996 на ymail.com Wed Oct 16 05:12:42 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 13:12:42 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <525E7CE3.3060404@rambler.ru> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> <525E7CE3.3060404@rambler.ru> Message-ID: <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> FreeBSD 9.2-RELEASE Perl v5.14.4 EV 4.15 AnyEvent 7.04 AnyEvent::HTTP 2.15 Мое одно письмо на модерацию попало. Вот оно. Да, работает (если исключить RESOLVER). А ведь была сначала мысль, что с dns у него проблема, но поститал, что раз      сказал persistent => 0, то  AnyEvent::HTTP должен дальше и сказать тоже не      сохранять открытые сокеты. :-)                                                  А почему в netstat не видно открытого сокета?                                   Но как поремонтироваь это - не знаю.                                            Перед fork делаю      {     ...     my $rs = $AnyEvent::DNS::RESOLVER;                                              $$rs{rw4} = $$rs{rw6} = undef;                                                  undef $AnyEvent::DNS::RESOLVER; }                                           Отрегистрируем обработчики и уничтожаем resolver: сокеты закроются, так как my на них. Не помогает.          On Wednesday, 16 October 2013, 14:47, Гришаев Анатолий <0body0 на rambler.ru> wrote: Либо тебе не повезло, либо у тебя забавные библиотеки: Проверил на FreeBSD +  Linux с  perl 5.10, 5.14, 5.16 с EV и без него. Со строчкой работает, без строчки нет. From 0body0 на rambler.ru Wed Oct 16 06:41:44 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JPRgNC40YjQsNC10LIg0JDQvdCw0YLQvtC70LjQuQ==?=) Date: Wed, 16 Oct 2013 17:41:44 +0400 Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> <525E7CE3.3060404@rambler.ru> <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> Message-ID: <525E9798.5040702@rambler.ru> Я в AnyEvent::DNS глубоко не влазил, а твой случай у меня не подтверждается. Может только PERL_ANYEVENT_MODEL=EV чуть медленнее отрабатывает чем PERL_ANYEVENT_MODEL=Perl, да и то в пределах полсекунды. А на всякий случай высылаю версии модулей с которыми у меня работает, может поможет :) Самое близкая к тебе конфигурация, которая работает у меня вот FreeBSD 7.2-RELEASE-p4 Perl v5.10.1 EV 4.11 AnyEvent 7.04 AnyEvent::HTTP 2.15 А вот линукс Linux 3.2.0-45-generic #70-Ubuntu SMP Wed May 29 20:11:31 UTC 2013 i686 i686 i386 GNU/Linux Perl v5.14.2 EV 4.03 AnyEvent 6.12 AnyEvent::HTTP 2.13 Есть еще FreeBSD 8, но там EV 4.15 AnyEvent 6.12 AnyEvent::HTTP 2.13 Perl v5.16.3 16.10.2013 16:12, ksvs пишет: > > FreeBSD 9.2-RELEASE > Perl v5.14.4 > EV 4.15 > AnyEvent 7.04 > AnyEvent::HTTP 2.15 > > > Мое одно письмо на модерацию попало. > Вот оно. > > Да, работает (если исключить RESOLVER). > А ведь была сначала мысль, что с dns у него проблема, но поститал, что раз > сказал persistent => 0, то AnyEvent::HTTP должен дальше и сказать тоже не > сохранять открытые сокеты. :-) > > А почему в netstat не видно открытого сокета? > > Но как поремонтироваь это - не знаю. > Перед fork делаю > > > { > ... > > my $rs = $AnyEvent::DNS::RESOLVER; > $$rs{rw4} = $$rs{rw6} = undef; > undef $AnyEvent::DNS::RESOLVER; > > } > > Отрегистрируем обработчики и уничтожаем resolver: сокеты закроются, так как my на них. > Не помогает. > > > On Wednesday, 16 October 2013, 14:47, Гришаев Анатолий <0body0 на rambler.ru> wrote: > > Либо тебе не повезло, > либо у тебя забавные библиотеки: > > Проверил на FreeBSD + Linux > с perl 5.10, 5.14, 5.16 > с EV и без него. > > Со строчкой работает, > без строчки нет. > -- С уважением Анатолий. From mons на cpan.org Wed Oct 16 07:17:07 2013 From: mons на cpan.org (Mons Anderson) Date: Wed, 16 Oct 2013 18:17:07 +0400 Subject: [Moscow.pm] =?koi8-r?b?QW55RXZlbjo6SFRUUCDQxdLFxCDJINDP08zFIGZv?= =?koi8-r?b?cmsg0yDTz8vF1MHNySDNxdbE1SDQ0s/DxdPTwc3J?= In-Reply-To: <525E9798.5040702@rambler.ru> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> <525E7CE3.3060404@rambler.ru> <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> <525E9798.5040702@rambler.ru> Message-ID: Подтверждаю, проблема с форками в AnyEvent::DNS. Сокет там UDP'шный. у нас решается так: use AnyEvent::DNS (); BEGIN { no warnings 'redefine'; my $RESOLVER; my $FORPID = 0; my $res = \&AnyEvent::DNS::resolver; *AnyEvent::DNS::resolver = sub () { undef $RESOLVER if $FORPID != $$; $RESOLVER || do { #warn "Create overriden resolver for $$. previous was for $FORPID"; undef $AnyEvent::DNS::RESOLVER; local $AnyEvent::DNS::RESOLVER; $FORPID = $$; $RESOLVER = AnyEvent::DNS->$res(); }; }; # для дебага: my $new = \&AnyEvent::DNS::new; *AnyEvent::DNS::new = sub { Carp::cluck( "$$: Creating DNS resolver" ); goto &$new; }; } On 16.10.2013, at 17:41, Гришаев Анатолий <0body0 на rambler.ru> wrote: > > Я в AnyEvent::DNS глубоко не влазил, а твой случай у меня не подтверждается. > Может только PERL_ANYEVENT_MODEL=EV чуть медленнее отрабатывает чем PERL_ANYEVENT_MODEL=Perl, да и то в пределах полсекунды. > А на всякий случай высылаю версии модулей с которыми у меня работает, может поможет :) > > > Самое близкая к тебе конфигурация, которая работает у меня вот > FreeBSD 7.2-RELEASE-p4 > Perl v5.10.1 > EV 4.11 > AnyEvent 7.04 > AnyEvent::HTTP 2.15 > > А вот линукс > Linux 3.2.0-45-generic #70-Ubuntu SMP Wed May 29 20:11:31 UTC 2013 i686 i686 i386 GNU/Linux > Perl v5.14.2 > EV 4.03 > AnyEvent 6.12 > AnyEvent::HTTP 2.13 > > Есть еще FreeBSD 8, но там > EV 4.15 > AnyEvent 6.12 > AnyEvent::HTTP 2.13 > Perl v5.16.3 > > > 16.10.2013 16:12, ksvs пишет: >> >> FreeBSD 9.2-RELEASE >> Perl v5.14.4 >> EV 4.15 >> AnyEvent 7.04 >> AnyEvent::HTTP 2.15 >> >> >> Мое одно письмо на модерацию попало. >> Вот оно. >> >> Да, работает (если исключить RESOLVER). >> А ведь была сначала мысль, что с dns у него проблема, но поститал, что раз >> сказал persistent => 0, то AnyEvent::HTTP должен дальше и сказать тоже не >> сохранять открытые сокеты. :-) >> >> А почему в netstat не видно открытого сокета? >> >> Но как поремонтироваь это - не знаю. >> Перед fork делаю >> >> >> { >> ... >> >> my $rs = $AnyEvent::DNS::RESOLVER; >> $$rs{rw4} = $$rs{rw6} = undef; >> undef $AnyEvent::DNS::RESOLVER; >> >> } >> >> Отрегистрируем обработчики и уничтожаем resolver: сокеты закроются, так как my на них. >> Не помогает. >> >> >> On Wednesday, 16 October 2013, 14:47, Гришаев Анатолий <0body0 на rambler.ru> wrote: >> >> Либо тебе не повезло, >> либо у тебя забавные библиотеки: >> >> Проверил на FreeBSD + Linux >> с perl 5.10, 5.14, 5.16 >> с EV и без него. >> >> Со строчкой работает, >> без строчки нет. >> > > > -- > С уважением Анатолий. > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From ksvs1996 на ymail.com Wed Oct 16 08:05:48 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 16:05:48 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> <525E7CE3.3060404@rambler.ru> <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> <525E9798.5040702@rambler.ru> Message-ID: <1381935948.14489.YahooMailNeo@web171505.mail.ir2.yahoo.com> Зупусти с этим переопределением. Судя, по нижеприведенномо логу резолвинг прошел. Или нет? А в чем именно проблема? Почему так падает скорость? On Wednesday, 16 October 2013, 17:17, Mons Anderson wrote: Подтверждаю, проблема с форками в AnyEvent::DNS. Сокет там UDP'шный. у нас решается так: use AnyEvent::DNS ();         BEGIN {     no warnings 'redefine';     my $RESOLVER;     my $FORPID = 0;     my $res = \&AnyEvent::DNS::resolver;     *AnyEvent::DNS::resolver = sub () {         undef $RESOLVER if $FORPID != $$;         $RESOLVER || do {             #warn "Create overriden resolver for $$. previous was for $FORPID";             undef $AnyEvent::DNS::RESOLVER;             local $AnyEvent::DNS::RESOLVER;             $FORPID = $$;             $RESOLVER = AnyEvent::DNS->$res();         };     };     # для дебага:     my $new = \&AnyEvent::DNS::new;     *AnyEvent::DNS::new = sub {         Carp::cluck( "$$: Creating DNS resolver" );         goto &$new;     }; } ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: log Type: application/octet-stream Size: 3506 bytes Desc: отсутствует URL: From ksvs1996 на ymail.com Wed Oct 16 08:13:04 2013 From: ksvs1996 на ymail.com (ksvs) Date: Wed, 16 Oct 2013 16:13:04 +0100 (BST) Subject: [Moscow.pm] =?utf-8?b?QW55RXZlbjo6SFRUUCDQv9C10YDQtdC0INC4INC/?= =?utf-8?b?0L7RgdC70LUgZm9yayDRgSDRgdC+0LrQtdGC0LDQvNC4INC80LXQttC00YMg?= =?utf-8?b?0L/RgNC+0YbQtdGB0YHQsNC80Lg=?= In-Reply-To: <1381935948.14489.YahooMailNeo@web171505.mail.ir2.yahoo.com> References: <1381289173.31699.YahooMailNeo@web171503.mail.ir2.yahoo.com> <56581381302203@web12g.yandex.ru> <1381883003.83279.YahooMailNeo@web171503.mail.ir2.yahoo.com> <525E6438.7030103@rambler.ru> <1381920362.1855.YahooMailNeo@web171504.mail.ir2.yahoo.com> <525E7CE3.3060404@rambler.ru> <1381925562.16986.YahooMailNeo@web171502.mail.ir2.yahoo.com> <525E9798.5040702@rambler.ru> <1381935948.14489.YahooMailNeo@web171505.mail.ir2.yahoo.com> Message-ID: <1381936384.18974.YahooMailNeo@web171506.mail.ir2.yahoo.com> то есть запустил On Wednesday, 16 October 2013, 18:06, ksvs wrote: Зупусти с этим переопределением. Судя, по нижеприведенномо логу резолвинг прошел. Или нет? А в чем именно проблема? Почему так падает скорость? On Wednesday, 16 October 2013, 17:17, Mons Anderson wrote: Подтверждаю, проблема с форками в AnyEvent::DNS. Сокет там UDP'шный. у нас решается так: use AnyEvent::DNS ();         BEGIN {     no warnings 'redefine';     my $RESOLVER;     my $FORPID = 0;     my $res = \&AnyEvent::DNS::resolver;     *AnyEvent::DNS::resolver = sub () {         undef $RESOLVER if $FORPID != $$;         $RESOLVER || do {             #warn "Create overriden resolver for $$. previous was for $FORPID";             undef $AnyEvent::DNS::RESOLVER;             local $AnyEvent::DNS::RESOLVER;             $FORPID = $$;             $RESOLVER = AnyEvent::DNS->$res();         };     };     # для дебага:     my $new = \&AnyEvent::DNS::new;     *AnyEvent::DNS::new = sub {         Carp::cluck( "$$: Creating DNS resolver" );         goto &$new;     }; } -- Moscow.pm mailing list moscow-pm на pm.org | http://moscow.pm.org From i.petro.77.00 на gmail.com Wed Oct 16 15:25:18 2013 From: i.petro.77.00 на gmail.com (Ivan Petrov) Date: Thu, 17 Oct 2013 02:25:18 +0400 Subject: [Moscow.pm] =?utf-8?b?TW91c2Ug0YXQvtGH0YMg0YHRgtGA0LDQvdC90L4=?= =?utf-8?b?0LPQvg==?= Message-ID: <20131016222518.GF24242@vdsl.uvw.ru> есть допустим объект package User; use Mouse; has name => is => 'ro', isa => 'Str'; далее роль у него составляющая некие списки юзеров with 'User::List'; ... package User::List; use Mouse::Role; sub list { ... возвратит список пользователей } sub list_by_some { ... возвратит еще какой-то список } ну понятно далее у юзеров могут быть допустим заказы. всю работу с заказами выносим в отдельную роль (тут в примере работа со списками заказов) package User::Order::List; use Mouse::Role; sub list_orders { ... возвратит список заказов пользователя } или игрушки package User::Toy::List; use Mouse::Role; sub list_toys { ... возвратит игрушки пользователя } Ну вот, в большом проекте накапливается у некоторых сущностей много разных ролей (или иерархия наследования, тут по разному можно смотреть, это непринципиально). и хочется писать далее не $user->list_orders; $user->list_toys; а организовать нечто вроде неймспейсов ролевых. то есть я хочу чтобы можно было написать ns 'User::Order::List' => as => 'orders'; ns 'User::Toy::List' => as => 'toys'; в основном классе и далее чтобы можно было обращаться к его методам так: $user->orders->list; $user->toys->list; то есть очень похоже на контейнер, но это не контейнер. это неймспейс. функция $user->orders->list в качестве self должна получать объект $user. то есть has things => is => 'ro', isa => 'User::Thing::List'; тут не подходит. можно прослойку сделать на базе has конечно, но я боюсь сильно просесть на бенчмарках. что еще хочется: - has внутри namespace - в идеале наследования какого-то всей этой "хрени с которой взлетать", но в целом наследование мы почти не применяем в Mouse, поэтому не сильно актуально я примерно представляю как такое написать, но 1. может быть кто-то писал уже подобное? дайте ссылку 2. сейчас сильно занят другими проектами, но если бы кто взялся мог бы профинансировать появление подобного модуля на cpan :) с документацией, тестами и сравнительными бенчмарками (сравниваем с Mouse::Role). Пусть бенчмаркает вдвое хуже метода Mouse::Role, но не хуже чем вдвое. Я думаю можно сделать чтобы бенчмаркало соизмеримо. кто что думает? From chesnokov.ilya на gmail.com Thu Oct 17 03:35:48 2013 From: chesnokov.ilya на gmail.com (Ilya Chesnokov) Date: Thu, 17 Oct 2013 14:35:48 +0400 Subject: [Moscow.pm] =?utf-8?b?TW91c2Ug0YXQvtGH0YMg0YHRgtGA0LDQvdC90L4=?= =?utf-8?b?0LPQvg==?= In-Reply-To: <20131016222518.GF24242@vdsl.uvw.ru> References: <20131016222518.GF24242@vdsl.uvw.ru> Message-ID: 17 октября 2013 г., 2:25 пользователь Ivan Petrov написал: > есть допустим объект > > > package User; > use Mouse; > has name => is => 'ro', isa => 'Str'; > > далее роль у него составляющая некие списки юзеров > > with 'User::List'; > > ... > > package User::List; > use Mouse::Role; > > sub list { > ... возвратит список пользователей > } > > sub list_by_some { > ... возвратит еще какой-то список > } > > ну понятно > > далее у юзеров могут быть допустим заказы. всю работу с заказами > выносим в отдельную роль (тут в примере работа со списками заказов) > > > package User::Order::List; > use Mouse::Role; > > sub list_orders { > ... возвратит список заказов пользователя > } > > или игрушки > > package User::Toy::List; > use Mouse::Role; > > sub list_toys { > ... возвратит игрушки пользователя > } > > Ну вот, в большом проекте накапливается у некоторых сущностей много > разных ролей (или иерархия наследования, тут по разному можно > смотреть, это непринципиально). > > и хочется писать далее не > > $user->list_orders; > $user->list_toys; > > а организовать нечто вроде неймспейсов ролевых. > > то есть я хочу чтобы можно было написать > > ns 'User::Order::List' => as => 'orders'; > ns 'User::Toy::List' => as => 'toys'; > > в основном классе и далее чтобы можно было обращаться к его методам > так: > > $user->orders->list; > $user->toys->list; > > то есть очень похоже на контейнер, но это не контейнер. > это неймспейс. > функция $user->orders->list в качестве self должна получать объект $user. > > то есть > > has things => is => 'ro', isa => 'User::Thing::List'; > > тут не подходит. можно прослойку сделать на базе has конечно, но я > боюсь сильно просесть на бенчмарках. > > что еще хочется: > - has внутри namespace > - в идеале наследования какого-то всей этой "хрени с которой > взлетать", но в целом наследование мы почти не применяем в Mouse, > поэтому не сильно актуально > > > я примерно представляю как такое написать, но > > 1. может быть кто-то писал уже подобное? дайте ссылку > 2. сейчас сильно занят другими проектами, но если бы кто взялся мог бы > профинансировать появление подобного модуля на cpan :) с > документацией, тестами и сравнительными бенчмарками > (сравниваем с Mouse::Role). Пусть бенчмаркает вдвое хуже метода > Mouse::Role, но не хуже чем вдвое. Я думаю можно сделать чтобы > бенчмаркало соизмеримо. > > кто что думает? > > Действительно странного хотите. По-моему более очевидно для каждой сущности (игрушка, заказ, пользователь) сделать отдельный класс (не роль), в котором прописать, в какой таблице хранятся записи для этого класса, а в роль вынести как раз работу с БД. Примерно так мы делаем в нашем проекте на работе. При этом никто не мешает добавить в класс User метод orders(), который будет возвращать список заказов данного пользователя. И, что важно, сможет сделать обратное - например, добавить в класс Toy метод users(), который выдаст юзеров, пользующихся данной игрушкой (а как вы это будете делать с неймспейсами - непонятно). Из $self, который вы хотите получать в качестве параметра, вам нужно только значение первичного ключа, который вы добавите в поисковый запрос. Кусок кода, который иллюстрирует вышесказанное, приведен ниже (я в нём использую более привычный мне Moose, но код на Mouse должен выглядеть похоже, если не идентично). package Role::DatabaseObject; use Moose::Role; requires 'table'; sub list { my $self = shift; return $self->_list_table($self->table, @_); } sub _list_table { my ($self, $table, @args) = @_; # свой код для выборки из $table с поиском по параметрам @args } sub list_related { my ($self, $related_table, @args) = @_; # Это если внешний ключ связанной таблицы имеет вид $foreign_table . '_id', # иначе делайте свой маппинг. my $key_name = $self->table . '_id'; my $key_value = $self->get_column_value($foreign_key_name); return $self->_list_table( $related_table, @args, $foreign_key_name => $foreign_key_value ); } # Это можно добавить в BUILD, а можно добавлять в каждый класс вручную - в зависимости # от того, как будет удобнее и что фантазия позволит sub add_relations { my ($class, %class_mapping) = @_; while (my ($relation, $related_class) = each %class_mapping) { $class->meta->add_method( $relation => sub { my ($self) = @_; require $related_class; return $self->list_related($related_class->table),; } ); } } package User; use Moose; with 'Role::DatabaseObject'; sub table { 'user' } __PACKAGE__->add_relations( orders => 'Order', toys => 'Toy', ); package Order; use Moose; with 'Role::DatabaseObject'; sub table { 'order' } # здесь логика работы с заказами 1; package Toy; use Moose; with 'Role::DatabaseObject'; sub table { 'toy' } __PACKAGE__->add_relations(users => 'User'); # здесь логика работы с игрушками 1; -- Best regards, Ilya Chesnokov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From i.petro.77.00 на gmail.com Thu Oct 17 04:00:47 2013 From: i.petro.77.00 на gmail.com (Ivan Petrov) Date: Thu, 17 Oct 2013 15:00:47 +0400 Subject: [Moscow.pm] =?utf-8?b?TW91c2Ug0YXQvtGH0YMg0YHRgtGA0LDQvdC90L4=?= =?utf-8?b?0LPQvg==?= In-Reply-To: References: <20131016222518.GF24242@vdsl.uvw.ru> Message-ID: <20131017110047.GA23676@vdsl.uvw.ru> > Действительно странного хотите. > По-моему более очевидно для каждой сущности (игрушка, заказ, пользователь) > сделать отдельный класс (не роль), в котором прописать, в какой таблице > хранятся записи для этого класса, а в роль вынести как раз работу с БД. для каждой сущности (игрушка, заказ, пользователь) уже есть классы но далее есть запросы вида: - а какие игрушки у пользователя? - а какие заказы у пользователя и подобные то есть это как раз то что находится между классами. > Примерно так мы делаем в нашем проекте на работе. При этом никто не мешает > добавить в класс User метод orders(), который будет возвращать список заказов > данного пользователя. именно этой дорогой и шли. но когда появляется несколько видов построения списка orders, то получается что все виды выносим в отдельную роль (или надкласс). а функции начинают получать префиксы и (или) суффиксы list_orders_processing list_orders_done я может суррогатный пример привел, вы на пример смотрите именно как на пример. и вот когда функций в одной роли плодится много, то вот хочется неких неймспейсов чтобы эти функции разделять > Кусок кода, который иллюстрирует вышесказанное, приведен ниже (я в нём > использую более привычный мне Moose, но код на Mouse должен выглядеть похоже, > если не идентично). это все понятно. именно от этого и идем. просто возьмем любой большой проект. в нем всегда есть сущности имеющие отношения на много чего например юзер: - может иметь заказы, игрушки, итп итд - другие сущности. соответственно построение списков, ответы на вопросы чего он имет итп - имеет какие-то привелегии - имеет какие-то отношения с другими пользователями и так далее в большом проекте такой список постоянно растет и вот роли (или надклассы - в зависимости от ситуации) помогают раскидать методы по разным пакетам по крайней мере. но все методы в итоге лежат в одном пакете сколько бы ролей/надклассов мы не сделали. далее возникают коллизии: два разных человека сделали одинаковое имя у какого-то has в разных ветвях иерархии поскольку данные коллизии иногда выявляются сложно (в том числе и тестами), то в итоге в большом проекте вводятся ручные полиси, типа если у нас пакет Package::Name, а имеет роль Package::Thing, то все методы в Package::Thing обязаны иметь префикс thing_ ну а раз так то почему бы не преобразовать thing_ в thing-> и убрать из полиси разработки пункт :) From 0body0 на rambler.ru Thu Oct 17 04:50:47 2013 From: 0body0 на rambler.ru (=?UTF-8?B?0JDQvdCw0YLQvtC70LjQuSDQk9GA0LjRiNCw0LXQsg==?=) Date: Thu, 17 Oct 2013 15:50:47 +0400 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= Message-ID: <525FCF17.2090007@rambler.ru> Проблема: Вот есть у меная много классов с длинными именами типа MyCompany::MySchema::Sklad::Feature::SubFeatureClass . И дальше используем use MyCompany::MySchema::Sklad::Feature::SubFeatureClass; my $feature_obj1 = MyCompany::MySchema::Sklad::Feature::SubFeatureClass->new; my $feature_obj2 = MyCompany::MySchema::Sklad::Feature::SubFeatureClass->new; .... можно сократить не много кода use MyCompany::MySchema::Sklad::Feature::SubFeatureClass; use constant Feature=> 'MyCompany::MySchema::Sklad::Feature::SubFeatureClass'; my $feature_obj1 = Feature->new; my $feature_obj2 = Feature->new; .... Но хотелось бы примерно такого: use MyCompany::MySchema::Sklad::Feature::SubFeatureClass -as => 'Feature'; и далее my $feature_obj1 = Feature->new; my $feature_obj2 = Feature->new; .... Собрать такое минут за двадцать можно , но хотелось бы чего-нибудь уже готового. From chesnokov.ilya на gmail.com Thu Oct 17 04:55:36 2013 From: chesnokov.ilya на gmail.com (Ilya Chesnokov) Date: Thu, 17 Oct 2013 15:55:36 +0400 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= In-Reply-To: <525FCF17.2090007@rambler.ru> References: <525FCF17.2090007@rambler.ru> Message-ID: use aliased 17 октября 2013 г., 15:50 пользователь Анатолий Гришаев <0body0 на rambler.ru>написал: > Проблема: > Вот есть у меная много классов с длинными именами типа > MyCompany::MySchema::Sklad::**Feature::SubFeatureClass . > > И дальше используем > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass; > my $feature_obj1 = MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass->new; > my $feature_obj2 = MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass->new; > .... > > можно сократить не много кода > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass; > use constant Feature=> 'MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass'; > my $feature_obj1 = Feature->new; > my $feature_obj2 = Feature->new; > .... > > Но хотелось бы примерно такого: > > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass -as => > 'Feature'; > > и далее > my $feature_obj1 = Feature->new; > my $feature_obj2 = Feature->new; > .... > > Собрать такое минут за двадцать можно , но хотелось бы чего-нибудь уже > готового. > > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- Best regards, Ilya Chesnokov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From cub.uanic на gmail.com Thu Oct 17 04:55:24 2013 From: cub.uanic на gmail.com (Oleg Kostyuk) Date: Thu, 17 Oct 2013 14:55:24 +0300 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= In-Reply-To: <525FCF17.2090007@rambler.ru> References: <525FCF17.2090007@rambler.ru> Message-ID: use aliased 17 октября 2013 г., 14:50 пользователь Анатолий Гришаев <0body0 на rambler.ru>написал: > Проблема: > Вот есть у меная много классов с длинными именами типа > MyCompany::MySchema::Sklad::**Feature::SubFeatureClass . > > И дальше используем > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass; > my $feature_obj1 = MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass->new; > my $feature_obj2 = MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass->new; > .... > > можно сократить не много кода > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass; > use constant Feature=> 'MyCompany::MySchema::Sklad::** > Feature::SubFeatureClass'; > my $feature_obj1 = Feature->new; > my $feature_obj2 = Feature->new; > .... > > Но хотелось бы примерно такого: > > use MyCompany::MySchema::Sklad::**Feature::SubFeatureClass -as => > 'Feature'; > > и далее > my $feature_obj1 = Feature->new; > my $feature_obj2 = Feature->new; > .... > > Собрать такое минут за двадцать можно , но хотелось бы чего-нибудь уже > готового. > > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- Sincerely yours, Oleg Kostyuk (CUB-UANIC) ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From creaktive на gmail.com Thu Oct 17 06:07:58 2013 From: creaktive на gmail.com (Stanislaw Pusep) Date: Thu, 17 Oct 2013 15:07:58 +0200 Subject: [Moscow.pm] =?utf-8?b?0J/QvtC40YHQuiDRg9GC0LXRh9C10Log0L/QsNC8?= =?utf-8?b?0Y/RgtC4?= In-Reply-To: References: Message-ID: Devel::Leak - простой и сердитый, но до сих пор успешно собирается и работает. Test::Memory::Cycle - опять-таки для тестов, но штука полезная. 2013/10/14 Jack of Shadows > Господа, подскажите, есть ли что-нибудь хорошее для поиска мест, где течёт > память для perl 5.14. > Помнится, когда использовал Devel::LeakTrace::Fast, но он перестал > собираться то ли под 5.10, то ли под 5.12 в связи с какими-то изменениями в > недрах перла. > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From s2323 на land.ru Thu Oct 17 09:41:54 2013 From: s2323 на land.ru (s2323) Date: Thu, 17 Oct 2013 20:41:54 +0400 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= Message-ID: <8c85acaf3d7a5e916338b93dd521c8e2d953fd2c@mail.qip.ru> Как вариант самодельной педали: package ShortNamer; no strict; no warnings; sub import { my ($from, %opts) = @_; my $original_import; if (exists $opts{'-as'}) { my $to = $opts{'-as'}; $original_import = $to->can('import'); foreach my $key (keys %{ $from . '::' }) { *{$to . '::' . $key} = *{$from . '::' . $key}; } } if ($original_import) { goto $original_import; } } 1; Далее, используем его в MyCompany::MySchema::Sklad::Feature::SubFeatureClass (через одно место, конечно, но чтоб ничего не сломать, и чтоб работало, пишем последним в списке require): package MyCompany::MySchema::Sklad::Feature::SubFeatureClass; ... require ShortNamer; ShortNamer->import(-as => __PACKAGE__); ... 1; Ну и далее по месту использования: use ShortNamer; use MyCompany::MySchema::Sklad::Feature::SubFeatureClass -as => 'Feature'; my $feature_obj1 = Feature->new; my $feature_obj2 = Feature->new; From s2323 на land.ru Thu Oct 17 09:44:09 2013 From: s2323 на land.ru (s2323) Date: Thu, 17 Oct 2013 20:44:09 +0400 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= Message-ID: <63feeca61543b9dfa8ccf1103669e9acf8769609@mail.qip.ru> Точнее даже так: use MyCompany::MySchema::Sklad::Feature::SubFeatureClass -as => 'Feature'; my $feature_obj1 = Feature->new; my $feature_obj2 = Feature->new; From s2323 на land.ru Thu Oct 17 12:33:39 2013 From: s2323 на land.ru (s2323) Date: Thu, 17 Oct 2013 23:33:39 +0400 Subject: [Moscow.pm] =?utf-8?b?0KXQvtGH0YMg0L7QsdGL0YfQvdC+0LPQvg==?= Message-ID: Прошлый вариант содержал бред. Вот получше: package ShortNamer; no strict; no warnings; sub import { my ($from, %opts) = @_; if (exists $opts{'-as'}) { my $to = $opts{'-as'}; my $original_import = $to->can('import'); foreach my $key (keys %{ $from . '::' }) { if ($key eq 'import' && $original_import) { *{$to . '::import'} = sub { import(@_); goto $original_import; }; next; } *{$to . '::' . $key} = *{$from . '::' . $key}; } } } 1; Подключение (последним в списке require): package MyCompany::MySchema::Sklad::Feature::SubFeatureClass; ... require ShortNamer; ShortNamer->import(-as => __PACKAGE__); ... 1; Использование: use MyCompany::MySchema::Sklad::Feature::SubFeatureClass -as => 'Feature'; my $feature_obj1 = Feature->new; my $feature_obj2 = Feature->new; From akovbovich на gmail.com Sat Oct 26 12:33:28 2013 From: akovbovich на gmail.com (=?UTF-8?B?0JDQvdC00YDQtdC5INCfLiDQmtC+0LLQsdC+0LLQuNGH?=) Date: Sat, 26 Oct 2013 23:33:28 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= Message-ID: Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ 13175.49/s (n=13439) Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ 407.27/s (n=448) DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 10437.86/s (n=10751) Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 179293.07/s (n=181086) ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akovbovich на gmail.com Sat Oct 26 12:43:51 2013 From: akovbovich на gmail.com (=?UTF-8?B?0JDQvdC00YDQtdC5INCfLiDQmtC+0LLQsdC+0LLQuNGH?=) Date: Sat, 26 Oct 2013 23:43:51 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: References: Message-ID: Все, нашел: $dt1 [gt/lt/eq] $dt2 Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex for at least 1 CPU seconds... Class::Date: 1 wallclock secs ( 1.00 usr + 0.12 sys = 1.12 CPU) @ 12799.11/s (n=14335) Date::Manip: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 400.00/s (n=420) DateTime: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 10047.66/s (n=10751) Time::Piece: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ 165414.42/s (n=172031) lex: 0 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 3215550.47/s (n=3440639) 26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < akovbovich на gmail.com> написал: > Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две > даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? > > Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at > least 1 CPU seconds... > Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ > 13175.49/s (n=13439) > Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ > 407.27/s (n=448) > DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ > 10437.86/s (n=10751) > Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ > 179293.07/s (n=181086) > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akzhan.abdulin на gmail.com Sat Oct 26 12:48:23 2013 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Sat, 26 Oct 2013 23:48:23 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: References: Message-ID: :) 26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович < akovbovich на gmail.com> написал: > Все, нашел: $dt1 [gt/lt/eq] $dt2 > > Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex > for at least 1 CPU seconds... > Class::Date: 1 wallclock secs ( 1.00 usr + 0.12 sys = 1.12 CPU) @ > 12799.11/s (n=14335) > Date::Manip: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ > 400.00/s (n=420) > DateTime: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ > 10047.66/s (n=10751) > Time::Piece: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ > 165414.42/s (n=172031) > lex: 0 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ > 3215550.47/s (n=3440639) > > > 26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < > akovbovich на gmail.com> написал: > > Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две >> даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >> >> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at >> least 1 CPU seconds... >> Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ >> 13175.49/s (n=13439) >> Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ >> 407.27/s (n=448) >> DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ >> 10437.86/s (n=10751) >> Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ >> 179293.07/s (n=181086) >> > > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From dmitry на eremeev.ru Sat Oct 26 12:50:46 2013 From: dmitry на eremeev.ru (Dmitry Eremeev) Date: Sat, 26 Oct 2013 23:50:46 +0400 Subject: [Moscow.pm] =?koi8-r?b?7c/E1czJIMTM0SDSwcLP1Nkg088g19LFzcXOxc0=?= In-Reply-To: References: Message-ID: Буддизм какой-то. Yours, Dmitry Eremeev +7 906 7005771 > 26 окт. 2013 г., в 23:48, Akzhan Abdulin написал(а): > > :) > > > 26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович написал: >> Все, нашел: $dt1 [gt/lt/eq] $dt2 >> >> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex for at least 1 CPU seconds... >> Class::Date: 1 wallclock secs ( 1.00 usr + 0.12 sys = 1.12 CPU) @ 12799.11/s (n=14335) >> Date::Manip: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 400.00/s (n=420) >> DateTime: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 10047.66/s (n=10751) >> Time::Piece: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ 165414.42/s (n=172031) >> lex: 0 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 3215550.47/s (n=3440639) >> >> >> 26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович написал: >> >>> Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>> >>> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... >>> Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ 13175.49/s (n=13439) >>> Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ 407.27/s (n=448) >>> DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 10437.86/s (n=10751) >>> Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 179293.07/s (n=181086) >> >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From warstone на list.ru Sat Oct 26 12:51:19 2013 From: warstone на list.ru (=?UTF-8?B?V2Fyc3RvbmVAbGlzdC5ydQ==?=) Date: Sat, 26 Oct 2013 23:51:19 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: References: Message-ID: <1382817079.912091029@f179.i.mail.ru> Попробуй Panda::Date... Суббота, 26 октября 2013, 23:48 +04:00 от Akzhan Abdulin : >:) > > >26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович < akovbovich на gmail.com > написал: >>Все, нашел: $dt1 [gt/lt/eq] $dt2 >> >>Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex for at least 1 CPU seconds... >>Class::Date:  1 wallclock secs ( 1.00 usr +  0.12 sys =  1.12 CPU) @ 12799.11/s (n=14335) >>Date::Manip:  2 wallclock secs ( 1.05 usr +  0.00 sys =  1.05 CPU) @ 400.00/s (n=420) >>  DateTime:  1 wallclock secs ( 1.07 usr +  0.00 sys =  1.07 CPU) @ 10047.66/s (n=10751) >>Time::Piece:  1 wallclock secs ( 1.04 usr +  0.00 sys =  1.04 CPU) @ 165414.42/s (n=172031) >>       lex:  0 wallclock secs ( 1.07 usr +  0.00 sys =  1.07 CPU) @ 3215550.47/s (n=3440639) >> >> >>26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < akovbovich на gmail.com > написал: >> >>>Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>> >>>Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... >>>Class::Date:  0 wallclock secs ( 0.89 usr +  0.13 sys =  1.02 CPU) @ 13175.49/s (n=13439) >>>Date::Manip:  1 wallclock secs ( 1.09 usr +  0.01 sys =  1.10 CPU) @ 407.27/s (n=448) >>>  DateTime:  1 wallclock secs ( 1.03 usr +  0.00 sys =  1.03 CPU) @ 10437.86/s (n=10751) >>>Time::Piece:  1 wallclock secs ( 1.01 usr +  0.00 sys =  1.01 CPU) @ 179293.07/s (n=181086) >> >>-- >>Moscow.pm mailing list >>moscow-pm на pm.org | http://moscow.pm.org >> > >-- >Moscow.pm mailing list >moscow-pm на pm.org | http://moscow.pm.org -- Nick unnoun ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From an.gorohovski на gmail.com Sat Oct 26 12:58:39 2013 From: an.gorohovski на gmail.com (Alessandro Gorohovski) Date: Sat, 26 Oct 2013 22:58:39 +0300 Subject: [Moscow.pm] Content-Length of Webpage Message-ID: Уважаемое сообщество, Добрый вечер! Подскажите, можно ли надежно и как определить размер (объем) предполагаемого к скачиванию контента (например, html-страницы) без загрузки всей страницы. Я сейчас пользуюсь my $agent = LWP::UserAgent->new; my $request = HTTP::Request->new( GET => $url ); $request->header('Accept' => 'text/html'); my $response = $agent->request( $request ); $response->is_success || print FILE_ERR "$id\t$url:\t", $response->message, "\n"; И далее парсим $response->headers_as_string на предмет 'Content-Length' Но, к сожалению удручает то, что не всегда заголовок скачиваемой страницы содержит поле 'Content-Length' :( Спасибо, ANG From akovbovich на gmail.com Sat Oct 26 13:01:40 2013 From: akovbovich на gmail.com (=?UTF-8?B?0JDQvdC00YDQtdC5INCfLiDQmtC+0LLQsdC+0LLQuNGH?=) Date: Sun, 27 Oct 2013 00:01:40 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: <1382817079.912091029@f179.i.mail.ru> References: <1382817079.912091029@f179.i.mail.ru> Message-ID: Panda быстрее Time::Piece, но все равно не вписывается в 1000ns panda: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 202867.92/s (n=215040) my$d="27.06.2013"; my$t="18:44:59"; my$r=qr/^(\d\d)\.(\d\d)\.(\d\d\d\d) (\d\d)\:(\d\d):(\d\d)$/; ... panda=>sub{ "$d $t"=~/$r/; my$dt=Panda::Date->new([$3,$2,$1,$4,$5,$6]) } 26 октября 2013 г., 23:51 пользователь Warstone на list.ru написал: > Попробуй Panda::Date... > > > Суббота, 26 октября 2013, 23:48 +04:00 от Akzhan Abdulin < > akzhan.abdulin на gmail.com>: > > :) > > > 26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович < > akovbovich на gmail.com > > написал: > >> Все, нашел: $dt1 [gt/lt/eq] $dt2 >> >> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex >> for at least 1 CPU seconds... >> Class::Date: 1 wallclock secs ( 1.00 usr + 0.12 sys = 1.12 CPU) @ >> 12799.11/s (n=14335) >> Date::Manip: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ >> 400.00/s (n=420) >> DateTime: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ >> 10047.66/s (n=10751) >> Time::Piece: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ >> 165414.42/s (n=172031) >> lex: 0 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ >> 3215550.47/s (n=3440639) >> >> >> 26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < >> akovbovich на gmail.com >> > написал: >> >> Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить >>> две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>> >>> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for >>> at least 1 CPU seconds... >>> Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ >>> 13175.49/s (n=13439) >>> Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ >>> 407.27/s (n=448) >>> DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ >>> 10437.86/s (n=10751) >>> Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ >>> 179293.07/s (n=181086) >>> >> >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org| >> http://moscow.pm.org >> >> > -- > Moscow.pm mailing list > moscow-pm на pm.org | > http://moscow.pm.org > > > > -- > Nick unnoun > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From warstone на list.ru Sat Oct 26 13:03:00 2013 From: warstone на list.ru (=?UTF-8?B?V2Fyc3RvbmVAbGlzdC5ydQ==?=) Date: Sun, 27 Oct 2013 00:03:00 +0400 Subject: [Moscow.pm] =?utf-8?q?Content-Length_of_Webpage?= In-Reply-To: References: Message-ID: <1382817780.599283117@f137.i.mail.ru> А ?? length(Encode::encode_utf8($response->as_string)) когда запретили? Это если в байтах, конечно. Суббота, 26 октября 2013, 22:58 +03:00 от "Alessandro Gorohovski" : >Уважаемое сообщество, >Добрый вечер! > >Подскажите, >можно ли надежно и как определить размер (объем) >предполагаемого к скачиванию контента >(например, html-страницы) без загрузки всей страницы. > > >Я сейчас пользуюсь > >my $agent = LWP::UserAgent->new; > >my $request = HTTP::Request->new( GET => $url ); >$request->header('Accept' => 'text/html'); > >my $response = $agent->request( $request ); >$response->is_success || print FILE_ERR "$id\t$url:\t", >$response->message, "\n"; > >И далее парсим >$response->headers_as_string > >на предмет 'Content-Length' > >Но, к сожалению удручает то, что не всегда заголовок скачиваемой страницы >содержит поле 'Content-Length' >:( > >Спасибо, >ANG >-- >Moscow.pm mailing list >moscow-pm на pm.org | http://moscow.pm.org -- Nick unnoun ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From warstone на list.ru Sat Oct 26 13:05:46 2013 From: warstone на list.ru (=?UTF-8?B?V2Fyc3RvbmVAbGlzdC5ydQ==?=) Date: Sun, 27 Oct 2013 00:05:46 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= References: <1382817079.912091029@f179.i.mail.ru> Message-ID: <1382817946.255095513@f137.i.mail.ru> Корми ей строку сразу. Не разбирай на части. Или тебе там что-то странное надо? Воскресенье, 27 октября 2013, 0:01 +04:00 от Андрей П. Ковбович: >Panda быстрее Time::Piece, но все равно не вписывается в 1000ns > >     panda:  1 wallclock secs ( 1.06 usr +  0.00 sys =  1.06 CPU) @ 202867.92/s (n=215040) > >my$d="27.06.2013"; >my$t="18:44:59"; >my$r=qr/^(\d\d)\.(\d\d)\.(\d\d\d\d) (\d\d)\:(\d\d):(\d\d)$/; >... >panda=>sub{ "$d $t"=~/$r/; my$dt=Panda::Date->new([$3,$2,$1,$4,$5,$6]) } > > > >26 октября 2013 г., 23:51 пользователь Warstone на list.ru < warstone на list.ru > написал: >>Попробуй Panda::Date... >> >> >>Суббота, 26 октября 2013, 23:48 +04:00 от Akzhan Abdulin < akzhan.abdulin на gmail.com >: >> >>>:) >>> >>> >>>26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович < akovbovich на gmail.com > написал: >>>>Все, нашел: $dt1 [gt/lt/eq] $dt2 >>>> >>>>Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex for at least 1 CPU seconds... >>>>Class::Date:  1 wallclock secs ( 1.00 usr +  0.12 sys =  1.12 CPU) @ 12799.11/s (n=14335) >>>>Date::Manip:  2 wallclock secs ( 1.05 usr +  0.00 sys =  1.05 CPU) @ 400.00/s (n=420) >>>>  DateTime:  1 wallclock secs ( 1.07 usr +  0.00 sys =  1.07 CPU) @ 10047.66/s (n=10751) >>>>Time::Piece:  1 wallclock secs ( 1.04 usr +  0.00 sys =  1.04 CPU) @ 165414.42/s (n=172031) >>>>       lex:  0 wallclock secs ( 1.07 usr +  0.00 sys =  1.07 CPU) @ 3215550.47/s (n=3440639) >>>> >>>> >>>>26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < akovbovich на gmail.com > написал: >>>> >>>>>Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>>>> >>>>>Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... >>>>>Class::Date:  0 wallclock secs ( 0.89 usr +  0.13 sys =  1.02 CPU) @ 13175.49/s (n=13439) >>>>>Date::Manip:  1 wallclock secs ( 1.09 usr +  0.01 sys =  1.10 CPU) @ 407.27/s (n=448) >>>>>  DateTime:  1 wallclock secs ( 1.03 usr +  0.00 sys =  1.03 CPU) @ 10437.86/s (n=10751) >>>>>Time::Piece:  1 wallclock secs ( 1.01 usr +  0.00 sys =  1.01 CPU) @ 179293.07/s (n=181086) >>>> >>>>-- >>>>Moscow.pm mailing list >>>>moscow-pm на pm.org | http://moscow.pm.org >>>> >>> >>>-- >>>Moscow.pm mailing list >>>moscow-pm на pm.org | http://moscow.pm.org >> >> >>-- >>Nick unnoun >> >>-- >>Moscow.pm mailing list >>moscow-pm на pm.org | http://moscow.pm.org >> > >-- >Moscow.pm mailing list >moscow-pm на pm.org | http://moscow.pm.org -- Nick unnoun ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From akovbovich на gmail.com Sat Oct 26 13:12:45 2013 From: akovbovich на gmail.com (=?UTF-8?B?0JDQvdC00YDQtdC5INCfLiDQmtC+0LLQsdC+0LLQuNGH?=) Date: Sun, 27 Oct 2013 00:12:45 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: <1382817946.255095513@f137.i.mail.ru> References: <1382817079.912091029@f179.i.mail.ru> <1382817946.255095513@f137.i.mail.ru> Message-ID: Со строкой шустрее panda: 1 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 796443.52/s (n=860159) panda=>sub{my$dt=Panda::Date->new("2013-06-27 18:44:59")} при условии, что дата в исо формате. У меня дата на входе в dd.mm.yyyy. А так, спасибо за наводку. 27 октября 2013 г., 0:05 пользователь Warstone на list.ru написал: > Корми ей строку сразу. Не разбирай на части. Или тебе там что-то странное > надо? > > > Воскресенье, 27 октября 2013, 0:01 +04:00 от Андрей П. Ковбович< > akovbovich на gmail.com>: > > Panda быстрее Time::Piece, но все равно не вписывается в 1000ns > > panda: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ > 202867.92/s (n=215040) > > my$d="27.06.2013"; > my$t="18:44:59"; > my$r=qr/^(\d\d)\.(\d\d)\.(\d\d\d\d) (\d\d)\:(\d\d):(\d\d)$/; > ... > panda=>sub{ "$d $t"=~/$r/; my$dt=Panda::Date->new([$3,$2,$1,$4,$5,$6]) } > > > > 26 октября 2013 г., 23:51 пользователь Warstone на list.ru > > > написал: > >> Попробуй Panda::Date... >> >> >> >> Суббота, 26 октября 2013, 23:48 +04:00 от Akzhan Abdulin < >> akzhan.abdulin на gmail.com >> >: >> >> :) >> >> >> 26 октября 2013 г., 23:43 пользователь Андрей П. Ковбович < >> akovbovich на gmail.com >> > написал: >> >>> Все, нашел: $dt1 [gt/lt/eq] $dt2 >>> >>> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece, lex >>> for at least 1 CPU seconds... >>> Class::Date: 1 wallclock secs ( 1.00 usr + 0.12 sys = 1.12 CPU) @ >>> 12799.11/s (n=14335) >>> Date::Manip: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ >>> 400.00/s (n=420) >>> DateTime: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ >>> 10047.66/s (n=10751) >>> Time::Piece: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ >>> 165414.42/s (n=172031) >>> lex: 0 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ >>> 3215550.47/s (n=3440639) >>> >>> >>> 26 октября 2013 г., 23:33 пользователь Андрей П. Ковбович < >>> akovbovich на gmail.com >>> > написал: >>> >>> Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить >>>> две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>>> >>>> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for >>>> at least 1 CPU seconds... >>>> Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ >>>> 13175.49/s (n=13439) >>>> Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ >>>> 407.27/s (n=448) >>>> DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ >>>> 10437.86/s (n=10751) >>>> Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ >>>> 179293.07/s (n=181086) >>>> >>> >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org| >>> http://moscow.pm.org >>> >>> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org| >> http://moscow.pm.org >> >> >> >> -- >> Nick unnoun >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org| >> http://moscow.pm.org >> >> > -- > Moscow.pm mailing list > moscow-pm на pm.org | > http://moscow.pm.org > > > > -- > Nick unnoun > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From an.gorohovski на gmail.com Sat Oct 26 13:18:17 2013 From: an.gorohovski на gmail.com (Alessandro Gorohovski) Date: Sat, 26 Oct 2013 23:18:17 +0300 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: <1382817780.599283117@f137.i.mail.ru> References: <1382817780.599283117@f137.i.mail.ru> Message-ID: Warstone на list.ru писал(а) в своём письме Sat, 26 Oct 2013 23:03:00 +0300: > А ?? length(Encode::encode_utf8($response->as_string)) когда > запретили? Это если в байтах, конечно. Никто не запрещал, конечно. Но зачем загружать все, e.g. ~5Gb контента, чтобы найти его длину? (да и памяти может не хватить) Все дело в том, что Нужно хотя бы первые 20 килобайт (или меньше) а дальше можно не скачивать. > Суббота, 26 октября 2013, 22:58 +03:00 от "Alessandro Gorohovski" > : >> Уважаемое сообщество, >> Добрый вечер! >> >> Подскажите, >> можно ли надежно и как определить размер (объем) >> предполагаемого к скачиванию контента >> (например, html-страницы) без загрузки всей страницы. >> >> >> Я сейчас пользуюсь >> >> my $agent = LWP::UserAgent->new; >> >> my $request = HTTP::Request->new( GET => $url ); >> $request->header('Accept' => 'text/html'); >> >> my $response = $agent->request( $request ); >> $response->is_success || print FILE_ERR "$id\t$url:\t", >> $response->message, "\n"; >> >> И далее парсим >> $response->headers_as_string >> >> на предмет 'Content-Length' >> >> Но, к сожалению удручает то, что не всегда заголовок скачиваемой >> страницы >> содержит поле 'Content-Length' >> :( >> >> Спасибо, >> ANG >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- ANG From mons на cpan.org Sat Oct 26 15:30:14 2013 From: mons на cpan.org (Mons Anderson) Date: Sun, 27 Oct 2013 02:30:14 +0400 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: Message-ID: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> On 26.10.2013, at 23:58, Alessandro Gorohovski wrote: > Уважаемое сообщество, > Добрый вечер! > > Подскажите, > можно ли надежно и как определить размер (объем) > предполагаемого к скачиванию контента > (например, html-страницы) без загрузки всей страницы. > > > Я сейчас пользуюсь > > my $agent = LWP::UserAgent->new; > > my $request = HTTP::Request->new( GET => $url ); > $request->header('Accept' => 'text/html'); > > my $response = $agent->request( $request ); В этом месте вы уже получили весь ответ целиком. > $response->is_success || print FILE_ERR "$id\t$url:\t", $response->message, "\n"; > > И далее парсим > $response->headers_as_string > > на предмет 'Content-Length' > > Но, к сожалению удручает то, что не всегда заголовок скачиваемой страницы > содержит поле 'Content-Length' > :( > Если content-length нет, то значит там ответ transfer-encoding: chunked. а это, в свою очередь, означает, то вы не можете заранее узнать какой длины будет ответ, пока не считаете его целиком. From mons на cpan.org Sat Oct 26 15:44:19 2013 From: mons на cpan.org (Mons Anderson) Date: Sun, 27 Oct 2013 02:44:19 +0400 Subject: [Moscow.pm] =?koi8-r?b?7c/E1czJIMTM0SDSwcLP1Nkg088g19LFzcXOxc0=?= In-Reply-To: References: Message-ID: Если у тебя 2 строки формата %Y-%m-%d %H:%M:%S, то быстрее чем cmp/lt/gt/eq у тебя никак не получится. даже есть сделать вызов XS, и в нем memcmp, то получается как-то так: lt: 6354176.17/s cmp: 6062612.68/s xs: 4580193.05/s А вообще приведи бенчмарк целиком. On 26.10.2013, at 23:33, Андрей П. Ковбович wrote: > Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? > > Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... > Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ 13175.49/s (n=13439) > Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ 407.27/s (n=448) > DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 10437.86/s (n=10751) > Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 179293.07/s (n=181086) > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From akovbovich на gmail.com Sat Oct 26 16:05:45 2013 From: akovbovich на gmail.com (=?UTF-8?B?0JDQvdC00YDQtdC5INCfLiDQmtC+0LLQsdC+0LLQuNGH?=) Date: Sun, 27 Oct 2013 03:05:45 +0400 Subject: [Moscow.pm] =?utf-8?b?0JzQvtC00YPQu9C4INC00LvRjyDRgNCw0LHQvtGC?= =?utf-8?b?0Ysg0YHQviDQstGA0LXQvNC10L3QtdC8?= In-Reply-To: References: Message-ID: Да смысла приводить бенчмарк нету. Вот здесь как раз приводится рецепт: http://www.effectiveperlprogramming.com/2010/05/comparing-stringish-dates-numerically/ Единственно, в бенчмарке я погорячился с использованием регекспа для парсинга даты так как на самом деле быстрее всего substr: perl -MBenchmark -wE'my$d="27.06.2013";my$r2=qr/^(\d{2})\.(\d{2})\.(\d{4})$/;timethese(-1,{substr=>sub{my($dd,$mm,$yy)=(substr($d,0,2),substr($d,3,2),substr($d,6,4));my$dt="$yy-$mm-$dd"},rx=>sub{$d=~/$r2/;my$dt="$3-$2-$1"},split=>sub{my($dd,$mm,$yy)=split m|\.|,$d;my$dt="$yy-$mm-$dd"}});' Benchmark: running rx, split, substr for at least 1 CPU seconds... rx: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 327679.05/s (n=344063) split: 2 wallclock secs ( 1.02 usr + 0.01 sys = 1.03 CPU) @ 607349.51/s (n=625570) substr: 0 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 980238.89/s (n=1058658) 27 октября 2013 г., 2:44 пользователь Mons Anderson написал: > Если у тебя 2 строки формата %Y-%m-%d %H:%M:%S, то быстрее чем > cmp/lt/gt/eq у тебя никак не получится. > даже есть сделать вызов XS, и в нем memcmp, то получается как-то так: > > lt: 6354176.17/s > cmp: 6062612.68/s > xs: 4580193.05/s > > А вообще приведи бенчмарк целиком. > > On 26.10.2013, at 23:33, Андрей П. Ковбович wrote: > > > Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить > две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? > > > > Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for > at least 1 CPU seconds... > > Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ > 13175.49/s (n=13439) > > Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ > 407.27/s (n=448) > > DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ > 10437.86/s (n=10751) > > Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ > 179293.07/s (n=181086) > > -- > > Moscow.pm mailing list > > moscow-pm на pm.org | http://moscow.pm.org > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From an.gorohovski на gmail.com Sun Oct 27 00:44:12 2013 From: an.gorohovski на gmail.com (Alessandro Gorohovski) Date: Sun, 27 Oct 2013 09:44:12 +0200 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> Message-ID: Mons Anderson писал(а) в своём письме Sun, 27 Oct 2013 01:30:14 +0300: > On 26.10.2013, at 23:58, Alessandro Gorohovski > wrote: > >> Уважаемое сообщество, >> Добрый вечер! >> >> Подскажите, >> можно ли надежно и как определить размер (объем) >> предполагаемого к скачиванию контента >> (например, html-страницы) без загрузки всей страницы. >> >> >> Я сейчас пользуюсь >> >> my $agent = LWP::UserAgent->new; >> >> my $request = HTTP::Request->new( GET => $url ); >> $request->header('Accept' => 'text/html'); >> >> my $response = $agent->request( $request ); > > В этом месте вы уже получили весь ответ целиком. Согласен. >> $response->is_success || print FILE_ERR "$id\t$url:\t", >> $response->message, "\n"; >> >> И далее парсим >> $response->headers_as_string >> >> на предмет 'Content-Length' >> >> Но, к сожалению удручает то, что не всегда заголовок скачиваемой >> страницы >> содержит поле 'Content-Length' >> :( >> > > > Если content-length нет, то значит там ответ transfer-encoding: chunked. > а это, в свою очередь, означает, то вы не можете заранее узнать какой > длины будет ответ, пока не считаете его целиком. Печально. А может существует способ при котором можно было бы управлять количество байт скачиваемого контента, например, загрузив не более 20 kb, прекращать прием данных (разорвать соединение принудительно) ? -- ANG From s2323 на land.ru Sun Oct 27 01:54:56 2013 From: s2323 на land.ru (s2323) Date: Sun, 27 Oct 2013 12:54:56 +0400 Subject: [Moscow.pm] Content-Length of Webpage Message-ID: Попробуйте явно указать протокол HTTP/1.0: $request->protocol("HTTP/1.0"); Ещё если есть заголовок Accept-Encoding - уберите его. Ну и попробуйте HEAD запрос, раз вам не нужен сам контент. From maxim.vuets на gmail.com Sun Oct 27 02:00:14 2013 From: maxim.vuets на gmail.com (Maxim Vuets) Date: Sun, 27 Oct 2013 10:00:14 +0100 Subject: [Moscow.pm] =?utf-8?b?RXh0VXRpbHM6Ok1ha2VNYWtlcjog0LTQvtC/0L4=?= =?utf-8?b?0LvQvdC40YLQtdC70YzQvdGL0LUg0L/Rg9GC0Lgg0L/QvtC40YHQutCwINCy?= =?utf-8?q?_LIBS_=D0=B8_INC?= Message-ID: <20131027090014.GA32419@shroompy> Пишу XS модуль. Упращённый Makefile.PL выглядит так: use ExtUtils::MakeMaker; WriteMakefile( NAME => "Foo", LIBS => ["-lfoo"], INC => "-I.", ); Проблема: необходимая libfoo.a и её заголовочные файлы находятся в каком-то произвольном месте, скажем /home/mvuets/foo. Как я могу указать дополнительные -L/home/mvuets/foo и -I/home/mvuets/foo _без модификации_ исходного Makefile.PL? (Например: через переменные окружения, аргументы коммандной строки?..) Это необходимо для сборки модуля с разными версиями внешней библиотеки без установки этой библиотеки в масштабе всей системы. Я знаю, что WriteMakefile() позволяет _переопределять_ все аргументы, но не вижу способа как их _дополнить_. Т.е. хочется чего-то в духе: ./Makefile.PL LIBS+="$HOME/foo" INC+="$HOME/foo" From maxim.vuets на gmail.com Sun Oct 27 02:08:06 2013 From: maxim.vuets на gmail.com (Maxim Vuets) Date: Sun, 27 Oct 2013 10:08:06 +0100 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> Message-ID: <20131027090806.GA403@shroompy> On Sun, Oct 27, 2013 at 09:44:12AM +0200, Alessandro Gorohovski wrote: >Печально. >А может существует способ при котором можно было бы управлять количество >байт скачиваемого контента, например, загрузив не более 20 kb, >прекращать прием данных >(разорвать соединение принудительно) >? Попробуйте установить обработчик на response_data: https://metacpan.org/pod/LWP::UserAgent#response_data-sub-my-response-ua-h-data-_ From s2323 на land.ru Sun Oct 27 02:12:03 2013 From: s2323 на land.ru (s2323) Date: Sun, 27 Oct 2013 13:12:03 +0400 Subject: [Moscow.pm] =?utf-8?b?RXh0VXRpbHM6Ok1ha2VNYWtlcjog0LTQvtC/0L4=?= Message-ID: Сделайте через переменные среды, например так: my $libfoo = 'libfoo.a'; if (exists $ENV{LIBFOO} && -e $ENV{LIBFOO}) { $libfoo = $ENV{LIBFOO}; } my $libfooinc = ''; if (exists $ENV{LIBFOOINC} && -d $ENV{LIBFOOINC}) { $libfooinc = '-I' . $ENV{LIBFOOINC}; } ... WriteMakefile( NAME => "Foo", OBJECT => "Foo.o $libfoo", INC => "-I. $libfooinc", ); From mi на ya.ru Sun Oct 27 02:37:15 2013 From: mi на ya.ru (Nikolay Mishin) Date: Sun, 27 Oct 2013 13:37:15 +0400 Subject: [Moscow.pm] =?koi8-r?b?7c/E1czJIMTM0SDSwcLP1Nkg088g19LFzcXOxc0=?= In-Reply-To: References: Message-ID: <10991382866635@web17j.yandex.ru> отличный однострочник, спасибо 27.10.2013, 03:06, "Андрей П. Ковбович" : > Да смысла приводить бенчмарк нету. Вот здесь как раз приводится рецепт: > http://www.effectiveperlprogramming.com/2010/05/comparing-stringish-dates-numerically/ > > Единственно, в бенчмарке я погорячился с использованием регекспа для парсинга даты так как на самом деле быстрее всего substr: > > perl -MBenchmark -wE'my$d="27.06.2013";my$r2=qr/^(\d{2})\.(\d{2})\.(\d{4})$/;timethese(-1,{substr=>sub{my($dd,$mm,$yy)=(substr($d,0,2),substr($d,3,2),substr($d,6,4));my$dt="$yy-$mm-$dd"},rx=>sub{$d=~/$r2/;my$dt="$3-$2-$1"},split=>sub{my($dd,$mm,$yy)=split m|\.|,$d;my$dt="$yy-$mm-$dd"}});' > Benchmark: running rx, split, substr for at least 1 CPU seconds... >         rx:  2 wallclock secs ( 1.05 usr +  0.00 sys =  1.05 CPU) @ 327679.05/s (n=344063) >      split:  2 wallclock secs ( 1.02 usr +  0.01 sys =  1.03 CPU) @ 607349.51/s (n=625570) >     substr:  0 wallclock secs ( 1.08 usr +  0.00 sys =  1.08 CPU) @ 980238.89/s (n=1058658) > > 27 октября 2013 г., 2:44 пользователь Mons Anderson написал: >> Если у тебя 2 строки формата %Y-%m-%d %H:%M:%S, то быстрее чем cmp/lt/gt/eq у тебя никак не получится. >> даже есть сделать вызов XS, и в нем memcmp, то получается как-то так: >> >> lt: 6354176.17/s >> cmp: 6062612.68/s >> xs: 4580193.05/s >> >> А вообще приведи бенчмарк целиком. >> >> On 26.10.2013, at 23:33, Андрей П. Ковбович wrote: >> >>> Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? >>> >>> Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... >>> Class::Date:  0 wallclock secs ( 0.89 usr +  0.13 sys =  1.02 CPU) @ 13175.49/s (n=13439) >>> Date::Manip:  1 wallclock secs ( 1.09 usr +  0.01 sys =  1.10 CPU) @ 407.27/s (n=448) >>>   DateTime:  1 wallclock secs ( 1.03 usr +  0.00 sys =  1.03 CPU) @ 10437.86/s (n=10751) >>> Time::Piece:  1 wallclock secs ( 1.01 usr +  0.00 sys =  1.01 CPU) @ 179293.07/s (n=181086) >> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From akzhan.abdulin на gmail.com Sun Oct 27 05:43:31 2013 From: akzhan.abdulin на gmail.com (Akzhan Abdulin) Date: Sun, 27 Oct 2013 16:43:31 +0400 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: Message-ID: Я бы в любом случае сперва бы попробовал запрос типа HEAD. Если он дает CLength, то все ок. Иначе переходим на GET, часто будет chunked или без CLength, надо качать. 26 октября 2013 г., 23:58 пользователь Alessandro Gorohovski < an.gorohovski на gmail.com> написал: > Уважаемое сообщество, > Добрый вечер! > > Подскажите, > можно ли надежно и как определить размер (объем) > предполагаемого к скачиванию контента > (например, html-страницы) без загрузки всей страницы. > > > Я сейчас пользуюсь > > my $agent = LWP::UserAgent->new; > > my $request = HTTP::Request->new( GET => $url ); > $request->header('Accept' => 'text/html'); > > my $response = $agent->request( $request ); > $response->is_success || print FILE_ERR "$id\t$url:\t", > $response->message, "\n"; > > И далее парсим > $response->headers_as_string > > на предмет 'Content-Length' > > Но, к сожалению удручает то, что не всегда заголовок скачиваемой страницы > содержит поле 'Content-Length' > :( > > Спасибо, > ANG > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From monk на nuked.su Sun Oct 27 07:13:13 2013 From: monk на nuked.su (Maxim) Date: Sun, 27 Oct 2013 18:13:13 +0400 Subject: [Moscow.pm] =?utf-8?b?RXh0VXRpbHM6Ok1ha2VNYWtlcjog0LTQvtC/0L4=?= =?utf-8?b?0LvQvdC40YLQtdC70YzQvdGL0LUg0L/Rg9GC0Lgg0L/QvtC40YHQutCwINCy?= =?utf-8?q?_LIBS_=D0=B8_INC?= In-Reply-To: <20131027090014.GA32419@shroompy> References: <20131027090014.GA32419@shroompy> Message-ID: <1382883193.4678.10.camel@cruel.crystalnet.ru> В Makefile-ах обычно корректно поддерживаются переменные типа CFLAGS CXXFLAGS и LDFLAGS, соответственно можно писать что-то вроде perl Makefile.PL && \ CFLAGS="-I/home/mvuets/foo" \ LDFLAGS="-L/home/mvuets/foo" \ make && \ make test && \ make install On Sun, 2013-10-27 at 10:00 +0100, Maxim Vuets wrote: > Пишу XS модуль. Упращённый Makefile.PL выглядит так: > > use ExtUtils::MakeMaker; > WriteMakefile( > NAME => "Foo", > LIBS => ["-lfoo"], > INC => "-I.", > ); > > Проблема: необходимая libfoo.a и её заголовочные файлы находятся в > каком-то произвольном месте, скажем /home/mvuets/foo. Как я могу указать > дополнительные -L/home/mvuets/foo и -I/home/mvuets/foo _без модификации_ > исходного Makefile.PL? (Например: через переменные окружения, аргументы > коммандной строки?..) Это необходимо для сборки модуля с разными > версиями внешней библиотеки без установки этой библиотеки в масштабе > всей системы. > > Я знаю, что WriteMakefile() позволяет _переопределять_ все аргументы, но > не вижу способа как их _дополнить_. Т.е. хочется чего-то в духе: > > ./Makefile.PL LIBS+="$HOME/foo" INC+="$HOME/foo" From ali на ali.org.ua Mon Oct 28 05:53:01 2013 From: ali на ali.org.ua (Oleg Alistratov) Date: Mon, 28 Oct 2013 14:53:01 +0200 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> Message-ID: <193831382964781@web24m.yandex.ru> Сначала запросить HEAD, у хорошего сервера там уже все будет. Для нехорошего затем можно сделать GET, указав Range: bytes=0-20479 (это если первых 20 Кб достаточно). Совсем нехороший сервер и Range проигнорирует (а для динамически генерируемых данных он почти никогда не поддерживается). На этот случай у LWP::UserAgent->get есть параметр :content_cb, туда передается колбэк, который будет вызываться на каждый скачанный чанк данных. Если принимать данные уже не хочется, то в колбэке можно просто умереть. В доке по LWP::UserAgent все написано. 27.10.2013, 09:44, "Alessandro Gorohovski" : > Mons Anderson писал(а) в своём письме Sun, 27 Oct 2013 > 01:30:14 +0300: > >>  On 26.10.2013, at 23:58, Alessandro Gorohovski >>  wrote: >>>  Уважаемое сообщество, >>>  Добрый вечер! >>> >>>  Подскажите, >>>  можно ли надежно и как определить размер (объем) >>>  предполагаемого к скачиванию контента >>>  (например, html-страницы) без загрузки всей страницы. >>> >>>  Я сейчас пользуюсь >>> >>>  my $agent = LWP::UserAgent->new; >>> >>>  my $request = HTTP::Request->new( GET => $url ); >>>  $request->header('Accept' => 'text/html'); >>> >>>  my $response = $agent->request( $request ); >>  В этом месте вы уже получили весь ответ целиком. > > Согласен. > >>>  $response->is_success || print FILE_ERR "$id\t$url:\t", >>>  $response->message, "\n"; >>> >>>  И далее парсим >>>  $response->headers_as_string >>> >>>  на предмет 'Content-Length' >>> >>>  Но, к сожалению удручает то, что не всегда заголовок скачиваемой >>>  страницы >>>  содержит поле  'Content-Length' >>>  :( >>  Если content-length нет, то значит там ответ transfer-encoding: chunked. >>  а это, в свою очередь, означает, то вы не можете заранее узнать какой >>  длины будет ответ, пока не считаете его целиком. > > Печально. > А может существует способ при котором можно было бы управлять количество > байт скачиваемого контента, например, загрузив не более 20 kb, прекращать > прием данных > (разорвать соединение принудительно) > ? > > -- > ANG > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- Oleg Alistratov From mi на ya.ru Mon Oct 28 06:10:27 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 28 Oct 2013 17:10:27 +0400 Subject: [Moscow.pm] =?koi8-r?b?dXNlIE1vZHVsZSDXINrB18nTyc3P09TJIM/UIE9z?= Message-ID: <273381382965827@web17h.yandex.ru> Вложение в формате HTML было извлечено… URL: From mons на cpan.org Mon Oct 28 06:16:19 2013 From: mons на cpan.org (Mons Anderson) Date: Mon, 28 Oct 2013 17:16:19 +0400 Subject: [Moscow.pm] =?koi8-r?b?dXNlIE1vZHVsZSDXINrB18nTyc3P09TJIM/UIE9z?= In-Reply-To: <273381382965827@web17h.yandex.ru> References: <273381382965827@web17h.yandex.ru> Message-ID: <939EA03D-BE56-4AE9-B4EE-5CECE3ECBFD5@corp.mail.ru> такой код работать не будет нужно как-то так: BEGIN { require open; if ( $^O eq 'Win32' ) { } else { open->import(":locale") } } On 28.10.2013, at 17:10, Nikolay Mishin wrote: > Moscow PM,привет!! > > есть скрипт, в котором написано > use open ':locale'; > в unix все работает > в win32 > Cannot figure out an encoding to use at trans.pl line 25 > как сделать так, чтобы use использовалась взависимости от OS > в BEGIN что-ли запихнуть? > > use Devel::CheckOS qw(os_is); > > BEGIN { > if ( os_is('Unix') ) { > > use open ':locale'; > } > } > > https://github.com/mishin/gists/blob/master/trans.pl > > -- > С уважением > Николай Мишин > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From proler на gmail.com Mon Oct 28 06:16:45 2013 From: proler на gmail.com (=?utf-8?B?0J7Qu9C10LMg0JDQu9C10LrRgdC10LXQvdC60L7Qsg==?=) Date: Mon, 28 Oct 2013 17:16:45 +0400 Subject: [Moscow.pm] =?utf-8?b?dXNlIE1vZHVsZSDQsiDQt9Cw0LLQuNGB0LjQvNC+?= =?utf-8?b?0YHRgtC4INC+0YIgT3M=?= In-Reply-To: <273381382965827@web17h.yandex.ru> References: <273381382965827@web17h.yandex.ru> Message-ID: Nikolay Mishin писал(а) в своём письме Mon, 28 Oct 2013 17:10:27 +0400: в eval "" > Moscow PM,привет!! > > есть скрипт, в котором написано > > use open ':locale'; > > в unix все работает > > в win32 > > Cannot figure out an encoding to use at trans.pl line 25 > > как сделать так, чтобы use использовалась взависимости от OS > > в BEGIN что-ли запихнуть? > > use Devel::CheckOS qw(os_is); > > BEGIN { > if ( os_is('Unix') ) { > > use open ':locale'; > } > } > > https://github.com/mishin/gists/blob/master/trans.pl From alexeyaleksandrov на gmail.com Mon Oct 28 07:24:27 2013 From: alexeyaleksandrov на gmail.com (=?KOI8-R?B?4czFy9PFyiDhzMXL08HOxNLP1w==?=) Date: Mon, 28 Oct 2013 18:24:27 +0400 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> Message-ID: | А может существует способ при котором можно было бы управлять количество | байт скачиваемого контента, Можно так сделать LWP::UserAgent->max_size($bytes) "Get/set the size limit for response content." 27 октября 2013 г., 11:44 пользователь Alessandro Gorohovski < an.gorohovski на gmail.com> написал: > Mons Anderson писал(а) в своём письме Sun, 27 Oct 2013 > 01:30:14 +0300: > > > On 26.10.2013, at 23:58, Alessandro Gorohovski >> wrote: >> >> Уважаемое сообщество, >>> Добрый вечер! >>> >>> Подскажите, >>> можно ли надежно и как определить размер (объем) >>> предполагаемого к скачиванию контента >>> (например, html-страницы) без загрузки всей страницы. >>> >>> >>> Я сейчас пользуюсь >>> >>> my $agent = LWP::UserAgent->new; >>> >>> my $request = HTTP::Request->new( GET => $url ); >>> $request->header('Accept' => 'text/html'); >>> >>> my $response = $agent->request( $request ); >>> >> >> В этом месте вы уже получили весь ответ целиком. >> > > Согласен. > > > $response->is_success || print FILE_ERR "$id\t$url:\t", >>> $response->message, "\n"; >>> >>> И далее парсим >>> $response->headers_as_string >>> >>> на предмет 'Content-Length' >>> >>> Но, к сожалению удручает то, что не всегда заголовок скачиваемой страницы >>> содержит поле 'Content-Length' >>> :( >>> >>> >> >> Если content-length нет, то значит там ответ transfer-encoding: chunked. >> а это, в свою очередь, означает, то вы не можете заранее узнать какой >> длины будет ответ, пока не считаете его целиком. >> > > Печально. > А может существует способ при котором можно было бы управлять количество > байт скачиваемого контента, например, загрузив не более 20 kb, прекращать > прием данных > (разорвать соединение принудительно) > ? > > -- > ANG > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > -- Alexey Aleksandrov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Mon Oct 28 08:08:24 2013 From: mi на ya.ru (Nikolay Mishin) Date: Mon, 28 Oct 2013 19:08:24 +0400 Subject: [Moscow.pm] =?koi8-r?b?dXNlIE1vZHVsZSDXINrB18nTyc3P09TJIM/UIE9z?= In-Reply-To: References: <273381382965827@web17h.yandex.ru> Message-ID: <45551382972904@web19h.yandex.ru> Так что ли BEGIN { use Devel::CheckOS qw(os_is); if ( os_is('Unix') ) { eval q[ use open ':locale';]; } } https://github.com/mishin/gists/blob/master/trans.pl p.s. Mons, кстати твой код не работает require open; open->import(":locale") p.s. # can't use require_ok() here, with a name like 'open' ok( require 'open.pm', 'requiring open' ); из https://metacpan.org/source/JHI/perl-5.8.0/lib/open.t работает так: BEGIN { require 'open.pm'; if ( $^O ne 'Win32' ) { open::import('open','locale'); } } ну я еще люблю модули, поэтому так BEGIN { use Devel::CheckOS qw(os_is); require 'open.pm'; if ( os_is('Unix') ) { open::import( 'open', 'locale' ); } } https://github.com/mishin/gists/blob/master/trans.pl 28.10.2013, 17:17, "Олег Алексеенков" : > Nikolay Mishin писал(а) в своём письме Mon, 28 Oct 2013 > 17:10:27 +0400: > > в eval "" > >>  Moscow PM,привет!! >> >>  есть скрипт, в котором написано >> >>  use open ':locale'; >> >>  в unix все работает >> >>  в win32 >> >>  Cannot figure out an encoding to use at trans.pl line 25 >> >>  как сделать так, чтобы use использовалась взависимости от OS >> >>  в BEGIN что-ли запихнуть? >> >>  use Devel::CheckOS qw(os_is); >> >>  BEGIN { >>  if ( os_is('Unix') ) { >> >>  use open ':locale'; >>  } >>  } >> >>  https://github.com/mishin/gists/blob/master/trans.pl > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From an.gorohovski на gmail.com Mon Oct 28 08:16:21 2013 From: an.gorohovski на gmail.com (Alessandro Gorohovski) Date: Mon, 28 Oct 2013 17:16:21 +0200 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: <193831382964781@web24m.yandex.ru> References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> <193831382964781@web24m.yandex.ru> Message-ID: Добрый день Олег! Oleg Alistratov писал(а) в своём письме Mon, 28 Oct 2013 14:53:01 +0200: > Сначала запросить HEAD, у хорошего сервера там уже все будет. > Для нехорошего затем можно сделать GET, указав > > Range: bytes=0-20479 > > (это если первых 20 Кб достаточно). > > Совсем нехороший сервер и Range проигнорирует (а для динамически > генерируемых данных он почти никогда не поддерживается). > На этот случай у LWP::UserAgent->get есть параметр :content_cb, туда > передается колбэк, который будет вызываться на каждый скачанный чанк > данных. > Если принимать данные уже не хочется, то в колбэке можно просто умереть. > В доке по LWP::UserAgent все написано. Премного благодарен. :) Попробую разобраться в теории и перейти к практике. > 27.10.2013, 09:44, "Alessandro Gorohovski" : >> Mons Anderson писал(а) в своём письме Sun, 27 Oct 2013 >> 01:30:14 +0300: >> >>> On 26.10.2013, at 23:58, Alessandro Gorohovski >>> >>> wrote: >>>> Уважаемое сообщество, >>>> Добрый вечер! >>>> >>>> Подскажите, >>>> можно ли надежно и как определить размер (объем) >>>> предполагаемого к скачиванию контента >>>> (например, html-страницы) без загрузки всей страницы. >>>> >>>> Я сейчас пользуюсь >>>> >>>> my $agent = LWP::UserAgent->new; >>>> >>>> my $request = HTTP::Request->new( GET => $url ); >>>> $request->header('Accept' => 'text/html'); >>>> >>>> my $response = $agent->request( $request ); >>> В этом месте вы уже получили весь ответ целиком. >> >> Согласен. >> >>>> $response->is_success || print FILE_ERR "$id\t$url:\t", >>>> $response->message, "\n"; >>>> >>>> И далее парсим >>>> $response->headers_as_string >>>> >>>> на предмет 'Content-Length' >>>> >>>> Но, к сожалению удручает то, что не всегда заголовок скачиваемой >>>> страницы >>>> содержит поле 'Content-Length' >>>> :( >>> Если content-length нет, то значит там ответ transfer-encoding: >>> chunked. >>> а это, в свою очередь, означает, то вы не можете заранее узнать какой >>> длины будет ответ, пока не считаете его целиком. >> >> Печально. >> А может существует способ при котором можно было бы управлять количество >> байт скачиваемого контента, например, загрузив не более 20 kb, >> прекращать >> прием данных >> (разорвать соединение принудительно) >> ? >> >> -- >> ANG >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > -- ANG From an.gorohovski на gmail.com Mon Oct 28 08:17:51 2013 From: an.gorohovski на gmail.com (Alessandro Gorohovski) Date: Mon, 28 Oct 2013 17:17:51 +0200 Subject: [Moscow.pm] Content-Length of Webpage In-Reply-To: References: <027A018B-43C2-4372-832E-C8AA97AF68FB@corp.mail.ru> Message-ID: Алексей Александров писал(а) в своём письме Mon, 28 Oct 2013 16:24:27 +0200: > | А может существует способ при котором можно было бы управлять > количество > | байт скачиваемого контента, > > Можно так сделать LWP::UserAgent->max_size($bytes) > "Get/set the size limit for response content." Пробовал в первую очередь. Нет, это вообще --- ерунда и правильно, надежно не работает. > 27 октября 2013 г., 11:44 пользователь Alessandro Gorohovski < > an.gorohovski на gmail.com> написал: > >> Mons Anderson писал(а) в своём письме Sun, 27 Oct 2013 >> 01:30:14 +0300: >> >> >> On 26.10.2013, at 23:58, Alessandro Gorohovski >> >>> wrote: >>> >>> Уважаемое сообщество, >>>> Добрый вечер! >>>> >>>> Подскажите, >>>> можно ли надежно и как определить размер (объем) >>>> предполагаемого к скачиванию контента >>>> (например, html-страницы) без загрузки всей страницы. >>>> >>>> >>>> Я сейчас пользуюсь >>>> >>>> my $agent = LWP::UserAgent->new; >>>> >>>> my $request = HTTP::Request->new( GET => $url ); >>>> $request->header('Accept' => 'text/html'); >>>> >>>> my $response = $agent->request( $request ); >>>> >>> >>> В этом месте вы уже получили весь ответ целиком. >>> >> >> Согласен. >> >> >> $response->is_success || print FILE_ERR "$id\t$url:\t", >>>> $response->message, "\n"; >>>> >>>> И далее парсим >>>> $response->headers_as_string >>>> >>>> на предмет 'Content-Length' >>>> >>>> Но, к сожалению удручает то, что не всегда заголовок скачиваемой >>>> страницы >>>> содержит поле 'Content-Length' >>>> :( >>>> >>>> >>> >>> Если content-length нет, то значит там ответ transfer-encoding: >>> chunked. >>> а это, в свою очередь, означает, то вы не можете заранее узнать какой >>> длины будет ответ, пока не считаете его целиком. >>> >> >> Печально. >> А может существует способ при котором можно было бы управлять количество >> байт скачиваемого контента, например, загрузив не более 20 kb, >> прекращать >> прием данных >> (разорвать соединение принудительно) >> ? >> >> -- >> ANG >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org >> > > > -- ANG From mons на cpan.org Mon Oct 28 09:40:24 2013 From: mons на cpan.org (Mons Anderson) Date: Mon, 28 Oct 2013 20:40:24 +0400 Subject: [Moscow.pm] =?windows-1251?b?dXNlIE1vZHVsZSDiIOfg4ujx6Ozu8fLoIO7y?= =?windows-1251?q?_Os?= In-Reply-To: <45551382972904@web19h.yandex.ru> References: <273381382965827@web17h.yandex.ru> <45551382972904@web19h.yandex.ru> Message-ID: <3E84DAA1-E16D-4929-8227-392F16725B45@corp.mail.ru> ну тогда напиши use open (); BEGIN { if (?) { "open"->import(":locale"); } } просто трактуется как вызов CORE::open(...) On 28.10.2013, at 19:08, Nikolay Mishin wrote: > Так что ли > > BEGIN { > use Devel::CheckOS qw(os_is); > if ( os_is('Unix') ) { > eval q[ use open ':locale';]; > } > } > > https://github.com/mishin/gists/blob/master/trans.pl > > p.s. > Mons, кстати твой код не работает > require open; > open->import(":locale") > > p.s. # can't use require_ok() here, with a name like 'open' > ok( require 'open.pm', 'requiring open' ); из https://metacpan.org/source/JHI/perl-5.8.0/lib/open.t > > работает так: > > BEGIN { > require 'open.pm'; > if ( $^O ne 'Win32' ) { > open::import('open','locale'); > } > } > > > ну я еще люблю модули, поэтому так > > BEGIN { > use Devel::CheckOS qw(os_is); > require 'open.pm'; > if ( os_is('Unix') ) { > open::import( 'open', 'locale' ); > } > } > > https://github.com/mishin/gists/blob/master/trans.pl > > > > 28.10.2013, 17:17, "Олег Алексеенков" : >> Nikolay Mishin писал(а) в своём письме Mon, 28 Oct 2013 >> 17:10:27 +0400: >> >> в eval "" >> >>> Moscow PM,привет!! >>> >>> есть скрипт, в котором написано >>> >>> use open ':locale'; >>> >>> в unix все работает >>> >>> в win32 >>> >>> Cannot figure out an encoding to use at trans.pl line 25 >>> >>> как сделать так, чтобы use использовалась взависимости от OS >>> >>> в BEGIN что-ли запихнуть? >>> >>> use Devel::CheckOS qw(os_is); >>> >>> BEGIN { >>> if ( os_is('Unix') ) { >>> >>> use open ':locale'; >>> } >>> } >>> >>> https://github.com/mishin/gists/blob/master/trans.pl >> >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org > > -- > С уважением > Николай Мишин > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org From chesnokov.ilya на gmail.com Mon Oct 28 10:38:34 2013 From: chesnokov.ilya на gmail.com (Ilya Chesnokov) Date: Mon, 28 Oct 2013 21:38:34 +0400 Subject: [Moscow.pm] =?utf-8?b?dXNlIE1vZHVsZSDQsiDQt9Cw0LLQuNGB0LjQvNC+?= =?utf-8?b?0YHRgtC4INC+0YIgT3M=?= In-Reply-To: <45551382972904@web19h.yandex.ru> References: <273381382965827@web17h.yandex.ru> <45551382972904@web19h.yandex.ru> Message-ID: 28 октября 2013 г., 19:08 пользователь Nikolay Mishin написал: > ну я еще люблю модули, поэтому так > > BEGIN { > use Devel::CheckOS qw(os_is); > Ха-ха ) Порадовал этот модуль. У него в description: A learned sage once wrote on IRC: $^O is stupid and ugly, it wears its pants as a hat -- Best regards, Ilya Chesnokov ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Mon Oct 28 13:04:16 2013 From: mi на ya.ru (Nikolay Mishin) Date: Tue, 29 Oct 2013 00:04:16 +0400 Subject: [Moscow.pm] =?koi8-r?b?z8LSwcLP1MvBIM/bycLPyyDXIHBlcmw=?= Message-ID: <157631382990656@web23j.yandex.ru> Вложение в формате HTML было извлечено… URL: From ilvin на mail.ru Mon Oct 28 13:33:39 2013 From: ilvin на mail.ru (=?UTF-8?B?0JjQu9GM0Y8g0JLQuNC90L7QutGD0YDQvtCy?=) Date: Tue, 29 Oct 2013 00:33:39 +0400 Subject: [Moscow.pm] =?utf-8?q?Content-Length_of_Webpage?= In-Reply-To: References: Message-ID: <1382992419.503908301@f362.i.mail.ru> Тогда, Батенька, IO::Socket вам в помощь... С почтением,   Илья Винокуров Понедельник, 28 октября 2013, 17:17 +02:00 от "Alessandro Gorohovski" : >Алексей Александров < alexeyaleksandrov на gmail.com > писал(а) в своём письме >Mon, 28 Oct 2013 16:24:27 +0200: > >> | А может существует способ при котором можно было бы управлять >> количество >> | байт скачиваемого контента, >> >> Можно так сделать LWP::UserAgent->max_size($bytes) >> "Get/set the size limit for response content." > >Пробовал в первую очередь. >Нет, это вообще --- ерунда и >правильно, надежно не работает. > >> 27 октября 2013 г., 11:44 пользователь Alessandro Gorohovski < >> an.gorohovski на gmail.com > написал: >> >>> Mons Anderson < mons на cpan.org > писал(а) в своём письме Sun, 27 Oct 2013 >>> 01:30:14 +0300: >>> >>> >>> On 26.10.2013, at 23:58, Alessandro Gorohovski >>> < an.gorohovski на gmail.com > >>>> wrote: >>>> >>>> Уважаемое сообщество, >>>>> Добрый вечер! >>>>> >>>>> Подскажите, >>>>> можно ли надежно и как определить размер (объем) >>>>> предполагаемого к скачиванию контента >>>>> (например, html-страницы) без загрузки всей страницы. >>>>> >>>>> >>>>> Я сейчас пользуюсь >>>>> >>>>> my $agent = LWP::UserAgent->new; >>>>> >>>>> my $request = HTTP::Request->new( GET => $url ); >>>>> $request->header('Accept' => 'text/html'); >>>>> >>>>> my $response = $agent->request( $request ); >>>>> >>>> >>>> В этом месте вы уже получили весь ответ целиком. >>>> >>> >>> Согласен. >>> >>> >>> $response->is_success || print FILE_ERR "$id\t$url:\t", >>>>> $response->message, "\n"; >>>>> >>>>> И далее парсим >>>>> $response->headers_as_string >>>>> >>>>> на предмет 'Content-Length' >>>>> >>>>> Но, к сожалению удручает то, что не всегда заголовок скачиваемой >>>>> страницы >>>>> содержит поле 'Content-Length' >>>>> :( >>>>> >>>>> >>>> >>>> Если content-length нет, то значит там ответ transfer-encoding: >>>> chunked. >>>> а это, в свою очередь, означает, то вы не можете заранее узнать какой >>>> длины будет ответ, пока не считаете его целиком. >>>> >>> >>> Печально. >>> А может существует способ при котором можно было бы управлять количество >>> байт скачиваемого контента, например, загрузив не более 20 kb, >>> прекращать >>> прием данных >>> (разорвать соединение принудительно) >>> ? >>> >>> -- >>> ANG >>> >>> -- >>> Moscow.pm mailing list >>> moscow-pm на pm.org | http://moscow.pm.org >>> >> >> >> > > >-- >ANG >-- >Moscow.pm mailing list >moscow-pm на pm.org | http://moscow.pm.org -- Илья Винокуров ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From asan999 на gmail.com Mon Oct 28 14:09:39 2013 From: asan999 на gmail.com (=?KOI8-R?Q?=E1=CE=C4=D2=C5=CA_=E1=D3=D1=CB=C9=CE?=) Date: Tue, 29 Oct 2013 01:09:39 +0400 Subject: [Moscow.pm] =?koi8-r?b?z8LSwcLP1MvBIM/bycLPyyDXIHBlcmw=?= In-Reply-To: <157631382990656@web23j.yandex.ru> References: <157631382990656@web23j.yandex.ru> Message-ID: <526ED293.60008@gmail.com> $ERRNO это $!, а ни $@, а в Try::Tiny вроде $_ используется: perl -MCarp -MTry::Tiny -E 'try { croak "aaaaa" } catch { say "XXX: $_" }' так что все работает 29.10.2013 0:04, Nikolay Mishin пишет: > MoscowPM, привет, > ну и напоследок перед сном;)) > Нужно мне было, если не запущен firefox, то запустить его, пишу > (https://github.com/mishin/gists/blob/master/trans.pl > 100-133) > my $url = 'http://www.translate.ru/'; > my $firemech; > > my $lived = eval { > $firemech = WWW::Mechanize::Firefox->new( tab => qr/PROMT/sm, ); > 1; > }; > my $err = $ERRNO; # $@; > > given ($err) { > > #Failed to connect to , problem connecting to "localhost", port 4242: > Connection refused at /usr/local/share/perl/5.14.2/MozRepl/Client.pm > line 144 > when (/\QFailed to connect to , problem connecting to\E/xsm) { > > # use Test::More; > # is $lived, undef, 'We died trying to connect to a > non-existing tab'; > # like $err, q{/Couldn't find a tab matching/}, > # 'We got the correct error message'; > my $path_to_firefox = > os_is('MSWin32') > ? 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe' > : '/usr/bin/firefox'; > $firemech = WWW::Mechanize::Firefox->new( > tab => 'current', > launch => $path_to_firefox > ); > $firemech->get($url) or die "Cannot connect to $url\n"; > } > > #Couldn't find a tab matching /(?^ums:PROMT)/ at trans.pl line > 100. > when (/\QCouldn't find a tab matching\E/xsm) { > say 'we match error' . $_; > $firemech = WWW::Mechanize::Firefox->new( tab => 'current', ); > $firemech->get($url) or die "Cannot connect to $url\n"; > } > } > Так вот никакой Try:;Tiny ни Error.pm > мне не помог, как это под них переписать > я не пойму, чтобы работало > Error.pm - вообще классы ошибок надо строить,а как не ясно > в общем по старинке ловлю ошибки эвалом eval > дело в том еще, что WWW::Mechanize::Firefox > > https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/lib/WWW/Mechanize/Firefox.pm > внутри себя ипользует > useCarp qw(carp croak ); > и, таким образом, все ошибки пролетают мимо Try::Tiny > - их невозможно поймать, > в общем я их обрабатываю, как в тестах к модулю > https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t > хоть Try::Tiny я и люблю, но, когда нужно написать > что-нибудь рабочее - плюешь на Perl Best Practice > и пишешь, чтоб работало > -- > С уважением > Николай Мишин > > ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From mi на ya.ru Mon Oct 28 14:51:52 2013 From: mi на ya.ru (Nikolay Mishin) Date: Tue, 29 Oct 2013 01:51:52 +0400 Subject: [Moscow.pm] =?koi8-r?b?z8LSwcLP1MvBIM/bycLPyyDXIHBlcmw=?= In-Reply-To: <526ED293.60008@gmail.com> References: <157631382990656@web23j.yandex.ru> <526ED293.60008@gmail.com> Message-ID: <297811382997112@web11j.yandex.ru> Андрей, спасибо, да действительно Try::Tiny работает, вот 2 теста с eval https://github.com/mishin/gists/blob/master/test_ff1.pl c Try::Tiny https://github.com/mishin/gists/blob/master/test_ff1_try.pl действительно ошибки ловятся, но все равно в 5.18 perlcritic -5 требует использования Error.pm а как написать на нем error class ума не приложу, все примеры в документации какие-то не выразительные может кто умеет? 29.10.2013, 01:10, "Андрей Асякин" : > $ERRNO это $!, а ни $@, а в Try::Tiny вроде $_ используется: > >  perl -MCarp -MTry::Tiny -E 'try { croak "aaaaa" } catch { say "XXX: $_" }' > > так что все работает > > 29.10.2013 0:04, Nikolay Mishin пишет: > >> MoscowPM, привет, >> ну и напоследок перед сном;)) >> >> Нужно мне было, если не запущен firefox, то запустить его, пишу (https://github.com/mishin/gists/blob/master/trans.pl >>  100-133) >> >>     my $url = 'http://www.translate.ru/'; >>     my $firemech; >> >>     my $lived = eval { >>         $firemech = WWW::Mechanize::Firefox->new( tab => qr/PROMT/sm, ); >>         1; >>     }; >>     my $err = $ERRNO;    # $@; >> >>     given ($err) { >> >> #Failed to connect to , problem connecting to "localhost", port 4242: Connection refused at /usr/local/share/perl/5.14.2/MozRepl/Client.pm line 144 >>         when (/\QFailed to connect to , problem connecting to\E/xsm) { >> >>   #        use Test::More; >>   #         is $lived, undef, 'We died trying to connect to a non-existing tab'; >>   #         like $err, q{/Couldn't find a tab matching/}, >>   #           'We got the correct error message'; >>             my $path_to_firefox = >>               os_is('MSWin32') >>               ? 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe' >>               : '/usr/bin/firefox'; >>             $firemech = WWW::Mechanize::Firefox->new( >>                 tab    => 'current', >>                 launch => $path_to_firefox >>             ); >>             $firemech->get($url) or die "Cannot connect to $url\n"; >>         } >> >>         #Couldn't find a tab matching /(?^ums:PROMT)/ at trans.pl line 100. >>         when (/\QCouldn't find a tab matching\E/xsm) { >>             say 'we match error' . $_; >>             $firemech = WWW::Mechanize::Firefox->new( tab => 'current', ); >>             $firemech->get($url) or die "Cannot connect to $url\n"; >>         } >>     } >> >> Так вот никакой Try:;Tiny ни Error.pm >> мне не помог, как это под них переписать >> я не пойму, чтобы работало >> Error.pm - вообще классы ошибок надо строить,а  как не ясно >> >> в общем по старинке ловлю ошибки эвалом eval >> дело в том еще, что WWW::Mechanize::Firefox >> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/lib/WWW/Mechanize/Firefox.pm >> внутри себя ипользует >> useCarpqw(carp croak ); >> и, таким образом, все ошибки пролетают мимо Try::Tiny >> - их невозможно поймать, >> в общем я их обрабатываю, как в тестах к модулю >> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t >> >> хоть Try::Tiny я и люблю, но, когда нужно написать >> что-нибудь рабочее - плюешь на Perl Best Practice >> и пишешь, чтоб работало >> -- >> С уважением >> Николай Мишин > > , > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org -- С уважением Николай Мишин From asan999 на gmail.com Mon Oct 28 15:31:09 2013 From: asan999 на gmail.com (=?KOI8-R?Q?=E1=CE=C4=D2=C5=CA_=E1=D3=D1=CB=C9=CE?=) Date: Tue, 29 Oct 2013 02:31:09 +0400 Subject: [Moscow.pm] =?koi8-r?b?z8LSwcLP1MvBIM/bycLPyyDXIHBlcmw=?= In-Reply-To: <297811382997112@web11j.yandex.ru> References: <157631382990656@web23j.yandex.ru> <526ED293.60008@gmail.com> <297811382997112@web11j.yandex.ru> Message-ID: <526EE5AD.7050701@gmail.com> Ну мало ли, чего он требует. В описании модуля сказано, что - 'Using the "Error" module is *no longer recommended* due to the black-magical nature of its syntactic sugar, which often tends to break.' Лучше в таком случае избавиться и от Error.pm, и от perlclinic perlcritic заодно)) А использовать наверно как-то так: perl -MError=:try -E 'try { throw XXX("Aaaaa") } catch XXX with { say shift }; package XXX; use parent "Error::Simple"; sub new { my $e = shift->SUPER::new(@_); bless $e, __PACKAGE__ } 1' 29.10.2013 1:51, Nikolay Mishin пишет: > Андрей, спасибо, да действительно Try::Tiny работает, > вот 2 теста > с eval > https://github.com/mishin/gists/blob/master/test_ff1.pl > c Try::Tiny > https://github.com/mishin/gists/blob/master/test_ff1_try.pl > действительно ошибки ловятся, > но все равно > в 5.18 perlcritic -5 требует использования > Error.pm > а как написать на нем error class ума не приложу, > все примеры в документации какие-то не выразительные > может кто умеет? > > 29.10.2013, 01:10, "Андрей Асякин" : >> $ERRNO это $!, а ни $@, а в Try::Tiny вроде $_ используется: >> >> perl -MCarp -MTry::Tiny -E 'try { croak "aaaaa" } catch { say "XXX: $_" }' >> >> так что все работает >> >> 29.10.2013 0:04, Nikolay Mishin пишет: >> >>> MoscowPM, привет, >>> ну и напоследок перед сном;)) >>> >>> Нужно мне было, если не запущен firefox, то запустить его, пишу (https://github.com/mishin/gists/blob/master/trans.pl >>> 100-133) >>> >>> my $url = 'http://www.translate.ru/'; >>> my $firemech; >>> >>> my $lived = eval { >>> $firemech = WWW::Mechanize::Firefox->new( tab => qr/PROMT/sm, ); >>> 1; >>> }; >>> my $err = $ERRNO; # $@; >>> >>> given ($err) { >>> >>> #Failed to connect to , problem connecting to "localhost", port 4242: Connection refused at /usr/local/share/perl/5.14.2/MozRepl/Client.pm line 144 >>> when (/\QFailed to connect to , problem connecting to\E/xsm) { >>> >>> # use Test::More; >>> # is $lived, undef, 'We died trying to connect to a non-existing tab'; >>> # like $err, q{/Couldn't find a tab matching/}, >>> # 'We got the correct error message'; >>> my $path_to_firefox = >>> os_is('MSWin32') >>> ? 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe' >>> : '/usr/bin/firefox'; >>> $firemech = WWW::Mechanize::Firefox->new( >>> tab => 'current', >>> launch => $path_to_firefox >>> ); >>> $firemech->get($url) or die "Cannot connect to $url\n"; >>> } >>> >>> #Couldn't find a tab matching /(?^ums:PROMT)/ at trans.pl line 100. >>> when (/\QCouldn't find a tab matching\E/xsm) { >>> say 'we match error' . $_; >>> $firemech = WWW::Mechanize::Firefox->new( tab => 'current', ); >>> $firemech->get($url) or die "Cannot connect to $url\n"; >>> } >>> } >>> >>> Так вот никакой Try:;Tiny ни Error.pm >>> мне не помог, как это под них переписать >>> я не пойму, чтобы работало >>> Error.pm - вообще классы ошибок надо строить,а как не ясно >>> >>> в общем по старинке ловлю ошибки эвалом eval >>> дело в том еще, что WWW::Mechanize::Firefox >>> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/lib/WWW/Mechanize/Firefox.pm >>> внутри себя ипользует >>> useCarpqw(carp croak ); >>> и, таким образом, все ошибки пролетают мимо Try::Tiny >>> - их невозможно поймать, >>> в общем я их обрабатываю, как в тестах к модулю >>> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t >>> >>> хоть Try::Tiny я и люблю, но, когда нужно написать >>> что-нибудь рабочее - плюешь на Perl Best Practice >>> и пишешь, чтоб работало >>> -- >>> С уважением >>> Николай Мишин >> , >> -- >> Moscow.pm mailing list >> moscow-pm на pm.org | http://moscow.pm.org ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From snelius на tsu.ru Mon Oct 28 20:37:51 2013 From: snelius на tsu.ru (Anatoly Y.) Date: Tue, 29 Oct 2013 10:37:51 +0700 Subject: [Moscow.pm] =?koi8-r?b?z8LSwcLP1MvBIM/bycLPyyDXIHBlcmw=?= In-Reply-To: <297811382997112@web11j.yandex.ru> References: <157631382990656@web23j.yandex.ru> <526ED293.60008@gmail.com> <297811382997112@web11j.yandex.ru> Message-ID: <526F2D8F.60906@tsu.ru> On 29.10.2013 04:51, Nikolay Mishin wrote: > Андрей, спасибо, да действительно Try::Tiny работает, > вот 2 теста > с eval > https://github.com/mishin/gists/blob/master/test_ff1.pl > c Try::Tiny > https://github.com/mishin/gists/blob/master/test_ff1_try.pl > действительно ошибки ловятся, Дык try реализован чз eval, причём первый значительно медленнее второго в случае eval {}. Имхо try вообще пользовать не стоит. -- Anatoly Y. aka Snelius | AY254-RIPE From ruz на bestpractical.com Mon Oct 28 23:29:03 2013 From: ruz на bestpractical.com (Ruslan Zakirov) Date: Tue, 29 Oct 2013 10:29:03 +0400 Subject: [Moscow.pm] =?utf-8?b?dXNlIE1vZHVsZSDQsiDQt9Cw0LLQuNGB0LjQvNC+?= =?utf-8?b?0YHRgtC4INC+0YIgT3M=?= In-Reply-To: References: <273381382965827@web17h.yandex.ru> <45551382972904@web19h.yandex.ru> Message-ID: perl -e 'use Devel::CheckOS qw(os_is); use open os_is("Unix")? ":locale" : os_is("Windows") ? do { require Win32::Codepage; (":std", ":encoding(". Win32::Codepage::get_encoding().")" ) }: ();' Что мешает сделать так? 2013/10/28 Ilya Chesnokov > 28 октября 2013 г., 19:08 пользователь Nikolay Mishin написал: > >> ну я еще люблю модули, поэтому так >> >> BEGIN { >> use Devel::CheckOS qw(os_is); >> > > Ха-ха ) Порадовал этот модуль. У него в description: > > A learned sage once wrote on IRC: > $^O is stupid and ugly, it wears its pants as a hat > > > -- > Best regards, > Ilya Chesnokov > > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org > > -- Best regards, Ruslan. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From rpnwork на yandex.ru Thu Oct 31 05:09:25 2013 From: rpnwork на yandex.ru (from_mars) Date: Thu, 31 Oct 2013 23:09:25 +1100 Subject: [Moscow.pm] Getopt::Long::GetOptionsFromString Message-ID: Утра. Пишу жабер-бота и хочу прикрутить к нему обработку опций. Опции хочу парсить этой функцией - Getopt::Long::GetOptionsFromString. Вопрос такой - безопасно ли в нее кидать строки из чата или их нужно как-то экранировать от хакеров? :) И почему? Спасибо. From v.perepelitsa на corp.mail.ru Sat Oct 26 15:43:57 2013 From: v.perepelitsa на corp.mail.ru (Mons Anderson) Date: Sat, 26 Oct 2013 22:43:57 -0000 Subject: [Moscow.pm] =?koi8-r?b?7c/E1czJIMTM0SDSwcLP1Nkg088g19LFzcXOxc0=?= In-Reply-To: References: Message-ID: <98CBE37F-FB2B-49F9-B93D-53D5ACC2B97A@corp.mail.ru> Если у тебя 2 строки формата %Y-%m-%d %H:%M:%S, то быстрее чем cmp/lt/gt/eq у тебя никак не получится. даже есть сделать вызов XS, и в нем memcmp, то получается как-то так: lt: 6354176.17/s cmp: 6062612.68/s xs: 4580193.05/s А вообще приведи бенчмарк целиком. On 26.10.2013, at 23:33, Андрей П. Ковбович wrote: > Какой модуль или способ сейчас считается самым быстрым, чтобы сравнить две даты формата YYYY-mm-dd HH:MM::SS? Как уложиться в 1 микросекунду? > > Benchmark: running Class::Date, Date::Manip, DateTime, Time::Piece for at least 1 CPU seconds... > Class::Date: 0 wallclock secs ( 0.89 usr + 0.13 sys = 1.02 CPU) @ 13175.49/s (n=13439) > Date::Manip: 1 wallclock secs ( 1.09 usr + 0.01 sys = 1.10 CPU) @ 407.27/s (n=448) > DateTime: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 10437.86/s (n=10751) > Time::Piece: 1 wallclock secs ( 1.01 usr + 0.00 sys = 1.01 CPU) @ 179293.07/s (n=181086) > -- > Moscow.pm mailing list > moscow-pm на pm.org | http://moscow.pm.org