Архив категории 'Программирование'
Firebug. Console.log(). Или почему JavaScript не срабатывает?
Firebug безусловно крутая штука, но иногда он становится причиной некоторых неполадок с JavaScript на странице.
Неоднократно встречался, что при включенной консоли без видимых причин не срабатывает JS на странице, всё исправляется отключением всех консолей.
Так же, для тех кто использует команду console.log(); для вывода дебага в консоль Firebugа, будьте бдительны, если вы забудете убрать эту команду из кода и на страничку зайдет человек, у которого этот плагин не установлен, это приведет к ошибке а-ля “console is not a function” (или что-то в этом роде) что и повлечет за собой невыполнение остального джаваскрипта на странице.
Кто ещё не в курсе что за зверь этот Firebug, посмотрите сюда и пользуйтесь на здоровье.
2 комментариевSmarty-кеш или сайт тормозит
Проект IIS+PHP+MySQL+FMS реализует видео-чат.
В качестве шаблонизатора используется Smarty (http://www.smarty.net/).
Спустя 3 года с выхода в live начал сдыхать. Это проявлялось дикими тормозами, странички которые в первое время продакшн-жизни грузились 1-2 секунды начали грузиться по 30-40 секунд. Что соответственно и породило необходимость изучить этот вопрос.
r is not a constructor. Ошибка в TinyMCE
Столкнулся с этой ошибкой. После небольшого ресерча нашел ответ на офсайтовском форуме.
Проблема возникает если TinyMCE не хватает каких-то файлов, зачастую из папочек plugins или themes.
После заливки MCEшки на FTP с помощью TC у меня этих папок с файлами не оказалось (Причины их отсутствия не ясны, скорее всего либо квоты на дисковое пространство или траблы с коннектом)
После дозаливки двух папочек на их законное место, TinyMCE заработала корректно.
Мораль: если TinyMCE ругается вот так: “r is not a constructor” или вот так: “o is not a constructor”, ну или подобным образом, проверь что бы все файлы и папки были на местах в нужном количестве.
Нет комментариевMySQL. Проверка валидности даты
Если в MySQL сделать следующий запрос:
select date(”2008-02-31″);
умный MySQL вернет в результате запроса NULL, ну логично, что в феврале месяце в 2008 году не было 31 дня, да и 30 собственно тоже не было, а вот если написать
select date(”2008-02-29″);
то в ответе получим значение отличное от NULL, а именно эту же дату, что и будет доказательством её валидности и существования.
P.S. Не знаю как в ранних версиях с наличием такой фичи, но в 5.0.24 она есть и иногда бывает очень даже полезной
3 комментариевПроблема с сессиями в Internet Explorer
Проблема состоит в том, что из под Firefox нормально логинится на сайт (стартует сессия), а из под Internet Explorer(IE) не хочет.
С помощью josser‘а выяснили, что проблема в том, что не сохраняется сессионная кука.
Ну а проблема не сохранения сессионной куки обстояла в том, что на сервере стояло время в прошлом, и кука сохранялась с “заведомо проэкспайренной датой”.
IE и Opera к сожалению на такой поворот событий обижаются.
Firefox’у респект, за искусственную поддержку сессий.
Лечится это всё установкой нормальной таймзоны на сервере:
# ntpdate pool.ntp.org
# tzselect
Спасибо им
3 комментариевБольшой проект. Советы
В моем понимании большой проект - это проект, который длится более одного года при участии как минимум трех программистов. Именно в таком проекте я работаю уже в течении ~ полутора лет. За этот срок я неоднократно сталкивался с разного рода “граблями”. Подробнее
10 комментариевPHPDocumentor. Как пользоваться?
Кто такой PHPDocumentor (далее “документор”) можно почитать здесь:
- на PEAR’е - http://pear.php.net/package/PhpDocumentor/;
- на Сурсфорже - http://phpdocu.sourceforge.net/.
А промануалиться здесь - http://www.phpdoc.org/manual.php .
Вкратце скажу, что он умеет документировать PHP-код, то есть делать HTML с кликабельным описанием методов, классов и тому подобную инфу. Такая информация зачастую требуется по окончанию определенного этапа в проекте.
Для пользователей Zend Studio (http://www.zend.com/en/downloads/) нет никаких сложностей при в использовании документора, так как он встроен в нее и легко запускается ” Tools -> PHPDocumentor “. Правда, если вы используете операционную систему Windows, могут возникать некоторые проблемы с копированием необходимых файлов из за разности слешей. Пару раз столкнувшись с этой проблемой и не найдя моментального решения, решил поднять документор у себя на локали.
Исходники берем либо на сайте либо из папки с ZendStudio . DIRECTORY_SEPARATOR . bin . DIRECTORY_SEPARATOR . phpdocumentor. Копируем их к себе в htdocs/phpdocumentor, заходим http://localhost/phpdocumentor/, в закладке “Files” указываем файлы либо папку, файлы в которой надо документировать. Затем в “Output” указываем папку в которую будут складываться htmlки и формат вывода из выпадающего списка. В “Options” указываем название пакета и нажимаем кнопку “create” справа внизу. Чуть ниже в отдельном горизонтальном фрейме можно будет проследить за ходом генерации.
Приятного документирования
Порядковый номер элемента в списке или “выше->ниже”
Иногда стоит задача, расположить запись из выборки не по порядку их создания а по желанию заказчика, то есть дать ему возможность самому поднять или опустить тот или иной элемент выборки ниже либо выше по списку. На первый взгляд задача достаточно тривиальная, но почему то, когда начинаешь копать глубже, становится очевидным, что без внимательного построения всего алгоритма “на листике” ничего не получится. Подробнее
2 комментариевSVN. Игнорирование файла, папки
Иногда бывает удобным установить игнорирование определенного файла в SVN, что бы на него не реагировали команды commit(ci) или update(up). Подробнее
6 комментариевJavaScript Form submit
Мне стыдно…
Но на то затупы и нужны, что бы с ними разок поковыряться и потом никогда не ошибаться.
Проблема была в том, что я не мог вызвать submit у формы, когда у меня изменялось поле. Выглядел код так:
Ошибка: “document.forms.indexesForm.submit is not a function”;Вооружившись FireBug и сделав watch на document.forms.indexesForm я понял, в чем был мой затуп. Далее идет исправленная строка:
Проблема была в том, что я кнопке submit дал такое же имя как и зарезервированному методу у объекта form - “submit”. Отсюда следовало, что при вызове document.forms.indexesForm.submit я вовсе не вызывал метод submit у формы, а заходил в свойства кнопки с name = “submit”. 11 комментариев