2008-11-20

Нестандартное поведение стандартного оператора ||

Иногда при кросс браузерном программировании бывает нужно выбрать из двух или более переменных которые зависят от типа браузера. Например типичный пример - отслеживание событий мыши - в IE параметры события берутся из глобального объекта event а в Firefox и многих других браузерах event передается как формальный параметр в обработчик события. Поэтому необходимо выбирать тот или иной способ получения этого объекта в зависимости от того какой браузер.

Самое первое, что приходит на ум это использовать тернарный оператор "<condition>?<if true>:<if false>"

a.onclick = function(e){
  var ev = e?e:event;
  //далее работаем с ev
}

Сегодня мне предложили еще более короткую запись:

a.onclick = function(e){
  var ev = e||event;
  //далее как обычно
}

Все отлично, все логично, но почему это работает? В MSDN четко сказано что || оператор логический и возвращает он true или false в зависимости от входных параметров. Если параметры на входе не логические то приводятся к логическим, т.е. не должно так работать а работает.

Скорее всего операция || возвращает первый не ложный аргумент, причем возвращает по ссылке в чем нетрудно убедиться:

    var v1; //undefined
    var v2 = {};
    var result = v1 || v2;    
    alert(result===v2); //true

Интересно, такое поведение где нибудь документировано или это хак?

UPD: Оказыватся у Мозиллы все подробно на этот счет расписано:

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Logical_Operators

 

Коментариев: 7

 
  2008-11-15

Lusy in the sky with diamonds

Новый Сайентист пишет что что ребята из Вашингтона научились делать искуственные алмазы практически неограниченных размеров которые по своим свойствам превосходят природные.

Как пишут процесс изготовления искусственных алмазов известен давно, но они получаются не кристально-прозрачные а слегка мутно-коричневые, и чтобы сделать их прозрачными нужно слегка поджарить при привесьма высокой температуре и весьма высоком давлении, поэтому большие алмазы сделать не получалось. Сейчас же придумали их разогревать до двух тысяч градусов Цельсия в микроволновке заполненной водородом, как говорится в статье полученный таким образом алмаз был послан знакомому ювелиру, который сказал что тот по своим свойствам не отличим от природного.

Так что скоро на прилавках с дешевой бижутерией появится полно дешевых брюликов.

 

Оставить комментарий

 
  2008-11-14

Буква Ё

Интересно, зачем на клавиатуре буква ё? Кто-нибудь вообще эту букву использует при наборе таких довольно популярных слов как "её", "ещё", "всё"?

За собой заметил, что я этой буквы не использую совсем. Срочно вернуть eЁ на место! Спасем букву Ё!

 

Коментариев: 5

 
  2008-11-12

Террористы поддержки

Есть у меня одна хорошая знакомая у которой есть сайт , случилось этой знакомой нанять для редизайна и поддержки своего сайта вебстудию DG. Дала она им свой логин/пароль от панели управления хостинга на MasterHost, эти ребята первым делом сменили пароль на свой и приступили к работе. Ребята работают, делают сайт, поддерживают, вобщем все отлично.

Но вот потребовался этой знакомой доступ к панели управления своего сайта. Просит она ребят из студии предоставить ей пароль с СВОЕМУ хостингу СВОЕГО сайта, который они сменили, а они и говорят, не дадим мы тебе пароль, не хотим чтобы кто то ещё кроме нас по твоему сайту лазил, пароль дадим только в если ты хочешь разорвать с нами всякие отношения, тогда пожалуйста скажем пароль.

Т.е. хостинг принадлежит заказчику, сайт принадлежит заказчику а какая то сраная фирма, разработавшая сайт не дает к нему доступ.

Отсюда вывод - не нужно работать cо студией DG если не хотите проблем со своим сайтом.

Не удивлюсь что исходники к флешкам они тоже не предоставят. А без исходников затраты на редизайн сайта будут примерно такие же как если бы он разрабатывался с нуля.

 

Коментариев: 4

 
  2008-11-11

Базовый класс для наследования в JavaScript

Под впечатлением класса разработанного Дином Эдвардсом создал свой собственный класс, который позволяет значительно упростить структуру программ на JavaScript где необходимо неследование.

Основные особенности следующие:
- маленький и простой - неминифицированный размер: 622 байта.
- конструктор описывается явно как функция с именем 'constructor'
- наследование статических и обычных членов класса
- при определениии объекта не используется MyClass.prototype;
- не используются глобальные функции для создания цепочек прототипов;
- не изменяется Object.prototype.

 Вот пример использования:

var Animal = BaseClass.extend({
  constructor:function(){
    alert("Anumal is created!");
  },
  say:function(){
    alert("hm...");
  }

});

ver Cow = Animal.extend({
  constructor:function(){
    alert("Cow is created!");
  },
  say:function(){
    alert("mooo");
  }  

});
var cow1 = new Cow();
cow1.say();

Фактически, от версии Дина отличается только отсутствием статических методов на этапе наследования - их можно и явно прикрутить, что улучшит читаемость кода,  также отсутствует метод super, на мой взгляд у Дина эта штука будет понижать производительность, перегруженных функций независимо используется super или нет, поэтому я решил от неё отказаться, к тому же её можно эмулировать просто отдельной функцией.

Upd. Позже я пересмотрел мысль насчет super и включил её в реализацию метода. В ztools.org можно найти последнюю версию функции.

 

Коментариев: 1

 
  2008-11-10

Опрос вебсервера по протоколу HTTP

Каждый раз когда хочется посмотреть что реально возвращает сервер приходится открывать telnet, ручками набирать комманды, что, согласитесь, довольно трудоемко и требует предельной аккуратности, особенно если запросы довольно большие, если же нужно отлаживать POST запросы то задача становиться вообще трудноразрешимой.

Для того чтобы упростить себе жизнь создал такой вот небольшой инструмент для опроса вебсервера. Разумеется с исходником.

 

Коментариев: 1

 
  2008-11-07

OpenOffice и клавиши навигации

Я тут уже писал о проблемах дистрибутива третей версии OpenOffice, оказывается, на сайте Инфра Ресурс даже приостановили его скачивание по этой причине, правда через несколько часов восстановили, с их слов при сборке дистрибутива произошло отключение энергии и из-за этого дистрибутив оказался, мягко говоря, неработоспособным.

Скачал исправленную русскую версию с сайта OpenOffice.org - панельки управления появились, но вот беда, навигационные клавиши перестали работать - стрелка вверх, стрелка вниз, вправо, влево, Backspace, Home, PageDown, PageUp все эти клавиши перестали откликаться. Скачивание дистрибутива с сайта ИнфраРесурс тоже помогло мало.

Похоже, что помимо панелек исчезли ещё и назначения клавиш. В меню Настройки все назначения клавиш оказались пустыми! Попробовал расставить сочетания клавиш вручную, но это оказалось нелегким делом, так как русский перевод названий операций оказался довольно странным - Down - До верхней строки, Up - До нижней строки, Left - Символ слева, Right - перейти вправо. То есть, по названию операции вообще трудно определить что она делает.

К счастью, решение нашлось очень быстро, дело в том, что OpenOffice позволяет не только назначить сочетания клавиш но и записать настройки клавиш в файл и соответственно считать их из файла. На одном из компьютеров нашлась предыдущая инсталляция OpenOffice, с коей и удалось переписать назначения клавиш. После этой процедуры всё встало на свои места, все навигационные клавиши заработали как им и полагается.

Читать далее...

 

Оставить комментарий

 
  2008-11-03

WYSIWYG для сайта

Добавил WYSIWYG на сайт, использовал свой любимый FCKEditor, пока насторил не все функции, но для начала и так пойдет...

 

Коментариев: 5

 
  2008-11-03

Билайн-спаммеры?

Второй день подряд удаляю из почтовых ящиков сообщения типа "Получи iPhone 3G бесплатно" вроде как от Билайна. "Вроде" потому что я пока не очень верю что солидная сотовая компания может рассылать подобные сообщения.

Все письма сделаны в стиле официального сайта Билайна, правда в письме нет ссылки чтобы описаться и нет вообще ни одной ссылки которая бы вела на сайт Билайна где можно было бы получить информацию о акции или злобно наругаться на спамеров.

Обратный адрес стоит: ltdbvujwhd@boba.pds.cdx.mot.com так что это точно не Билайн. Кодовой фразой является Отправь SMS с текстом "я не лох" "iPhone" на короткий номер 7733

Думаю многие попадутся на эту удочку, т.к. для обычного пользователя придраться почти не к чему.

 

Оставить комментарий

 
  2008-11-03

Одноклассники - неумейки?

Прочитал замечательный ответ Экслеру от Одноклассников когда тот раскритиковал их за жадность. Больше всего мне понравилось следующее высказывание:

Немного информации. В последние дни в системе в определенные моменты были попытки регистраций десятков ботов в секунду. Сотни тысяч ботов, по повелению своих создателей, в пиковые часы могли начать одновременно голосовать за миллионы фотографий и ходить по миллионам анкет, для привлечения к себе внимания. Заходит человек посмотреть, кто это ему оценочку поставил, а там – рекламный месседж. И все эти действия создают такую нагрузку на сервера, что Экслер с Плющевым вместе взятые не смогли бы себе такое представить.

К величайшему сожалению, борьба с автоматическими регистрациями не только в России, но и во всем мире находится на том уровне, когда любая защита ломается не далее, чем через пару дней после ее установки. Мы испробовали все.

Странно, почему gmail не испытывает подобных трудностей? У него аудитория гораздо шире... Специально зашел на регистрацию в одноклассниках, капча на месте, думаю вроде не должны их ломать, однако дай думаю посмотрю как капча сделана, смотрю код.... ха, оказалось капча то не на одноклассники ведет... а на http://recaptcha.net/.

Иными словами ВСЕ что они перепробывали это воспользовались бесплатным сервисом теста Тьюринга!

Не удивительно что их ломают все кто не попадя... Все это так дорого, требует так много денег чтобы такую защиту поставить, нужно очень дорогих специалистов привлекать... У меня студенты на первом курсе за час справляются...

 

Коментариев: 3