Достаточно развёрнуто про новый функционал Django 1.4: http://blog.futurecolors.ru/search/label/Django%20Days
«Clickjacking — относительно новый и не очень широко известный тип атак на веб-сайты. Его суть в том, что пользователь, совершая клик на специально сформированной странице злоумышленника, на самом деле кликает по ссылке на совершенно другом сайте. Это может быть использовано как для относительно безобидных накруток голосований (например, ретвитов или лайков), так и более разрушительных вещей, главное, чтобы для этого требовался щелчок мыши.»
Подробнее – на http://prophet.ru/2011/08/fighting-clickjacking/
Отличная ошибка, на которую обычно просто «забивают», т. к. не понятно, где и что искать.
А ошибка вызвана тем, что в кастомном обработчике исключений происходит исключение, после чего php прерывает процесс с таким замечательным и информативным сообщением об ошибке.
В моём случае это было своё расширение для класса DateTime
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' ) );
}
}
Если не написать тот странный код, то происходило прерывание php-процесса с ошибкой
PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0. У нас такое происходило только на одном из серверов на продакшн, который админы никак не могут обновить до нормальной версии php.
Вот подробное описание, почему так происходит: http://www.php.net/manual/en/function.set-exception-handler.php#68712
Читал-читал про инверсию управления (Inversion of Control), всякие Pico и Phemto.
Continue reading »
Удобный css-фреймворк.
Позиционирует себя как «Simple and flexible HTML, CSS, and Javascript for popular user interface components and interactions.»
http://twitter.github.com/bootstrap/components.html
Захотелось сделать более правильную работу с триггерением/навешиванием обработчиков на события, чем это реализовано в jquery-ui.
При этом сам функционал надоело копировать из виджета в виджет.
В общем, вот простой добавить методы к своим виджетам:
(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 ));
Потом для каждого виджета нужно будет указать опциональный второй параметр
$.widget( "my.fast_search", $.my.my_extension,
{
options:
{
...
Внимание нужно обратить на второй параметр $.my.my_extension, который в принципе предназначен для расширения функционала работающего виджета, но отлично работает и для того, чтобы унаследовать некие базовые методы в виджеты.
Сначала начал делать через
$.extend( $.widget.prototype, {
...
} );
но понял, что выигрыш в производительности будет слишком условным (из-за того, что при способе с прототипом методы копируются в память один раз, а не для каждого виджета), а простота реализованного способа – сильный профит.
Если нужно поставить старый 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
https://www.alwaysdata.com/plans/shared/
Языки: PHP, Python, Ruby, Perl, Java, Lua, OCaml, Erlang; фреймворки: Джанго, Рельсы и symfony (PHP).
Сам не пробовал, но слышал.
Минусы – под код дают целых 10 Мб дискового пространства и гигабайт трафика в месяц.
Почему использовать localStorage вредно: http://hacks.mozilla.org/2012/03/there-is-no-simple-solution-for-local-storage/.
Ответ, почему можно его использовать: http://www.nczonline.net/blog/2012/03/07/in-defense-of-localstorage/.
В общем мнения разделились, запасаемся попкорном.
В Windows 7 в командной строке
mklink /J "C:\Program Files (x86)\Steam\steamapps" "D:\Games\steamapps"
Кстати так можно играть в игры через steam, если мало места на диске C:\
.