Snap! Websites Journal

When creating a dynamic website, the time it takes to create a page requires a proper (large enough) timeout or Apache will generate a 500 error even before the system has a chance to reply one byte.

Snap!, like many other content manager systems (CMS), will generate the entire page before sending anything back to the client. There are several reasons for doing this:

  1. The system is generating HTML which we want to compress before sending it to clients;
  2. The system likes to define the Content-Size header because it allows browsers to show clients how much of the data it already ...

As I work more and more with Cassandra, I bump in more and more side effects of how the system works.

Yesterday I noticed that I would always get new entries for a set of pages I create on Snap! websites. These pages had a parameter, a list of boxes, which could be empty because some theme do not allow any boxes at all.

Unfortunately, if I may say, Cassandra does not support empty data. That is, if a cell is set to an empty string (""), it is the same as deleting that cell. The problem with that is that the cell disappears completely. So the only way is to have at least one byte of ...

As I was working with libQtCassandra for the Snap! project, I notices a problem in one of my queries. That's actually the only one where I used the reverse flag. This flag is used to ask Cassandra to return its data in reverse order. That works perfectly, on Cassandra's side, but not so well in libQtCassandra...

In order to allow the C++ array operator (i.e. the square brackets ([]) are overloaded!) in the libQtCassandra, I decided to make use of QMap to be able to quickly access the data. This means you can create a Cassandra context and then access data like this:

value = ...

As we are using Cassandra in our development process, we are encountering problems with it. Contrary to an SQL database, Cassandra is very light weight and can at times fail to the point where you cannot use a node anymore.

When that happens on a development system, we can simply delete everything and restart fresh. Fine.

However, in a production system, you're going to run into some problems if you lose a node and... that's the only node you have. In that case, you'd need a backup. However, the idea of Cassandra is to run many nodes to have automatic backups. If one node causes ...

As I'm working on Snap! C++, I have many places were I want to record a list of something.

Many times that list includes a reference to another column. Within the content table I use the links plugin to create references / connections.

So... Today I was enhancing the use of attachments to posts you make on a website. The actual files get saved in a table named files and I wanted to know who saved that file so I have a reference back to the content page. This will be useful when I want to file all the pages because, for example, the file is proven to be a virus.

If you're an SQL ...

Actually, you can comment on newer blog posts when they occur (i.e. infrequently!)

But we otherwise turned off the comment feature because 99.9% is not constructive (yes, spam.) So there is no point for us to support such. Plus has a better feature with their tickets which (1) rarely transmit spam (actually I don't recall receiving any in a long while!) and (2) we can track the conversations as separate threads.

So this website automatically closes the comments on pages that are a few months old. After that, no more comments. In other words, pretty much all of the ...

The libQtCassandra library has had a bug that would create a cell when testing for its existance. This has been very annoying because I had to use a different mechanism to check whether a cell exists instead of calling the simple and effective QCassandraRow::exists() function.

The function would call the table function necessary to read the content of a cell in the Cassandra cluster. The function returns true or false. If false, the data was not retrieved and thus the cell does not exist. However, the row function was not testing the result and a couple lines below it would do a setValue() ...

With version 1.4.0 of the libtld we bring to you one additional feature in Internet identifier verification: check that a list of email addresses is indeed valid.

If you search for a way to verify an email address then the libtld is your solution. It will not only check that the email address is valid (only include characters that are acceptable as per RFC 5322,) it will also look at the domain name TLD and verify that the specified domain is indeed valid.

Along the way we also worked on getting the library to compile with Visual Studio 10+ and Cygwin so you can make use of it under ...

The libtld was finally updated to include the newest world wide top-level domain names added in the last 12 months or so.

The library also better supports exceptions such as .uk and includes a few corrections.

Along those corrections came some additions to the documentation as we now support a C++ class which will really ease the use of the library for C++ programmers since it uses std::strings instead of char *. Although at this time it only supports UTF-8 strings.

The library also includes the necessary code to support a PHP extension so the power of the tld() function is now painlessly ...

As I was working on the Lock implementation in our C++ Cassandra library, I ran in a rather weird problem. The test would fail as many processes would not obtain the lock in time.

Looking at what was happening, even though I use QUORUM as the access consistency level, I could see that some of the test processes would attempt a read of the table and get nothing (0 columns returned!) even though the other 6 or 7 processes already wrote their information in the database.

After looking for a while, I finally found out that the problem was not Cassandra per se, nor the JavaSDK, nor the Cassandra ...

Syndicate content

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

Contact Us Directly