text:
/*!
jQuery.awesomeCloud v0.2 indyarmy.com
by Russ Porosky
IndyArmy Network, Inc.

Usage:

    Your container must contain words in the following format:
        <element data-weight="12">Word</element>
    The <element> can be any valid HTML element (for example, <span>), and
    $( "#myContainer" ).awesomeCloud( settings );
    the weight must be a decimal or integer contained in the "data-weight"
    attribute. The content of the <element> is the word that will be
    displayed. The original element is removed from the page (but not the DOM).

Settings:
    "size" {
        "grid" : 8, // word spacing; smaller is more tightly packed but takes longer
        "factor" : 0, // font resizing factor; default "0" means automatically fill the container
        "normalize" : true // reduces outlier weights for a more attractive output
    },
    "color" {
        "background" : "rgba(255,255,255,0)", // default is transparent
        "start" : "#20f", // color of the smallest font
        "end" : "#e00" // color of the largest font
    },
    "options" {
        "color" : "gradient", // if set to "random-light" or "random-dark", color.start and color.end are ignored
        "rotationRatio" : 0.3, // 0 is all horizontal words, 1 is all vertical words
        "printMultiplier" : 1 // 1 will look best on screen and is fastest; setting to 3.5 gives nice 300dpi printer output but takes longer
    },
    "font" : "Futura, Helvetica, sans-serif", // font family, identical to CSS font-family attribute
    "shape" : "circle", // one of "circle", "square", "diamond", "triangle", "triangle-forward", "x", "pentagon" or "star"; this can also be a function with the following prototype - function( theta ) {}

Notes:
    AwesomeCloud uses the HTML5 canvas element to create word clouds
    similar to http://wordle.net/. It may or may not work for you.

    If your words are all fairly evenly weighted and are large compared to
    the containing element, you may need to adjust the size.grid setting
    to make the output more attractive. Conversely, you can adjust the
    size.factor setting instead.

    It should be noted that the more words you have, the smaller the size.grid,
    and the larger the options.printMultiplier, the longer it will take to
    generate and display the word cloud.

Extra Thanks:
    Without Timothy Chien's work (https://github.com/timdream/wordcloud),
    this plugin would have taken much longer and been much uglier. Fate
    smiled and I found his version while I was searching out the equations
    I needed to make a circle-shaped cloud. I've simplified and, in places,
    dumbified his code for this plugin, and even outright copied chunks of
    it since those parts just worked far better than what I had originally
    written. Many thanks, Timothy, for saving some of my wits, sanity and
    hair over the past week.

    Thanks to http://www.websanova.com/tutorials/jquery/jquery-plugin-development-boilerplate
    for providing a great boilerplate I could use for my first jQuery plugin.
    My original layout worked, but this one was much better.
 */

(function ($) {
	"use strict";
	var pluginName = "awesomeCloud", // name of the plugin, mainly for canvas IDs
		defaultSettings = {
			"size": {
				"grid": 8, // word spacing, smaller is more tightly packed
				"factor": 0, // font resize factor, 0 means automatic
				"normalize": true // reduces outliers for more attractive output
			},
			"color": {
				"background": "rgba(255,255,255,0)", // background color, transparent by default
				"start": "#20f", // color of the smallest font, if options.color = "gradient""
				"end": "#e00" // color of the largest font, if options.color = "gradient"
			},
			"options": {
				"color": "gradient", // if "random-light" or "random-dark", color.start and color.end are ignored
				"rotationRatio": 0.3, // 0 is all horizontal, 1 is all vertical
				"printMultiplier": 1, // set to 3 for nice printer output; higher numbers take longer
				"sort": "highest" // "highest" to show big words first, "lowest" to do small words first, "random" to not care
			},
			"font": "Helvetica, Arial, sans-serif", // the CSS font-family string
			"shape": "circle" // the selected shape keyword, or a theta function describing a shape
		};

	$.fn.awesomeCloud = function (option, settings) {
		if (typeof option === "object") {
			settings = option;
		} else if (typeof option === "string") {
			var data = this.data("_" + pluginName);
			if (data) {
				if (defaultSettings[ option ] !== undefined) {
					if (settings !== undefined) {
						data.settings[ option ] = settings;
						return true;
					} else {
						return data.settings[ option ];
					}
				} else {
					return false;
				}
			} else {
				return false;
			}
		}

		settings = $.extend(true, {}, defaultSettings, settings || {});

		return this.each(function () {
			var elem = $(this),
				$settings = jQuery.extend(true, {}, settings),
				cloud = new AwesomeCloud($settings, elem);

			cloud.create();

			elem.data("_" + pluginName, cloud);
		});
	};

	function AwesomeCloud(settings, elem) {
		this.bctx = null;
		this.bgPixel = null;
		this.ctx = null;
		this.diffChannel = null;
		this.container = elem;
		this.grid = [];
		this.ngx = null;
		this.ngy = null;
		this.settings = settings;
		this.size = null;
		this.words = [];
		this.linkTable = [];
		this.match = null;
		return this;
	}

	AwesomeCloud.prototype = {
		create: function () {
			var $this = this,
				i = 0,
				ctxID = null,
				runningTotal = 0,
				currentWeight = 0,
				tempCtxID = pluginName + "TempCheck",
				lastWeight = null,
				foundMax = false,
				fontSize = 0,
				jump = 0.1,
				maxWidth = 0,
				maxWord = 0,
				counter = 0,
				width = 0,
				link = null,
				target = null,
				tag = null,
				dimension,
				fctx,
				wdPixel,
				x,
				y;

			this.settings.weightFactor = function (pt) {
				return pt * $this.settings.size.factor;
			};

			this.settings.gridSize = Math.max(this.settings.size.grid, 4) * this.settings.options.printMultiplier;

			this.settings.color.start = this.colorToRGBA(this.settings.color.start);
			this.settings.color.end = this.colorToRGBA(this.settings.color.end);
			this.settings.color.background = this.colorToRGBA(this.settings.color.background);

			this.settings.minSize = this.minimumFontSize();

			this.settings.ellipticity = 1;

			switch (this.settings.shape) {
				case "square":
					this.settings.shape = function (theta) {
						// A square
						var thetaDelta = ( theta + Math.PI / 4 ) % ( 2 * Math.PI / 4 );
						return 1 / ( Math.cos(thetaDelta) + Math.sin(thetaDelta) );
					};
					break;
				case "diamond":
					this.settings.shape = function (theta) {
						// A diamond
						var thetaDelta = theta % ( 2 * Math.PI / 4 );
						return 1 / ( Math.cos(thetaDelta) + Math.sin(thetaDelta) );
					};
					break;
				case "x":
					this.settings.shape = function (theta) {
						// An X
						var thetaDelta = theta % ( 2 * Math.PI / 4 );
						return 1 / ( Math.cos(thetaDelta) + Math.sin(thetaDelta) - ( 2 * Math.PI / 4 ) );
					};
					break;
				case "triangle":
					this.settings.shape = function (theta) {
						// A triangle
						var thetaDelta = ( theta + Math.PI * 3 / 2 ) % ( 2 * Math.PI / 3 );
						return 1 / ( Math.cos(thetaDelta) + Math.sqrt(3) * Math.sin(thetaDelta) );
					};
					break;
				case "triangle-forward":
					this.settings.shape = function (theta) {
						// A triangle pointing to the right
						var thetaDelta = theta % ( 2 * Math.PI / 3 );
						return 1 / ( Math.cos(thetaDelta) + Math.sqrt(3) * Math.sin(thetaDelta) );
					};
					break;
				case "pentagon":
					this.settings.shape = function (theta) {
						// A pentagon
						var thetaDelta = ( theta + 0.955 ) % ( 2 * Math.PI / 5 );
						return 1 / ( Math.cos(thetaDelta) + 0.726543 * Math.sin(thetaDelta) );
					};
					break;
				case "star":
					this.settings.shape = function (theta) {
						// A 5-pointed star
						var thetaDelta = ( theta + 0.955 ) % ( 2 * Math.PI / 10 );
						if (( theta + 0.955 ) % ( 2 * Math.PI / 5 ) - ( 2 * Math.PI / 10 ) >= 0) {
							return 1 / ( Math.cos(( 2 * Math.PI / 10 ) - thetaDelta) + 3.07768 * Math.sin(( 2 * Math.PI / 10 ) - thetaDelta) );
						} else {
							return 1 / ( Math.cos(thetaDelta) + 3.07768 * Math.sin(thetaDelta) );
						}
					};
					break;
				case "circle":
					this.settings.shape = function (theta) {
						return 1;
					};
					break;
				default:
					this.settings.shape = function (theta) {
						return 1;
					};
					break;
			}

			this.size = {
				"left": this.container.offset().left,
				"top": this.container.offset().top,
				"height": ( this.container.height() * this.settings.options.printMultiplier ),
				"width": ( this.container.width() * this.settings.options.printMultiplier ),
				"screenHeight": this.container.height(),
				"screenWidth": this.container.width()
			};

			this.settings.ellipticity = this.size.height / this.size.width;
			if (this.settings.ellipticity > 2) {
				this.settings.ellipticity = 2;
			}
			if (this.settings.ellipticity < 0.2) {
				this.settings.ellipticity = 0.2;
			}

			this.settings.weight = {
				"lowest": null,
				"highest": null,
				"average": null
			};
			this.container.children().each(function (i, e) {
				link = null;
				tag = null;
				currentWeight = parseInt($(this).attr("data-weight"), 10);
				runningTotal += currentWeight;
				if (!$this.settings.weight.lowest) {
					$this.settings.weight.lowest = currentWeight;
				}
				if (!$this.settings.weight.highest) {
					$this.settings.weight.highest = currentWeight;
				}
				if (currentWeight < $this.settings.weight.lowest) {
					$this.settings.weight.lowest = currentWeight;
				}
				if (currentWeight > $this.settings.weight.highest) {
					$this.settings.weight.highest = currentWeight;
				}
				$this.settings.weight.average = runningTotal / ( i + 1 );
				// While we're here looping anyways, let's hide the originals.
				$(this).css("display", "none");
				// Check whether there is a link
				if ($(this).has("a").length === 0) {
					tag = $(this).html();
				} else {
					var aElement = $(this).children(":first");
					link = aElement.attr("href");
					target = aElement.attr("target");
					tag = aElement.html();
				}
				$this.words.push([ tag , currentWeight, link, target]);
			});
			this.settings.range = this.settings.weight.highest - this.settings.weight.lowest;

			// Normalize the weight distribution if required.
			if (this.settings.size.normalize === true) {
				// Sort the words by weight, ascending.
				this.words.sort(function (a, b) {
					return ( a[ 1 ] - b[ 1 ]);
				});

				for (i = 0; i < this.words.length; i++) {
					if (lastWeight === null) {
						lastWeight = this.words[ i ][ 1 ];
					} else {
						if (this.words[ i ][ 1 ] - lastWeight > this.settings.weight.average) {
							this.words[ i ][ 1 ] -= ( this.words[ i ][ 1 ] - lastWeight ) / ( this.settings.weight.average * 0.38 ) + lastWeight;
						}
					}
				}
			}

			// Either randomize the words, or sort 'em
			this.words.sort(function (a, b) {
				if ($this.settings.options.sort === "random") {
					return 0.5 - Math.random();
				} else if ($this.settings.options.sort === "lowest") {
					return ( a[ 1 ] - b[ 1 ]);
				} else { // "highest"
					return ( b[ 1 ] - a[ 1 ]);
				}
			});

			// Set the font scaling factor if factor is 0.
			if (this.settings.size.factor === parseInt(0, 10)) {
				this.settings.size.factor = 1;
				ctxID = pluginName + "SizeTest";
				foundMax = false;
				fontSize = 0;
				jump = 0.1;
				maxWidth = 0;
				maxWord = 0;
				counter = 0;
				width = 0;
				dimension = Math.min(this.size.width, this.size.height);
				fctx = this.createCanvas({
					"id": ctxID,
					"width": dimension,
					"height": dimension,
					"left": 0,
					"top": 0
				});
				// Find the widest word at normal resolution.
				for (i = 0; i < this.words.length; i++) {
					fctx.font = this.settings.weightFactor(this.words[ i ][ 1 ]) + "px " + this.settings.font;
					width = fctx.measureText(this.words[ i ][ 0 ]).width;
					if (width > maxWidth) {
						maxWidth = width;
						maxWord = this.words[ i ];
					}
				}
				// Keep increasing the font size until we find the largest that will fit in the smallest dimension of the container.
				while (!foundMax) {
					fontSize = this.settings.weightFactor(maxWord[ 1 ]);
					fctx.font = fontSize.toString(10) + "px " + this.settings.font;
					width = fctx.measureText(maxWord[ 0 ]).width;
					if (width > ( dimension * 0.95 )) {
						this.settings.size.factor -= jump;
					} else if (width < ( dimension * 0.9 )) {
						this.settings.size.factor += jump;
					} else {
						foundMax = true;
					}
					counter += 1;
					if (counter > 10000) {
						// Dude, if it takes this many tries to max out the font, set it yourself :)
						foundMax = true;
					}
				}
				this.destroyCanvas(ctxID);
				this.settings.size.factor -= jump;
			}

			// Figure out the color stepping if options.color is "gradient".
			this.settings.color.increment = {
				"r": ( this.settings.color.end.r - this.settings.color.start.r ) / this.settings.range,
				"g": ( this.settings.color.end.g - this.settings.color.start.g ) / this.settings.range,
				"b": ( this.settings.color.end.b - this.settings.color.start.b ) / this.settings.range,
				"a": ( this.settings.color.end.a - this.settings.color.start.a ) / this.settings.range
			};

			// Start drawing words!
			this.ngx = Math.floor(this.size.width / this.settings.gridSize);
			this.ngy = Math.floor(this.size.height / this.settings.gridSize);
			this.grid = [];
			ctxID = pluginName + this.container.attr("id");
			this.ctx = this.createCanvas({
				"parent": this.container,
				"id": ctxID,
				"width": this.size.width,
				"height": this.size.height,
				"left": "0px",
				"top": "0px"
			});
			this.bctx = this.createCanvas({
				"id": tempCtxID,
				"width": 1,
				"height": 1,
				"left": 0,
				"top": 0
			});
			this.bctx.fillStyle = this.settings.color.background.rgba;
			this.bctx.clearRect(0, 0, 1, 1);
			this.bctx.fillStyle = this.settings.color.background.rgba;
			this.bctx.fillRect(0, 0, 1, 1);
			this.bgPixel = this.bctx.getImageData(0, 0, 1, 1).data;
			if (typeof this.settings.options.color !== "function" && this.settings.options.color.substr(0, 6) !== "random" && this.settings.options.color.substr(0, 8) !== "gradient") {
				this.bctx.fillStyle = this.colorToRGBA(this.settings.options.color).rgba;
				this.bctx.fillRect(0, 0, 1, 1);
				wdPixel = this.bctx.getImageData(0, 0, 1, 1).data;
				i = 4;
				while (i--) {
					if (Math.abs(wdPixel[ i ] - this.bgPixel[ i ]) > 10) {
						this.diffChannel = i;
						break;
					}
				}
			} else {
				this.diffChannel = NaN;
			}
			this.destroyCanvas(tempCtxID);
			x = this.ngx;
			while (x--) {
				this.grid[ x ] = [];
				y = this.ngy;
				while (y--) {
					this.grid[ x ][ y ] = true;
				}
			}
			this.ctx.fillStyle = this.settings.color.background.rgba;
			this.ctx.clearRect(0, 0, this.ngx * ( this.settings.gridSize + 1 ), this.ngy * ( this.settings.gridSize + 1 ));
			this.ctx.fillRect(0, 0, this.ngx * ( this.settings.gridSize + 1 ), this.ngy * ( this.settings.gridSize + 1 ));
			this.ctx.textBaseline = "top";
			i = 0;
			window.setImmediate(function loop() {
					if (i >= $this.words.length) {
						return;
					}
					$this.putWord($this.words[ i ][ 0 ], $this.words[ i ][ 1 ], $this.words[ i ][ 2 ], $this.words[ i ][ 3 ]);
					i += 1;
					window.setImmediate(loop);
				});
			$this.allDone(ctxID);
			return true;
		},
		allDone: function (canvasID) {
			// $this.linkTable
			var $this = this,
				canvasDOM = document.getElementById(canvasID);
			$( "#" + canvasID ).width( this.size.screenWidth );
			$( "#" + canvasID ).height( this.size.screenHeight );
			$( "#" + canvasID ).css( "display", "block" );
			$( "#" + canvasID ).css( "visibility", "visible" );

			canvasDOM.addEventListener("mousemove", function (ev) {
				var x = 0, y = 0;
				// Get the mouse position relative to the canvas element.
				if (ev.layerX || ev.layerX === 0) { //for firefox
					x = ev.layerX;
					y = ev.layerY;
				}
				x -= canvasDOM.offsetLeft;
				x += $(canvasDOM).position().left;
				x = Math.floor(x * $this.settings.options.printMultiplier);
				y -= canvasDOM.offsetTop;
				y += $(canvasDOM).position().top;
				y = Math.floor(y * $this.settings.options.printMultiplier);

				$this.match = null;
				for (var idx = 0, blocks = $this.linkTable.length; idx < blocks; idx++) {
					var thisWord = $this.linkTable[idx];
					if (x >= thisWord.x && x <= thisWord.x + thisWord.width && y >= thisWord.y && y <= thisWord.y + thisWord.height) {
						// Smaller word will take precedence using this type of lookup.
						$this.match = thisWord;
					}
				}
				if ($this.match !== null) {
					document.body.style.cursor = "pointer";
				} else {
					document.body.style.cursor = "";
				}
			}, false);
			canvasDOM.addEventListener("click", function (ev) {
				if ($this.match !== null) {
					if ($this.match.target) {
						window.open($this.match.link, $this.match.target);
					} else {
						window.location = $this.match.link;
					}
				}
			}, false);
		},
		minimumFontSize: function () {
			var ctxID = pluginName + "FontTest", fontCtx = this.createCanvas({
					"id": ctxID,
					"width": 50,
					"height": 50,
					"left": 0,
					"top": 0
				}), size = 20, hanWidth, mWidth;
			while (size) {
				fontCtx.font = size.toString(10) + "px sans-serif";
				if (fontCtx.measureText("\uFF37").width === hanWidth && fontCtx.measureText("m").width === mWidth) {
					this.destroyCanvas(ctxID);
					return ( size + 1 ) / 2;
				}
				hanWidth = fontCtx.measureText("\uFF37").width;
				mWidth = fontCtx.measureText("m").width;
				size -= 1;
			}
			this.destroyCanvas(ctxID);
			return 0;
		},
		createCanvas: function (options) {
			var canvasID = options.id, canvasDOM, parent = $("body");
			if (options.parent !== undefined) {
				parent = options.parent;
			}
			parent.append("<canvas id=\"" + canvasID + "\" width=\"" + options.width + "\" height=\"" + options.height + "\">.</canvas>");
			$("#" + canvasID).css("visibility", "hidden");
			$("#" + canvasID).css("display", "none");
			$("#" + canvasID).css("position", "relative");
			$("#" + canvasID).css("z-index", 10000);
			$("#" + canvasID).width(options.width);
			$("#" + canvasID).height(options.height);
			$("#" + canvasID).offset({ top: options.top, left: options.left });
			canvasDOM = document.getElementById(canvasID);
			canvasDOM.setAttribute("width", options.width);
			canvasDOM.setAttribute("height", options.height);
			return canvasDOM.getContext("2d");
		},
		destroyCanvas: function (id) {
			$("#" + id).remove();
		},
		putWord: function (word, weight, link, target) {
			var $this = this,
				rotate = ( Math.random() < this.settings.options.rotationRatio ),
				fontSize = this.settings.weightFactor(weight),
				h = null,
				w = null,
				mapIndicesX,
				mapIndicesY,
				xIndex,
				yIndex,
				newObj = {},
				font,
				X, Y, gw, gh, center, R, T, r, t, rx, fc, fctx, ctxID, points;
			if (fontSize <= this.settings.minSize) {
				return false;
			}
			this.ctx.font = fontSize.toString(10) + "px " + this.settings.font;
			if (rotate) {
				h = this.ctx.measureText(word).width;
				w = Math.max(fontSize, this.ctx.measureText("m").width, this.ctx.measureText("\uFF37").width);
				if (/[Jgpqy]/.test(word)) {
					w *= 3 / 2;
				}
				w += Math.floor(fontSize / 6);
				h += Math.floor(fontSize / 6);
			} else {
				w = this.ctx.measureText(word).width;
				h = Math.max(fontSize, this.ctx.measureText("m").width, this.ctx.measureText("\uFF37").width);
				if (/[Jgpqy]/.test(word)) {
					h *= 3 / 2;
				}
				h += Math.floor(fontSize / 6);
				w += Math.floor(fontSize / 6);
			}
			w = Math.ceil(w);
			h = Math.ceil(h);
			gw = Math.ceil(w / this.settings.gridSize);
			gh = Math.ceil(h / this.settings.gridSize);
			center = [ this.ngx / 2, this.ngy / 2 ];
			R = Math.floor(Math.sqrt(this.ngx * this.ngx + this.ngy * this.ngy));
			T = this.ngx + this.ngy;
			r = R + 1;
			while (r--) {
				t = T;
				points = [];
				while (t--) {
					rx = this.settings.shape(t / T * 2 * Math.PI);
					points.push([ Math.floor(center[ 0 ] + ( R - r ) * rx * Math.cos(-t / T * 2 * Math.PI) - gw / 2), Math.floor(center[ 1 ] + ( R - r ) * rx * this.settings.ellipticity * Math.sin(-t / T * 2 * Math.PI) - gh / 2), t / T * 2 * Math.PI ]);
				}
				if (points.shuffle().some(function (gxy) {
						if ($this.canFitText(gxy[ 0 ], gxy[ 1 ], gw, gh)) {
							X = Math.floor(gxy[ 0 ] * $this.settings.gridSize + ( gw * $this.settings.gridSize - w ) / 2);
							Y = Math.floor(gxy[ 1 ] * $this.settings.gridSize + ( gh * $this.settings.gridSize - h ) / 2);
							if (rotate) {
								ctxID = pluginName + "Rotator";
								fctx = $this.createCanvas({
									"id": ctxID,
									"width": w,
									"height": h,
									"left": 0,
									"top": 0
								});
								fc = document.getElementById(ctxID);
								fctx.fillStyle = $this.settings.color.background.rgba;
								fctx.fillRect(0, 0, w, h);
								fctx.fillStyle = $this.wordcolor(word, weight, fontSize, R - r, gxy[ 2 ]);
								fctx.font = fontSize.toString(10) + "px " + $this.settings.font;
								fctx.textBaseline = "top";
								if (rotate) {
									fctx.translate(0, h);
									fctx.rotate(-Math.PI / 2);
								}
								fctx.fillText(word, Math.floor(fontSize / 6), 0);
								$this.ctx.clearRect(X, Y, w, h);
								$this.ctx.drawImage(fc, X, Y, w, h);
								$this.destroyCanvas(ctxID);
							} else {
								font = fontSize.toString(10) + "px " + $this.settings.font;
								$this.ctx.font = font;
								$this.ctx.fillStyle = $this.wordcolor(word, weight, fontSize, R - r, gxy[ 2 ]);
								$this.ctx.fillText(word, X, Y);
								h = $this.getTextHeight(font).height;
								w = $this.ctx.measureText(word).width;
							}

							// Build Lookup Table
							if (link !== null) {
								$this.linkTable.push({
									"x": X,
									"y": Y,
									"width": w,
									"height": h,
									"word": word,
									"link": link,
									"target": target
								});
							}

							$this.updateGrid(gxy[ 0 ], gxy[ 1 ], gw, gh);

							return true;
						}
						return false;
					})) {
					return true;
				}
			}
			return false;
		},
		canFitText: function (gx, gy, gw, gh) {
			if (gx < 0 || gy < 0 || gx + gw > this.ngx || gy + gh > this.ngy) {
				return false;
			}
			var x = gw, y;
			while (x--) {
				y = gh;
				while (y--) {
					if (!this.grid[ gx + x ][ gy + y ]) {
						return false;
					}
				}
			}
			return true;
		},
		wordcolor: function (word, weight, fontSize, radius, theta) {
			var output = null;
			switch (this.settings.options.color) {
				case "gradient" :
					output = "rgba(" + Math.round(this.settings.color.start.r + ( this.settings.color.increment.r * ( weight - this.settings.weight.lowest ) )) + "," + Math.round(this.settings.color.start.g + ( this.settings.color.increment.g * ( weight - this.settings.weight.lowest ) )) + "," + Math.round(this.settings.color.start.b + ( this.settings.color.increment.b * ( weight - this.settings.weight.lowest ) )) + "," + Math.round(this.settings.color.start.a + ( this.settings.color.increment.a * ( weight - this.settings.weight.lowest ) )) + ")";
					break;
				case "random-dark" :
					output = "rgba(" + Math.floor(Math.random() * 128).toString(10) + "," + Math.floor(Math.random() * 128).toString(10) + "," + Math.floor(Math.random() * 128).toString(10) + ",1)";
					break;
				case "random-light" :
					output = "rgba(" + Math.floor(Math.random() * 128 + 128).toString(10) + "," + Math.floor(Math.random() * 128 + 128).toString(10) + "," + Math.floor(Math.random() * 128 + 128).toString(10) + ",1)";
					break;
				default :
					if (typeof this.settings.wordColor !== "function") {
						output = "rgba(127,127,127,1)";
					} else {
						output = this.settings.wordColor(word, weight, fontSize, radius, theta);
					}
					break;
			}
			return output;
		},
		updateGrid: function (gx, gy, gw, gh, skipDiffChannel) {
			var x = gw, y, imgData = this.ctx.getImageData(gx * this.settings.gridSize, gy * this.settings.gridSize, gw * this.settings.gridSize, gh * this.settings.gridSize);
			while (x--) {
				y = gh;
				while (y--) {
					if (!this.isGridEmpty(imgData, x * this.settings.gridSize, y * this.settings.gridSize, gw * this.settings.gridSize, gh * this.settings.gridSize, skipDiffChannel)) {
						this.grid[ gx + x ][ gy + y ] = false;
					}
				}
			}
		},
		isGridEmpty: function (imgData, x, y, w, h, skipDiffChannel) {
			var i = this.settings.gridSize, j, k;
			if (!isNaN(this.diffChannel) && !skipDiffChannel) {
				while (i--) {
					j = this.settings.gridSize;
					while (j--) {
						if (this.getChannelData(imgData.data, x + i, y + j, w, h, this.diffChannel) !== this.bgPixel[ this.diffChannel ]) {
							return false;
						}
					}
				}
			} else {
				while (i--) {
					j = this.settings.gridSize;
					while (j--) {
						k = 4;
						while (k--) {
							if (this.getChannelData(imgData.data, x + i, y + j, w, h, k) !== this.bgPixel[ k ]) {
								return false;
							}
						}
					}
				}
			}
			return true;
		},
		getChannelData: function (data, x, y, w, h, c) {
			return data[
				( y * w + x ) * 4 + c
				];
		},
		colorToRGBA: function (color) {
			color = color.replace(/^\s*#|\s*$/g, "");
			if (color.length === 3) {
				color = color.replace(/(.)/g, "$1$1");
			}
			color = color.toLowerCase();
			var namedColors = {
					aliceblue: "f0f8ff",
					antiquewhite: "faebd7",
					aqua: "00ffff",
					aquamarine: "7fffd4",
					azure: "f0ffff",
					beige: "f5f5dc",
					bisque: "ffe4c4",
					black: "000000",
					blanchedalmond: "ffebcd",
					blue: "0000ff",
					blueviolet: "8a2be2",
					brown: "a52a2a",
					burlywood: "deb887",
					cadetblue: "5f9ea0",
					chartreuse: "7fff00",
					chocolate: "d2691e",
					coral: "ff7f50",
					cornflowerblue: "6495ed",
					cornsilk: "fff8dc",
					crimson: "dc143c",
					cyan: "00ffff",
					darkblue: "00008b",
					darkcyan: "008b8b",
					darkgoldenrod: "b8860b",
					darkgray: "a9a9a9",
					darkgreen: "006400",
					darkkhaki: "bdb76b",
					darkmagenta: "8b008b",
					darkolivegreen: "556b2f",
					darkorange: "ff8c00",
					darkorchid: "9932cc",
					darkred: "8b0000",
					darksalmon: "e9967a",
					darkseagreen: "8fbc8f",
					darkslateblue: "483d8b",
					darkslategray: "2f4f4f",
					darkturquoise: "00ced1",
					darkviolet: "9400d3",
					deeppink: "ff1493",
					deepskyblue: "00bfff",
					dimgray: "696969",
					dodgerblue: "1e90ff",
					feldspar: "d19275",
					firebrick: "b22222",
					floralwhite: "fffaf0",
					forestgreen: "228b22",
					fuchsia: "ff00ff",
					gainsboro: "dcdcdc",
					ghostwhite: "f8f8ff",
					gold: "ffd700",
					goldenrod: "daa520",
					gray: "808080",
					green: "008000",
					greenyellow: "adff2f",
					honeydew: "f0fff0",
					hotpink: "ff69b4",
					indianred: "cd5c5c",
					indigo: "4b0082",
					ivory: "fffff0",
					khaki: "f0e68c",
					lavender: "e6e6fa",
					lavenderblush: "fff0f5",
					lawngreen: "7cfc00",
					lemonchiffon: "fffacd",
					lightblue: "add8e6",
					lightcoral: "f08080",
					lightcyan: "e0ffff",
					lightgoldenrodyellow: "fafad2",
					lightgrey: "d3d3d3",
					lightgreen: "90ee90",
					lightpink: "ffb6c1",
					lightsalmon: "ffa07a",
					lightseagreen: "20b2aa",
					lightskyblue: "87cefa",
					lightslateblue: "8470ff",
					lightslategray: "778899",
					lightsteelblue: "b0c4de",
					lightyellow: "ffffe0",
					lime: "00ff00",
					limegreen: "32cd32",
					linen: "faf0e6",
					magenta: "ff00ff",
					maroon: "800000",
					mediumaquamarine: "66cdaa",
					mediumblue: "0000cd",
					mediumorchid: "ba55d3",
					mediumpurple: "9370d8",
					mediumseagreen: "3cb371",
					mediumslateblue: "7b68ee",
					mediumspringgreen: "00fa9a",
					mediumturquoise: "48d1cc",
					mediumvioletred: "c71585",
					midnightblue: "191970",
					mintcream: "f5fffa",
					mistyrose: "ffe4e1",
					moccasin: "ffe4b5",
					navajowhite: "ffdead",
					navy: "000080",
					oldlace: "fdf5e6",
					olive: "808000",
					olivedrab: "6b8e23",
					orange: "ffa500",
					orangered: "ff4500",
					orchid: "da70d6",
					palegoldenrod: "eee8aa",
					palegreen: "98fb98",
					paleturquoise: "afeeee",
					palevioletred: "d87093",
					papayawhip: "ffefd5",
					peachpuff: "ffdab9",
					peru: "cd853f",
					pink: "ffc0cb",
					plum: "dda0dd",
					powderblue: "b0e0e6",
					purple: "800080",
					red: "ff0000",
					rosybrown: "bc8f8f",
					royalblue: "4169e1",
					saddlebrown: "8b4513",
					salmon: "fa8072",
					sandybrown: "f4a460",
					seagreen: "2e8b57",
					seashell: "fff5ee",
					sienna: "a0522d",
					silver: "c0c0c0",
					skyblue: "87ceeb",
					slateblue: "6a5acd",
					slategray: "708090",
					snow: "fffafa",
					springgreen: "00ff7f",
					steelblue: "4682b4",
					tan: "d2b48c",
					teal: "008080",
					thistle: "d8bfd8",
					tomato: "ff6347",
					turquoise: "40e0d0",
					violet: "ee82ee",
					violetred: "d02090",
					wheat: "f5deb3",
					white: "ffffff",
					whitesmoke: "f5f5f5",
					yellow: "ffff00",
					yellowgreen: "9acd32"
				}, colorDefs = [
					{
						re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
						example: [ "rgb(123, 234, 45)", "rgb(255,234,245)" ],
						process: function (bits) {
							return [
								parseInt(bits[ 1 ], 10), parseInt(bits[ 2 ], 10), parseInt(bits[ 3 ], 10), 1
							];
						}
					},
					{
						re: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/,
						example: [ "rgb(123, 234, 45, 1)", "rgb(255,234,245, 0.5)" ],
						process: function (bits) {
							return [
								parseInt(bits[ 1 ], 10), parseInt(bits[ 2 ], 10), parseInt(bits[ 3 ], 10), parseFloat(bits[ 4 ])
							];
						}
					},
					{
						re: /^(\w{2})(\w{2})(\w{2})$/,
						example: [ "#00ff00", "336699" ],
						process: function (bits) {
							return [
								parseInt(bits[ 1 ], 16), parseInt(bits[ 2 ], 16), parseInt(bits[ 3 ], 16), 1
							];
						}
					},
					{
						re: /^(\w{1})(\w{1})(\w{1})$/,
						example: [ "#fb0", "f0f" ],
						process: function (bits) {
							return [
								parseInt(bits[ 1 ] + bits[ 1 ], 16), parseInt(bits[ 2 ] + bits[ 2 ], 16), parseInt(bits[ 3 ] + bits[ 3 ], 16), 1
							];
						}
					}
				], r, g, b, a, key, i, re, processor, bits, channels;
			for (key in namedColors) {
				if (color === key) {
					color = namedColors[ key ];
				}
			}
			// search through the definitions to find a match
			for (i = 0; i < colorDefs.length; i++) {
				re = colorDefs[ i ].re;
				processor = colorDefs[ i ].process;
				bits = re.exec(color);
				if (bits) {
					channels = processor(bits);
					r = channels[ 0 ];
					g = channels[ 1 ];
					b = channels[ 2 ];
					a = channels[ 3 ];
				}
			}
			r = ( r < 0 || isNaN(r) ) ? 0 : ( ( r > 255 ) ? 255 : r );
			g = ( g < 0 || isNaN(g) ) ? 0 : ( ( g > 255 ) ? 255 : g );
			b = ( b < 0 || isNaN(b) ) ? 0 : ( ( b > 255 ) ? 255 : b );
			a = ( a < 0 || isNaN(a) ) ? 0 : ( ( a > 1 ) ? 1 : a );
			return {
				r: r,
				g: g,
				b: b,
				a: a,
				rgba: "rgba(" + r + ", " + g + ", " + b + ", " + a + ")"
			};
		},
		getTextHeight: function(font) {
			// Get text height inside a canvas
			var text = $("<span style=\"font: " + font + "\">Hg</span>"),
				block = $("<div style=\"display: inline-block; width: 1px; height: 0px;\"></div>"),
				div = $("<div></div>"),
				body = $("body"),
				result = {};
			div.append(text, block);
			body.append(div);
			try {
				result = {};
				block.css({ verticalAlign: "baseline" });
				result.ascent = block.offset().top - text.offset().top;
				block.css({ verticalAlign: "bottom" });
				result.height = block.offset().top - text.offset().top;
				result.descent = result.height - result.ascent;
			} finally {
				div.remove();
			}
			return result;
		}

	};
})(jQuery);

// http://jsfromhell.com/array/shuffle
Array.prototype.shuffle = function () {
    "use strict";
    for ( var j, x, i = this.length; i; j = parseInt( Math.random() * i, 10 ), x = this[ --i ], this[ i ] = this[ j ], this[ j ] = x );
    return this;
};

// setImmediate polyfill.
if ( !window.setImmediate ) {
    window.setImmediate = ( function () {
        "use strict";
        return window.msSetImmediate || window.webkitSetImmediate || window.mozSetImmediate || window.oSetImmediate || ( function () {
            // setZeroTimeout: "hack" based on postMessage
            // modified from http://dbaron.org/log/20100309-faster-timeouts
            if ( window.postMessage && window.addEventListener ) {
                var timeouts = [],
                timerPassed = -1,
                timerIssued = -1,
                messageName = "zero-timeout-message",
                // Like setTimeout, but only takes a function argument. There's
                // no time argument (always zero) and no arguments (you have to
                // use a closure).
                setZeroTimeout = function ( fn ) {
                    timeouts.push( fn );
                    window.postMessage( messageName, "*" );
                    return ++timerIssued;
                },
                handleMessage = function ( event ) {
                    // Skipping checking event source, IE confused this window object with another in the presence of iframe
                    if ( /*event.source === window && */event.data === messageName ) {
                        event.stopPropagation();
                        if ( timeouts.length > 0 ) {
                            var fn = timeouts.shift();
                            fn();
                            timerPassed += 1;
                        }
                    }
                },
                fnId;
                window.addEventListener( "message", handleMessage, true );
                window.clearImmediate = function ( timer ) {
                    if ( typeof timer !== "number" || timer > timerIssued ) {
                        return;
                    }
                    fnId = timer - timerPassed - 1;
                    timeouts[ fnId ] = ( function () {} ); // overwrite the original fn
                };
                // Add the one thing we want added to the window object.
                return setZeroTimeout;
            }
        } )() || function ( fn ) {
            // fallback
            window.setTimeout( fn, 0 );
        };
    } )();
}
if ( !window.clearImmediate ) {
    window.clearImmediate = ( function () {
        "use strict";
        return window.msClearImmediate || window.webkitClearImmediate || window.mozClearImmediate || window.oClearImmediate || function ( timer ) {
            // "clearZeroTimeout" is implement on the previous block ||
            // fallback
            window.clearTimeout( timer );
        };
    } )();
}

redpajama_set_name: RedPajamaGithub


text:
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
  pkg_search_module(PC_POPT QUIET popt)
endif ()

# Find the include directories
FIND_PATH(POPT_INCLUDE_DIR
    NAMES popt.h
    HINTS
          ${PC_POPT_INCLUDEDIR}
          ${PC_POPT_INCLUDE_DIRS}
    DOC "Path containing the popt.h include file"
    )

FIND_LIBRARY(POPT_LIBRARY
    NAMES popt
    HINTS
          ${PC_POPT_LIBRARYDIR}
          ${PC_POPT_LIBRARY_DIRS}
    DOC "popt library path"
    )

include(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(POPT
  REQUIRED_VARS POPT_INCLUDE_DIR POPT_LIBRARY
  VERSION_VAR PC_POPT_VERSION)

MARK_AS_ADVANCED(POPT_INCLUDE_DIR POPT_LIBRARY)


text:
Haitian diplomat warns of new dictatorship in new book
Raymond Joseph, Haiti's former ambassador to the United States. (Credit: Larry Luxner)
Raymond Joseph, Haiti's former ambassador to the United States. (Credit: Larry Luxner)
WASHINGTON — Jan. 12 marks five years since a magnitude-7.0 earthquake razed Port-au-Prince and threw Haiti into chaos. Raymond Joseph was Haiti's ambassador to the United States at the time. While his country's president and politicians hid from the public, he famously filled the void of leadership, activating the international community's first-aid response.
Now Joseph, 83, is stepping forward once again, this time to warn against the rise of a new dictatorship in Haiti.
"For Whom the Dogs Spy" — which spans history from the dictatorships of François "Papa Doc" and Jean-Claude "Baby Doc" Duvalier to the current day — is an insider look at Haiti by a diplomat who served under four presidents. Joseph will be signing the book at a Jan. 12 "We Remember Haiti" launch party in New York.
The 352-page book paints a chilling portrait of how Haiti has suffered devastation at the hands of both nature and man. Among other things, it describes how Papa Doc used the legend of voodoo to bewitch Haiti into fearing him, and how he set Joseph up to be kidnapped in New York.
The book also discusses the harmful role New York's governor, Nelson A. Rockefeller, played in the early 1960s in supporting the Duvalier dictatorship, and the involving of Rudy Giuliani and Bill Clinton in Haitian politics.
"Ray Joseph, among the most distinguished Haitians of recent generations, has given us a compelling memoir that is also a penetrating modern history," writes Peter Kann, former chairman and CEO of Dow Jones & Co., and former publisher of the Wall Street Journal, where Joseph worked as a reporter in his early days. "Presidents Duvalier, Aristide and Martelly, voodoo, cruelty, carnivals, corruption and the environmental degradation of Haiti — all are laid bare on these pages."
Adds Pulitzer Prize winner Stanley Penn: "Ray Joseph is the voice and conscience of Haiti. Nobody can tell the story better."
"For Whom the Dogs Spy" — which spans history from the dictatorships of François "Papa Doc" and Jean-Claude "Baby Doc" Duvalier to the current day — is an insider look at Haiti by a diplomat who served under four presidents.
On the brink of dictatorship
Joseph is convinced that Haiti is on the brink of dictatorship.
"If the political leaders in Haiti had the muscles, and were not hamstrung by international constraints, they would have already instituted a dictatorship there. In fact, the Haitian government has been slowly moving toward dictatorship ever since it failed to hold local elections in 2011," he said. "The specter of a president ruling by decree is a distinct possibility. That, in effect, would be a dictatorship."
And that would have dire consequences for the United States as well, he warned.
"Unrest in Haiti has led to a flow of political and economic refugees from Haiti to the U.S. Moreover, billions of foreign dollars are required to keep order in Haiti," he said. "For example, MINUSTAH — the United Nations military force that operates in Haiti — has been active for over a decade. Who is paying for its upkeep? U.S. taxpayers are major contributors."
The book's title, "For Whom the Dogs Spy," was inspired by an urban legend in Haiti that certain animals — especially dogs — could spy for Papa Doc. That helped instill fear of his regime, which lasted from 1957 to 1971 (his son took over and ruled until his ouster in 1986). Baby Doc died of a heart attack last October at the age of 63.
Voodoo still plays a part in Haitian politics, said Joseph.
"For example, the Haitian consul general at a major post refused to meet his predecessor because his witch doctor told him that he shouldn't shake hands with the former consul, whose hands were mystically 'mounted,' and would cause the failure of his mission," Joseph said. "That consul changed all the furniture in the office and ordered a new, expensive vehicle to ward off negative vibes that were supposedly left behind."
He added: "When I was called back in 2004 to take over the Haitian Embassy in Washington, a Haitian mystic offered to wipe my office clean. I thanked him and said I knew what to do."
Asked what he wants readers to take away from his book, Joseph emphasized that Haiti — despite its current impoverishment — was not always the poorest country in the Western Hemisphere.
"Two centuries ago, Haiti successfully defeated slavery and paved the way for the liberation of the Western Hemisphere from European colonialism. As retaliation, slave-owning powers of the day ostracized and punished Haiti by instituting strict embargoes, so Haiti's development was mortgaged from the beginning," he said.
"Haiti's leadership has also contributed to its downfall," he added. "For the most part, its leaders over the years have been interested in personal power — for life — and self-aggrandizement, leading to the current situation of the country, which finds itself at the bottom of a pit."
larry@luxner.com
Larry Luxner
Sorry! The Author has not filled his profile.
Related tags : dictatorshipearthquakeHaitiRaymond Joseph
Puerto Rico Investment Summit slated for Feb. 26-27
Medtronic shareholders approve Covidien acquisition
Hey Buddy!, I found this information for you: "Haitian diplomat warns of new dictatorship in new book". Here is the website link: https://newsismybusiness.com/haitian-diplomat-dictatorship/. Thank you.

redpajama_set_name: RedPajamaCommonCrawl


The use of laptops in every part of life has increased due to its portability, mobility and durability. Whether you are a student, a business person or working mom, the need of laptop is essential part of life.
Especially in the era when technology is used instead of man power, the use of laptops has made it easier for us to work. A machine that can be taken everywhere containing everything you need to do work or entertain yourself. Laptops are available easily at any electronic store but the problem arises when one has to pay each and every penny to get a high tech laptop. But now with online coupons or deals you can get the laptop in cheap price by availing deals and discounts.
Thinking of buying desktop computer nowadays can be little awkward especially for the people who want their computer all the time. No doubt desktop computers are best for the use at home but cannot fulfill the requirements of people who need it all the time with them to work. To buy a laptop one has to think of many factors such as total budget, use and purpose. Knowing your need can help you find the specifications and features you need in a laptop. For example if you need a laptop for work purpose you will have to get the laptop of high processor speed with maximum storage that can keep your data safe. But for the people who need it for just gaming purpose and chatting with friends can go for laptops with lower specs.
Finding the right laptop for your needs can be done if you conduct proper research. Before buying a laptop you must look for different brands selling laptops with varying features and specs. You must list down the features and specifications first in order to get the one fulfilling your needs. Look for the high memory RAM, hard disk and processor so that it can perform faster and does not lag. There are some other features to look for such as what size of screen will be suitable for you. Also look for the extra peripheral devices such as WI-FI and Bluetooth so that it can provide you better user experience. You must also find the user reviews and ratings to determine the performance and durability of laptop.
Go through pros and corns of the laptop to get the best laptop. Go for the warranty and after sales services provided by company. In the future if you face any problem with the hardware you can claim it. Make sure that your warranty gives you the best coverage from parts that may not work properly. You can find thousands of laptops at local store but may not get it in cheap price. Finding the laptop that can meet your needs in limited budget you must go online with some discounts way.
Nice and beautiful post thanks for sharing.
Yes I like what is you say "Finding the right laptop for your needs can be done if you conduct proper research".


text:
WoG Blog #3 Marketing & Myth Creation Legends
by Evan Cantor
The success of Walls Of Genius, regardless of how you define it, was not solely due to the work itself. That product would have never been noticed by the "Cassette Culture" if it had not been for the persistent and successful creation of a number of mythologies, both self-conscious misinformation and unintended misconceptions, that added value to the product. Don't get me wrong—Walls Of Genius would have existed regardless of the existence of a "Cassette Culture" and essentially did prior to our discovery of the scene. But the potential of an audience and/or market was a large motivator for development. Inspired thusly, Walls Of Genius reached out to the world in its own unique way.
The first mythology pursued was the illusion of an active underground music scene in Boulder, Colorado. This evolved innocently from the original jam sessions. Disgusted with previous band experiences, I gave each recording a different "band" name. This was prior to the project coalescing as "Walls Of Genius" proper. There were The Dirt Clods, The Have Mersey Beats, Jerry's Kids, The Ed'n'Evan Hullabaloo, Big Man On Campus, Good Enough For A Hell-Hole, et. al. These groups were eventually "presented by Walls Of Genius" on cassette albums before the truth was fully revealed, namely that they consisted of the same three core musicians: Evan Cantor, Little Fyodor and Ed Fowler. With the addition of guests (most notably Dena Zocher at the cello) and the strapping on of different musical instruments, each of these groups had a different "sound" and the illusion was complete. We allowed the illusion to perpetuate itself, as both a joke on the Cassette Culture scene and a marketing ploy to attract attention. There was an element of irony involved since Boulder's music scene had previously been primarily associated with white-bread soft-rock acts like Dan Fogelberg and Firefall. Creating interest and curiosity, the ploy worked and when the illusion vanished, interest and curiosity remained. Eventually an actual underground scene in Boulder developed and we were a part of it.
An illusion that took forever to vanish was that of Walls Of Genius as musical naïfs, primitives who didn't know how to play their instruments but wailed away nonetheless. We encouraged this, going so far as to proudly name ourselves "Head Moron" and "Associate Morons" and issuing "Certificates of Genius" in childish, error-laden script. The emergence of Little Fyodor as one of Walls of Genius' "acts" is a prime example musically, as were our collaboration as "The Fabulous Pus-Tones" and my autistic deconstructions of Creedence Clearwater
Revival and Hank Williams titles as "Joe Colorado".
Little Fyodor (and he will likely disagree with me) had long been insecure about his chops on the guitar, but there's no doubt the man can play. Of course, he has his own inimitable style, love it or hate it as you will. Before there was Little Fyodor, there was John Leningrad, writing distinctive songs before we ever teamed up as Walls Of Genius. In the process of creating the illusion of a scene, and partially as a result of the emergence of the Little Fyodor persona, I attempted with both music and literature (mail-order catalogs) to create the personas also of Joe Colorado and Red Ed. Ed never really warmed up to this, but I pursued Joe Colorado's autistic deconstructions. So while we never had much in the way of Ed Fowler "solo" selections, there was plenty of Fyodor and Joe. Fyodor and I assisted each other with these constructions as that was the only way we knew to stretch the limits of 4-track technology. Two people recording simultaneously on each track gave you eight things going on instead of only four. It took concentration and cooperation. (I will discuss the perils and rewards of 'group-think' separately)
Since Little Fyodor's music (as well as my own) expressed a good deal of angst, romantic anomie and social alienation, I ran with those themes hyperbolically in the Walls Of Genius catalogs. I drew obscene cartoons, which Fyodor wisely chose to nix. But meanwhile, I drew more appropriate cartoons, wrote various over-the- top, patently ridiculous promotions and even had a tongue-in-cheek essay published, "The Curse Of Little Fyodor". Perhaps I had gone too far. But in the long run, the persona of Little Fyodor was a successful creation, as evidenced by his long solo career as a performer and recording artist. The persona, or myth, of "Little Fyodor" that developed during that 80s heyday remains firmly in place.
Further, Walls Of Genius' parodies of top-40 rock music, jazz deconstructions, folkie madness, extended improvisations and Wild-Man- Fischer-stylized autistic explosions could not have been accomplished if I wasn't already an experienced musician, having played the bass and electric guitar in a number of bands since high school. Those bands, in no particular order, performed fraternity party pop (Long Lost Friend, Wishing Well), folk, blues & country (Folk Grass Blues Band), jazz (Mystic Knights Of The Sea), punk (The Blitz Bunnies), prog-rock (Dreamer Easy) and new-wave (Rumours Of Marriage). This experience was brought to bear when I decided I had had enough of the straight music business and started in with what eventually became Walls Of Genius. So if you listened carefully, you'd hear all of that experience manifested. But we allowed the illusion of
musical naïfs to grow because it created more curiosity and interest in what we were doing, perhaps lending a strange kind of legitimacy to it, like outsider art. Of course there is the myth that we were just screwing around, that we never took what we were doing seriously. There is a grain of truth to this idea, but only a grain. The myth appears to live on to this very day, as if considering Walls Of Genius seriously is antithetical to the nature of the project itself. Proof that myth can sometimes be indestructible.
Last on my list of myths is the one that developed all by itself in the years after our 1980s heyday, the idea that Little Fyodor was the prime mover and motivating force behind Walls Of Genius. This myth culminated in a recent review lauding Little Fyodor for vocalizations that issued from my own mouth and no other. Upon notifying the reviewer of this factual error, he published a retraction, adding the disclaimer that he hardly believed it.
This stubborn myth evolved quite naturally out of circumstances. When I dis- banded Walls Of Genius in 1986, I dropped out of the Cassette Culture shortly afterwards and disappeared for almost 30 years, pursuing graduate school and then the visual arts, most notably in wilderness conservation. I truly believed that nobody would ever give a damn about Walls Of Genius or Little Fyodor. I am happy to report that I was wrong. I was unaware of the interest in Walls Of Genius that Little Fyodor had kept current in service of his continuing career in avant-garde performance. So it was his ongoing effort to keep Walls Of Genius alive that led to this particular misconception. Note that Fyodor himself never self-consciously promulgated this myth, it just arose all on its own. It's an easy misconception to get. When one refers to "my old band from the 80s", there is an element of ownership expressed that is both on-and- off the mark. I felt that Walls Of Genius was "my" old band from the 80s. I started it, produced it, recorded it, and ran it, sometimes despotically I admit. But as a primary member of the group, it was also Fyodor's old band from the 80s. I credit Fyodor for having always been quite gracious about our collaborative efforts.
Little Fyodor
For whatever it is or isn't worth, I would like to report that upon offering offering Eugene Chadbourne (an underground star!) a Walls Of Genius tape for trade (along with some Little Fyodor material) after a performance he gave in Denver back in the day (replete with electric rake!), he looked at it good and said, "Oh—Evan Cantor, right?" After I confirmed that this was indeed that very same Walls Of Genius, he remarked, with a big, mischievous smile, "Well—I hope this one lives down to the others!" Haha!!
Hahahahahaha. In the article about WoG's Crazed To The Core you wrote something about... <<"Wow, your 'bad music' is getting good!" I heard that quoted from Marsha Wooley, who seemed to previously have had mixed feelings about us since our humble beginnings, despite being an occasional participant.>>
Evan Cantor
I hope the tape lived "down" to Eugene's expectations!
Heh, I guess "your bad music is getting good" could sound like mixed feelings by itself, but it was the way she said it that made it sound like she was actually genuinely impressed this time! There were a lot of reactions like that, like a review that started off, "This tape is awful, awful, awful, awful, awfully funny!" (Give or take an awful or two!) To which Evan reacted: "They just HAVE to say it!!" Don't think I ever talked to Eugene again.....
Great article! I have really enjoyed knowing the true story of Walls Of Genius!
Walls Of Genius
formed in 1982, a musical performance-art comedy experimental noise ensemble, featuring everything from musique concrete, sound collage and extended rock improvisation to demented top-40 parodies, free jazz, industrial and audio experiments of all kinds, mostly fitting in no category whatsoever.
Over the course of the next four years, Walls Of Genius took the underground by storm and rained on every conceivable parade, all with tongue firmly in cheek and cockeyed smiles.
The brain-child of disgruntled musician and self-anointed "Head Moron" Evan Cantor, Walls Of Genius' other founding members ('genial genii') were the famous wild-man Little Fyodor and electric guitar wizard Ed Fowler.
Stalwarts of the early 80's cassette culture scene, Walls Of Genius was both loved and reviled in equal measure.
By 1986 WoG had disbanded and was inactive until reunion sessions in 2014 re-ignited the flame. They happily soldier on, voices crying in the wilderness of madness that is this world in the 21st century.
Evan Cantor email
Little Fyodor email
Walls Of Genius Bandcamp
WoG Archival site


As from January 2018 we have been trialling a new appointment system.
We have removed the on call triage list.
In order to signpost patients to the correct service for their condition they are asked to provide the receptionist with as much information about their condition as possible. This is not a clinical triage, it is a clarification of need and the receptionist is then able to make the patient an appointment with the most suitable clinician to help them.
With our new system of working, the aim is that there are always appointments available throughout the day. Patients will no longer need to phone first thing in the morning or phone back the following day to book an appointment.
We ask however, that wherever possible, if a patient has an urgent condition that needs assessment, that they still contact us before 11am.
We feel this is a great step forward in being able to offer a more accessible and timely appointment system for our patients. Patient feedback as we progress has been very encouraging. This was especially demonstrated in the week after the Christmas break which is historically a time of high demand for GP appointments, and especially this year with the current flu epidemic.
Over the past six months we have recruited four new receptionists to add to our team. This has also improved our call answering time as we have been able to reduce our call waiting times significantly. The reduction in waiting time is not only because we have employed additional staff, but also call duration has reduced as we have more 'same day' capacity to offer patients an appointment where necessary.
Patients also feel reassured that appointments are available to book throughout the day which has meant there is a lower volume of calls at 8am each morning and therefore call waiting time has reduced too.
It has lowered our waiting time for a routine appointment from 14 days to within 48 hours.
Or in the case of other minor problems (and flu symptoms with no previous risk from long term medical conditions or other possible complications), patients are signposted to their local pharmacist for advice in the first instance with advice on contacting the practice again within a few days if symptoms have not resolved having initially self-medicated.
We operate a 'Named GP' system each morning and afternoon, where urgent queries (but not issues that would previously have been considered 'triage/ on call') are overseen by either the Reception Manager or her Deputy. These patients are added to an 'on screen' list by the call handlers, the Reception Manager/Deputy review these calls and then navigate to either the 'Named GP' for the shift or redirect back to the call handler for redirection if felt inappropriate for the GP to deal with. The Reception Manager and Deputy Reception Manager work opposite shifts to each other to ensure that the Reception/Call Handling team are supervised from 7.30am-6.30pm each day.
We have 'same day' appointments which are released at various intervals throughout the day, ie. 8am, 12 noon and 4pm to ensure that we have appointments available throughout the day, as well as telephone slots (and Named GP slots for urgent queries – see above). We also have bookable appointments to book 'within 14 days'. This means we have approximately 50% pre-bookable and 50% same day appointments available.
This new system is working well. We have plenty of appointments to offer patients on the day, and are able to offer patients appointments well within the 14 day allocation where preferred. Feedback is favourable and we have been able to facilitate patient demand with this new way of working. We have been able to remove a daily 50+ triage /call back patient list every day, offer same day appointments to those that require them, and keep 'urgent queries' for the Named GP/On call doctor to a maximum of 5 per morning or afternoon session.
Navigation has also meant that we are able to empower our reception team to take ownership of their role. They are able to add information for the GPs to patient consultation notes to track events, and are encouraged to review consultation notes to enable accurate signposting to the correct destination that is most appropriate for patient needs. They can also generate non-clinical patient letters that do not require GP input, ie. details of patient registration, ie. NHS number and address for the Home Office to lessen demand on GP time.
They also follow up DNA patients at the end of the day, both as a matter of welfare to ensure the patient is safe and well, but also as a tactful reminder that they missed an appointment which could otherwise have been offered to another patient.
The reception/call handling team are enjoying this new way of working, they embrace the challenge of Navigation, and have improved job satisfaction in an improved service for our patients.


June 4 Portland Labor Against the Fascists mobilization brought out hundreds.
A strategy to fight the deadly danger posed by the fascists must take account of their role in "triggering" state repression. We are not only dealing with the several thousand organized neo-Nazis and Klansmen, who are plenty dangerous, or a few masked buffoons waving sticks, but the more powerful and sinister forces arrayed behind them. The liberal tactic of ignoring these violent racists while relying on the police and demonizing antifa militants only intensifies the danger. The pseudo-socialists who organize diversionary parades far from the sites of the fascist provocations are aiding the government in trying to prevent mass action that could actually drive the fascists off the streets. Militant workers action is urgently needed to bring to bear the power of the proletariat against these provocateurs who would act as a battering ram for the bourgeoisie to destroy the unions and all those who fight against oppression. They can and must be stopped.
This call for workers action is not some abstract or unrealizable pipedream. It has begun to be carried out, first in Portland, Oregon1 and now in the San Francisco Bay Area. As always, the key is the intervention of class-struggle militants. In Portland, preparations for labor action against the fascists go back to the motion that was approved by Local 10 of the Painters Union (IUPAT) last November as racist attacks multiplied in the aftermath of the election of Donald Trump. The motion to "Mobilize Labor to Stop the KKK" was put forward by members of Class Struggle Workers – Portland.2 This inspired six other area unions to pass similar resolutions. As a result, when a fascist/racist rally was announced for June 4, the groundwork had been laid for the Portland Labor Against the Fascists mobilization which brought out several hundred unionists from 14 area unions in the first significant labor action against the fascists in decades.
In the Bay Area, the announcement of a rally on August 26 by some of the same fascists who staged the provocation in Portland led Local 10 of the International Warehouse and Longshore Union (ILWU) to likewise pass a "Motion to Stop the Fascists in San Francisco." The union vowed to shut down the port and "march to stop the racist, fascist intimidation." This call to action was directly inspired by the Portland mobilization, and IUPAT Local 10 sent a message of solidarity to ILWU Local 10. Other unionists and leftists, galvanized by this call by the most powerful and historically militant union in the area, mobilized to follow the ILWU into battle. The fascists, seeing the balance of forces arrayed against them in this union town, felt compelled to run away before the fight had even begun.3 This victory should be a clarion call to labor and opponents of racism and fascism everywhere.
Workers mobilization is key to stopping the racist terrorists in their tracks. That requires painstaking preparation, and the relentless exposure of the bourgeois liberals and opportunist leftists who stand in the way of effective antifascist action.
In the San Francisco Bay Area in late August, the counterposed strategies were thrown into sharp relief when fascist groups called a weekend of rallies amid the outrage over the murder in Charlottesville. On Saturday, August 26, Joey Gibson of Patriot Prayer called a "Freedom Rally" at Crissy Field in San Francisco near the Golden Gate Bridge. The next day a "No to Marxism in America" rally was called by Alt-Rightist Amber Cummings at Martin Luther King Park next to Berkeley's Old City Hall. In both cases, liberal Democratic politicians moved to ban the rallies, then ended up promoting "peaceful" events together with various human rights groups and labor bureaucrats to promote "love" over "hate," and above all to avoid "confrontation." But others were determined to stop the provocations. In the end, both fascist events were called off.
The first and key event was the Saturday Patriot Prayer rally in San Francisco. Democratic politicians including House of Representatives minority leader Nancy Pelosi and SF mayor Ed Lee tried to get the federal Park Service to cancel the rally permit, as the Portland, Oregon mayor also tried leading up to June 4. In the face of the feds' refusal, the mayor called a "San Francisco Stands United Against Hate" rally at City Hall on Friday (endorsed by the SF Labor Council). A Saturday march was called by "San Francisco Peacefully Unites Against White Nationalists" at the Civic Center, far from the scheduled fascist event. But those events hardly fazed Gibson's "patriots." Both would have let the racist/fascist rally go ahead unimpeded.
What tipped the balance was the decision by ILWU Local 10 to call for labor mobilization to "Stop the Fascists in San Francisco."4 This became the rallying point for leftists and union militants vowing to stop the fascist provocation. The Internationalist Group publicized this significant motion and comrades traveled to the Bay Area to help build for an action by the most powerful and historically militant union in the area to shut down the fascists. But there were difficulties in organizing, and a contentious planning meeting four days before the event. Most importantly, Local 10 president Ed Ferris got cold feet, issued a statement saying members could choose what event to go to, and joined the Democrats' call on the feds to cancel the permit.
However, the day before the event, Gibson called off his rally saying that he "felt like it was going to be a huge riot," specifically citing counterprotesters. He called a press conference for Alamo Square Park, but as antifascist demonstrators mobilized to gather there, he cancelled that as well. On Saturday close to Crissy Field, IG supporters met a group of workers from IBEW (International Brotherhood of Electrical Workers) Local 6 who had also been inspired by ILWU Local 10's resolution. Together with a contingent of painters from IUPAT Local 10 who had traveled from Portland to join the antifascist mobilization, IG comrades later joined the IBEW Local 6 activists at their union hall and marched as a small labor contingent to Alamo Square where they were joined by members of the ILWU-affiliated Inland Boatmen's Union. They were cheered as they arrived, and after some speeches – the last being greetings from the Portland painters – over a thousand protesters held a victory march to the Mission District.
In San Francisco, a reformist left coalition, which had planned to join the ILWU march on Crissy Field and then went to Alamo Square after Patriot Prayer canceled, adopted the name "San Francisco Against Hate," mimicking the mayor's event. This liberal terminology is a deliberate attempt to obscure the need for sharp class struggle against the fascists. Even Donald Trump could denounce "hate" in his "both sides to blame" whitewash of the fascists. Across the Bay in Berkeley on Sunday, August 27, the reformists went a step further and themselves organized a stay-away-from-the-fascists event under the name of "Bay Area Rally Against Hate." But despite their best efforts, a big chunk of the crowd didn't want to stay away and marched to the fascists' rally site, only to find that the handful who showed up had already been run off by several hundred antifa militants.
In the aftermath, the International Socialist Organization (ISO) has tried to credit the "Rally Against Hate," which it played a large part in organizing, with the departure of the fascists, claiming "Bay Area resistance scares away the alt-reich" (Socialist Worker, 28 August). Other co-sponsors of the anti-hate rally include the social-democratic Socialist Alternative (SAlt), Socialist Action and Democratic (Party) Socialists of America (DSA), the Maoist Revolutionary Communist Party (via its RefuseFascism.org front group), the Communist Party USA and "dozens of unions, student and community groups." It was a typical popular-front event tying labor and the left to Democratic Party liberals, in this case including the East Bay Young Democrats, Berkeley Democratic Club, Cal Berkeley Democrats, etc.
The ISO also tries to make out that the anti-hate rally was counterposed to Berkeley mayor Jesse Arreguin, who got the city council to pass an emergency ordinance allowing the police to regulate demonstrations in the downtown area. But after earlier telling people to stay off the streets, Arreguin ended up printing 20,000 "Berkeley Stands United Against Hate" posters and issuing an August 23 statement urging people to go to the Bay Area Rally Against Hate, among other events. The ISO also neglects to mention that there was another antifascist rally, called by SURJ (Standing Up for Racial Justice), that met at a site closer to MLK Park and which from the outset said it would march to the fascists' announced meeting place. That march drew several thousand, while others, including antifa and By Any Means Necessary, went directly to the Park.
Also present at Sunday's social-democratic/liberal stay-away–from-the-fascists rally in Berkeley was the Spartacist League (SL) and its Partisan Defense Committee, which had a contingent with banners against the Democratic Party and calling for labor/black mobilization to stop the fascists. The SL had earlier greeted the ILWU Local 10 motion, saying it would join the union in fielding its own contingent on Saturday in San Francisco. However, no such Spartacist contingent was to be seen at Crissy Field or Alamo Square.
In its article on the Bay Area events (Workers Vanguard, 8 September), the SL goes on at length denouncing the "Cynical Charlatans of the Internationalist Group" for supposedly helping union bureaucrats "perpetrate" a "fraud." It additionally takes aim at Jack Heyman, a retired longshoreman who drafted the "Motion to Stop the Fascists in San Francisco" and who has initiated and helped lead militant actions by Local 10 against racist attacks and police terror for decades.
The ILWUers "had gone to the hall for work, not to march against the fascists," wrote WV. The WV article disappears a fundamental fact: the fascist event had already been called off the day before. In our leaflet we wrote that the longshore union should have "taken the next step to bring out the membership in a mass labor-led victory march." But the reality is that the union leadership called off the march for the same reason the SL didn't show up with its promised contingent: Gibson had cancelled. The fact is that the SL joined with the ILWU tops in demobilizing.
The Spartacist League has made much of a supposed qualitative "retrogression of consciousness" of the working class, in order to justify the SL's flight from the class struggle. Blinded by its "theory" of abstentionism, the SL can't fathom that the heavily black unionists of Local 10 who had voted unanimously to stop the fascists would want to celebrate the fact that the would-be lynchers had been prevented from mobilizing for racist terror in their city, and that they had played a key role in this. To label that and the whole effort toward a labor mobilization a fraud speaks volumes about the actual retrogression of consciousness of these ex-Trotskyists.
Interesting account. What's missing in this picture? Nothing about the Spartacist League. Why? Because the SL wasn't there, while the IG was.
So according to WV it was a victory after all. What led to that? The preceding paragraphs call Gibson's whining about the Democratic city officials whipping up "tons of extremists" against him an "invention." They note that over 1,000 protesters marched to Alamo Square to confront the fascists. That's who Gibson was afraid of. And who were they? These were same protesters who had called to march behind the banner of the ILWU.
The reality is that the fascist provocation was stopped, that was a victory, and the ILWU's call to action was key. Our leaflet told the truth, the SL denies it in order to justify their inaction.
As for the denunciation of retired Local 10 militant Jack Heyman, a recurring obsession for the SL, WV writes: "The only call to action ever issued to the Local 10 membership was signed by Heyman and an active longshoreman, who called themselves 'Longshore Workers to Stop the Fascists." This is a "crime"? So when the union leadership fails to take steps to carry out the motion – not the first time that has happened – union members who seek to mobilize the ranks are denounced as "serving as the bureaucracy's handmaiden"!
The real fraud is the Spartacist League's claim to be for labor/black mobilization to stop the fascists. The SL's whole flimflam is a cover for the fact that it didn't lift a finger to try to bring out the ranks of labor, not then or any time in the last few months. It didn't even bother to attend the union-called planning meeting. It didn't show up at Crissy Field or Alamo Square. Its only action that weekend was a contingent at the reformist/liberal don't-confront-the-fascists rally in Berkeley.
The SL is fixated on denouncing Heyman for the same reason he is constantly attacked by the ILWU International tops: because he has over and over sparked and played a leading role in the class-struggle actions by Local 10 that the union bureaucracy has sought to sabotage and that SL supporters in the union have boycotted and bad-mouthed. The SL obsessively attacks Jack Heyman because he is the mirror in which its own abstentionism is reflected.
To justify this shameful policy, the serial prevaricators of the latter-day Spartacist League have had to repeatedly lie about, distort or be silent about actions initiated by or participated in by the Internationalist Group and the League for the Fourth International, of which the IG is the U.S. section (and which the SL never mentions).
On 24 April 1999, the day after the Brazilian teachers' work stoppage and in coordination with it, the ILWU (on a motion by the same Jack Heyman) shut down every port on the West Coast for eight hours demanding freedom for Mumia. The union marched in San Francisco at the head of 25,000 people chanting "An injury to one is an injury to all, Free Mumia Abu-Jamal." The SL's response was to deride the union action as nothing more than an extended lunch break. It later admitted that its response had been sectarian.
Then when on May Day 2008, the ILWU again shut down all 27 West Coast ports calling to stop the war in Iraq and Afghanistan, the SL dismissed this as a flag-waving social-patriotic cover for the Democratic Party and U.S. imperialism. It quoted the words of the ILWU International president who had opposed the walkout, and when he couldn't stop it, tried to sabotage and then distort it. The SL blithely ignored the fact that the motion calling for this first-ever strike by U.S. workers against a U.S. imperialist war explicitly denounced the Democrats for failing to stop the war.
Nor has the SL even mentioned the Portland Labor Against the Fascists June 4 mobilization, initiated by Class Struggle Workers – Portland, which is fraternally allied with the IG. In reality, the SL's latest hit piece in Workers Vanguard is its desperate attempt at a response to the Portland workers' groundbreaking action, grasping at straws to excuse its own abstention. There's a method here, beyond the transparent sectarianism. In each case, the Spartacist League takes the betrayal or sabotage or demobilization by the bureaucracy as an excuse to attack the militants who fought for class-struggle action.
The fact that the union misleaders fail to mobilize, that they support the Democratic Party, that they push through sellout contracts only underscores the need to build a class-struggle opposition in the unions, which the Internationalist Group does and the Spartacist League does not – even where they have supporters in the union, as in the ILWU.
5 The SL and its misnamed International Communist League abandoned the Brazilian comrades in 1996 precisely when they were under attack by pro-police elements who brought cops into the union meeting, saying they had to "take their hands out of the boiling water," quit their elected union posts and leave town. And then the SL/ICL smeared the black Trotskyist militants as "dangerous hustlers" and actively tried to sabotage their defense campaign when police raided their office demanding lists of their members. For documentation, see our dossiers on Class Struggle and Repression in Volta Redonda, Brazil (February 1997) and Responses to ICL Smear Campaign Against Brazilian Trotskyists (May 2010).


Publish by in Category interior design at September 22nd, 2018. Tagged with bench in front of bedroom window. bench in front of big window. bench in front of large window. bench in front of picture window. bench in front of window. bench in front of window living room. bench seat in front of window.
Bench In Front Of Window have 50 picture of interior design, it's including Bench In Front Of Window Breathtaking Furniture Large Image For Nice On Hall Interior Design 1. Bench In Front Of Window Lovely Seat Ideas For Bay Interior Design 2. Bench In Front Of Window Unbelievable Bridgeconnect Co Interior Design 3. Bench In Front Of Window Tremendous I Would Take Naps On This Thing Kitchen Seat Pinterest Interior Design 4. Bench In Front Of Window Outstanding Improbable Possibility Master Would Height Interior Design 5.
Tags : bench in front of bedroom window. bench in front of big window. bench in front of large window. bench in front of picture window. bench in front of window. bench in front of window living room. bench seat in front of window.


Fundamental analysis of Oil India Limited -Equity Research Report based on future prospects, current price, ratio. (before Minority Interest and share of.
You can use this live information to study the market, gain insight into trends in the XRP to INR trading price and act.We plan to benchmark the coins based on our algorithm to determine how valuable a coin is.
Companies that are looking for wider exposure to the market and that have expansion and leveraging plans and plan to plough the market for.Ethereum attracted a whopping 34.4 percent of the total currency searches in India while. when the price of bitcoin. enthusiasts that any coin can hit.
Andra Pradesh is a state in India which is home to over 50 million people. The Zebi Coin (ZCO) is a utility.
Nayara Energy (formerly Essar Oil) is one of the largest oil refinery in India.
Bitcoin Share Price Latest Breaking News, Pictures, Videos, and Special Reports from The Economic Times.
The Central Bank of India - RBI has responded to an RTI query about why the decision to block banks from dealing in cryptocurrency.
Stay up to date with real time NSC stock quotes, historical charts and the latest financial news and investing data for Norfolk Southern Corp.HP Inc. stock price, stock quotes and financial overviews from MarketWatch. the top of the market-share rankings, where HP Inc. came in slightly behind.
Gold Price in Canadian Dollar is at a current level of 1578.88, down from 1581.91 the previous.
You can invest in these investment options online and help. raise Service Request, share compliments. scheme launched by Government of India as a part of.
Amtek India share price has gone up from Rs 40 to Rs Expert.You can see the joint coins of Hermaios with Calliope on the.SILVERPRICE.ORG - The No. 1 silver price site for fast loading live silver price charts in ounces and kilos in every national currency in the World.
Fundamental analysis of Coal India-Equity Research Report based on future prospects, current price, ratio analysis.Gold Price Today. Rounds and coins are commonly sold in 1 ounce.


Usually referred to as a poet, Francis Scott Key is more accurately remembered—at least in connection with "The Star-Spangled Banner"—as a lyricist. In fact, he wrote lyrics for a total of three songs and ten hymns. In all cases, he invented words to fit previously existing musical models. This was typical in Key's era when hand-engraved music notation was expensive, but printing words was common, fast, and pretty cheap. In one strategy known as the broadside ballad tradition, lyrics would be written to match the rhythm and contour of familiar tunes and published as text only in newspapers and books. The melodies for these "broadside ballads" were usually identified by a note just below their title. The most successful of these lyrics went "viral" and were reprinted by local newspapers (all newspapers were local at this time, of course).
To download our edition of the sheet music, click here.
The melody of "The Anacreontic Song" was used frequently for broadside ballads in Key's era. More than 80 Anacreontic lyrics appeared in print before 1820. As a poetic form, it was unique. It features eight-line stanzas—four is typical—and these eight lines contain nine rhymes. Each line has an end rhyme plus there is an extra internal rhyme in line five. Key's 1814 lyric has this extra rhyme in the phrase "And the rockets red glare, the bombs busting in air, gave proof through the night that our flag was still there." It therefore fits precisely the structural model unique to parodies of "The Anacreontic Song." It is simply implausible that Key could write an eight-line lyric with nine rhymes by chance.
Nevertheless, because Key did not preserve for history a first-hand account of his writing of the Banner, others including the musician Ferdinand Durang and Key's own brother-in-law, the Supreme Court Chief Justice Roger B. Taney, claimed to have been the one to have brought text and tune together. Maybe they noticed what Key had done, but in its day, any and all readers would have understood it to be a broadside ballad and its distinctive line and rhyme scheme fit one and only tune, a popular melody that Key had used before—"The Anacreontic Song" (Click here for video; here for sheet music).
This entry was posted in F.S. Key, Fort McHenry, Fort McHenry, History, John Stafford Smith, Mark Clague, Melody, Mythconceptions, SSB Videos. Bookmark the permalink.


text:
1000 Rounds of 55gr FMJ 5.56x45 Ammo by Sellier & Bellot
Manufacturer Sellier & Bellot
Bullet Weight 55gr
Caliber 5.56x45
Manufacturer SKU SB223A
Muzzle Energy (ft. pounds) 1317
Cost Per Round 43.0¢ per round
More Details About This Sellier & Bellot 55gr FMJ 5.56x45 Ammo
One of those most commonly asked questions about 5.56x45mm ammunition is its similarity to .223 Remington. Although they appear identical on the outside, they aren't, and those differences are more than a little bit important. First and foremost, 5.56 is loaded to a higher internal pressure than .223, and that means not all rifles are capable of handling its greater strength. But they're different in other ways, too, for example, because 5.56 NATO, the mil-spec round, is loaded with a longer, heavier bullet, the throat of the 5.56 chamber is now longer. That means firing a 5.56 round, with its longer throat, in a rifle chambered for .223 can produce even greater pressure than what the 5.56 was originally loaded with. Bottom line? 5.56 is for 5.56-chambered rifles, so don't risk trying it in your .223-chambered one. The results could be more than you bargained for.
These 5.56 rounds are manufactured by Sellier &Bellot, a company founded in 1825 by German businessman Louis Sellier. He got the company started, but it was when he was joined by Jean Maria Nicolaus Bellot that it really took off. Sellier & Bellot has a solid reputation on a global level for their dedication to the production of good quality, competitively-priced ammunition. And with almost 200 years of experience manufacturing ammunition they've certainly got the process down. They're an ISO 9001 certified company and earned the bronze medal in Deutsches Waffen Journal, earning the reader's vote for ammunition. Production takes place at their long-time plant in Vlasim, Czech Republic.
At 55 grain these are lightweight rounds, so they're capable of reaching fantastic speeds. They're FMJ rounds specifically meant for target practice, tactical training, and plinking. Each round has amazing muzzle velocity at 3283 feet per second and delivers impressive power with muzzle energy at 1317 foot-pounds. There are 1000 target rounds in this box of ammunition, so you're going to have ample opportunity to fire your favorite rifle. Even better, these are fresh brass cases with boxer primer, so you can reload them and spend even more time at the range. Place your order and feed your 5.56-chambered rifle.
(Although 5.56x45 NATO does fit in a .223 Remington chamber, the 5.56 is a military, high-pressure round and is not recommended for use in a .223 Remington chamber.)
Add your review to this Sellier & Bellot 55gr FMJ 5.56x45 Ammo
Add a Question about 1000 Rounds of 55gr FMJ 5.56x45 Ammo by Sellier & Bellot
Americans have the right and advantage of being armed ― unlike the citizens of other countries whose governments are afraid to trust the people with arms.


Your Shopping Cart Will Pop Up in a New Window. You do NOT need a PayPal account to use your Credit or Debit Card.
If you don't have a PayPal account, simply skip any PayPal login boxes and proceed accordingly.


text:
Blues & Soul Funk Pop Rock
Groove Kitties
Marcia Claire: Bass guitar
Cathryn Beeks: Guitar (acoustic) Guitar (electric) Vocals
Garrison Bailey: Drums Keyboards Piano Vocals
Nancy Bee: Guitar (acoustic) Guitar (electric) Vocals
Becky Fleming: Flute Saxophone
Ani DiFranco, Veronica May, Cathryn Beeks Ordeal
San Diego , 2010
Lindsay White, Ani DiFranco, Pink, Kelly Clarkson, Dixie Chicks, Sheryl Crow, Susan Tedeschi, Björk, the Ordeal, the Coyote Problem, Alicia Keys
The Groove Kitties is an all-star all-girl group featuring Cathryn Beeks (Ghandi Method), Marcia Claire (Coyote Problem), Becky Fleming (the Ordeal), Garrison Bailey, and Nancy Bee "I used to play in a female trio with Nancy about ten years ago," says Beeks. "Last September [2009], we randomly reconnected and started hashing out plans for this group."
The quintet debuted in November 2010, performing for over 10,000 people at the Susan G. Komen Race for the Cure. "We're funky, folky, rocky, and bluesy," says busy bassist and frequent San Diego Music Award nominee Marcia Claire. "It all depends on what mood we're in on any given day. I prefer the funk, but that's just me."
"Our music runs the gamut of styles and genres," says Beeks. "However, the common ground is the groove. As an added component of our live shows, we feature a different female songwriter at random events, backing them on a few of their songs and having them rock out with ours."
Asked about the hardest part of being a female rocker, Beeks says "There are no boys to carry our gear."
Claire: "Being taken seriously."
Bailey: "My boobs shake when I play."
The group is unrelated to the similar-named Carlsbad group Groove Kitty.
"All Girl Rock Bands" · Jan. 11, 2014
Local Music Database: What's In a Name?" · Nov. 30, 2013
Musician Interviews: "Groove Kitties at Brick by Brick" · Jan. 12, 2011


One of the most difficult tasks in recovery from drugs and alcohol was learning how to accept my past. I often look back at who I was before, during and after our addiction. Throughout my active drinking and using I said and did things to family, friends and loved ones that I would have never done otherwise. Recovery is about learning to accept our mistakes and using them to grow spiritually, mentally and emotionally. The hardest part was accepting my past. I did not want to accept I was an addict and alcoholic. Part of this was because I did not want to be labeled as one. I did not want to deal with the stigma and judgment that comes attached with it. I eventually realized I had to learn to embrace it and accept it in order to truly free myself.
Spirituality is one thing I always struggled with in my life. I struggled mightily with an understanding of spirituality in early recovery. I was not willing to accept that events and mistakes in my life happened for a reason. I refused to believe that if we learn to close doors, new ones will open. I found myself unable to forgive myself as well as others. I was constantly living in the shadows of my dark past. I eventually grew tired of living my life that way. I knew I had a better, brighter future ahead of me. I was sick of looking at the negatives rather than the positives of my personal battles. I realized that the only way for me to be free myself was to believe that everything was always out of my hands. Spirituality to me is accepting and trusting the places we go, the people we meet, the words we say, and the actions we take are no longer coincidental. We have to believe that everything was part of a bigger and better plan for us.
A lot of people who struggle with substance abuse also struggle with mental health issues. The two most common are anxiety and depression. People like us tend to use substances as a means to take away our mental defects. We use poison to counteract our poisonous minds. Accepting our past on a mental level is difficult when our mind is our own worst enemy. I had to learn to swallow my pride and shed my ego. I had to learn to be grateful for what I do have rather than focusing on what I did not. The easiest way to accept our past mentally is to focus on the present moment. I no longer dwell on my past and I no longer worry about the future. I have noticed as time goes on in recovery, we begin to see things from a very different perspective. The fog and dark clouds in our heads slowly begin to drift away. Our perception becomes more clearer than ever.
Addiction affects family, friends and loved ones. It can tear apart families and ruin personal relationships. The emotional repercussions of our addiction can be devastating. We find ourselves having difficulty forgiving ourselves for what we put our loved ones through. We also find ourselves having difficulty forgiving those who have wronged us.. We hold resentments against a lot of people. We also hold resentments against ourselves. The most important thing to do when it comes to accepting our past emotionally is to learn to love ourselves again. We have a tendency to beat ourselves up for failed relationships with family and friends.
Once we learn to love ourselves again, we learn to love others again. Rebuilding bridges becomes a lot easier to those who see the positive changes in us.
Image courtesy of Gift Habeshaw.


The Securities and Futures Commission (SFC) has reprimanded and fined BOCI Securities Limited (BSL) HK$10 million over BSL's internal system and control failures in its investment product selling practices.
BOCI Securities Limited is licensed under the Securities and Futures Ordinance (SFO) to carry on Type 1 (dealing in securities), Type 2 (dealing in futures contracts), Type 4 (advising on securities) and Type 5 (advising on futures contracts) regulated activities.
The disciplinary action followed an investigation which found that BSL had failed to comply with various regulatory requirements concerning client profiling, product due diligence and suitability assessment in its sale and distribution of investment products, including bonds listed under Chapter 37 of the Rules Governing the Listing of Securities on The Stock Exchange of Hong Kong Limited.
– conduct proper and adequate product due diligence on certain investment products.
(SFC) of Hong Kong is the independent statutory body charged with regulating the securities and futures markets in Hong Kong. The SFC is responsible for fostering an orderly securities and futures markets, to protect investors and to help promote Hong Kong as an international financial center and a key financial market in China.
The Cyprus Securities and Exchange Commission (CySEC) is changing its approach to the compensation of investors. On 13th of March, the Cyprus financial watchdog introduced the final set of reforms to the legal framework governing the operation of the Investor Compensation Fund (ICF). The updated rules reflect the more stringent approach of the Cypriot regulator, as it tries to find solutions in response to the loss of customer funds observed in recent years.
The obligation to participate in the ICF applies to all investment services and to ancillary custody services irrespective of whether clients' funds and financial instruments are held.
Changes made by the regulator will take effect immediately, with all CIFs required to fulfill the following mandatory provisions. To cover the administrative and operational expenses of the ICF, the new directive introduces annual fees of 700 euros for firms owning clients' assets and 100 euros per year for members who do not have acceptable means.
It is reported that CySEC will remove any provisions in relation to limiting or refunding the contributions of the members that will be paid to the ICF pursuant to the New ICF Directive. Also, the regulator will not limit potential extraordinary contributions by an ICF member in the event of an adverse scenario which requires the ICF to fund compensation due to investors, should the necessary requirements be met.
CySEC changed the maximum compensation for valid claims from the current 100% with a maximum of 20,000 euros so that it constitutes either 90% of the total covered claims or 20,000 euros, whichever is lower.
FxPro, a London-based foreign exchange brokerage, has announced about a multi-year partnership agreement with Mclaren F1 Team. Terms of the sponsorship deal were not disclosed, but it was confirmed that FxPro prominent branding will now appear on McLaren cars during all F1 races. The FxPro logo will appear on the MCL33 car from this weekend's Monaco Grand Prix (24-27 May), highlighting the company as the number one online broker in the world. This partnership means a lot for the FxPro and requires the commitment and high quality performance from both parties. The Chief Executive Officer of the McLaren Racing, Zak Brown in his comments about the deal said that the company is pleased to start the partnership with FxPro, as the world famous broker has proven its ability to perform at the highest level and that both companies always aim to be the best in what they're doing. Also the Chief Marketing Officer of the FxPro, Ilya Holey, said that with the numerous sports sponsorships, it is a part of company's outreach program and the way they do business and McLaren is a perfect partner who also aims for excellence and success. FxPro has a significant sports sponsorship history as a sponsor for AFC Champions League (2011-2012), Formula 1 (2009-2010), Aston Villa F.C. (2011-2012), WRC Rally (2010-2011) and others.