void Rlyeh
(int mene[], int wgah, int nagl) {
int Ia, fhtagn;
if (wgah>=nagl) return;
swap (mene,wgah,(wgah+nagl)/2);
fhtagn = wgah;
for (Ia=wgah+1; Ia<=nagl; Ia++)
if (mene[Ia]<mene[wgah])
swap (mene,++fhtagn,Ia);
swap (mene,wgah,fhtagn);
Rlyeh (mene,wgah,fhtagn-1);
Rlyeh (mene,fhtagn+1,nagl);
} // PH'NGLUI MGLW'NAFH CTHULHU!
День: 20.07.2010
Make me unsee it
Приходится иногда сталкиваться в программировании с такими «костылями», что даже не знаешь, стоять или падать.
Вот, например, извращенная задачка в веб-программировании. Есть два сайта — один на ASP.NET под IIS, другой на PHP под Apache. Первый крутится по адресу, к примеру, http://webserver:80/, другой — http://webserver:8080/. Задача — на первом сайте есть ссылка, открывающая окошко со страничкой второго сайта, оттуда надо передать JavaScript-ом какие-то данные в родительское окно. Думаю, все видели вот такие «палитры», так что представить в состоянии.
Разница в том, что «палитра» расположена немного по другому адресу и может подпадать под блокировку «кроссдоменной» передачи данных. Причем самое интересное — это то, что каждый из трех популярных браузеров понимает «кроссдоменность» по-разному.
Internet Explorer всех версий вообще не делает различий между domain.com:80 и domain.com:8080. Соответственно, все работает правильно.
Firefox считает такие «домены» разными и по умолчанию блокирует передачу. Правда, спасает вот такое заклинание, произнесенное перед открытием «палитры» в родительском окне и в дочернем — до передачи данных:
document.domain = document.domain;
Смысл заклинания совершенно необъясним, поэтому «это нельзя понять, это надо запомнить».
Opera на такие дешевые трюки не ведется и блокирует передачу данных между этими окнами в любом случае. Самый безопасный браузер, хуле.
Вопрос фанатам «альтернативных браузеров»: и чего же вы добились, обвиняя Microsoft и Internet Explorer во всех смертных грехах, начиная от монополизма? Похоже, только того, что в каждом из браузеров надо применять свои «костыли и подпорки», а любая программа на JavaScript начинается с разбора трех случаев.
PS К сожалению, ни прикрутить ASP.NET к Apache, ни PHP к IIS нереально — апачевский модуль для ASP.NET совершенно не хочет работать, а PHP-шная часть сайта существенно использует апачевские возможности по работе с .htaccess.