понедельник, 30 марта 2009 г.

установка IE8 ломает Visual C++

не секрет что визарды в визальнике активно используют движок IE, и разные обновления/глюки в нем могут серьезно помешать работе программиста. Так что лучше не ставте последний IE8 на рабочую машину.
после установки последнего 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

see source code

относительно 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 на интервью

на developers.org.ua заметил впечатления от проходжения интервью в R&D центр самсунга в Киеве, если опустить общее негативное впечатление програмера от самого процесса, и то что судя по цифрам набрать они пытаються по-дешевле,то из интересного там упоминание одного из вопросов - написать 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;
}

Silverlight & playboy

для распространения новой технологии все средства хороши


открывается на playboy.covertocover.com если нету плагина для сильверлайта.

пятница, 20 марта 2009 г.

в интренете стало немного чище

прикрыли TrafficConverter.biz
это была партнерка, продающая "как-бы антивирус" под названием "Antivirus 360", который отличился тем, что один из самых распостраненых червей Conficker(он же Downup, Downadup и Kido, за голову автора майкрософт предлагало 250к$) пробовал стянуть и поставить этот "антивирус". Еще были мелкие шалости - програма перехватывала обращение к серваку гугла и модифицировала контент, после этого юзер видел рекомендацию от гугла "активировать" антивирус.
Страдали в основном любители разных порносайтов, афиляты (каждый получал 30$ за продажу) скидывали мусорных трафик на трафикконвертер. Некоторые зарабатывали очень неплохие деньги (первая десятка заработала 330к$ за месяц в 2008)
Прикрыли трафикконвертер после статьи в Washington Post похоже что хакнутые с сайта данные (в статье написано откуда взялись данные про заработки афилятов) были использованы чтобы заблокировать перечисляение выручки афилятам

среда, 18 марта 2009 г.

IBM собирается купить Sun за 6.5 миллиарда

на WSJ появилась инофрмация о возможном поглощении Sunа компанией IBM. Они предлагают 6.5 миллиарда, это почти в двое больше стоимости всех акций компании (4.95$ стоила акция вчера).

пятница, 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


спасибо майкрософту за изменения, которые делают жизнь програмиста веселей :)

что произошло понять просто - в проекте файл манифеста подключается через ресурсы, после конвертации настройки проекта фактически добавляют два манифеста в одну екзешку - оставшийся с предыдущей версии и новый, автоматически сгенерированый. исправить легко, но неприятно что приходиться отвлекаться на такую ерунду.

вторник, 3 марта 2009 г.