За месяц Январь, 2008

Как работает интернет. Для начинающих

Тем, кто представляет, как “работает” Интернет, статья может показаться неинтересной. Все расписано очень простым и понятным языком. Многие подробности опущены.

Предупреждение сделано. Теперь поехали.

Раз уж Вы оказались на моем сайте, то так или иначе Вы “сидите в интернете”. Что же за этим скрывается? Совсем простым языком описать то, как “работает” интернет, можно примерно так:

Вы, сидя за своим компьютером открываете программу-браузер (скорее всего, Internet Explorer, mozilla Firefox или Opera). Программа может открыть пустую страницу - тогда придется вводить в адресной строке адрес сайта. Или же программа сразу откроет домашнюю страницу. Вот теперь поподробнее.

“Открыть страницу” - за этими словами скрывается множество действий, невидимых глазу человека. Компьютер, получив команду “открыть” посылает запрос к другому компьютеру (серверу), на котором находится эта страница. В ответ он получает какие-то данные (будем называть их файлами, хотя это не обязательно так). Вы видите не только текст, но ещё и картинки. Значит при открытии страницы компьютер получил не один файл, а несколько. Многие файлы не видны пользователю, но без них страница работала бы не так, как нужно - в файлах прописаны служебные инструкции для программы-браузера. В следующих статьях мы обязательно рассмотрим служебные файлы . А пока разберем, откуда берутся эти файлы.

Вариант первый - они хранятся на сервере в таком же виде, как и передаются браузеру. Так называемые “статические” странички - изменить данные на страничке мы можем только отредактировав сам файл с этой страничкой. Такие странички можно только просматривать.

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

Вариант третий, наиболее распространенный. При запросе странички на сервере выполняется некая программа, которая “печатает” ответ. Браузер, получив ответ, отображает его на экране. А как составляется ответ? Как захочет программист :) Нужно вывести каталог интернет-магазина? пожалуйста. А если статью из последнего номера журнала? - пожалуйста. В общем, фантазия безгранична…

Так вот. В качестве “серверной программы” в третьем варианте вполне успешно выступает интерпретатор PHP - программа, которая выполняет “скрипты”, написанные на одноименном языке программирования. И если Вы хотите научиться программировать на PHP, создавать динамические страницы, научиться думать как машина (если уже умеете - отлично)…

В общем, решайте, надо ли.. или не надо.

Опубликовано Январь 31, 2008 | автор: levik  |  Комментарии (4) »

Настройки компилятора Borland Builder

Если приходилось сталкиваться с тем, что программа, созданная в Borland Builder запускается на своем компьютере, но при переносе на другой - ругается на отсутствие файлов ( vcl60.bpl).

Все дело в том, что при настройках по умолчанию (на этапе разработки программы так гораздо удобнее - экономия времени и ресурсов компьютера) скомпилированная программа Borland C++ Builder использует библиотеки Borland (Run Time Packages), в которых содержатся многие используемые функции. Естественно, если на компьютере не установлен Builder или другой продукт, содержащий эти библиотеки, программа не сможет корректно выполниться.

Для компиляции окончательного варианта программы (который будет использоваться на любых компьютерах) следует:

  • Перейти в управление свойствами проекта: Project - Options (Shift+Ctrl+F11);
  • на вкладке Packages снимаем галочку Build with runtime packages;
  • на вкладке Compiler нажимаем кнопочку Release (с зеленым человечком);

На всякий случай можно побродить по вкладкам (Linker и Compiler) и посмотреть, чем отличается режим Release и Full debug (кнопочка рядом с Release) .

После таких манипуляций программа, скомпилированная в Borland Builder будет выполняться на любом компьютере (естественно, с операционной системой Windows, которая поддерживает использованные в программе возможности)

Опубликовано Январь 22, 2008 | автор: levik  |  Нет комментариев »

Оптимизация web-сервера Apache (черновик)

Скорее шпаргалка, чтоб не забыть… Постепенно дополняется… Причесать будем позже.

Настраиваем Apache - редактируем файл httpd.conf:
# TimeOut: The number of seconds before receives and sends time out.
TimeOut 60

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to “Off” to deactivate.
KeepAlive On

# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
KeepAliveTimeout 10

## Server-Pool Size Regulation (MPM specific)

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers 3
MinSpareServers 3
MaxSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

KeepAlive On имеет смысл ставить на сайтах с относительно большим количеством изображений. Оптимальное время “таймаута” и количество MaxKeepAliveRequests , скорее всего, имеет смысл подбирать “опытным” путем. Обычно не больше 10-15 секунд. Для файл-хостингов лучше будет выставить KeepAlive Off

MinSpareServers и MaxSpareServers - Spare - “запасной” - неиспользуемые процессы (баланс ресурсов процессора и памяти - на запуск процесса требуется некоторое время, которое можно “сэкономить”, если свободный процесс уже висит в памяти.. Однако, если процессов слишком много, то они занимают лишнюю память)

ServerLimit - максимальное значение MaxClients на “время жизни” процесса;
MaxClients - максимальное количество одновременно запущенных процессов (по сути - клиентов) - чем больше, тем больше одновременных запросов можем обработать (соответственно, занимая больше памяти и используя больше процессорных ресурсов);
если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog;
MaxRequestsPerChild - максимально возможное количество “дочерних” процессов - при переполнении дочерний процесс автоматически завершается

Для изображений (более-менее постоянных) имеет смысл выставить значение Expires, например на месяц
ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
#ExpiresByType image/jpeg "access plus 20 days"
ExpiresByType image/jpeg A2592000

материалы по оптимизации Apache (пополняется)

http://www.greenmice.info/node/98
http://www.salex.ru/book/book.php?httpd_prefork
http://www.xela.ru/2009/03/nastrojka-httpdconf-na-vps-pod-unix-apache/
http://linux.yaroslavl.ru/docs/serv/

memory - информация о CPU и загрузке процессора в реальном времени

netstat -atun | grep -i ‘wait’ | wc -l - количество открытых соединений в режиме ожидания
netstat -atun | grep 'WAIT' | wc -l

Узнать версию ядра и самого линукса и дополнительную информацию:

cat /etc/issue
uname -a
cat /proc/version

Опубликовано Январь 17, 2008 | автор: levik  |  Комментарий (1) »

Хранимые процедуры в MySQL 5.0

Столкнулся с тем, что иногда гораздно удобнее и правильнее спрятать логику работы базы в хранимые процедуры.

1. Вызов процедуры, которая возвращает результат:
CREATE PROCEDURE returnresult(IN userid INT)
BEGIN
SELECT * from ... ;
END;

Тогда
<?php mysql_query('call returnresult(2)');'?>
выдаст ошибку “PROCEDURE base.returnresult can’t return a result set in the given context “.
Проблема в том, что библиотека mysql не поддерживает мульти-запросы. Для возврата результата из хранимой процедуры следует использовать улучшенную версию - библиотеку mysqli (improved).
Заменим в коде функции mysql на mysqli, (на локальном сервере для windows - добавим в файл php.ini строку: extension=php_mysqli.dll; аналогичной команды для *nix не знаю.). После этого все заработало.

2. Рекурсивные процедуры в mysql

При попытке использовать рекурсию mysql выдал:

Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routineset …

Лечится запросом “SET max_sp_recursion_depth= 4″ // глубину рекурсии - в зависимости от задачи. Мне много не надо было. :)

Опубликовано Январь 12, 2008 | автор: levik  |  Нет комментариев »