Snap! Websites Projects

The Snap! Websites project makes use of a few other projects that are also listed here.

All of these projects are maintained and supported by us so feel free to contact us if you have any problem or question. For contact information, check out the projects each has its own contact information.

All of the projects offered here are also available on launchpad (packages)

All our projects are documented, some have a separate reference found in the list of References of Snap! Websites Projects.

  • Introduction

    This project is an advanced getopt() class to use with your C++ projects. It handles most everything that GNU-like tools offer as far as command line options go.

    The main concept is for you to have as little to do as possible to parse your command line arguments. The library expects a table of available options with a short and long version of the options, and whether they accept arguments (i.e. -f <filename>).

    In your C++ program you can then just check whether a parameter is defined or not with the is_defined() and get the value as a string, an integer, etc. as ...

  • as2js compiler

    The as2js compiler and library is used to convert C++ like scripts in JavaScript that will run in your browsers. The name comes ActionScript which is an extension of the ECMAScript language used by Flash Adobe that offers real classes, interfaces, and a complete system environment, contrary to browsers that only offer prototypes which are difficult to work with for most users.

    Current status: in development... we are fixing problems by writing a complete test suite with 100% coverage whenever possible. You can find the status of the coverage and tests below.

    The source code compiles, but most certainly does not work as expected yet. You can find it on here:

  • Introduction

    libaddr is an easy to use C++ library that parses IP addresses to objects. This includes parsing one or more IPv4 and IPv6 addresses, with a port or a CIDR mask.

  • Introduction

    We created a graphical based tool to check out a Cassandra database. Because of the possible cheer size of a Cassandra database, the tool is somewhat limited. At this time it will only really work well on smaller database, This is particularly practical for development when you test new things and want to make sure that the database includes the data that you expect of your tool.

  • To Never Forget Initializing Your C++ Variables

    Controlled VariablesThe controlled_vars.h and other header files are C++ templates, that gives you the ability to control the initialization of your basic C types (i.e. char, int, long long, etc.)

    Especially, it allows you to avoid forgetting the initialization of variable members since these variables cannot be initialized where declared1. Classes are here to help you and they do a great job at this, even for basic types such as char, int, and long variables. Really! My main C++ bugs came from forgetting the initialization of variable members and this is the reason why I created these headers.

    Controlled Variables can actually be used anywhere you declare a basic type variable without immediately initializing it (and limited controlled variables anywhere a bounded value is used.)

    • 1. I see you coming here... Yes you can initialize variable members, but I declare my variables in my header file (.h) and I then go to my constructor in the code file (.cpp). Guess what... when I first create the class, I think about it. When I update the class later, I forget because I'm working on a function that is not the constructor. Not only that, if my class has three constructors, I'm not unlikely to think of adding the variable to one of them and not the other two! Frankly, this happens to everyone... Using this header is a life saver. Many countless hours of debugging time can be saved just by consistently using Controlled Variables.
  • csspp

    CSS Preprocessor (csspp) is a scripting language that transforms advanced (extended) CSS code into a script that browsers can read.

    The input to csspp can be the same as standard CSS, or it can use extensions as described below such as using basic math, embedding rules in other rules (cascading by nesting) and many other things.

    The project offers a C++ library that can readily be used in your own C++ project and a command line tool.

    Status: version 1.0.10 released.

    I have go a complete csspp command line to compile your CSS or SCSS files to one of 4 available formats.


  • Hammer with a forbidden sign on top.The iplock tool is a very simple executable used to add or remove IP addresses to your iptables firewall to protect your services such as Apache and Postfix.

    The tool reads a configuration file (/etc/network/iplock.conf) where iptables commands and ports are defined. It is used by the tool to generate the iptables commands to run in order to block or unblock a set of IP addresses.

  • A C++ library to access Cassandra servers

    libQtCassandra LogoThe libQtCassandra library is an advanced C++ library used to access Cassandra servers in C++.

    Contrary to the basic Cassadra server interface, this C++ library brings you separate objects that handle each level of the server data, i.e. the cluster, contexts, table, rows, cells.

    Details for developers can be found on the reference pages (a 100% complete Doxygen documentation of the library including source code and working examples.)

  • Serialization Made Easy with Qt

    Qt Serialization logoThe libQtSerialization library is a Qt extension that makes it really easy to serialize your data in a forward and backward compatible way1.

    The library is composed of two sides: the QWriter which helps you serialize data, and the QReader that helps you unserialize data.

    • 1. Being foward and backward compatible means you should be able to load your serialized data from newer and older versions of your software without having to tweak the serialized data before hand.
  • Introduction

    Snap! comes with many different projects, all of which need a common set of cmake rules and some of those are rather complex. For that reason we created a common project used to compile all of those projects. This project is the Snap! CMake Modules.


    At this point this project is available as source on our git repository at or as a Debian package on Launch PAD.

    sudo add-apt-repository ppa:snapcpp/ppa
    sudo apt-get update
    sudo apt-get install snapcmakemodules


    You got a problem with the scripts? An idea to improve them? Please post a ...

  • Introduction

    WARNING: We are in the process of replacing this tool with snapmanager.cgi and snapmanagerdaemon which together allow an administrator to manage his cluster of computers. We already installed a 12 computer cluster with these two tools. At this time, the snapmanager is still necessary to setup the domains and websites tables, but that too will be converted to an interface accessible through snapmanager.cgi.

    The Snap! Manager graphical tool was created in order to setup the basics in the database. This is important because without those basics snapcgi and snapserver do not know ...

  • Snap! LogoThis is the project page of the Snap! Websites CMS. It is here to give you basic information about the project. This website as a whole represents the Snap! Websites project and includes all the details you need.

    At some point the source code will be made available on so you will be able to compile it on your own system. Note that it has many dependencies, some of which are not available as is in your Debian or Ubuntu repository. They should appear as time passes, but at this time you will have to do a lot of manual work to get the first binary going.

    Ubuntu Installation Instructions

  • Introduction

    The libtld is a library used to extract the TLD from a URI. This allows you to extract the exact domain name, sub-domains, and all the TLD (top level, second level, third level, etc.)

    The problem with TLDs is that you cannot know where the domain starts. Some domains can use one top-level domain, others use two, etc. However, it may be useful to know where the domain is to have the exact list of sub-domains. For example, if you want to force www. at the start of the domain name if no other sub-domains are specified, then you need to know exactly how many TLD are defined in a ...

Syndicate content

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

Contact Us Directly