Дзен-программизм
Недавно на баше наткнулся на симпатичный пост
Возможно, такой код на самом деле имеет право на существование, ведь в отличие от матeматики в программировании от перемены мест слагаемых сумма может измениться, особенно, если слагаемые имеют разный тип.
Вот если написать простейший код на JavaScript
<html>
<head>
<title>Дзен-программизм</title>
</head>
<script type="text/javascript">
intQuanty = 1;
intQuanty = intQuanty + 0;
alert(intQuanty);
</script>
</html>
Результат выполнения программы будет "1" как и следовало ожидать.
Однако стоит сделать переменную intQuanty строковой, то результат будет совсем другой
<html>
<head>
<title>Дзен-программизм</title>
</head>
<script type="text/javascript">
intQuanty = "1";
intQuanty = intQuanty + 0;
alert(intQuanty);
</script>
</html>
Что и требовалось доказать! Конечно ноль лучше бы поставить в кавычки, однако для того чтобы запутать всех в конец можно и так оставить.
Думаю, если сделать аналогичные эксперименты на других языках результаты получатся даже интереснее.
Однажды показал такой фокус одинеснице - так она на меня смотрела как на прокаженного.
Семь бед — один embed
Сегодня встала задача сделать страничку с ютубовскими мувиками валидной в XHTML Transitional. Сама по себе задачка решена давно, можно использовать для этих целей SWFObject, но он зараза никак wmode не позволяет менять, или я просто не умею это делать. Кроме того синтаксис его использования какой-то громоздкий и некрасивый. Решил своими силами сделать аналог посимпатичнее.
Конечно за безбаговость не ручаюсь но потестировал на IE6, IE7, в Опере, FF и Sаfari.
Самое интересное что код с тегом Object нигде не понадобился. Я то думал что он нужен для эксплорера, оказывается что шестой эксплорер тег Object кушать наотрез отказался, а вот EMBED скушал за милую душу.
Вот что получтилось:
flasher.js
как это использовать:
Конечно за безбаговость не ручаюсь но потестировал на IE6, IE7, в Опере, FF и Sаfari.
Самое интересное что код с тегом Object нигде не понадобился. Я то думал что он нужен для эксплорера, оказывается что шестой эксплорер тег Object кушать наотрез отказался, а вот EMBED скушал за милую душу.
Вот что получтилось:
flasher.js
function flasher(){
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>';
}
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>';
}
как это использовать:
<div style="width:425px;margin:10px auto;" id="darren_dicke"><!--Darren Dicke--></div>
<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>
к недостаткам можно отнести отсутствие автообновления плагина, займусь этим как нибудь на досуге потом.<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>