Skip to main content

Posts

Showing posts from July, 2007

Процесс разработки как он есть

Нашел картинку, которую когда то давным -давно встретил в одной из книг. Все это конечно весело если бы не было так жизненно ;-).

Живность в коде. Часть 1. Генетические алгоритмы

Когда-то мне пришлось заниматься задачами оптимизации (обучение нейронных сетей в моем случае) и очень хорошо в этом плане себя проявили генетические алгоритмы, которые относятся к категории эволюционных или биологических. К этой категории относится также ряд других алгоритмов - например метод муравьиных колоний (о нем попытаюсь подробнее рассказать в следующей статье).
Генетический алгоритм— это алгоритм, который позволяет найти удовлетворительное решение к аналитически неразрешимым проблемам через последовательный подбор и комбинирование искомых параметров с использованием механизмов, напоминающих биологическую эволюцию. Является разновидностью эволюционных вычислений. Отличительной особенностью генетического алгоритма является акцент на использование оператора «кроссовера», который производит операцию, роль которой аналогична роли скрещивания в живой природе.
Задача кодируется таким образом, чтобы ее решение могло быть представлено в виде вектора - хромосомы. Хромосома зачастую назыв…

IT Doesn't Matter

Статья Николаса Дж. Карра "IT Doesn't Matter", опубликованная в майском выпуске Harvard Business Review 2003 года вызвала бурную волну откликов и обсуждений (некоторые можно почитать на сайте автора, еще есть реакция Steve Ballmer и Carly Fiorina - HP CEO), что сподвигло его на написание книги "Does IT Matter? Information Tehnology and the Corrosion of Competitive Advantage" (в русском переводе Николас Дж. Карр "Блеск и нищета информационных технологий").

Если честно признаться, то эта книга для меня стала чем-то вроде снега на голову, она заставила задуматься о вещах, о которых мне ранее не приходилось задумываться - действительно ли стратегический успех компании зависит от инвестиций ИТ? если нет, то почему они (инвестиции) занимают столь ощутимое место в бюджете?

Основная идея - по мере превращения ИТ в инфраструктуру, ее стратегическая роль в успехе компании уменьшается, поскольку ИТ становятся доступнее, а следовательно могут быть легче скопиров…

Books on Algorithms

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

Jorg Arndt "Algorithms for Programmers. Ideas and source code" - еще не вышедшая книга на английском, выход запланирован на 2008 год, драфт пока что есть в свободном доступе



Однако надо признаться, что ни одну из этих книг я не прочел, а пользовался ими как справочниками, когда возникала такая необходимость ;-)

Манифест Хакера

Оригинальный текст был опубликован в 7-ом номере электронного журнала Phrack. Перевод на русский можно почитать здесь. Да. к чему это я все? Свобода информации, как говорится.
Upd: Манифест Хакера в формате mp3 можно скачать здесь.

Алгоритм управления памятью TLSF

Опубликован перевод описания алгоритма управления памятью TLSF с эффективностью O(1). Кроме того, существует сайт, посвященный explicit dynamic storage allocation, на котором помимо TLSF представлен еще ряд аллокаторов для real-time систем. Надо будет предложить попробовать различные аллокаторы, указанные на этом сайте, в следующем проекте, а заодно можно будет и оценить их эффективность на реальном железе. Если дело выгорит, то с меня отчет ;-)

The Battle with RegExpr

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

Анатомия ядра Linux

Вышел переводстатьи Тима Джонса об истории и архитектурной организации ядра Linux, которую можно рассматривать как введение в эту самую архитектуру. В целом и общем статья производит довольно благоприятные впечатления. Рекомендую к прочтению всем, кому это хоть немного интересно.

Flex & Bison C++ Interoperability Continued

Итак, возвращаясь к когда-то написанному мной введению об interoperability лексических анализаторов на С++, сгенерированных при помощи Flex, и синтаксических анализаторов, сгенерированных при помощи Bison, в этой статье хочу разобрать простенький примерчик в котором лексический анализатор (далее лексер) распознает строки комментариев командного интерпретатора bash и пустые строки и пропускает их, а все остальные возвращает синтаксическому анализатору (далее парсеру) для последующего вывода в командную строку. Сначала я приведу код, а затем уж постараюсь объяснить по возможности что какая строчка значит, ну и соответственно команды которые необходимы чтобы это все собрать в кучу.

Файл intertest.cpp
#include <fstream> #include "lexer.h" #include "parser.h" using namespace std; using namespace test; int main(int argc, char *argv[]) { ifstream infile(argv[1]); Lexer lexer(&infile); Parser parser(lexer); return parser.parse(); }
Тут я думаю о…

Linux Kernel Vitualization

Грядущий релиз ядра Linux 2.6.23 готовит новые вкусности - согласно KernelTrap, средства виртуализации Xen и lguest включены в основное ядро. Перед этим та же участь постигла KVM, предоставляющий возможность запускать несколько виртуальных машин, каждая со своей ОС

Moblin

Сотрудничество Intel с Canonical Ltd и Red Flag Linux вылилось в проект Mobile & Internet Linux Project, являющийся проектом по созданию программной начинки с открытым исходным кодом для Intel Mobile Internet Devices на базе Linux. На страничке проектов уже представлен предварительный ряд решений. Что же, позиции Linux в качестве mobile & embeded platform все упрочняются по мере adoption by leading manufacurers.

Инициализация структур

В стандарте С99 (6.7.8) есть интересная вещь - так называемые designators (обозначения?). Их использование позволяет инициализировать элементы структур при помощи списка инициализации не обращая внимания на порядок следования элементов. Например

struct StTest {
int i;
char c;
double d;
};

int main(int argc, char *argv[])
{
struct StTest st1={.d=0.1, .i=1, .c='a'},
st2={.c='b',.d=0.2,.i=2};
printf("st1.i= %d st1.c= %c st1.d= %f\n",st1.i,st1.c,st1.d);
printf("st2.i= %d st2.c= %c st2.d= %f\n",st2.i,st2.c,st2.d);
return EXIT_SUCCESS;
}

А вот собственно и результат работы такой програмки

commander@a64:$ ./teststructinit
st1.i= 1 st1.c= a st1.d= 0.100000
st2.i= 2 st2.c= b st2.d= 0.200000

Такая вещь бывает очень полезна, так как нет необходимости помнить порядок следования элементов структуры.

C vs. C++

На днях задался философским вопросом: если С++ лучше С, то почему ядра многих операционных систем (BSD, Linux, Windows?) написаны на С? На мой взгляд С++ довольно сложный и многообразный язык, и богатство его возможностей в данном случае только мешает, а не помогает, поскольку перед разработчиком встает проблема выбора. В то же время, чтобы выучить С достаточно книги Кернигана и Ричи, простой, лаконичный, и разработчик вместо того чтобы решать проблему выбора, занимается решением поставленной задачи. С позволяет сконцентрироваться на решении прикладной задачи, а не углубляться в архитектуру. Это все конечно же ИМХО и на истину в конечной инстанции не претендую, вполне возможно что ядра пишут на С по историческим причинам, и чтоб не сломать уже созданную кодовую базу.

Amaya - web browser from W3C

W3C видимо надоело бороться с наличием множества глюков в различных веб браузерах, посему было создано чудо, и имя ему нарекли Amaya. Что характерно - acid2 test он валит. Версия 9.55 от 10 июля 2007 года. Впечатления, мягко скажем, отрицательные. При этом натравив W3C QA Markup Validation Service на страницу acid 2 test можно убедится что код валидный. Посему возникает вопрос - зачем?

Ride The Tide

На мой взгляд сейчас в созревшем состоянии находят два очередных бума в сфере IT - это web services и mobile devices (в широком понимании этого слова). Скорее всего два этих явления будут дополнять друг друга. Самое время задаться вопросом "What to do to Ride the Tide?", как это в свое время сделали в SUN, когда решили что нужно что-то делать и сделали Java. И в заключение несколько ссылок:
Silicon Valley's next boom
ID theft: The next IT industry boom?
2001: A Perfect Time To Learn New Technology And Catch The Next Boom

Linux Mobile

Речь опять пойдет про ubiquitous computing. Linux все более активно позиционируется как платформа для мобильных устройств. Вот, например, какой девайс соорудили в рамках проекта OpenMoko:



Довольно подробный обзор можно почитать на LinuxDevices.com. Кроме того данное событие довольно активно освещается различными ресурсами, ссылки на которые можно найти на сайте OpenMoko. Ну скажите, чем это не альтернатива Apple iPhone? Девайс можно купить онлайн. Существует он в двух редакциях Neo Base и Neo Advanced. Advanced от Base отличается наличием дополнительных аксессуаров for mobile device hacker.

Google Translate

Ура! Наконец-то нашел то, чего так долго нехватало. Google сделал онлайн переводчик, который умеет переводить со многих языков. Причем можно переводить не только текст, но и веб страницы. Вот например перевод этого поста. Хотя, надо заметить, что перевод с русского на английский находится пока еще в стадии BETA.