четвртак, 22. септембар 2011.

vim - форматирање изворног кода

"Открио" сам још један начин за генерисање синаксно обојеног ХТМЛ кода за бебник.

Онај тежи начин сам описао овде: http://aleksandarristovski.blogspot.com/2009/04/blog-post.html

А далеко лакши је једноставно генерисати код из Вим едитора командом ":TOhtml".

Пример:



int main()
{
    int bar = 0;
    char foo;

    for (foo = 7; foo >= 0; foo--) {
        bar++;
    }

    return bar;
}


Невероватно једноставно.

субота, 17. септембар 2011.

Ubuntu 11.04 - io scheduler

Недавно сам прешао на новији компјутер и са тим и новији Убунту 11.04. Приметио сам да је одзив апликација катастрофалан ако у позадини имам операцију која интензивно користи диск. На пример, урадим

svn up

и већина апликација које су активне блокирају по неколико секунди. Буквално онемогућује рад.

Тражећи решење, изгледа да је узрок нови "scheduler" у линукс кернелу: "CFP". Преправио сам почетне аргументе кернела у груб конфигурацији и додао

"elevation=deadline"

у линији

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash reboot=pci elevator=deadline"

фајла /etc/default/grub

затим sudo update-grub

Чини ми се да је разлика очигледна. За тест сам копирао фајл од неколико гигабајта и истовремено користио интернет претраживач - иако има веома краткотрајних застоја, може нормално да се користи.

субота, 26. фебруар 2011.

позивање виртуелне функције из деструктора базне класе

Данас сам имао краткотрајно помрачење ума. Покушао сам нешто што не може да ради. Чак сам се и збунио, а волим да верујем да познајем Ц++. Све је релативно, а знање нарочито.

Ради се о следећем:





class Base
{
public:
   virtual ~Base() { foo(); }

   virtual void foo() = 0;
};

class Derived
{
public:
   virtual void foo() { cout << "Derived::foo" << endl; }
};


Солидан компајлер ће дати упозорење. У зависности од верзије gcc и binutils прављење извршне датотеке може да успе, можда не. У сваком случају, ово је погрешно из простог разлога што у тренутку када деструктор класе Base позове функцију foo, изведена класа Derived је већ извршила свој деструктор и подаци у тој класи су већ уништени. Ако би компјалер дозволио позив виртуелне фунције из деструктора Base, довео би до ситуације да виртуелна функција изведене класе барата са подацима који су већ били уништени.