Март 2009

На будущее

30.03.2009
как выбрать жк телевизор . Интернет магазин женской одежды - каталог одежды.

Из всех книг по программированию меня очень зацепила книжка Бэка "Экстремальное программирование". Сама концепция так называемого test driven development-а, да впрочем и как и само парное программирование, да и идея что заказчик сидит рядом и всегда доступен и отвечает на вопросы, т.е. он часть команды - все эти идеи на данной ступени развития кажутся мне чем-то из области фантазий, которые практически не реализуемы, по крайней мере в той части мира программирования, в которой все мы варимся. Но что действительно было интересно, так эта их идея о том, что все задачи должны быть реализованы самым простым способом из возможных, в случае чего - всегда можно отрефакторить. Однако, как назло, в программировании считается очень крутым писать расширяемые, настраиваемые вещи - и это частенько порождает проблемы.

(далее…)

DIRECTORY_SEPARATOR и PATH_SEPARATOR

26.03.2009

В php есть замечательные предопределенные константы - DIRECTORY_SEPARATOR и PATH_SEPARATOR. Нужны они для того, чтобы скрыть различия в путях между линуксом и виндой. И хоть эти вещи для многих очевидны - всегда найдется парень, который про это не в курсе и натворит бед. Так вот, чтобы отделять директории, нужно юзать DIRECTORY_SEPARATOR - ну, например 'images' . DIRECTORY_SEPARATOR . 'upload' . Да-да, я знаю, все и так используют символ '/' для разделения путей, потому что это работает и в винде, где он не родной, и в линухе. Можно сказать, что константа DIRECTORY_SEPARATOR в принципе нафиг не нужна, если юзать '/' вместо '\' , но это правильно и создает уверенность что все будет зашибись, где бы это не запустилось.

А вот про вторую константу PATH_SEPARATOR мало кто знает :) а все потому что include_path (в частности set_include_path() ) очень редко где используется. Я бы и сам никогда не узнал про это и не наступил бы на некоторые грабли, если бы не Zend Framework, который установить нестандартно без переопределения include_path очень тяжело.

Итак, include_path - настройка, которую можно переопределять в скриптах. Работает это так - когда делается require 'somefile.php';  - интерпретатор вначале ищет файл в той же папке, что и запускаемый скрипт, если не находит, он начинает искать этот же файл в других папках, указанных в include_path. Штука полезная, однако есть подводный камень - include_path - это строка, папки разделены разделителем - причем в винде это ';' а в линухе':'. Тут-то нам и нужна эта константа, которая позволит скриптам запускаться и там и там без лишних конфигов или изменений кода.

onkeypress vs. onkeydown

23.03.2009

Недавно пришлось прикручивать "умную" валидацию данных на клиенте через JavaScript. Заказчик захотел, чтобы в числовые поля нельзя было вбить нечисловые символы. Обычно (у нормальных людей) это делается так, чтобы при сабмите формы сгенерированный скрипт пробегался по полям - и подсвечивал (алертил, и т.п.) ошибки. Вначале был запрещен ввод пользователем не цифр. Работало это через onkeypress - там по event.charCode проверялся собственно код символа. Но тут за дело взялся тестер - и как всегда в подобных случаях предложил хуйню решение (запретить ctrl+v на поле, т.к. через него вставить не число можно), которое пришлось реализовывать.

И оказалось, что  onkeypress на ctrl+v вообще по-барабану - он его пропускает и ложит на все болт. Погуглив немного - переделал все под onkeydown - return !event.ctrlKey; И тут полетели странные баги - оказалось что фильтр, пропускавший только числа - теперь магическим образом пропускает и символы v,c,#,$ - причем только их.

И только по просшествии 2-х часов и около 5 переделок всего пришло откровение:

onkeypress - ложит болт на ctrl+v, однако коды символов приходят именно такими какими они есть

onkeydown - может отловить ctrl+v, однако коды символов - это коды нажатых клавишь! т.е. на раскладку ему тоже по-барабану

Так что если кому-нить нужно будет реализовать такую-же муть - пристрелите тестера нафиг надо юзать одновременно и то и то.

Извращения с булеаном в MySQL

22.03.2009

Я сейчас почти не создаю новых проектов с нуля - и по-своему это хорошо - потому что разбирание чужого кода дает много новых знаний - ну или же просто напоминает о том, как делать все-таки не нужно :) Одна из таких явных тем - это то как программисты извращаются с казалось бы простыми вещами. Этот пост про извращения с логическим типом в MySQL.

(далее…)

Булеан

19.03.2009

Вырезка прям из кода текущего проекта:

if (preg_match($regex, $address)) {
return true;
}
else {
return false;
}

(далее…)

Магия isset

19.03.2009

Всю жизнь писал вот так:

if(isset($_GET['id']) && isset($_GET['filter']) && isset($_GET['order'])) // do something

Благодаря Говнокоду узнал что функция (ну вообще-то конструкция языка - но нам по-барабану же :))  isset оказывается:

bool isset ( mixed $var [, mixed $var [, $... ]] )

т.е. принимает не один параметр, а несколько, причем

isset($a, $b) = isset($a) && isset($b)

?> не обязательный

18.03.2009

Для опытных прогеров это уже еще тот баян, но очень хочется верить, что этот пост (или аналогичный где-нить в другом месте) прочитает человек, чей код мне придется когда-нибудь сопровождать :)) Это как "Ложки нет" в матрице - мегаоткровение жизни:

Закрывающий тег ?> в php-файлах не обязательный

(далее…)


Информеры с тИЦ и PR: получить код для сайта
вакансии зеленоград