diff --git a/failmeter/css/failmeter.css b/failmeter/css/failmeter.css
new file mode 100644
index 0000000..cee0013
--- /dev/null
+++ b/failmeter/css/failmeter.css
@@ -0,0 +1,12 @@
+body {
+ padding-top: 80px;
+}
+
+.fail:hover {
+ background-color: #eee;
+}
+
+.progress {
+ margin-bottom: 0;
+ background-color: #cacaca;
+}
diff --git a/failmeter/index.html b/failmeter/index.html
new file mode 100644
index 0000000..e862683
--- /dev/null
+++ b/failmeter/index.html
@@ -0,0 +1,185 @@
+
+
+
+
+ F/OSS Fail meter
+
+
+
+
+
+
+
+
+
+
+
+
+
Size
+
+ - The source code is more than 100 MB.
+ - If the source code also exceeds 100 MB when it is compressed
+
+
+
Source Control
+
+ - There is no publicly available source control (e.g. cvs, svn, bzr, git)
+ - There is publicly available source control, but:
+
+ - There is no web viewer for it
+ - There is no documentation on how to use it for new users
+ - You've written your own source control for this code
+ - You don't actually use the existing source control
+
+
+
+
+
Building From Source
+
+ - There is no documentation on how to build from source
+ - Documentation exists on how to build from source, but it doesn't work
+ - Your source is configured…
+
+ - …with a handwritten shell script
+ - …by editing flat text config files
+ - …by editing code header files manually
+ - Your source isn't configurable
+
+
+ - You source builds with…
+
+ - …something that isn't GNU Make
+ - …a third-party proprietary build tools
+ - …something you wrote for this code
+
+
+
+
+
Bundling
+
+ - Your source only comes with other code projects that it depends on
+ - Your source code cannot be built without first building the bundled code bits
+ - You have modified those other bundled code bits
+
+
+
Libraries
+
+ - Your code only builds static libraries
+ - Your code can build shared libraries, but only unversioned ones
+ - Your source does not try to use system libraries if present
+
+
+
System Install
+
+ - Your code tries to install into /opt or /usr/local without explicitly telling it to do so
+ - Your code has no "make install"
+ - Your code doesn't work outside of the source directory
+
+
+
Code Oddities
+
+ - Your code uses Windows line breaks ("DOS format" files)
+ - Your code depends on specific compiler feature functionality
+ - Your code depends on specific compiler bugs
+ - Your code depends on Microsoft Visual Anything
+
+
+
Communication
+
+ - Your project does not announce releases on a mailing list
+ - Your project does not have a mailing list
+ - Your project does not have a bug tracker
+ - Your project does not have a website
+ - Your project is sourceforge vaporware
+
+
+
Releases
+
+ - Your project does not do sanely versioned releases (Major, Minor)
+ - Your project does not do versioned releases
+ - Your project does not do releases
+ - Your project only does releases as attachments in web forum posts
+ - Your releases are only in
+
+ - .zip format
+ - OSX .zip format
+ - .rar format
+ - .arj format
+ - an encapsulation format that you invented
+
+
+ - Your release does not unpack into a versioned top-level directory (e.g.
glibc-2.4.2/
)
+ - Your release does not unpack into a top-level directory (e.g.
glibc/
)
+ - Your release unpacks into an absurd number of directories (e.g.
home/johndoe/glibc-svn/tarball/glibc/src/
)
+
+
+
History
+
+ - Your code is a fork of another project
+ - Your primary developers were not involved with the parent project
+ - Until open sourcing it, your code was proprietary for:
+
+ - 1-2 years
+ - 3-5 years
+ - 6-10 years
+ - 10+ years
+
+
+
+
+
Licensing
+
+ - Your code does not have per-file licensing
+ - Your code contains inherent license incompatibilities
+ - Your code does not have any notice of licensing intent
+ - Your code doesn't include a copy of the license text
+ - Your code doesn't have a license
+
+
+
Documentation
+
+ - Your code doesn't have a changelog
+ - Your code doesn't have any documentation
+ - Your website doesn't have any documentation
+
+
+
+
+
diff --git a/failmeter/js/failmeter.js b/failmeter/js/failmeter.js
new file mode 100644
index 0000000..8c3bc3e
--- /dev/null
+++ b/failmeter/js/failmeter.js
@@ -0,0 +1,62 @@
+var max_points = 0;
+var points = 0;
+
+function append_point_values() {
+ $('li[data-points]').each(function() {
+ points = $(this).attr('data-points');
+ $(this).append(' [' + points + ' points of FAIL]');
+ });
+}
+
+function calc_max_points() {
+ $('ul:not(.choose-one) > li[data-points]').each(function() {
+ points = $(this).attr('data-points');
+ max_points += +points;
+ });
+
+ $('li:has(ul.choose-one)').each(function() {
+ var this_max = NaN;
+ $(this).children('ul.choose-one').children('li').each(function() {
+ points = +$(this).attr('data-points');
+
+ if (isNaN(this_max) || points > this_max) {
+ this_max = points;
+ }
+ });
+
+ max_points += this_max;
+ });
+}
+
+function update_points() {
+ var points = 0;
+
+ $('.active').each(function() {
+ points += +$(this).attr('data-points');
+ });
+
+ if (max_points == 0) {
+ percent = 0;
+ } else {
+ percent = points / max_points * 100;
+ }
+
+ $('#failmeter').attr('aria-valuenow', percent).css('width', percent + '%');
+ $('#points').html(points + '/' + max_points);
+
+ if (percent == 0) {
+ failtext = 'Perfect! All signs point to succes!';
+ } else if (percent < 1.6) {
+ failtext = 'You are probably doing okay, but you could be better.';
+ } else if (percent < 3.8) {
+ failtext = 'Babies cry when your code is downloaded.';
+ } else if (percent < 5.7) {
+ failtext = 'Kittens die when your code is downloaded.';
+ } else if (percent < 8.2) {
+ failtext = 'HONK HONK. THE FAILBOAT HAS ARRIVED!';
+ } else {
+ failtext = 'So much fail, your code should have its own reality show.';
+ }
+
+ $('#failtext').html(failtext);
+}