Development Status Not Applicable

Some pages in the book are details about a feature or combination of features. This special status is used for those pages since they are not expected to have a status per se.

See a complete list of features sorted by Snap! Websites Development Status (note that not applicable pages are not shown in that list.)

Layout Extensions

There are features that are of interest but are not otherwise available in all Browsers. Those that are not available in Internet Explorer should be built in JavaScript whenever possible.

The following are features I have found on different websites and that are not possible as is with Internet Explorer but can be achieved with the use of JavaScript.

Shadow, Glow, etc.

More and more people like to add a shadow on text. Most browsers already support shadows on boxes so no worries there, but on text, that's not supportted as is by Internet Explorer. However, IE accepts special ...

List of Useful Widgets

Details about the Widget feature.

Widgets ideas goes to infinitum since for every application you need a few specialized widgets. However, having a strong base will definitively help in getting small applications done without the need to re-implement widgets everytime.

The following is a list based on Qt widgets (since I consider that Qt works quite well for many apps.):

  • Box -- a box used to group other widgets (should support a grid like feature -- this may be what we call the layout though)
  • Button -- a widget that you can click to generate an action; it should be ...

URL Test

This page is a proof of concept more for myself than for the community although it can be useful for you to further understand the search mechanism offered by the URL.

URL Parts

The URL may include several different types of parts that are defined in detail below.

http://user:password@en.3.5.example.com:port/software/snap?page=1

This URL parts are:

  • http -- protocol
  • user:password -- authentication, always an option
  • en.3.5. -- sub-domain
  • port -- port, must also be defined in Apache
  • example.com -- domain and TLD
  • software/snap -- path
  • page=1 -- ...

Table names

Tables are well defined so they get very specific names and do not need any special handling.

Column names

In most cases column names are like C++ member variable names: they are well defined. These names are expected to be defined with a namespace (i.e. the page data is written starting with page::.)

Once in a while column names are actually row names. This happens when a table is used as an index. In this case the column name uses the copy of a row name so there is nothing complicated to defining these names.

Row names

So... row names are complicated.

There are ...

Firewall

It is expected that you use a firewall to prevent all connections to your webserver except those on port 80 and 443 and any other port that Apache would answer.

Any other port could cause issues and you are responsible for them.

The Snap Server, if given permission, will be capable to deal with iptables to block users that are detected as flooding the server and not slowing down when asked to.

See iplock firewall tool

Apache

At this point we intend to only support Apache as a webserver. One thing about this server, it is used by many and is known to be quite safe to use as a ...

Snap! Websites stackThe system process including all the steps I can think of at the moment.

Firewall

Assuming you give the Snap! server permissions, it blocks IP addresses that misbehave with your firewall. Misbehavior is detected as spam posts, fast hits, or unwanted accesses.

Apache Server

Start the Apache server, check whether it is better (faster) to run Apache and have all special features (redirects and such) in the snap.cgi (i.e. dynamic) or in Apache (i.e. but that last option requires a reload of Apache every now and then!)

See whether we gain anything in having a static cache. The problem ...

HTML 5 Helper Libraries

We are finding more and more projects that help with HTML 5. Although we're not right now looking into supporting HTML 5 directly, we keep an eye open to new technology, especially if it can help us get a better feel for our sites.

Dynamic CSS (a form of scripting language for CSS content) -- http://sass-lang.com/

CSSTidy (CSS compression/beautifier) -- http://csstidy.sourceforge.net/

A Compass Extension -- http://susy.oddbird.net/

Responsive breakpoints (no idea what that really is though) -- https://github.com/Snugug/Aura

CppCMS

We were thinking of ...

Example

The following are 3 files you can use to create this example (see tar ball attachment below.) The original code comes from Aaron Isotton, although his example was not a true C++ sample... it would not use a global variable to auto-register the plug-in. Instead he would load a symbol. It is licensed under the GPL.

The first one (main.cpp) includes the code used to load and unload the plugin.

#include <iostream>
#include <dlfcn.h>

int main() {
    std::cout << "C++ dlopen demo" << std::endl << std::endl;

    // open the ...

Testing

We like to make our server very modular in order to simplify the testing.

Full coverage testing is what will give you more chances of finding most of the bugs before using the server. In other words, a good way to verify that the server works as expected.

The server is composed of a small core, libraries, and plugins.

By default, plugins should be compiled as such (i.e. a .so under Linux.) However, by simulating all the necessary core functionality in a test, it is possible to run the plugin tests on the command line and find problems early.

The main thing that we want to simulate to ...

IMPORTANT NOTE

This feature was not implemented. We instead went with the fully dynamic signals using boost::signals2 which allows you to grow plugins without having to recompile everything (and thus offer users a way to install additional plugins by simply installing a package on your Linux system.)

As I have been researching for the fastest signal system, I came up with what follows.

There is one draw back: all the modules must all be statically compiled (i.e. no independent "plug-in" type of functionality. Under Linux, that means no .so and under Windows no .dll)

The C++ ...

Syndicate content Syndicate content

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

Contact Us Directly