Портрет 4X_Pro
Онлайн
Мультиблог
4X_Pro
Записки лишнего человека

Компьютерное

Сканирование черно-белых рисунков

4X_Pro

Иногда сталкиваюсь с необходимостью сканировать различные черно-белые рисунки, графики, диаграммы под Linux. При этом если сканировать в greyscale, изображения часто получаются некачественными: либо просвечивает обратная сторона листа, либо фон получается серым и грязным и неприятно выделяется при вставке рисунка в документ. Если же сделать изображение двухцветным, то линии становятся зазубренными.

Недавно нашел способ, как с этим бороться: после сканирования в greyscale нужно сильно повысить контрастность изображения, либо в программе sane, либо после сканирования в каком-нибудь графическом редакторе, а так же выставить небольшую гамма-коррекцию. В частности, я использовал такие параметры: в sane гамма 1.30, затем открывал изображение в GIMP и выставлял там контрастность на +30—+50. В результате получалось качественное изображение с чисто белым фоном и гладкими линиями.

"Умное" сжатие GZIP

4X_Pro

Как известно, в PHP есть возможность сжимать с помощью GZIP отдаваемые пользователю данные. С одной стороны, оно позволяет сэкономить траффик и увеличить скорость загрузки, что крайне важно для пользователей, подключенных через GPRS или обычные аналоговые модемы, так как сайты сейчас становятся по объему все больше и больше.  С другой — увеличивает нагрузку на сервер: на сжатие требуется дополнительное процессорное время. Кроме того, для пользователей с быстрыми каналами связи эффект от сжатия оказывается настолько незначительным, что время на упаковку/распаковку данных может оказаться вполне сопоставимым со временем, сэкономленным на передаче.

Сразу возникает мысль: а что если как-то определить, как подключен пользователь, и включать сжатие только в тех случаях, если соединение медленное. Читать далее…

Сессии в PHP и нагрузка на сервер

4X_Pro

На первый взгляд кажется, что работать с сессиями в PHP предельно  просто. Достаточно написать где-нибудь в начале скрипта такой код:

session_name('MySessId'); // задаем имя cookie или параметра, в котором хранится идентификатор сессии
session_set_cookies_params(24*3600,'/','xpro.su'); //если нужно, задаем домен, путь и время хранения для cookie сессии
session_start(); // а теперь запускаем саму сессию

и в глобальной переменной $_SESSION можно будет хранить нужные  значения, которые будут доступны при каждом обращении пользователя к  странице! На малых сайтах такое решение работает без проблем, но оно не  будет масштабируемым: как только сайт достигнет нескольких десятков  тысяч страниц или посещаемости в десятки тысяч пользователей в сутки,  может случиться так, что сайт будет открываться весьма и весьма  медленно.

Читать далее…

Отладка PHP-скриптов

4X_Pro

Как известно, при возникновении ошибки PHP в лучшем случае выдает номер строки, где она произошла, и ее краткое описание, а в худшем (если в настройках хостинга отключен показ ошибок вообще) — просто пустую страницу. Это не слишком удобно как для отладки, так и для конечного пользователя. Возникает вопрос: как сделать вывод сообщения об ошибке более информативным.

Оказывается, все достаточно просто. В PHP существует специальная функция set_error_handler(), которая позволяет задать свой собственный обработчик ошибок.Единственный ее параметр — это имя функции-обработчика, которая вызывается в случае возникновения ошибки. Функция-обработчик имеет 4 параметра: номер ошибки, текст ошибки, имя файла, в котором ошибка произошла и номер строки в этом файле.


Читать далее…

Правильная выдача заголовка Content-Length

4X_Pro

Однажды, скачивая один из своих сайтов с помощью WGet, с удивлением обнаружил, что после каждой страницы программа останавливается и ждет несколько секунд. Да пользователи иногда тоже жаловались на то, что загрузка сайта очень долго не заканчивается. Стал разбираться, в чем дело, и вот что удалось выяснить.

Читать далее…

Безопасная загрузка файлов на сервер

4X_Pro

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

Первая и самая очевидная — это имена файлов. Их обязательно нужно проверять на спецсимволы, так как пользователь может подделать HTTP-запрос, в результате чего загружаемый файл будет иметь имя, например, ../index.php.  и при попытке его сохранения затрет корневой индекс. Кроме того, название может содержать русские буквы в кодировке windows-1251 или koi-8, которые некорректно сохранятся в файловой системе. Вывод: нужно сохранять файл не под тем именем, под которым его загрузил пользователь, а под случайным, например MD5-хешем от имени файла, времени загрузки и IP пользователя. Имя же этого файла где-нибудь в базе, а потом отдавать файл скритом, который предварительно будет выдавать заголовок Content-disposition: attachment; filename="имя_файла".

Читать далее…

Впечатления от Mozilla Firefox 6

4X_Pro

Сегодня, запустив Firefox, с удивлением узнал, что уже вышла шестая версия. Скачал обновление, запустил, и… понравилось настолько, что сейчас даже подумываю о том, чтобы снова начать использовать Firefox как основной броузер. (Примечание: до этого у меня стояла версия 3.5.x, поэтому не исключаю, что часть описанных ниже изменений появилась в более ранних версиях.)

Понравилось вот что: Читать далее…

Как определить, запущен ли PHP из командной строки

4X_Pro

Иногда при написании скриптов, предназначенных для выполнения длительных операций, возникает необходимость определить, каким именно способом запущен PHP-интерпретатор: из командной строки или же из Web-сервера. Помочь в этом может функция php_sapi_name(), которая возвращает строку, описывающую SAPI (подсистему сервера), которая использовалась.

Читать далее…

Немного о юзабилити таблиц

4X_Pro

Часто при разработке CMS требуется вывести таблицу с какими-то элементами, которые можно выбирать и редактировать (например, список страниц сайта или список вопросов в FAQ). Казалось бы, что проще: достаточно использовать всего три тега — table, tr, td и все. Однако если список будет длинный, да еще названия элементов могут быть длинными и растягиваться на несколько строчек, то пользоваться такой таблицей будет не очень удобно. Можно дать несколько советов, как сделать такую таблицу более удобной. Читать далее…

Отслеживаем медленные запросы или Отчего тормозит Web-сервер

4X_Pro

Бывают ситуации, когда Web-сервер тормозит, медленно выдает страницы, а что именно является причиной, непонятно. Первое что приходит в голову — поставить в скриптах контрольные точки, в которых фиксировать время выполнения скриптов. Дело это долгое и трудное (а при большой нагрузке еще и способное привести к зависанию). Поэтому сначала лучше попробовать встроенные средства Apache и MySQL: mod_status и лог медленных запросов.

Читать далее…


Страницы:
Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.