Snap! Websites
An Open Source CMS System in C++
We maintain the Zipios library. This is a C++ library one can use to read or create 32 bit zip files. The advantage of this library is that it offers standard C++ streams to copy the data. The main stream gives you information about each file and you can create a sub-stream for each one of those files. The input is automatically compressed and the output automatically decompressed.
Chapter 7. Mutal Exclusion — Lamport's solution, also called the Bakery Algorithm (p. 130)
The snaplock project is part of the snapwebsites environment. It is a daemon written in C++ allowing you to lock various resources on an entire cluster of computers for a small amount of time. A resource has a URL which is what we use to create the lock (we call it the Object Name.) The URL can be global to the whole cluster, specific to a website, or even specific to one special variable in a specific page of a specific website (in other words, very small granularity is ...
snaprfs is a daemon used to replicate files between computers on your Snap! cluster.
This is somewhat similar to what Hadoop is expected to do.
There are several capabilities as described below.
Keep a directory synchronized by copying the newest version of a file to all the other computers that do not already have it.
This is used to keep definitions in synchronization.
snaprfs keeps the files meta data in place (i.e. stat(3) information, especially the modification time) so it can detect whether one of the files on a computer is ...
libaddr is an easy to use C++ library that parses IP & Unix addresses to C++ objects. This includes parsing one or more IPv4 and IPv6 addresses, with a port or a CIDR mask and the latest also supports real or abstract paths to Unix addresses.
The library also includes functions to list interfaces (i.e. "eth0", "eth1", etc.) and your route tables (see route(8).) The library actually includes a tool, ipv4_routes, one can use to list routes as the libaddr sees them.
The existing parser has limits since it is streaming the input characters instead of converting the input to tokens that can be managed. However, it is still much more powerful than what the default C library functions offer.
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.
The as2js compiler and library is used to convert C++ like scripts in JavaScript that will run in your browsers. The name comes "AlexScript to JavaScript" as the system is used to transcode an advanced version of JavaScript to a version that browsers can execute. Our version includes full support for classes, interfaces, and a complete system environment, contrary to browsers that have many limits (although since version 6, browsers also support classes).
Current status: the trascoder is still in development... I have a version that compiles to binary which is used by the Prinbee system. 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 here:
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.
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 ...
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 idea is for you to have as little to do as possible parsing your command line arguments and configuration files. 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 the just check whether a parameter is defined or not with the is_defined() function and get the value as a ...
The iplock tool is a very simple to use executable used to add or remove IP addresses to your iptables firewall to protect your services such as Apache and Postfix and all local systems.
The tool reads a set of configuration files under /etc/iplock/... 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.
The current version supports any number of configurations that can apply blocks in any number of firewall chains. The default offers blocks for specific sets of ports as defined by:
Snap! Websites
An Open Source CMS System in C++