среда, 02 сентября 2009
Йа волосат и бородат!
Ричард Столлман таки жжОт:
Йа волосат и бородат!
В-общем, смотрел я вчера статистику. Анонимусы отакуе! Большая часть читателей меня - анонимны. Писателей у меня - тоже. Вот я и подумал - а если закрыть для Гостей дайр... много ли новых юзеров появится?
Можете посмотреть сами - ссылка на статистику внизу меню моего дайра.
А еще утром я увидел вот такое:
Осторожно, траф!
Тяжелый груз манов... =О.о=
Можете посмотреть сами - ссылка на статистику внизу меню моего дайра.
А еще утром я увидел вот такое:
Осторожно, траф!
Тяжелый груз манов... =О.о=
вторник, 01 сентября 2009
Йа волосат и бородат!
Давно я не писал сюда ничего кроме кода, да мелких мыслей-одиночек. А это - неправильно таки.
Начнем с того, что писать практически нечего. Да, тут несколько недель у меня тусили Трин, Мозг, Тами, Орл и Степа. Но право-дело писать об этом я не хочу ровно ничего, ибо пересказывать много, да и неупомню уже. Но лулзов было много. А писать отрывками не хочется.
Помнится, пару недель назад, я посмотрел на резюме автора centericq и был неприятно для себя удивлен. Разница в возрасте небольшая, а вот достижений больше. (Да-да, я, сцуко, завистливый!) Вот и задумался в очередной раз о необходимости дальнейшего просвещения. Не, в аспирантуру я не хочу идти - как ни крути, а защита диплома наложила свой неприятный отпечаток. И да, я знаю, что это глупо.
А думать я начал ни о чем ином, как о самообразовании путем чтения умных книг. Только вот незадача: читать их особо некогда, ибо дома у мя и так занятий полно, а на работе - тем более. Есть вариант - метро, но для этого они должны быть бумажными, а это дорого. Таскать с собой ноут совсем не хочется.
Посему подумал я о покупке кпк/ебука... но, цена кусается оч. Есть еще вариант распечатывать на работе, но боюсь огрести за это по голове от начальства.
А еще, намаявшись в очередной раз с линзами и благополучно ступив утром под радостную музыку из соседней школы, благодаря которой я оставил контейнер и жидкости для линз дома - я подумал, а не забить ли мне на эти риски с глазными операциями и не сделать ли?.. Страшно, конечно, но это лучше, чем постоянно красные и быстро сохнущие глаза.
Думал-думал... и все ж не удержусь я откормления троллей рабочего. Ну, где же ваши розовые тапки? Из рабочего будут только личные выводы из обзора чужого кода.
Памятка на будущее
В общем, авторам библиотеки ptlib от меня - громадный disrespect. И я еще ни от одного своего сотрудника не слышал хорошего слова об этой библиотеке.
Начнем с того, что писать практически нечего. Да, тут несколько недель у меня тусили Трин, Мозг, Тами, Орл и Степа. Но право-дело писать об этом я не хочу ровно ничего, ибо пересказывать много, да и неупомню уже. Но лулзов было много. А писать отрывками не хочется.
Помнится, пару недель назад, я посмотрел на резюме автора centericq и был неприятно для себя удивлен. Разница в возрасте небольшая, а вот достижений больше. (Да-да, я, сцуко, завистливый!) Вот и задумался в очередной раз о необходимости дальнейшего просвещения. Не, в аспирантуру я не хочу идти - как ни крути, а защита диплома наложила свой неприятный отпечаток. И да, я знаю, что это глупо.
А думать я начал ни о чем ином, как о самообразовании путем чтения умных книг. Только вот незадача: читать их особо некогда, ибо дома у мя и так занятий полно, а на работе - тем более. Есть вариант - метро, но для этого они должны быть бумажными, а это дорого. Таскать с собой ноут совсем не хочется.
Посему подумал я о покупке кпк/ебука... но, цена кусается оч. Есть еще вариант распечатывать на работе, но боюсь огрести за это по голове от начальства.

А еще, намаявшись в очередной раз с линзами и благополучно ступив утром под радостную музыку из соседней школы, благодаря которой я оставил контейнер и жидкости для линз дома - я подумал, а не забить ли мне на эти риски с глазными операциями и не сделать ли?.. Страшно, конечно, но это лучше, чем постоянно красные и быстро сохнущие глаза.
Думал-думал... и все ж не удержусь я от
Памятка на будущее
В общем, авторам библиотеки ptlib от меня - громадный disrespect. И я еще ни от одного своего сотрудника не слышал хорошего слова об этой библиотеке.
Йа волосат и бородат!
Сегодня уволили еще одного сотрудника. Ибо разгильдяй полный. Однако, человек был веселый.
Йа волосат и бородат!
Ахахахахахахааааа!!! Я знаю кто вы оба! Гарпии-эмоционале!
Йа волосат и бородат!
Вот еще один ну совсем непонятный мне кусок. И опять же в этой долбанной ptlib 2.4.5:
В keyMap сидят указатели на объект шаблона, который создает синглотона специализированного типа. Вот кто-нить мне может обьяснить, почему в UnregisterAll_Internal() не делается удаление delete keyMap.begin()->second?
void Unregister_Internal(const _Key_T & key)
{
PWaitAndSignal m(mutex);
typename KeyMap_T::iterator r = keyMap.find(key);
if (r != keyMap.end()) {
if (r->second->isDynamic)
delete r->second;
keyMap.erase(r);
}
}
void UnregisterAll_Internal()
{
PWaitAndSignal m(mutex);
while (keyMap.size() > 0)
keyMap.erase(keyMap.begin());
}
В keyMap сидят указатели на объект шаблона, который создает синглотона специализированного типа. Вот кто-нить мне может обьяснить, почему в UnregisterAll_Internal() не делается удаление delete keyMap.begin()->second?
Йа волосат и бородат!
Про порождение нового класса, хотя можно было обойтись typedef, я уже писал тут.
Теперь я столкнулся с куском кода, которым вчера заспамил знакомых программистов, ибо сам понять просто не в состоянии:
Перво-наперво есть класс и вот такие макросы (указано в порядке обьявления в хедере!):
Используется вся эта радость следующим образом:
Вопросы - как работают макросы? Каким образом происходит принудительное инстанцирование шаблона?
Да, возможно это ни что иное, как рога и копыта (а, говорят, разработчики этим очень грешат), но блин... Уж такое можно было бы и подчистить.
ЗЫ: куски взяты из свободной библиотеки ptlib 2.4.5.
Теперь я столкнулся с куском кода, которым вчера заспамил знакомых программистов, ибо сам понять просто не в состоянии:
Перво-наперво есть класс и вот такие макросы (указано в порядке обьявления в хедере!):
template <class _Abstract_T, typename _Key_T = PDefaultPFactoryKey>
class PFactory {
template <class _Concrete_T>
class Worker { /*...*/ };
/*...*/
};
//
// this macro is used to initialise the static member variable used to force factories to instantiate
//
#define PLOAD_FACTORY(AbstractType, KeyType) \
namespace PWLibFactoryLoader { \
extern int AbstractType##_##KeyType##_loader; \
static int AbstractType##_##KeyType##_loader_instance = AbstractType##_##KeyType##_loader; \
};
//
// this macro is used to instantiate a static variable that accesses the static member variable
// in a factory forcing it to load
//
#define PINSTANTIATE_FACTORY(AbstractType, KeyType) \
namespace PWLibFactoryLoader { int AbstractType##_##KeyType##_loader; }
Используется вся эта радость следующим образом:
/* Файл cpp */
class PProcessStartup { /*...*/ };
class PluginLoaderStartup : public PProcessStartup { /*...*/ };
static PFactory<PProcessStartup>::Worker<PluginLoaderStartup> pluginLoaderStartupFactory("PluginLoader", true);
// PString - внутренний аналог std::string
PINSTANTIATE_FACTORY(PluginLoaderStartup, PString)
Вопросы - как работают макросы? Каким образом происходит принудительное инстанцирование шаблона?
Да, возможно это ни что иное, как рога и копыта (а, говорят, разработчики этим очень грешат), но блин... Уж такое можно было бы и подчистить.
ЗЫ: куски взяты из свободной библиотеки ptlib 2.4.5.
Йа волосат и бородат!
01.09.2009 в 03:15
Пишет макф:Распространив данную памятку, вы можете спасти одного или нескольких человек от наказания. От заведомо несправедливого наказания. В соответствии с несправедливым законом, который принят исключительно для пользы зарубежных правообладателей, то есть, вопреки интересам России.
Просим вас сделать то, что в ваших силах, чтобы ознакомить с настоящим текстом тех, кто зарабатывает компьютерными услугами.
URL записиПросим вас сделать то, что в ваших силах, чтобы ознакомить с настоящим текстом тех, кто зарабатывает компьютерными услугами.
Йа волосат и бородат!
This is the time of Revolution
Converting Vegetarians...
(c) Infected Mushroom
Converting Vegetarians...
(c) Infected Mushroom
Кофе делает меня воистину вдрыжни. Особенно крепкий и в больших количествах.
Вчера после 3 чашек свежесваренного кофе моск уснул, но увеличилась моторная активность. В результате добежал до дома быстрее раза в полтора. О.о
А еще глаза мои опять красны. =о.о=
Йа волосат и бородат!
Был в гостях. Очень рад, что увидел тебя.
понедельник, 31 августа 2009
Йа волосат и бородат!
Йа волосат и бородат!
Вот есть класс:
У кого-нить есть идеи? )
class PFactoryBase
{
protected:
PFactoryBase()
{ }
public:
virtual ~PFactoryBase()
{ }
// Вот почему тут сделано наследование, а не
// typedef std::map<std::string, PFactoryBase *> FactoryMap; ?
class FactoryMap : public std::map<std::string, PFactoryBase *>
{
public:
FactoryMap() { }
~FactoryMap();
};
static FactoryMap & GetFactories();
private:
PFactoryBase(const PFactoryBase &{}
void operator=(const PFactoryBase &{}
};
У кого-нить есть идеи? )
Йа волосат и бородат!
На случай, если кого интересует, чем я прям сейчас занимаюсь... так это reverse-engineering пары открытых библиотек.

Диаграмма еще в процессе, пакеты открытые, так что преступления сей публикацией я не совершаю.
Знаю, что "reverse-engineering пары открытых библиотек" звучит весьма странно, но "любой каприз за ваши деньги!"
ЗЫ: поздно заметил, что одна зависимость немного "уехала", да пофиг, в общем-то.

Диаграмма еще в процессе, пакеты открытые, так что преступления сей публикацией я не совершаю.
Знаю, что "reverse-engineering пары открытых библиотек" звучит весьма странно, но "любой каприз за ваши деньги!"

ЗЫ: поздно заметил, что одна зависимость немного "уехала", да пофиг, в общем-то.
Йа волосат и бородат!
пятница, 28 августа 2009
Йа волосат и бородат!
среда, 26 августа 2009
Йа волосат и бородат!
Оставил я так мышу ненадолго в Студии... а оно вот показало такой хинт:

(Метод в хедере закрашен, ибо конспирация)

(Метод в хедере закрашен, ибо конспирация)
Йа волосат и бородат!
Глаза мои все еще красны, но уже более нормальны. Линзы стало носить намного легче. Сегодня последний раз капаю Тобрекс (антибиотик) и буду капать только цинковые капли с борной кислотой. Славбоху, что только 2 раза в сутки, иначе я бы этого не вынес.
вторник, 25 августа 2009
Йа волосат и бородат!
...когда я бежал к глазодерам. =О.о=
Все знают ситуацию, когда нужно пронаследовать несколько детишек от некоторого класса. И все знают, чем плохо перегружать в детишке невиртуальный метод, а именно что будет, если попробовать вызвать перегруженный метод по указателю на родителя. (перегруженный метод банально не вызовется, ибо в таблицу виртуалов не попадет)
Так вот для преодоления такой фигни в случае закрытого кода с родительским классом возникла мысль написать что-нить вроде:
Наследоваться надо вот так:
При этом получается, что в момент наследования от Middle_base класс Child уже обьявлен в той же строке.
Единственный минус конструкции - что обращаться надо по указателю на Middle_base.
Единственный вопрос возникает - нафига при таком подходе вообще нужны виртуальные методы? =О.о=
ЗЫ: Учитывая, что это была только мысля, которую я еще не довёл до ума...
UPD: К сожалению, на проверке метода выявились 2 проблемы:
1) не происходит вызова Middle_base::operator-> (). Вызов сразу уходит в Base;
2) совершенно непонятно, что делать с самим классом Middle_base . Ибо каждый из них порождает отдельный тип, а это как бы мешает в случае кучи детишек. :/
Все знают ситуацию, когда нужно пронаследовать несколько детишек от некоторого класса. И все знают, чем плохо перегружать в детишке невиртуальный метод, а именно что будет, если попробовать вызвать перегруженный метод по указателю на родителя. (перегруженный метод банально не вызовется, ибо в таблицу виртуалов не попадет)
Так вот для преодоления такой фигни в случае закрытого кода с родительским классом возникла мысль написать что-нить вроде:
template <typename Derived_class>
class Middle_base : public Base {
public:
Derived_class * const operator-> () {
return reinterpret_cast <Derived_class * const> (this);
}
};
Наследоваться надо вот так:
class Child : public Middle_base <Child>
{
// ...
};
При этом получается, что в момент наследования от Middle_base класс Child уже обьявлен в той же строке.

Единственный вопрос возникает - нафига при таком подходе вообще нужны виртуальные методы? =О.о=
ЗЫ: Учитывая, что это была только мысля, которую я еще не довёл до ума...
UPD: К сожалению, на проверке метода выявились 2 проблемы:
1) не происходит вызова Middle_base::operator-> (). Вызов сразу уходит в Base;
2) совершенно непонятно, что делать с самим классом Middle_base . Ибо каждый из них порождает отдельный тип, а это как бы мешает в случае кучи детишек. :/