Archive for the ‘C/C++’ Category
Statistical Tests for My Audio Based Random Number Generator
In May I’ve written about a way to generate random number from audio noise. Basically it went like this:
- Get audio sample from the microphone.
- Push the least significant bit to a buffer.
- Repeat steps 1-2 until the buffer is full (buffer size == block size for the hash function).
- Apply the hash function on the buffer.
- Get random bits from the digest.
In order to continue developing this random number generator (RNG), I’ve written a C++ class that simplifies working with it.
Read the rest of this entry »
Simple AI Engine for the Oware Game
Sometime ago I worked with a friend on building an Oware game. I was supposed to build the AI engine, and he was supposed to build the user interface to it. Unfortunately, while AI engine interface I designed and a simple alpha-beta pruning engine was implemented, the project was never completed.

Screenshot of game session
Simple Histogram Widget for wxWidgets
When working on Open Yahtzee 1.10 (or what ever I’ll call the version after 1.9), I’ve written a simple histogram widget to be part of the new statistics dialog. I should emphasize the simple part, this widget was mean to display a simple histogram without requiring any special bloated ploting libraries. It doesn’t support all the fancy stuff, just plain histogram.
I’ve figured that a simple pie plot would better serve Open Yahtzee’s needs, so unfortunately this code will not be released as part of the program. While the code is not perfect, it’s functional and serves a good example of a custom widget. So I’ve felt pity letting it fall into oblivion in Open Yahtzee’s SVN repository, and I’ve thought it might come handy to someone else (or at least for me) if it will be easily accessible.
Convert int to string (As Well As Almost Anything)
This is a little code snippet from Open Yahtzee‘s code base that converts all the built-in types and many custom classes (ones that override the << operator) to string.
template <class T> inline std::string stringify(T x) { std::ostringstream o; o << x; return o.str(); }
I first wrote it to convert ints to string, but later I templatized it so it would work with other types as well. It’s a clean elegant snippet that I thought other might find useful too.
Expanding Macros into String Constants in C
Today I came across an annoying problem, how do I expand a C macro into a string?
One of C’s preprocessor operators is the # which surrounds the token that follows it in the replacement text with double quotes (“). So, at first the solution sounds pretty simple, just define
#define STR(tok) #tokand things will work. However, there is one caveat: it will not work if passed another macro. For example,
#define BUF_LEN 100 #define STR(tok) #tok STR(BUF_LEN)
will produce after going through the preprocessor
"BUF_LEN"
instead of "100", which is undesired. This behavior is due to the C standard noting that no macro expansions should happen to token preceded by #.
However, after reconsidering the source of the problem, I’ve found the following workaround: define another macro which will expand the argument and only then call the macro which does the quoting.
#define STR_EXPAND(tok) #tok #define STR(tok) STR_EXPAND(tok) #define BUF_LEN 100 STR(BUF_LEN)
will produce
"100"
as desired.
Explanation: The STR macro calls the STR_EXPAND macro with its argument. Unlike in the first example, this time the parameter is checked for macro expansions and evaluated by the preprocessor before being passed to STR_EXPAND which quotes it, thus giving the desired behavior.
spass 1.1 – Secure Password Generator
This is a new version of my /dev/random based secure password generator – spass. The new version doesn’t have new features, it’s mainly a bug-fix release. The package now uses autotools, which means it has the standard configure script and makefile. I also fixed some typos in the help message. Overall the new version doesn’t offer anything new compared to the old one, except for easier installation.
Read the rest of this entry »
mctext 0.2 – A Markov Chain Text Generator
This is the second release of my Markov Chain text generator – mctext. This text generator takes existing sample text, and generates a new text using Markov Chains.
The main new thing in the version in that it allows the users to specify via the command line how many words should be considered when generating the next one. The bigger the step number the closer the generated text is to the original one. The value used in mctext-0.1 was 2, and this is also the default in this one. The number of steps can be set using the --steps command line switch.
Read the rest of this entry »
Setting Up OmniComplete (Autocompletion) for wxWidgets in Vim
I use Vim as my main IDE for C/C++ related development (as well as for almost all other development). If you use (or thinking about using) vim as as an IDE, you better get some good autocompletion functionality. This kind of autocompletion is provided by the OmniComplete, which is available since Vim 7.0. Just having the OmniComplete is a nice thing, but it’s much more helpful if configured properly to work with the libraries you use, such as wxWidgets. In this post I will show you how to get working the OmniComplete for wxWidgets, however, the procedure I will show can be easily adapted to almost all libraries.
Read the rest of this entry »
C’s “Goes To” Operator
Well it isn’t really an operator but this is a nice C code construct I ran into. It doesn’t seem to have any benefit except as a nice way to create a reverse loop:
int count = 100; while (count-->0) { //some work }
As I said I don’t think I’ll find any performance benefit for using this code snippet. On the other hand it is always fun to see the puzzled face other programmers have the first time they see the code.
Optimizing for Loops: Reverse Loops
for loops are basic language constructs in many languages. One of the first thing to look at when optimizing code is the loops, as they do considerable amounts of work (like going through a very large amount of data), in very little code.
If you go use for loop, but you don’t really care about the order in which the loop is executed, to be more precise, if you can afford reversing to loop, you can save quite some time. By reversing the loop I mean instead of giving the index values from 0 to 10 for example, you go from 10 downward to zero. This doesn’t seem like a big change, but when being carefully implemented this can easily upgrade the performance of your for loops.
Read the rest of this entry »
