Jump to content

NeoXidizer

User
  • Posts

    372
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by NeoXidizer

  1. я проверял, порядок не изменяется, да и там далее идет обращение к хешу по ключам, но сами ключи имеют значение, так как на их основе (12, 18 и т.д.) создаются значения. Сделал так:

    		$n = array(2 => '', 5 => '', 8 => '', 12 => '', 18 => '');
    array_walk($n, function (&$val, $key, $str) {
    $c = 0;
    return $val = sprintf("$c: 1 %d $str; $c: %d 63 $str;", $key, $key + 1);
    }, $str);

    $c в будущем будет назначаться в другом месте. Можно ли сделать лучше? В итоге и в перле и у меня получаются одинаковые массивы

  2. я и не говорю, что они используются повсевместно :)

    я проявил недовольство из-за выражения "в HTML5 появились только <footer>, <header> и куда их помещать" и выразил свою точку зрения, что собой представляет HTML5, как меня и попросили

    а затем ответил на вопрос, где можно найти работу, чтобы эти новые технологии использовались

  3.    my %n = map {$_ => sprintf "$c: 1 %d $str; $c: %d 63 $str;", $_, $_+1} 2,5,8,12,18;
    while ( my ($key, $value) = each(%n) ) {
    print "$key => $value\n";
    }

    вывод:

    8 => 0: 1 8 0 3; 0: 9 63 0 3;
    18 => 0: 1 18 0 3; 0: 19 63 0 3;
    12 => 0: 1 12 0 3; 0: 13 63 0 3;
    2 => 0: 1 2 0 3; 0: 3 63 0 3;
    5 => 0: 1 5 0 3; 0: 6 63 0 3;

    почему не по порядку?

    и насколько я понял, в этом случае нет разницы между array_map и array_walk?

  4. а как же новое API? Drag&Drop, History, GeoLocation, Canvas, нативное проигрование видео/аудио (без флеша), FileAPI, локальное хранилище (WebStorage), микроданные и т.д; а

    <header>, <section> и новые правила, что помещать туда и т.д.
    это просто бонус для верстальщиков, наравне с отсувствием строгости, подобной XHTML

    Из полезного только History, FileAPI да LocalStorage, остальное сомнительной полезности

    если так рассуждать, то в компе спикер - абсолютно не нужная и бесполезная вещь

    или DVD на 4 гб, смотря на текущие цены на флешки по 16гб - тоже абсолютно пустая трата денег, учитывая, что у многих привода и нет вовсе

    технологии нужны в зависимости от потребностей. Если у вас нет/небыло случаев, в которых нужна геолокация, drag&drop, canvas и т.д., то и эти технологии для вас бесполезны.

    а другие считают эти (и другие) новшества идеальным решением для их бизнеса

    К примеру, многие мобильные устройства и браузеры отказались от поддержки Flash проигрователя, а мобильный интернет трафик сейчас имеет очень большой процент, все сидят в соц. сетях, ютюбе и т.д. А как проиграть музыку или видео или запустить игру без flash? на помощь приходит HTML5 Audo, Video, Canvas, WebGL. Тоже самое и с другими технологиями, ведь раз технология появилась, значит была потребность.

    Я всегда считал, что HTML - это просто язык разметки, что кагбэ следует из названия. Всякие там API - это уже к движкам вопрос и к яваскрипту например. Почему вы все это к HTML относите мне не совсем понятно. Т.е. мне понятно, что W3C из HTML и CSS делает какой-то винегрет... и это очень печально.

    ладно, HTML - "HyperText Markup Language", но так как HTML подвластен DOM модели, то разметка(HTML) и изменение поведения браузера (Javascript) идут практически взявшись за руки. HTML5 же это общее название новых технологии, среди которых есть и новые правила HTML, и новое JavaScript API, а так как они (HTML и JavaScript) взаимосвязаны и повсевместно используются вместе, я бы сказал, что это эти две технологии неотрывны друг от друга, поэтому я считаю не корректным говорить, что HTML5 это, повторяюсь,

    <header>, <section> и новые правила, что помещать туда и т.д.

    Где я смогу побыстрому брать заказы на эти фишки и где они сейчас требуются и применяются? Думаю, что редкие проекты используют тот же canvas, если не брать те, что делали для демонстрации его возможностей. И все эти фишки не поддерживаются старыми браузерами, либо поддерживаются частично. Что толку, мне, как человеку которому нужны навыки для рынка, от новых и перспективных возможностей webstorage или canvas? Если я ошибаюсь, то расскажите мне. Просто я вижу, что обычно нужны сайты-визитки, инет-магазины и подобное. Их создание или доработка. Там это, пока, используется редко, очень редко.

    Фриланс. Многие технологии уже полноценно поддерживаются последними версиями браузеров, либо через костыли с не очень старыми. А вообще, вы так общаетесь, будто это ваш локальный форум и здесь все друг-друга лично знают. Лично я из Москвы и здесь проблем с работой нет, а у вас даже в персональных данных на форуме не указан город, в котором вы сейчас живете, поэтому как-то помочь вам невозможно.

    Вообще, есть много студий(команд), которые разрабатывают игры для тех же соц. сетей (фейсбука, вконтакта), во многих из них используют эти технологии.

    Темболее, вы нарываетесь на большой спрос при большом предложении. Все эти заказы на верстку сметаются за минуты, а заказы с большим бюджетом уходят веб студиям. Реальное портфолио (на заказах) новичку заработать сложновато, а когда заказчик видит одни и теже выполненные работы у нескольких человек (которые создавали свое портфолио по бесплатным общедоступным шаблонам), то к таким людям доверия, как к професионалам, не возникает, имхо

    Я не отговариваю, просто делюсь своими мыслями.

    • Like 1
  5. а как же новое API? Drag&Drop, History, GeoLocation, Canvas, нативное проигрование видео/аудио (без флеша), FileAPI, локальное хранилище (WebStorage), микроданные и т.д; а

    <header>, <section> и новые правила, что помещать туда и т.д.
    это просто бонус для верстальщиков, наравне с отсувствием строгости, подобной XHTML
  6. я понимаю, что это тернарные операции, просто не встречался со вложенностью, немного запутало

    с примером разобрался вроде как, проверка:

    if ($a == $
    return 0;
    return ($a < $ ? -1 : 1;

    ==

    return ($a == $ ? 0 : (( $a < $ ? -1 : 1);

    ? :)

    и с =~ разобрался :)

    P.S. форум явно делает латинскую b заглавной

  7. и честно говоря, не понимаю записи

    return ($ret = self::cmp(!$matches[3], !$matches[1])) ? 
    $ret :
    ( ($ret = self::cmp($matches[4], $matches[2])) ?
    $ret :
    strcmp($b, $a)
    );

    непонимание начинается со второй строки :)

    а так же:

    $refine =~ s/.* (0 \d);//;

    здесь выполняется preg_match (судя по обращению к найденному в следующей строчке) и preg_replace одновременно. Возможно ли в php такое? Выполнить preg_replace и обратится к тому, что было найдено, не используя preg_match и preg_replace поочереди

    и вообще, как определить, что =~ выполняет? Ведь может производиться как и просто поиск по шаблону, так и замена, правильно ли я понял? или всегда и поиск и замена?

    если второе, то это

    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die('AAA');

    не совсем совпадает с тем, что делает perl

  8. уберите музыку, курсор, автозапуск флеш галереии в постах (2 штуки), если возможно

    лучше - переедьте на свой хостинг и наймите человека, который оптимизирует сжатие, кеширование, а так же подгружайте все картинки со своих доменов не изменяя их размер через HTML (например картинка 500x300, а в вы ее вставляете как <img src width="150"/>, что заставляет браузер ее конвертировать, а это тормозит)

  9. <?php
    // Входной массив
    $txt = "0: 0 0 0 9;\n0: 1 8 0 0;\n0: 9 63 0 0;\n0: 1 63 1 0;\n";
    $old_txt = $txt;
    echo 'Input:<br>';
    print($txt);echo'<br>';

    $txt = explode("\n", trim($txt));
    echo 'После explode:<br>';
    print_r($txt);echo'<br>';echo'<br>';


    function cmp($a, $ {
    if ($a == $
    return 0;
    return ($a < $ ? -1 : 1;
    }
    usort($txt, function($a, $ {
    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die('died');
    echo "<br> a = $a<br>b = $b<br>";
    $return = (int) ( (int)cmp(!$matches[3], !$matches[1]) || (int)cmp($matches[4], $matches[2]) || (int)strcmp($b, $a) );
    echo "sorting returns: $return <br>";
    return (int) ( (int)cmp(!$matches[3], !$matches[1]) || (int)cmp($matches[4], $matches[2]) || (int)strcmp($b, $a) );
    }
    );


    echo '<br><br>Output<br>';
    print_r($txt);echo'<br>';

    $txt = join("\n", $txt);
    echo 'После implode:<br>';
    echo $txt.'<br><br>';

    // Сравнение
    echo 'Сравнение:<br>';
    echo $txt.'<br>';
    echo $old_txt.'<br>';

    запуск в браузере:

    Input:
    0: 0 0 0 9; 0: 1 8 0 0; 0: 9 63 0 0; 0: 1 63 1 0;
    После explode:
    Array ( [0] => 0: 0 0 0 9; [1] => 0: 1 8 0 0; [2] => 0: 9 63 0 0; [3] => 0: 1 63 1 0; )


    a = 0: 1 8 0 0;
    b = 0: 0 0 0 9;
    sorting returns: 1

    a = 0: 1 8 0 0;
    b = 0: 9 63 0 0;
    sorting returns: 1

    a = 0: 1 63 1 0;
    b = 0: 1 8 0 0;
    sorting returns: 1

    a = 0: 0 0 0 9;
    b = 0: 9 63 0 0;
    sorting returns: 1


    Output
    Array ( [0] => 0: 9 63 0 0; [1] => 0: 0 0 0 9; [2] => 0: 1 8 0 0; [3] => 0: 1 63 1 0; )
    После implode:
    0: 9 63 0 0; 0: 0 0 0 9; 0: 1 8 0 0; 0: 1 63 1 0;

    Сравнение:
    0: 9 63 0 0; 0: 0 0 0 9; 0: 1 8 0 0; 0: 1 63 1 0;
    0: 0 0 0 9; 0: 1 8 0 0; 0: 9 63 0 0; 0: 1 63 1 0;

    не думаю, что usort путается :) темболее echo gettype(cmp(!$matches[3], !$matches[1])); отдает integer

    если делать вручную

    usort($txt, function($a, $ {
    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die('died');
    return 0; // или 1
    }
    );

    конечный результат все равно искажается (сортируется), скорее потому что в перле return зависит от результата сравнений

    если вывести все $matches:

    usort($txt, function($b, $a) {
    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die('died');
    echo "<br> a = $a<br>b = $b<br>";
    $return = (int) ( (int)cmp(!$matches[3], !$matches[1]) || (int)cmp($matches[4], $matches[2]) || (int)strcmp($b, $a) );
    echo '<br>0 - <b>'.$matches[0].'</b>';
    echo '<br>1 - <b>'.$matches[1].'</b>';
    echo '<br>2 - <b>'.$matches[2].'</b>';
    echo '<br>3 - <b>'.$matches[3].'</b>';
    echo '<br>4 - <b>'.$matches[4].'</b>';
    echo "<br>sorting returns: $return<br>";
    return $return;
    }
    );

    то будет такой вывод:

    a = 0: 0 0 0 9;
    b = 0: 1 8 0 0;

    0 - : 0 0 0 9; 0: 1 8 0 0;
    1 - 0
    2 - 9
    3 - 1
    4 - 0
    sorting returns: 1

    a = 0: 1 8 0 0;
    b = 0: 1 63 1 0;

    0 - : 1 8 0 0; 0: 1 63 1 0;
    1 - 1
    2 - 0
    3 - 1
    4 - 0
    sorting returns: 1

    a = 0: 1 8 0 0;
    b = 0: 9 63 0 0;

    0 - : 1 8 0 0; 0: 9 63 0 0;
    1 - 1
    2 - 0
    3 - 9
    4 - 0
    sorting returns: 1

    a = 0: 9 63 0 0;
    b = 0: 1 63 1 0;

    0 - : 9 63 0 0; 0: 1 63 1 0;
    1 - 9
    2 - 0
    3 - 1
    4 - 0
    sorting returns: 1

    напоминаю результаты регулярки по перлу:

    returns -1
    1 - 0
    2 - 9
    3 - 1
    4 - 0
    returns -1
    1 - 0
    2 - 9
    3 - 9
    4 - 0
    returns 0
    1 - 9
    2 - 0
    3 - 1
    4 - 0

    результаты регулярки сходятся только на первой итерации и на последней, да и всего у php получается 4 итерации, а не 3

  10. Скажи, а ты там не напутал с регистром $b переменной? В PHP переменные регистрозависимые и $B и $b - разные переменные.

    я увидел с самого начала и перепроверил, все верно

    		$txt = explode("\n", trim($txt));
    usort($txt, function($a, $ {
    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die();
    return self::cmp(!$matches[3], !$matches[1]) || self::cmp($matches[4], $matches[2]) || strcmp($b, $a);
    }
    );

  11. похоже, скрипт не работает из-за алгоритма сортировки. Perl:

    	print "BEFORE:\n$txt<<<\n\n";
    my @txt = sort {
    "$a\n$b" =~ /: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/ or die;
    print "a = $a and b = $b\n";
    $test = !$3 <=> !$1;
    print "returns $test\n";
    print "0 - $0\n";
    print "1 - $1\n";
    print "2 - $2\n";
    print "3 - $3\n";
    print "4 - $4\n";
    !$3 <=> !$1 or $4 <=> $2 or $a cmp $b; } split /\n/, $txt;

    $txt = join "\n", @txt;
    print "||||||||\n\n\n\n\n";

    PHP:

    function cmp($a, $ {
    if ($a == $
    return 0;
    return ($a < $ ? -1 : 1;
    }
    print "BEFORE:\n$txt<<<\n\n";
    $txt = explode("\n", trim($txt));
    usort($txt, function($a, $ {
    $str = $a."\n".$b;
    preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", $str, $matches) or die();
    print "a = $a and b = $b\n";
    $test = cmp(!$matches[3], !$matches[1]);
    print "returns $test\n";
    print "0 - $matches[0]\n";
    print "1 - $matches[1]\n";
    print "2 - $matches[2]\n";
    print "3 - $matches[3]\n";
    print "4 - $matches[4]4\n";
    return cmp(!$matches[3], !$matches[1]) || ($matches[4], $matches[2]) || ($a, $;
    }
    );
    $txt = join("\n", $txt);
    print "||||||||\n\n\n\n\n";

    вывод скриптов таков: Perl:

    BEFORE:
    0: 0 0 0 9;
    0: 1 8 0 0;
    0: 9 63 0 0;
    <<<

    a = 0: 0 0 0 9; and b = 0: 1 8 0 0;
    returns -1
    0 - jpegrescan.pl
    1 - 0
    2 - 9
    3 - 1
    4 - 0
    a = 0: 0 0 0 9; and b = 0: 9 63 0 0;
    returns -1
    0 - jpegrescan.pl
    1 - 0
    2 - 9
    3 - 9
    4 - 0
    a = 0: 9 63 0 0; and b = 0: 1 8 0 0;
    returns 0
    0 - jpegrescan.pl
    1 - 9
    2 - 0
    3 - 1
    4 - 0
    ||||||||

    PHP:

    BEFORE:
    0: 0 0 0 9;
    0: 1 8 0 0;
    0: 9 63 0 0;
    <<<

    a = 0: 1 8 0 0; and b = 0: 0 0 0 9;
    returns 1
    0 >>: 1 8 0 0;
    0: 0 0 0 9;<<
    1 - 1
    2 - 0
    3 - 0
    4 - 94
    a = 0: 9 63 0 0; and b = 0: 1 8 0 0;
    returns 0
    0 >>: 9 63 0 0;
    0: 1 8 0 0;<<
    1 - 9
    2 - 0
    3 - 1
    4 - 04
    ||||||||

    Краткое заключение:

    1. Input одинаков (регулярки работают).

    2. $a и $b не соотвествуют друг-другу (они поменялись между собой местами в PHP по сравнению с Perl'ом)

    3. Алгоритм сортировки у Perl совершает большей итераций, чем PHP (особенно видно при других входных значениях)

    4. Совпадения у preg_match сильно отличаются от тех, что выходят в Perl, поэтому в return идут не те значения.

    5. Данный Input после сортировки каким-то образом остается таким же, каким был в оригинале, а в Perl'е с ним тоже ничего не происходит, поэтому изначально я не замечал ошибку, тестировав на одном входящем значении.

    Но когда я начал тестировать дальше, подав на input другую строку, то вышло следующее, в PHP строка

    0: 0 0 0 9;
    0: 1 8 0 1;
    0: 9 63 0 1;
    0: 1 63 1 0;

    превращается в

    0:  9 63 0 1;
    0: 0 0 0 9;
    0: 1 8 0 1;
    0: 1 63 1 0;

    а в Perlе:

    0:  0  0 0 9;
    0: 1 8 0 1;
    0: 9 63 0 1;
    0: 1 63 1 0;

    проще для сравнения:

    0: 0 0 0 9; 0: 1 8 0 1; 0: 9 63 0 1; 0: 1 63 1 0; // оригинал
    0: 9 63 0 1; 0: 0 0 0 9; 0: 1 8 0 1; 0: 1 63 1 0; // PHP
    0: 0 0 0 9; 0: 1 8 0 1; 0: 9 63 0 1; 0: 1 63 1 0; //Perl

    дело в том, что сортировка применяется в 3 случаях из 12, либо в 12 случаях из 23 (в зависимости от типа изображения, которое я подаю на съедение программе)

    а из-за того, что в PHP сортировка не работает, не работает весь скрипт..

    Какие-нибудь идеи?

    вот пример работы сортировки через перл:

    ||OLD|| 0:  0  0 0 9; 0:  1  8 0 2; 0:  9 63 0 2; 0:  1 63 1 0; 0:  1 63 2 1; ||OLD||
    ||NEW|| 0: 0 0 0 9; 0: 1 8 0 2; 0: 9 63 0 2; 0: 1 63 2 1; 0: 1 63 1 0; ||NEW||

    ||OLD|| 0: 0 0 0 9; 0: 1 8 0 3; 0: 9 63 0 3; 0: 1 63 1 0; 0: 1 63 2 1; 0: 1 63 3 2; ||OLD||
    ||NEW|| 0: 0 0 0 9; 0: 1 8 0 3; 0: 9 63 0 3; 0: 1 63 3 2; 0: 1 63 2 1; 0: 1 63 1 0; ||NEW||

    ||OLD|| 0: 0 0 0 0; 0: 1 63 1 0; 0: 1 63 2 1; 0: 1 63 3 2; 0: 1 8 0 3; 0: 9 63 0 3; ||OLD||
    ||NEW|| 0: 0 0 0 0; 0: 1 8 0 3; 0: 9 63 0 3; 0: 1 63 3 2; 0: 1 63 2 1; 0: 1 63 1 0; ||NEW||

    хотя сомневаюсь, что кто-то здесь поможет, всем будет лень читать весь этот код, а уж темболее думать над сортировкой :o

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy