in Action, 2006, by Noel Rappin and Robin Dunn, published by
Manning Publications. ISBN: 1932394621.
Here's an artical
interviewing Robin Dunn. Reviewed
on voidspace. Reviewed
on Slashdot by Ron Stephens.
This is a very good introduction to using wxPython to create GUI applications in Python. Currently I've read about 70% of the book and found it quite easy to follow, the examples are quite concise, but still illustrate some powerful concepts (especially the grid table in Chapter 5 and the simple drawing application in chapter 6). Source code to the examples is available from the publisher's web site, but sometimes one learns more from actually typing in some of these that just downloading and running them. That's one of the beauties of Python, you can actually type in some stuff in the Python shell window and interactively experiment with things.
Incorporating HTML into wxPython. Using PIL (Python Imaging Library) within a wxPython application.
This sort of calculation also means that if a device like a compact flash drive is used in a computer as a system disk (so it's getting log files updated and the swap partition is on the drive) then so long as the device is large enough and the average write rate is acceptable then it will have a long life - and the easiest way to assure this is to just oversize the drive a bit. So instead of using a 512MB drive for your disk-less server, installing a 2GB unit will make it last 4 times as long. 
Getting out of a sub dialog, by hitting the tab can be done by trapping the tab key and putting in some code to manually move the focus out of the dialog to another window. If you really want this behavior the best thing to do would be to override CDialog::PreTranslateMsg() to handle the tab key and then use that version of CDialog as your base class for dialogs.
Using the Spy++ tool can help understand the window tabbing order because the tabbing order is the order that windows appear in its view (i.e. the order they are constructed and chained together).
The win32 function ::GetWindow(HWND, UINT) can be used to find the first child window of a given window when UINT == GW_CHILD. It can also be used to find the first (among several) sibling windows when UINT == GW_HWNDFIRST. There is a CWnd::GetWindow() equivalent function. 
from uuid import uuid4 print uuid4()
(5*365)*(5*365)/(4*(4-1)*7) = 39650 daysor about 108 years before you had 2 drives die within the 1 week replacement window and lost your data. Alternatively you might use each drive as a simple redundant copy of some data, so if you have 3 drives you put the same data on each, then once a month you check each to see if it is still fine (perhaps you put more data on it at that time as well), then using the same conservative 5 year MTBF you would have:
(5*365)**3/(3*(3-1)*(3-2)*(31)**2) = 1,054,178 daysor 2888 years before you had all three drives die within the same 1 month window and lost your data. So it looks like just putting your important data on two or three external hard drives which you periodically test and refresh should be safe enough, and the more copies you have then safer you will be. Of course, with multiple copies you can place some of them in off site storage which will help protect against fire, theft, flood and other catastrophes.