text:
<?php

	class NAPI {

		static $database = null;
		static private $functions = ["unix_timestamp"];

		public static function setDatabase($database = null){
			self::$database = $database;
		}

		public static function backup(){
			return self::$database->export();
		}

		private static function initDatabase(){
			self::$database = new Database("main");
			return self::$database;
		}
		public static function lastInsertId(){
			return self::$database->lastInsertId();
		}

		public static function getBindValue($bind, $column){

			if(preg_match('![^a-z0-9_A-Z]!i', $column)){
				echo "Bad character in column " . $column;
				exit;
			}
			$bindValue = $column . (mt_rand(1, 10000));
			if(isset($bind[$bindValue])){
				return self::setBindValue($bind, $column);
			}
			return $bindValue;
		}

		public static function buildSQL($parameters = null){
			if(empty($parameters["type"])){
				echo "You need to specify where in API.php on line 16.";
				exit;
			}
			if(empty($parameters[$parameters["type"]])){
				echo "You need to add values to buildSQL";
				exit;
			}

			$sql = null;
			$bind = [];

			if($parameters["type"] == "where"){

				foreach($parameters["where"] as $type => $where){
					foreach($where as $column => $value){

						$type = explode(" ", $column);
						$type = array_pop($type);

						$column = str_replace(" ".$type, "", $column);
						$function = null;

						if(mb_strpos($column, "(")){
							$func = preg_replace("/\(.*\)/", "", $column);
							if(in_array($func, self::$functions)){
								$function = $func;
								$column = str_replace($function, "", $column);
								$column = str_replace("(", "", $column);
								$column = str_replace(")", "", $column);
							}
						} else {

						}
						$bindValue = self::getBindvalue($bind, $column);

						if($type == "=="){
							$operator = "=";
						}
						if($type == ">=" || $type == "<=" || $type == ">" || $type == "<" || $type == "!=" || $type == "LIKE" || $type == "NOTLIKE"){
							$operator = $type;

							if($operator == "LIKE" || $type == "NOTLIKE"){
								$value = "%" . $value . "%";
							}
							if($operator == "NOTLIKE"){
								$operator = "NOT LIKE";
							}
						}
						if(empty($function)){
							$column = "`".$column."`";
						} else {
							$column = $function . "(".$column.")";
						}
						$sql .= "AND ".$column." ".$operator." :".$bindValue . " ";
						$bind[$bindValue] = $value;

					}
				}

				/* Remove first AND */
				$sql = implode("", explode("AND ", $sql, 2));

				return ["sql" => $sql, "bind" => $bind];

			}
			if($parameters["type"] == "values"){
				$columns = "";
				$binding = "";
				foreach($parameters["values"] as $column => $value){

					$bindValue = self::getBindvalue($bind, $column);

					$columns .= ", `".$column."`";
					$binding .= ", :".$bindValue;
					$bind[$bindValue] = $value;

				}
				$columns = implode("", explode(", ", $columns, 2));
				$binding = implode("", explode(", ", $binding, 2));
				return ["sql" => "(".$columns.") VALUES (".$binding.")", "bind" => $bind];
			}
			if($parameters["type"] == "set"){
				$columns = "";
				$binding = "";
				foreach($parameters["set"] as $column => $value){

					$bindValue = self::getBindvalue($bind, $column);

					$columns .= ", `".$column."` = :".$bindValue;
					$bind[$bindValue] = $value;

				}
				$columns = implode("", explode(", ", $columns, 2));
				return ["sql" => " SET ".$columns, "bind" => $bind];
			}
		}

		public static function get($parameters = []){
			if(empty(self::$database)){
				self::$database = self::initDatabase();
			}
			$database = self::$database;

			$id = null;
			$limit = null;
			$select = "*";
			$order = null;

			if(!empty($parameters["module"])){
				$parameters["table"] = "o." .$parameters["module"];
				$parameters["module"] = $parameters["module"];
			}

			if(!empty($parameters["limit"])){
				if(!is_array($parameters["limit"]) && is_numeric($parameters["limit"])){
					$limit = " LIMIT " . $parameters["limit"];
				} else if(
					is_array($parameters["limit"]) &&
					isset($parameters["limit"][0]) &&
					isset($parameters["limit"][1]) &&
					is_numeric($parameters["limit"][0]) &&
					is_numeric($parameters["limit"][1])
				){
					$limit = " LIMIT " . $parameters["limit"][0] . ", " .$parameters["limit"][1];
				}
			}

			if(!empty($parameters["id"])){
				$limit = "`id` = :id";
			}

			if(!empty($parameters["order"])){
				if(is_array($parameters["order"])){
					array_walk($parameters["order"], function (&$item){
						if(preg_match('![^a-z0-9_A-Z]!i', $item)){
							echo "Bad character in item " . $item;
							exit;
						}
						$item = "`".$item."`";
					});
					$order = " ORDER BY " . implode(", ", $parameters["order"]);
				} else {
					if(preg_match('![^a-z0-9_A-Z]!i', $parameters["order"])){
						echo "Bad character in order";
						exit;
					}
					$order = " ORDER BY `".$parameters["order"]."`";
				}
				if(!empty($parameters["desc"]) && $parameters["desc"]){
					$order .= " DESC";
				}
			}

			if(!empty($parameters["select"])){
				if(is_array($parameters["select"])){
					array_walk($parameters["select"], function (&$item) {
						$item = "`".$item."`";
					});
					$select = implode(", ", $parameters["select"]);
				} else if($parameters["select"] == "COUNT(*)"){
					$select = "COUNT(*)";
				} else if(!preg_match('![^a-z0-9_A-Z]!i', $parameters["select"])){
					$select = "`".$parameters["select"]."`";
				}
			}

			/*  -------------------
					GET MODULES
				-------------------  */
			if(!empty($parameters["table"]) && $database->table_exists($parameters["table"])){

				$where = ["sql" => null, "bind" => []];

				if(!empty($parameters["where"])){
					$where = self::buildSQL(["type" => "where", "where" => $parameters["where"]]);
					$where["sql"] = "WHERE " . $where["sql"];
				}

				if(!empty($parameters["configure"]) && $parameters["configure"]){
					if(empty($parameters["ignorePublish"]) || !$parameters["ignorePublish"]){
						if(!empty($where["sql"])){
							$where["sql"] .= "AND ";
						} else {
							$where["sql"] .= "WHERE ";
						}
						$where["sql"] .= "`publish` < '".time()."' AND `publish` > '0' AND (`unpublish` = '0' OR `unpublish` IS NULL OR `unpublish` > '".time()."')";
					}
				}

				if(!empty($parameters["debugSQL"]) && $parameters["debugSQL"]){
					echo "SELECT ".$select." FROM `".$parameters["table"]."` " . $where["sql"] . $order . $limit;
					return false;
				}
				if(!empty($parameters["debugBind"]) && $parameters["debugBind"]){
					print_r($where["bind"]);
					return false;
				}

				$modules = $database->query([
					"query" => "SELECT ".$select." FROM `".$parameters["table"]."` " . $where["sql"] . $order . $limit,
					"bind" => $where["bind"]
				])->fetchAll(PDO::FETCH_ASSOC);

				if(!empty($parameters["select"]) && $parameters["select"] == "COUNT(*)"){
					return array_values(array_pop($modules))[0];
				}

				if(!empty($parameters["limit"]) && $parameters["limit"] == 1){
					if(!isset($modules[0])){
						return [];
					}
					if(!empty($parameters["select"]) && is_string($parameters["select"])){
						return $modules[0][$parameters["select"]];
					}
					return $modules[0];
				} else {
					return $modules;
				}

			}

		}

		public static function update($parameters = []){

			if(empty(self::$database)){
				self::$database = self::initDatabase();
			}
			$database = self::$database;

			if(!empty($parameters["module"])){
				$parameters["table"] = "o." .$parameters["module"];
				$parameters["module"] = $parameters["module"];
			}

			/*  -------------------
					CREATE MODULEDATA
				-------------------  */
			if(!empty($parameters["table"]) && $database->table_exists($parameters["table"])){

				$update = self::buildSQL([
					"type" => "set",
					"set" => $parameters["set"]
				]);

				$where = ["sql" => null, "bind" => []];

				if(!empty($parameters["where"])){
					$where = self::buildSQL(["type" => "where", "where" => $parameters["where"]]);
					$where["sql"] = "WHERE " . $where["sql"];
				}

				foreach($where["bind"] as $id => $col){
					$update["bind"][$id] = $col;
				}

				if(!empty($parameters["debugSQL"]) && $parameters["debugSQL"]){
					echo "UPDATE `".$parameters["table"]."`" . $update["sql"] . " " . $where["sql"];
					return false;
				}
				if(!empty($parameters["debugBind"]) && $parameters["debugBind"]){
					print_r($update["bind"]);
					return false;
				}

				$modules = $database->query([
					"query" => "UPDATE `".$parameters["table"]."`" . $update["sql"] . " " . $where["sql"],
					"bind" => $update["bind"]
				]);

				if($modules){
					return true;
				} else {
					return false;
				}

			}

		}

		public static function insert($parameters = []){

			if(empty(self::$database)){
				self::$database = self::initDatabase();
			}
			$database = self::$database;

			if(!empty($parameters["module"])){
				$parameters["table"] = "o." .$parameters["module"];
				$parameters["module"] = $parameters["module"];
			}

			/*  -------------------
					CREATE MODULEDATA
				-------------------  */
			if(!empty($parameters["table"]) && $database->table_exists($parameters["table"])){

				$where = self::buildSQL([
					"type" => "values",
					"values" => $parameters["set"]
				]);

				if(!empty($parameters["debugSQL"]) && $parameters["debugSQL"]){
					echo "INSERT INTO `".$parameters["table"]."`" . $where["sql"];
					return false;
				}
				if(!empty($parameters["debugBind"]) && $parameters["debugBind"]){
					print_r($where["set"]);
					return false;
				}

				$modules = $database->query([
					"query" => "INSERT INTO `".$parameters["table"]."`" . $where["sql"],
					"bind" => $where["bind"]
				]);

				return self::$database->lastInsertId();

				if($modules){
					return true;
				} else {
					return false;
				}

			}

		}

		public static function delete($parameters = []){

			if(empty(self::$database)){
				return false;
			}
			$database = self::$database;

			if(!empty($parameters["module"])){
				$parameters["table"] = "o." .$parameters["module"];
				$parameters["module"] = $parameters["module"];
			}

			/*  -------------------
					CREATE MODULEDATA
				-------------------  */
			if(!empty($parameters["table"]) && $database->table_exists($parameters["table"])){

				$where = ["sql" => null, "bind" => []];

				if(!empty($parameters["where"])){
					$where = self::buildSQL(["type" => "where", "where" => $parameters["where"]]);
					$where["sql"] = "WHERE " . $where["sql"];
				}

				$modules = $database->query([
					"query" => "DELETE FROM `".$parameters["table"]."` " . $where["sql"],
					"bind" => $where["bind"]
				]);

				if($modules){
					return true;
				} else {
					return false;
				}

			}

		}

	}

?>


You'd really like to know what it feels like when someone truly loves you. Maybe this is because you're young or because you haven't met the right person, the truth is that deep down you're not sure if what you've experienced was true love.
It seems like your heart, generally tends to give way to your mind, and it sees how possible alternatives to enjoy love are escaping its clutches and it doesn't want this situation to be postponed much longer.
Unfortunately, love's arrival can't be predicted exactly, as it tends to arrive just when we least expect it. Make sure that you know what you really want and be patient for the time being.
If you've had to spend more than you expected, you'll feel deceived even if it isn't your fault. You like to have everything under control and when unexpected things come before you predict them, they put you to the test and lead you to feel extremely frustrated.
In your face to face meeting with your bank statement, you'll feel as if they've won by a landslide. This defeatist attitude won't get you anywhere, Capricorn. In the end, there are things that are out of our hands and we should take them as opportunities to put our abilities to the test.
Having the physical appearance that you think that you deserve means investing in it, whether this means time or money. One of the things that does the most wonders for our physical state is happiness, or at least, being comfortable with the life that we have.
When you smile you're capable of transmitting unimaginable strength, however, it will seem harder each time if you're conscious of this. If you stop to think about it, being in a good mood is another good way to transmit this strength that you carry within and to share this with others.
If the people around you see that you're motivated, it will be easier for them to count on you for certain things.


Melton Premier have this 2 bed semi up for sale for £ 145,000 it is on a popular estate and has off road parking. It looks to be in a good condition so would let straight away.
I would expect it to let for £575 pcm which would give a potential return of 4.7% if purchased for the asking price. This type of property would see a good level of capital growth over the years as the footprint is much larger than a modern property.
We are seeing such high demand for rented property in Melton Mowbray and it seems to be mirrored across the UK. After talking to fellow franchise owners it seems all parts of the country are seeing unprecedented demand for rental homes.
It got me thinking about the numbers. Looking at the figures from the Office for National Statistics (ONS) relating to families and household numbers in the UK, it showed some interesting results.
The total number of families in the UK is just under 19 million, of that 12 ½ million are married couples.
If you compare the figures from 1996 to those for 2015 - Numbers of married couples with children has decreased by 10% since 1996 but the numbers of married couples without children has increased by 4.6% over the same time period.
Interestingly the numbers of co-habiting couples with children is currently just over 3 million, and this number has increased by 130 % since 1996. The number of co-habiting couples without children has increased by 105%.
The number of lone parent families is currently sitting around the 3 million mark and has seen a 23% increase in numbers since 1996.
The growth in the numbers of families is mainly in the co-habiting couples – in my opinion are the most likely to be renting; typically early on in a relationship and not in a position to secure a mortgage. The number of lone parent families has also seen an increase. Rental properties can provide accessible housing for those going through a change in circumstances and there needs to be good quality rental property available.
We are seeing the low levels of house building across England, in the year to June 2016 there were just under 140,000 finished new build houses. The ONS state if the number of households in England grows to 24.3 million in 2021 as projected, this would be equivalent to an additional 221,000 households per year. We really need to see some more house building or we the current housing market crisis will continue.
In my opinion it illustrates the national problem we are seeing with the housing market and the struggle families are going to have until something changes. The only way to relieve the pressure on the existing rental market stock is to build more houses. Until we do rents will keep on increasing and there will be big competition for each new listing.
If you are considering investing in rental property in the Melton Mowbray please follow my property blog for honest advice on potential rental returns.
This 3 bed semi has just been added by Bentons for £157,500. With the shortage of new builds, that are not executive and well out of an investors budget, this type of property could be a great investment.
It is a 3 bed semi and would easily let for £600 pcm and if purchased at the asking price then you would be looking at an easy 4.5% return.
6.4% return on £75,000 investment..
I am not always keen to recommend going out of town but this currently yields 6.4% return if you don't take into account the ground rent. Its a one bed flat on the market for £75,000 with Newton Fallowell and has a tenant paying £400 pcm.
That is the amount I would have suggested as an expected rent and depending on the outlook of the flat these can prove popular with tenants.
This property on Park Road in Melton Mowbray has been on the market for sale for a while now and has just been reduced to offers over £65,000. This is a one bed flat which is in good condition.
The recent report from the institute of fiscal studies prompted some interesting headlines around the wealth and income of 30 year olds today vs 30 year olds 10 years ago - just before the recession kicked in.
The study showed by the age of 30 The property wealth of those born in the 1970's is nearly double that of the property wealth of people born in the early 80's when they turn 30.
As for incomes - the figures show that those born in the early 80's do not have higher incomes than their predecessors did at the same age. This partly reflects the the impact of the recession on the incomes of working age households, but it is also the result of a period of sluggish income growth from the early 2000's onwards and the weakness of the recovery in incomes since the recession. Among those aged between 25 and 55 the real average income in 2014-15 was only 2% higher than a decade earlier, compared with an increase of 26% between 1994-95 and 2004-05.
Looking at Melton Mowbray Sold house prices so far this year - using the data on Rightmove and Land registry - Modern 2 bed semis are selling for £140,000 and 3 bed semi's built around the 60's (bigger plots and floor plans generally than a modern home) are going for over £160,000.
With house prices rising (in my opinion this has a lot to do with the lack of supply) and incomes not keeping up its easy to see why so many people are renting for longer. This fuels the rent rises as there are fewer properties available to let and makes it harder for people to save. It seems to be a continual cycle which can only be broken in my opinion by the building of more houses. Let's hope 2017 brings a more optimistic housing market for the young people of Melton Mowbray.
If you are considering purchasing a property to let please do not hesitate to give me a call for honest opinion on rental returns in and around Melton Mowbray.
This is a beautifully presented property that has just come onto the market at offers over £130,000 with Harrison Murray. Its on Algernon road and has a slightly different layout to the normal terraces that I think makes the most of the space.
It would let for £595 pcm and looks like it will need nothing doing to it so could give a potential yield of 5.4%.


Lead an active and happy life with ModPod Podiatry Do you lead..
Sydney Heel Pain provides expert podiatrists in Sydney. Clinic is..
Gladstone Podiatrists can help you with all lower limb complaints..
Showing "4" results for your search "Podiatry"
View more results for "Podiatry"


'Sinatra: The Centenary Celebration' salutes the defining voice of the 20th century.
For one night only, Sinatra's music will be brought to life through the outstanding talent of Rick Michel direct from Vegas, whose performance was praised by Frank Sinatra himself. It is Rick's voice you hear on the show's promo video.
Woven together by a moving narrative, the concert paints a portrait of Sinatra that provides audiences an intimate glimpse of the life he lived...his way.
Supported by Australian jazz sensation, Liam Burrows and NZ's premier Big Band, the Auckland Jazz Orchestra with a 12 piece string section.
Take a trip down memory lane, from the songs that had the bobby soxers screaming adulation, through to the poignant raw performances of his final years.
Bear witness to Frank Sinatra's indelible musical legacy and be part of 100 years of history.
"To hell with the calendar," a music critic wrote before his death in 1998, "The day Frank Sinatra dies, the twentieth century is over."


text:
/** A type for command arguments */
class ArgumentType {
	/**
	 * @param {CommandoClient} client - The client the argument type is for
	 * @param {string} id - The argument type ID (this is what you specify in {@link CommandArgumentInfo#type})
	 */
	constructor(client, id) {
		if(!client) throw new Error('A client must be specified.');
		if(typeof id !== 'string') throw new Error('Argument type ID must be a string.');
		if(id !== id.toLowerCase()) throw new Error('Argument type ID must be lowercase.');

		/**
		 * Client that this argument type is for
		 * @name ArgumentType#client
		 * @type {CommandoClient}
		 * @readonly
		 */
		Object.defineProperty(this, 'client', { value: client });

		/**
		 * ID of this argument type (this is what you specify in {@link CommandArgumentInfo#type})
		 * @type {string}
		 */
		this.id = id;
	}

	// eslint-disable-next-line valid-jsdoc
	/**
	 * Validates a value against the type
	 * @param {string} value - Value to validate
	 * @param {CommandMessage} msg - Message the value was obtained from
	 * @param {CommandArgument} arg - Argument the value obtained from
	 * @return {boolean|string|Promise<boolean|string>} Whether the value is valid, or an error message
	 * @abstract
	 */
	validate(value, msg, arg) { // eslint-disable-line no-unused-vars
		throw new Error(`${this.constructor.name} doesn't have a validate() method.`);
	}

	// eslint-disable-next-line valid-jsdoc
	/**
	 * Parses the raw value into a usable value
	 * @param {string} value - Value to parse
	 * @param {CommandMessage} msg - Message the value was obtained from
	 * @param {CommandArgument} arg - Argument the value obtained from
	 * @return {*|Promise<*>} Usable value
	 * @abstract
	 */
	parse(value, msg, arg) { // eslint-disable-line no-unused-vars
		throw new Error(`${this.constructor.name} doesn't have a parse() method.`);
	}
}

module.exports = ArgumentType;

redpajama_set_name: RedPajamaGithub


text:
Luis María Linde de Castro (born May 15, 1945 in Madrid) is a Spanish economist and civil servant who has served as governor of the Spanish Central Bank from 2012 until 2018.

Early life and education
Linde graduated with a degree in economic sciences from the Universidad Complutense de Madrid with top marks.

Career
Linde was the trade attaché at the Spanish embassy in the Soviet Union and worked for the Ministry of Economy. In 1983 he was appointed to the Banco de España. Between 2005 and 2008 he was executive for Spain in the Inter-American Development Bank.

On May 25, 2012 Linde succeeded Vicente Salas as a member of the governing council of the Banco de España. A few days later Miguel Ángel Fernández Ordóñez resigned as chairman of the bank and Linde was appointed. Another candidate for the post, who was favoured by the European Central Bank (ECB) and financial markets, was José Manuel González Paramo, a former member of the Executive Board of the ECB. Under the bank's statutes Linde will have to retire in three years when he turns 70, and will not therefore be able to complete a six-year term.

Under Linde, who was named only two days before Spain requested a European bailout, the central bank came under fire for its handling of the banking crisis and maintained a neutral stance on economic policy.

Other activities

International organizations
 International Monetary Fund (IMF), Ex-Officio Alternate Member of the Board of Governors (2012-2018)

Non-profit organizations
 Fundación pro Real Academia Española, Chairman
 Official Credit Institute (ICO), Member of the Board of Directors
 Princess of Asturias Foundation, Member of the Board of Trustees

Corporate boards
 Compañía Española de Crédito a la Exportación (CESCE), Adviser to the Board of Directors (2009-2011)

References

Spanish economists
Governors of the Bank of Spain
1945 births
Living people
Complutense University of Madrid alumni

redpajama_set_name: RedPajamaWikipedia


Sagence's reference data project management services helped an investment banker meet aggressive regulatory requirements by resolving regulatory operational gaps.
The executive leadership of a global investment banker tasked with meeting regulatory requirements, needed to improve operational and reporting practices to improve efficiency, controls, quality, and eliminate any manual tasks. The leadership was committed to resolving regulatory operational gaps and to improving efficiency opportunities. They called Sagence for our reference data project management expertise in the investment banking industry.
Our experienced reference data project managers served as business analysts across 20+ programs. The projects ranged from client onboarding, corporate actions, Avox integration, client delegated reporting, portfolio reconciliation, delinquent trade reporting, client master maintenance, and reference data replication processes. For each project, we provided business requirements, process re-engineering, and data-driven analysis to close regulatory gaps for reference data quality, vendor data quality, controls, automation, vendor integration, and reporting (e.g. FATCA, EMIR, CFTC, ISDA, Dodd-Frank). In addition to these business-specific activities, we also performed expected project management tasks including coordinating across global teams, communicating statuses to executive sponsors, escalating risks and issues in a timely manner, and managing expectations and deadlines.
Our client was able to avoid regulatory, reputational, and operational risks via the enhanced processes Sagence designed. We helped our client eliminate manual steps in reference data operations and implemented additional workflow automation and business decision rules. Our client improved reference data operational efficiency via reference data quality, accuracy, consistency, maintenance, controls, governance, and reporting/transparency.
To learn more about Sagence's financial services practice, click here. Or schedule a talk with our lead Financial Services partner, Larry Kolek.


text:
E-Cig Use Has Sharply Increased Among Young People
Arctic Sub Ohm Atomizer, by Horizon Tech April 21, 2015
It's the last day of our Big Sale! April 21, 2015
By May Wilkerson 04/20/15
Teens have moved away from traditional cigarettes to vaping in droves.
While traditional smoking is going out of style among U.S. high school students, e-cigarettes use is rapidly rising.
According to federal data released last week, use of the electronic devices among middle and high school students tripled from 2013 to 2014, while use of regular tobacco decreased. At 13% of this population, more teens are now using e-cigs than traditional cigarettes.
According to the report, about a quarter of all high school students and 8% of middle schoolers used tobacco in some form last year, contributing to an overall rise in young people using any form of tobacco product in 2014. This is the first increase in years.
But the report also found that tobacco smoking among high schoolers had declined significantly, from 16% in 2011 to 9% in 2014, suggesting that some teen smokers may be using e-cigs to quit.
Policymakers remain uncertain how to regulate e-cigarettes. Scientists do agree that the devices, which deliver nicotine without the added tar and other harmful chemicals, are likely less dangerous than tobacco cigarettes, which kill an estimated 480,000 Americans a year.
But experts are concerned about the growing popularity of e-cigs among teens, since their potential long-term health effects are still unknown. In interviews, teens said that in the last year or so "vaping," the term for smoking an e-cig, had become almost as common at school as laptops. A 15-year-old sophomore at a school in Westchester, N.Y., estimated that 70% of his friends now vape, calling it "the healthy alternative taking over my school."
Many students said they were using the devices to quit smoking cigarettes or marijuana, while others said they just enjoy the taste. E-cigs are increasingly marketed to teens, with flavors like "Unicorn Puke" and "Hawk Sauce," and some brands are endorsed by popular rappers and other celebrities.
Selling e-cigs to minors is illegal in most states and the Food and Drug Administration proposed last year to make it a national ban. But many vape shops have relaxed policies, and teens can easily purchase the devices online simply by clicking "yes" to verify they are over 18.
Last year, the Centers for Disease Control and Prevention noted a rise in e-cig use by young people, prompting anti-tobacco advocates to warn that the devices would "normalize" smoking and contribute to a resurgence in tobacco use by getting young people hooked on nicotine.
"This is a really bad thing," said CDC director Dr. Thomas R. Frieden. "This is another generation being hooked by the tobacco industry. It makes me angry."
But the more recent numbers show that tobacco smoking among teenagers is declining faster than it has in years, dropping by 25% between 2013 and 2014. The pattern seems to suggest that the devices may not be a "gateway" to cigarettes, as anti-tobacco advocates predicted, and may instead be helping reduce youth smoking.
"They're not a gateway in, and they might be accelerating the gateway out," said David B. Abrams, director of the Schroeder Institute for Tobacco Research and Policy Studies.
Many teenagers agree, describing vaping as "an entirely different culture" from cigarette smoking. "E-cigarettes appeal less towards the stereotypical longhaired stoners, and more towards sweatshirt-blue-jeans Silicon Valley programmer," said Kenny, a high school senior from Florida. "You can compare them to Apple computers."
alternative to smoking
teen smoking
How to Argue FOR Vaping
Portablevaporizerguide.Com Impresses the Vaping Buffs
Vaping as a 'Gateway' to Smoking Is Still More Hype Than Hazard
September 27, 2015 July 9, 2018

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Get time difference (in Milliseconds accuracy) from remote server API Let's say from current server at timestamp 1600000000.123 (123 is milliseconds part) we do initialize ping to external server's API server-time endpoint, which says that server-time at that moment (when request reached there) was 1600000000.555.
However, of course there was latency before request reached the server and moreover, when the response was obtained by our request. When server responded .555, maybe exactly at that moment (parallelly) on our server exactly was already 1600000000.602 or whatever any different time).
So, how to determine, what time was on the originator server, when the remote API responded that answer .555. Should we check headers or which approach should we use, to find out the milliseconds difference at best possible accuracy.
(p.s. language doesn't matter much -be it php or node-js)

A: You're using the internet here, a network of connected IP networks, to communicate from your client to the server and back again. As you know, IP networks aren't deterministic in their timing. So there are many unknowns.
A good way to do what you ask is to assume two things.

*

*the first time your client hits the remote API there'll be some connection setup time. For example, it takes some time to set up https connections.

*after the first hit to the API, it takes about the same amount of time for your request to arrive at the network and the response to arrive back.
Given those assumptions, you can try this.

*

*hit the API twice and ignore the results (to make sure the connection is set up).

*make a note of the local time. local_start_time

*hit the API again.

*when you get the response, make a note of the local time again.  local_end_time.

*assume that the server responded halfway between your start_time and end_time.
actual_server_time = reported_server_time
                      + (local_end_time - local_start_time) * 0.5

This is close to the best you can do.
Another tip: If the server time (in UTC) is not within a few seconds of your client time, issue a warning message. If you trust your server's administrators, warn your user that their local machine is not synchronized using the Network Time Protocol.  Almost all internet-connected operating systems handle this time synchronization automatically these days.
If you don't trust your server's administrators, your warning will necessarily be a bit more vague.
A lot of authorization / authentication tech (Javascript Web Tokens, SAML, Google Authenticator style TOTP codes, and on and on) relies on time synchronization.
(I once had a customer try to integrate with a SAML authentication protocol from a non-synchronized machine set to some random time of day. My SAML implementation correctly rejected the incoming auth tokens because they were from several minutes in the future. So I added the warning message. It asked my customers to use their OS Date & Time settings screen to sync up. The problem hasn't recurred since.)

redpajama_set_name: RedPajamaStackExchange


text:
Physical Education and Coaching (1)
Psychology and Behavior in Sport/Exercise (2)
Sport and Exercise Science/Kinesiology (3)
https://journals.humankinetics.com/search?f_0=author&q_0=Dirk+B%C3%BCsch
Author: Dirk Büsch x
Do Older Adults With Reduced Bone Mineral Density Benefit From Strength Training? A Critically Appraised Topic
Maja Zamoscinska, Irene R. Faber, and Dirk Büsch
Clinical Scenario: Reduced bone mineral density (BMD) is a serious condition in older adults. The mild form, osteopenia, is often a precursor of osteoporosis. Osteoporosis is a pathological condition and a global health problem as it is one of the most common diseases in developed countries. Finding solutions for prevention and therapy should be prioritized. Therefore, the critically appraised topic focuses on strength training as a treatment to counteract a further decline in BMD in older adults. Clinical Question: Is strength training beneficial in increasing BMD in older people with osteopenia or osteoporosis? Summary of Key Findings: Four of the 5 reviewed studies with the highest evidence showed a significant increase in lumbar spine BMD after strength training interventions in comparison with control groups. The fifth study confirmed the maintenance of lumbar spine density due to conducted exercises. Moreover, 3 reviewed studies revealed increasing BMD at the femoral neck after strength training when compared with controls, which appeared significant in 2 of them. Clinical Bottom Line: The findings indicate that strength training has a significant positive influence on BMD in older women (ie, postmenopausal) with osteoporosis or osteopenia. However, it is not recommended to only rely on strength training as the increase of BMD may not appear fast enough to reach the minimal desired values. A combination of strength training and supplements/medication seems most adequate. Generalization of the findings to older men with reduced BMD should be done with caution due to the lack of studies. Strength of Recommendation: There is grade B of recommendation to support the validity of strength training for older women in postmenopausal phase with reduced BMD.
In Journal of Sport Rehabilitation Volume 29 (2020): Issue 6 (Aug 2020)
Influence of Red Jersey Color on Physical Parameters in Combat Sports
Dennis Dreiskaemper, Bernd Strauss, Norbert Hagemann, and Dirk Büsch
Hill and Barton (2005) showed that fighters in tae kwon do, boxing, and wrestling who wore red jerseys during the 2004 Olympic Games won more often than those wearing blue jerseys. Regarding these results, this study investigated the effects of jersey color during a combat situation on fighters' physical parameters of strength and heart rate. An artificial, experimental combat situation was created in which the color of sport attire was assigned randomly. Fourteen pairs of male athletes matched for weight, height, and age had to fight each other: once in a red jersey and once in a blue. Heart rate (before, during, and after the fight) and strength (before the fight) were tested wearing the blue and the red jerseys. Participants wearing red jerseys had significantly higher heart rates and significantly higher pre-contest values on the strength test. Results showed that participants' body functions are influenced by wearing red equipment.
In Journal of Sport and Exercise Psychology Volume 35 (2013): Issue 1 (Jan 2013)
Effects of Drop Height on Jump Performance in Male and Female Elite Adolescent Handball Players
Olaf Prieske, Helmi Chaabene, Christian Puta, David G. Behm, Dirk Büsch, and Urs Granacher
Purpose: To examine the effects of drop height on drop-jump (DJ) performance and on associations between DJ and horizontal-jump/sprint performances in adolescent athletes. Methods: Male (n = 119, 2.5 [0.6] y post-peak-height velocity) and female (n = 120, 2.5 [0.5] y post-peak-height velocity) adolescent handball players (national level) performed DJs in randomized order using 3 drop heights (20, 35, and 50 cm). DJ performance (jump height, reactive strength index [RSI]) was analyzed using the Optojump Next system. In addition, correlations were computed between DJ height and RSI with standing-long-jump and 20-m linear-sprint performances. Results: Statistical analyses revealed medium-size main effects of drop height for DJ height and RSI (P < .001, 0.63 ≤ d ≤ 0.71). Post hoc tests indicated larger DJ heights from 20 to 35 and 35 to 50 cm (P ≤ .031, 0.33 ≤ d ≤ 0.71) and better RSI from 20- to 35-cm drop height (P < .001, d = 0.77). No significant difference was found for RSI between 35- and 50-cm drop height. Irrespective of drop height, associations of DJ height and RSI were small with 5-m-split time (−.27 ≤ r ≤ .05), medium with 10-m-split time (−.44 ≤ r ≤ .14), and medium to large with 20-m sprint time and standing-long-jump distance (−.57 ≤ r ≤ .22). Conclusions: The present findings indicate that, irrespective of sex, 35-cm drop heights are best suited to induce rapid and powerful DJ performance (ie, RSI) during reactive strength training in elite adolescent handball players. Moreover, training-related gains in DJ performance may at least partly translate to gains in horizontal jump and longer sprint distances (ie, ≥20-m) and/or vice versa in male and female elite adolescent athletes, irrespective of drop height.
In International Journal of Sports Physiology and Performance Volume 14 (2019): Issue 5 (May 2019)
How Healthy is a Desire to be Fit and Strong? Drives for Thinness, Leanness, and Muscularity in Women in Weight Training
Andrea S. Hartmann, Florian Steenbergen, Silja Vocks, Dirk Büsch, and Manuel Waldorf
Fitness training to attain the lean body ideal is becoming increasingly popular among women. However, it remains unclear how the drive for leanness (DL), as compared to the drives for thinness (DT) and muscularity (DM), relates to body image pathology and substance use in female weight-trainers. Participants (N = 168) completed a survey assessing DL, DT, DM, eating and body dysmorphic disorder pathology, and substance use. DT and DM were related to eating disorder and body dysmorphic disorder symptoms (all r ≥ .29; all ps < .01), while DL only to the former (r = .19, p < .05). Supplement use was associated with DL and DM (r = .17 and .55; both p < .01) and pharmaceutical use with DT and DM (r ≥ .21; both p < .01). Female weight-trainers should not be neglected in body image disorder prevention, with a particular focus on DT and DM.
In Journal of Clinical Sport Psychology Volume 12 (2018): Issue 4 (Dec 2018)


text:
Home Living Above & Beyond Paddlers join for 20th anniversary event
Paddlers join for 20th anniversary event
ABOVE&BEYOND
Team 1, Yukon Wide Adventures, men's voyageur team were overall fastest team again in 2018, clocking in at 44 hrs 21 min 53 sec. Thoman de Jager (team captain), Gus Oliveira, Stephen Mooney, Spencer Edelman, Kendall McDonald and Brandon Johnston. © Harry Kern
A world class wilderness event, the Yukon River Quest (YRQ) celebrated its 20th anniversary this year with a record number of teams entering the race, which began June 27 in Whitehorse, Yukon. Fifteen countries were represented: Australia, Belgium, Canada (nine provinces/ territories), Estonia, France, Germany, Japan, Latvia, the Netherlands, New Zealand, Poland, Russia, South Africa, United Kingdom, and the United States (17 states).
Except for two mandatory rest stops totaling 10 hours, adventure and marathon paddlers race non-stop over the 715 kilometres (444 miles) to Dawson City. Held annually in the North during the last week of June (around the summer solstice), it is a true "Race to the Midnight Sun" where many of the world's best paddlers gather.
A record 103 teams started the race and 76 teams finished. Teams were beset with several challenges this year: another low river year, especially in the first 350 kilometres; head winds on the first half of Lake Laberge; and thunderstorms with lightning in spots from Coffee Creek to Dawson City, including powerful head winds that forced the leaders to shore at one point. As a result, most winning times in various classes were slower this year.
Yukon Wide Adventures, a men's voyageur team with paddlers from the Yukon, NWT and British Columbia, repeated last year's win as overall champions (with a few new paddlers switched in) this year in a time of 44 hours, 21 minutes, 53 seconds, beating the VC team Paddlesports Mongrels from the United Kingdom by about 23 minutes. A new record was set in Mixed Tandem Kayak by Team 28 The Kiwis, paddled by Ian Huntsman and Wendy Riach of Christchurch, New Zealand. They finished third overall and their time of 44:57:56 beat the 2005 K2 mixed record of 45:22:09 by Brandon and Heather Nelson of Bellingham, Washington.
Winners received a hand-made canoe pendant from Gold Trail Jewellers of Dawson City, and teams that finished under 55 hours received prize money as well.
The YRQ dominated the Canada Day parade with more than 300 paddlers, support crew members and volunteers marching behind a 20th Anniversary banner that thanked the community of Dawson City. This was the culmination of a week of events organized by the 20th Anniversary Committee that began with a grand Meet & Greet at the SS Klondike in Whitehorse, moved on to a Volunteer Party at Carmacks before racers arrived, and concluded with a huge Race Gallery Tent and the parade in Dawson. Thanks to Yukon Government Community Development Fund for helping to make this celebration happen!
At this year's Awards Banquet, the YRQ introduced the "Great River Club" of 5,000- and 10,000-kilometre paddlers, led by Larry Seethaler of Anchorage, Alaska, and Ingrid Wilcox of Whitehorse, Yukon.
The 21st annual Yukon River Quest will be held June 26 to June 30, 2019. Registration opens November 1, 2018. Register early. Rules and more information will be posted in October on the website.
Link to the 2018 Race Tracker at www.yukonriverquest.com for complete results.
Share your YRQ stories! The Yukon River Quest is still collecting stories for possible inclusion in a 20th anniversary book. E-mail them to info@yukonriverquest.com. All stories will be posted on the website as well.
sept-oct-18
Previous articleICC Canada names new officers
Next articleInuit Games & String Games
Celebrating NWT's best in tourism
Showcasing Nunavut's Musical Talent
Hunters share knowledge with new mobile app
© 2020 above&beyond – Canada's Arctic Journal


The Bay Bridge Traditional Rolled Back Loveseat by Flexsteel at Jordan's Home Furnishings in the New Minas, Halifax, and Canning, Nova Scotia area. Product availability may vary. Contact us for the most current availability on this product.


text:
Disneyland Resort A Fact Sheet for 2020
February 24, 2020 April 8, 2020 Administrator 14 Views 0 Comments Disneyland, News
From the Walt Disney World News and written by: cortney
When Walt Disney opened Disneyland, the original Disney theme park, on July 17, 1955, he said he hoped it would be "a source of joy and inspiration to all the world." He famously observed: "Disneyland will never be completed…as long as there is imagination left in the world."
Since 1955, the Disneyland Resort has welcomed more than 750 million guests. It has expanded to become an approximately 500-acre, world-class, multi-day, family vacation destination, complete with two renowned Disney theme parks, three hotels and the exciting shopping, dining and entertainment district known as the Downtown Disney District.
The parks of the Disneyland Resort continue to offer guests more classic characters, more storytelling, more attractions and more of the unique Disney heritage that gives Disney theme parks their special personality.
Disneyland Park – Upon its opening on July 17, 1955, Disneyland introduced a new concept in family entertainment and launched the theme park industry. Disneyland presented 18 major attractions on its opening day including the Mad Tea Party, the Jungle Cruise, Autopia and the Mark Twain Riverboat, and it featured five themed lands: Fantasyland, Adventureland, Tomorrowland, Frontierland and Main Street, U.S.A. Today, Disneyland is an evolving American institution, covering nearly 100 acres and featuring more than 60 adventures and attractions in nine themed lands, having added New Orleans Square in 1966, Critter Country (originally Bear County) in 1972, Mickey's Toontown in 1993 and Star Wars: Galaxy's Edge in 2019.
Favorite Disneyland attractions include Pirates of the Caribbean, Star Tours – The Adventures Continue, "it's a small world," Indiana Jones Adventure and the mountain range of thrill rides: Matterhorn Bobsleds, Space Mountain, Big Thunder Mountain Railroad and Splash Mountain. Entertainment is presented throughout the park, with nighttime spectaculars including seasonal themed fireworks shows and stage shows including "Mickey and the Magical Map."
Disney California Adventure Park – Since its opening in 2001, Disney California Adventure has been bringing adventure and fun to life with Disney storytelling magic and popular attractions including Grizzly River Run and Soarin'. With the addition of Cars Land and Buena Vista Street in 2012, the park features more than 35 adventures and attractions plus distinctive entertainment and dining.
Disney California Adventure has a total of seven lands including the 12-acre Cars Land, Buena Vista Street, Hollywood Land, Grizzly Peak featuring the reimagined Grizzly Peak Airfield and the exciting attraction Soarin' Around the World, Pacific Wharf (all formerly parts of the Golden State area), Paradise Gardens Park and the reimagined Pixar Pier.
Among the attractions in Disney California Adventure are the Incredicoaster in Pixar Pier, where guests join the Incredibles in a mad dash to catch Jack-Jack as he wreaks havoc throughout a high-speed chase; Guardians of the Galaxy – Mission: BREAKOUT!, a rockin' adventure where guests join Rocket in an attempt to save his friends, the Guardians, from the Collector's Fortress; Toy Story Mania!, an interactive, ride-through attraction where guests enter into a 4D carnival midway hosted by the "Toy Story" characters; "World of Color," an award-winning, nighttime water spectacular featuring nearly 1,200 fountains that bring Disney animation to life; and The Little Mermaid ~ Ariel's Undersea Adventure, a "dark ride" that transports guests "under the sea" to experience scenes and beloved songs from "The Little Mermaid" film.
The opening of Cars Land in 2012 added Radiator Springs Racers, a high-octane indoor/outdoor adventure that revs through Radiator Springs and concludes with a high-speed race through the mountains of Ornament Valley, and Mater's Junkyard Jamboree, in which baby tractors swing guests through a Cars Land hoedown. Luigi's Rollickin' Roadsters invites guests to climb aboard miniature Italian roadsters, Luigi's Italian cousins, as they whirl into the traditional dances of their village. Buena Vista Street offers the Red Car Trolley attraction and Carthay Circle Restaurant, one of the premiere dining locations at the Disneyland Resort.
In summer 2018 Pixar Pier opened as a new land in Disney California Adventure, featuring four whimsical neighborhoods where guests can step into beloved Disney and Pixar stories. The first neighborhood, inspired by "The Incredibles," features the exciting new Incredicoaster, and others celebrate themes from Pixar favorites such as "Toy Story" and "Inside Out."
Downtown Disney District –. The Downtown Disney District (no admission fee required) is a walking promenade of exciting dining, shopping and entertainment experiences. The 20-acre, 300,000 square-foot avenue is centrally located between the Disneyland Resort theme parks and hotels and features approximately 50 distinct venues. Atmospheric music and entertainment create a lively backdrop for guests, and the destination features a diverse collection of casual restaurants, favorite snacking stops, shopping boutiques and high-energy entertainment. including Earl of Sandwich, Sprinkles, La Brea Bakery Café, Ralph Brennan's Jazz Kitchen, Tortilla Jo's, Naples Ristorante e Pizzeria, WonderGround Gallery, Splitsville Luxury Lanes, Salt & Straw, Black Tap Craft Burgers & Shakes, Ballast Point Brewing Company, The VOID, The LEGO Store, Curl Surf, Catal Restaurant & Uva Bar, Sephora, Sprinkles, PANDORA Jewelry, The Disney Dress Shop and the World of Disney store.
Disne y's G rand Californian Hotel & Spa –1600 S. Disneyland Drive, (714) 635-2300 Featuring 948 rooms and 50 Disney Vacation Club villas, Disney's Grand Californian Hotel & Spa is the flagship hotel of the Disneyland Resort. The design of this AAA Four-Diamond, award-winning luxury property is inspired by the turn-of-the-century California Craftsman movement. In 2009, the hotel became home to the first Disney Vacation Club units on the West Coast. It's also the first hotel in the United States to be built inside a Disney park (Disney California Adventure).
Disney's Grand Californian Hotel & Spa was refurbished in 2017, bringing new magic to the property. The hotel offers suites, a large convention facility, swimming pools, the new Tenaya Stone Spa (opening 2020) and dining locations: Storytellers café, the award-winning Napa Rose restaurant and GCH Craftsman Bar & Grill. With approximately 35 sommeliers, including several advanced sommeliers, Napa Rose boasts a significant number of certified wine experts under one roof.
Disneyland Hotel – 1150 West Magic Way, (714) 778-6600
Significant new enhancements at the iconic Disneyland Hotel were completed in 2012, including re-imagined guest rooms, Disney-themed suites, a new restaurant and bar – Tangaroa Terrace and Trader Sam's Enchanted Tiki Bar – and a water play area with Monorail-inspired water slides. Other distinctive restaurants at the hotel include Goofy's Kitchen and the award-winning Steakhouse 55. This AAA Four Diamond hotel features 973 rooms, including specially themed Disney character suites, and one of the largest contiguous convention spaces in the Western United States with 136,000 square feet.
Disne y's Paradise Pier Hotel – 1717 S. Disneyland Drive, (714) 999-0990
A casually elegant 481-room hotel themed to the colorful "day at the beach" California seaside culture of fun, Disney's Paradise Pier Hotel features the whimsical Disney's PCH Grill restaurant, a pool deck with cabanas and water slide, and 30,000 square feet of convention and meeting space.
Disneyland Resort Facts & Firsts
Opening Date: July 17, 1955
With more than 32,000 cast members, the Disneyland Resort is the largest single-site employer in Orange
The Matterhorn Bobsleds was the first tubular steel roller coaster in the world when it opened in 1959, and it set the standard for modern-day roller-coaster
Disneyland created the first daily operating monorail in the Western
The nighttime water spectacular "World of Color" uses a submersible platform that's bigger than a football field, with more than 18,000 points of control and revolutionary lighting that infuses nearly 1,200 fountains with color — making it one of the largest show systems ever
More than 3,000 species of plants, native to 40 countries, grow at the Disneyland
The Disneyland Resort is committed to minimizing food waste throughout its operations, avoiding more than 15,000 pounds of organic waste from landfill per day.
The landscape surrounding the Jungle Cruise has evolved into its own ecosystem since the attraction opened in The trees have created a canopy that allows species of ground plants to grow that otherwise wouldn't in Southern California.
Through the years, a virtual "Who's Who" of the 20th and early 21st centuries has visited the Disneyland Resort, including S. presidents (dating to Harry S. Truman), numerous heads of state and countless athletes, artists, authors and celebrities.
The Disneyland Hotel and Disney's Grand Californian Hotel & Spa were the first AAA Four Diamond Hotels in
Disney California Adventure opened in It celebrated the completion of a five-year expansion in June, 2012, with the opening of Cars Land. The park will have seven themed lands in 2020 with the opening of Avengers Campus, a land where the Avengers and their allies assemble to recruit the next generation of Super Heroes.
Star Wars: Galaxy's Edge, which opened in May 2019, is the largest single-themed land expansion in Disney Parks history. It features two immersive attractions, Star Wars: Rise of the Resistance and Millennium Falcon: Smugglers Run.
Buena Vista Street, the entry into Disney California Adventure, invites guests to step into Los Angeles of the 1920s and '30s, where they experience the sights and sounds Walt Disney may have discovered when he stepped off the train in California in
At nearly 300,000 square feet and 125 feet tall at its peak, The Ornament Valley Mountain Range in Cars Land is the largest rock structure in any domestic Disney theme
More than 30 different languages are spoken among Disneyland Resort cast members.
The Disneyland Resort costuming cast members maintain more than 1,200 different costumes for use in the parks and
More than 50 certified scuba divers work on the resort Facilities team, which maintains attractions such as "World of Color" and Finding Nemo Submarine
Each time guests board Guardians of the Galaxy – Mission: BREAKOUT!, they will experience one of six randomized scenarios created by Disney Imagineers, accompanied by a popular song from the '60s, '70s, or early '80s.
As part of the nighttime spectacular, "Fantasmic!," the wicked Maleficent from "Sleeping Beauty" transforms into the dragon, which is 45 feet tall by 28 feet wide and weighs approximately 18,000 pounds.
From fast-casual fare to haute cuisine, the menu of dining options at the Disneyland Resort offers something for every guest. Dining experiences range from character dining such as Donald Duck's Seaside Breakfast in Disney's PCH Grill; quick service stops like Smokejumpers Grill in Disney California Adventure; and table service restaurants as Carnation Cafe in Disneyland.
Disneyland Resort Public Relations
DisneylandNews.com
DisneyParksBlog.com
Twitter.com/Disneyland
← Just Announced: Disney Cruise Line Returns to Greece and Offers an Exciting Array of Itineraries for Families in Summer 2021
Celebrate Leap Day with Unique Experiences at Disneyland Resort →
Foodie Guide to the 2019 Epcot International Food & Wine Festival
Disney+ Public Pre-Order Now Live!
Disney on Broadway Concert Series Welcomes Even More Broadway Favorites at the Epcot International Festival of the Arts
February 18, 2020 April 8, 2020 Administrator 0
Create Magic Moments at Home with Disney, Pixar, Star Wars and Marvel Stickers for iMessage, and Disney Stories for Amazon Alexa
Matt Damon Explores Star Wars: Galaxy's Edge at Disneyland Park
August 6, 2019 April 8, 2020 0


The Toronto Harbor is waiting for you to give one of the finest cruise experience with slew of the most entertaining, exhilarating and exotic sea experience. This is your chance to have the best of the gala time at one of the most luxurious boat cruises 2019 with your friends or family. With one of the best ships available with us, you can sit back and relax with your cold drinks and set to sail over Toronto Harbor & gorgeous Lake Ontario, which in indeed one of the best attractions in Toronto.
With slew of cruise options including both the night time boat cruises and the day time boat cruises, you have enough opportunities to have one of the best of the gala time with your near ones. Backed by excellent service comprising of enthusiastic and supporting staff that leave no stone unturned to keep your magical moments turn the best at the helm. Needless to say that you have one of the best of the fun over the sea with the cruise events you choose at the Toronto harbor. You can block your dates with the tryst with sea time at any of the boat cruises Toronto as per your whims and fancies.
Starting with April 24 to finding out a wide range of diverse kind event at boat cruises Toronto Harbor you have ample of the events sprawling between this month (April to September). In other words, there is no dearth to choosing events as per the availability of your time, which come along with an array of diverse kinds of events. Whether you are keen to have a daylong cruise or want to go for a night out over the sea with best of the gala time, you get everything here.
So, whether you are looking out for a cool outing over the sea, or simply want to have a memorable time with your closed one, or want to enjoy good drinks along with the dance on the sea, you have ample amount of opportunities out here. It is better safe than sorry for losing the tickets available for the cruise party events. Get the never before gala time with these cruise events with us and start planning for the events to get the tickets on time. So, what are you waiting for, go get the best of the time with your beloved on sea!


Published 04/22/2019 06:49:32 pm at 04/22/2019 06:49:32 pm in Light Purple Paint For Bedroom.
light purple paint for bedroom light purple room light purple paint for bedroom light purple paint for bedroom ideas light purple light purple purple paint bedroom ideas best ideas about plum bedroom on purple related post.
dark and light purple walls purple walls bedroom light purple walls dark and light purple walls dark purple paint bedroom light purple paint for bedroom dark purple , light purple room decorations home interiors across the world purple painted bedroom ideas azhome rh azhomebuyers pro light purple room decorating ideas light purple room, light purple paint light grey bedroom ideas light grey and purple light purple paint source necessary cf purple bedroom ideas very nice what colors make light purple light purple paint , purple color for bedroom grey and purple bedroom color schemes and purple , light purple paint bedroom walls artnaknet purple wall paint purple colored bedroom light wall paint, light purple paint for bedroom purple paint for bedroom paint colors light purple paint for bedroom full size of light purple paint for bedroom ur awesome walls light purple paint for bedroom , purple painted bedroom ideas white purple color dark purple bedroom purple painted bedroom ideas remarkable purple walls , light purple walls light purple bedroom elegant best light purple light purple walls purple walls purple walls in bedroom purple wall decor for bedrooms adorable light light purple , purple paint for bedroom lavender bedroom paint bedroom light purple purple paint for bedroom bedroom color ideas inspiration purple bedroom purple paint bedroom purple paint for bedroom , light purple paint bedroom ideas answeringfforg light purple paint bedroom ideas, contemporary purple light walls pastel room rooms image result for light purple room wall paint bedroom colours decor a different shades p purple room colors light paint lavender ideas wall bedroom .


Discussion in 'General Discussion' started by vittle, Dec 10, 2008.
I can't seem to find the Courier Configuration in the latest release version of cPanel/WHM anymore. Users are reporting that they are getting blocked by our firewall, and it seems the mail server is configured to only allow 60 connections in one hour. I'd like to increase this limit, how can I do so?


text:
Meet Natalia
Click here to read my article
I'm a Holistic Life Coach, podcast host, writer, and speaker. I am also the founder of Pink But Not Weak.
The concept means that not because you are in touch with your emotions it means that you're weak. On the contrary, being in touch with your emotions is the biggest sign of strength that you can show.
The color pink typically symbolises femininity, romanticism, sensitivity, sweetness, innocence, charm, and gratitude. However, the way I choose to see it is that the colour pink represents more than just femininity; it also represents a part of every human being who is in touch with their emotions and is learning to let go.
I'm really passionate about entrepreneurship that's why I started a YouTube Channel where I interview women that have their own businesses so that they can share their inspiring stories with the world.
Instagram Youtube Facebook Linkedin
Gimme the Free Session
Copyright © 2022 By Natalia Vidal - Pink But Not Weak - All rights reserved


It is going to be so very strange not to see magnificent rocks enmeshed with grasses and wildflowers around me upon return to the states. Time has done that tricky thing in that I feel as if this present will continue now forever. Having done a good bit of exploring and learning over the past three weeks, it may be possible to write a bit about this very special place.
Expert Gordan D'Arcy explained in a lecture how the phenomenon of the Burren was glacially created millions of years ago when all the earth's land masses were connected. If we try, we can see how the edges of what became eastern North America had once separated from what became Ireland, which had separated from what became England, floating apart. No wonder the landscape and dry walls of the New England states come to mind so often here, and why so many Irish immigrants chose that area of America in which to place new roots.
According to D'Arcy Ireland was originally a jagged habitat with higher hills like China has. Changes from about one and one half million years after the end of the first Ice Age forward have resulted in what exists now. The borders of Ireland extended much further too, having been worn back to the cliffs, additional islands and jaggy shores of today. The Cliffs of Moher, for example, had extended about 100 meters further than they do now. What remains is the Burren limestone and granite that has not been washed and weathered away. Ireland had been covered by a shallow tropical sea, as evidenced by fossil imprints in the rocks. Marks in the stone were also created as other stones were dragged across while glaciers receded. Large granite boulders called erratics occur, sitting as if placed intentionally in various parts of the Burren. A fascinating occurrence appears in rocks from snails having eaten their calcium away. The rocks are peppered with regular-shaped circular crevices and sinuous trails.
Within the Burren, extending through Galway, are a vast array of plants that exist where they normally would not. Some came into Ireland with previous glacial activity from the north, leaving arctic seeds that thrive where the stone provides just enough shelter and alkaline surface for them to attach. Thin build-ups of acidic soil blown in from neighboring areas such as Tipperary fill in holes in the stone and provide a different environment that can likewise sustain plants. Neutral mixtures between the two support still other types. There are about 950 species of flora in Ireland, some of them rare. Seven hundred of them are found in the Burren. Thirty–two of the thirty-four species of butterflies are also found here.
All around is the physical evidence of ancient history, layers upon layers of time co-existing with the present. The 5200-5800 year old Poulnabrone Dolman is a tomb that held a royal dynasty of thirty-three people. The area has about 70 of these upright tombs from about 4,000 years ago when the Burren was heavily populated. Archeology work on the Caherconnell Stone Fort revealed evidence of human occupation from several different time periods, including a burial site from the early 6th/late 7th century. The Caherconnell Archaeological Project continues. The Aillwee Cave has been relatively dry for the last 10,000 years but its origin dates back two million. Created from what was once a river flowing above the floor upon which visitors walk, the current dampness and seepage of rainwater from above has been incrementally forming delicate stalactites over thousands of years.
That highly evolved Irish septs following Brehon Laws existed from pre-Christian times throughout the many centuries before England's turbulent colonization calls for the need to study the Milesian clans in parallel with dynasties of much more publicized areas such as Egypt and Asia. The Meaghers were certainly among the notable septs from their original base as abbots at Monaincha and in their surroundings in the vicinity of Roscrea, Tipperary.
We went into the COLD water last night with a group of women who have been meeting here at the same times mornings and nights for four years. One brought a swimsuit for me. The most magic experience of this journey so far. We will go back tonight.
This Sunday my father might have become ninety-two, yet instead he has been gone forty-three years. I'll never forget the series of days during which the rug of my life vanished from under me and everything changed. Somehow it seems fitting that I am in Ireland on his birthday, as I was for the first time on the one year anniversary of my mother's death. Each deserved a special observance in the place they knew as theirs. As far as I know my father never came to the birth home of his great grandfather. It remains to be seen how I will mark this anniversary. Perhaps I will go to Mass at the Catholic church of Ballyvaughan.
When away from the studio flashbacks occur over and again bringing parallel places and times back to play in my mind, telling me things I would have preferred to have understood decades ago. I imagine my grandfather, James, in the stranger brought into the pub by a possible daughter who saw him walking outside. His eyes lit up when he looked at me a few barstools down as if suddenly recognizing me from long ago (or as if he was younger and I available?), but after returning his smile I politely looked away. It is only in writing this that I realize, my father might have looked like him now. He might have said "Hello!" just then.
At the ceili in Kilfenora the male dancers older than me, with their proper stances, are extremely graceful on their feet. One has been chosen as my partner to teach me to step lightly and swirl with him amid a group ritual that has been performed for centuries the same way. I marvel at a community that comes together once a week to dance—and generously allows tourists in to learn. How could there not be peace and good will in a place that constantly touches each other this way? We learned square-dance versions of these steps in gym class of high school and rolled our eyes. Too cool then to care about things that would eventually matter.
That we can transport ourselves to an entirely other reality never ceases to amaze me. We literally drop all that seems so necessary and demanding to awake where it is possible to feel whole again. I am reminded repeatedly of childhood as I walk from place to place. The same flowers appear that I hardly ever see anymore but were among the first I had come to know—buttercups, clover, daisies, maidenhair and fiddlehead ferns—all in and amongst themselves through fields and the edges of roads, appearing in miniature throughout lawns. As this month's landlord mowed his in a great circle around the upstairs bungalow in which I am staying even the sound made me think of my father. I flashed back to an afternoon when he was repeating this same ritual and I asked him not to mow the forget-me-nots. He assured me that they would indeed return, but did leave me a clump near the front fencepost so that all might feel right in my little world.
Along the walk to my studio and the soulful community of this college the sound of a gurgling brook leads me to notice something left as a marker to the spot where fresh water may be found. Again I recall my father bringing me to such a place outside the city where we could likewise capture cool, delicious water to bring home. There was no need for this extra effort when water was plentiful from our own kitchen tap, but the noting of the possibility, the sense of specialness in this extended moment, left an indelible marker in my mind.
As my father would likewise find "loam" in a secret spot somewhere, fill his trunk with it and spread it across the lawn of our humble home in what would become a desirable area of town, he was repeating the work of his ancestors. The raking of good soil over bad echoed centuries of nurturing the earth as he worked toward creating eventual beauty where there was once merely a building site and start-up house. Here in the Burren many different microclimates exist to produce a vast array of vegetation. Some soil is less than inches deep, yet seeds take hold and thrive. It seems that the intentional tending of soil, eeking out from her what Nature is willing to give while she simultaneously offers unexpected splendors in the entire surround, is meshed into the DNA of the Irish and their place on this planet.
All around me are reminders to garden, recycle, be active through walking and biking, with evidence of each every day. Groceries are taken home in recycled boxes, the groceries themselves reflective of health, organics and quality. Here we turn off the power switch after using an appliance in order to preserve electricity. It is from here that the phrase "no worries" must have been born. The words sound somehow wrong in America, false to me when I hear them said by people who do not usually speak that way. When I thank a couple for giving me directions at a turning point in the road here, however, the phrase rings authentic. A genuine friendliness and sense of calm exists. It may be that the environment of beauty and space generates an even keel in everyone. The midwest coast of Ireland seems like that of fairy tales (and I haven't even been further north). There can be no coincidence that films about the magical past are made on location in such a place that actually exists.
The residue of the torturous past is here too. The "dead" houses, some with torn lace in windows, others with no windows, roofs or intact walls. Like the melting adobes of New Mexico, they dot the landscape as reminders of those who once lived there, causing me to wonder about their circumstances. As I still seek the story of my own ancestors' leaving I wonder, what kinds of homes might they have left behind? Taxed per window, how many openings in their walls were they able to have? What was their view from within the midlands and the cities? My friends from Laois have alluded to a story regarding Viscount de Vesci in Abbeyleix and my great-great grandfather. Perhaps they were testing the waters of my willingness to eventually hear something that might disturb me. I await the fuller tale that lies hidden as so much else does behind the open land that was once so full, within the soil, rich with the blood of battle and sacrifice. Meanwhile, I venture out to explore it all and spend hours in the studio as calm as a baby in her mother's arms.
This year has been one of gratitude for so many experiences that have validated the path I have chosen in life. An artist residency at the Burren College of Art is about to occur, as much as I feel it is merely a dream. Over the last decade I have come to know Ireland as a deeper ancestral home than I ever could have imagined. It is the land of my parents through their parents, grandparents, great grandparents, and thus my own great-great grandparents and theirs before them. Apart from my one Parisian great grandmother, I've learned that literally everyone else tied back to the midlands, south and west in the Old Sod – Tipperary, Laois, Kilkenny, Kerry, Cork, Limerick. No wonder I fell to pieces when the plane lifted to take me back to America after my first visit. It was as if I was being ripped away (as I also have felt arriving and leaving my American soul-home of New Mexico).
Over the past year I have been become familiar with sharing images to Instagram and, although with reticency at first, Facebook has become a "normal" way for me now to relax, find out about things going on in the big world, and weigh in with my own blips and shares. For this next month, however, I think I'll be doing any sharing from this blog that has been so good to me since 2011. It is through MaherMatters that I found so many likeminded individuals, some of whom have become (if still virtual) friends. It is also through here that I discovered recent ancestral connections for my cousins, circuitously provided through a clue I tucked into my book, Waterbury Irish. Thank you to all who have subscribed and engaged here over all this time!
While I will be in Ireland to work, to produce with an end result in mind, I will also have the opportunity to visit with dear Irish friends made through many years of research. It remains to be seen what I will post here, but I am imagining a series of photographs that I take during the month. Most of what I will be doing in Ireland is truly for me as I treasure the enormous gift of solitary time with a plan in place (and room for serendipity), a studio in which to work, no routines, obligations or known people (as much as I love my loves and friends and wish for more "quality time" with them!) except those whom I encounter in relation to the Burren or otherwise seek out in this majestic place.
My first share must be this, as I anticipate what has been promised, Ireland's soul merged with my own along the Wild Atlantic Way. Thanks be!


Click here to order this product on GSA Advantage. GSA Advantage Part no. #773210, #773220, #773230.
Click here to order this product on FedMall. Login to your account and go to Part #773210, #773220, #773230.
The Speed of Solid State combined with RAID flexibility and redundancy! Two 64GB mirrored SSD hard disk drives in a compact Compact Storage Solution.
– Now with SSD High Speed Drives!


text:
<title>Using the built-in Tools</title>

Using the built-in Tools

The PureBasic IDE comes with many building tools, to make programming tasks
easier and increase your productivity. Many of them can be configured to be
either accessible from the Menu as separate windows, or to be permanently
displayed in the Panel on the side of the editing area.

For information on how to configure these tools and where they are displayed,
see Configuring the IDE.

Tools for the Side Panel Area

Procedure Browser

This tool displays a list of all procedures and macros declared in the current source
code. By double-clicking on an entry in that list, the cursor automatically
jumps to that procedure.

Macros will be marked in the list by a "+" sign before the name.

You can also place special comment marks in your code,
that will be displayed in the list too. They look like this: ";- <description>".
The ; starts a comment, the ??that follows it immediately defines such a mark.

The description will be shown in the Procedure list, and clicking on it will jump
to the line of this mark. Such a comment mark can be distinguished from a Procedure
by the "> " that is displayed before it in the procedure list.

The list of procedures can be sorted, and it can display the procedure/macro arguments in the list.
For these options, see Configuring the IDE.

Project Panel

This tool displays a tree of all files in the current project. A double-click on a file
opens it in the IDE. This allows fast access to all files in the project. A right-click on a file opens a context menu
which provides more options:

Open - Open the file in the IDE.

Open in FileViewer - Open the file in the FileViewer of the IDE.

Open in Explorer - Open the file in the operating systems file manager.

Add File to Project - Add a new file to the project.

Remove File from Project - Remove the selected file(s) from the project.

Refresh AutoComplete data - Rescan the file for AutoComplete items.

Explorer

The Explorer tool displays an explorer, from which you can select files and open
them quickly with a double-click. PureBasic files (*.pb, *.pbi, *.pbp, *.pbf) will
be loaded into the edit area and all other recognized files (text & binary) files
will be displayed into the internal File Viewer.

Variable Viewer

The variable viewer can display variables,
Arrays, lists,
Constants, Structures
and Interfaces defined in your source code, or
any currently opened file. You can configure what exactly it should display in
the preferences.

Note: The displaying of variables is somewhat limited for now. It can only detect
variables explicitly declared with Define,
Global, Shared,
Protected or Static.

Code Templates

The templates tool allows you to manage a list of small code parts, that you can
quickly insert into your source code with a double-click. It allows you to manage the
codes in different directories, and put a comment to each code. This tool is perfect to
manage small, often used code parts.

Issue Browser

The issue browser tool collects comments in the source code that fit a defined format
and lists them ordered by priority. It can be used to track which areas of the
source code still need to be worked on.

Each displayed issue corresponds to one comment in
the code. A double-click on the issue shows that code line. Issues can be displayed for
the current file, or for multiple files (all open files, or all files that belong to
the current project).
The issue list can also be exported in CSV format.

To configure the collected issues, see the "Issues" section in the
Preferences.

Color Picker

The color picker helps you to find the perfect color value for whatever task you need.
The following methods of picking a color are available:

RGB: Select a color by choosing red, green and blue intensities.

HSV: Select a color by choosing hue, saturation and value.

HSL: Select a color by choosing hue, saturation and lightness.

Wheel: Select a color using the HSV model in a color wheel.

Palette: Select a color from a predefined palette.

Name: Select a color from a palette by name.

The color selection includes an alpha component, if the "Include alpha channel" checkbox is activated.
The individual components (red/green/blue intensities or hue/saturation/lightness) as well as
the hexadecimal representation of the current color can be seen and modified in the text fields.

The "Insert Color" button inserts the hexadecimal value of the current color in the source code.
The "Insert RGB" button inserts the color as a call to the RGB() or
RGBA() function into the code. The "Save Color" button saves the current color
to the history area at the bottom. Clicking on a color in the history makes it the current color again.

Character Table

The character table tool displays a table showing the first 256 unicode characters, together with
their index in decimal and hex, as well as the corresponding html notation. By double-clicking
on any line, this character will be inserted into the source code. With the buttons on the
bottom, you can select which column of the table to insert on a double-click.

Help Tool

The Help Tool is an alternative viewer for the reference guide. It can
be used to view the PureBasic manual side by side with the code. Whether or not the F1 shortcut opens
the manual in the tool or as a separate window can be specified in the
preferences.

Other built-in tools

Structure Viewer

The structure viewer allows you to view all the Structures, Interfaces and Constants
predefined in PureBasic. Double-clicking on a Structure or Interface shows the
declaration. On top of the list you can select a filter to display only entries that
start with a given character.

The "Back" button navigates back through the viewed entries.

"Insert name" inserts just the name of the selected entry.

"Insert copy" inserts a copy of the declaration of that entry.

"Insert" lets you enter a variable name and then inserts a definition of that variable
and the selected entry and all elements of it.

File Viewer

The internal file viewer allows you do display certain types of files. Text files,
images and web pages (windows only). Any unknown file type will be displayed in a
hex-viewer. The "Open" button opens a new file, the "X button" closes it and the
arrows can be used to navigate through the open files.

Also any binary file that you attempt to open from the Explorer tool, or by
double-clicking on an IncludeBinary keyword will be
displayed in this file viewer.

Compare Files/Folders

This tool can compare two (text-) files or two directories and highlight their differences.
The "Options" tab can be used to ignore some differences such as spaces or upper/lowercase changes.

The files are shown side by side with the differences marked in the following way:
Lines shown in red were removed in the file on the right, lines shown in green were added
in the file on the right and lines shown in yellow were changed between the two files.

When comparing directories, the content of both directories is examined (with the option to filter
the search by file extension and include subdirectories) and the files are marked in a similar way:
Files in red do not exist in the second directory, files in green are new in the second directory and
files in yellow were modified. A double-click on a modified file shows the modifications made
to that file.

Other entries in the Tools menu

Form Designer

The Form Designer can be used to design the user interface for you
application. For more information, see the form designer chapter.


A team of scientists from Australia and Denmark have rediscovered two species of sea snakes that were though to have been extinct since 2001.
Some 600 kilometres off the North-west coast Australia, in the Timor Sea, lies Ashmore Reef. The reef has been nicknamed "the sea snake capital of the planet' because it renowned for its large number of -- well, you've guessed it, sea snakes.
But in the late 1990s something happened. The sea snakes vanished and two species in particular, both of which only lived in the vicinity of the Ashmore Reef, were considered extinct since 2001.
That is, until a team of Australian and Danish scientists rediscovered whole populations of both sea snakes, the short-nosed sea snake (Aipysurus apraefrontalis) and the leaf-scaled sea snake (Aipysurus foliosquama), off the north Australian coast.
"It was always thought that these two species only lived in the area around Ashmore Reef. But we've now found populations of these snakes a 35-hour trip from where we thought they lived -- that makes you happy," says Arne Redsted Rasmussen, an assistant professor at the School of Conservation at the Royal Danish Academy of Fine Arts.
"It means that we have 'rediscovered an extinct species' so to speak," says Rasmussen, who is known as the man who catches sea snakes with his bare hands.
The new discovery has just been published in the journal PLOS One.
In the study, the scientists analysed the DNA of snakes collected off the North Australian coast -- far away from Ashmore Reef.
"The snakes have previously been found elsewhere, but until now, scientists have belived that the snakes had gone astray because of storms and strong currents," says Rasmussen.
Rasmussen has previously attempted to find the vanished species off Ashmore Reef. He went hunting for the snakes in 2012 as well as 2013, but to no avail.
"We could see, for instance, that sea turtles were living in the best of health in the same area. But the sea snakes were not happy, and we don't know why. Was it due to human activity? Had new predators arrived which eat the sea snakes' fare? No indication of that. We simply have no idea why they vanished," says Rasmussen.
He is currently examining whether sea snakes are particularly susceptible to noise, which is one possible reason for their disappearance.
The rediscovery of the two species of sea snake tells us that life as a sea snake in North Australian waters may be under threat from human activity.
"We're concerned about these species of snake. Australia is exploiting their resources to an ever-greater extent. There is a lot of oil drilling near the coast as well as increased fishing. How long can the snakes survive off the coast before man gets in the way?" says Rasmussen.
He believes it is vital to avoid the extinction of species caused by the impact of human activity.
"When a species becomes extinct, that's it. Coming generations won't have the opportunity to experience them, but most important of all, the species influence their surroundings. These two species help keep the reef healthy -- for one thing they catch sick fish so that only the fit fish survive to pass on their genes,"


text:
Q: Are there any gotchas or good reasons not to use autosproc for stored procedure calls? I've implemented a data access layer that populates generic entities from a datareader using a variation of the third monkey approach (http://www.codeproject.com/KB/database/DynamicMethod_ILGenerator.aspx). This works well, performs well and saves me writing loads of repetetive code for data retrieval.
Now I want to add methods that take a generic entity and convert it to a parameter list for feeding to a stored proc so that I can add data persistence to my monkey's trick collection.
I found some guidance at: http://msdn.microsoft.com/en-us/library/ms973259.aspx and some sample code in the autosproc solution. It looks good on paper and I intend to incorporate this but a quick google did not turn up much in the way of user experiences of implementing autosproc and I am looking for a thumbs up (or down) from anyone who has been there and done that already.
So, have you used autosproc? Did it work well for you? Are there any gaping flaws in performance or elsewhere that would make it unsuitable in an enterprise application?
Advice appreciated.

A: I think it's easier to refer you to this question, where my answer contains links to your AutoSproc thing: TSQL - Parse Execution Plan to determine columns to be returned by a stored procedure
To summarise, I didn't like it: it caused too many issues.
(Just poking around unanswered questions and found this one)


text:
`JSONFeed` is a lightweight [JSON Feed](https://jsonfeed.org) parser written in Swift 4, using the brand new [`Codable`](https://developer.apple.com/documentation/swift/codable) protocol and Foundation's new [`JSONDecoder`](https://developer.apple.com/documentation/foundation/jsondecoder) and [`JSONEncoder`](https://developer.apple.com/documentation/foundation/jsonencoder) classes. It supports both decoding from JSON, and encoding to JSON.

The [JSON Feed](https://jsonfeed.org) format is similar to RSS and Atom, and was released on May 17th, 2017 by [Brent Simmons](http://inessential.com) and [Manton Reece](http://manton.org).

## Requirements

- [Xcode 9 beta](https://developer.apple.com/download/)
- Swift 4

## Usage

### Decoding

You can instantiate a `JSONFeed` object from raw data as follows:

```swift
let feed = try? JSONFeed.make(from: data)
```

For the lazy developers out there, the `JSONFeed+Fetch.swift` extension provides a quick and lightweight way to fetch a JSON Feed from the web, without having to write any networking code (no need to worry with [`URLSession`](https://developer.apple.com/documentation/foundation/urlsession) or [`Alamofire`](https://github.com/Alamofire/Alamofire)).

```swift
JSONFeed.fetch("https://daringfireball.net/feeds/json") { (feed: JSONFeed?, error: Error?) in

    guard error == nil else { return }

    let titles = feed!.items[0..<5].map { $0.title ?? "No title" }

    print(titles.joined(separator: "\n"))
}
```

The example above prints out the five most recent [Daring Fireball](https://daringfireball.net) posts:

    Designing the Worst Volume Sliders Possible
    John Markoff to Interview Scott Forstall Next Week
    Brian Merchant Has Tony Fadell on Tape
    Inductive Charging Is Not 'Wireless'
    Microsoft Surface Laptop Teardown

The decoder strictly enforces the following requirements of the spec:

- The feed must include a `version` string.
- The feed must include a `title` string.
- The feed must include an `items` array, although the array may be empty.
- All items must include an `id`, and the `id` must be a string, integer, or float.
- All dates (namely, `date_published` and `date_modified`) must conform to [RFC3339](https://tools.ietf.org/html/rfc3339).
- All item attachments must include a `url` string.
- All hub objects must include a `type` string and a `url` string.
- All values must match their specified data type. For example, the spec states that the value for `title` should be a string – if the decoder encounters an integer, float, or some other type for `title`, it will throw an error.

If even one requirement is not met, then the decoder throws an error and thus the entire feed is considered invalid.

Note that the JSON Feed spec declares the item attachment `mime_type` as a required string, yet `JSONFeed` defines this property as `String?`. This is to more closely match the spirit of the spec:

> There are cases, though, where a required element might not be present. In the case of an `attachment` missing a `mime_type`, you can probably deal with it fine. After all, when you download the attached file, the web browser will provide a MIME type. (And you might have been able to guess it from the file suffix.)

### Encoding

You can also encode a native Swift `JSONFeed` object *to* JSON.

To encode the feed as data:

```swift
let data = try? feed.encodeToData()
```

To produce a string:

```swift
let string = try feed.encodeToString()
```

## Design Goals

The primary goal of this project (other than the most obvious goal, which is to successfully parse JSON Feeds) is to eliminate boilerplate JSON parsing code by using the new `Codable` protocol in Swift 4, along with the new `JSONDecoder` and `JSONEncoder` classes in Foundation. Historically, you would get `Data` from a server, deserialize that `Data` into a `[String: Any]` dictionary via the venerable [`JSONSerialization`](https://developer.apple.com/documentation/foundation/jsonserialization) class, and then instantiate your native Swift object(s) by manually setting each property from the key-value pairs in the dictionary. With `Codable` and `JSONDecoder`, you can go directly from `Data` to `JSONFeed` in one easy step, without the dictionary and without all of the boilerplate.

When I started this project, the second most important goal was for the parser to be flexible and lenient. During development, I discovered that this design goal was at odds with the first design goal. In other words, the out-of-the-box behavior of `Codable` is quite strict.

### Dates

The JSON Feed specification defines two date parameters: `date_published` and `date_modified`. Both are specified as optional strings in the [RFC3339](https://tools.ietf.org/html/rfc3339) format. What is RFC3339?

> It is a conformant subset of the ISO 8601 extended format. Simplicity is achieved by making most fields and punctuation mandatory.

Great! A "conformant subset" of ISO 8601!

> 😃 That means we can use the `iso8601` date decoding strategy built-in to `JSONDecoder`, right?

> 😩 Wrong!

There's a [bug](http://www.openradar.me/28425750) in Apple's [`ISO8601DateFormatter`](https://developer.apple.com/documentation/foundation/iso8601dateformatter): It cannot parse date strings that include fractions of a second. RFC3339 allows for fractions of a second, but defines it as a "rarely used option", as follows:

> Rarely used options should be made mandatory or omitted for the sake of interoperability whenever possible. The format defined below includes only one rarely used option: fractions of a second. It is expected that this will be used only by applications which require strict ordering of date/time stamps or which have an unusual precision requirement.

The JSON Feed spec does not specify whether this option is "mandatory or omitted". Most JSON Feeds in the wild don't use fractions of a second, but some do (e.g., the [Flying Meat](http://flyingmeat.com) blog, and [Maybe Pizza?](http://maybepizza.com)).

Luckily, `JSONDecoder` provides multiple options for date decoding via the `DateDecodingStrategy` enum:

```swift
/// The strategy to use for decoding `Date` values.
public enum DateDecodingStrategy {

    /// Defer to `Date` for decoding. This is the default strategy.
    case deferredToDate

    /// Decode the `Date` as a UNIX timestamp from a JSON number.
    case secondsSince1970

    /// Decode the `Date` as UNIX millisecond timestamp from a JSON number.
    case millisecondsSince1970

    /// Decode the `Date` as an ISO-8601-formatted string (in RFC 3339 format).
    case iso8601

    /// Decode the `Date` as a string parsed by the given formatter.
    case formatted(DateFormatter)

    /// Decode the `Date` as a custom value decoded by the given closure.
    case custom((Decoder) throws -> Date)
}
```

As discussed above, `iso8601` fails if the date string includes fractions of a second. Another option is `formatted(DateFormatter)`, but you'll notice that Apple's `ISO8601DateFormatter` actually subclasses `Formatter` rather than `DateFormatter` - this is because `DateFormatter` is not particularly well suited to subclassing. `JSONFeed` uses the last option: `case custom((Decoder) throws -> Date)`.

### Item Identifiers

Per the spec, each item in the feed is required to have an `id`, which uniquely identifies the item. The specified data type is a string, however the spec allows for "a number or other type":

> id (required, string) is unique for that item for that feed over time. If an item is ever updated, the id should be unchanged. New items should never use a previously-used id. If an id is presented as a number or other type, a JSON Feed reader must coerce it to a string. Ideally, the id is the full URL of the resource described by the item, since URLs make great unique identifiers.

If we simply define `id` as a `String` and use the default compiler-generated implementation of `Decodable`, then `JSONDecoder` will throw an error when parsing a feed which uses numbers instead of strings for the `id` parameter. In lieu of a custom implementation of `Decodable` (which would introduce a lot of boilerplate), `JSONFeed` employs a custom type, called `AmbiguouslyTypedIdentifier`, which has its own custom implementation of `Codable`, allowing for the `id` to be a `String`, `Int`, or `Double`. This is a good tradeoff between providing flexibility and minimizing boilerplate.

### `URL` vs `String`

The JSON Feed spec includes several parameters that are URLs. In `JSONFeed`, every URL parameter is declared as a `String` rather than a Foundation `URL`. Why? If a property is a `URL`, and the feed includes an invalid URL, then `JSONDecoder` will throw an error, thus rendering the entire feed invalid. Using `String` instead of `URL` allows `JSONFeed` to be more versatile and permissive. In addition, the JSON Feed spec alludes to the possibility of private feeds that are not published on the public web. For this use case, the feed author may decide to use relative paths for the URL parameters, rather than absolute paths.

## Use Cases

Why would anyone need a JSON Feed encoder / decoder written in Swift?

- Write a feed reader app for iOS.
- Write a feed reader app for macOS.
- Write your own blog engine, and use it to generate the JSON Feed for your blog.
- Use a JSON Feed as a lightweight content management system for your iOS app.

## Integration

### Manually

Simply drag `JSONFeed.swift` and (optionally) `JSONFeed+Fetch.swift` into your Xcode project.

### Swift Package Manager

I'm working on adding support for the [Swift Package Manager](https://swift.org/package-manager/).