text:
(function (undefined) {

var today, moment;

var Kalendae = function (targetElement, options) {
	if (typeof document.addEventListener !== 'function' && !util.isIE8()) return;

	//if the first argument isn't an element and isn't a string, assume that it is the options object
	var is_element = false;
	try {
		is_element = targetElement instanceof Element;
	}
	catch (err) {
		is_element = !!targetElement && is_element.nodeType === 1;
	}
	if (!(is_element || typeof(targetElement) === 'string')) options = targetElement;

	var self = this,
		classes = self.classes,
		opts = self.settings = util.merge(self.defaults, {attachTo:targetElement}, options || {}),
		$container = self.container = util.make('div', {'class':classes.container}),
		calendars = self.calendars = [],
		startDay = moment().day(opts.weekStart),
		vsd,
		columnHeaders = [],
		$cal,
		$title,
		$caption,
		$header,
		$days, $week, dayNodes = [],
		$span,
		i = 0,
		j = opts.months;

	if (util.isIE8()) util.addClassName($container, 'ie8');

	//generate the column headers (Su, Mo, Tu, etc)
	i = 7;
	while (i--) {
		columnHeaders.push( startDay.format(opts.columnHeaderFormat) );
		startDay.add('days',1);
	}

	//setup publish/subscribe and apply any subscriptions passed in settings
	MinPubSub(self);
	if (typeof opts.subscribe === 'object') {
		for (i in opts.subscribe) if (opts.subscribe.hasOwnProperty(i)) {
			self.subscribe(i, opts.subscribe[i]);
		}
	}

	//process default selected dates
	self._sel = [];
	if (!!opts.selected) self.setSelected(opts.selected, false);

	//set the view month
	if (!!opts.viewStartDate) {
		vsd = moment(opts.viewStartDate, opts.format);
	} else if (self._sel.length > 0) {
		vsd = moment(self._sel[0]);
	} else {
		vsd = moment();
	}
	self.viewStartDate = vsd.date(1);

	var viewDelta = ({
		'past'          : opts.months-1,
		'today-past'    : opts.months-1,
		'any'           : opts.months>2?Math.floor(opts.months/2):0,
		'today-future'  : 0,
		'future'        : 0
	})[this.settings.direction];

	if (viewDelta && moment().month()==moment(self.viewStartDate).month()){
		self.viewStartDate = moment(self.viewStartDate).subtract({M:viewDelta}).date(1);
	}

	if (typeof opts.blackout === 'function') {
		self.blackout = opts.blackout;
	} else if (!!opts.blackout) {
		var bdates = parseDates(opts.blackout, opts.parseSplitDelimiter, opts.format);
		self.blackout = function (input) {
			input = moment(input).startOf('day').yearDay();
			if (input < 1 || !self._sel) return false;
			var i = bdates.length;
			while (i--) if (bdates[i].startOf('day').yearDay() === input) return true;
			return false;
		};
	} else {
		self.blackout = function () {return false;};
	}

	self.direction = self.directions[opts.direction] ? self.directions[opts.direction] : self.directions['any'];

	//for the total months setting, generate N calendar views and add them to the container
	j = Math.max(opts.months,1);
	while (j--) {
		$cal = util.make('div', {'class':classes.calendar}, $container);

		$cal.setAttribute('data-cal-index', j);
		if (opts.months > 1) {
			if (j == Math.max(opts.months-1,1)) util.addClassName($cal, classes.monthFirst);
			else if (j === 0) util.addClassName($cal, classes.monthLast);
			else util.addClassName($cal, classes.monthMiddle);
		}

		//title bar
		$title = util.make('div', {'class':classes.title}, $cal);
		if(!opts.useYearNav){
			util.addClassName($title, classes.disableYearNav);
		}
		util.make('a', {'class':classes.previousYear}, $title);           //previous button
		util.make('a', {'class':classes.previousMonth}, $title);          //previous button
		util.make('a', {'class':classes.nextYear}, $title);               //next button
		util.make('a', {'class':classes.nextMonth}, $title);              //next button
		$caption = util.make('span', {'class':classes.caption}, $title);  //title caption

		//column headers
		$header = util.make('div', {'class':classes.header}, $cal);
		i = 0;
		do {
			$span = util.make('span', {}, $header);
			$span.innerHTML = columnHeaders[i];
		} while (++i < 7);

		//individual day cells
		$days = util.make('div', {'class':classes.days}, $cal);
		i = 0;
		dayNodes = [];
		do {
			if (opts.mode == 'week') {
				if ((i % 7) === 0) {
					$week = util.make('div', {'class': classes.week + ' clearfix'}, $days);
					dayNodes.push($week);
				}
				util.make('span', {}, $week);
			} else {
				dayNodes.push(util.make('span', {}, $days));
			}
		} while (++i < 42);

		//store each calendar view for easy redrawing
		calendars.push({
			caption:$caption,
			days:dayNodes
		});

		if (j) util.make('div', {'class':classes.monthSeparator}, $container);
	}

	self.draw();

	util.addEvent($container, 'mousedown', function (event, target) {
		var clickedDate;
		if (util.hasClassName(target, classes.nextMonth)) {
		//NEXT MONTH BUTTON
			if (!self.disableNext && self.publish('view-changed', self, ['next-month']) !== false) {
				self.viewStartDate.add('months',1);
				self.draw();
			}
			return false;

		} else if (util.hasClassName(target, classes.previousMonth)) {
		//PREVIOUS MONTH BUTTON
			if (!self.disablePreviousMonth && self.publish('view-changed', self, ['previous-month']) !== false) {
				self.viewStartDate.subtract('months',1);
				self.draw();
			}
			return false;

		} else if (util.hasClassName(target, classes.nextYear)) {
		//NEXT MONTH BUTTON
			if (!self.disableNext && self.publish('view-changed', self, ['next-year']) !== false) {
				self.viewStartDate.add('years',1);
				self.draw();
			}
			return false;

		} else if (util.hasClassName(target, classes.previousYear)) {
		//PREVIOUS MONTH BUTTON
			if (!self.disablePreviousMonth && self.publish('view-changed', self, ['previous-year']) !== false) {
				self.viewStartDate.subtract('years',1);
				self.draw();
			}
			return false;

		} else if ( (util.hasClassName(target.parentNode, classes.days) || util.hasClassName(target.parentNode, classes.week)) && util.hasClassName(target, classes.dayActive) && (clickedDate = target.getAttribute('data-date'))) {
		//DAY CLICK
			clickedDate = moment(clickedDate, opts.dayAttributeFormat).hours(12);
			if (self.publish('date-clicked', self, [clickedDate]) !== false) {

				switch (opts.mode) {
					case 'multiple':
						if (!self.addSelected(clickedDate)) self.removeSelected(clickedDate);
						break;
					case 'range':
						self.addSelected(clickedDate);
						break;
					case 'week':
						self.weekSelected(clickedDate);
						break;
					case 'single':
						/* falls through */
					default:
						self.addSelected(clickedDate);
						break;
				}

			}
			return false;

		} else if ( util.hasClassName(target.parentNode, classes.week) && (clickedDate = target.getAttribute('data-date') ) ) {
		//INACTIVE WEEK CLICK
			clickedDate = moment(clickedDate, opts.dayAttributeFormat).hours(12);
			if (self.publish('date-clicked', self, [clickedDate]) !== false) {
				if (opts.mode == 'week') {
					self.weekSelected(clickedDate);
				}
			}
			return false;
		}

		return false;
	});

	if (!!(opts.attachTo = util.$(opts.attachTo))) {
		opts.attachTo.appendChild($container);
	}

};

Kalendae.prototype = {
	defaults : {
		attachTo              :null,            /* the element to attach the root container to. can be string or DOMElement */
		months                :1,               /* total number of months to display side by side */
		weekStart             :0,               /* day to use for the start of the week. 0 is Sunday */
		direction             :'any',           /* past, today-past, any, today-future, future */
		directionScrolling    :true,            /* if a direction other than any is defined, prevent scrolling out of range */
		viewStartDate         :null,            /* date in the month to display.  When multiple months, this is the left most */
		blackout              :null,            /* array of dates, or function to be passed a date */
		selected              :null,            /* dates already selected.  can be string, date, or array of strings or dates. */
		mode                  :'single',        /* single, multiple, range */
		dayOutOfMonthClickable:false,
		format                :null,            /* string used for parsing dates. */
		subscribe             :null,            /* object containing events to subscribe to */

		columnHeaderFormat    :'dd',            /* number of characters to show in the column headers */
		titleFormat           :'MMMM, YYYY',    /* format mask for month titles. See momentjs.com for rules */
		dayNumberFormat       :'D',             /* format mask for individual days */
		dayAttributeFormat    :'YYYY-MM-DD',    /* format mask for the data-date attribute set on every span */
		parseSplitDelimiter   : /,\s*|\s+-\s+/, /* regex to use for splitting multiple dates from a passed string */
		rangeDelimiter        :' - ',           /* string to use between dates when outputting in range mode */
		multipleDelimiter     :', ',            /* string to use between dates when outputting in multiple mode */
		useYearNav            :true,

		dateClassMap          :{}
	},
	classes : {
		container       :'kalendae',
		calendar        :'k-calendar',
		monthFirst      :'k-first-month',
		monthMiddle     :'k-middle-month',
		monthLast       :'k-last-month',
		title           :'k-title',
		previousMonth   :'k-btn-previous-month',
		nextMonth       :'k-btn-next-month',
		previousYear    :'k-btn-previous-year',
		nextYear        :'k-btn-next-year',
		caption         :'k-caption',
		header          :'k-header',
		days            :'k-days',
		week            :'k-week',
		dayOutOfMonth   :'k-out-of-month',
		dayInMonth      :'k-in-month',
		dayActive       :'k-active',
		daySelected     :'k-selected',
		dayInRange      :'k-range',
		dayToday        :'k-today',
		monthSeparator  :'k-separator',
		disablePreviousMonth    :'k-disable-previous-month-btn',
		disableNextMonth        :'k-disable-next-month-btn',
		disablePreviousYear     :'k-disable-previous-year-btn',
		disableNextYear         :'k-disable-next-year-btn',
		disableYearNav          :'k-disable-year-nav'
	},

	disablePreviousMonth: false,
	disableNextMonth: false,
	disablePreviousYear: false,
	disableNextYear: false,

	directions: {
		'past'          :function (date) {return moment(date).startOf('day').yearDay() >= today.yearDay();},
		'today-past'    :function (date) {return moment(date).startOf('day').yearDay() > today.yearDay();},
		'any'           :function (date) {return false;},
		'today-future'  :function (date) {return moment(date).startOf('day').yearDay() < today.yearDay();},
		'future'        :function (date) {return moment(date).startOf('day').yearDay() <= today.yearDay();}
	},

	getSelectedAsDates : function () {
		var out = [];
		var i=0, c = this._sel.length;
		for (;i<c;i++) {
			out.push(this._sel[i].toDate());
		}
		return out;
	},

	getSelectedAsText : function (format) {
		var out = [];
		var i=0, c = this._sel.length;
		for (;i<c;i++) {
			out.push(this._sel[i].format(format || this.settings.format || 'YYYY-MM-DD'));
		}
		return out;
	},

	getSelectedRaw : function () {
		var out = [];
		var i=0, c = this._sel.length;
		for (;i<c;i++) {
			out.push(moment(this._sel[i]));
		}
		return out;
	},

	getSelected : function (format) {
		var sel = this.getSelectedAsText(format);
		switch (this.settings.mode) {
			case 'week':
				/* falls through range */

			case 'range':
				sel.splice(2); //shouldn't be more than two, but lets just make sure.
				return sel.join(this.settings.rangeDelimiter);

			case 'multiple':
				return sel.join(this.settings.multipleDelimiter);

			case 'single':
				/* falls through */
			default:
				return (sel[0] || null);
		}
	},

	isSelected : function (input) {
		input = moment(input).startOf('day').yearDay();
		if (input < 1 || !this._sel || this._sel.length < 1) return false;

		switch (this.settings.mode) {
			case 'week':
				/* falls through range */
			case 'range':
				var a = this._sel[0] ? this._sel[0].startOf('day').yearDay() : 0,
					b = this._sel[1] ? this._sel[1].startOf('day').yearDay() : 0;

				if (a === input || b === input) return 1;
				if (!a || !b) return 0;

				if ((input > a && input < b) || (a<b && input < a && input > b))  return -1;
				return false;

			case 'multiple':
				var i = this._sel.length;
				while (i--) {
					if (this._sel[i].startOf('day').yearDay() === input) {
						return true;
					}
				}
				return false;

			case 'single':
				/* falls through */
			default:
				return (this._sel[0] && (this._sel[0].startOf('day').yearDay() === input));
		}

		return false;
	},

	setSelected : function (input, draw) {
		var i,
			new_dates = parseDates(input, this.settings.parseSplitDelimiter, this.settings.format),
			old_dates = parseDates(this.getSelected(), this.settings.parseSplitDelimiter, this.settings.format);

		i = old_dates.length;
		while(i--) { this.removeSelected(old_dates[i], false); }

		i = new_dates.length;
		while(i--) { this.addSelected(new_dates[i], false); }

		if (draw !== false) {
			if (new_dates[0]) {
				this.viewStartDate = moment(new_dates[0], this.settings.format);
			}
			this.draw();
		}
	},

	addSelected : function (date, draw) {
		date = moment(date, this.settings.format).hours(12);

		if(this.settings.dayOutOfMonthClickable && this.settings.mode !== 'range'){ this.makeSelectedDateVisible(date); }

		switch (this.settings.mode) {
			case 'multiple':
				if (!this.isSelected(date)) this._sel.push(date);
				else return false;
				break;
			case 'range':

				if (this._sel.length !== 1) this._sel = [date];
				else {
					if (date.startOf('day').yearDay() > this._sel[0].startOf('day').yearDay()) this._sel[1] = date;
					else this._sel = [date, this._sel[0]];
				}
				break;
			case 'single':
				/* falls through */
			default:
				this._sel = [date];
				break;
		}
		this._sel.sort(function (a,b) {return a.startOf('day').yearDay() - b.startOf('day').yearDay();});
		this.publish('change', this, [date]);
		if (draw !== false) this.draw();
		return true;
	},

	weekSelected: function (mom) {
		var x = mom.toDate();
		var start = moment(x).startOf('week');
		var end = moment(x).endOf('week').subtract('day',1);
		this._sel = [start, end];
		this.publish('change', this, [mom.day()]);
		this.draw();
	},

	makeSelectedDateVisible: function (date) {
		outOfViewMonth = moment(date).date('1').diff(this.viewStartDate,'months');

		if(outOfViewMonth < 0){
			this.viewStartDate.subtract('months',1);
		}
		else if(outOfViewMonth > 0 && outOfViewMonth >= this.settings.months){
			this.viewStartDate.add('months',1);
		}
	},

	removeSelected : function (date, draw) {
		date = moment(date, this.settings.format).hours(12);
		var i = this._sel.length;
		while (i--) {
			if (this._sel[i].startOf('day').yearDay() === date.startOf('day').yearDay()) {
				this._sel.splice(i,1);
				this.publish('change', this, [date]);
				if (draw !== false) this.draw();
				return true;
			}
		}
		return false;
	},

	draw : function draw() {
		// return;
		var month = moment(this.viewStartDate).startOf('day').hours(12), //force middle of the day to avoid any weird date shifts
			day,
			classes = this.classes,
			cal,
			$span,
			klass,
			i=0, c,
			j=0, k,
			w,
			s,
			dateString,
			opts = this.settings,
			diff;

		c = this.calendars.length;

		do {
			day = moment(month).date(1);
			day.day( day.day() < this.settings.weekStart ? this.settings.weekStart-7 : this.settings.weekStart);
			//if the first day of the month is less than our week start, back up a week

			cal = this.calendars[i];
			cal.caption.innerHTML = month.format(this.settings.titleFormat);
			j = 0;
			w = 0;
			do {
				if (opts.mode == 'week') {
					if (((j % 7) === 0) && (j !== 0)) {
						w++;
					}
					$span = cal.days[w].childNodes[j%7];
				} else {
					$span = cal.days[j];
				}

				klass = [];

				s = this.isSelected(day);

				if (s) klass.push(({'-1':classes.dayInRange,'1':classes.daySelected, 'true':classes.daySelected})[s]);

				if (day.month() != month.month()) klass.push(classes.dayOutOfMonth);
				else klass.push(classes.dayInMonth);

				if (!(this.blackout(day) || this.direction(day) || (day.month() != month.month() && opts.dayOutOfMonthClickable === false)) || s>0) klass.push(classes.dayActive);

				if (day.startOf('day').yearDay() === today.yearDay()) klass.push(classes.dayToday);

				dateString = day.format(this.settings.dayAttributeFormat);
				if (opts.dateClassMap[dateString]) klass.push(opts.dateClassMap[dateString]);

				$span.innerHTML = day.format(opts.dayNumberFormat);
				$span.className = klass.join(' ');
				$span.setAttribute('data-date', dateString);

				day.add('days',1);
			} while (++j < 42);
			month.add('months',1);
		} while (++i < c);

		if (opts.directionScrolling) {
			var diffComparison = moment().startOf('day').hours(12);
			diff = month.diff(diffComparison, 'months', true);

			if (opts.direction === 'today-past' || opts.direction === 'past') {
				if (diff <= 0) {
					this.disableNextMonth = false;
					util.removeClassName(this.container, classes.disableNextMonth);
				} else {
					this.disableNextMonth = true;
					util.addClassName(this.container, classes.disableNextMonth);
				}
			} else if (opts.direction === 'today-future' || opts.direction === 'future') {
				if (diff > opts.months) {
					this.disablePreviousMonth = false;
					util.removeClassName(this.container, classes.disablePreviousMonth);
				} else {
					this.disablePreviousMonth = true;
					util.addClassName(this.container, classes.disablePreviousMonth);
				}
			}

			if (opts.direction === 'today-past' || opts.direction === 'past') {
				if (diff <= -11) {
					this.disableNextYear = false;
					util.removeClassName(this.container, classes.disableNextYear);
				} else {
					this.disableNextYear = true;
					util.addClassName(this.container, classes.disableNextYear);
				}
			} else if (opts.direction==='today-future' || opts.direction==='future') {
				if (diff > (11 + opts.months)) {
					this.disablePreviousYear = false;
					util.removeClassName(this.container, classes.disablePreviousYear);
				} else {
					this.disablePreviousYear = true;
					util.addClassName(this.container, classes.disablePreviousYear);
				}
			}
		}
	}
};

var parseDates = function (input, delimiter, format) {
	var output = [];

	if (typeof input === 'string') {
		input = input.split(delimiter);
	} else if (!util.isArray(input)) {
		input = [input];
	}

	var c = input.length,
		i = 0,
		m;

	do {
		if (input[i]) {
			m = moment(input[i], format).hours(12);
			if (m.isValid()) output.push(m);
		}
	} while (++i < c);

	return output;
};

window.Kalendae = Kalendae;

var util = Kalendae.util = {

	isIE8: function() {
		return !!( (/msie 8./i).test(navigator.appVersion) && !(/opera/i).test(navigator.userAgent) && window.ActiveXObject && XDomainRequest && !window.msPerformance );
	},

// ELEMENT FUNCTIONS

	$: function (elem) {
		return (typeof elem == 'string') ? document.getElementById(elem) : elem;
	},

	$$: function (selector) {
		return document.querySelectorAll(selector);
	},

	make: function (tagName, attributes, attach) {
		var k, e = document.createElement(tagName);
		if (!!attributes) for (k in attributes) if (attributes.hasOwnProperty(k)) e.setAttribute(k, attributes[k]);
		if (!!attach) attach.appendChild(e);
		return e;
	},

	// Returns true if the DOM element is visible, false if it's hidden.
	// Checks if display is anything other than none.
	isVisible: function (elem) {
		// shamelessly copied from jQuery
		return elem.offsetWidth > 0 || elem.offsetHeight > 0;
	},

	getStyle: function (elem, styleProp) {
		var y, s;
		if (elem.currentStyle) {
			y = elem.currentStyle[styleProp];
		} else if (window.getComputedStyle) {
      s = window.getComputedStyle(elem, null);
      y = s ? s[styleProp] : '';
		}
		return y;
	},

	domReady: function (f) {
		var state = document.readyState;
		if (state === 'complete' || state === 'interactive') {
			f();
		} else {
			setTimeout(function() { util.domReady(f); }, 9);
		}
	},

	// Adds a listener callback to a DOM element which is fired on a specified
	// event.  Callback is sent the event object and the element that triggered the event
	addEvent: function (elem, eventName, callback) {
		var listener = function (event) {
			event = event || window.event;
			var target = event.target || event.srcElement;
			var block = callback.apply(elem, [event, target]);
			if (block === false) {
				if (!!event.preventDefault) event.preventDefault();
				else {
					event.returnValue = false;
					event.cancelBubble = true;
				}
			}
			return block;
		};
		if (elem.attachEvent) { // IE only.  The "on" is mandatory.
			elem.attachEvent("on" + eventName, listener);
		} else { // Other browsers.
			elem.addEventListener(eventName, listener, false);
		}
		return listener;
	},

	// Removes a listener callback from a DOM element which is fired on a specified
	// event.
	removeEvent: function (elem, event, listener) {
		if (elem.detachEvent) {	// IE only.  The "on" is mandatory.
			elem.detachEvent("on" + event, listener);
		} else { // Other browsers.
			elem.removeEventListener(event, listener, false);
		}
	},

	fireEvent: function (elem, event) {
		if (document.createEvent) {
			var e = document.createEvent('HTMLEvents');
			e.initEvent(event, false, true);
			elem.dispatchEvent(e);
		} else if (document.createEventObject) {
			elem.fireEvent('on' + event) ;
		} else if (typeof elem['on' + event] == 'function' ) {
			elem['on' + event]();
		}
	},

	hasClassName: function(elem, className) { //copied and modified from Prototype.js
		if (!(elem = util.$(elem))) return false;
		var eClassName = elem.className;
		return (eClassName.length > 0 && (eClassName == className || new RegExp("(^|\\s)" + className + "(\\s|$)").test(eClassName)));
	},

	addClassName: function(elem, className) { //copied and modified from Prototype.js
		if (!(elem = util.$(elem))) return;
		if (!util.hasClassName(elem, className)) elem.className += (elem.className ? ' ' : '') + className;
	},

	removeClassName: function(elem, className) { //copied and modified from Prototype.js
		if (!(elem = util.$(elem))) return;
		elem.className = util.trimString(elem.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' '));
	},

	isFixed: function (elem) {
		do {
			if (util.getStyle(elem, 'position') === 'fixed') return true;
		} while ((elem = elem.offsetParent));
		return false;
	},

	scrollContainer: function (elem) {
		do {
			var overflow = util.getStyle(elem, 'overflow');
			if (overflow === 'auto' || overflow === 'scroll') return elem;
		} while ((elem = elem.parentNode) && elem != window.document.body);
		return null;
	},

	getPosition: function (elem, isInner) {
		var x = elem.offsetLeft,
			y = elem.offsetTop,
			r = {};

		if (!isInner) {
			while ((elem = elem.offsetParent)) {
				x += elem.offsetLeft;
				y += elem.offsetTop;
			}
		}

		r[0] = r.left = x;
		r[1] = r.top = y;
		return r;
	},

	getHeight: function (elem) {
		return elem.offsetHeight || elem.scrollHeight;
	},

	getWidth: function (elem) {
		return elem.offsetWidth || elem.scrollWidth;
	},

// TEXT FUNCTIONS

	trimString: function (input) {
		return input.replace(/^\s+/, '').replace(/\s+$/, '');
	},

// OBJECT FUNCTIONS

	merge: function () {
		/* Combines multiple objects into one.
		 * Syntax: util.extend([true], object1, object2, ... objectN)
		 * If first argument is true, function will merge recursively.
		 */

		var deep = (arguments[0]===true),
			d = {},
			i = deep?1:0;

		var _c = function (a, b) {
			if (typeof b !== 'object') return;
			for (var k in b) if (b.hasOwnProperty(k)) {
				//if property is an object or array, merge the contents instead of overwriting, if extend() was called as such
				if (deep && typeof a[k] === 'object' && typeof b[k] === 'object') _update(a[k], b[k]);
				else a[k] = b[k];
			}
			return a;
		};

		for (; i < arguments.length; i++) {
			_c(d, arguments[i]);
		}
		return d;
	},

	isArray: function (array) {
		return Object.prototype.toString.call(array) == "[object Array]";
	}
};

//auto-initializaiton code
if (typeof document.addEventListener === 'function') Kalendae.util.domReady(function () {
	var els = util.$$('.auto-kal'),
		i = els.length,
		e,
		options,
		optionsRaw;

	while (i--) {
		e = els[i];
		optionsRaw = e.getAttribute('data-kal');
		options = (optionsRaw == null || optionsRaw == "") ? {} : (new Function('return {' + optionsRaw + '};'))();

		if (e.tagName === 'INPUT') {
			//if element is an input, bind a popup calendar to the input.
			new Kalendae.Input(e, options);
		} else {
			//otherwise, insert a flat calendar into the element.
			new Kalendae(util.merge(options, {attachTo:e}));
		}

	}
});
Kalendae.Input = function (targetElement, options) {
	if (typeof document.addEventListener !== 'function'  && !util.isIE8()) return;

	var $input = this.input = util.$(targetElement),
		overwriteInput,
		$closeButton,
		changing = false;

	if (!$input || $input.tagName !== 'INPUT') throw "First argument for Kalendae.Input must be an <input> element or a valid element id.";

	var self = this,
		classes = self.classes,
		opts = self.settings = util.merge(self.defaults, options);

	this._events = {};

	//force attachment to the body
	opts.attachTo = window.document.body;

	//if no override provided, use the input's contents
	if (!opts.selected) opts.selected = $input.value;
	else overwriteInput = true;

	//call our parent constructor
	Kalendae.call(self, opts);

	//create the close button
	if (opts.closeButton) {
		$closeButton = util.make('a', {'class':classes.closeButton}, self.container);
		util.addEvent($closeButton, 'click', function () {
			$input.blur();
		});
	}

	if (overwriteInput) $input.value = self.getSelected();

	var $container = self.container,
		noclose = false;

	$container.style.display = 'none';
	util.addClassName($container, classes.positioned);

	this._events.containerMouseDown = util.addEvent($container, 'mousedown', function (event, target) {
		noclose = true; //IE8 doesn't obey event blocking when it comes to focusing, so we have to do this shit.
	});

	this._events.documentMousedown = util.addEvent(window.document, 'mousedown', function (event, target) {
		noclose = false;
	});

	this._events.inputFocus = util.addEvent($input, 'focus', function () {
		changing = true; // prevent setSelected from altering the input contents.
		self.setSelected(this.value);
		changing = false;
		self.show();
	});

	this._events.inputBlur = util.addEvent($input, 'blur', function () {
		if (noclose && util.isIE8()) {
			noclose = false;
			$input.focus();
		}
		else self.hide();
	});

	this._events.inputKeyup = util.addEvent($input, 'keyup', function (event) {
		changing = true; // prevent setSelected from altering the input contents.
		self.setSelected(this.value);
		changing = false;
	});

	var $scrollContainer = util.scrollContainer($input);

	if( $scrollContainer ) {

		// Hide calendar when $scrollContainer is scrolled
		util.addEvent($scrollContainer, 'scroll', function (event) {
			$input.blur();
		});
	}

	self.subscribe('change', function () {
		if (changing) {
			// the change event came from an internal modification, don't update the field contents
			return;
		}
		$input.value = self.getSelected();
		util.fireEvent($input, 'change');
	});

};

Kalendae.Input.prototype = util.merge(Kalendae.prototype, {
	defaults : util.merge(Kalendae.prototype.defaults, {
		format: 'MM/DD/YYYY',
		side: 'bottom',
		closeButton: true,
		offsetLeft: 0,
		offsetTop: 0
	}),
	classes : util.merge(Kalendae.prototype.classes, {
		positioned : 'k-floating',
		closeButton: 'k-btn-close'
	}),

	show : function () {
		var $container = this.container,
			style = $container.style,
			$input = this.input,
			pos = util.getPosition($input),
			$scrollContainer = util.scrollContainer($input),
			scrollTop = $scrollContainer ? $scrollContainer.scrollTop : 0,
			opts = this.settings;

		style.display = '';
		switch (opts.side) {
			case 'left':
				style.left = (pos.left - util.getWidth($container) + opts.offsetLeft) + 'px';
				style.top  = (pos.top + opts.offsetTop - scrollTop) + 'px';
				break;
			case 'right':
				style.left = (pos.left + util.getWidth($input)) + 'px';
				style.top  = (pos.top + opts.offsetTop - scrollTop) + 'px';
				break;
			case 'top':
				style.left = (pos.left + opts.offsetLeft) + 'px';
				style.top  = (pos.top - util.getHeight($container) + opts.offsetTop - scrollTop) + 'px';
				break;
			case 'bottom':
				/* falls through */
			default:
				style.left = (pos.left + opts.offsetLeft) + 'px';
				style.top  = (pos.top + util.getHeight($input) + opts.offsetTop - scrollTop) + 'px';
				break;
		}

		style.position = util.isFixed($input) ? 'fixed' : 'absolute';

		this.publish('show', this);
	},

	hide : function () {
		this.container.style.display = 'none';
		this.publish('hide', this);
	},

	destroy : function() {
		var $container = this.container;
		var $input = this.input;

		util.removeEvent($container, 'mousedown', this._events.containerMousedown);

		util.removeEvent(window.document, 'mousedown', this._events.documentMousedown);

		util.removeEvent($input, 'focus', this._events.inputFocus);

		util.removeEvent($input, 'blur', this._events.inputBlur);

		util.removeEvent($input, 'keyup', this._events.inputKeyup);

		$container.remove();
	}
});

/*!
* MinPubSub, modified for use on Kalendae
* Copyright(c) 2011 Daniel Lamb <daniellmb.com>
* https://github.com/daniellmb/MinPubSub
* MIT Licensed
*/

var MinPubSub = function(d){

	if (!d) d = this;

	// the topic/subscription hash
	var cache = d.c_ || {}; //check for "c_" cache for unit testing

	d.publish = function(/* String */ topic, /* Object */ target, /* Array? */ args){
		// summary:
		//		Publish some data on a named topic.
		// topic: String
		//		The channel to publish on
		// args: Array?
		//		The data to publish. Each array item is converted into an ordered
		//		arguments on the subscribed functions.
		//
		// example:
		//		Publish stuff on '/some/topic'. Anything subscribed will be called
		//		with a function signature like: function(a,b,c){ ... }
		//
		//		publish("/some/topic", ["a","b","c"]);

		var subs = cache[topic],
			len = subs ? subs.length : 0,
			r;

		//can change loop or reverse array if the order matters
		while(len--){
			r = subs[len].apply(target, args || []);
			if (typeof r === 'boolean') return r;
		}
	};

	d.subscribe = function(/* String */ topic, /* Function */ callback, /* Boolean */ topPriority){
		// summary:
		//		Register a callback on a named topic.
		// topic: String
		//		The channel to subscribe to
		// callback: Function
		//		The handler event. Anytime something is publish'ed on a
		//		subscribed channel, the callback will be called with the
		//		published array as ordered arguments.
		//
		// returns: Array
		//		A handle which can be used to unsubscribe this particular subscription.
		//
		// example:
		//		subscribe("/some/topic", function(a, b, c){ /* handle data */ });

		if(!cache[topic]){
			cache[topic] = [];
		}
		if (topPriority)
			cache[topic].push(callback);
		else
			cache[topic].unshift(callback);
		return [topic, callback]; // Array
	};

	d.unsubscribe = function(/* Array */ handle){
		// summary:
		//		Disconnect a subscribed function for a topic.
		// handle: Array
		//		The return value from a subscribe call.
		// example:
		//		var handle = subscribe("/some/topic", function(){});
		//		unsubscribe(handle);

		var subs = cache[handle[0]],
			callback = handle[1],
			len = subs ? subs.length : 0;

		while(len--){
			if(subs[len] === callback){
				subs.splice(len, 1);
			}
		}
	};

};
if (!Kalendae.moment) {
	if (window.moment) {
		Kalendae.moment = window.moment;
	} else {
		throw "Kalendae requires moment.js. You must use kalendae.standalone.js if moment is not available on the page.";
	}
}

moment = Kalendae.moment;

//function to get the total number of days since the epoch.
moment.fn.yearDay = function (input) {
	var yearday = Math.floor(this._d / 86400000);
    return (typeof input === 'undefined') ? yearday :
        this.add({ d : input - yearday });
};

today = Kalendae.moment().startOf('day');

if (typeof jQuery !== 'undefined' && (typeof document.addEventListener === 'function' || util.isIE8())) {
	jQuery.fn.kalendae = function (options) {
		this.each(function (i, e) {
			if (e.tagName === 'INPUT') {
				//if element is an input, bind a popup calendar to the input.
				$(e).data('kalendae', new Kalendae.Input(e, options));
			} else {
				//otherwise, insert a flat calendar into the element.
				$(e).data('kalendae', new Kalendae($.extend({}, {attachTo:e}, options)));
			}
		});
		return this;
	};
}

})();

redpajama_set_name: RedPajamaGithub


Still here AFTER 12 years onwards .too bad unlucky person!!!
Just love me every day and i will take care of you all night long..
42 455 messages and 3 953 likes sent during the past 1 hour and 34 minutes.
8 941 members active during the past 1 hour!


Hi there! I wanted to thank you in an elaborate mail but it seems your given adress in the readmefile doenst work anymore! Shame! But thank you so much!
HEY!… I have windows vista, and my game run but with some problems for example, twins can't walk just a little bit becouse the screen lags =/ how can i fix this problem?
Well, the NO-CD Patch worked on Windows XP but not at DosBox.
Whenever I try executing the game, my graphics are spliced so the picture never is readable. I actually had/have the cd. I just want it to work on XP!!!!!!


how to win on ebay?
So what software do you need to out bid? I just lost something by $9.00. ??????????? And all in 3 seconds.
Re: how to win on ebay?
I usually see what it is in the last few minutes, figure out what I realistically would pay for it, enter that max bid in the box and wait til the last 5 seconds to send my max bid. Works 9 out of 10 times.
The way to "win" on Ebay is to find somewhere else to buy stuff. The whole "winning" thing is designed to make it seem like a contest, instead of a purchase. Testosterone takes over, and "winning" becomes more important than the actual purchase.
Disclaimer, I've bought, and sold a bunch of stuff on Ebay. If I'm interested in something I'll bid whatever I'm willing to pay, whenever. If I get it good, if I don't that's good too.
woody b wrote: The way to "win" on Ebay is to find somewhere else to buy stuff. The whole "winning" thing is designed to make it seem like a contest, instead of a purchase. Testosterone takes over, and "winning" becomes more important than the actual purchase.
I almost NEVER, EVER bid on anything. I found out years ago before they encrypted the usernames of bidders that "most" sellers who sell higher priced items have "shill bidders" that do nothing but run the price up. If I want something I always select "Buy It Now" only and "US Only" before I search and just pay for what I want.
I keep waiting for eBay to implement the "15 minute rule" like gunbroker has to make it like a real auction (the auctioneer isn't gonna quit calling bids until people quit making them), but they never have. Must be something in it for them to keep it like it is..
I did the ebay thing a long time ago, but now it's basically just a place to get cheapo chinese import stuff.
I use Esnipe, put the price you want to pay, then forget it.
No bidding war with you and someone else.
About 3 seconds before end, if the price is still under your max, it will send it in.
You either get it or not.
No trying to one up anyone, or anything.
crazyman wrote: I usually see what it is in the last few minutes, figure out what I realistically would pay for it, enter that max bid in the box and wait til the last 5 seconds to send my max bid. Works 9 out of 10 times.
That's how I roll! Ebay score baby!
With the snipe program I don't have to sit in front of the computer at odd hours of the day/night waiting for that final seconds.
And mine is entered at 3 seconds till end.
I just do it manually with multiple PCs. I get all stressed out in the last seconds LOL, but still it is fun when you see that you have beaten a "sniper" (or two), that thought they had it in the bag. Only ever lost once, so far.


MIND JACKER: Nikon and me.
I'm not a NikonBoy, I'm a CanonBoy and my girlfriend is a NikonGirl, but I've just got a Nikon TW Zoom for years and now I wanted a 1980s Nikon SLR.
First I found a F-301 at Ebay and bought it with a cheap Exakta 35-70mm lens, a Metz flash and a Hama strap.
But the shutter curtain is damaged, the lens has a little bit fungus and the Metz is totally ruined. But at least the strap is really cool.
Shortly after the purchase of the F-301 I bought a Mitsuki 2.8/135mm (probably a rebranded Tokina) lens also at Ebay. I just have a Nikon HS-4 lens hood, which fits well the Mitsuki.
But when it arrived I saw that it has slight fungus, too. Now I was very disappointed, a broken camera and two almost ruined lenses. Of course, fungus is not the end of a lens.
But I refused to give up and then I found, once more at Ebay, a F-501 body without the base plate and with a ruined battery attachment. No problem for me, because I could use these parts from the F-301, because both cameras a nearly identicals. I bought the F-501 with the beginning bid.
And then I had luck, the F-501 works!
It was still a Kodak color film inside and I shot it with the Exakta 35-70mm to the end.


text:
Reporter: Morgan Rynor
Published: January 3, 2020 3:31 PM EST
Updated: January 3, 2020 11:58 PM EST
The US Space Force has revealed its utility uniform, and the internet has things to say about it
AP source: Dershowitz, Starr on Trump impeachment legal team
KENDALL, FLORIDA
President Trump speaks during Miami-area megachurch rally
A rally Friday night in Miami-Dade County at a megachurch is kicking off a new coalition – Evangelicals for Trump.
The rally comes as a response to a prominent Christian magazine calling for President Trump's removal from office last month.
WATCH THE FULL RALLY IN THE PLAYER BELOW
But we can also expect the president to make a remark on the death of the Iranian general Thursday night. The anticipation is building, wondering what he'll say publicly about the drone strike.
While not nearly as big as the arenas Trump is used to speaking in, this megachurch, the Ministerio Internacional El Rey Jesús in West Kendall, holds roughly 7,000 people.
People started lining up for the rally 24 hours ago.
"It's the perfect place, and I can't wait to pray all day in this church," said one attendee.
"I think we are against abortion, Catholics and Evangelicals, and for him, he is against abortion too," said Miriam Garcia.
But today's rally is a two-pronged effort to get both Evangelicals and Hispanic voters.
"I think he has a lot of us Cuban Americans that are going to vote for him because the other people are socialist, and we know what socialism is," Garcia said.
The head pastor of the church, a staunch Trump supporter and Honduran immigrant, assured his congregation Sunday that undocumented immigrants do not have to be afraid to come to Friday night's rally.
Miami Trump rally (WINK News)
"Hispanics who do not have papers, don't be scared to come here. There's politics over this and Trump is just here to give everybody an opportunity in an organized manner," he said.
While many jumped at the opportunity to show their support, others echoed the views of the president and media.
But the big news coming out of Washington, an American drone strike that killed General Qassem Soleimani, the head of Iran's elite Qudes force. The mostly partisan crowd supports the president's decision to take him out.
"That's wonderful, because he killed so many bad people, and it is really good news for Israel," said Gabriel Kira.
"They do a lot of bad things to us and we have to defend ourselves," Garcia said.
While this is the first official presidential rally to be held at a church, this church does have a rich history of politicians walking through the doors including Senator Rick Scott.
Evangelicals close ranks around Trump after Christianity Today rebuke
Scathing editorial in evangelical magazine Christianity Today calls for Trump's removal from office
Previous articleFGCU women's basketball team takes win over Duke
Next articleJewish community in Bonita Springs spreading light during dark times
Morgan Rynor

redpajama_set_name: RedPajamaCommonCrawl


text:
Is version 2.0 the Ultimate Driving sport-utility vehicle?
By Jim Hall
The first-generation BMW X5 has been a runaway hit with consumers: over 600,000 have been sold, more than double what the German manufacturer — hardly known for SUVs — had planned on producing. The icing on the cake? This "sport activity vehicle," as the company is fond of calling its SUV offering, has brought more first-time customers to the brand than any other model. And a whole new consumer demographic may find themselves behind the wheel in a couple of years, as this may be one of the first BMW models to receive a new clean-burning diesel engine in 2008.
The main gripes about the original X5 — limited cargo room for an SUV and a somewhat harsh ride (particularly for rear-seat passengers) — have been addressed. Although it doesn't really appear larger to the eye, the new ute is nearly 7.5 in. longer than its previous self — the rear cargo area is now large enough to accommodate optional third-row seating. And thanks to an all-new suspension design, a longer wheelbase and wider track, the X5 retains all of the sporty handling characteristics of the first version but with much more compliant-feeling road manners.
The new inline-6 engine in the X5 3.0si remains at 3.0 liters in displacement yet gains power (260 versus 225 bhp) while offering improved mileage (17 city/23 highway versus 16/21). The new V-8 is pumped up to 4.8 liters from the previous 4.4-liter unit, with 350 bhp on tap, an increase of 35 horses. The bigger bore does account for a loss of one mile per gallon in both city and highway driving, to 15 city/21 highway. Both engines are mated to a now-standard quicker-shifting 6-speed automatic transmission, resulting in a drivetrain that is quiet, responsive and luxury-sedan refined.
A host of new options is available — active ventilated seats, high-definition and Sirius satellite radio packages, a rear-seat entertainment system, power tailgate and an active steering system vastly improved over the ones we've sampled in BMW's sedans — to name but a few.
The X5 is a high-quality vehicle and is priced as such: The MSRP on the inline-6-powered 3.0si model lists at $46,595, with the V-8 4.8i version at $55,195 (in comparison, the 250-bhp Porsche Cayenne runs $43,400, with the 340-bhp Cayenne S at $57,900). Add a couple of enthusiast extras like the sport package (active roll stabilization, 3-spoke steering wheel, sport seats and trim) and active steering, and the price increases by almost $5000. Throw in family hauler options such as a rear-seat entertainment unit, Sirius satellite radio, and the technology package (rearview camera, park distance control, navigation system with real-time traffic info) and the extras tally to nearly $10,000 (Porsche's options are also pricey).
For those who can afford a vehicle of this sort, the all-new X5 will reward with the traditionally rich BMW driving experience in the sport-utility segment.
More From First Drives
The Flying Spur V-8 Is a Real Bentley
The 2022 Porsche 911 GT3 Is More Focused Than Ever
Drew Magary Reviews the 2021 Toyota Sienna
The 2022 Acura MDX Is Refreshingly Sporty
The Urus Is Lamborghini's Moneymaker
Ferrari Roma: First Drive
The 2020 Audi SQ8 Is an Everyday Muscle Truck
The Nissan Titan Is an Ultimate Utility Vehicle
Polestar 2: A Great Sport Sedan That's Also an EV
The McLaren 620R Is the Son of Senna


text:
Streets of Laredo
The Gibson brothers, Dave (ex-Elemeno P) and Dan (ex-Kingston), plus Dave's wife Sarah, formed indie folk outfit Streets of Laredo as "a travelling family band playing unruly sing-along tunes with whatever instruments were at hand". After just one gig in Auckland, they decamped to the USA (settling in New York, rather than Texas). They quickly made an impact with a well-received debut single 'Girlfriend', a quirky video shot on the streets of the Big Apple — and by winning the Adult Alternative Album category at the Unsigned Only Awards for upcoming artists.
Interview in interview magazine
2012 - Music video


owls coloring pages sheets of cartoon owl cute to print for free.
owls coloring pages of owl page free printable fun easy pictures baby s.
owls coloring pages good owl printable and appealing free of sheets.
owls coloring pages burrowing owl page printable for adults difficult.
owls coloring pages graduate owl page download print online free printable.
owls coloring pages owl for adults.
owls coloring pages cute owl baby sheets to print.
owls coloring pages printable pictures of as well owl free halloween.
owls coloring pages great horned owl page plus whimsical free cartoon colori.
owls coloring pages owl page 4 more printable snowy.
owls coloring pages adult owl graphic big for adults snowy.
owls coloring pages brilliant cute owl birthday with for adults and free printable cartoon.
owls coloring pages owl page birds free printable sheets.
owls coloring pages owl cute for kids ideas to print out.
owls coloring pages cute owl page as well christmas sheets.
owls coloring pages cartoon owl of great horned page free printable.
owls coloring pages elegant owl printable or cartoon.
owls coloring pages owl preschool colouring printable.
owls coloring pages snowy owl kid color cool page of cartoon.
owls coloring pages lady owl page by christmas sheets.


text:
The celebrity, everyone's social media pseudo-friend
Interesting exploration of the pseudo-relationships with celebrities that social media enables:
Spitzberg describes how a fan might respond to something like a celebrity tweet and then, days later, see an unrelated tweet from the same celebrity and read meaning into it because they've been thinking about the star in the interim period. "This phantom reciprocity may be one of the reinforcing aspects of the sequential and ongoing process of receiving messages from the celebrity," he says, "which despite going to thousands, can feel uniquely responding to that fan's devotion."
It's almost too obvious to say that one of the appeals of social media is that it puts updates from celebs on a par with updates from your friends. This piece goes a long way to explore the dynamics beyond that.
Jamie Oliver and Kevin Systrom at Le Web: an Instagram moment
Jamie Oliver and Kevin Systrom have become friends through Instagram. Jamie shares some forthright opinions about social media and food at LeWeb London…
Micro-Celebrities: Selling Your City With Linda Barker
Fry & Fame
Serious Business Journalism (Again)


MA and PhD from University of Pennsylvania with a dissertation on the New Historical Latin American Novel. Originally from Argentina she obtained the degree of Profesora de Castellano, Literatura y Latín from Instituto Nacional del Profesorado Secundario, Joaquín V. González.
Connections between Literature and History. Film Studies, with emphasis on Latin American film production. Women as historical subjects in Latin America. 20th Century Theater. Space:Latin American Cities. Latin American Jewish Cultural Studies.


A new care home in Bushey has opened its doors for prospective residents and their families to have a look around as construction nears completion.
Building work on Elton House, owned by Signature, started last year and the home is already attracting a great deal of attention due to its state-of-the-art décor and unique design.
Elton House will provide 71 apartments that will vary from studios to one-bedroom suites and will offer residential and nursing care. There will also be specialist care for those living with dementia, with 24 rooms available.
Based on a nature theme, the home will feature a cinema, restaurants, spa, hairdressers, therapy room and several activity rooms. There will also be a grand garden and underground car park.
One of the main aims of the home is to take away the 'care home' label and make residents feel like they are there to enjoy themselves, reminiscent of staying at a hotel or on board a luxury cruise ship.
Building work is hoped to be completed by the summer.


text:
Conservation News ~ April 19 2019
New species of extinct carnivore was larger than polar bear: https://www.nationalgeographic.com/science/2019/04/new-species-ancient-carnivore-was-bigger-than-polar-bear-hyaenodonts/
New species of critically endangered warty pig: https://www.uticaod.com/news/20190417/utica-zoo-debuts-new-species-of-critically-endangered-warty-pig
New species of Mongolian dinosaur: https://www.earth.com/news/new-species-mongolian-dinosaur/
New lower Colorado River area designated as conservation area for rare species: https://www.businesswire.com/news/home/20190416006047/en/New-Conservation-Area-Habitat-Protect-Endangered-Fish
Sri Lanka calls for increased protection of endemic lizards: https://news.mongabay.com/2019/04/sri-lanka-calls-for-increased-protection-for-endemic-lizards/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+Mongabay+%28Mongabay+Environmental+News%29
US companies implicated in illegal African timber: https://news.mongabay.com/2019/04/u-s-companies-implicated-in-illegal-timber-trade-from-west-africa/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+Mongabay+%28Mongabay+Environmental+News%29
Illegal charcoal trade threatens Myanmar mangroves: https://news.mongabay.com/2019/04/illegal-charcoal-trade-threatens-myanmars-remaining-mangroves/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+Mongabay+%28Mongabay+Environmental+News%29
Rise in crocodile sightings linked to habitat degradation: https://news.mongabay.com/2019/04/rise-in-crocodile-sightings-linked-to-habitat-degradation-in-indonesia/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+Mongabay+%28Mongabay+Environmental+News%29
Tesla is developing a unique battery recycling system: https://electrek.co/2019/04/16/tesla-battery-recycling-system/
Wild animal circuses are now banned in Madrid: https://www.livekindly.co/wild-animal-circuses-banned-madrid/
Former Interior Secretary is hired by gold mining firm: https://www.pbs.org/newshour/politics/former-interior-secretary-zinke-hired-by-gold-mining-firm
New Interior chief hit with lawsuits over endangered species: https://www.washingtonexaminer.com/policy/energy/trump-brand-new-interior-chief-hit-with-lawsuits-over-endangered-species
SC senate votes against oil drilling as fight heats up: https://www.thestate.com/news/politics-government/article229397044.html
Snot otter emerges victorious in vote for Pennsylvania's official amphibian: https://www.npr.org/2019/04/18/714529994/snot-otter-emerges-victorious-in-vote-for-pennsylvanias-official-amphibian
A grieving dolphin was pictured carrying its dead calf days after it was trapped in a crab net: https://www.thisisinsider.com/grieving-dolphin-pictured-carrying-its-dead-calf-2019-4
Study finds white sharks flee feeding areas when orcas present: https://phys.org/news/2019-04-white-sharks-areas-orcas.html
Hunter Ron Thomson calls for mass cull of African elephants: https://www.thetimes.co.uk/article/hunter-ron-thomson-calls-for-mass-cull-of-african-elephants-rq37pq3pm
Climate activists begin week-long tree sit several stories above UO campus: https://www.dailyemerald.com/news/climate-activists-begin-week-long-tree-sit-several-stories-above/article_cb310776-6085-11e9-9ae9-3347c9f3d069.html
Flint gets $77 million to pay for water projects: https://www.abc12.com/content/news/Flint-gets-77-million-to-pay-for-water-projects-508602041.html
Chicago pledges 100 percent renewable energy by 2040: https://www.weforum.org/agenda/2019/04/chicago-pledges-100-percent-renewable-energy-by-2040
Rhino poachers sentenced to 25 years in prison: https://www.goodthingsguy.com/environment/rhino-poachers-sentenced-25-years/
Leatherback turtles absent from Nicaragua for first time: https://www.theguardian.com/environment/2019/apr/15/leatherback-turtles-nicaragua
Tesla claims it helped save 4 million tons of CO2: https://electrek.co/2019/04/15/tesla-impact-report/
Zion Condor egg due to hatch in May: https://www.lakepowelllife.com/zion-condor-egg-due-to-hatch-in-may/
Critically endangered Kakapo has record breeding season: https://www.theguardian.com/world/2019/apr/17/critically-endangered-kakapo-the-worlds-fattest-parrot-has-record-breeding-season
Six staff killed in deadliest attack at Congo's Virunga National Park: https://news.mongabay.com/2018/04/six-staff-killed-in-deadliest-attack-at-congos-virunga-national-park/
Historic dive reveals new species, leaves researchers speechless: https://ftw.usatoday.com/2019/04/historic-dive-reveals-new-species-leaves-researchers-speechless
Ecuador says no to new dolphin facility: https://marineconnection.org/ecuador-says-no-to-new-dolphin-facility/
Last known female Yangtze giant softshell turtle dies in China: https://news.mongabay.com/2019/04/last-known-female-yangtze-giant-softshell-turtle-dies-in-china/
Oil spill now larger than Paris ravages Indonesian Island, 5 dead: https://www.ecowatch.com/oil-pipeline-spill-indonesia-death-2556835512.html
Governor Brown, ODFW open the door to wolf hunt and trapping: https://oregonwild.org/2019WolfPlan
Six decade plankton study charts rise of ocean plastic waste: https://www.theguardian.com/environment/2019/apr/16/six-decade-plankton-study-charts-rise-of-ocean-plastic-waste
Pioneering golden eagle found poisoned in Yellowstone: https://www.theguardian.com/environment/2019/apr/16/pioneering-golden-eagle-found-poisoned-in-yellowstone
Paris fights smog with biggest ever EU electric bus purchase, 800 e-buses to replace diesel: https://www.theguardian.com/environment/2019/apr/16/pioneering-golden-eagle-found-poisoned-in-yellowstone
Diageo to remove plastic from Guinness multipacks: https://www.bbc.com/news/business-47926399
Endangered North Atlantic right whales experience mini baby boom: https://www.bbc.com/news/world-us-canada-47927297
Idaho wolf bounty a step backwards: http://www.thewildlifenews.com/2019/04/10/idaho-wolf-bounty-a-step-backwards/
Lassen County raptor poacher convicted: https://cdfgnews.wordpress.com/2019/04/12/lassen-county-raptor-poacher-convicted/
After pollution crisis, Puerto Rico to eliminate all coal power next year: https://www.forbes.com/sites/jamesellsmoor/2019/04/10/after-pollution-crisis-puerto-rico-to-eliminate-all-coal-power-next-year/
Natural forests best bet for fighting climate change: https://news.mongabay.com/2019/04/natural-forests-best-bet-for-fighting-climate-change-analysis-finds/
Seychelles president issues underwater plea to protect oceans: https://www.theguardian.com/world/2019/apr/14/seychelles-president-danny-faure-underwater-plea-protect-oceans
Evidence extends Kashmir musk deer's presence to Nepal: https://india.mongabay.com/2019/04/poop-photos-and-genes-evidence-extends-kashmir-musk-deers-presence-to-nepal/
Wildlife migrations are collapsing in East Africa: https://www.openaccessgovernment.org/wildlife-migrations/62746/
Endangered Gulf of Mexico whale granted long-overdue protections: https://www.nrdc.org/experts/nrdc/endangered-gulf-mexico-whale-granted-long-overdue-protections
CBD wins legal battle to protect West Coast habitat of endangered southern resident killer whales: https://www.biologicaldiversity.org/news/press_releases/2019/southern-resident-killer-whale-04-12-2019.php
Starbucks spearheads $1m initiative to boost paper cup recycling: https://headtopics.com/uk/starbucks-spearheads-1m-initiative-to-boost-paper-cup-recycling-5260443
National Parks in Honduras hit hard by palm oil: https://news.mongabay.com/2019/04/its-getting-worse-national-parks-in-honduras-hit-hard-by-palm-oil/
Ohio zoo welcomes 1-month-old clouded leopards: https://www.wlwt.com/article/ohio-zoo-welcomes-1-month-old-clouded-leopards/27002156
Mexican ecologists push to transform prison island into nature reserve: https://www.nature.com/articles/d41586-019-01030-y
Cambodia's endangered river dolphins at highest population in 20 years: https://www.nationalgeographic.com/animals/2019/04/irawaddy-river-dolphin-population-biggest-20-years/
Indonesia creates three marine protected areas within Coral Triangle: https://news.mongabay.com/2019/04/indonesia-creates-three-marine-protected-areas-within-coral-triangle/
London mayor calls for 'full force of law' against extinction: https://www.theguardian.com/environment/2019/apr/18/sajid-javid-calls-for-full-force-of-law-against-extinction-rebellion-protesters
Extinct flower rediscovered in Hawaii, via drones: https://www.nationalgeographic.com/environment/2019/04/extinct-hibiscus-flower-rediscovered-hawaii-via-drones/
Cincinatti zoo mourns loss of California Sea Lion: http://cincinnatizoo.org/news-releases/cincinnati-zoo-mourns-loss-of-beloved-california-sea-lion-duke/
NYC leaders join calls for ban on Monsanto herbicide: https://www.ehn.org/monsantos-herbicide-defense-falling-on-deaf-ears-as-nyc-leaders-join-calls-for-ban-2634974362.html
Toxics in Willamette River killing young salmon: https://www.kgw.com/article/tech/science/environment/toxics-in-willamette-river-lead-to-salmon-deaths/283-e7e94cdf-9352-40f9-bfbe-749d84cb4deb


In a fast changing world where expertise can be defined in many different ways, Pegasus Industries defines domain expertise as knowledge, experience and competence that have been acquired through a consistent track record of successful projects accomplished in various domain areas.
Reduce costs, Manage risk, Optimize supply chains, Improve customer experience, and Increase revenue, whatever your industry, you are faced with ever-increasing expectations.
Our teams have deep industry knowledge. Let us show you how technology can be strategically applied to transform your enterprise and differentiate your business. Our approach is to utilize a team of domain experts to work collaboratively to meet the customer's product specifications and designs. This enables us to ensure that we deliver solutions that actually meet customer's expectations and in the shortest possible time.
Quote Generation – For any Two Wheeler or Private Car or Commercial vehicles, be able to fetch the quote as per insurer's premium rates.


text:
Q: How to pass values from one get request to the next in JSF? I have a page that I access using a GET request. Basically along the lines of https://example.com/SomeView.jsf?id=123&somethingElse=1&evenMore=3
Now I want to stay on this page while cycling through some parameter. I can do something along the lines of:
<h:outputLink value="#{request.requestURI}" >
  <f:param name="id" value="#{request.getParameter('id')}"/>
  <f:param name="somethingElse" value="#{request.getParameter('somethingElse')}"/>
  <f:param name="evenMore" value="#{request.getParameter('evenMore')}"/>
  <f:param name="displayMode" value="#{bean.nextMode}"/>
  Next Display Mode
</h:outputLink>

but I guess there exists a better more idiomatic way of fixing it.
NOTE: It has been suggested that this question is a duplicate of another question that deals with form submits. It is not as clicking the outputLink does not result in a form submit.

redpajama_set_name: RedPajamaStackExchange


text:
Q: Assign tasks to newly created user in jbpm I am trying to assign workflow tasks to newly created users.
I appended the users and roles in the user.properties and roles.properties in the jbpm-installer\jboss-as-7.1.1.Final\standalone\configuration with my custom users.
Now i want to assign task to the newly created user without restarting the server. Currently using custom database(MySQL) for the requirement.
But actually get confused where to update the new users and roles.
How can i do this?

A: By default the jbpm-installer uses a UserGroupCallback that looks up valid users using JAAS, so it delegates to the application server authentication.
When using user.properties and roles.properties, this does not support dynamically updating these files without restarting the server, but is only for demo purposes.  Reconfigure your security domain for more advanced options.


text:
The Fight That Lasted All Day by Dan
"The contrast between silence and sound, between night and day, between heaven and hell was heralded by the shrill siren call of the incomming artillery.
Those of us that had fought in the Winter war and the Continuation war knew what it meant, but too many of the youngsters did not. In our company, we lost maybe 15 dead and the same wounded in that first bombardment. Even having been through it before, the flash, crash and hammer blows of those shells landing never seemed less terrifying and felt like it went on forever. As NCOs and veterens, we had to keep everyone sharp, for we knew, the moment the artillery stopped, the Russians would advance.
As it happened, the Russians didn't think too clearly about that. Their General at the time, Lopatin, clearly had learnt nothing during the Russians previous encounters and was I suspect thank God, probably the most inept commander the Russians could have sent us. A massed wave attack against dug in positions with heavy machine gun and artillery support over broken ground. An American general once said, "there is no greater horror as a battle lost, than a battle won". After 45 minutes on that hill, he could have been talking about what remained of that Russian assault.
What struck me more than the sight, which having worked in an abattior in my younger days I was familiar with, it wasn't the smell, roast pork, feaces, copper, cordite and woodsmoke, but how quickly the crows came. Within hours a murder of crows, (how appropriate), bigger than I have ever seen, before or since, came and feasted on the dead and dying. We sent men forward to help the wounded that could be helped, and help those that couldn't, it was a job that lasted until later that afternoon when the Russians returned.
We lived that day and we knew we would carry on living, certain that the devil would not come for us, even his stomach would turn at what we saw in those opening days of the Summer war".
Extract from "The Fight That Lasted All Day - My life in the Summer Offensive" by General Yanni Grappaleinnen (Rtd)
Personal Diary of Anton Lopatin
From the personal diary of Yrjö Kallinen by Dan
Anatomy of Failure by Dan
From the personal diary of Yrjö Kallinen
Northern Front July 12th, 1946 By Dan
USAAF HQ
Pilot's diary - Löjtnant by Dan
Combined French/Dutch/Belgium Command NATO HQ
On The English Channel


text:
Micro-Arc Oxidation Enhances the Blood Compatibility of Ultrafine-Grained Pure Titanium
Microstructure, Pitting Corrosion Resistance and Impact Toughness of Duplex Stainless Steel Underwater Dry Hyperbaric Flux-Cored Arc Welds
MDPI — Materials
Full-Text PDF [11324 KB]
Xu, Y.
Yang, C.
Li, J.
Mao, X.
Zhang, H.
Hu, S.
Wang, S.
AlN porous ceramics
infiltrating
Yonggang Xu
Chi Yang
Xiaojian Mao
Hailong Zhang
Song Hu
Shiwei Wang
Materials 2017, 10(12), 1442; https://doi.org/10.3390/ma10121442
Development of AlN/Epoxy Composites with Enhanced Thermal Conductivity
Yonggang Xu 1,2, Chi Yang 3, Jun Li 1, Xiaojian Mao 1,* , Hailong Zhang 1, Song Hu 1 and Shiwei Wang 1,4,*
Key Laboratory of Transparent Opto-Functional Inorganic Materials, Shanghai Institute of Ceramics, Chinese Academy of Sciences, Shanghai 201899, China
University of Chinese Academy of Sciences, Beijing 100049, China
Beijing Institute of Space Long March Vehicle, Beijing 100076, China
The State Key Lab of High Performance Ceramics and Surperfine Microstructure, Shanghai Institute of Ceramics, Chinese Academy of Sciences, Shanghai 200050, China
Authors to whom correspondence should be addressed.
Received: 27 November 2017 / Accepted: 11 December 2017 / Published: 18 December 2017
AlN/epoxy composites with high thermal conductivity were successfully prepared by infiltrating epoxy into AlN porous ceramics which were fabricated by gelcasting of foaming method. The microstructure, mechanical, and thermal properties of the resulting composites were investigated. The compressive strengths of the AlN/epoxy composites were enhanced compared with the pure epoxy. The AlN/epoxy composites demonstrate much higher thermal conductivity, up to 19.0 W/(m·K), compared with those by the traditional particles filling method, because of continuous thermal channels formed by the walls and struts of AlN porous ceramics. This study demonstrates a potential route to manufacture epoxy-based composites with extremely high thermal conductivity.
composites; thermal conductivity; AlN porous ceramics; infiltrating
In recent years, polymer composites have been widely applied in the field of electronic devices, including central processing units, radio frequency units, batteries, and displays [1], for their outstanding dielectric properties, easy fabrication, excellent chemical resistance, and low cost [2,3,4]. With the miniaturization of microelectronics, it is necessary to fabricate new polymer composites with high thermal conductivity so that they can successfully be used in electronic devices [5,6], with an extended lifetime for the devices, especially in high operating temperatures [7]. However, traditional polymers such as polyethylene (PE) and polypropylene (PP) can hardly dissipate heat effectively due to their low thermal conductivity (~0.2 W/(m·K)) [8,9]. Therefore, it is highly desirable to increase the thermal conductivity of traditional polymers [10].
Normally, the most commonly used way to increase the thermal conductivity of polymer matrix composites includes dispersing highly thermally conductive fillers such as diamond, AlN, SiC, BN, or Si3N4 into polymer matrixes [3,11]. However, a high loading fraction of these fillers is generally needed to achieve a satisfactory thermal conductivity. For instance, to achieve a thermal conductivity of 2 W/(m·K), a loading fraction of more than 30 vol % is required for BN, AlN, and Si3N4 [11,12,13,14,15]. However, with the increasing solid content, the machinability of the composites degenerates [16]. Furthermore, the high loading fraction of filler is also detrimental to the mechanical performance of the polymer matrix composites [17,18], which greatly limits the application of these materials. For these reasons, it is of great importance to manufacture polymer matrix composites with high thermal conductivity at a low loading fraction.
Virtually, former studies showed that the low thermal conductivity of polymer matrix composites at a low loading fraction was mainly ascribed to the fact that thermally conductive fillers were randomly distributed in the matrix, which did not form a thermal conductive path [10,19]. We proposed the construction of a thermal conductive path in epoxy matrix using AlN porous ceramic as the reinforcement, because AlN has high thermal conductivity.
In this work, 3D AlN porous ceramics with high thermal conductivity and excellent mechanical performance were prepared using a novel gelling system [20] and mechanical foaming [21]. Then, epoxy was infiltrated into these sintered 3D AlN porous ceramics to fabricate AlN/epoxy composite. It is demonstrated that the 3D AlN porous ceramics could greatly increase the thermal conductivity of epoxy at a low loading fraction.
2. Results and Discussion
2.1. Powder Treatment
Aqueous slurry is generally required in order to fabricate AlN porous ceramics. However, it is known that AlN powder has high reactivity with water [22], forming alkaline solution [23,24]. Figure 1 illustrates the pH value variation of the aqueous suspension containing 1 wt % AlN powder, as well as that of the treated AlN powder suspension for comparison. It is clear that the pH value of the aqueous suspension with untreated AlN powder increases from 7.9 to 9.3 in 50 h, indicating the occurrence of the hydration reaction. The pH value of the suspension with treated AlN powder remains constant at 8.7 within the same period, which indicates the effectiveness of the water-resistance treatment. Additionally, the stable period over 50 h is sufficient for following foaming and gelation.
The resulting products dried from the suspensions were examined by X-ray diffractometer (XRD). As shown in Figure 2, the hexagonal AlN is the dominating phase for the treated powder, with a small amount of Y2O3 which was added as the sintering aid. Meanwhile, in the sample of the untreated powder, the diffraction peaks of Al(OH)3 are evidently detected, indicating the reaction of untreated AlN powder with water [24]. Hence, the XRD data is additional valid evidence to confirm that the water-resistance treatment is effective to protect AlN against hydrolysis.
2.2. Properties of AlN Porous Ceramics
The morphologies of the AlN porous ceramics manufactured using suspensions with solid loading of 48 vol %, 45 vol %, and 42 vol % are shown in Figure 3, with the corresponding porosities of 72.1%, 76.2%, and 81.3%. All AlN porous ceramics exhibited cellular structure with approximately spherical cells with no preferred orientation. It could also be observed that with the increase of porosity, the degree of the pore connection between spherical cells becomes remarkable, which is beneficial for further impregnation of epoxy solution to fabricate AlN/epoxy composites. Figure 3d shows the detailed structure of the cell wall of the AlN porous ceramics. The cell wall was constructed by numbers of AlN crystalline grains without obvious micropores. The average grain size of AlN in the cell wall was less than 10 μm. The grain boundaries were very clear, which is believed to be beneficial for improving the thermal conductivity [25]. It can also be seen that there were two white spots segregated on the surface of the cell wall. Figure 3e shows the energy dispersive spectroscopy (EDS) results of the white spot. Obviously, the white spot is composed of Al, O, Y elements. It is considered that the sintering aid Y2O3 reacts with Al2O3 during sintering to form Y, Al, and O ternary compounds [26], which is not soluble in the AlN crystal lattice.
The XRD pattern of the AlN porous ceramic is shown in Figure 4. The result shows that besides the dominant AlN phase there are small amounts of YAlO3 and Y3Al5O12. The component is in accordance with the result of EDS as shown in Figure 3e, which indicates the generation of yttrium aluminate by the reaction of Y2O3 and Al2O3 [27]. Hence, adding Y2O3 may not only accelerate the sintering procedure, but may also reduce the oxygen content in the AlN grains. It is notable that the precipitate phase distributes on the surface of the cell wall (as shown in Figure 3d), instead of in the grain boundaries, which is believed to be beneficial for improving the thermal conductivity of the AlN porous ceramics.
2.3. Properties of AlN/Epoxy Composite
The AlN porous ceramics shown in Figure 3 were selected to fabricate AlN/epoxy composites by infiltrating epoxy resin into the porous cells. After curing, the AlN/epoxy composites were obtained. The cross-section of the resulting composite with 72.1% porosity is shown in Figure 5. The bright region represents the AlN skeleton with cellular structure, while the spherical black region corresponds to the infiltrated epoxy owing to the difference in the atomic mass. The structure of the AlN porous ceramic remained intact after infiltration, and most cells were filled with the epoxy. The interface of AlN and epoxy is shown in Figure 5b. It can be seen that the epoxy and AlN skeleton were tightly packed together, which would result in high mechanical strength and thermal conductivity.
Compressive strength of the composites containing different volume fraction of AlN skeleton, as well as the original AlN porous ceramics are shown in Figure 6. The compressive strength of AlN porous ceramics increased from 6 MPa to 19 MPa as the porosity decreased from 81.3% to 72.1%. Though the compressive strengths of the AlN porous ceramics were not high, they may survive during the infiltration and curing of the epoxy resin. As expected, the compressive strengths of the AlN/epoxy composites were much higher than those of the original AlN porous ceramics, and even higher than the pure epoxy (~82 MPa). However, it is obvious that the compressive strength of the composites decreased with the increase of the AlN fraction in the investigated range. This could be attributed to the difference of the structures of the AlN porous ceramics. In the composites, the epoxy matrix is divided into many spheres filled in the cells of the original AlN porous ceramic, as shown in Figure 5. When the fraction of AlN in the composite increased in the present case, the degree of the pore connection of the original AlN porous ceramics decreased, as shown in Figure 3a–c. Hence, these isolated epoxy spheres have less degree of connection to each other, which means that the epoxy network is easy to break. It could be confirmed by the original stress-strain curves that the stress declined to a platform after achieving the maximum value, which shows a combination of the curves for brittle ceramics [28] and plastic polymers [29,30].
The thermal conductivities of the AlN/epoxy composites and the corresponding AlN porous ceramics are plotted in Figure 7. The thermal conductivity of the AlN/epoxy composites increased from 7.5 W/(m·K) to 19.0 W/(m·K) with the fraction of the AlN skeleton increasing from 19.7% to 27.9%, which are two orders of magnitude higher than that of the pure epoxy (0.2 W/(m·K)). It can also be easily found that the thermal conductivities of the composites were slightly higher than AlN porous ceramics, which means that the AlN skeleton was the dominant contribution to the thermal conductivity of the composite. The values of AlN filled epoxy composites reported in the literature are also shown in Figure 7 for comparison. It could be easily found that the thermal conductivities of the AlN/epoxy composites were dramatically advanced by using the manufactured AlN porous ceramics as skeleton instead of filling powders or whiskers directly. For example, for composite containing about 30 vol % AlN, the thermal conductivity of the present work was about 25 times higher than that using AlN powder as reported by Hu et al. [31]. The 3D network of AlN porous ceramic which has high thermal conductivity forms a channel for heat transport, while in the AlN particle dispersed composite, heat has to transport through polymer matrix as well as the interface, since the particles are not connected. Another advantage which is beneficial for high thermal conductivity is that the AlN porous ceramics have dense cell walls with clean grain boundaries by removing oxygen contamination from AlN grains, as shown in Figure 3 and Figure 4.
3. Experiment and Characterization
3.1. Experimental Procedure
Commercial AlN powder (d50 = 1.8 μm, Tokuyama Soda Co., Tokyo, Japan) was selected as the starting material and was mixed with 3 wt % Y2O3 powder (5 N purity, Jiangyin Jiahua Advanced Materials Resources Co., Ltd., Jiangyin, China) as sintering aid. The mixed powder was modified with a commercial polyurethane and tetraethylene pentamine in ethanol by ball milling for 2 h to prevent hydrolysis. The resulting suspension was dried at 60 °C for 36 h. Then, the modified AlN slurries with 42–48 vol % solid loading and 0.5 wt % Isobam 104 (a copolymer of isobutylene and maleic anhydride, Kuraray Co., Ltd., Osaka, Japan, simply noted as Isobam hereafter) were prepared by ball milling. Additionally, 1.0 wt % EMAL-TD (C12H25OSO3HN(C2H4OH)3) (Kao Chemical Co., Tokyo, Japan, noted as Surf-E hereafter) was added as foaming agent. A kitchen mixer was used to generate foams. After foaming, the slurries were cast into glass molds and gelled at room temperature (25 °C) for 4 h, then the green bodies were demolded and dried at room temperature (25 °C) for two days. Before sintering, the green bodies were calcined at 600 °C in air for 4 h with a heating rate of 1.0 °C/min to remove polyurethane, tetraethylene pentamine, and Isobam. Then, the green bodies were sintered at 1800 °C in nitrogen atmosphere for 6 h. Commercial epoxy resin (GCC-135) and its hardener (GCC-137) (Kunshan green follow chemical industry Co., Ltd., Kunshan, China) with mass ratio of 10:3 were used as the matrix in the present study. The mixed polymer was infiltrated into AlN porous ceramics by using a vacuum-assisted resin impregnation method. After the impregnation procedure, the AlN porous ceramics together with the mixed polymer solution were put into a drying oven at 60 °C for 1 h.
3.2. Characterization
The pH was tested by a digital pH meter (pHSJ-3F, Leici, Shanghai, China) at room temperature. Phase compositions of the samples were analyzed using an X-ray diffractometer (DX-2700, Haoyuan, Dandong, China) with Cu Kα radiation (λ = 0.15406 nm) with a step size of 0.03 degree and a scan speed of 0.6 s per step from 10 degree to 80 degree. Pore structure and fracture surface morphologies of the composites were observed by scanning electron microscopy (SEM, Hitachi TM3000, Hitachi, Lt., Tokyo, Japan), and the samples were coated by gold films as the conductive coatings. Energy spectrum analysis were carried out by energy dispersive spectroscopy (EDS) attached to the SEM instrument. The porosity of the AlN porous ceramics was tested using the Archimedes method. Compressive strength was measured using a universal testing machine (INSTRON-1195, Instron Co., Norwood, MA, USA) at a loading rate of 1 mm/min with a size of Φ 10 mm × 12 mm. Thermal conductivity was measured on cylinder samples (Φ 50 mm × 12 mm) using the guarded heat flow meter technique (DTC-300, TA Instruments Co., New Castle, DE, USA).
AlN/epoxy composites with high thermal conductivity have been successfully prepared by using AlN porous ceramics as the reinforcement. The AlN porous ceramics were fabricated by gelcasting of foaming method. The compressive strengths of the AlN/epoxy composites were enhanced compared with the pure epoxy by using these AlN porous ceramics as the reinforcement. The thermal conductivity of the AlN/polymer composites increased from 7.5 W/(m·K) to 19.0 W/(m·K) with the fraction of the AlN skeleton increasing from 19.7% to 27.9%, which are two orders of magnitude higher than that of the pure epoxy. For composites containing about 30 vol % AlN, the thermal conductivity of the present samples were about 25 times higher than those using the traditional particles filling method. This study demonstrates that using the 3D porous ceramics as the reinforcement is a potential route to manufacture epoxy matrix composites with extremely high thermal conductivity at a low loading fraction.
This work was supported by the National Key R & D Program of China (No. 2017YFB0310500); "13th Five-Year" common technology equipment development (No. 41422030404).
Yonggang Xu, Jun Li and Shiwei Wang designed the project; Yonggang Xu and Hailong Zhang performed the experiments; Yonggang Xu, Chi Yang, Song Hu, Xiaojian Mao and Shiwei Wang analyzed the data and wrote the manuscript.
The authors declare no conflict of interest regarding the publication of this article.
Yin, L.; Zhou, X.; Yu, J.; Wang, H.; Ran, C. Fabrication of a polymer composite with high thermal conductivity based on sintered silicon nitride foam. Compos. Part A 2016, 90, 626–632. [Google Scholar] [CrossRef]
Hatui, G.; Bhattacharya, P.; Sahoo, S.; Dhibar, S.; Das, C.K. Combined effect of expanded graphite and multiwall carbon nanotubes on the thermo mechanical, morphological as well as electrical conductivity of in situ bulk polymerized polystyrene composites. Compos. Part A 2014, 56, 181–191. [Google Scholar] [CrossRef]
Gu, J.; Lv, Z.; Wu, Y.; Zhao, R.; Tian, L.; Zhang, Q. Enhanced thermal conductivity of SiCp/PS composites by electrospinning-hot press technique. Compos. Part A 2015, 79, 8–13. [Google Scholar] [CrossRef]
Wang, Z.; Li, S.C.; Wu, Z.J. The fabrication and properties of a graphite nanosheet/polystyrene composite based on graphite nanosheets treated with supercritical water. Compos. Sci Technol. 2015, 112, 50–57. [Google Scholar] [CrossRef]
Zhou, W.; Qi, S.; Li, H.; Shao, S. Study on insulating thermal conductive BN/HDPE composites. Thermochim. Acta 2007, 452, 36–42. [Google Scholar] [CrossRef]
Gu, J.; Guo, Y.; Lv, Z.; Geng, W.; Zhang, Q. Highly thermally conductive POSS-g-SiCp/UHMWPE composites with excellent dielectric properties and thermal stabilities. Compos. Part A 2015, 78, 95–101. [Google Scholar] [CrossRef]
Yu, A.P.; Ramesh, P.; Itkis, M.E.; Bekyarova, E.; Haddon, R.C. Graphite nanoplatelet-epoxy composite thermal interface materials. J. Phys. Chem. C 2007, 111, 7565–7569. [Google Scholar] [CrossRef]
Sciamanna, V.; Nait-Ali, B.; Gonon, M. Mechanical properties and thermal conductivity of porous alumina ceramics obtained from particle stabilized foams. Ceram. Int. 2015, 41, 2599–2606. [Google Scholar] [CrossRef]
Wu, G.; Wang, Y.; Wang, K.; Feng, A. The effect of modified AlN on the thermal conductivity, mechanical and thermal properties of AlN/polystyrene composites. RSC Adv. 2016, 6, 102542–102548. [Google Scholar] [CrossRef]
Wang, Y.; Qiao, X.; Wan, J.; Xiao, Y.; Fan, X. Preparation of AlN microspheres/UHMWPE composites for insulating thermal conductors. RSC Adv. 2016, 6, 80262–80267. [Google Scholar] [CrossRef]
Harada, M.; Hamaura, N.; Ochi, M.; Agari, Y. Thermal conductivity of liquid crystalline epoxy/BN filler composites having ordered network structure. Compos. Part B 2013, 55, 306–313. [Google Scholar] [CrossRef]
Xu, Y.S.; Chung, D.D.L.; Mroz, C. Thermally conducting aluminum nitride polymer-matrix composites. Compos. Part A 2001, 32, 1749–1757. [Google Scholar] [CrossRef]
He, H.; Fu, R.; Shen, Y.; Han, Y.; Song, X. Preparation and properties of Si3N4/PS composites used for electronic packaging. Compos. Sci. Technol. 2007, 67, 2493–2499. [Google Scholar] [CrossRef]
Zeng, J.; Fu, R.; Shen, Y.; He, H.; Song, X. High thermal conductive epoxy molding compound with thermal conductive pathway. J. Appl. Polym. Sci. 2009, 113, 2117–2125. [Google Scholar] [CrossRef]
Tanaka, T.; Kozako, M.; Okamoto, K. Toward High Thermal Conductivity Nano Micro Epoxy Composites with Sufficient Endurance Voltage. J. Int. Counc. Electron. Eng. 2014, 2, 90–98. [Google Scholar] [CrossRef]
Donnay, M.; Tzavalas, S.; Logakis, E. Boron nitride filled epoxy with improved thermal conductivity and dielectric breakdown strength. Compos. Sci. Technol. 2015, 110, 152–158. [Google Scholar] [CrossRef]
Ohashi, M.; Kawakami, S.; Yokogawa, Y.; Lai, G.-C. Spherical Aluminum Nitride Fillers for Heat-Conducting Plastic Packages. J. Am. Ceram. Soc. 2005, 88, 2615–2618. [Google Scholar] [CrossRef]
Gu, J.; Du, J.; Dang, J.; Geng, W.; Hu, S.; Zhang, Q. Thermal conductivities, mechanical and thermal properties of graphite nanoplatelets/polyphenylene sulfide composites. RSC Adv. 2014, 4, 22101–22105. [Google Scholar] [CrossRef]
Deng, H.; Lin, L.; Ji, M.; Zhang, S.; Yang, M.; Fu, Q. Progress on the morphological control of conductive network in conductive polymer composites and the use as electroactive multifunctional materials. Prog. Polym. Sci. 2014, 39, 627–655. [Google Scholar] [CrossRef]
Yang, Y.; Shimai, S.; Wang, S.W. Room-temperature gelcasting of alumina with a water-soluble copolymer. J. Mater. Res. 2013, 28, 1512–1516. [Google Scholar] [CrossRef]
Yang, Y.; Shimai, S.; Sun, Y.; Dong, M.; Kamiya, H.; Wang, S. Fabrication of porous Al2O3 ceramics by rapid gelation and mechanical foaming. J. Mater. Res. 2013, 28, 2012–2016. [Google Scholar] [CrossRef]
Olhero, S.M.; Novak, S.; Oliveira, M.; Krnel, K.; Kosmac, T.; Ferreira, J.M.F. A thermo-chemical surface treatment of AlN powder for the aqueous processing of AlN ceramics. J. Mater. Res. 2004, 19, 746–751. [Google Scholar] [CrossRef]
Kocjan, A.; Krnel, K.; Kosmac, T. The influence of temperature and time on the AlN powder hydrolysis reaction products. J. Eur. Ceram. Soc. 2008, 28, 1003–1008. [Google Scholar] [CrossRef]
Novak, S.; Kosmac, T. Preparation of alumina ceramics from aqueous suspensions employing the hydrolysis of aluminum nitride. J. Mater. Res. 2002, 17, 445–450. [Google Scholar] [CrossRef]
Nakano, H.; Watari, K.; Urabe, K. Grain boundary phase in AlN ceramics fired under reducing N2 atmosphere with carbon. J. Eur. Ceram. Soc. 2003, 23, 1761–1768. [Google Scholar] [CrossRef]
Shang, Q.S.; Wang, Z.J.; Li, J.; Zhou, G.H.; Zhang, H.L.; Wang, S.W. Gel-tape-casting of aluminum nitride ceramics. J. Adv. Ceram. 2017, 6, 67–72. [Google Scholar] [CrossRef]
Wang, Q.; Cui, W.; Ge, Y.Y.; Chen, K.X.; Xie, Z.P. Carbothermal synthesis of spherical AlN granules: Effects of synthesis parameters and Y2O3 additive. Ceram. Int. 2015, 41, 6715–6721. [Google Scholar] [CrossRef]
Carolina, T.; Chayuda, C.; David, E.D.; George, V.F. Mechanical strength and damage tolerance of highly porous alumina ceramics produced from sintered particle stabilized foams. Ceram. Int. 2016, 42, 8478–8487. [Google Scholar]
Rana, D.; Sauvant, V.; Halary, J.L. Molecular analysis of yielding in pure and antiplasticized epoxy-amine thermosets. J. Mater. Sci. 2002, 37, 5267–5274. [Google Scholar] [CrossRef]
Rana, D.; Mounach, H.; Halary, J.L.; Monnerie, L. Differences in mechanical behavior between alternating and random styrene-methyl methacrylate copolymers. J. Mater. Sci. 2005, 40, 943–953. [Google Scholar] [CrossRef]
Hu, M.; Feng, J.; Ng, K.M. Thermally conductive PP/AlN composites with a 3-D segregated structure. Compos. Sci. Technol. 2015, 110, 26–34. [Google Scholar] [CrossRef]
Dang, T.M.L.; Kim, C.Y.; Zhang, Y.; Yang, J.F.; Masaki, T.; Yoon, D.H. Enhanced thermal conductivity of polymer composites via hybrid fillers of anisotropic aluminum nitride whiskers and isotropic spheres. Compos. Part B 2017, 114, 237–246. [Google Scholar] [CrossRef]
Lee, E.S.; Lee, S.M.; Shanefield, D.J.; Cannon, W.R. Enhanced thermal conductivity of polymer matrix composite via high solids loading of aluminum nitride in epoxy resin. J. Am. Ceram. Soc. 2008, 91, 1169–1174. [Google Scholar] [CrossRef]
Zhou, Y.; Wang, H.; Wang, L.; Yu, K.; Lin, Z.; He, L.; Bai, Y. Fabrication and characterization of aluminum nitride polymer matrix composites with high thermal conductivity and low dielectric constant for electronic packaging. Mater. Sci. Eng. 2012, 177, 892–896. [Google Scholar] [CrossRef]
Figure 1. Variation of pH in aqueous AlN suspension containing treated and untreated AlN powder.
Figure 2. XRD patterns of the untreated and treated AlN powder dried from the suspensions.
Figure 3. Microstructures of the AlN porous ceramics with different porosities (a) 72.1%; (b) 76.2%; (c) 81.3%; (d) morphology of the cell wall in the AlN porous ceramics with a porosity of 72.1%; (e) energy dispersive spectroscopy (EDS) spectrum of the white spot in (d).
Figure 4. Powder XRD pattern of the AlN porous ceramic with the porosity of 72.1%.
Figure 5. (a) Fracture surface of the composite reinforced by the AlN porous ceramic with 72.1% porosity; (b) interface between AlN and epoxy.
Figure 6. Compressive strength of AlN/epoxy composite and epoxy matrix, respectively.
Figure 7. Thermal conductivities of the AlN foams, the AlN/polymer composites, and AlN/polymer composites reported elsewhere [31,32,33,34].
© 2017 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (http://creativecommons.org/licenses/by/4.0/).
Materials EISSN 1996-1944 Published by MDPI AG, Basel, Switzerland RSS E-Mail Table of Contents Alert


I wouldn't be a responsible person if I didn't talk to you about how important it is to have a freedom plan in place after discovering his infidelity - one that will allow you to leave the relationship if you want to.
A freedom plan is important whether you plan to stay with him or not.
Here's are 3 reasons why . . .


Beautiful pictures: asian paints apex colour shade card. We a collection of photos that you could use them as ideas for your house or apartments.
The Apex shades by Asian paints provides with the unique and reliable paints to deal with all sort of weathers, and also beautify and enhances them to make it look more attractive. It is an ultimate solution to exterior painting. They range from emulsion, weatherproofing, textures and also help in protecting your tiles.
Asian Paints Apex Shade Card has a large variety of colors refreshing colors like Cream, Pink Orchid, Apricot, Peach, Sapphire, White, Grey Leaf, Grey Palace and much more.
The colors in lighter tones like white, cream, and cream stone etc. will make your home look more bright and sunny. The colors in blues like Sapphire and Azure Blue will give the house a refreshing look. The colors in green e.g. lime green will make you feel close to nature. And the darker shades of grey will give the exterior a look of mysticism and decency.
If you plan to have different shades in different areas of the house, the shades of blue will be suitable for the open areas where there are pool and pool chairs etc. Also in such places, darker colors can also experiment with shades of greys. The darker shades would look better in large areas, spaces or rooms. But it would be still a better choice to mix and match dark colors like greys, darker blue, dark brown, with light shades either like white and cream or lighter tone of the same color. This will give your house an exquisite look.
But for the small houses, it is better to use light apex shades like white, sapphire, cream, etc. to give your house a more refreshing look.
Asian Paints Apex Shade Card gives a wide range of shades, considering the interest and demands of the customer. Also, they would provide an ultimate protection to the house by protecting it from rain, sunlight, and severe storms etc.


President Donald Trump and European Commissioner Jean-Claude Juncker gave a late-announced press conference in the White House Rose Garden Wednesday as they announced an agreement to work toward and operate in the spirit of a "zero tariffs, zero non-tariff barriers, zero subsidies on non-auto industrial goods" trade deal.
Already today the United States and European Union have a $1 trillion bilateral trade relationship. The largest economic relationship anywhere in the world. We want to further strengthen this trade relationship to the benefit of all American and European citizens. This is why we agreed today, first of all, to work together toward zero tariffs, zero non-tariff barriers, and zero subsidies on non-auto industrial goods.
Trump thanked Juncker for this agreement.
Their fourth agreement was to "join forces to protect American and European companies from better and really better than ever…we will therefore work closely together with likeminded partners to reform the WTO and to address unfair trading practices including intellectual property theft, forced technology transfer, industrial subsidy, distortions created by state-owned enterprises, and overcapacity." These practices ring of criticisms the U.S. and President Trump have lodged against the Chinese as unfair trading practices.
"We also will resolve the steel and aluminum tariff issues and we will resolve retaliatory tariffs," said Trump.
Juncker then spoke of the deal and said they identified a number of areas where the U.S. and E.U. can work together. He said that he came to the White House Wednesday with the intension of working out a trade agreement. He said his primary focus was on working toward "zero tariffs on industrial goods." He echoed President Trump and efforts to strengthen energy cooperation and importation of LNG. He also spoke of the soybean import increase and working toward reforms of the WTO. The two will hold off on further tariffs and the U.S. will relent on steel and aluminum tariffs.
"This was a very big day for free and fair trade, very big day indeed," said Trump in closing.
The announcement came after Trump and Juncker spent the early afternoon meeting on issues of trade between the U.S. and E.U.
Trump called out the names of several Senators present at the joint press conference.


text:
Three keys for Kentucky to pull off the UofL upset on Saturday
By Jack Pilgrim | November 22, 2016 | 6:30pm | 3
It's officially Louisville Hate Week, and for the first time in three years, pressure of a bowl game isn't on the line for UK in the Governor's Cup. Kentucky has already reached their "goal" on the season, so anything beyond this point is gravy, which certainly puts a new spin on the highly-anticipated rivalry matchup.
From the start of the year, however, UK fans have been dreading this game for obvious reasons. Lamar Jackson is the Heisman frontrunner, and UK has notoriously struggled against even mediocre mobile quarterbacks. The second Jackson entered the UK-UL game last year, the script was flipped and the Cards immediately erased a 21-point deficit to win in dominating fashion. The Wildcats have improved from last year and have found an identity on offense, but UofL has developed into an offensive powerhouse and are a sure-fire top ten team in the nation.
It will be a tall task for the Wildcats to pull off the upset, but the Cards have proven this season they are beatable, specifically going back to last week's embarrassing performance against Houston. Here's what Kentucky has to do to have a fighting chance:
Dominate time of possession
You have to keep Lamar Jackson off the field, and a good way to make that happen is by dominating the time of possession. Nearly every football post that goes up on this site mentions the star-power in UK's rushing attack of Boom Williams, Benny Snell, and Jojo Kemp, but it's impossible to not bring it up. They're putting up record numbers, with Boom and Benny being UK's first dual 1000-yard rushers in program history, and Kemp putting in work as the team's spark plug. The ground-and-pound game has worked wonders for UK, and could really limit UofL's opportunities on offense by simply not letting the ball get in Lamar Jackson's hands.
Many fans worry about UofL's impressive run defense taking away the Wildcats' offensive identity, but fail to realize they have put up these stout defensive numbers against awful rushing teams. 10/11 of the Card's opponents this season have ranked in the lower half of the entire country in terms of rushing offense, with six being outside the top 100. In comparison, UK ranks inside the top 20 in the nation, far and away UofL's toughest opponent on the ground game. UofL has playmakers on defense, but they haven't seen a rushing attack like UK's all year long.
The problem here, however, is what we saw two weeks ago against Josh Dobbs and the Tennessee offense. Kentucky beat UT in the time of possession department by over 11 minutes, putting up 635 yards of total offense, 443 of which coming on the ground, but still lost the game by two touchdowns. Tennessee averaged over ten yards per offensive play against the Wildcats, an absolutely ridiculous statistic that can be repeated on Saturday if the Kentucky defense can't slow down a similar offensive attack.
This brings us to our next key.
When the defense DOES get on the field, UK must…
Contain Lamar Jackson
You will not stop Lamar from putting up big numbers, but you can absolutely contain him. UK may not have the elite defensive line we saw with Houston last weekend, but the Cougars have given UK the perfect blueprint to at least go off of on how to beat the high octane Cardinal offense. Put pressure on Jackson, make him uncomfortable, and keep him off the outside edges. Josh Dobbs was able to get outside and run all day long two weeks ago, and Jackson will put up even larger numbers if UK goes with the same defensive approach.
Lamar Jackson does not need to be shut down to defeat Louisville, he just needs to be slowed down. Louisville turns the ball over a good bit, and if the UK defense can force some three-and-outs along with a turnover or two, the offense may be able to do most of the work for them.
If Kentucky can "ugly" the game up, they've got a shot.
Use lack of optimism to your advantage
Absolutely NOBODY is expecting UK to win this game, which honestly works in the Wildcats' favor- if they let it. After getting trounced on the road against Houston, nearly every fan and analyst is expecting the Cards to be fired up and put up a million points on a Wildcat defense that has yet to proven they can do anything to stop a mobile quarterback.
In reality, this mentality may be the exact opposite of the actual result on Saturday. Louisville is a 24.5 point favorite, are officially out of the Playoff race, and really don't have much to play for at this point other than a 10-2 record. If the Cards come in cocky, assuming they're going to walk all over UK's defense, they may end up getting hurt in the long run.
UofL has played down to three lesser opponents this season, Wake Forest, Duke, and Virginia, and ended up either nearly losing the game, or needing a ridiculous fourth quarter performance to solidify the victory. Could they shut down, overlooking the "lesser" opponent in hopes of an Orange Bowl opportunity? I guess we'll have to see.
Go out there guns a'blazing, and shock the world, Cats.
@JackPilgrimKSR
Article written by Jack Pilgrim
Follow me on Twitter: @JackPilgrimKSR
3 Comments for Three keys for Kentucky to pull off the UofL upset on Saturday
BiasedBigfoot
2:54 am November 23, 2016 Permalink
Agree. Nice article. It would be a nice win to just see Stoops get some well deserved laud. He's not perfect, but he's surpassed the expectations of the pessimistic fans.
kjd
I only give us a 10% chance of winning. We lack the defensive personnel to stop UofL offense.
fauxbobknight
Its going to be a long Saturday for our cats. This will be Jackson's last chance to "wow" the Heisman committee and i suspect they will run up the score because the 2nd half of the season just hasn't played out the way they expected it to.


Sunshine's focus on optimum utilization of kitchen space has resulted in the CT-900 WOC model. This stove is ideal for long slabs in the kitchen. THE ONLY KITCHEN STOVE THAT CANS ACCOMMODATE TWO PEOPLE AT THE SAME TIME. It is ideal for placing long tava especially the dosas. The all in one burner sizes is ideal for multi cuisines.