Shortcut Navigation:

Technologies that Make Quizific Tick

Quizific would not be possible without a few brilliant pieces of technology that made it run. On this page we would like to thank their authors and provide links so you can try these technological gems too.

Core

These are the core technologies we use

Node.js

License: MIT
Node.js is the engine that makes Quizific run. It's a web server that allows writing the server-side code in Javascript, which is awesome. Why is this awesome? Well, here are couple reasons:
  • You can write code once and run it both ont he server side and the client side. For instance the validators that verify user input in the browser are the same validators that run on the server side.
  • It is ultra fast. If you compare two applications one written in Ruby on Rails and another one written in Node.js the last one will consume fraction of server resources and will blow RoR out of the water.
  • Node.js as well as most components written for it (there are ton of components) is licensed under MIT. No more worries about GPL infection. I like GPL, but sorry, I'm not going to use it.
There are more reasons, but these are my favorite

Amazon Web Services (AWS)

License: Proprietary
AWS is a collection of internet infrastructure services that will open you door into cloud computing. Quizific runs in AWS and this allows us to quickly scale it from dormant mode serving just couple hundred users in the night to high volume traffic on certain busy days. BTW, AWS is also FedRAMP-compliant which makes it suitable for the US government purposes. It is also available for deployment in the Amazon GovCloud if you need its additional security and certifications.

MongoDB

MongoDB is a brilliant implementation of NoSQL database, in fact it's no.1 in the NoSQL world for a lot of good reasons. If you're tired of endless SQL JOINs that kill performance like crazy, if you want to retrieve all the information you need in a single call instead of dozen - MongoDB is for you. There are obviously some drawbacksand you need to weight all advantages and disadvantages of MongoDB for your project, but for Quizific it works great and reduces the development and support efforts a lot. Highly recommended.

Node.js Modules

Node.js would never be so popular if not the modules people wrote for it. The best part? Abosolutely most of them are licensed under one of the best licenses you can imagine: MIT (essentially you can do whatever you want with the code, read terms for more details)

connect.js

License: MIT
Connect adds additional layer on top of node.js providing middleware approach. Tons of plugins are relying on this functionality, so you will definitely appreciate the almost invisible work connect does for you with just a few setup lines.

express.js

License: MIT
Node.js is actually generic enough to run anything you want. For instance cron jobs on Quizific are being run by Node.js. So if you want to create a web application using Node.js you need something that will simplify handling all aspects of HTTP and speed up the web app development. De-facto standard module for this is express.js which we are glad to recommend here.

async.js

License: MIT
If you've deal with Node.js code for more than 5 minutes you probably already got tired of its asynchronosity and infinitely deep levels of callbacks. Async.js is your solution to the code cleanup. While not being ideal (if you need a sync flow the code will still look more clunky than C/C++/Java etc), it definitely will make your life much easier.

cheerio

License: MIT
If you need to deal with HTML parsing on the server side Cheerio is for you. It is a simple and lightweight alternative to using jsdom which will do essentially the same plus more.

jsdom

License: MIT
jsdom is a big brother to cheerio, heavier, slightly slower, but providing more power when you need to manipulate DOM on the server side. If cheerio is too simple for you try jsdom.

cheerio

License: MIT
If you need to deal with HTML parsing on the server side Cheerio is for you. It is a simple and lightweight alternative to using jQuery which will do essentially the same plus more.

connect-assetmanager

License: MIT
Quizific does not use connect-assetmanager (and connect-assetmanager-handlers). Well, not anymore. This is a great tool I would highly recommend if you build a simple website. We will gladly start using it again when it will implement couple cool features like SASS support for instance and a way to easily exclude certain files from its coverage. You can still do this with connect-assetmanager after spending some time with handlers and advanced regexps, but it is just taking too much time if you need complex asset managment.

EJS

License: MIT
Express offers integration with multiple template engines and in fact EJS is not the most popular one. However it uses Javascript wich is great if you want to reuse code and don't want to learn another template language. Also consider using ECT - it might work better for you.

ejs-locals

License: MIT
Adds supports for RoR-like locals in your EJS tempaltes (i.e. passing variables into templates). Sadly no longer supported.

email-templates

License: MIT
If you need to send nicely formatted emails from your node.js code email-tempaltes is for you. Very powerful and very flexible, works great in combination with nodemailer (see below).

express-uglify

License: MIT
This middleware intercepts .js requests and "uglifies" them. Quizific doesn't use it anymore, but it's a great tool for small sites.

gramophone

License: MIT
Great little module for extracting keywords from text.

mongojs

License: MIT
Though this is not the most popular library for accessing mongodb on the server side we like it for how close this library to the standard mongodb official API.

natural

License: MIT
Though this is not the most popular library for accessing mongodb on the server side we like it for how close this library to the standard mongodb official API.

node-sass

License: MIT
SASS implementation for Node.js. We are waiting for the update where changes made to partials will cause the stylesheets using them to regenerate. Besides this minor annoyance it works great.

nodemailer

License: MIT
Great module for sending emails from Node.js, works with virtually all mailservers and settings. If you want to send multipart emails with rich content consider using it with email-tempaltes module (see above).

nodemailer

License: MIT
Great module for sending emails from Node.js, works with virtually all mailservers and settings. If you want to send multipart emails with rich content consider using it with email-tempaltes module (see above).

winston

License: MIT
Probably the best asynchronous molti-transport logging module for node.js. It take some time to configure, but then will serve you really well. I only wish it comes with the better object output out of the box.

underscore

License: MIT
This is just a set of utility methods for functional programming implementing tons of handy methods you wish were built into JavaScript by default. In fact hundreds of other Node.js modules depend on it, so it's a must even if you don't plan to use it directly.

sanitize-html

License: MIT
Very flexible and customizable html sanitizer for Node.js. A must for any public-facing website. If you do not know why consider reading about XSS, CSRF and other attacks

request

License: Apache v2
Great little http client supporting all feature you might need. This is a very handy module if you need to retrieve http content on the server side.

connect-mongo

License: MIT
This module lets you store session data in MongoDB. Works really well. 'nuf said.

Client-side Javascript Libraries

Well, calling these client-side libraries is a bit of formality. As you saw above entire website is written in Javascript which allows us to run virtually any portion of the code on either server or client side. Still there are libraries that are mostly used on the client side and we're listing them here

jQuery

License: MIT
This is probably the one library that doesn't require any introduction to those who deal with the client-side of a web application. If you need to build a dynamic interface - this is your tool #1.
[MathJax]

MathJax

License: Apache v2
MathJax is a phenomenal library for those who deals with Math. Thanks to this library Quizific is one of a very few quiz/survey makers supporting math

Google Charts

License: Proprietary
We use multiple libraries to visualize various statistics and Google Charts is one of our favorite. It is simple, free versatile.

Tools

We also would like to thank the creators of couple tools that greatly helped us to made Quizific more reliable and popular

Google Webmaster Tools

License: Proprietary
Google Webmaster Tools provides ton of insights about how search engines (not just Google) see your web server. It also keeps an eye on its reliability and possible errors making it indispensable for any website owner

Selenium

License: Apache v2
Selenium is the topmost step in a multilevel testing procedure and it is the one that makes sure that the site as a whole is working. It's a great tool for both regression testing and TDD. In addition to the raw Selenium functionality we also highly recommend Selenium IDE for its capability to develop tests quickly and almost effortlessly

Google Analytics

License: Proprietary
Google Analytics is the #1 tool in the world of website performance analysis. It might be lacking some features of its commercial counterparts but for the beginners it is perfect.

Google Page Speed Insights

License: Proprietary
This is a very simple tool that can give you couple very good hints on how you can improve your website. Don't take everythign it says literally, but make sure you understand all its advices and reasons behind them before you discard its recommendations.