четверг, 12 июня 2008 г.

Как приятно понапрягать саппорт

вот только толку мало. Только что загончился митинг. Заказчикам удалось достучаться до сапорта, результатом стало получения мыла от кадра с адресом в @СофтверныйГигант.com и получасовой митинг на тему глюков в тулзе. Вообщем купили они когда-то одну тулзу со всеми ее глюками, особенно хорошо глюки вылазят когда разрабатывеш для нее плагины. Там всередине намешан и дотнет 1.1 и какие-то остатки от борланда (креши обычно из vcl7.bpl лезут), а самое худшое - 3rd party компонентик под названием ChartFX Client-Server 6.2. Он графики рисует.
До этого мы получали уже отлупы на тему "cannot reproduce" вот только когда эти креши показываеш через Live Meeting отмазаться сложнее, тока "ох и ах" в ответ, и просьба наваять не такой сложный пример, позволяющий воспроизвести багу. а бага оригинальная, она вылазит только при определеной последовательности действий, достаточно редкой. А если сделать другую, то до следующего старта уже не вылезит. Вообдем сижу и ваяю семпл на котором оно будет стопроцентно вылазить.

ЗЫ: дорогие разработчики ChartFX (может прочитают?) пожалуста, исправте наконецто глюки в сериализации/десириализацию, а то после загрузки сохраненого перед этим из другого чарта хмля, все падает, приходиться ручками "плохие" ноды стирать.

среда, 11 июня 2008 г.

5 программ, с которыми я работаю ежедневно

via Yuriy Volkov, поучаствую в опросе,но передавать дальше не буду :)
  1. Visual Studio 2008 + Visual Assist
  2. Notepad++
  3. Far
  4. Firefox
  5. ProClarity (пишу екстеншины для этого глюкодрома)

понедельник, 2 июня 2008 г.

Memory Free Tool от индуса

В рассылке QT подсмотрел класный, просто ентерпрайз и каттинг едж, код для "освобождения" памяти в системе.
За подробностями обращаться к индусу Mahesh Mali в http://lists.trolltech.com/

main(int argc, char **argv) {
unsigned long int i,k=0, max;
char *p;

if (argc>1)
max=atol(argv[1]);
else
max=0xffffffff;

printf("Freeing %lu kB ram\n",max);
while (((p=(char *)malloc(1048576))!=NULL) && (k+1024<=max)) {
for (i=0;i<256;p[4096*i++]=0);
k+=1024;
fprintf(stderr,"\r%d kB allocated",k);
}
while (((p=(char *)malloc(65536))!=NULL) && (k+64<=max)) {
for (i=0;i<16;p[4096*i++]=0);
k+=64;
fprintf(stderr,"\r%d kB allocated",k);
}
while (((p=(char *)malloc(1024))!=NULL) && (k+1<=max)) {
for (i=0;i<16;p[64*i++]=0);
k+=1;
fprintf(stderr,"\r%d kB allocated",k);
}
fprintf(stderr,"\nMemory freed.\n");
exit(0);
}
Основная польза от линка - возможность подсмотреть выражения употребляемые в общении с индусами.

пятница, 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, остаеться актуальным. А ведь так пишут - узнали что сейчас самое "крутое" и пробуют бездумно в любую дырку это засунуть