Monday, August 17, 2009

D.Jordan, A. Wiest - Atlas II Wojny Światowej

Po wielu latach niezrozumiałej posuchy w temacie, doczekaliśmy się w końcu wydania na rodzimym rynku atlasu historycznego w całości poświęconego II wojnie światowej. Dotychczas takiej pozycji w języku polskim po prostu nie było, co jest dość dziwne zważywszy na fakt, że podobnych publikacji ukazało na Zachodzie co najmniej kilka; sam posiłkowałem się dotąd anglojęzycznym atlasem "Atlas of World War II" R. Natkiel'a (który nota bene - podobnie jak kilka innych atlasów - można sprowadzić za bardzo rozsądne pieniądze za pośrednictwem internetowego sklepu Empik).

Atlas autorstwa Davida Jordan'a i Andrew Wiest'a wydało w naszym kraju mało chyba znane Wydawnictwo Dragon (ja, przyznam się, usłyszałem o nim po raz pierwszy) - i chwała im za to! Atlas już na pierwszy rzut oka sprawia bardzo dobre wrażenie, a pobieżne nawet jego przejrzenie wywoła zapewne szeroki uśmiech u każdego miłośnika historii II wojny światowej. Książka ma format nieco większy niż A4, twardą obwolutę, liczy 256 stron i wydrukowana została na porządnym, kredowym papierze. Jeśli chodzi o zawartość, to atlas zawiera 160 kolorowych map i obejmuje okres od wybuchu wojny (gwoli ścisłości: kilka stron poświęcono też na omówienie uwarunkowań, które do wojny doprowadziły), zapoczątkowanego napaścią na Polskę, do upadku Japonii. Całość podzielona jest na kilka części, wedle teatrów działań wojennych. Mapy ilustrują przebieg poszczególnych kampanii, rozmieszczenie i ruchy wojsk, linie frontu itp. - czyli to wszystko, czego po takiej publikacji należało by się spodziewać. Są do tego bardzo przejrzyste. W większości zostały wykonane w dużej skali (1 cm = 50km lub 1 cm = 100 km), ale znalazło się kilka wyjątków (m.in. bitwa o Stalingrad, atak na Pearl Harbor, powstanie warszawskie, operacja Market-Garden), gdzie są dużo bardziej szczegółowe.

Obok map, pokaźną część atlasu zajmują teksty opisujące przebieg poszczególnych operacji. Tu także należy się plus dla autorów, bo w przeciwieństwie do innych publikacji starających się przedstawić II wojnę światową "w pigułce", tutaj faktycznie udało się dość zwięźle i rzeczowo przedstawić kwintesencję opisywanych działań. Całości dopełniają fotografie, które na szczęście nie zabierają zbyt wiele cennego miejsca. Piszę "na szczęście", gdyż nie fotografie i nie treść stanowią o wartości tej pozycji (od tego mamy już całą masę książek), ale wspomniane mapy.

Gdybym miał wskazać jakieś minusy i do czegoś się doczepić, to nie będzie tego wiele: pozbyłbym się całkowicie fotografii i skrócił opisy kampanii a w zamian dołożył więcej map. I to w zasadzie tyle. Nie podejmuję się oceniać merytorycznej strony tej publikacji i tego, czy są w niej jakieś błędy rzeczowe lub inne uchybienia z dwóch powodów: po pierwsze - ponieważ atlas nabyłem niedawno i było zbyt mało czasu, by coś takiego wychwycić, po drugie - moja wiedza jest ciągle zbyt skromna, bym mógł doszukiwać się nieścisłości... Podsumowując - pozycja godna polecenia i na razie nie mająca na naszym rynku konkurencji, do tego dostępna za rozsądną cenę (ok. 69 zł). Zdecydowanie brać.

Sunday, August 16, 2009

Upcoming QComicBook changes

A new bugfix release of QComicBook (0.4.2) is on the way and should be available soon. In the meantime I'm working hard on some under-the-hood changes that will debut later around version 0.4.3. These are mainly internal changes that affect building process and maintability, so do not expect any "big" features yet. Two main improvements are:
  • Introducing .ui (QtDesigner) form files for dialogs and windows - it just became too cumbersome to maintain and extend the existing hard-coded dialogs. Working with QtDesigner 4.x is a real joy and it is actually very easy to refactor existing classes to use uic-generated forms: just design them with QtDesigner reusing existing object names, inherit from generated classes, call setupUI() and you're done :).
  • Switching from autotools hell to cmake - CMake is so much easier, cleaner and nicer tool... It took me around 3 hours to switch QComicBook to CMake with no prior knowledge of this tool - just having a sample CMakeLists.txt from other project and cmake man pages... This speaks for itself...
Some other internal changes that have high priority on my TODO list:
  • refactor archive handling subsystem with strategies (policies) for handling various archive types.
  • refactor image and thumbnail loading/caching for better cooperation; I'm not happy with it's current design.

Tuesday, August 11, 2009

QComicBook 0.4.1

After almost two years of silence I've finally released a new version of QComicBook. There isn't much to be proud of this time, just bugfixes. Changelog for this release:
  • fixed freezing when unpacking some archives (in particular zip)
  • fixed crash when opening archives via 'Recently opened' menu
  • thumbnails are now saved with sha1-hashed file names
  • updated autoconf bnv_have_qt macro
  • Qt>=4.3.0 is required from now
  • internal cleanups

Monday, August 10, 2009

Ubuntu security?

I've recently noticed a security update for git-core in Debian stable/testing/unstable, which fixes a denial of service bug in the git-daemon. Debian got the fix on Jul 25th.
Fedora 11 folks were even more responsive by releasing an update on Jun 23rd (!). How about Ubuntu I hear you asking. Guess what... no update so far. I bet the bug applies to Ubuntu as well: Jaunty uses git-core 1.6.0.4; for Debian sid it was fixed with version 1.6.3.3-1. Fedora users got git-1.6.2.5. Wake up, Ubuntu Security team!

Saturday, August 8, 2009

Qt4: don't mix waitForFinished() with processEvents()

I had received a few claims about QComicBook hanging when unpacking some cbr archives in the past, but could not confirm the problem till now. I've just received a nice bug report for this issue - with a sample .zip archive that reproduces the bug. It looks like it's not a good idea to mix QProcess::waitForFinished(-1) with QApplication::processEvents(). The problem manifests itself if you do the following:
  • start a process (an external command)
  • wait for exit with waitForFinished(-1)(which blocks until process exits)
  • capture the output with a QProcess::readyReadStandardOutput() signal handler
  • the signal handler calls QApplication::processEvents()
waitForFinished(-1) may then block forever.

The problem has already been reported on Ubuntu's Launchpad as well as in QtSoftware bugtracker. Unfortunately, it seems there is no solution, it won't be fixed in Qt library and should be avoided... The workaround I implemented for QComicBook-0.4.1 (to be released soon) is a busy-loop around waitForFinished(1000) (i.e. 1 second) and processState() calls. Not the nicest solution, but it seems to work fine and I can still use processEvents() to provide progress bar updates when unpacking archives.