Snap! Websites

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 SourceForge.net 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

TLD Library (libtld)

Introduction

The libtld is a C/C++ library used to extract the TLD from a URI. This allows you to extract the exact domain name, sub-domains, and all the TLDs (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, three, etc. (up to five at this time). 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 ...

Controlled Vars

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.

libQtCassandra

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.)

What's Snap! Websites?

Snap! Websites run your CMS using binary code written in C and C++. (We use some libraries that are written in C, all of our server code is written in C++.)

The basic concept is taken from a large set of Drupal 6.x modules from Drupal Core and necessary 3rd party modules (we've been using over 220 modules on top of the Core modules.) The result is quite extensible as it offers a plug-in mechanism that everyone is welcome to use to create their own extensions.

The Implementation book lists all the features we're considering implementing in our C++ ...

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

Contact Us Directly