Округление размеров в различных браузерах

Да да.. Как оказалось, размеры шрифта разные браузеры подсчитывают по-разному.

При установке font-size:87%; IE 6, IE 7 , Firefox отображали надписи шрифтом в 12px, opera - 11px. При 88% - достигалось единообразие (12px) . Почему-то я не успокоился… :) Пошел дальше - при 86% ситуация такая же как при 87. Но при 85 процентах… IE6 и его младший (т.е. более поздний) брат показывали всё так же 12-px шрифтом, а Firefox стал солидарным с Oper’ой - перешел на 11px. При 84 - снова пришли к однообразию. :)

# Браузер 88% 87% 86% 85% 84%
1 IE 6,7 12px 12px 12px 12px 11px
2 Firefox 12px 12px 12px 11px 11px
3 Opera 12px 11px 11px 11px 11px

Опубликовано Июль 12, 2008 | автор: levik  |  Без комментариев »

php 0010 - урок PHP вводный

Решил опубликовать на сайте серию статей (уроков, обзоров - называйте как хотите) для начинающего PHP-шника. Естественно, на сегодняшний день выпущено очень много литературы. Однако, постараюсь обойтись без лишних теорий. Будем учиться на примерах.

С чего начать!? Думаю, для начала будет правильно вообще разобраться, что такое PHP , и нужно ли его изучать.

Если же Вы твердо решили “ДА”, то, пожалуй, следует начать с установки “среды разработки”. Рекомендую воспользоваться “джентельменским набором веб разработчика” или в быту “ДЕНВЕРом”. На сайте разработчиков denwer.ru Вы можете найти всю документацию и дистрибутивы. Смело устанавливайте последнюю версию, и настройтесь  на … долгий и тернистый путь к знаниям, наберитесь упорства и смело продолжайте!

Также рекомендую установить следующие программы:

  1.  Total Commander - файловый менеджер. По сравнению со стандартным проводником Windows позволяет многие функции упростить (вплоть до “одной кнопки”). Поначалу может показаться неудобным, но это дело привычки.. И опять же дело лично каждого.
  2. Текстовый редактор с подсветкой (рекомендую bred 3 или notepad++ - в обоих есть функция подсветки синтаксиса). Настоятельно не рекомендую пользоваться “WYSIWHYG” редакторами (Macromedia Dreamweawer, например). И уж тем более, рекомендую не пользоваться Microsoft Front Page.

Вот и все, что нам потребуется для разработки.

Мы подготовили рабочее место - а это, согласитесь, неплохой задел для хорошей работы. Пожалуй, на этом пока остановимся.

Опубликовано Февраль 3, 2008 | автор: levik  |  Без комментариев »

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

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

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

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

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

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

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

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

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

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

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

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

Хранимые процедуры в 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  |  Без комментариев »

Деревья php + mysql

Практически каждому программисту приходится сталкиваться с древовидной структурой.

Дано: php + mysql.
Все элементы, которые входят в древовидную структуру хранятся в одной таблице базы данных.
Найти: способ хранения и представления древовидной структуры.

  1. Простейший вариант состоит в том, что все “ветки” дерева имеют дополнительное поле “идентификатор родителя”, используя который и можно построить всё дерево. Если нет необходимости строить всё дерево, а достаточно просматривать потомков следующего уровня некоторого родителя - то такой способ организации дерева, на мой взгляд, идеален. Если же требуется строить дерево целиком, то придется использовать рекурсивную процедуру - или в php или в mysql (при условии, что максимальная “глубина  дерева” заранее определена, можно, конечно, обойтись одним составным, в котором одна таблица присоединяется сама к себе… Но это уже больше похоже на извращения..).
    Можно, конечно, обойтись одним запросом (что-то вроде “select * from tree”, а данные разбирть уже в php примерно так:
      while($row = mysql_fetch_assoc($res)){
      $tree[$row['pid']][$row['id']] = $row;
      }
    Плюсы: простота организации данных.
    Минусы: при большом количестве “веток” количество запросов возрастает…
  2. Nested sets или вложенные множества. Способ организации дерева, при котором дерево обходится, к примеру слева направо, и все вершины нумеруются дважды.
    Нумерация элементов при организации дерева методом Nested Sets
    Плюсы: одним запросом можно выбрать всех потомков, отстоящих по дереву на заданное количество уровней, всех родителей.. да вообще много чего можно. Где-то встречал уже готовый класс для работы с ”Nested sets” -  деревьями.

Опубликовано Ноябрь 1, 2007 | автор: levik  |  Без комментариев »

Шаблоны в php - за и против

В настоящее время написано много шаблонизаторов. Многие php-программисты, думаю, слышали о SMARTY, FastTemplate и иже с ними. У каждого из шаблонизаторов свои особенности, но все они созданы для решения задачи “разделения контента и дизйна“.

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

Возникает вопрос, “А зачем?”. И, думаю, не безосновательно. Ведь PHP позволяет делать всё это. Парадокс? Авторы шаблонизаторов пытаются при помощи интерпретатора PHP создать свой интерпретатор, и считают, что это необходимо, хорошо, ну или просто… неплохо. Проделана огромная работа, потрачены часы, дни, месяцы.. Неужели, всё это зря!?

Попытаемся оправдать применение шаблонизатора. Читать целиком »

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

IE 3px float bug

IE 3px float bug - глюк IE 6.

<style>
 #left {width: 200px;float: left; border: solid 1px #f00;}
 #right {padding:0;border: solid 1px #0f0;margin: 0 20px 0 250px;}
 #right p{background: #000;height: 100px;margin:0;}
</style><div id=”left”> </div>
<div id=”right”><p> </p></div>

В IE 6 появляется отступ 3 px у элемента p, который находится на уровне  элемента #left, если блок “обтекается” другим блоком (у которого не задана высота) и у последнего есть дочерний блок(у которого задана высота), то этот дочерний блок будет иметь отступ в 3px от родительского блока слева. Замудрено, но похоже на правду…

Как лечить!?
1) Прописать высоту у элемента right (#right:height:1%)
2) С помощью условных комментариев задать отрицательный отступ в ie6

<!–[if lte IE 6]>
<style type=”text/css”>
#right p {margin-left:-3px;}
</style>
<![endif]–>

Опубликовано Октябрь 18, 2007 | автор: levik  |  Без комментариев »

глюки в программах

Corel draw ругается по поводу msxml4
Решение: после установки MSXML4 выполни regsvr32 msxml4.dll

Опубликовано Октябрь 14, 2007 | автор: levik  |  Без комментариев »

Прячем e-mail от спам-роботов

Ссылки вида mailto: становятся объектом поиска компаний, занимающихся массовых рассылок. Естественно, ищут они не вручную, а при помощи программ или скриптов. Чаще всего алгоритм поиска прост - ищем подстроку вида mailto:__EMAIL__ и выделяем из неё часть после двоеточия.

Способы обхода: Читать целиком »

Опубликовано Октябрь 10, 2007 | автор: levik  |  Без комментариев »

40 советов по оптимизации кода

  1. If a method can be static, declare it static. Speed improvement is by a factor of 4.
  2. echo is faster than print.
  3. Use echo’s multiple parameters instead of string concatenation.

Читать целиком »

Опубликовано Октябрь 9, 2007 | автор: levik  |  Без комментариев »