вторник, 31 января 2012 г.

"Фобосом" навеянное

ВЕРОЯТНАЯ ПРИЧИНА ПАДЕНИЯ аппарата "фобос-грунт" - ошибка в программировании. Версия с "происками Запада" , похоже, не состоятельна.
Многие, вцепившись , в версию "ошибка разработчиков" уже начали костерить деградацию образования, пресловутое снижение качества знаний выпускников, тут же пробежались по ЕГЭ, отдавая дань моде.. Да, деградация.. Да, снижение... Да, ЕГЭ, будь он неладен...
Но вот вспомнилась мне почему-то одна лекция по "Численным методам" в институте.. читал ее профессор Михайлов - человек с богатейшим опытом решения задач прикладной математики. Он поведал нам о подобном случае, который случился еще в СССР , когда был утерян очень дорогой спутник из-за ошибки программистов... Насколько я помню, тогда речь шла всего лишь о проблеме округления и накопления погрешности. В общем, из-за ошибки в вычислениях спутник улетел совсем не туда, куда планировалось и миллионы народных рублей сейчас возможно еще летают где-то в солнечной системе ).. Тогда не было ЕГЭ, не было "деградации" и "снижения" - все было, судя по всему, наоборот, но подобные ошибки случались и времена, которыми принято гордиться...

среда, 4 января 2012 г.

Internet Explorer на страже стандартов =)

Броузер Internet Explorer хорошо известен тем, что старается уж очень четко следовать стандартам, разработанным ответственными комитетами типа W3C
Там, где остальные броузеры закрывают глаза на некоторые опечатки, небольшие огрехи вебмастеров, IE каленым железом выжигает всякую "крамолу" )) Вот несколько граблей, на которые пришлось наступить в последнее время:
1. <!DOCTYPE
Сегодня довольно долго бился над выяснением того, почему на одном из сайтов "слетает" верстка в IE , которая идеально выглядит в Chrome, Opera, Firefox.
Перелопатил все стили, исправил пару незначительных кроссброузерных различий, но в целом IE продолжал показывать мне совсем не то ,что остальные броузеры.
Причина оказалась банальна - в первой строке html-ответа не было директивы <!DOCTYPE ...>, после его добавления в базовый html-шаблон все сразу стало выглядеть так, как требовалось (с небольшими допустимыми для IE отличиями типа отсутствия теней у некоторых элементов).
Вот что пишет w3c об этой преамбуле: W3C-HTML5#DOCTYPE

2. js-движок и синтаксис записи словарей в js
Довольно много приходилось писать на perl и в последнее время на python. При записи структур типа:
my $dict = {
      'key1': 1,
      'key2': 2,
   }
давно выработалась привычка всегда ставить запятую после очередной записи в хеше, даже если она последняя - это позволяет избегать синтаксических ошибок при возможном будущем добавлении новых записей в этот словарь. Эта привычка меня недавно подвела при написании js-кода, содержащего в большом количестве структуры, подобные описанной выше.
Отладка кода проводилась в Chrome и Mozilla. Когда начал проверять работу в IE ошалел от кучи js-ошибок (при возникновении ошибок компилляции js - IE просто перестает рендерить страницу). Пришлось перелопатить все js исходники и повычищать последние запятые, которые оказались несоответствующими синтаксису описания словарей, к которому я так привык.
Теперь взял за правил ставить запятые ПЕРЕД элементами словаря ))

3. подчеркивания в именах хостов
На эти грабли наступал уже давно и , может быть, даже описывал на страницах этого блога. Но недавно, когда коллега начал в ярости постукивать по клавиатуре, я поинтересовался в чем у него проблема , понял, что он наступил на то же самое (спросил бы раньше))))
Пример: есть тестовый стенд одного веб-проекта. Тестируется в основном под Chrome, Mozilla. Начали проверять под IE. Полезли глюки в виде странной работы с куками. После ряда возгласов "мистика" стало ясным, что виноваты символы подчеркивания в имени тестового хоста, которые оказалиcь "не по стандарту".

4. зацикливание при редиректе из-за некорректного http-euiv
Вот такой вот код:
<meta http-equiv="Refresh" content="1; /" />
отлично понимается Chrome и Firefox - в результате выполняется редирект на главную страницу сайта.
В IE (например в 8.0) делается редирект на ту же самую страницу. В результате - ежесекундные бесконечные редиректы.
Чтобы сделать понятным для всех броузеров ,опять же обратимся к стандарту W3C-HTML5#PRAGMAS



Это далеко не полный список того, чему IE предельно жестко учит)) Буду пополнять эту коллекцию