Архив категории «Программирование»

Четыре шага к увеличению производительности web-приложений

Джозеф Смарр (Joseph Smarr) — главный архитектор по платформам в компании Plaxo, Inc. поделелся своим видением того, как можно увеличить производительность web-приложений.

Его советы касаются программирования клиентской части интерфейсов.

Итак, чтобы web-приложению быть по настоящему быстрым ему необходимо:

  • Быть ленивым. Не надо загружать что-либо или выполнять какие-то функции до того, как это понадобится. Возможно, что вам вообще не потребуется это загружать или выполнять.
  • Быть “отзывчивым” (responsive). Делайте так, чтобы всё происходило быстро. Если есть возможность сократить взаимодействие на 100 миллисекунд путём обработки события mousedown вместо click, делайте это!
  • Быть прагматичным. Программирование клиентской части интерфейса и так достаточно сложное занятие, не надо его усложнять сверх меры.
  • Быть бдительным. Пустые страницы самые быстрые. Но они становятся медленными, когда вы на них что-то размещаете, медлительность — это ваша ответственность. А бдительность нужна для того, чтобы предотвратить медлительность.

Проверяем почту. Чужую

Не редко при разработке различных web-приложений разработчикам приходится реализовывать функции по проверке правильности введённого пользователем адреса электронной почты. Как правило, такие проверки ограничиваются простой проверкой на соответствие регулярным выражениям, а то и просто на наличие в строке символа ‘@’. Я же предлагаю использовать более объективный вариант.

  1. Проверка на правильность написания адреса
  2. Проверка домена на наличие MX-записей
  3. Общение с почтовым сервером, проверка существования почтового ящика

Проверка на правильность написания адреса

Итак, для начала нам необходимо проверить, представляет ли собой строка правильно сформированный адрес электронной почты. Для подобной проверки уже существует множество вариантов регулярных выражений, некоторые из них довольно длинные, я же пользуюсь следующим кодом для проверки:

$name = '[^@\s]+';
$sub_domain = '[-a-z0-9]+\.';

// country codes
$cc = '[a-z]{2}';

// top level domains
$tlds = "$cc|com|net|edu|org|gov|mil|int|biz|pro|info|arpa|aero|coop|name|museum";

$email_pattern = "/^$name@($sub_domain)+($tlds)$/ix";
preg_match($email_pattern, $email);

Проверка домена на наличие MX-записей

Следующим шагом мы пытаемся проверить, есть ли у домена MX-записи, в этих записях содержатся назания серверов, отвечающих за обмен почтой:

if(checkdnsrr($host, "MX")) {
    if (!getmxrr($host, $mxhost, $mxweight)) {
        echo "Can't found mail servers records!";
    }
}

Общение с почтовым сервером, проверка существования почтового ящика

После того, как записи найдены, мы обращаемся к почтовым серверам с запросом, существует ли на них, интересующий нас почтовый ящик:

$fp = fsockopen($host, 25);

fputs($fp, "HELO {$_SERVER['SERVER_NAME']}\r\n");
fgets($fp, 1024);

fputs($fp, "MAIL FROM: <httpd@{$_SERVER['SERVER_NAME']}>\r\n");
fgets($fp, 1024);

fputs($fp, "RCPT TO: <$email>\r\n");
$line = fgets($fp, 1024);

fputs($fp, "QUIT\r\n");

fclose($fp);

Анализируя ответ от сервера мы можем узнать, существует ящик, или нет:

if (substr($line, 0, 3) != "250") {
    // не существует
} else {
    // существует
}

Скачать функцию целиком

Ajax и кодировки символов

То, что UTF-8 шагает по планете, мы все прекрасно знаем и все прекрасно понимаем какие преимущества мы получаем и каких проблем мы можем избежать используя универсальную кодировку, вместо национальной. Множество сервисов, систем и технологий de facto используют UTF-8 в качестве кодировки символов по умолчанию и попросту не умеют работать с национальными кодировками.

Все мы знаем (а те, кто не знает сейчас узнают), что Ajax для обмена данными использует только кодировку UTF-8. Что же делать, если на сайте используется другая кодировка и возможности изменить её нет? А вот что…

Continue reading ‘Ajax и кодировки символов’

Ajax Image Gallery

Ещё одно руководство по разработке Ajax-приложений.

На этот раз мы будем делать простенькую галерею изображений.

Всё очень просто — изображение, список ссылок с номерами на другие изображения, при нажатии на которые, новое изображение эффектно появляется без перезагрузки страницы. Для самых нетерпеливых срузу даю ссылку на демо.

А для любопытных расскажу, как я всё это сделал.

Continue reading ‘Ajax Image Gallery’

Автоматический апгрейд PEAR-библиотек

Надоело мне в ручную апгрейдить PEAR-библиотеки, а надо, так-так проект, над которым я сейчас тружусь, помимо всего прочего, активно использует компоненты PEAR…

Нашёл простое решение — в crontab добавил строчку:

30 13 * * 7 sudo pear upgrade-all

Пускай теперь апгрейдится по воскресеньям :)

Как “пикнуть” в MySQL

Из листа рассылки MySQL General Discussion узнал, как можно заставить консольный MySQL-клиент издать писк (beep), например, при ошибке выполнения запроса или, наоборот, о его успешном выполнении:

SELECT char(7);

К сожалению, это у меня почему-то не работает :(

Кодировки-кодировочки

Денис Перехрест ненавидит кодировку windows-1251.

Скорее всего, он просто не умеет её готовить :)

По своему опыту знаю, что windows-1251 — это ещё не самое страшное зло. Гораздо страшнее, например, плеяда CJK-кодировок: GB2312, GBK, GB18030, EUC-TW, Big5, Shift_JIS, EUC-JP… Например, если открыть файл в кодировке windows-1251, как koi8-r сразу же станет ясно, что выбрана неправильная кодировка, тоже самое, если открыть utf-8, как iso-8859-1, но это абсолютно не так в случае с CJK-кодировками — они все показывают иероглифы (правда, каждый раз разные), поэтому если кодировка не указана явно, то догадаться о ней невозможно не только человеку (если он конечно не знаток языка), но и php mb_detect_encoding.

Continue reading ‘Кодировки-кодировочки’

Rico + script.aculo.us

Решил и я наконец познакомиться с Ajax’ом поближе…

Долго изучал всякие вводные статьи, тьюториалы, изучал PEAR-библиотеку, работающую с Ajax, просто библиотеку и прочие фреймворки… Пока не столкнулся с двумя великолепными библиотеками — Rico и script.aculo.us (обе являются надстройками над Prototype‘ом).

Суммарно мне понравились:

  • Работа с Ajax
  • Визуальные эффекты

Но по отдельности каждая из этих библиотек была несамодостаточной — в Rico была реализована возможность гибкой работы с Ajax’ом, но по качеству и количеству визуальных эффектов выигрывал script.aculo.us. Мне же для моего проекта требовалось и то и другое.

И вот результат — я “выкосил” из Rico все визуальные эффекты, оставив только Ajax:

ajax.js

P.S. Не стоит использовать эту библиотеку для навешивания мелких “фенечек” на страницы — для этого лучше воспользоваться этим тьюториалом.

Длина поля в phpMyAdmin

Весь конец рабочего дня был тупо потрачен на битву с несуществующим багом. Точнее баг был, но не мой :)

Писал я значит одну утилитку на Си: она должна собирать кое-какую информацию и записывать её в базу данных. Из этой базы “web-морда”, написанная на PHP, должна читать данные и представлять их в виде “красивых” отчётов.

Continue reading ‘Длина поля в phpMyAdmin’