Jump to content

NeoXidizer

User
  • Posts

    372
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by NeoXidizer

  1. for(@modes), аналог в PHP - foreach? или ($i = 0, $count = count($modes); $i < $count; ++$i)
  2. да, с этим разобрался еще вопрос: Perl print "————————————-"; my @txt = split /\n/, $txt; #print "\nВХОД: $txt ///\n"; my @txt = sort { print "\n a - $a\nb - $b\n"; "$a\n$b" =~ /: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/ or die; !$3 <=> !$1 or $4 <=> $2 or $a cmp $b; } @txt; print "————————————-";PHP: function cmp($a, $ { if ($a == $ return 0; return ($a < $ ? -1 : 1; } $txt = explode("\n", trim($txt)); usort($txt, function($a, $ { preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die("a - $a, b - $b"); print "a - " . $a . "\n"; print "b - " . $b . "\n"; return cmp(!$matches[3], !$matches[1]) || cmp($matches[4], $matches[2]) || strcmp($a, $; } ); print_r($txt); на вход в сортировку идет: (проверял как в PHP, так и в Perl) 0: 0 0 0 9; 0: 1 8 0 0; 0: 9 63 0 0; Вывод в Perl: ———————————— a - 0: 0 0 0 9; b - 0: 1 8 0 0; a - 0: 0 0 0 9; b - 0: 9 63 0 0; a - 0: 9 63 0 0; b - 0: 1 8 0 0; ————————————-вывод в PHP: a - 0: 1 8 0 0; b - 0: 0 0 0 9; a - 0: 9 63 0 0; b - 0: 1 8 0 0; ———————————— добавил для достоверности, что сортировка запускается лишь раз, а не в процессе цикла почему в perl скрипте $a и $b - больше значений? разные алгоритмы сортировки? и правильно ли я написал return у function c? вроде все работает, спрашиваю для саморазвития
  3. sub canonize { my $txt = $prefix.$suffix.shift; print "\n prefix - $prefix \n suffix - $suffix \n"; } sub try { my $txt = canonize(shift); } sub triesn { ... for(@modes) { my $s = try($_); ... } my $refine = triesn(1, @modes); строка: my $txt = $prefix.$suffix.shift; почему shift применяется два раза?, еще в строке у my $txt = canonize(shift);
  4. не забывай, что браузеры любят устанавливать свои стили, которые не описаны в твое ссылке вот лучшим способ сброса на дефолт во всех браузерах, на сколько это возможно https://github.com/necolas/normalize.css/blob/master/normalize.css
  5. спасибо, потихоньку продвигаюсь, насколько работа sprintf в перле соотвествует sprintf в PHP? и что означает $|=1;в самом начале?
  6. программа IETester была сделана из-за невозможности одновременной установки IE6-IE9 остальные браузеры это позволяют, поэтому можете просто устанавливать нужную версию в отдельную папку. либо можно воспользоваться сервисами, которые позволяют делать скриншоты с нужного браузера (естественно, javascript не потестируешь) я пользуюсь http://browserlab.adobe.com/ требуется иметь Adobe ID (тобишь зарегестрироваться, бесплатно) но браузеров там очень мало (IE6-9, Firefox 11 Win/Mac, Chrome 18, Safari 5.1 Mac)
  7. практикуюсь в портировании standalone приложений в веб сервисы, имеется следующий perl скрипт: #!/usr/bin/perl -ws # jpegrescan by Loren Merritt # Last updated: 2008-11-29 / 2011-11-01 # This code is public domain. use File::Slurp; @ARGV==2 or die "usage: jpegrescan in.jpg out.jpg\ntries various progressive scan orders\n"; $fin = $ARGV[0]; $fout = $ARGV[1]; $ftmp = "$fout-$$.scan"; $jtmp = $fout; $verbose = $v; $quiet = $q; undef $_ for $v,$q; undef $/; $|=1; # convert the input to baseline, just to make all the other conversions faster # FIXME there's still a bunch of redundant computation in separate calls to jpegtran open $OLDERR, ">&", STDERR; open STDERR, ">", $ftmp; open TRAN, "-|", "./jpegtran", "-v", "-optimize", $fin or die; write_file($jtmp, <TRAN>); close TRAN; open STDERR, ">&", $OLDERR; $type = read_file($ftmp); $type =~ /components=(\d+)/ or die; $rgb = $1==3 ? 1 : $1==1 ? 0 : die "not RGB nor gray\n"; # FIXME optimize order for either progressive transfer or decoding speed sub canonize { my $txt = $prefix.$suffix.shift; $txt =~ s/\s*;\s*/;\n/g; $txt =~ s/^\s*//; $txt =~ s/ +/ /g; $txt =~ s/: (\d+) (\d+)/sprintf ": %2d %2d", $1, $2/ge; # treat u and v identically. I shouldn't need to do this, but with jpegtran overhead it saves 9% speed. cost: .008% bitrate. $txt =~ s/^2:.*\n//gm; $txt =~ s/^1:(.+)\n/1:$1\n2:$1\n/gm; # dc before ac, coarse before fine my @txt = sort {"$a\n$b" =~ /: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/ or die; !$3 <=> !$1 or $4 <=> $2 or $a cmp $b;} split /\n/, $txt; return join "\n", @txt; } sub try { my $txt = canonize(shift); return $memo{$txt} if $memo{$txt}; write_file($ftmp, $txt); open TRAN, "-|", "./jpegtran", "-scans", $ftmp, $jtmp or die; $data = <TRAN>; close TRAN; my $s = length $data; $s or die; $memo{$txt} = $s; !$quiet && print $verbose ? "$txt\n$s\n\n" : "."; return $s; } sub triesn { my($bmode, $bsize); my ($limit, @modes) = @_; my $overshoot = 0; for(@modes) { my $s = try($_); if(!$bsize || $s < $bsize) { $bsize = $s; $bmode = $_; $overshoot = 0; } elsif(++$overshoot >= $limit) { last; } } return $bmode; } sub tries { triesn(99, @_); } $prefix = ""; $suffix = ""; if($rgb) { # 012 helps very little # 0/12 and 0/1/2 are pretty evenly matched in frequency, but 0/12 wins in total size if every image had to use the same mode # dc refinement passes never help $dc = tries("0: 0 0 0 0; 1 2: 0 0 0 0;", "0: 0 0 0 0; 1: 0 0 0 0; 2: 0 0 0 0;"); # jpegtran won't let me omit dc entirely, but I can at least quantize it away to make the rest of the tests faster. $prefix = "0 1 2: 0 0 0 9;"; } else { $dc = "0: 0 0 0 0;"; $prefix = "0: 0 0 0 9;"; } # luma can make use of up to 3 refinement passes. # chroma can make use of up to 2 refinement passes. # refinement passes have some chance of being split (luma: 4%,4%,4%. chroma: 20%,8%) but the total bit gain is negligible. # msb pass should almost always be split (luma: 87%, chroma: 81%). # I have no theoretical reason for this list of split positions, they're just the most common in practice. # splitting into 3 ections is often slightly better, but the total number of bits saved is negligible. # FIXME: penalize lots of refinement passes because it's slower to decode. if so, then also force overwrite if bigger than the input. sub try_splits { my $str = shift; my %n = map {$_ => sprintf "$c: 1 %d $str; $c: %d 63 $str;", $_, $_+1} 2,5,8,12,18; my $mode = triesn(2, "$c: 1 63 $str;", @n{2,8,5}); return $mode if $mode ne $n{8}; return triesn(1, $mode, @n{12,18}); } foreach $c (0..$rgb) { my @modes; my $ml = ""; for(0..($c?2:3)) { push @modes, "$c: 1 8 0 $_; $c: 9 63 0 $_;".$ml; $ml .= sprintf("$c: 1 63 %d %d;", $_+1, $_); } my $refine = triesn(1, @modes); $refine =~ s/.* (0 \d);//; $ac .= $refine . try_splits($1); } $prefix = ""; undef %memo; $mode = canonize($dc.$ac); try($mode); $size = $memo{$mode}; !$quiet && print "\n$mode\n$size\n"; $old_size = -s $fin; if($size < $old_size) { write_file($fout, $data); } unlink $ftmp; за незнанием синтаксиса Perl'а, прошу помочь составить алгоритм, которому следует данный скрипт, если этот скрипт вообще возможно повторить на PHP Вкратце - скрипт принимает в качестве входных аргументов [путь_к_программе] [входной_jpeg_файл] [выходной_файл] и ищет оптимальный способ оптимизации (параметров для запуска программы из аргумента[0] Лишний код, типа перенаправление потоков STDERR (и других) можно пропускать либо помочь сделать так, чтобы вывод не блокировался, и был виден весь прогресс работы Мой набросок: Объявление переменных #Комментарий - конвертирование файла в baseline, чтобы ускорить все остальные конвертации jpegtran -v -optimize $file объявление $type, не знаю, что это, скорее всего определения формата - baseline или progressive объявление $rgb - цветового пространства (color space), проверяет, является ли формат файла RGB, либо BW, CMYK не пропускает #FIXME sub canonize, месиво из регулярок(help) sub try, запуск jpegtran с параметром -scans file sub triesn, не понять sub tries { triesn(99, @_); } - ? if($rgb) { какая-то магия, очевидно запуск функции tries с заданными параметрами $dc = tries("0: 0 0 0 0; 1 2: 0 0 0 0;", "0: 0 0 0 0; 1: 0 0 0 0; 2: 0 0 0 0;"); } else не интересует # комментарий # с упоминанием # о дальнейшей работе с битами не понятный мне кодПредпологаю, что поняв смысл всего этого месева из работы с битами и регулярками, можно написать легкий код на PHP (благо есть встроенные функции для вычисления color space, mode, etc сильно может помочь это http://www.cs.wcupa.edu/~rkline/perl2php/ либо, если кто-то найдет онлайн трянслятор, буду благодарен, даже если будет на половину не рабочим
  8. приводите весь файл
  9. [добавьте кнопку удалить сообщение]
  10. вот конечный кодif (!isset($_COOKIE['visit'])) { $filename = 'text.txt'; if (file_exists($filename)) { $handle = fopen($filename, "r"); $counter = (int)fgets($handle); fclose($handle); $handle = fopen($filename, "w"); fputs($handle, ++$counter); // записываем в файл текущее значение счетчика +1 fclose($handle); } else { $handle = fopen($filename, "w+"); if (!$handle) die('Файл невозможно создать'); fputs($handle, "1"); // Если файла изначально не существует, создаем его с содержимым "1" fclose($handle); } setcookie("visit"); }а еще можно так if (!isset($_COOKIE['visit'])) { $filename = 'texts.txt'; if (file_exists($filename)) { $counter = (int)file_get_contents($filename); file_put_contents($filename, ++$counter); } else file_put_contents($filename, "1"); setcookie("visit"); }или даже так if (!isset($_COOKIE['visit'])) { $filename = 'texts.txt'; if (file_exists($filename)) file_put_contents($filename, (int)file_get_contents($filename)+1); else file_put_contents($filename, "1"); setcookie("visit"); }
  11. правила http://www.study.ru/lessons/ + http://www.anglais.ru/anglijskaya-grammatika/ словарь http://lingualeo.ru/
  12. http://ru2.php.net/manual/ru/book.filesystem.php вам нужны fopen, fgets, fputs, fclose Находите функцию, читаете описание и смотрите примеры если владеете английским, то читаете комментарии либо http://ru2.php.net/manual/ru/function.file-get-contents.php http://ru2.php.net/manual/ru/function.file-put-contents.php
  13. нельзя так объявлять переменную в процедурном коде. Выведет Undefined variable: all. Нужно всегда указывать начальное значение, например null, 0, и т.д. Я бы сделал алгоритм следующим: Проверяем, есть ли у пользователя кука Если нет, то создаем куку, которая хранится до закрытия браузера Увеличиваем в базе данных текущее значение счетчика на 1 базой данных может быть как и база в СУБД, так и простым текстовым файлом, на ваш выбор тобишь как-то так: if (!isset($_COOKIE['visit'])) { открываем файл получаем из него текущее значение счетчика увеличиваем значение счетчика на 1 записываем результат закрываем файл } else { устанавливаем куку, которая живет лишь текущую сессию. }
  14. эм.. rus, чего здесь гадать то? Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\dark\index.php:10) in Z:\home\test1.ru\www\dark\index.php on line 14 заголовки были отосланы, так как output started at Z:\home\test1.ru\www\dark\index.php:10
  15. перед отправкой заголовков (функция headers) в выводе не должно быть никаких символов. Проверьте на наличие случайного пробела и т.п.
  16. абсурдный парадокс
  17. если не изменяет память (дримвивер не использую), там можно редактировать шаблон, по которому создается документ, просто исправьте его один раз. запомните - id можно использовать только один раз на всю страницу. Тобишь нельзя делать так: <div id="black"></div> <div id="white"></div> <div id="black"></div>CSS на это все равно, а JavaScript будет работать только с первым попавшимся на странице элементом с ID. Поэтому, лучше не используйте id до тех пор, пока не начнете использовать скрипты. А затем разберетесь, что к чему Затем: 1. Не используйте заглавные буквы в коде: не верно: BODY { font-family:"Tahoma"; background-color:#FFFFFF; } A, A:link, A:hover{ color:#FFFFFF; font-size:11px; font-weight:bold; font-family:"Tahoma"; text-decoration:none; }верно: body { font-family:"Tahoma"; background:#fff; } a, a:link, a:hover{ color:#fff; font:700 11px "Tahoma"; text-decoration:none; } 2. Не используйте глобальный селектор *, это влияет на производительность * {padding:0;margin:0;}Лучше просто перечислить используемые элементы, их не так уж и много. 3. Обращайтесь к элементам напрямую, когда это возможно #head #menu .menu_btn{} #head #menu .menu_btn A{}= .menu_btn{} .menu_btn A{} 4. Будьте внимательней: #left_col{ width:175px; float:left; border-right:1px solid #DCDCDC; } #right_col{ width:314px; float:left; } #left_col,#right_col{ margin-top:10px; padding:0px 15px 10px 15px; }float:left так-же можно было перенести, а px у 0 не писать
  18. либо не искал вообще, либо искал 2 секунды, а потом ушел на форум... готовых решений ТЫСЯЧА
  19. кому адресовано сообщение? чего именно нет? а кто написал тут про: application/x-httpd-php ? почему считаете не корректным - обоснуйте? А здесь кто-то кроме меня, вас, и топик стартера с 2 сообщениями что-то написал? Нет? Тогда что за тупой вопрос, кому адресовано сообщение >__< Согласно данному источнику, http://mimeapplication.net/type-list-44, а так же иным многочисленным источникам из интернета, mime-типа application/x-httpd (даже подправив вашу опечатку с одной l в слове Application) - не существует, вот чего нет. Про application/x-httpd-php ничего не говорилось, но вы написали про application/x-httpd, которого не существует, а самый ближайший вариант - application/x-httpd-php, а обрабатывать файл, который нужно отдать, как это тип - тупость
  20. может не самое элегантное решение, но думаю, идею вы поняли <?php $errors = array(); $cityfrom = $_POST['cityfrom']; $sityto = $_POST['sityto']; // Вес, включая десятичные значения, например 0.5 if ((float)$_POST['ves'] > 0) $ves = (float)$_POST['ves']; else $errors[] = 'Введите вес'; // Объем, включая десятичные значения, например 0.5 if ((float))$_POST['vol'] > 0) $vol = (float)$_POST['vol']; else $errors[] = 'Введите объем'; // Страхование $ins = (isset($_POST['ins']) ? 1 : 0); // Стоимость груза при страховании if ($ins && (float)$_POST['price'] <= 0) $errors[] = 'Введите цену'; else $price = $_POST['price']; // Вывод ошибок if ($errors) { foreach ($errors as $key => $error) echo $error."<br/>\n"; die(); } И нужно указать посетителям, в каком формате указывать цену при страховке, ведь можно написать "1,000", "10 тыс". "сто рублей" и т.д. при том, что по вашей задумке, посетитель должен ввести (предположим) "10 000"
  21. http://mimeapplication.net/type-list-44 такого даже нет... а отдавать файл как application/x-httpd-php, как это советуют на некоторых форумах, я не считаю корректным
  22. к слову, лучше как-то так: <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <form action="calc.php" method="post" id="Calculating" > <p> <label for="cityfrom">Город отправитель:</label> <select name="cityfrom" > <option value="1" selected>Москва</option> <option value="2">Ростов-на-Дону</option> </select> </p> <p> <label for="sityto">Город получатель:</label> <select name="sityto" > <option value="1" selected>Москва</option> <option value="2">Ростов-на-Дону</option> </select> </p> <p> <label for="ves">Вес груз, кг:</label> <input type="text" name="ves" value=""> </p> <p> <label for="vol">Объем, м3:</label> <input type="text" name="vol" value=""> </p> <p> <label for="ins">Дополнительное страхование:</label> <input type="checkbox" name="ins" > </p> <p> <label for="price">Стоимость груза, руб.:</label> <input type="text" name="price" value=""> </p> <input type="button" onclick="send();" value="Отправить" /> <div id="result"></div> </form> <script> function send() { $.ajax({ type: "POST", url: "calc.php", data: $('#Calculating').serialize(), // Выводим то что вернул PHP success: function(html) { $("#result").html(html); } }); } </script> <?php // Здесь дополнительная проверка на вводимые значения, включая оповещение, если пользователь ничего не ввел $cityfrom = $_POST['cityfrom']; $sityto = $_POST['sityto']; $ves = (int)$_POST['ves']; $vol = (int)$_POST['vol']; $ins = (isset($_POST['ins']) ? 1 : 0); $price = (int)$_POST['price']; $marshrut = $cityfrom . $sityto; // Насчет проверки... если $ves == 0 (пользователь не ввел), то событие пройдет if ($marshrut==11 || $marshrut==12) if ( $ves<=100 ) $ves*=6.21; elseif ( $ves<=200 && $ves>100 ) $ves*=6.1; elseif ( $ves<=300 && $ves>200 ) $ves*=5.99; elseif ( $ves<=400 && $ves>300 ) $ves*=5.9; elseif ( $ves<=500 && $ves>400 ) $ves*=5.88; elseif ( $ves<=700 && $ves>500 ) $ves*=5.66; elseif ( $ves<=1000 && $ves>700 ) $ves*=5.55; elseif ( $ves<=1500 && $ves>1000 ) $ves*=5.35; elseif ( $ves<=2000 && $ves>1500 ) $ves*=5.12; elseif ( $ves<=2500 && $ves>2000 ) $ves*=5.02; elseif ( $ves<=3000 && $ves>2500 ) $ves*=4.91; else $ves*=4.79; else exit("Маршрут отсутствует!"); $vol *= 220; $price_end = (($vol>$ves) ? $vol : $ves); if ($ins) $price_end = $price * 0.45 + $price_end; exit("Стоимость перевозки $price_end рублей"); код полегчал, обрабатывать легче, все работает
×
×
  • 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