In this tutorial you've seen how to use the data structures found in the GLib library. You've seen how you can use these containers to effectively manage your program's data, and you've seen how several popular open source projects use these containers as well. Along the way you've also gotten familiar with many of the GLib types, macros, and string handling functions.
GLib contains a lot of other neat functionality: it's got a threading-abstraction layer, a portable-sockets layer, message-logging utilities, date and time functions, file utilities, random-number generation, and much more. Exploring any of these modules would be worthwhile. And if you're feeling generous, you could even improve some of the documentation -- for example, the documentation for the lexical scanner includes a comment about how it needs some example code and more detail. If you've benefited from open source code, don't forget to lend a hand in improving it!
Many thanks to Sven Neumann, Simon Budig, Tim Ringenbach, and Michael Meeks for their helpful feedback on the "real world" GLib usages shown in this tutorial.