Posts by: Tamás Bolner
While most diatonic chord progressions are based on the relations of the roots, some chromatic progressions can be thought as movements of voices. 1. If we have a minor triad in root position, and we move the 1st down and the 5th up by a semitone, then we get a minor triad in 6/3 position, and the root of the new chord is below the old one by a major third. Let`s see an example in D minor. The chords are: Dm, Bbm, F#m, Dm. The semitone movements are repeated 3 times, to get back to Dm, because 3×4 =
Making matrix representations of graphs always takes a lot of time. For practicing algebraic or spectral graph theory on computer algebra systems, one has to create a lot of graphs. A handy tool can make this easy, which allows to draw graphs and generate code e.g. for Maple with one click. Well I couldn’t find a tool like that, so I made one on the weekend in C#. With it, you can draw custom graphs, including: arbitrary loops, parallel edges, directed edges, etc. and can generate code for these computer algebra systems: Maple, MATLAB, Maxima. Then the code can be
When raising exceptions it is good to make their error texts as detailed as possible. Usually this isn’t an easy task, cause it involves type conversions and string operations. This is why I’ve implemented this class, which can be instantiated by printf-like parameters as easily as this line: throw(new FException("Invalid tag: ‘%s’. At line: %d.", tag, line));
Final position of the one and only Botvinnik – Fischer game (1962). Click on the image to enlarge. Analyzed the position with the 64 bit Rybka 3, and even after the depth of 39 moves it still can’t see that this is a draw. I wonder how many moves would reveal this draw for a chess program. It is really hard to estimate. The program tries every variation without repeating a position 3 times – because that means draw by the laws – and without any exchange, because that would also lead to draw in this situation, if white keeps
In the past few days I have been reading a nice book about graph theory, including solving the exercises in it. Once I encountered an exercise which I couldn’t solve, so made a little research, and found that the solution is the proof of the Turán’s theorem. The usual proof for this theorem is built on induction, but later I have found a proof which is using a basic inequality. I am sure that I’m not the first one who have seen this solution, although I couldn’t find it on the net yet.
The Intel Threading Building Blocks library (TBB) is a useful cross-platform C++ library, which contains many high and low level tools for developing multi-threaded applications. One feature I required but couldn’t find in TBB is a class similar to AutoResetEvent in the .NET framework. That class allows simple synchronization of two threads. One of them is waiting the event to be triggered, while the other triggers the event at a point. I have implemented this class in C++, using atomic operations from TBB, which guaranties that if the two threads are running on different cores, then their caches get synced