Sunday, April 29, 2007

Updating AVG Free antivirus

i've been using AVG Free antivirus for quite a while now, and i quite like it. i have a habit of updating it online instead of downloading the updates and applying them manually, so when anyone asked me if i had updates i always answered that i didn't.
recently, however, i needed to do something in my registry, and saw something related to AVG updates there. i didn't pay it too much attention until i wanted to update a fresh install of AVG Free on two computers (my brother's, which rarely goes online, and mine).
i was going to update mine online then manually download the updates, when i realized: the updates had to go somewhere before they were applied, so i started searching. i found the update files at C:\Documents and Settings\All Users\Application Data\Grisoft\Avg7Data\upd7bin. Best of all, the update files weren't deleted when they were applied (note: some people will see this as an annoyance), so i could use them for my brother's computer!
Guess we learn something new everyday.

Saturday, April 28, 2007


i found that i didn't list all the changes i made to the IBPP source file _ibpp.cpp in my last post. plus, i'd only been using it for release build of my projects in Visual C++ 2005 Express edition - until today when i started a project in debug mode - and found i got some compile errors. so, here's the comprehensive list of changes i made to the original source file to compile with a Unicode character set, without further ado. i really should upload the file, but since i have no place to put it...

  • Line 44: from #define REG_KEY_ROOT_INSTANCES "SOFTWARE\\Firebird Project\\Firebird Server\\Instances" to #define REG_KEY_ROOT_INSTANCES TEXT("SOFTWARE\\Firebird Project\\Firebird Server\\Instances")
  • Line 45: from #define FB_DEFAULT_INSTANCE "DefaultInstance" to #define FB_DEFAULT_INSTANCE TEXT("DefaultInstance")
  • Line 87: from ::OutputDebugString(("IBPP: " + p->str() + "\n").c_str()); to ::OutputDebugString((const TCHAR *) ("IBPP: " + p->str() + "\n").c_str());
all other changes remain the same as in my previous post - did you really think i'd want to duplicate effort? Note: as in my previous post, you may want to use a safer way of getting things done than a cast on line 87.

a word of note here: i finally looked through the sources for Flamerobin 0.7.6 sources and there were no changes to the IBPP source. i have no idea how they managed to get it to build under Windows/Unicode. i haven't tried building it myself, nor am i likely to (according to Larry Wall, the creator of Perl, programmers are inordinately lazy. and i intend becoming an excellent programmer).


there's a classic saying: "A journey of a thousand miles begins with one step". it's old, but good wisdom, especially for young people today. we usually think of it as meaning that you need to at least begin something to have a final accomplishment, but we (or at least i) don't usually think of it in the negative, as in: if you don't want to swim with the sharks, don't even go near the beach. so if you start a journey on the road to Rome ("all roads lead to Rome"), you'll eventually get there, so don't start if you don't want the natural result.

far too often, we toy with decisions and actions, ignoring their natural outcomes, maybe subconsciously thinking we can get away with it. think again - you can't sidestep the natural outcomes of your actions forever. sooner or later, the results will come home to roost. and postponing decisions belongs here too - you cannot sit on the fence forever - eventually, the fence itself will probably give up under the influence of your weight. in our ultra-relativistic generation, maybe facing the fact that absolutes do exist may just be our salvation.

Wednesday, April 25, 2007

stuff n nonsense

broke my wxWidgets install yesterday when i reconfigured the build. it seems wxWidgets becomes a radically different and undocumented animal when you build it with some settings (such as STL and using std::string) turned on. anyhow, i tried rebuilding it to no avail - it was still broke. so right now i'm uncompressing the wxWidgets 2.8 distribution to rebuild it. kinda sucky, isn't it?

in other news, i found i am unable to build Boost from source with Visualc C++ 2005 Express. the build script (build.bat) is not designed to work with any toolset other than VC++ 7, and it's really annoying that i have to go online and download a prebuilt Jam binary. of course, code that depends on Boost and its build process (like the ASL) also doesn't build. sheesh!

finally, to use IBPP under both ANSI/Unicode in Windows, you're going to have to patch the file _ibpp.cpp. i tried a number of hacks that failed, but i finally got someting working, so here it is for version 2.5:

  • Line 111: change char fbdll[MAX_PATH]; to TCHAR fbdll[MAX_PATH];
  • Line 142: change mHandle = LoadLibrary(path.c_str()); to mHandle = LoadLibrary((const TCHAR *) path.c_str());.
    Note: There has got to be a cleaner way of doing this than just casting. Check MSDN or the Platform SDK for documentation on MultiByteToWideChar() under User Interface, International Text Display, Unicode and Character Sets.
  • Line 167: change char* p = fbdll + len; to TCHAR* p = fbdll + len;
  • Line 170: change lstrcat(fbdll, "\\fbembed.dll"); to lstrcat(fbdll, TEXT("\\fbembed.dll"));
  • Line 175: change lstrcat(fbdll, "\\fbembed.dll"); to lstrcat(fbdll, TEXT("\\fbembed.dll"));
  • Line 194: change lstrcat(fbdll, "bin\\fbembed.dll"); to lstrcat(fbdll, TEXT("bin\\fbembed.dll"));
  • Line 204: change mHandle = LoadLibrary("fbclient.dll"); to mHandle = LoadLibrary(TEXT("fbclient.dll"));
  • Line 209: change mHandle = LoadLibrary("gds32.dll"); to mHandle = LoadLibrary(TEXT("gds32.dll"));
i guess that pretty much covers it. you should go from 12 errors to 0 compiling _ibpp.cpp in Unicode mode with this in Windows. personally, though i don't think this is how the Flamerobin team built the Unicode Windows binary, but i - lacking patience at the time to wade through the code for the Unicode version - just decided to fix my problems myself.

i was finally able to make some headway with learning how to use Crypto++. i'm just a simple guy who wants to hash a password, and i don't want to learn all about cryptography to do that! many thanks to the developers of Hashish for their source code, and to Denis Bider for his Crypto++ User's Guide.

besides my problems with trying to program (and ultimately succeeding), i've been delving into music a bit (at least i know what a chord is now, and can try to play scales other than C major). maybe i'll actually get into digital music someday. oh, yeah, i've also been trying to study so i can be ready for exams when school opens (only God knows when). later!

Friday, April 20, 2007

digital audio stuff

since i got home, i've dabbled into quite a few things, including making my own music and pixel-based graphics. not having the cash to fork out for a program like FL Studio, even the demo download, i've had to set my sights quite a bit lower. i looked in the archives and came up with Psycle and Milkytracker, among others. Psycle is - among other things - a VST host, so you can load up VST instruments and effects into it - some with more success than others, anyway. at any rate, what i really want to say here is that i got an excellent drum machine that never seemed to work for me (JM-1) the way i wanted it to. using soundfonts was also nice, but it was kind of disconcerting to learn the keymap for producing the correct sound. anyway, i was labouring with JM-1 because it had pretty much the same problem as the drum soundfont i had: each key was assigned to a different instrument, except in my case, it was worse because i could not use the snare. and the quality produced by this machine was excellent, relatively realistic. i was almost pulling out my hair when i found out by sending a command to the machine, i could control which instrument's sound it would produce. trying it yielded some results, but i had to turn off the setting i set immediately after, or else the machine wouldn't emit any sound on the next setting. sorry i have no screenshots, but i guess i just wanted you to know what i was up to. hopefully, i won't strike anyone deaf with my twisted idea of what music is...later!

Saturday, April 14, 2007

Who stole my vote???

i realise it's bad to use 3 question marks to end a question, but i think it's important to show my discontent. what happened to my vote? this rubbish about voting at the same point that you registered is the limit. i registered in school, now that school's closed and i'm in another state, does that mean that i registered for nothing? i can't believe i waited almost 4 hours to hear a 'sorry, but you can't vote here because you never registered here - you might have if the electronic voting system was up...' - especially since all those who registered in school asked and were assured we would be able to vote in the governorship and presidential polls. arrgh!