My Own-Developed Software Products

World Tennis Tracker - informational tennis statistics software.

(click to enlarge screenshots)

World Soccer Tracker - informational football (soccer) statistics software.

(click to enlarge screenshots)

Solutions developed and used in WorldSoccerTracker and WorldTennisTracker software:

Updates and database functionality:

MDZDbObfuscate - database structure and data obfuscation
MDZUpdate - server-client update mechanism

- separation of database layer from the rest (local databases can be easily changed, for examle from SQL CE to SQLite)
- implementation of code-generator of headers/source files for database objects from underlying database structure (supports DB obfuscation)
- zip/unzip archivation of updates (using "zlib" library)

Getting statistical data from different Internet-sites using HTTP reading:

MDZHTTPReader - HTTP client implementation based on BSD sockets
MDZXMLParser - tiny and simple XML parser implementation for parsing updates and XML-feeds. Implements very fast one-directional parsing without memory copying.
MDZContainers - implementation of tiny and very fast Vector/String containers with possibility of direct memory access
- implementation of some string-metric alghoritms for matching data from different sources to each other (like Levenshtein distance, etc)

Data presentation:

MDZDataGrid - grid for data presentation
MDZHTMLRenderer - renderer of simple HTML content, that can be used in tooltips, message boxes or even in grid cells
- a lot of improvements in WTL for more attractive and convenient GUI (generalazed way of using tabs and embeded views, closing buttons on tabs, improved scrolling, some additional features with dockable views for future versions, etc)
- separation of data (classes, representing subject area like CTournament, CPlayer, CMatch, etc) from presentation (views). All core functionality (including grids for presentation of different data) is implemented using ANSI C++ and may be compiled and used also under UNIX/Linux/Android/etc
- accessing SQL Server (using ADO), SQL CE (using OLE DB), SQLite (using provided library)
- a lot of smaller tasks like MD5 algorithm implementation (for coding of data in license file), string-to-base64 and back encoding/decoding (for updates), implementation of scaling images using 8 nearest-neighbours interpolation, etc...
MDZWebSiteGenerator - HTML code generation for lightweight web site with menu and articles. An example of generated site is here: WorldTennisTracker site

Unit testing:

MDZUnitTest - very simple C++ Unit Testing framework

- all client-side solutions above are implemented in ANSI C++ and are platform-independent. The only Windows-dependent part are wrappers for GUI (WTL) access.
- solutions are implemented using limited features set of C++ (no multiple inheritance, minimized usage of inheritance/virtual functions, no exceptions/exceptions handling, RTTI/dynamic casting only in debug version, etc). Also ANSI C++ 1998 is used. It should allow easier portability of code for another platform/compiler, including mobile platforms like Android/iOS/WindowsRT on tablets.

MDZDataGrid - ActiveX and C++ library of data grid with grouping.

- columns width may be resized or columns may be exchanged using mouse dragging
- grouping/ungrouping by column
- import/export data content from/in XML
- formatting colours of rows, columns, separate cells
- inserting images in cells
- cells may contain text, link, check box, edit box, combo box
- popup menu with options
- controlling how borders of cells should be drawn
- sorting by column
- filter in column (including possibility to set multiple values as a filter)
- summation row (as a sum of all elements in column) for numerical columns

MDZDbObfuscate- database data and structure (table/field names) obfuscating solution. Allows encryption of database data/structure and access to the data from your source code in a transparent way (using non-encrypted names/queries).

- encription of table/field names and data
- there is DateTime class implemented with possibility represent data/time from 1st century till far in future using "long long" number of seconds
- building of data/structure diffs between non-encripted server databases and encripted client database and generating SQL or XML script for execution on client to sinchronize data content/structure
- transparent way of coding in source code (using non-encripted names for accessing tables/columns)

MDZUpdate - client-side software and client-server database update solution. Allows installation newer versions of software on the client during update. Also updates client database with a latest data from server. Data may be separated in products/packages with a subscription mechanism.

- PHP/MySQL server side that may be used under different available hosting types
- HTTP-based protocol implementation (queries/responses) for getting update packages from server
- possiblility to subscribe products (and get according updates which belong to subscribed products)
- possibility to update main application (for example replacing WorldTennisTracker.exe with newer version and restart)

MDZHTTPReader - implementation of socket server/client and HTTP client using BSD sockets.

- imlementation is tiny and very fast with as minimal number of memory copying as possible
- chunked transfer encoding is supported

MDZContainers - implementation of tiny and very fast Vector/String containers with possibility of direct memory access.

- UTF-8 is supported. Also conversions like UTF-8 <-> Unicode or UTF-8 <-> Windows ACP (ANSI Code Page) are implemented (using Windows-dependent MultiByteToWideChar()/WideCharToMultiByte() )
- controlled resizing. Container should be resized for subsequent filling - resizes during filling (like normal STL push_back() behaviour) are prohibited
- ANSI C++ compatibility, no exceptions, fast low-level implementation (using memcpy(), memmove(), memcmp(), etc), possibility to attach/detach content (instead of copying) and also from some offset, etc

MDZHTMLRenderer - renderer of simple HTML content, that can be used in tooltips, message boxes or even in grid cells.

MDZUnitTest - very simple C++ Unit Testing framework

- allows execution of Unit Tests functions in own threads
- several Unit Test functions may reside in a Unit Test class
- there are Setup/Teardown functions for Unit test class may be defined
- shows result of execution (succeed/failed) in a text console

See illustration here: Demo on GitHub

(click to enlarge screenshot)

Contacts: Max Dzyubenko