пятница, 23 мая 2008 г.

HOWTO: Install and Uninstall ClickOnce Application

Допустим с компа нужно работать с програмой, использующей технологию ClickOnce для установки. В моем случае это Dashboard Designer входящий в Microsoft PerformancePoint Server (еще одна бяка от майкрософта для BI) Запустить прогу просто - в IE открываем линк:

http://myserver/DesignerInstall/PSCBuilder.application

в данном случае: http://myserver:40000/DesignerInstall/PSCBuilder.application

И все запуститься. После завершения работы остается куча мусора в хоум фолдре юзера, который это безобразие запустил. От него хочеться избавиться. Тут поможет команда
rundll32 dfshim.dll,CleanOnlineAppCache

она удалит ВСЕ установленые ClickOnce проги.
похожей командой можно запустить программу без IE
rundll32 dfshim.dll,ShOpenVerbApplication http://myserver/name.application

например:
rundll32 dfshim.dll,ShOpenVerbApplication http://myserver:40000/DesignerInstall/PSCBuilder.application

Short version in English:
HowTo run ClickOnce App from console:
rundll32 dfshim.dll,ShOpenVerbApplication http://myserver/name.application

HowTo remove all installed ClickOnce Apps:
rundll32 dfshim.dll,ShOpenVerbApplication http://myserver:40000/DesignerInstall/PSCBuilder.application

понедельник, 19 мая 2008 г.

Google app engine: акаунты снова раздаються.

Первая попытка создать акаунт не была полностью успешной, их было слишком мало и запрос попал в pending. Но только что(19 Мая, 10 вечера) пришло мыло про его активацию:

Hello,


Thanks for signing up to try Google App Engine! Your account has been activated, so you can begin building applications!


To start creating applications with Google App Engine, simply follow this link

http://appengine.google.com/


Thanks!

The Google App Engine Team

спасибо гугл тиму :) на днях(как только с релизом на работе станет легче) обязательно попробую





четверг, 8 мая 2008 г.

как не стоит использовать STL + Boost

вот что получается когда слишком увлекаються "современным" с++:
(заметил на КЫВТ http://rsdn.ru/forum/message/2943714.1.aspx )
Добрый день!
Возникла проблема с производительностью boost::bind в следующем коде:

map<int,set<int>> back;
vector<int> docnums;

int xx = 0;
for (vector<int>::iterator ii = docnums.begin(); ii != docnums.end(); ii++) // первый вариант
xx += back[*ii].size();
// второй вариант
int yy = accumulate(
docnums.begin(),
docnums.end(),
0,
bind(
plus<int>(),
_1,
bind(
&set<int>::size,
bind(
&map<int,set<int>>::operator [],
back,_2)
)
)
);


в массиве 1 элемент, собирается всё как релизная версия, компилятор MSVC. 1-й вариант выполняется примерно 20 микросекунд, что вполне приемлемо. Но второй вариант выполняется 5000000 (!!!) микросекунд (т.е. около 5 секунд) и при этом выдаёт тоже правильный результат. Почему так невообразимо долго?
Павел


мало того что крутой второй вариант на пару парядков медленей, так он еще и не читабельный :) дальше второго вложеного bind желание разбирать его пропало(в оригинале весь второй вариант записан в одну строчку). Стиль написания напомнил анекдот(а может и реальную историю) про програмиста, который после выхода книжки банды четырех сумел заюзать все патерныны из нее в одной програмке, оно даже запустилось :)))
Вопрост, а почему бы не пользоваться первый вариантом, без притягивания за stl algorithms + bind, остаеться актуальным. А ведь так пишут - узнали что сейчас самое "крутое" и пробуют бездумно в любую дырку это засунуть

Десять худших багов в истории компьютеростроения

Проще показать чем объяснить, что такое баг. Берем Excel 2007. В ячейку A1 вводим число 77.1, в B1 – 850. А в С1 пишем "=A1*B1". Калькулятор утверждает: должно получиться 65 535. А Excel 2007 показывает 100 000. Кто прав?
Бывают и более веселые баги. В 2003 году BMW с известным таиландским политиком остановился, двери закрылись, вся электроника выключилась, окна не открывались – ошибка в программе «убила» бортовой компьютер. Несчастного политика охрана достала через ветровое стекло машины.
Случай с политиком курьезный, но проблемы с софтом просто преследуют автомобилистов:

  • 2005: Toyota отозвала 75,000 Prius Hybrids. Сбой программы приводил к внезапной остановке бензинового двигателя.
  • 2004: Pontiac Grand Prix. Программное обеспечение не умело работать с високосными годами. 2004 был именно таким.
  • 2002: BMW отозвала 745i из-за проблем с управляющей программой топливного насоса. Он выключался когда в баке меньше трети топлива.
  • 2001: 52,000 внедорожников Jeep вернулись на завод. Баг отключал приборы.

Особенно в этом списке стоит выделить BMW 745i. Чудом интеграции умной электроники и механики управляет водитель и 70 микропроцессоров. Волшебная ручка – iDrive, настраивает больше 200 параметров - от наклона сидений до музыкальной системы. А в середине живет Windows CE. Не удивляйтесь, когда машина начинает сама тормозить, забыв включить сигнал на задних фонарях.

Техника с 1946 года и первого бага найденного(в прямом смысле этого слова – жучок залез в реле и замкнул его) в Гарварде в компьютере Mark II сделала гигантский прыжок вперед. Инциденты с автомобилями приносят убытки только компаниям, неудобство людям. Но на звание самых худших багов уже претендовать не могут. Бывают единичные инциденты, убытки от который существенно выше. В 1996 ракета Arian 5, стоимостью в 500 миллионов долларов(при общей стоимости программы в 10 миллиардов) взорвалась после старта. Причина - управляющая программа неправильно переводила 64 разрядные числа с плавающей точкой в целые 16 разрядные. Ракета заняла пятое место в рейтинге десяти самых худших багов :

  1. 1946. Жук залез в Mark II. Первый описанный баг. Багрепорт с приколотым к нему виновником торжества до сих пор храниться в музее. Он был первым и его место под номером один.
  2. 1979. Баг в программном обеспечении для телефонии от AT&T сделал невозможными междугородние телефонные переговоры в Греции.
  3. Аэропорт Денвера не работал больше года из-за глюков в автоматической системе управления багажом
  4. Зонд Mariner 1, первенец американской программы изучения Венеры не улетел дальше земной атмосферы. 22 июля 1962 года на 263 секунде полета сошел с траектории и был уничтожен. Сбой в работе навигационного компьютера вызван ошибкой программировании одной из формул, не обратили внимание на значок дефиса.
  5. 1996 год. Аналогичная ситуация при первом запуске Arian 5. Ошибка в переводе чисел с плавающей точкой в целые привела к взрыву.
  6. Июль 1981. На заводе в Японии умный робот пробовал отремонтировать другого робота и убил рабочего.
  7. 1985-1987 -- Therac-25. Аппарат радиационной терапии. Улучшенный вариант уже работающей модели. Считалось, что программное управление защитными заслонками надежнее электромеханического. Но на протяжении двух лет было минимум 6 случаев когда из-за ошибок в программе пациенты получали дозу радиации в сотню раз превосходившую расчетную, трое пациентов погибло.
  8. 2 Июня 1994 разбился британский вертолет Chinook ZD576, погибло 29 человек. Объяснили катастрофу ошибкой пилота. в 2002 было доказано, что автоматическая систему управления двигателями внезапно поменяла режим их работы, что и привело к потере управления.
  9. Июль 1991. Катастрофа рейса KAL 901 корейских авиалиний. Погибло 225 пасажиров. Катастрофа вызвана ошибкой в программном обеспечении в системы измерения высоты.
  10. 1982 год. Самый большой не ядерный взрыв на планете. Взорвался газ на трассибирском газопроводе Мощностью взрыва оценили в три килотонны. По официальной версии вызван ошибками в конструкции газопровода. По не официальной советский союз достал систему управления не совсем лицензионным методом у канадской фирмы. В ней оказался баг (логическая бомба) внедренная ЦРУ. Одноразовое его срабатывание привело к сбою в работе насосов, повышению давления выше предельно допустимых величин. Доказательств нет, но правительство США во главе с Рейганом активно пыталось предотвратить экспорт советского газа в западную Европу.