Hatred's Log Place

DON'T PANIC!

Apr 17, 2012 - 1 minute read - programming c++

C++ Cheat Sheets

  1. C++ Containers Cheat Sheet: 1. http://homepages.e3.net.nz/~djm/cppcontainers.html 2. http://habrahabr.ru/company/infopulse/blog/194726/
  2. C++ Iterators & Algorithms Cheat Sheet: 1. http://homepages.e3.net.nz/~djm/cppiterators.html
  3. Shifting from C to C++ strings: 1. http://homepages.e3.net.nz/~djm/cppstrings.html
  4. C++03 vs C++11: 1. http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf
  5. C++ Quick Reference: 1. http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf
  6. STL Quick Reference: 1. http://www.digilife.be/quickreferences/QRC/STL%20Quick%20Reference%201.29.pdf
  7. C++ Concurency: 1. http://cpprocks.com/wp-content/uploads/C++-concurrency-cheatsheet.pdf

Отдельно по ANSI C: http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20%28ANSI%29%202.2.pdf

Apr 17, 2012 - 1 minute read - programming c++

Цикл статей "Введение в C++11"

Цикл статей камрада Игоря Кальницкого для “самых маленький” про плюшки нового стандарта C++:

  1. Введение в C++11: auto, decltype, nested templates и range-based-for
  2. Введение в C++11: nullptr и нововведения в системе инициализации
  3. Введение в C++11: лямбда функции
  4. Введение в C++11: умные указатели
  5. Введение в C++11: новые спецификаторы
  6. Введение в C++11: пользовательские литералы

Так же стоит прочитать статью на Википедии, на удивление информативная: C++11

Apr 16, 2012 - 1 minute read -

BgBilling 5.2 - ошибка

А как оказалось, на разделе с /tmp кончилось место, сказал об том Midnight Commander при запуске.

Apr 11, 2012 - 1 minute read - programming c++

Удаление weak_ptr из std::list

Дано: контейнер примерно такого вида:

std::list< boost::weak_ptr<Item> > items;

Вместо %%boost::weak_ptr<>%% могу быть:

  • %%std::tr1::weak_ptr<>%%
  • %%std::weak_ptr<>%% для C++11

Задача: нужно удалить элемент по значению.

Казалось бы, просто сделай:

...
items.remove(value);
...

ан нет: для %%weak_ptr<>%% не определён оператор сравнения. Если потеоретизировать, можно предположить, почему так сделано: что бы гарантировать консистентность указателей при сравнении нужно их захватить (сделать %%value.lock()%%), т.е. создать два %%shared_ptr%% и уже их сравнивать, т.е. лишние накладные расходы.

Поэтому удаление можно делать так:

template <typename T>
bool operator == (const boost::weak_ptr<T>& a, const boost::weak_ptr<T>& b)
{
    return a.lock() == b.lock();
}

после такого %%std::list::remove(const T&)%% будет работать для всех типов. Можно и сузить до конкретного.

Либо использовать %%std::list::remove_if(Predicate)%%, предикат объявить как:

struct EqPredicate
{
    const boost::weak_ptr<Item>& item;

    EqPredicate(const boost::weak_ptr<Item>& item)
        : item(item)
    {
    }

    bool operator () (const boost::weak_ptr<Item>& p) const
    {
         return p.lock() == item.lock();
    }
};

и использовать так:

std::list< boost::weak_ptr<Item> > items;
...
items.remove_if(EqPredicate(value));

Информация взята отсюда: http://stackoverflow.com/questions/1390340/how-can-i-use-stdremove-on-a-container-with-stdtr1weak-ptr

Вышесказанное верно для %%boost::weak_ptr%%, %%std::tr1::weak_ptr%%, %%std::weak_ptr%%

Apr 5, 2012 - 1 minute read -

0x10c - Hard Science Fiction

Проект новой игры от создателя Minecraft - 0x10c

Канву и основные фичи читать на сайте, отмечу только, что в игре придётся заниматься программированием 16-битного компьютера на чипе DCPU-16, спецификация чипа прилагается. Думаю, что тут можно будет проследить историю развития языков :)

Mar 27, 2012 - 3 minute read -

Свой домен и динамический DNS

Как писал в позапрошлой заметке - у блога новый домен. Собственно сразу стал вопрос - а как его использовать с моим-то динамическим белым IP адресом?

hatred.homelinux.net - предоставлен DynDNS.com, вот только незадача - они сделали чуть менее, чем всё у себя платным, даже если сейчас я освобожу этот хост - обратно в бесплатном аккаунте я его не выберу.

Именно поэтому в качестве DNS хостера и динамического DNS был выбран http://dnspark.net

Как делегировать туда свой домен, что делать на nic.ru или у других регистраторов - это за пределами этой статьи, в конце концов, там всё достаточно очевидно, если нет - в комментарии с вопросами :)

Mar 26, 2012 - 1 minute read -

Новый адрес блога

Обзавёлся доменом второго уровня: HTRD.SU. Как запомнить? А достаточно просто:

  1. Из моего ника выбрасываем все гласные буквы: HaTReD => HTRD
  2. Смотрим на клавиатуру: буквы образуют как бы трапецию, набираясь в одном направлении: H (влево вверх) T (влево) R (влево вниз) D
  3. Домен .SU просто запоминаем (да-да, я родился в Советском Союзе :)
  4. PROFIT!

Посему новый адрес блога: HTTPS://HTRD.SU

Старый адрес будет доступен ещё неопределённое время. А может и вообще останется как fail-over. Или будет использоваться для доступа домой… В общем не решил ещё :)

Что ещё планируется в ближайшем будущем:

  1. переезд на более стабильную площадку
  2. небольшая заметка: как это всё использовать с Dynamic DNS?