[Moscow.pm] Encode: danko gay, все геи - вредители!

Vladimir Timofeev vovkasm на gmail.com
Ср Окт 19 04:16:07 PDT 2016


Оставлю это здесь, в надежде, что подобных ошибок в будущем будет меньше.

2016-10-19 0:09 GMT+03:00 Ivan Petrov <i.petro.77.00 на gmail.com>:
>
>>> $dbh->>> selectrow_hashref('/* получим юзера */ SELECT * FROM users WHERE id = 1')
>
>> А как вас называет за такое? :D
>
> а что не нравится-то?
> русские коменты в SQL? хотим видеть их в pg_top - разве плохое
> желание?
>

Нормальное желание, делается так:

    use 5.024;
    use warnings;
    use utf8;

    use Test::More;
    use DBI;

    my $dbh = DBI->connect('dbi:Pg:dbname=test', '', '', {
            AutoCommit => 1,
            RaiseError => 1,
        });

    $dbh->do('/* Удаляем старую таблицу */ DROP TABLE IF EXISTS sample_test');
    $dbh->do('/* Создаём таблицу */ CREATE TABLE sample_test (id
integer, value text)');
    $dbh->do('/* Вставляем данные */ INSERT INTO sample_test VALUES
(?,?),(?,?)', undef, 10, 'Привет', 20, 'Медвед');
    my $result = $dbh->selectrow_hashref('/* получим данные */ SELECT
* FROM sample_test WHERE id = 10');

    is $result->{id}, 10;
    is $result->{value}, 'Привет';

    $dbh->disconnect;

    done_testing;


В логах видим:

LOG:  statement: /* Удаляем старую таблицу */ DROP TABLE IF EXISTS sample_test
LOG:  statement: /* Создаём таблицу */ CREATE TABLE sample_test (id
integer, value text)
LOG:  statement: /* Вставляем данные */ INSERT INTO sample_test VALUES
('10','Привет'),('20','Медвед')
LOG:  statement: /* получим данные */ SELECT * FROM sample_test WHERE id = 10

Может уже пофиксили? Perl 5.24.0, DBI 1.636, DBD::Pg 3.5.3

> проблема в том что открытие issue иногда приводит к обратному
> результату.
> вот я наблюдал issue на mojo, про упомянутый utf8.
>
> в Test::More можно написать ok $var, 'тест пройден';
> в Test::Mojo можно БЫЛО написать get_ok($url, 'тест пройден')
> человек открыл багу про json_is($bla, 'тест пройден')
>
> в итоге гей на букву п багу закрыл и сломал get_ok и все прочие _ok.
>
> при этом поскольку этот гей на букву п не русскоязычный то он тупо НЕ
> ПОНИМАЕТ проблему (общались с ним в IM).
>

Судя по комментариям к
- https://github.com/kraih/mojo/pull/997
- https://github.com/kraih/mojo/issues/995
- https://github.com/kraih/mojo/issues/497
- https://github.com/kraih/mojo/issues/430

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

> то есть например
>
>     use utf8;
>     use open qw(:std :utf8);
>
>     $str = 'привет, медвед';
>     like $str => qr{при\w+,}, 'тест пройден';
>
> в его гейском (на букву п) виртуальном мире делать не нужно. Юникода в
> данных в коде программы встречаться не должно.

Скорей всего kraih говорил Ивану, что опасно делать`use open qw(:std :utf8)`.
В данном примере это работает, но только потому, что Test::More не
поддерживает юникод, а рекомендация использовать io-layers в
документации к нему, очевидный хак, более того, там это и описано, как
'workaround'.
В своём текущем состоянии Test::More очевидно является той границей,
на которой должна происходить конверсия string<->bytes, поэтому такой
тест скорее должен выглядеть как:

  my $str = 'привет, медвед';
  like $str => qr{при\w+,}, encode('utf-8','тест пройден');

Но и это не будет работать на 100%, оно будет генерить ворнинг при
завалившихся тестах. В идеальном будущем, кто-то сделает правильно вот
эту работу: https://github.com/Test-More/test-more/pull/422 и тест
будет выглядеть:

  use Test::More output => {formatter => 'TAP', encoding => 'utf-8'}

  my $str = 'привет, медвед';
  like $str => qr{при\w+,}, 'тест пройден';

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

Сделайте Test::More::Unicode, где он? Что-то не вижу )
Вот Монсу понадобился, он сделал Test::More::UTF8, правда только
обёртку вокруг binmode ))

А про Mojolicious так вообще смешно... ну сделайте подкласс
Test::Mojo, да перебейте один метод (и это круто, что там теперь один
такой метод), как вам нравится )

>
> Гею на букву п нужен геморрой питонячий вида
>   if 'hello world' == u'hello world':
>       сюда никогда не попадаем. що является ППЦ
> ему нужно втащить этот геморрой в perl!
>

Это жизнь... вам придётся различать бинарные данные и строки. В разных
языках и средах это делается по разному, но делается везде. И в Perl
тоже приходится. К сожалению, в Perl это сложнее по многим причинам.

>
> далее становится вопрос что делать-то?
> возможно идти по пути Марка Лемана.
>
> Грустно это все. они заполонили планету, блин
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Vladimir Timofeev <vovkasm на gmail.com>


Подробная информация о списке рассылки Moscow-pm