Many updates today!

My GPR (underlined)Today I finally released the Google Page Rank project (a Qt library extension and command line tool) as well as the iplock firewall tool.

I also created a page for the new project: libQtSerialization which is an XML serialization of data available in classes in a "compressed" way.

Google Page Rank

This library is written in C++ and works with the Qt framework. It captures the rank of your website pages and returns the result (or -1 if the page is not indexed by Google.)

The project includes a command line tool as an example of usage. That tool uses the library in a synchronous way since it would otherwise exit without giving you the answer! However, the Qt framework is used and can return the Page Rank to your application in a completely asynchronous manner.

iplock firewal tool

iplock logo (a crossed hammer)Ever wondered how you could block a hacker from accessing your server in realtime?

Say you have a website and detect that the current user accessing your website checks a path such as /wp-admin/. If you're not using WordPress, then that link just cannot exist anywhere so the person accessing your server is... not a person. It's a robot attempting to log in your Wordpress account. At that point you know that the robot can be blocked, at least temporarily to avoid any other hacks from happening. This is done by adding the IP address of the robot to your firewall.

iplock does that for you and without the need for your website application to have root permissions (some people run PHP with SUID set!?) With this tool you can simple run a command line with the IP address of the user and it will automatically be locked for as long as you don't remove (unblock) that IP address from your firewall.


Qt Serialization logoFor Snap! C++ we needed to have a way to save small buffers of data in the Cassandra database. There are several problems to be concerned about here:

1) The data should be saved and loaded by the software in an efficient manner:

1.a) The data should remain as small as possible (avoiding large disk accesses and network transfers)

1.b) The data should be fast to generate (no complex transformation before saving)

1.c) The data should be fast to reload (no complex transformation as we're loading)

2) The loading must work accross versions

2.a) Older versions of the software must be capable of reading newer version of the data

2.b) Newer versions of the software must be capable of reading older version of the data

Point (2) means that the load capability must seemlessly load any version of the data. This is very important since we may want to update our servers but not all at the same time. In other words, a new server will generate new data before all the old servers get updated and thus any old server may end up having to read new data and it must be capable of moving on with it.

Obviously, an older server will not know what to do with new fields in a structure. These get dropped, but at least the older servers continue to function. Also, old fields may get dropped. Newer version will automatically ignore those fields. Similarly, new features such as support for new tags is automatically handled.

The basic format used is XML in text, however, it really is only a very small sub-set of the full XML format (i.e. two tags, four attributes and data between tags, that's it!)

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly