понедельник, 30 марта 2009 г.
установка IE8 ломает Visual C++
после установки последнего IE8 в Visual C++ 2005/2008 не работают(выдают ошибки в скрипте) несколько визардов:
- Add Function
- Add Variable
- Smart Device – New Project Creation
- Smart Device – Add Class
причины в изменение поведения IInternetSecurityManager интерфейса, описание и воркараунд в Visual C++ Team Blog
среда, 25 марта 2009 г.
В Украине создается реестр легально ввезеных телефонов
1. до 30 сентября мобильные операторы обязаны предоставить УГЦР информацию об IMEI-номерах телефонов, обслуживаемых их сетью,– они будут включены в реестр и считаться легальными.
2. В дальнейшем операторов мобильной связи обяжут проверять IMEI-коды телефонов. Если окажется, что аппарат отсутствует в реестре, на экране мобильного телефона при его включении будет высвечиваться предупреждение и предложение обратиться в УГЦР, где телефон смогут внести в реестр (только предупреждение? сеть будет обслуживать телефон? это пока не ясно, но скорей всего со временем запретят обслуживать такие телефоны)
ps: вот мы и доприкалывались с беларусов, где тоже создается такоей реестр.
вторник, 24 марта 2009 г.
Interview Question: implement itoa
относительно atoi на интервью, меня поправили, имелось в виду itoa, но назвали ее atoi.
Вопрос про itoa популярен, но реализация через деление не интересна, слишком скучно и просто. Поэтому реализовал без использования умножения и деления, только сложение и работа со строками.
ф-ция получилась короткой - табличка с уже подсчитаными степенями двойки и куча сложений. Почти половину в этом коде занимает реализация добавления первого символа в строку без использованя дополнительного буфера. А весь magic происходит в SymbolicAdd.
char* power_of_two[] =
{
"1","2","4","8", "16","32","64","128",
"256","512","1024","2048","4096","8192","16384","32768",
//custom itoa implementation limited to radix 10
//idea is: each digit in position N in binary value means
//"add Digit(1 or 0) * 2^N to common sum"
//lets do it, but use symbol strings instead of binary values
char* CustomITOA(int value, char *dst)
{
bool below_zero = value < 0;
if(below_zero)
value *= -1;
*dst = '0';
*(dst+1) = 0;
int nbins = sizeof(int) * 8 - 1;
for(int i=0; i < nbins; i++)
{
if(value & 0x1)
{
SymbolicAdd(dst, dst, power_of_two[i]);
}
value = value >> 1;
}
if(below_zero)
{
//add leading "-" to result string
char cbuffer_first = '-';
char cbuffer_second = cbuffer_first;
char* str_cursor = dst;
do
{
cbuffer_second = *str_cursor;
*str_cursor = cbuffer_first;
if(0 == cbuffer_first)
break;
cbuffer_first = cbuffer_second;
++str_cursor;
}
while(true);
}
return dst;
}
Получилось просто, но SymbolicAdd намного сложнее(детали в сырцах). Что она делает: берет две строки вида "125", "236" и возвращает строку "361", а всередини реализован своеобразный алгоритм сложения в столбик.
понедельник, 23 марта 2009 г.
реализовать atoi на интервью
Вот мой вариант сделаный на коленках (проверка на переполнение опущена) в основном из спортивного интереса(своеобразная разминка от багфиксинга). Алгоритм - первое что пришло в голову, возможно есть и более эфективные:
#define SPACE_SYM ' '
#define MINUS_SYM '-'
int atoi_custom(char* src)
{
int result = 0; //really returns int value
char* current_symbol = src;
int digit_indx = 1;
if (!src)
return 0;
//let`s treat first word in string as a decimal number
bool first_symb_found = false;
// second part of the IF expression can be optimized,
//but it is more human readable as is
while(*current_symbol != 0 &&
(SPACE_SYM != *current_symbol || !first_symb_found))
{
//ignore leading spaces
if(!first_symb_found && *current_symbol != SPACE_SYM)
first_symb_found = true;
current_symbol++;
}
//string not found, exit
if(current_symbol == src)
return 0;
for(current_symbol--;
current_symbol >= src && SPACE_SYM != *current_symbol;
digit_indx*=10, current_symbol--)
{
//process negative integers, leading '-' is symbol of it.
if(MINUS_SYM == *current_symbol)
{
if(src == current_symbol ||
SPACE_SYM == *(current_symbol - 1))
return (int)(-1 * result);
else
return 0;//incorrect syntax
}
//convert symbol into integer, 0 is 0x30, 1 is 0x31, etc
int val = (int)*current_symbol - 0x30;
if(val <0 || val >9)//it is not a number
return 0;
result += val * digit_indx;
}
return result;
}
пятница, 20 марта 2009 г.
в интренете стало немного чище
это была партнерка, продающая "как-бы антивирус" под названием "Antivirus 360", который отличился тем, что один из самых распостраненых червей Conficker(он же Downup, Downadup и Kido, за голову автора майкрософт предлагало 250к$) пробовал стянуть и поставить этот "антивирус". Еще были мелкие шалости - програма перехватывала обращение к серваку гугла и модифицировала контент, после этого юзер видел рекомендацию от гугла "активировать" антивирус.
Страдали в основном любители разных порносайтов, афиляты (каждый получал 30$ за продажу) скидывали мусорных трафик на трафикконвертер. Некоторые зарабатывали очень неплохие деньги (первая десятка заработала 330к$ за месяц в 2008)
Прикрыли трафикконвертер после статьи в Washington Post похоже что хакнутые с сайта данные (в статье написано откуда взялись данные про заработки афилятов) были использованы чтобы заблокировать перечисляение выручки афилятам
среда, 18 марта 2009 г.
IBM собирается купить Sun за 6.5 миллиарда
пятница, 6 марта 2009 г.
извраты позиционирования софта
рынок нетбуков не дает покоя Micro$oftу, софтварный гигант фактически не имеет ОС для них: windowsXP они списали (чтобы продавать висту не мешала), Vista по популярности немногим опередила виндовс "миллениум", а Windows Seven, который "решит" эти проблемы не готов (и благодаря откладыванию его релиза + релиза следующей мобильной винды M$ сильно рискует своей относительно небольшой долей рынка ОС для смартфонов)
Но решение для нетбуков уже близко, у Windows 7 будет "Starter Edition", на которой аппаратных ресурсов нетбука хватит. эта система будет доступна на рынках США и Европы (для предыдущих виндовсов стартеркиты появились в 2004 году и только для развивающихся стран)
Интересно, какой злой гений маркетинга додумался ограничить число одновременно работающих приложений в Starter Edition тремя?
четверг, 5 марта 2009 г.
Visual Studio 2005 --> 2008. совместимость
A custom list view control with custom scrollbar control, using WTL
и открываем его в Visual Studio 2008, при запуске происходит конвертация проекта в формат более новой студии.
Запускаем проект на копиляцию, результат - ошибка:
Linking...
CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
спасибо майкрософту за изменения, которые делают жизнь програмиста веселей :)
что произошло понять просто - в проекте файл манифеста подключается через ресурсы, после конвертации настройки проекта фактически добавляют два манифеста в одну екзешку - оставшийся с предыдущей версии и новый, автоматически сгенерированый. исправить легко, но неприятно что приходиться отвлекаться на такую ерунду.