Eclipse forever
Обновил Eclipse - теперь он у меня поддерживает редактирование SQL файлов. Раньше для редактирования SQL файла Eclipse открывал блокнот, теперь открывает в собственном окошке с проверкой синтаксиса - красота.
Странное поведение eval
Несмотря на явную синтаксическую ошибку код внутри eval выполняет присваивание, хотя и выводит на экран ошибку.
Чтобы вылавливать подобные ошибки пришлось сделать буффер и смотреть не вываливает ли eval что нибудь на экран.
Так выглядит готовая функция для приобразования PHP строки в переменную:
(Казнить [нельзя) помиловать]
Только что пришлось покапаться в исходниках vBulletin - ребята курят очень неслабую траву, весьма забористую...
После очередной модификации сайта при регистрации пользователя стало перебрасывать на совершенно экзистенциальный url вида :/forum/admincp.php - т.е. кудато пропал http из пути.
После часа ковыряний нашел следующее:
Индийские программисты очень умные, очень наблюдательные, очень усидчевые... задницы, но всеже пару скобок проглядели... В результате REQ_PROTOCOL принимает значение false вместо положенного http.
Фракталы
Давно хотел сам построить какой нибудь красивый фрактал. Ясное дело мне это совсем не было нужно, пока не встала задача раздать студентам расчетно-графическую работу по программированию.
Студент нынче какойто хилый пошел, пришлось самому разбираться, вот она наша прелессссть.
Исходники можно скачать здесь
Созерцательное программирование
Я давно подозревал, что многие вещи уже давно придуманы, даже те что могут показаться полным бредом.
Вот например новый термин - "Созерцательное программирование". Русский поиск в гугле не дает много результатов на это словосочетание, - оно является моей версией перевода термина Contemplative Programming.
Просто в время работы иногда бывает такое состояние, когда видишь в голове вещь и реализуешь ее в программе, постепенно приближая к идеалу. Именно в такие моменты становится совершенно не важно где ты как ты, совершенно ничего не отвлекает, есть только вещь которую ты созерцаешь, творишь, достаешь из небытия.
Именно в такие моменты можно сделать что-то стоящее, а не когда натужно колотишь по клавишам ожидая когда количество перейдет в качество, хотя так тоже частенько случается.
PHP4: это не баг, это системная функция
Сегодня потратил несколько часов не поиск банальнейшего бага. Дело в том что в PHP ссылку нельзя сделать статической, так как я перешел уже на PHP5 то об этом я не всегда помню.
Не работает:
Работает:
В пятом PHP будет работать только первый вариант, второй правда хотя и со скрипом, то тоже будет (будет ругаться чтобы к функции поставили модификатор static и не использовали никаких амперсандов у оператора new)
Перебираем XML ноды
Обычно я использлую цикл while когда нужно сделать итерацию по дочерним элементам XML нода, а тут решил что цикл for для этих целей подходит гораздо лучше.
было:
стало:
Статические пременные класса vs. суперглобальных переменных
Идея глобальных переменных просто замечательная, однако многие не рекомендуют их использовать, т.к. это нарушает архитектуру программы и может привести к непредвиденным результатам, так это или не так, однако, наряду с недостатками есть у них и достоинства - к ним всегда можно обратиться из любого места в программе, особенно не заморачиваясь.
В PHP есть также т.н. суперглобальные переменные - $_POST, $_GET.
Уж не знаю почему разработчики их допустили, в ведь у суперголобальных переменных недостатки глобальных переменных становятся супернедостатками. Ну да не об этом речь.
Захотелось мне сделать свои суперглобальные переменные куда я хочу поместить значения из $_POST и $_GET, но без magic_quotes.
Зачем это нужно? Да просто мне не очень хотелось портить оригинальные значения переменных из соображений универсальности кода.
Как быть? Суперглобальные переменные нельзя создать - они накрепко зашиты в PHP и новые суперглобальные переменные сделать невозможно, но я нашел один выход из данной ситуации.
PHP5 позволяет создавать статические переменные класса, т.к. область видимости класса - весь код, то и полученная переменная ведет себя как суперглобальная. Красота.
При этом полученные переменные Site::$POST и Site::$GET ведут себя также как и аналогичные классические аналоги $_POST и $_GET.
Дзен-программизм
Недавно на баше наткнулся на симпатичный пост
Возможно, такой код на самом деле имеет право на существование, ведь в отличие от матeматики в программировании от перемены мест слагаемых сумма может измениться, особенно, если слагаемые имеют разный тип.
Вот если написать простейший код на JavaScriptРезультат выполнения программы будет "1" как и следовало ожидать.
Однако стоит сделать переменную intQuanty строковой, то результат будет совсем другой
Что и требовалось доказать! Конечно ноль лучше бы поставить в кавычки, однако для того чтобы запутать всех в конец можно и так оставить.
Думаю, если сделать аналогичные эксперименты на других языках результаты получатся даже интереснее.
Однажды показал такой фокус одинеснице - так она на меня смотрела как на прокаженного.
Семь бед — один embed
Конечно за безбаговость не ручаюсь но потестировал на IE6, IE7, в Опере, FF и Sаfari.
Самое интересное что код с тегом Object нигде не понадобился. Я то думал что он нужен для эксплорера, оказывается что шестой эксплорер тег Object кушать наотрез отказался, а вот EMBED скушал за милую душу.
Вот что получтилось:
flasher.js
this.attr = {'wmode':'transparent','type':'application/x-shockwave-flash'};
var i;
for(i=0;i<arguments.length;i=i+2){
this.attr[arguments[i]] = arguments[i+1];
}
}
flasher.prototype.write = function(element){
var el = document.getElementById(element);
var args = '';
for(key in this.attr){
args = args + ' ' + key+'='+this.attr[key];
}
el.innerHTML = '<embed '+args+'></embed>';
}
как это использовать:
<script type="text/javascript">
// <![CDATA[
var fo = new flasher("src", "http://www.youtube.com/v/g3Y_mQA0E0A", "width","425", "height","350" );
fo.write("darren_dicke");
// ]]>
</script>