Snap! Websites
An Open Source CMS System in C++
I looked around for a while and completely missed the fact that SASS actually offers an extension to compile CSS files from a C++ library. That being said, it was not really clear whether the feat still requires the Ruby scripting language running in the background. If so, I think that my solution: CSS Preprocessor, is going to be a lot faster and possibly easier to maintain long term.
Yes. The CSS Preprocessor project reads .scss files (i.e. files mostly compatible with SASS) and compiles them in CSS 3 that your browser can handle. Not only that, it will minify those files as much as ...
I just published libtld version 1.4.22 to include many new gTLDs and also mark a few as deprecated or correct some that were considered private and not defined by a country (or vice versa.)
This includes many of the INA accepted TLDs such as .site and .love.
It also includes many new TLDs that are in a language other than English (or at least using Latin letters.) Japan actually got 47 new domain names in Japanese. Several Arab countries and Pakistan got such domains too.
There are also many new brand extensions.
What would be required now is a better set of categories, and actually, a ...
Today, I again ran in a QASSERT(). The problem with an assert is that the software stops and voilà. Yes. The assert has a message telling me what happened (why it is asserting) and the location of the assert.
So I know it was a QList problem because of an out of range index. Good.
Only, to fix said problem, you need the location of the caller. Knowing that an assert was generated in qlist.h is hardly helpful.
Of course, most of you will say: just run your software in your debugger, then it will break when the assert happens. True, unless the assert happens in a child process you ...
Files transferred over the wire should be optimized as much as possible.
First files get compressed with GZip. That step is pretty straight forward and can be used to compressed all files: HTML, CSS, JavaScript, etc.
However, one way to make file even smaller is to start with smaller in the first place. This means having support for minifying files before sending them over the wire.
Implementation: Partial. Compressed CSS is properly handled.
The Qt DOM implementation let you output your DOM in various formats. By default, you generally get a beautified ...
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.
Today I started work to switch from using log4cplus with files directly to using the loggingserver. Not only that, it is using the newest version (on the edge!) which is 1.2.0-rc3. Up to here, no major problem.
However, the newer version forces you to use a version of the log4cplus library which is multi-threaded. This causes a major problem because the server makes use of fork() to create child processes each time a connection is made. There are several reason to do so, but there are a couple that I think are certainly the most important ones:
The editor uses a similar form capability which allows one to create a form without having to write all the HTML tags needed to handle each widget. Actually, one widget may include many tags and it can be so complicated that attempting to rewrite those tags by hand each time would be really tedious.
The core system offers the basic widgets such as a simple text edit and image drag and drop area. We already support one widget extension called locale allowing the user to select a timezone. This is an external extension to the editor.
Each widget needs at least one attribute defining their ...
As we want to offer a system where people can create their own website, we also need to offer them a very easy way to setup their own domain name for their website.
This requires a dynamic name server such as bind9 with the nsupdate tool.
Note that first, we can create a new website using a sub-domain name from a main domain used to run the system as a whole (as you see in many blog services). However, even that requires a dynamic DNS.
nsupdate can be used by one of our backend to do that part of the setup. We certainly want to make use of a specific plugin to do the ...
The inter-process signalling system is a server that can be communicated with via TCP/IP streams and UDP packets. This is very similar to an RPC system, only extremely specialized for Snap!
When starting Snap! you run snapinit. That process creates the snapcommunicator process which is the signalling server. Once the server is up and running, the other processes are started.
The snapcommunicator process is a server that accepts four types of connections:
We want to have an easy way to write code in a page.
The idea is to offer a way to embedded an area where the user can write code and also to offer the ability to prettify the code using something like Geshi or Google Code Prettify.
The widget should offer the user to select the language being used to write the code with a dropdown and a checkmark to determine whether the prettifier should add line numbers.
Snap! Websites
An Open Source CMS System in C++