NeoXidizer
User-
Posts
372 -
Joined
-
Last visited
-
Days Won
5
Content Type
Profiles
Forums
Calendar
Store
Everything posted by NeoXidizer
-
Как теперь наблюдать за стандартами?
NeoXidizer replied to tini.kRyptoNite's question in HTML Coding
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/ -
да, с этим ошибся, провел повторное тестирование: Мой переписанный 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'ом
-
и я не представляю, как здесь можно что-то распараллелить, так как количество общих запусков jpegtran зависит от первого/предыдущего запуска jpegtran, не говоря уже о том, что результат нужно отдавать моментально
-
в случае PHP скрипта, все время отнимал именно вызов внешней программы, а не сам jpegtran
-
Такой же, как и переписывать одно на другое, я понимаю если это надо было перенести на другую платформу где работает php и не может perl, те же яйца только вид с боку, единственное что это вам дало так то, что вы попрактиковались в программировании на том и на другом языке, в остальном - пустая трата времени. Отсюда и получили мой сарказм. Да, насчет практики вы правы. Но... Моей целью была оптимизация - увеличение скорости выполнения задачи. Меня не устраивало то, что запуск perl скрипта на 15 файлах занимал 12 секунд, я полагал, что переписав скрипт на PHP, и избавившись от вызова perl, я смогу добиться хоть какого-нибудь увеличения производительности, но оказалось наоборот. Зато в процессе этого, по вашему бесмысленного действа, я увидел, каким образом можно оптимизировать сам Perl скрипт, а так же у меня появилось желание попробовать переписать этот алгоритм на C++
-
возможно сервер настроен так, что php код внутри .html файлов обрабатывается так же, как будто это .php файл
-
на http://news.google.com/ собственная прокрутка, значит можно ищите плагины custom scrollbar
-
это и имелось ввиду
-
смысл шутки?
-
В принципе, вот результат. Если есть идеи, как можно оптимизировать, не стесняйтесь! извиняюсь, что код практически не комментирован, просто опишу функции // Скрипт ищет оптимальные настройки для программы 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'у, пока писал этот код....
-
не рациональное использование свободного места на широких мониторах. У меня 1366x768, весь контент засунут в кучу, а по бокам хоть морковку сожай. Страшно подумать, что на более широких мониторах, а вообще, сделано не плохо, но не понятно о чем сайт. Новости не однотипные, а по всем околокомпьютерным тематикам подряд
-
узнаю форму авторизаци... неплохо для юкоза
-
под Perl самое то, спасибо отлично работает в стабильной версии 2.0, обновляйте FAQ пока только один минус для меня по сравнению с Notepad++ - не умеет сворачивать большие блоки комментариев, Sublime сворачивает по шаблону: что-то отступ отступ
-
ну он на флеше работает, что невсегда удобно
-
http://www.w3.org/TR/FileAPI/ доступа к файлам нет, возможность узнать информацию о загруженных файлах через форму - есть http://caniuse.com/fileapi Firefox 3.6+, Chrome 13+, Opera 11.1+, Safari 5.1+ частично для остальных браузеров есть другие методы, либо надпись "Не закрывайте вкладку браузера"
-
велосипедисты, блин http://www.plupload.com/ http://blueimp.github.com/jQuery-File-Upload/ при нужных настройках позволяют загружать файлы любым объемом, по кусочкам (chunks), показывая прогресс бар с помощью HTML5+JS либо флеш Plupload по умолчанию используется движком WordPress уже долгое время Как же с помощью js узнать, сколько файла передалось? А вот перл вроде как умеет принимать файл и в процессе отдавать данные о прогрессе. это называется File API, поддерживается не всеми браузерами, но все же либо костыль - посылается файл кусочками, при каждом запросе php отдает размер загруженных частей, сверяя с общим размером файла, и отдает этот размер в запросе во время отправки следующего кусочка, так делает narod.ru, если смотреть на запросы во время передачи файла
-
у вас на сайте не поймешь, где ссылка, где текст, все выделено и подчеркивается при наведении. курсор при ховере, если это не ссылка, лучше на default поставить
-
добавьте <!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/ и исправьте баги затем исправляйте появившиеся "искажения" исходя из полученного варианта
-
я говорил изначально о бизнес-применении технологии да и собственно, всем плевать на наше мнение все решено и запущено далекие 5 лет назад, поздно что-то менять, поэтому нужно переставать ныть и начинать пользоваться
-
Зачем сохранять канвас на мобильный телефон? Зачем вообще сохранять онлайн приложение с онлайн статистикой на носитель информации? Заходишь в онлайн на страницу с приложением и делаешь свои дела. Drag'n'Drop - посмотрите на реализацию Plupload, FileApi - http://blueimp.github.com/jQuery-File-Upload/ А кто говорил, что геолокация для PC? Не говоря уже про ноутбуки, при том, что бесплатный Wi-Fi доступен повсевместно в крупных городах. Вообще причем тут смешивание и к чему такой консерватизм? Напоминает "Зачем сделали окна в Windows Vista прозрачные? гавнище какое", а сейчас эти полупрозрачные окна стоят везде и всем нравится чем реклама или продажа премиум аккаунтов на сайте, который демонстрирует новшества HTML5 - не бизнес? у меня тоже, но это не мешает производителям записывать драйвера и руководства для материнской и сетевой платы на диски, при том, что драйвера не входят в стандартную поставку Windows
-
я поигрался с бенчмарком, с вашим вариантом выходит быстрее
-
билд != версия Python 2.0 - 2000 год. Python 3.0 - 2008 год. автор, варианты уже названы ASP.NET Ruby on Rails Perl фреймворки PHP, CSS, JS В последнее время видел много статей по CoffeeScript - яп, транслируемый в JavaScript
-
да, я знаю, что порядок не нужен про 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
-
не искать нужно, а книжки почитать, тогда запомнится
-
Phyton и Ruby - эти два брата появились относительно недавно может быть Python? Если что, он вышел в 1990, тобишь всего на 3 года моложе Perl а Ruby из 1995 но недавно появился фреймворк Ruby on Rails, который стал активно использоваться в веб разработке, он появился в 2004