Jump to content

NeoXidizer

User
  • Posts

    372
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by NeoXidizer

  1. W3C давно забросило HTML в пользу XML за дело взялось сообщество WHATWG, смотреть всё здесь http://www.whatwg.org/specs/web-apps/current-work/multipage/ W3C продолжает разрабатывать CSS - http://www.w3.org/Style/CSS/ недавно появились наброски CSS4 http://www.w3.org/TR/CSS/ http://www.w3.org/TR/2011/WD-selectors4-20110929/
  2. да, с этим ошибся, провел повторное тестирование: Мой переписанный PHP скрипт на Windows (с записью промежуточных результатов jpegtran в файл, так как в Windows версии невозможен вывод в STDOUT) vs Мой переписанный PHP скрипт на виртуальном Debian Linux (с записью промежуточных результатов jpegtran в STDOUT, как в Perl скрипте, что в Windows было невозможным и по моему мнению являлось слабым местом) vs Оригинальный Perl скрипт Код: $time_start = microtime(true); for ($is = 0; $is < 100; ++$is) $this->jpegscan($i); //pclose(popen("perl $perlscript $jpegtran $this->tmpfileopt $this->tmpfilepro", 'r')); $time_end = microtime(true); $time = $time_end - $time_start; echo "Done in $time seconds\n"; PHP Windows: Done in 73.553564071655 seconds PHP Linux: Done in 36.657097005844 seconds Perl: Done in 36.591314077377 seconds в конечном результате, я хоть и не смог добиться увеличения производительности, но я смог переписать Perl скрипт на PHP, и результаты отличаются лишь погрешностью, а так же я познакомился с Perl'ом
  3. и я не представляю, как здесь можно что-то распараллелить, так как количество общих запусков jpegtran зависит от первого/предыдущего запуска jpegtran, не говоря уже о том, что результат нужно отдавать моментально
  4. в случае PHP скрипта, все время отнимал именно вызов внешней программы, а не сам jpegtran
  5. Такой же, как и переписывать одно на другое, я понимаю если это надо было перенести на другую платформу где работает php и не может perl, те же яйца только вид с боку, единственное что это вам дало так то, что вы попрактиковались в программировании на том и на другом языке, в остальном - пустая трата времени. Отсюда и получили мой сарказм. Да, насчет практики вы правы. Но... Моей целью была оптимизация - увеличение скорости выполнения задачи. Меня не устраивало то, что запуск perl скрипта на 15 файлах занимал 12 секунд, я полагал, что переписав скрипт на PHP, и избавившись от вызова perl, я смогу добиться хоть какого-нибудь увеличения производительности, но оказалось наоборот. Зато в процессе этого, по вашему бесмысленного действа, я увидел, каким образом можно оптимизировать сам Perl скрипт, а так же у меня появилось желание попробовать переписать этот алгоритм на C++
  6. возможно сервер настроен так, что php код внутри .html файлов обрабатывается так же, как будто это .php файл
  7. на http://news.google.com/ собственная прокрутка, значит можно ищите плагины custom scrollbar
  8. В принципе, вот результат. Если есть идеи, как можно оптимизировать, не стесняйтесь! извиняюсь, что код практически не комментирован, просто опишу функции // Скрипт ищет оптимальные настройки для программы jpegtran, которая оптимизирует JPEG изображения формата RGB или Grayscale(BW - Black/White) private $c; private $is_rgb; private $modes; private $prefix; private function jpegscan($i) { // определение находится в другом месте $this->is_rgb = ($this->cm[$i] == 'RGB' ? 1 : 0); if ($this->is_rgb) { $this->prefix = ''; $dc = $this->tries(array('0: 0 0 0 0; 1: 0 0 0 0; 2: 0 0 0 0;')); $this->prefix = '0 1 2: 0 0 0 9;'; } else { $dc = '0: 0 0 0 0;'; $this->prefix = '0: 0 0 0 9;'; } // Если файл - RGB, то запускает итерацию 2 раза, что запускает внутреннюю итерацию 7 раз. // Если файл - BW, то запускает итерацию 1 раз, что запускает внутреннюю итерацию 4 раза. $ac = ''; for ($i = 0; $i < ($this->is_rgb ? 2 : 1); ++$i) { $this->c = $i; $this->modes = array(); $ml = ''; // Если файл - RGB, то повторная итерация запускает внутренню итерацию 3 раза, а не 4 for ($in = 0, $_ = 0; $in < ($i ? 3 : 4); ++$in, ++$_) { $this->modes[] = "$i: 1 8 0 $_; $i: 9 63 0 $_;" . $ml; $ml .= "$i: 1 63 " . ($_ + 1) . " $_;"; } $refine = $this->triesn(1, $this->modes); preg_match("/.* (0 \d);/", $refine, $matches); $ac .= preg_replace("/.* (0 \d);/", "", $refine) . $this->try_splits($matches[1]); } $this->prefix = ''; $mode = $this->canonize($dc . $ac); $this->_try($mode); // финальная оптимизация } // см. другие функции. Эта - иные настройки оптимизации private function try_splits($str) { $n = array_flip(array(2, 5, 8, 12, 18)); foreach ($n as $key => &$value) $value = "$this->c: 1 $key $str; $this->c: " . ($key + 1) . " 63 $str;"; $mode = $this->triesn(2, array("$this->c: 1 63 $str;", $n[2], $n[8], $n[5])); if ($mode != $n[8]) return $mode; else return $this->triesn(1, array($mode, $n[12], $n[18])); } // RGB-Only - запускает triesn и работает, пока не получит свой результат private function tries($modes) { return $this->triesn(99, $modes); } // Запускает оптимизацию файла и следит за тем, чтобы оптимизация не увеличивала файл в объеме, возвращает настройки последней оптимизации private function triesn($limit, $modes) { $overshoot = 0; foreach ($modes as $key => $mode) { $size = $this->_try($mode); if (!isset($bsize) || $size < $bsize) { $bsize = $size; $overshoot = 0; $bmode = $mode; } elseif (++$overshoot >= $limit) break; } return $bmode; } // пробуем оптимизировать изображение, используя приготовленные настройки ($mode), возвращаем получившийся размер файла private function _try($mode) { $txt = $this->canonize($mode); $handle = fopen($this->tmpfilestats, "w+"); fwrite($handle, $txt); fclose($handle); pclose(popen($this->executeFiles['jpegtran'] . " -scans $this->tmpfilestats -outfile $this->tmpfilepro $this->tmpfileopt", 'r')); clearstatcache(TRUE, $this->tmpfilepro); // Не кешируем результаты запроса return filesize($this->tmpfilepro); } // Функция принимает на себя строку, типа "0: 0 0 0 0; 1: 0 0 0 0; 2: 0 0 0 0;", очищает, добавляет переводы строк, разбивает на массив и приводит массив к нужному формату, затем этот массив записывается в файл функцией _try private function canonize($mode) { $txt = $this->prefix . $mode; $txt = preg_replace("/\s*;\s*/", ";\n", $txt); $txt = preg_replace("/^\s*/", "", $txt); $txt = preg_replace("/ +/", " ", $txt); $txt = preg_replace("/: (\d+) (\d+)/e", "sprintf(': %2d %2d', $1, $2)", $txt); $txt = preg_replace("/^2:.*\n/m", "", $txt); $txt = preg_replace("/^1:(.+)\n/m", "1:$1\n2:$1\n", $txt); $txt = explode("\n", trim($txt)); usort($txt, function($a, $ { preg_match("/: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/", "$a\n$b", $matches) or die('AAA'); return ($ret = $this->cmp(!$matches[3], !$matches[1])) ? $ret : ( ($ret = $this->cmp($matches[4], $matches[2])) ? $ret : strcmp($a, $ ); } ); return join("\n", $txt); } // Perl-like cmp private function cmp($a, $ { return ($a == $ ? 0 : (( $a < $ ? -1 : 1); } private function _try($mode) { $txt = $this->canonize($mode); $handle = fopen($this->tmpfilestats, "w+"); fwrite($handle, $txt); fclose($handle); pclose(popen("$this->executeFiles['jpegtran'] -scans $this->tmpfilestats -outfile $this->tmpfilepro $this->tmpfileopt", 'r')); clearstatcache(TRUE, $this->tmpfilepro); return filesize($this->tmpfilepro); }это - самое слабое место скрипта, всмысле производительности. PHP ужасно медленно вызывает внешнюю программу и определяет рамер файла. На данный момент, мой переписанный на PHP скрипт проигрывает Perl скрипту 0.2 секунды на одном и том же файле. Я запускаю скрипт на Windows, но на Linux программа jpegtran (которая запускается через скрипт) сможет выводить результат своей работы не в файл, а в STDOUT (странно, что на Windows не умеет), тогда можно будет просто брать этот STDOut и считать размер файла по нему (как это сделано в Perl скрипте), тогда, думаю, PHP аналог должен работать быстрее. Иначе - я зря потратил кучу времени и лучше немного оптимизирую Perl скрипт >__< особенно учитывая, что я неплохо научился Perl'у, пока писал этот код....
  9. не рациональное использование свободного места на широких мониторах. У меня 1366x768, весь контент засунут в кучу, а по бокам хоть морковку сожай. Страшно подумать, что на более широких мониторах, а вообще, сделано не плохо, но не понятно о чем сайт. Новости не однотипные, а по всем околокомпьютерным тематикам подряд
  10. узнаю форму авторизаци... неплохо для юкоза
  11. под Perl самое то, спасибо отлично работает в стабильной версии 2.0, обновляйте FAQ пока только один минус для меня по сравнению с Notepad++ - не умеет сворачивать большие блоки комментариев, Sublime сворачивает по шаблону: что-то отступ отступ
  12. ну он на флеше работает, что невсегда удобно
  13. http://www.w3.org/TR/FileAPI/ доступа к файлам нет, возможность узнать информацию о загруженных файлах через форму - есть http://caniuse.com/fileapi Firefox 3.6+, Chrome 13+, Opera 11.1+, Safari 5.1+ частично для остальных браузеров есть другие методы, либо надпись "Не закрывайте вкладку браузера"
  14. велосипедисты, блин http://www.plupload.com/ http://blueimp.github.com/jQuery-File-Upload/ при нужных настройках позволяют загружать файлы любым объемом, по кусочкам (chunks), показывая прогресс бар с помощью HTML5+JS либо флеш Plupload по умолчанию используется движком WordPress уже долгое время Как же с помощью js узнать, сколько файла передалось? А вот перл вроде как умеет принимать файл и в процессе отдавать данные о прогрессе. это называется File API, поддерживается не всеми браузерами, но все же либо костыль - посылается файл кусочками, при каждом запросе php отдает размер загруженных частей, сверяя с общим размером файла, и отдает этот размер в запросе во время отправки следующего кусочка, так делает narod.ru, если смотреть на запросы во время передачи файла
  15. у вас на сайте не поймешь, где ссылка, где текст, все выделено и подчеркивается при наведении. курсор при ховере, если это не ссылка, лучше на default поставить
  16. добавьте <!DOCTYPE html>, тогда браузеры будут обрабатывать сайт максимально одинаково, насколько они умеют пройдитесь по сайту http://validator.w3.org/ и исправьте баги затем исправляйте появившиеся "искажения" исходя из полученного варианта либо сразу начинайте верстку с чистого холста, начиная с <!DOCTYPE html> и теоретических знаниях о верстке на дивах, а не на таблицах вариант 2, менее затратный по времени, и не факт, что получится: добавьте <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">, тогда браузеры не будут переходить в режим совместимости пройдитесь по сайту http://validator.w3.org/ и исправьте баги затем исправляйте появившиеся "искажения" исходя из полученного варианта
  17. я говорил изначально о бизнес-применении технологии да и собственно, всем плевать на наше мнение все решено и запущено далекие 5 лет назад, поздно что-то менять, поэтому нужно переставать ныть и начинать пользоваться
  18. Зачем сохранять канвас на мобильный телефон? Зачем вообще сохранять онлайн приложение с онлайн статистикой на носитель информации? Заходишь в онлайн на страницу с приложением и делаешь свои дела. Drag'n'Drop - посмотрите на реализацию Plupload, FileApi - http://blueimp.github.com/jQuery-File-Upload/ А кто говорил, что геолокация для PC? Не говоря уже про ноутбуки, при том, что бесплатный Wi-Fi доступен повсевместно в крупных городах. Вообще причем тут смешивание и к чему такой консерватизм? Напоминает "Зачем сделали окна в Windows Vista прозрачные? гавнище какое", а сейчас эти полупрозрачные окна стоят везде и всем нравится чем реклама или продажа премиум аккаунтов на сайте, который демонстрирует новшества HTML5 - не бизнес? у меня тоже, но это не мешает производителям записывать драйвера и руководства для материнской и сетевой платы на диски, при том, что драйвера не входят в стандартную поставку Windows
  19. я поигрался с бенчмарком, с вашим вариантом выходит быстрее
  20. билд != версия Python 2.0 - 2000 год. Python 3.0 - 2008 год. автор, варианты уже названы ASP.NET Ruby on Rails Perl фреймворки PHP, CSS, JS В последнее время видел много статей по CoffeeScript - яп, транслируемый в JavaScript
  21. да, я знаю, что порядок не нужен про array_flip - спасибо, не додумался почему такое использование sprintf влияет на производительность? ведь эти переменные не нуждаются в форматировании зачем в данном случае unset? использование памяти до и после unset не изменяется (проверил) и в функцию triesn идет лишь 2 параметра - (int)limit и (array)modes а perl функция обрабатывает все входные параметры таким образом: my ($limit, @modes) = @_;тобишь $limit идет в $limit, а всё остальное - в массив modes поведение PHP иное, поэтому я сделал так: private function try_splits($str, $c) { $n = array_flip(array(2, 5, 8, 12, 18)); foreach ($n as $key => &$value) $value = sprintf('%d: 1 %d %s; %d: %d 63 %s;', $c, $key, $str, $c, $key + 1, $str); $modes = array("$c: 1 63 $str;", $n[2], $n[8], $n[5]); $mode = $this->triesn(2, $modes); if ($mode != $n[8]) return $mode; else { $modes = array("$c: 1 63 $str;", $n[12], $n[18]); return $this->triesn(1, $modes); } } open TRAN, "-|", "./jpegtran", @strip, "-scans", $ftmp, $jtmp or die; можно пояснить синтаксис? TRAN - handler "-|": "./jpegtran" - программа, а остальные аргументы - аргументы идущие в программу, но почему написаны таким образом? почему не так? open TRAN, "-|", "./jpegtran @strip -scans $ftmp $jtmp" or die;? P.S. @strip = 2
  22. NeoXidizer

    php

    не искать нужно, а книжки почитать, тогда запомнится
  23. Phyton и Ruby - эти два брата появились относительно недавно может быть Python? Если что, он вышел в 1990, тобишь всего на 3 года моложе Perl а Ruby из 1995 но недавно появился фреймворк Ruby on Rails, который стал активно использоваться в веб разработке, он появился в 2004
×
×
  • 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