PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0
Отличная ошибка, на которую обычно просто «забивают», т. к. не понятно, где и что искать. А ошибка вызвана тем, что в кастомном обработчике исключений происходит исключение, после чего php прерывает процесс с таким замечательным и информативным сообщением об ошибке. В моём случае это было своё расширение для класса DateTime
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public function __construct( $Time = 'now', DateTimeZone $Timezone = null ) { // PHP 5.3.3 имеет этот баг: // @link https://bugs.php.net/bug.php?id=52063 // поэтому пишем странное: if ( ! empty( $Timezone ) ) { parent::__construct( $Time, $Timezone ); } else { parent::__construct( $Time ); } // ещё раз вызываем явно setTimezone, чтобы обойти багу с timestamp - @link http://www.php.net/manual/en/datetime.construct.php#97724 if ( empty( $Timezone ) ) { $this->setTimezone( new DateTimeZone( 'Europe/Moscow' ) ); } } |
Если не написать тот странный …
IoC в php
Читал-читал про инверсию управления (Inversion of Control), всякие Pico и Phemto.
Twitter bootstrap
Удобный css-фреймворк. Позиционирует себя как «Simple and flexible HTML, CSS, and Javascript for popular user interface components and interactions.» http://twitter.github.com/bootstrap/components.html
Расширение базового функционала jquery-ui-виджетов
Захотелось сделать более правильную работу с триггерением/навешиванием обработчиков на события, чем это реализовано в jquery-ui. При этом сам функционал надоело копировать из виджета в виджет. В общем, вот простой добавить методы к своим виджетам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
(function( $ ) { "use strict"; /** * расширение базового функционала jquery-ui */ $.widget( "my.my_extension", { _triggerSmart: function( EventName, Data ) { var me = this; var $me = $( me.element ); $me.trigger( EventName + '.' + me.widgetName, Data ); return me; }, _bindSmart: function( EventName, Handler ) { var me = this; var $me = $( me.element ); // боремся с повторным навешиванием обработчика var events = $.data( $me.get( 0 ), 'events' ); var filteredEvents = []; if ( EventName in events ) { filteredEvents = $.grep( events[EventName], function( Event ) { return Event.type == EventName && Event.namespace == me.widgetName; } ); } if ( ! filteredEvents.length ) { $me.bind( EventName + '.' + me.widgetName, Handler ); } return me; } } ); }( jQuery )); |
Потом для каждого виджета нужно будет указать опциональный второй параметр
1 2 3 4 5 |
$.widget( "my.fast_search", $.my.my_extension, { options: { ... |
Внимание нужно обратить на второй параметр $.my.my_extension, который в …
Несколько firefox на одной машине
Если нужно поставить старый firefox, для этого нужно: проинсталлировать старую версию в другую папку выполнить в командной строке «C:\Program Files (x86)\Mozilla Firefox 3.6\firefox.exe» -Profilemanager (путь к старой версии) в менеджере создать новый профиль (firefox-3.6) и выбрать его для использования в ярлыке прописать «C:\Program Files (x86)\Mozilla Firefox 3.6\firefox.exe» -P “Firefox-3.6″ -no-remote http://www.htmlcenter.com/blog/multiple-firefox-installs/
Бесплатный хостинг с Django
https://www.alwaysdata.com/plans/shared/ Языки: PHP, Python, Ruby, Perl, Java, Lua, OCaml, Erlang; фреймворки: Джанго, Рельсы и symfony (PHP). Сам не пробовал, но слышал. Минусы — под код дают целых 10 Мб дискового пространства и гигабайт трафика в месяц.
localStorage — использовать или нет?
Почему использовать localStorage вредно: http://hacks.mozilla.org/2012/03/there-is-no-simple-solution-for-local-storage/. Ответ, почему можно его использовать:
Символическая ссылка в Windows
В Windows 7 в командной строке
1 |
mklink /J "D:\Games\steamapps" "C:\Program Files (x86)\Steam\steamapps" |
Кстати так можно играть в игры через steam, если мало места на диске C:\ ;).
Логирование js-ошибок на сервере
Подсмотрел у разработчиков Yandex простое как пень логирование ошибок клиентской части на сервер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function logError( Message, Url, Line ) { new Image().src = '/monitoring.php?msg=' + encodeUriComponent( Message ) + '&url=' + encodeUriComponent( Url ) + '&line=' + Line; } window.onerror = function ( Message, Url, Line ) { logError( Message, Url, Line ); }; try { // ... } catch ( e ) { logError( e ); } |
Ещё ссылка про логирование ошибок через google analytics — http://blog.gospodarets.com/track_javascript_angularjs_and_jquery_errors_with_google_analytics/ (у меня несколько иная реализация, но идея примерно та же).
БЭМ — система модулей (виджетов) от Яндекс
Интересная реализация клиентских модулей, которая предполагает определённую файловую структуру для шаблонов, css, js и любых других нужных технологий. Естественно, повторное использование. Декларации для автоматической сборки модулей (css, js, шаблонов) написаны на javascript. Есть скрипты для автоматической сборки модулей в страницы. Пример построения сайта от разработчиков — http://video.yandex.ru/users/ya-events/view/302/?ncrnd=6362 Вот ещё видео — тут рассказывается про то, …