25 декабря 2008 г.

Про IE

Открываю новую вкладку в IE7. По умолчанию стоит about:blank. Появляется новая вкладка, но работать с IE еще нельзя — довольно долго смотрю на красивое крутящееся колечко и надпись "Подключение..." За это время успеваю налить в кружку чай и поматериться на разработчиков.

Я не понимаю, почему нужно тратить столько времени на открытие пустой вкладки. Какое, нафиг, подключение? Куда? К about:blank? Я действительно не понимаю.

23 декабря 2008 г.

Ой, держите меня...

CNews — хороший портал, и с каждым днем он мне нравится все больше и больше.

Итак, отличная новость — Минкомсвязи придумало как спасти ИТ-индустрию.
В прошлую пятницу 19 декабря стало известно, что Минкомсвязи направило в Минфин и Минэкономразвития новую редакцию Федеральной целевой программы «Электронная Россия». Сегодня в Минкомсвязи прокомментировали ее специально для CNews (текст заявления приводится целиком и без изменений):

«В Минкомсвязи рассчитывают использовать «Электронную Россию» для спасения IT-индустрии. Запущенная в 2002 году как чиновничья инициатива сверху, программа должна наконец сработать на благо отрасли.

Биоритм отрас… полный текст

Источник: CNews



Ура! Наконец-то нашелся кто-то (ну, хоть кто-то!), кто не побоялся кризиса и решил спасти российскую ИТ-индустрию. Потому, что "программа должна наконец сработать на благо отрасли". Краткий алгоритм успеха: 1) сменить название госпроекта на более умное; 2) закупать мозги вместо оборудования; 3) пожаловаться на недофинансирование. Всё! ИТ-индустрия, считай, спасена. (вытираю с лица слезы умиления и сопли счастья)

Нет, это нужно читать. Что не фраза, то просто перл! Можно прям выдирать из текста и на стенку вешать. Самое интересное, что сквозь смех и слезы, все равно появляются новые вопросы...

Вот избранные цитаты.

...если ранее «Электронная Россия» была ориентирована, в основном, на закупку «железа» для страны, то теперь в центре внимания разработчиков – «мозги». А для спасения мозгов для отрасли нужны госконтракты по ФЦП.

Интересно, сколько "мозгов" можно купить на откаты? Про "комнату, забитую серверами" мы уже слышали, а вот на комнату, забитую мозгами, я очень хотел бы посмотреть. Или считается, что раз кризис, то "мозгам" просто больше деться некуда, кроме как связаться с госпроектом? Или о каких мозгах речь, вообще?

«Смарт»-версия «Электронной России» разработана с учетом консультаций...

Эээээ... Простите, а раньше какая была? Dumb?

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

Ой.

За семь лет, и особенно за последние несколько месяцев кризиса, пришло понимание, какой смысл можно вкладывать в понятие «Электронное правительство», и как оно может помочь непосредственно гражданам.

Ну, спасибо кризису. Иначе бы и не дождаться нам, смертным...

Невысокий процент исполнения программы в Минкомсвязи объяснили недофинансированием...

Ребят, а если подключится к тарифному плану "Анлим" - тогда хватит?

Ну, и напоследок:
Формулировки предыдущей концепции были настолько общими, что многие ведомства использовали ФЦП просто для прокладки оптических линий связи... Конкретизировав мероприятия, мы постарались уйти от ставки на «железо» и «веревки», теперь мы создаем полноценный информационный продукт».

Кто не спрятался, то Минкомсвязи не виноват. Щас они продукт делать будут.

15 декабря 2008 г.

Цитата: Кериевски

В последние годы стало выходить столько литературы по разработке ПО, что не только читать не успеваешь, но и даже просто фильтровать — вместе с хорошими книгами куча всякой фигни на полках стоит, а пока не прочитаешь, не поймешь... Но иногда коллеги рекомендуют (или не рекомендуют) какие-то книги, и это здорово помогает в выборе.

Недавно мне порекомендовали книгу Джошуа Кериевски "Рефакторинг с использованием шаблонов". Очень понравилась. Толковый мужик, знает, о чем пишет. Как бы заполняет нишу между "Рефакторингом" Фаулера и "Шаблонами проектирования" Гаммы и его друзей.

Я позволю себе процитировать:
Если вы хотите повысить квалификацию разработчика, изучение эволюции программных проектов будет более ценно, чем изучение проектов самих по себе — ибо настоящая мудрость лежит в развитии.


Книга, к тому же, издается за подписью Фаулера.

10 декабря 2008 г.

Слияние отсортированных массивов

Даны M отсортированных массивов по N элементов каждый. Необходимо слить их в одну отсортированную последовательность.

Есть несколько способов сделать это.

Первый способ - сливать сортированные последовательности по несколько штук (например, по две) до тех пор, пока не останется одна. Это и будет искомая последовательность. Например, для М=4, есть массивы М1, М2, М3 и М4 длиной по N элементов. На первом шаге сливаем M1 и М2, а потом М3 и М4. Получим два массива М5 и М6 длиной по 2*N элементов. На втором шаге сливаем М5 и М6 и получаем искомую последовательность длиной 4*N.

Второй способ - сливать массивы все сразу. То есть, получить искомый отсортированный массив за один шаг.

Вопрос в том, какой из способов более эффективный?

Можно попытаться посчитать приблизительное количество операций сравнения. Для простоты примем, что количество исходных массивов является степенью 2, то есть 2,4,8,... Для первого способа количество операций сравнения будет равно N*M*2*log2M. А для второго - N*M2.

Видно, что для М=2 или 4 количество операций будет одинаковое для обоих способов. А вот дальше количество операций для первого начнет уменьшаться. При М=32 соотношение количества операций будет примерно 1/3 в пользу первого способа.

Однако, все это верно, если проводить все слияние в памяти. Если же предположить, что памяти достаточно на одновременное размещение только части массивов, то дело принимает совсем другой оборот.

Предположим, что памяти хватает только на обработку пары массивов. Следовательно, после обработки каждой пары массивов на любом шаге слияния, нам нужно сохранять на диск промежуточную последовательность, чтобы считывать ее на следующем шаге слияния. То есть, используя пример, нужно считать последовательности М1 и М2 и записать последовательность М5. Затем считать М3 и М4 и записать последовательность М6. Затем считать М5 и М6 и записать результирующий массив.

Если попробовать подсчитать, то получится, что на каждом шаге нужно считать М*N элементов и записать М*N элементов. При увеличении М количество шагов растет - K=log2M. То есть количество операций чтения/записи будет равно 2*M*N*log2M. А используя второй способ нужно считать и записать только 2*М*N элементов (потому, что для второго способа нужен только один шаг).

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

9 декабря 2008 г.

Освобождение памяти в std::vector

Я почему-то раньше был уверен, что выделенную память в std::vector можно освободить присваиванием:

typedef vector<int> int_vector;

int_vector v;
v.resize(10);
...
v = int_vector();

Оказалось, ошибался. Так не освобождает. По крайней мере, стандарт не обязывает.

Следовательно, остался только один способ освободить память — с помощью vector::swap:

int_vector().swap(v);


(способ описан в "Эффективном использовании STL" Скотта Мейерса)

5 декабря 2008 г.

Задачи на собеседованиях: шаблоны проектирования

Вот такие вопросы еще задают на знание паттернов проектирования.

Описать недостатки паттерна singleton. Предложить решения устранения недостатков.