Ви дивитеся журнал [info]madf

травень 2012   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Запам’ятайте цей день

Posted on 2012.05.25 at 21:05
Tags:
Сьогодні вперше в історії людства приватний космічний корабель стикувався з МКС. Остання подія такого ж масштабу - стиковка радянського "Союз" і американського "Apollo" у 1975-му році.
Дивився трансляцію процесу на сайті NASA, але не додивився до кінця. Сподіваюсь запис викладуть.

gcc:4.6

Posted on 2012.05.20 at 17:14
Tags: , , ,
Мене запарив рівень підтримки C++11 у gcc:4.5 і я таки вирішив розмаскувати gcc:4.6. Якого біса, навіть у нас на роботі давно вже gcc-4.6.1!
І пофігу на всякі там гроби!
Тим паче що з ними, за останніми чутками, уже все в порядку.

Update: Ааа!!! Повне розчарування! Вони так і не заімплементили emplace для контейнерів :( Доводиться городити щось таке:
    m_registry().insert(std::move(std::make_pair(name, PluginHolderPtr(new PluginHolder(id<P>())))));

замість елегантного
    m_registry().emplace(name, PluginHolderPtr(new PluginHolder(id<P>())));

Пічалька :(

Linux, RAID, mdadm, Gentoo

Posted on 2012.05.20 at 15:59
Tags: , , , ,
FYI:
altair usr # mdadm /dev/md0 --manage --add /dev/sdc1
mdadm: add new device failed for /dev/sdc1 as 3: Invalid argument
altair usr # grep md_import_device /var/log/messages | tail -1
May 20 15:53:37 altair kernel: md: md_import_device returned -22
altair usr # mdadm --version
mdadm - v3.2.4 - 9th May 2012

Solution:
altair usr # echo "=sys-fs/mdadm-3.2.4" >> /etc/portage/package.mask
altair usr # emerge -au sys-fs/mdadm

Additional information: "mdadm 3.2.4 problem"
Ну і да, чекаємо на 3.2.5 як мінімум...

PS:
altair usr # mdadm /dev/md0 --manage --add /dev/sdc1
mdadm: added /dev/sdc1
altair usr # mdadm --version
mdadm - v3.2.3 - 23rd December 2011

Bad words

Posted on 2012.05.18 at 21:08
Tags:
Слова що викликають блювання: "інноваційний", "соціальний", "стартап", "гречка", "покращення".
Квінтесенція ненависті: "Я починаю стартап - розробку інноваційної соціальної мережі з роздачі гречки для покращення життя вже сьогодні (с)". Нє-нє, не думайте поганого, до такого ще ніхто не додумався. Я просто скомпонував слова у речення для більшого ефекту.

GMail

Posted on 2012.05.12 at 18:12
Tags:
А ви знали що у їхніх фільтрах можна використовувати логічні вирази?
from:((!abc@somewhere.com.ua AND !lj_notify@livejournal.com)) to:(def@somewhere.net)
Тільки що знову ледь не зламав собі пошту, але все таки розкидав по каталогам.

Про постгуманізм, ядерний синтез і еволюцію зірок.
Російською:

Французькою:

лірика )

C++11 рулить!

Posted on 2012.05.04 at 21:58
Зараз грає: Iron Maiden - Ghost of the Navigator | Powered by Last.fm
Tags: , ,
Замутив на роботі круту шнягу із std::function, lambda, auto, std::bind і variadic templates.
Чесно кажучи, все це хак щоб обійти обмеження архітектури а-ля 90-ті. У нормальних умовах вистачило б std::bind.
Але сама можливість таких трюків надає відчуття всемогутності!

Всього-то треба було додати post-assign callback до певного application field. І все б нічого, тільки вказівник на об’єкт-holder має тип void *. Спочатку додав власне callback типу std::function<void (void *)>. Потім додав статичний метод-адаптер приблизно такий:
template <class C, typename ... Us, typename ... Vs>
std::function<void (void *)> adaptMethod(void (C::* method) (Us ...), Vs ... vs)
{
    auto temp(std::bind(method, std::placeholders::_1, vs ...));
    return [temp] (void * objPtr) { temp(static_cast<C *>(objPtr)); };
}

Роздільні типи Us і Vs потрібні для неявного перетворення типів (наприклад enum -> int). std::bind у temp потрібен бо gcc 4.6.1 ще не вміє захоплювати у лямбду пакунок параметрів і його треба зв’язати до передачі в лямбду.
Але ставити callback так:
appField.setPostAssignCallback(AppField::adaptMethod(&HoldSwap::setNotlDivMult, LEG1)) - не дуже зручно (хоча без адаптора було б гірше). Тому я ще зробив overload для setPostAssignCallback:
template <class C typename ... Us, typename ... Vs>
void setPostAssignCallback(void (C::* method) (Us ...), Vs ... vs) { setPostAssignCallback(adaptMethod(method, vs ...)); }

І тепер ставити callback можна просто:
appField.setPostAssignCallback(&HoldSwap::setNotlDivMult, LEG1);
Треба б ще параметри std::move-нути, але rvalue references не така проста штука як здається. Як буде час - напишу про них і про std::move/std::forward.

На фоні тупого багофіксингу писати таке було надзвичайно приємно. Головне щоб воно через рев’ю пройшло.

Написав пекельний скрипт (а точніше штук 5 скриптів) на bash і expect для заміни айпішок OpenVPN-сервера на роботах carwash. Їх там штук 100. Буде прикольно втратити керування такою мережею... На всякий випадок із кожної серії залишаю один хост на старому ip.
Писав і тестував кілька днів поспіль, натикав купу перевірок, веду 5 логів - а все одно нервуюсь.

Ех, а я казав кілька років тому щоб купували колокейшн, дедік чи хоча б VPS. :(

PS: а все через "покращення" :(

Розкажу вам як на минулих вихідних ми їздили замки дивитись.
многабукаф і картінак! )
Все мені сподобалось у Кам’янці і в Хотині. Одне не сподобалось - дірка у підошві лівого кросівка. І ще одна, трошки менша - у правому. Постійно ходили по сирій траві, землі, калюжам а то і просто по дощу - приємного мало тягати два відра з водою. Намагався у калюжі не вступати і п’ятками по мокрій землі не ходити, тому ногу під вечір трошки "гули". Ну що ж, сам винуватий - не подбав про нормальне взуття заздалегідь. Тому сьогодні сходив і купив пару нормальних кросівок.

Qt5

Posted on 2012.04.18 at 22:40
Tags: , ,
"Qt 5, C++ and Qt Widgets"
Ключові моменти:
"QWidget and all derived classes are a core part of Qt 5 on the Desktop."
"C++ is and will stay our main programming language."
Якщо не вірити Lars'у Knoll'у то кому ж тоді вірити?

Попередні 10