четверг, 10 декабря 2009 г.

четверг, 29 октября 2009 г.

От двух до пяти :)

- Папа, ты идешь на работу, где тебя начальник учит денежки зарабатывать?

Мама иногда тоже может выдать фразу:
(во время зарядки)
- Одной ногой вдох, другой выдох!

пятница, 28 августа 2009 г.

Научились на двухколесном!

1. Папа бегает и ловит :)


2. Пытаюсь догнать :)


3. Соло!

От двух до пяти :)

Кушает утром кашку:
- мама!!!! Я в ложку кашку накладывать устал!!!! А в рот засовывать не устал!
______________________

За...
Mеня там заколючило больно!
Я завеселился!

вторник, 18 августа 2009 г.

От двух до пяти :)

Папа, смотри - божья коровка!
ой, мертвая...
Но еще красивая!
------------------

- А ну прекрати бросаться!
- Я не бросаюсь, я дурака валяю!

воскресенье, 9 августа 2009 г.

Windows 7::Отчет о совместимости (There and Back Again)



Вчитайтесь в текст сообщения, это не русский!

"You can't do a typical upgrade...".
It looks great! Hobbits at Microsoft? :)
"Windows7, There and Back Again"! LOL

четверг, 16 июля 2009 г.

От двух до пяти :)

Хорошо в краю родном - пахнет сеном и г...

Ребенок увидел первый раз в жизни кучу навоза :) Стоял как вкопанный, такую большую кучу он еше в жизни не видел :)

После знакомства с коровками, услышал как кричит петух.
Пытался его перекричать минут 10 :) Чуть не охрип :)
На помощь подключился еще один, пришлось оставить это занятие и идти с мамой дальше :)

среда, 15 июля 2009 г.

Kampfigel

video

Вот такое вот чудо наблюдал с коллегами на обеденном перерыве! Ходил, разговаривал по телефону, вдруг из кустов выкатилась эта парочка и давай друг-дружке бока мять! Вроде лето, а не весна. Что-то они не поделили :)

понедельник, 15 июня 2009 г.

четверг, 4 июня 2009 г.

System.Windows.Media.Imaging.BitmapSource <=>System.Drawing.Bitmap

public static System.Windows.Media.Imaging.BitmapSource GetBitmapSource(System.Drawing.Bitmap bitmap)
{
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}

private System.Drawing.Bitmap GetBitmap(System.Windows.Media.Imaging.BitmapSource bitmapSource)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Windows.Media.Imaging.BmpBitmapEncoder encoder = new System.Windows.Media.Imaging.BmpBitmapEncoder();
encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bitmapSource));
encoder.Save(ms);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms);
return bitmap;
}

понедельник, 25 мая 2009 г.

Wii Sports

Решил вот попробывать бокс. Вроде получается, уложил противника пару раз в К.о.
Проснулся Павел и сразу же отобрал пульт. Не знаю как у него так получается, но мои результаты раза в два хуже! Ему 4, а мне 31... Будем махать руками дальше :)
Зато в боулинге я первый, пока!

Первый велопробег!

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

вторник, 19 мая 2009 г.

Old tricks: The way to use member function for C-style callback

template <class T> class Thunk
{
BYTE asm86[12];
public:
typedef void (__stdcall T::*ThunkType)();

void InitThunk(ThunkType method, const T *pthis)
{
union uPtr { BYTE *byte; DWORD *dword; ThunkType method; };

uPtr pAsm86;
pAsm86.byte = asm86;
uPtr pFn;
pFn.method = method;

*pAsm86.byte++ = 0x58; //pop eax
*pAsm86.byte++ = 0x68; //push pthis
*pAsm86.dword++ = (DWORD)pthis;
*pAsm86.byte++ = 0x50; //push eax
*pAsm86.byte++ = 0xE9; //jmp method
*pAsm86.dword++ = (DWORD)pFn.dword - (DWORD)(this+1);

//This function is valid only on multiprocessor computers.
//FlushInstructionCache(GetCurrentProcess(), this, sizeof(*this));
}

FARPROC GetThunk() const
{
return (FARPROC)this;
}
};
class Window : private Thunk<Window>
{
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
public:
Window()
{
InitThunk((Thunk<Window>::ThunkType)WindowProc,this);
WNDCLASSEX wc;
wc.lpfnWndProc=(WNDPROC)GetThunk();
}
};

среда, 13 мая 2009 г.

Этот пост огорчит Вашего Кота :)

Вчера попал в 18 километровую пробку. По радио сказали, что произошла сильная авария. Когда доехали до места аварии, разбитых машин уже не было, но дорогу старательно отмывали от... песочка для котячих туалетов! Видимо вывалилось из грузовика. Это всеравно, что тушить Памперсы :) На обратном пути, через 3 часа, дорожная служба все еще отдирала дорогу!

P.S. "Повезло" прочувствовать аквапланинг :( на 140км/ч при перестроении. На Quattro такого никогда не было! >:-(

пятница, 24 апреля 2009 г.

Read a file into a string

 {
std::ifstream f("infile.txt");
//std::ostrstream oss; // deprecated
std::ostringstream oss;
std::string s;
oss << f.rdbuf();
s = oss.str();
std::cout << s << std::endl;
}
{
std::filebuf fb;
fb.open ("infile.txt",std::ios::in);

std::ostringstream oss;
oss << &fb;

std::cout << oss.str() << std::endl;

fb.close();
}

четверг, 23 апреля 2009 г.

Автоматической проверки не будет...

Этот пример компилируется без проблем.
template <class T>
class Foo
{
void bar ()
{
T t;
t.foo_bar();
}

void foo ()
{
cout << "yay!\n";
}
};

int main ()
{
Foo<int> f; //!
f.foo();
}


kompiliert ohne probleme.

das problem mit dem typen-check löst sich erst in C++0x mit concepts. das einzige, was wir jetzt zur verfügung haben, wäre die explizite instanziierung - und das lässt sich nicht automatisieren.
http://www.c-plusplus.de/forum/viewtopic-var-p-is-1579845.html#1579845

среда, 22 апреля 2009 г.

Stream Manipulators and Iterators in C++

По следам статьи:
Stream Manipulators and Iterators in C++ на www.informit.com

#1 Standard Inserter
#include <iostream>
#include <iomanip>

using namespace std;

void fb( ios_base& os, int l )
{
ostream *pos = dynamic_cast<ostream*>(&os);
if (pos)
{
for( int i=0; i < l; i++ )
(*pos) << ' ';
};
}

_Smanip<int>
__cdecl fillblank(int no)
{
return (_Smanip<int>(&fb, no));
}

int main( )
{
cout << "10 blanks follow" << fillblank( 10 ) << ".\n";
}


#2.0 Custom Inserter
template<class _Tm>
struct omanip
{
typedef std::ostream & (__cdecl *t_pf)(std::ostream&, const _Tm&);

omanip(t_pf _pf, _Tm _A) : _pf(_pf), _Manarg(_A) {}

friend std::ostream& operator<<(std::ostream& s, omanip & sm)
{ (*sm._pf)(s,sm._Manarg); return s; }

t_pf _pf;
_Tm _Manarg;
};

std::ostream& setspaces(std::ostream &Out, const int &NumSpaces)
{
int CurrentWidth;
CurrentWidth = Out.width();
Out << std::setw(NumSpaces) << " ";
Out << std::setw(CurrentWidth);
return(Out);
}

omanip<int> spaces(int NumSpaces)
{
return omanip<int> (&setspaces, NumSpaces);
}

int main( )
{
cout << "12:20" << spaces(11) << "13:35" << spaces(4) << endl;
}


#2.1 Custom Inserter
struct fillpair {
char ch;
int cch;
};

std::ostream& fp( std::ostream& os, const fillpair &fp )
{
for ( int c = 0; c < fp.cch; c++ ) {
os << fp.ch;
}
return os;
}

omanip<fillpair> fill( char ch, int cch )
{
fillpair pair;

pair.cch = cch;
pair.ch = ch;
return omanip<fillpair>( fp, pair );
}

int main( )
{
cout << "10 dots coming" << fill( '.', 10 ) << "done" << endl;
}


#3 Binary read/write
template < typename T >
struct _binary_data {
_binary_data(T& val) : pValue(&val) { }
T* pValue;
};

template < typename T >
_binary_data<T> binary(T &val) {
return _binary_data<T>(val);
}

template < typename T >
std::ostream& operator<<(std::ostream &os, const _binary_data<T> &bin) {
os.write(reinterpret_cast<const char*>(bin.pValue), sizeof(T));
return os;
}

template < typename T >
std::istream& operator>>(std::istream &is, _binary_data<T> &bin) {
is.read(reinterpret_cast<char*>(bin.pValue), sizeof(T));
return is;
}
int Write(std::ostream& out )
{
...
out << binary(m_A);
out << binary(m_B);
out << binary(m_C);
}

int Read(std::istream& in)
{
...
in >> binary(m_A);
in >> binary(m_B);
in >> binary(m_C);
}

среда, 25 марта 2009 г.

While not eof

// Read until the end of the file
// The last loading line may be skipped if it has no <cr><lf> at the end
while(!std::getline(inFile, s).eof())
...

This version is better. It will read all lines and the last one also.
// Read until the end of the file
while(std::getline(inFile, s))
...

среда, 11 февраля 2009 г.

Problem with a Meyers Singleton

Для начала напомним как выглядит этот Meyers Singleton:


// singleton.h
#ifndef __SINGLETON_H
#define __SINGLETON_H

template <class T>
class Singleton
{
public:
static T& Instance() {
static T _instance;
return _instance;
}
private:
Singleton(); // ctor hidden
~Singleton(); // dtor hidden
Singleton(Singleton const&); // copy ctor hidden
Singleton& operator=(Singleton const&); // assign op hidden
};

#endif
// eof


Но есть у меня один класс, который наотрез отказывается с ним работать! Но только в Release сборке! Instance() возвращает два разных обьекта!
Зато прекрасно работает с таким вариантом:

template <class T> class Singleton
{
protected:
static T _instance;

public:
static T& instance()
{
return _instance;
}

private:
Singleton();
~Singleton();
Singleton(Singleton const&); // copy ctor hidden
Singleton& operator=(Singleton const&); // assign or hidden
};

template<class T> T Singleton<T>::_instance;


Интересная статья с интересными линками.

И еще кое-что:
Singleton Class Private Constructor, C# Singleton Class, and More
Paul DiLascia

Singleton classes are even easier in C# than they are in C++ because the .NET Framework has the notion of singletons built in. Here's the C# Singleton pattern distilled:

sealed class Singleton
{
private Singleton() { }
public static readonly Singleton
TheInstance = new Singleton();
}

среда, 4 февраля 2009 г.

От двух до пяти :)

Блохматик - Блокнотик
Висилички - Косички
Роган - Олень
Одноглазовая труба - Подзорная труба

Совсем странное:
казмиек - морской конек (может быть "козмеёк" = конек + змейка)

"Папа! Давай повеселеем!" :)

Стих:
"Аты-баты, шли солдаты!
С молоком и крендельком!" - самое лучшее!!!

понедельник, 26 января 2009 г.

LockingPtr and volatile - Multithreaded Programmer's Best Friends

There is a great article of Andrei Alexandrescu "volatile - Multithreaded Programmer's Best Friend" (russian version).

Here it is! Our Smart Friend:
template <typename T, typename Mutex = CSyncObject>
class LockingPtr
{
public:
// Constructors/destructors
LockingPtr(volatile T& obj, Mutex& mtx)
: pObj_(const_cast<T*>(&obj)),
pMtx_(&mtx)
{
mtx.Lock();
}
~LockingPtr()
{
pMtx_->Unlock();
}

// Pointer behavior
T& operator* () { return *pObj_; }
T* operator->() { return pObj_; }

private:
T* pObj_;
Mutex* pMtx_;
LockingPtr(const LockingPtr&);
LockingPtr& operator=(const LockingPtr&);
};


"In spite of its simplicity, LockingPtr is a very useful aid in writing correct multithreaded code. You should define objects that are shared between threads as volatile and never use const_cast with them — always use LockingPtr automatic objects."

Here is an example:
bRes = Write(strParams);
if (bRes)
{
tmTimer.Begin();
stWait( (bRes = sName[LD_Printer] == strReceived) ||
(bTimeout = tmTimer.isTimeout(_Settings.dwTimeout) == TRUE ) );

{
LockingPtr<TStringList> lpDocCVS(_DocCVS, _csLock);
if (!lpDocCVS->empty())
lpDocCVS->pop_front();
}

if (!bRes && bTimeout)
{
_Log.TWriteLn("!! TIMEOUT !!");
}
}

33 Коровы по почте !!!


Получил на днях вот такое вот письмо! Реклама, но порадовала. Странно что письмо пришло на адрес, где я уже не живу почти 4 года. Все чудесатее и чудесатее (ц)Алиса в Зазеркалье

пятница, 23 января 2009 г.

Мелочь, а приятно :)

Возвращались вчера от заказчика и заехали в БургерКинг перекусить. Расплачиваясь, показал своему немецкому коллеге украинские 10 гривен и 2 гривны. Он поинтересовался сколько это в евро. Переварив ответ, выдал фразу:
- Мне кажется, что бумажные деньги удобнее чем мелочь!

То что есть еще и копейки, я ему уже не рассказывал :)

вторник, 20 января 2009 г.

Мама мыла раму...

После попытки написать что-то осмысленное в своем блоге, понял, что с письменной речью и грамматикой у меня нелады :(

Грабли::TerminateThread and memory allocating/deallocating deadlock

Do you remember this piece of code? Looks it similar to you?

void operator delete(
void *pUserData
)
{
_CrtMemBlockHeader * pHead;

RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));

if (pUserData == NULL)
return;

_mlock(_HEAP_LOCK); /* block other threads */ <--- Here it hangs !!!
__TRY
/* get a pointer to memory block header */
pHead = pHdr(pUserData);

/* verify block type*/
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

_free_dbg( pUserData, pHead->nBlockUse );

__FINALLY
_munlock(_HEAP_LOCK); /* release other threads */
__END_TRY_FINALLY

return;
}


If you'll kill a thread in the wrong moment after _mlock(_HEAP_LOCK) but before _munlock(_HEAP_LOCK) the next call of a function that uses _HEAP_LOCK will hang!

I've spent a lot of time to find this out...

Some more info:
Improving Performance with Thread-Private Heaps by Kevin Manley

Jochen Kalmbach writes in his blog about this problem also:
Why you should never call Suspend/TerminateThread (Part I)
Why you should never call Suspend/TerminateThread (Part II)