text:
using System;
using System.IO;

using DotNetOpenMail;
using DotNetOpenMail.Utils;

using NUnit.Framework;
using log4net;

namespace DotNetOpenMailTests {

	[TestFixture]
	public class EmailMessageTests {

		SmtpServer _smtpserver=null;
		private static readonly ILog log = LogManager.GetLogger(typeof(EmailMessageTests));

		public EmailMessageTests() {
		}

		[SetUp]
		public void SetUp()
		{
			_smtpserver=TestAddressHelper.GetSmtpServer();
		}

		[TearDown]
		public void TearDown() {}

		#region TestHtmlAndText
		[Test]
		public void TestHtmlAndText()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="EmailMessageTests Test HTML and Text";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");

			emailmessage.AddCustomHeader("X-MyHeader1", "my header number one");
			emailmessage.AddCustomHeader("X-MyHeader2", "my header number two");

			emailmessage.Send(_smtpserver);

			String content=emailmessage.ToDataString();
			StringReader sr=new StringReader(content);
			log.Debug(content);

			int i=0;
			String line=null;
			bool hasToHeader=false;
			bool hasFromHeader=false;
			bool hasSubjectHeader=false;
			bool hasMimeVersion=false;
			bool hasMultipartAlternative=false;
			bool hasPlainText=false;
			bool hasHtmlText=false;
			bool hasDefaultXMailerHeader=false;
			bool hasCustomHeader1=false;
			bool hasCustomHeader2=false;
			int quotedPrintableParts=0;

			String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">";

			while ((line=sr.ReadLine())!=null)
			{
				i++;
				if (line.IndexOf("To: "+expectedToAddress)==0)
				{
					hasToHeader=true;
				}
				if (line.IndexOf("From: "+emailmessage.FromAddress.ToString())==0)
				{
					hasFromHeader=true;
				}
				if (line.IndexOf("Subject: "+emailmessage.Subject)==0)
				{
					hasSubjectHeader=true;
				}
				if (line.IndexOf("MIME-Version: 1.0")==0)
				{
					hasMimeVersion=true;
				}
				if (line.IndexOf("Content-Type: multipart/alternative;")==0)
				{
					hasMultipartAlternative=true;
				}
				if (line.IndexOf("Content-Type: text/html")==0)
				{
					hasHtmlText=true;
				}
				if (line.IndexOf("Content-Type: text/plain")==0)
				{
					hasPlainText=true;
				}
				if (line.IndexOf("Content-Transfer-Encoding: quoted-printable")==0)
				{
					quotedPrintableParts++;
				}
				if (line.IndexOf("X-Mailer: DotNetOpenMail") == 0)
				{
					hasDefaultXMailerHeader=true;
				}
				if (line.IndexOf("X-MyHeader1: my header number one") == 0)
				{
					hasCustomHeader1=true;
				}
				if (line.IndexOf("X-MyHeader2: my header number two") == 0)
				{
					hasCustomHeader2=true;
				}

				// log.Debug("Line "+i+": "+line);
			}
			Assert.IsTrue(hasToHeader, "Missing TO Header");
			Assert.IsTrue(hasFromHeader, "Missing FROM Header");
			Assert.IsTrue(hasSubjectHeader, "Missing Subject Header");
			Assert.IsTrue(hasMimeVersion, "Missing Mime Version header");
			Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting");
			Assert.IsTrue(hasPlainText, "Missing Plain Text");
			Assert.IsTrue(hasHtmlText, "Missing HTML");
			Assert.IsTrue(hasDefaultXMailerHeader, "Missing X-Mailer Header");
			Assert.IsTrue(hasCustomHeader1, "Missing Custom Header 1");
			Assert.IsTrue(hasCustomHeader2, "Missing Custom Header 2");
			Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found "+quotedPrintableParts);

		}
		#endregion

		#region TestGraphicAttachment
		[Test]
		public void TestGraphicAttachment()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="EmailMessageTests Test HTML+Text+Graphic";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");
			FileInfo fileinfo=new FileInfo(@"..\..\TestFiles\grover.jpg");
			Assert.IsTrue(fileinfo.Exists);
			FileAttachment fileattachment=new FileAttachment(fileinfo);

			fileattachment.ContentType="image/jpeg";
			emailmessage.AddMixedAttachment(fileattachment);
			//emailmessage.Send(_smtpserver);
			//log.Debug("MESSAGE: "+emailmessage.ToDataString());
			String content=emailmessage.ToDataString();
			StringReader sr=new StringReader(content);

			int i=0;
			String line=null;
			bool hasMimeVersion=false;
			bool hasMixedHeader=false;
			bool mixedHeaderComesFirst=false;
			bool hasMultipartAlternative=false;
			bool hasPlainText=false;
			bool hasHtmlText=false;
			bool hasAttachment=false;
			bool hasRelatedHeader=false;
			int quotedPrintableParts=0;

			String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">";
			//log.Debug("To Address is "+expectedToAddress);
			while ((line=sr.ReadLine())!=null)
			{
				i++;
				if (line.IndexOf("Content-Type: multipart/mixed")==0)
				{
					hasMixedHeader=true;
					if (!hasMultipartAlternative)
					{
						mixedHeaderComesFirst=true;
					}
				}
				if (line.IndexOf("MIME-Version: 1.0")==0)
				{
					hasMimeVersion=true;
				}
				if (line.IndexOf("Content-Type: multipart/alternative;")==0)
				{
					hasMultipartAlternative=true;
				}
				if (line.IndexOf("Content-Type: text/html")==0)
				{
					hasHtmlText=true;
				}
				if (line.IndexOf("Content-Type: text/plain")==0)
				{
					hasPlainText=true;
				}
				if (line.IndexOf("Content-Type: image/jpeg")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Transfer-Encoding: quoted-printable")==0)
				{
					quotedPrintableParts++;
				}
				if (line.IndexOf("/9j/4AAQSkZJRgABAQEASABIAAD/")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Type: multipart/related")>=0)
				{
					hasRelatedHeader=true;
				}
				//log.Debug("Line "+i+": "+line);
			}
			Assert.IsTrue(hasMixedHeader, "Missing multipart/mixed header");
			Assert.IsTrue(hasMimeVersion, "Missing Mime Version header");
			Assert.IsTrue(mixedHeaderComesFirst, "The mixed header should come first");
			Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting");
			Assert.IsTrue(hasPlainText, "Missing Plain Text");
			Assert.IsTrue(hasHtmlText, "Missing HTML");
			Assert.IsTrue(hasAttachment, "Missing the base64 Attachment");
			Assert.IsFalse(hasRelatedHeader, "Should not have a related header.");
			Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found "+quotedPrintableParts);

		}
		#endregion

		#region TestRelatedAndMixedAttachments
		[Test]
		public void TestRelatedAndMixedAttachments()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="EmailMessageTests Test HTML+Text+Graphic";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
  \r\nis the
  \r\nHTML
\r\npart.");
			FileInfo relatedfileinfo=new FileInfo(@"..\..\TestFiles\grover.jpg");
			FileInfo mixedfileinfo=new FileInfo(@"..\..\TestFiles\groverUpsideDown.jpg");
			Assert.IsTrue(relatedfileinfo.Exists);
			Assert.IsTrue(mixedfileinfo.Exists);
			FileAttachment relatedfileattachment=new FileAttachment(relatedfileinfo,"mycontentid@rhombus");
			relatedfileattachment.ContentType="image/jpeg";
			FileAttachment mixedfileattachment=new FileAttachment(mixedfileinfo);
			mixedfileattachment.ContentType="image/jpeg";
			emailmessage.AddRelatedAttachment(relatedfileattachment);
			emailmessage.AddMixedAttachment(mixedfileattachment);
			//emailmessage.Send(_smtpserver);
			String content=emailmessage.ToDataString();
			StringReader sr=new StringReader(content);

			int i=0;
			String line=null;
			bool hasMimeVersion=false;
			bool hasMixedHeader=false;
			bool mixedHeaderComesFirst=false;
			bool hasMultipartAlternative=false;
			bool hasPlainText=false;
			bool hasHtmlText=false;
			bool hasAttachment=false;
			bool hasRelatedHeader=false;
			int quotedPrintableParts=0;

			String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">";
			//log.Debug("To Address is "+expectedToAddress);
			while ((line=sr.ReadLine())!=null)
			{
				i++;
				if (line.IndexOf("Content-Type: multipart/mixed")==0)
				{
					hasMixedHeader=true;
					if (!hasMultipartAlternative && !hasRelatedHeader)
					{
						mixedHeaderComesFirst=true;
					}
				}
				if (line.IndexOf("MIME-Version: 1.0")==0)
				{
					hasMimeVersion=true;
				}
				if (line.IndexOf("Content-Type: multipart/alternative;")==0)
				{
					hasMultipartAlternative=true;
				}
				if (line.IndexOf("Content-Type: text/html")==0)
				{
					hasHtmlText=true;
				}
				if (line.IndexOf("Content-Type: text/plain")==0)
				{
					hasPlainText=true;
				}
				if (line.IndexOf("Content-Type: image/jpeg")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Transfer-Encoding: quoted-printable")==0)
				{
					quotedPrintableParts++;
				}
				if (line.IndexOf("/9j/4AAQSkZJRgABAQEASABIAAD/")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Type: multipart/related")>=0)
				{
					hasRelatedHeader=true;
				}
				//log.Debug("Line "+i+": "+line);
			}
			Assert.IsTrue(hasMixedHeader, "Missing multipart/mixed header");
			Assert.IsTrue(hasMimeVersion, "Missing Mime Version header");
			Assert.IsTrue(mixedHeaderComesFirst, "The mixed header should come first");
			Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting");
			Assert.IsTrue(hasPlainText, "Missing Plain Text");
			Assert.IsTrue(hasHtmlText, "Missing HTML");
			Assert.IsTrue(hasAttachment, "Missing the base64 Attachment");
			Assert.IsTrue(hasRelatedHeader, "Missing the related header.");
			Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found "+quotedPrintableParts);

		}
		#endregion

		#region TestRelatedAttachments
		[Test]
		public void TestRelatedAttachments()
		{

			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="EmailMessageTests Test Related Graphic";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");
			FileInfo relatedfileinfo=new FileInfo(@"..\..\TestFiles\grover.jpg");
			Assert.IsTrue(relatedfileinfo.Exists);
			FileAttachment relatedfileattachment=new FileAttachment(relatedfileinfo,"mycontentid");
			relatedfileattachment.ContentType="image/jpeg";
			emailmessage.AddRelatedAttachment(relatedfileattachment);
			//emailmessage.Send(_smtpserver);
			String content=emailmessage.ToDataString();
			StringReader sr=new StringReader(content);

			int i=0;
			String line=null;
			bool hasMimeVersion=false;
			bool hasMixedHeader=false;
			bool relatedHeaderComesFirst=false;
			bool hasMultipartAlternative=false;
			bool hasPlainText=false;
			bool hasHtmlText=false;
			bool hasAttachment=false;
			bool hasRelatedHeader=false;
			int quotedPrintableParts=0;

			String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">";
			//log.Debug("To Address is "+expectedToAddress);
			while ((line=sr.ReadLine())!=null)
			{
				i++;
				if (line.IndexOf("Content-Type: multipart/mixed")==0)
				{
					hasMixedHeader=true;

				}

				if (line.IndexOf("MIME-Version: 1.0")==0)
				{
					hasMimeVersion=true;
				}
				if (line.IndexOf("Content-Type: multipart/alternative;")==0)
				{
					hasMultipartAlternative=true;
				}
				if (line.IndexOf("Content-Type: text/html")==0)
				{
					hasHtmlText=true;
				}
				if (line.IndexOf("Content-Type: text/plain")==0)
				{
					hasPlainText=true;
				}
				if (line.IndexOf("Content-Type: image/jpeg")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Transfer-Encoding: quoted-printable")==0)
				{
					quotedPrintableParts++;
				}
				if (line.IndexOf("/9j/4AAQSkZJRgABAQEASABIAAD/")==0)
				{
					hasAttachment=true;
				}
				if (line.IndexOf("Content-Type: multipart/related")>=0)
				{
					hasRelatedHeader=true;
					if (!hasMultipartAlternative && !hasMixedHeader)
					{
						relatedHeaderComesFirst=true;
					}
				}
				//log.Debug("Line "+i+": "+line);
			}
			Assert.IsFalse(hasMixedHeader, "Should not have a  multipart/mixed header");
			Assert.IsTrue(hasMimeVersion, "Missing Mime Version header");
			Assert.IsTrue(relatedHeaderComesFirst, "The related header should come first");
			Assert.IsTrue(hasMultipartAlternative, "Missing Mime Multipart/Alternative setting");
			Assert.IsTrue(hasPlainText, "Missing Plain Text");
			Assert.IsTrue(hasHtmlText, "Missing HTML");
			Assert.IsTrue(hasAttachment, "Missing the base64 Attachment");
			Assert.IsTrue(hasRelatedHeader, "Missing the related header.");
			Assert.AreEqual(2, quotedPrintableParts, "Expected 2 quoted printable declarations, found "+quotedPrintableParts);

		}
		#endregion

		#region TestHeaders
		[Test]
		public void TestHeaders()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddCcAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddCcAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddBccAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddBccAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="Test Headers";
			emailmessage.XMailer="NUnit Test Mailer";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");

			String content=emailmessage.ToDataString();
			StringReader sr=new StringReader(content);

			int i=0;
			String line=null;
			bool hasToHeader=false;
			bool hasFromHeader=false;
			bool hasSubjectHeader=false;
			bool hasBccHeader=false;
			bool hasCcHeader=false;
			bool hasXMailerHeader=false;

			String expectedToAddress=TestAddressHelper.GetToAddress().Name+" <"+TestAddressHelper.GetToAddress().Email+">";

			while ((line=sr.ReadLine())!=null)
			{
				i++;
				if (line.IndexOf("To: "+expectedToAddress+", "+expectedToAddress)==0)
				{
					hasToHeader=true;
				}
				if (line.IndexOf("Cc: "+expectedToAddress+", "+expectedToAddress)==0)
				{
					hasCcHeader=true;
				}
				if (line.IndexOf("Bcc: "+expectedToAddress+", "+expectedToAddress)==0)
				{
					hasBccHeader=true;
				}

				if (line.IndexOf("From: "+emailmessage.FromAddress.ToString())==0)
				{
					hasFromHeader=true;
				}
				if (line.IndexOf("Subject: "+emailmessage.Subject)==0)
				{
					hasSubjectHeader=true;
				}
				if (line.IndexOf("X-Mailer: NUnit Test Mailer")==0)
				{
					hasXMailerHeader=true;
				}

			}
			Assert.IsTrue(hasToHeader, "Missing TO Header");
			Assert.IsTrue(hasFromHeader, "Missing FROM Header");
			Assert.IsTrue(hasSubjectHeader, "Missing Subject Header");
			Assert.IsTrue(hasCcHeader, "Missing Cc Header");
			Assert.IsFalse(hasBccHeader, "Bcc Header Shouldn't appear");
			Assert.IsTrue(hasXMailerHeader, "Missing XMailer Header");
			//emailmessage.Send(_smtpserver);

		}
		#endregion

		#region TestLongSubjectEncoded
		[Test]
		public void TestLongSubjectEncoded()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddCcAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddBccAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="Join our Group's Fundraising Efforts é test test test Gulf Little League";
			emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable;
			emailmessage.XMailer="NUnit Test Mailer";
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");

			String content=emailmessage.ToDataString();
			emailmessage.Send(_smtpserver);

		}
		#endregion

		#region TestExtraHeader
		[Test]
		public void TestExtraHeader()
		{
			EmailMessage emailmessage=new EmailMessage();

			emailmessage.FromAddress=TestAddressHelper.GetFromAddress();
			emailmessage.AddToAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddCcAddress(TestAddressHelper.GetToAddress());
			emailmessage.AddBccAddress(TestAddressHelper.GetToAddress());
			emailmessage.Subject="Extra Header";
			emailmessage.HeaderEncoding=DotNetOpenMail.Encoding.EncodingType.QuotedPrintable;
			emailmessage.XMailer="NUnit Test Mailer";
			emailmessage.AddCustomHeader("MyHeader", "Value");
			emailmessage.TextPart=new TextAttachment("This\r\nis the\r\ntext\r\npart.");
			emailmessage.HtmlPart=new HtmlAttachment("This
\r\nis the
\r\nHTML
\r\npart.");

			String content=emailmessage.ToDataString();
			emailmessage.Send(_smtpserver);

		}
		#endregion

		#region TestMissingFrom
		[Test]
		public void TestMissingFrom()
		{
			EmailMessage emailmessage=new EmailMessage();
			try
			{
				emailmessage.Send(_smtpserver);
				Assert.Fail("This should throw an error if no from address");
			}
			catch (MailException ex)
			{
				log.Debug("Ignoring exception "+ex.Message);
			}

		}
		#endregion

	}
}


For over 45 years, we have been in the wedding photography & digital imaging business. That's a lot of happy clients.
Whether you need a faded photo brought back to life or your photo is cracked, has water damage or is pieces, our skilled graphic artists will "work-their-magic" to create an exquisite finished product that you'll cherish for a lifetime. Each restoration is done individually by hand to yield the best quality and best results.
1. Either send your original photo to us or if you do not want the original to leave your possession, scan the photo yourself and upload the scan to us.
2. Upon receipt of your original or a high resolution scan, our graphic designers and artists will immediately make an assessment of the level of restoration required. If you send the original photo, we will scan it before proceeding.
3. Our artists do their magic to the scan, not to your original photo. Your original photo is never altered.
4. Each job is a custom job done individually by hand with whatever techniques are necessary. We do not use automated programs or apps.
5. The finished result is then posted online for your approval.
Choose from black & white or color, add painted brush strokes or select from many framing or canvas options.
Since every image requires a different amount of corrective work, there is no way to accurately estimate the exact cost of each restoration until our artists actually do the work. However, we will give you a rough estimate before starting on the work.
We are so confident that you'll love our work, you do not pay until you love the finished product.
A nominal $35 charge is required to start the process which will be deducted from the total cost if you decide to go ahead with the restoration.


text:
Q: How to detect chained function calls in JavaScript? var Obj = {
   func1 : function() {
      // some code
      if (this._hasChainedFunc()) {
         // block should be CALLED
      }
      return this;
   },
   func2 : function() {
      // some code
      if (this._hasChainedFunc()) {
         // block should be NOT called
      }
      return this;
   },
   _hasChainedFunc : function() {
     // code which detects if there is a chained function???
   }
}

Obj.func1().func2();

Is there a possible implementation for function _hasChainedFunc()? This function should return true on the first call (because func2() is called afterwards), false on the second call.
In a more advanced version, _hasChainedFunc() may also returned the function which is actually called afterwards.

A: Technically you can never know in advance whether there's another call chained after the current call -- this plainly doesn't make sense because it implies you're aware of some code that's gonna be called before it's called. You can't do this without a pre-compiler, which I guess is not what you're after.
Conversely, it is possible to check whether there's been a previous call chained before the current call. This just requires you to keep some state in the object regarding the previous calls, and update it whenever you call a new function on it. If you only use one chain of calls, you can do this by making func1 and func2 change some state on the this object before returning it.
If you want to call multiple chains on the same object, you face the problem of how to detect the end of a chain. For this you will need to make each chained function return a wrapper around the original this, which would store the state about the previous calls.
If you use the wrapper approach, obj.func1().func2() calls func1 on obj, but func2 is called on a wrapper returned from func1 and this wrapper could be aware of the previous func1 call. If you later call obj.func2().func1() then func2 is now called on obj whereas func1 is called on the wrapper which is aware of the previous func2 call, etc.

A: (NOTE: This answer was originally posted by Scholle as part of the question. I extracted it from the question into an actual answer, as it should have been in the first place. It is not my solution, so I have marked it as Community Wiki.)
Scholle ultimately created a library that does what he wanted.
It's available on GitHub, and some documentation is here.

In short: Take an arbitrary JavaScript function and "chainify" it:
var Model = function() {};

Model.prototype.func1 = function() {
  console.log('func1 has ' + this.c_getPredecessors().length + ' preceding functions');
  return this.c_delay().c_chain(function() {
    console.log('func1 has ' + this.c_getSuccessors().length + ' succeeding functions');
    console.log('func1 processing...');
    this.c_next();
  });
};

Model.prototype.func2 = function() {
  console.log('func2 has ' + this.c_getPredecessors().length + ' preceding functions');
  return this.c_delay().c_chain(function() {
    console.log('func2 has ' + this.c_getSuccessors().length + ' succeeding functions');
    console.log('func2 processing...');
    this.c_next();
  });
};

Chainify and instantiate it,
  and call some functions:
chainify(Model);

var Obj = new Model();
Obj.func1().func2();

Console output:
func1 has 0 preceding functions
func2 has 1 preceding functions
func1 has 1 succeeding functions
func1 processing...
func2 has 0 succeeding functions
func2 processing...

Of course, this is a simple example. It just demonstrates that every
  functions is now capable to access information about what happens
  before and after the current function call.

A: No, it's not possible.
It's semantically identically to:
var tmp = Obj.func1();
tmp.func2();

When Obj.func1() is called, there's no way for it to know whether the subsequent result will be used to call func2.
The best you could achieve is for func2 to detect whether func1 was previously called, but for it to work the way you've described would require func1 to be capable of predicting the future.

A: What you can do is add a member property indicating if it's the first call made on the object or not:
var Obj = {
   _first : true,

   func1 : function() {
      // some code
      if (this._hasChainedFunc()) {
         // block should be CALLED
      }
      return this;
   },
   func2 : function() {
      // some code
      if (this._hasChainedFunc()) {
         // block should be NOT called
      }
      return this;
   },
   _hasChainedFunc : function() {
       var isFirst = this._first;
       this._first = false;
       return isFirst;
   }
}

Obj.func1().func2();

However, this means you have to reset the state of the object before each call (by setting this._first back to true). You may want to rethink how you're going about this.

A: here's how i would do this:
var Obj = {
    first:0,   //<--- will store whether it's the first call
    func1 : function() {
            // some code
        if (this._hasChainedFunc()) {
            console.log("called1");
        }
         return this;
    },
    func2 : function() {
        // some code
        if (this._hasChainedFunc()) {
            console.log("called2");
        }
        return this;
    },
    _hasChainedFunc : function() {
        return (this.first++ > 0);
    }
}

Obj.func1().func2();

and this seems to work:
  called2

http://jsfiddle.net/2VThj/1/

A: Why would you want to do this?
That question aside, you could, rather than returning the actual object, make a clone of it, and add an attribute to tell you it is a returned version of the object. That is the only way I can think of. Sounds complex though, depending on how complex this object is.
Something like:
func1 : function() {
  // some code
  if (this._hasChainedFunc()) {
     // block should be CALLED
  }
  return deepCloneWithFlag(this);
},
_hasChainedFunc : function() {
   return this.flag;
}

A: Nope. this won't work. you could possibly tell that func1() had at some point been called on this object, but you cannot tell WHEN it was called, i.e. right before func2
for example this:
obj.func1();
obj.func2();

is equivalent to your example call. And there is no way func1 could know that func2 will be called in the future.
I solved a problem similar to this with chain functions (docs) This allows true function chaining with the ability to "look-ahead" to see what's coming in the chain.

A: What you could do is have two separate classes, one for the first element in the chain and one for the remaining elements. Then all you would have to do is change the first class to return an equivalent object from the second class instead of the current object.
var Class1 = function(state){
   return {
       func1 : function() {
           // some code
           // block should be CALLED
           return Class2(state)
       },
       func2 : function() {
           // some code
           // block should be NOT called
           return Class2(state)
       }
    };
}

var Class2 = function(state){
   return {
       func1 : function() {
           // some code
           return this;
       },
       func2 : function() {
           // some code
           return this;
       }
    };
}

Class1(initial_state).func1().func2();

A: Althought knowing that a function will be called after another function is impossible in Javascript, here is a solution to chainify an object :
(function(window, undefined)
{

    var chainify = function(prop)
    {
        return new chainify.init(prop);
    };

    /**
     *
     * @param prop :
     *            Properties to apply to the object
     * @returns {chainify.init}
     */
    chainify.init = function(prop)
    {
        for ( var key in prop)
            this[key] = prop[key];
    };

    chainify.init.prototype = {

        _attributes : {},

        _chain_in_progress : false,
        _chain_level : 1,
        _chain_function : '',

        /**
         * Returns the chained object
         *
         * @param name -
         *            name of the previous function
         * @this chainify.init
         * @returns {chainify.init}
         */
        _chain : function(name)
        {
            var tmp = chainify(this);
            tmp._chain_in_progress = true;
            tmp._chain_function = name || '';
            _chain_level++;
            return tmp;
        },

        get : function(key)
        {
            return this._attributes[key];
        },

        set : function(key, value)
        {
            this._attributes[key] = value;
            return this;
        },

        attr : function(prop)
        {
            for ( var key in prop)
                this._attributes[key] = prop[key];
            return this;
        },

    };

    // Make global
    window.chainify = chainify;
})(window);

var myObject = window.chainify({

    // f1() function is using _chain()
    f1 : function(s)
    {
        // Do something
        this.set('s1', s);
        if (this._chain_in_progress) alert('f1 after ' + this._chain_function);

        // return the chain by calling this._chain()
        return this._chain('f1');
    },

    // f2() function is using _chain()
    f2 : function(s)
    {
        this.set('s2', s);
        if (this._chain_in_progress) alert('f2 after ' + this._chain_function);
        return this._chain('f1');
    },

    // that() function is not using _chain(), but we return this so the chaining
    // is not broken
    that : function(s)
    {
        // Do something
        return this;
    }
});

// Check if the f1 function is working
myObject.f1('a'); // Set s1 to "a"
alert(myObject.get('s1')); // should be "a"

// check if the f2 chaining is working
myObject.f1('b').f1('c'); // f1 after f1
alert(myObject.get('s1')); // should be "c" -> changed on last f1 function

// Check if the f2 function is working
myObject.f2('a');
alert(myObject.get('s2')); // should be "a"

// check if the f2 and f1 chaining is working
myObject.f2('b').f1('c').f1('d').f2('e'); // f1 after f2, f1 after f1 ...

alert(myObject.get('s1')); // should be "d" -> changed on last f1 function
alert(myObject.get('s2')); // should be "e" -> changed last f2 function

// check the chain with that() -
myObject.that('b').f1('a').f1('z'); // f1 chained after f1
alert(myObject.get('s1')); // should be "z" -> changed on last f1 function

redpajama_set_name: RedPajamaStackExchange


If your premises are dirty and your staff are sloppy and unprofessional, then the answer to the question is yes – you are wasting your promotion.
Your promotion can be good. Your products and services can be good. If your staff are sloppy and unprofessional and your place of business is messy or dirty, your business will struggle.
Think about it. You see an ad or receive a promotional mailing or emailing from a business and you decide you're going to check them out. You arrive and the place is noticeably dirty. Do you want to stay? Do you want to give them your money?
What do you think when you walk into a business and though the space is neat and clean, the employees you meet look like they just rolled out of bed, having slept in the clothes they're wearing? What if they don't even seem to notice you walked in?
Kills the whole experience doesn't it? For me that kind of thing could cost the restaurant a star on my Yelp review.
These things cause your promotion dollars to be wasted and hurt your brand.
Even if you can't afford the most elegant furniture, carpeting or art work, you can always afford to dust, vacuum, sweep, mop and keep your restrooms supplied. If you can't provide uniforms for your staff you can insist on specific standards of dress that include clean, pressed clothes.
When your business is a clean and comfortable place for your customers and your staff are neat, well-groomed and professional they will come back. They will more likely refer their friends and family.


Puffer jacket from Prada. Detachable hood with drawcords and cord stops. Zip closure on the front, two slanted front pockets with zip closure and one chest pocket with hidden zip closure and triangle enamel metal logo. Multiple inner pockets. Elasticated cuffs and curved hem with drawstrings for an adjustable fit.
Black jacket made of 100% polyamide.
Straight fit. Fits true to size. Model is 187 centimeters and wears size 48.


Monterey Complete Disease Control is an OMRI listed biofungicide and bactericide for organic gardening. For control of plant diseases in home gardens: vegetables, ornamental and fruit trees, shrubs, lawns, flowers, bedding plants and potted ornamental plants. Use as foliar spray or soil drench. Can be used up to day of harvest. Broad spectrum disease control.


Thing for me here is that fundamental tech for peripherals is around the corner, in more than one fashion, and even with some mobos seeming faking the access speeds with bolted on controllers, £300 for what could be "older tech" (in the peripheral pov) is not a sound idea.
I do agree however that because of the new SATA III standard just around the corner it's going to be hard to sell this 'older' tech.
Loving mine 759 runs great.
With mobos now, we could be on the verge of a double set of standards that will be with us for a long time. Pretty much a b1tch back in the day if u got a mobo with USB1.1 when USB2.0 was just coming out. Similarly with SATA3. If u spend zillions on SSDs with a SATA2 controller, u could be upset.
So u'd be happy to spend £300 on the mobo and pci/e cards to have the SATA3 & USB3 that ur m8 gets on a cheaper mobo ?
I'm with Rasta, a £300 board released now is almost idiocy. With SATA III and USB III on the way, why would anyone in their right make such a large investment in something so handi-capped?
It's not a reflection on the (as usual), excellent review, but it is something to think about.
Agree with that too, but i can`t wait to see how USB 3.0 and SATAIII will perform.


text:
La VN750, también conocida como la Vulcan 750, y la VN700, Vulcan 700 en el mercado de EE. UU., es una motocicleta  con motor de 750 cc de tipo crucero hecha por Kawasaki desde 1985 hasta 2006. La Vulcan 750 fue la primera motocicleta para crucero y la primera con motor de 2 cilindros en V de Kawasaki. Fue introducida a finales de 1984 como el modelo de 1985. Formaba parte de la línea de motocicletas Kawasaki Vulcan.

Historia
Kawasaki introdujo la clase de motocicletas Vulcan de 750 cc en 1985. Debido a la tarifa que los EE. UU. cobraba a la importación de motocicletas de Japón de más de  700 cc, el modelo inicial para el mercado de EE. UU. limitaba el motor a 699 cc y se llamaba Kawasaki Vulcan 700. La tarifa fue revocada en 1986, y todas las motocicletas a partir de ese año hasta que su producción terminó en 2006 fueron de 749 cc, cambiándose otra vez su nombre para EE. UU. a Vulcan 750.

Información general
La VN750 se mantuvo prácticamente sin cambios a lo largo de los 22 años que estuvo en producción, con solo pequeños ajustes a los componentes y los esquemas de pintura de los distintos años. La VN750 era única en su clase al tener una más confiable transmisión de eje cardán, normalmente usada solo en las motos de crucero más grandes. La motocicleta tenía también enfriamiento al motor por líquido, DOHC, motor en V capaz de producir 66 CV y una entrega de par motor de 47 libras-pie prácticamente plana a lo largo del total del rango de rpms, aunque es sabido que la potencia publicada por Kawasaki era menor en un 8-10% que las mediciones reales en dinamómetro que obtenían distintos laboratorios. La moto estaba configurada para que el piloto la montara en una posición erguida, asiento  "king/queen seat" y respaldo de fábrica para el pasajero. La VN750 también tenía shocks de aire ajustables al frente y shocks con válvulas de 4 vías atrás.

Referencias

Vulcan 750
Motocicletas tipo crucero
Vulcan 750

redpajama_set_name: RedPajamaWikipedia


This time, Nick DiPaolo tells us about an experience he had early on in his career.
Be sure to follow The Laugh Button on Twitter. Like us on Facebook and sign up for our newsletter for all comedy updates.


text:
71342694 - The Mutspitze 2294 m above sea level, the local mountain of Dorf Tirol with a view of Merano and the Adige Valley in South Tyrol.
71342697 - The Mutspitze 2294 m above sea level, the local mountain of Tirolo in the Texel Group Nature Park, in South Tyrol.
71342698 - Ascent to the Mutspitze, the local mountain of Dorf Tirol, near Merano in South Tyrol.
71342699 - The Rötelspitze 2,625 m above sea level in the Texel Group Nature Park, with a view of Merano and the Adige Valley in South Tyrol.
71342700 - Mountain hiking in the Texel Group Nature Park in the Spronser Lakes area, the largest high-alpine lake district in Europe
71342701 - Mountain hiking in the Texel Group Nature Park, the Spronser Lakes area, the largest high-alpine lake district in Europe. The Michsee gets its name because of its location, it remains frozen until the beginning of July.
71342702 - Mountain hiking in the Texel Group Nature Park in the Spronser Lakes area, the largest high-alpine lake district in Europe. The Langensee, the longest of all twelve lakes.
71342703 - Mountain hiking in the Texel Group Nature Park in the Spronser Lakes area, the largest high-alpine lake district in Europe. The Michsee gets its name because of its location, it often remains frozen until the beginning of July.
71342705 - Mountain hiking in the Texel Group Nature Park in the area of the Spronser Lakes, the largest high-alpine lake district in Europe, which includes twelve lakes. In the picture the Kessel and Schiefersee.
71342706 - The South Tyrolean Texel Group Nature Park, the Spronser Lakes area, the largest high-alpine lake district in Europe. The Langensee, the largest of all twelve lakes.
71342708 - South Tyrolean nature park Texelgruppe, the area of the Spronser Lakes, the largest high alpine lake district in Europe, which includes twelve lakes.
71342709 - Mountain hiking in the Texel Group Nature Park, the Spronser Lakes area, the largest high-alpine lake district in Europe. The Langensee, the longest of all twelve lakes.
71342711 - Mountain hiking in the Texel Group Nature Park, the Spronser Lakes area, the largest high-alpine lake district in Europe. The Grünsee lies at 2,338 m above sea level and is a hydrological natural monument.
71342717 - In the South Tyrolean Texelgruppe Nature Park, near the Pfitscher and Kasersee lakes, there is the Oberkaseralm, which is open in summer.
71342720 - In the South Tyrolean Texel Group Nature Park, the high alpine pastures are farmed with goats, sheep and individual cattle, just like around the Oberkaseralm.
71342727 - Mountain hiking in the South Tyrolean Texel Group Nature Park, descent from the Hochgangscharte 2400 m above sea level, with a view of the Vinschgau.
71342728 - South Tyrolean nature park Texelgruppe, from the Tauferscharte view into the Vinschgau.
71342730 - Mountain hiking in the Texel Group Nature Park, in the area of the Spronserseen, the largest high alpine lake district in Europe.
71320421 - Sunrise at the Rose Garden, Dolomites, UNESCO World Heritage Site, South Tyrol, Italy
71320485 - The "primeval larches, the more than a thousand year old larches in the Ultental, South Tyrol, Italy
71320422 - St. Magdalena, with the Odle Group, in Villnösstal, UNESCO World Natural Heritage, South Tyrol, Italy
71320486 - The Rötlspitz in the Texelgruppe Nature Park, Dorf Tirol, South Tyrol, Italy
71320487 - The earth pyramids on the Renon, natural monument, South Tyrol, Italy
71320426 - St. Gertraud Cemetery, in the Ultental, South Tyrol, Italy
71320428 - Ski area in the Ortler area, Sulden, Vinschgau, South Tyrol, Italy
71320431 - Sunrise at the rose garden, UNESCO World Natural Heritage, Dolomites, South Tyrol, Italy
71320495 - The earth pyramids, natural monument at Oberwielenbach, Percha, Puster Valley, South Tyrol, Italy
71320432 - Wuhn Weiher under the rose garden in the South Tyrolean Dolomites, Tiers Valley, UNESCO World Heritage Site, Italy
71320433 - Wuhnweiher under the rose garden in the South Tyrolean Dolomites, Tiers Valley, UNESCO World Natural Heritage, Italy
71320497 - Winter landscape on the Rittner Horn with a view of the Dolomites, South Tyrol, Italy
71320434 - Karersee, natural monument under the rose garden, in the South Tyrolean Dolomites, UNESCO World Natural Heritage, in Eggental, Italy
71320441 - The Karersee, natural monument under the Latemar, in the South Tyrolean Dolomites, UNESCO World Natural Heritage, in the Eggental. Italy
71320443 - From Söllnspitz, view of the evening light of the Rosengarten group, UNESCO World Natural Heritage, in the South Triol Dolomites, Tiersertal, Italy
71320445 - Cows on the summer pasture on the Schlern with the rose garden in the background, UNESCO World Natural Heritage, Tiersertal, Italy
71320446 - Zirmtalsee, natural monument, in Vischgau, Sütirol, Italy
71320448 - Moonrise at Latemar, in the South Tyrolean Dolomites, UNESCO World Natural Heritage, Eggental, Italy
71320450 - The Armentara meadows under the Kreuzkofel in the South Tyrolean Dolomites, UNESCO World Natural Heritage, Gadertal, Italy
71320455 - The Antholzersee, natural monument in the Anthozertal, Sütirol, Italy
71320456 - The Falscherschlucht, natural monument in Lana, South Tyrol, Italy
71320457 - The Passer in the headwaters of the rear Passeier Valley, South Tyrol, Italy
71320458 - Linden tree in St. Katrein, Avelengo, South Tyrol, Italy
71320461 - The Bletterbach Gorge, natural monument and UNESCO World Natural Heritage in Aldein, South Tyrol, Italy
71320463 - Lake Braies, natural monument and UNESCO World Heritage Site in the Braies Valley, South Tyrol, Italy
71320465 - The Karersee under the rose garden in the South Tyrolean Dolomites, natural monument and UNESCO World Natural Heritage in Eggental, South Tyrol, Italy

redpajama_set_name: RedPajamaCommonCrawl


I primarily serve donor families and donor groups, grantmakers, and the associations and advisors that serve them. I've staffed, consulted with, and volunteered for a wide variety of philanthropy efforts, helping them answer four essential questions: For What Purpose?; With Which Resources and Tools?; With What Plan of Action?; and For What Results and Learning?.
American Endowment Foundation – In May 2016, I was named a member of AEF's Philanthropic Advisor Referral Program. AEF is the nation's largest independent sponsor of donor advised funds.
Ekstrom Alley Clontz & Associates – I am a part-time Senior Consultant with this strategic management consulting firm with deep experience in working with community foundations and their associations.
Impact Finance Center – In September 2015, I was named a Senior Advisor. The Center provides impact investing research, education, and advisory services to philanthropists, foundations, family offices, and others.
National Center for Family Philanthropy – I am a subscriber to NCFP's resources, and am a Senior Program Consultant for its work with families and with community foundations.
I'm a specialist in some philanthropic, nonprofit, and social impact topics, and a synthesizing generalist in many others. To best serve a client, I can easily call on trusted collaborators through those affiliations and through my memberships in the Purposeful Planning Institute and National Network of Consultants to Grantmakers.


text:
CPS decides no charges to be brought following death of Habib Ullah after stop and restraint by police
The Crown Prosecution Service (CPS) has today announced that no charges are to be brought against Thames Valley police officers and their solicitor in the case of the death of Habib 'Paps' Ullah.
Habib Ullah, a 39 year old father of three, died when he was stopped and searched by police on 3 July 2008 in the Sharrow Vale area of High Wycombe. In the course of being forcibly restrained, Habib suffered a cardiac arrest. He was taken to hospital but attempts to resuscitate him were unsuccessful.
An investigation into his death was carried out by the Independent Police Complaints Commission (IPCC) which cleared the police of wrongdoing.
The inquest into his death began in December 2010 and police officers giving evidence admitted when questioned by the family's barrister that they had taken out key passages from their statements on the advice of a Police Federation solicitor. Consequently, the coroner decided to discharge the jury.
Five police officers were interviewed by the IPCC under criminal caution. The solicitor advising the officers was also interviewed under criminal caution in relation to an offence relating to perverting the course of justice. The family have made a complaint about her conduct to the Solicitors Regulation Authority.
In February 2014 (three years later), the IPCC finally formally referred the file to the CPS. The following charges were considered: Manslaughter by gross negligence; Misconduct in public office; S39 Assault; Acts tending and intended to pervert the course of justice; Perjury.
Nasrit Mahmood, sister of Habib Ullah said:
"We are not happy that the CPS has decided not to charge those police officers who I believe were responsible for Habib's death. A healthy man dies at the hands of the police within minutes. Then at the inquest they are caught out withholding evidence in front of everyone including the coroner and jury. These police officers did not give a full account at the inquest. It is impossible for us to understand how the CPS have reached this decision. This is not justice for us and we will not give up until justice is served and that is a promise."
Zia Ullah, Justice4Paps said:
"We are disappointed with this decision after having come so far, and despite clear discrepancies in the officers accounts at the inquest in December 2010 we are surprised that the CPS have decided there is insufficient evidence to prosecute the police officers involved in Habib's death and that it is not in the public interest to do so. The idea of a fresh inquest into my cousin's death does not give us much hope given what happened at the last one."
Helen Shaw, co-director of INQUEST said:
"This is a disappointing and worrying decision that undermines family and public confidence that police will be properly held to account. It has been a six year wait for the truth and justice so far, with the family being let down at nearly every turn. The delays in this case are unacceptable and it is to be hoped that the long overdue inquest will happen promptly and will be a thorough and honest investigation that establishes the truth about how Habib Ullah lost his life that day."
Marian Ellingworth, solicitor for the family said:
"This is a very disappointing decision. The family have displayed great dignity and waited patiently for nearly four years since the inquest was adjourned in December 2010 only to be told there will be no prosecution. In my view, it exposes the failure of the criminal justice system to hold police officers to account and urgent reform is required, in particular of the manslaughter offences, so that the threshold for bringing prosecutions in such cases is more achievable. I will be advising my clients about potential remedies open to them and we will be meeting with the CPS and seeking a full explanation for their decision making.
"I am also very disappointed that the CPS has failed to charge the officers and solicitor for the significant changes made to their statements which were only admitted at the inquest. Such conduct by public servants under a duty to conduct themselves with integrity is highly reprehensible and it is to be regretted that the CPS does not consider that there is sufficient evidence to charge."
INQUEST has been working with the family of Habib 'Paps' Ullah since his death in July 2008. The family is represented by INQUEST Lawyers Group members Marian Ellingworth from Tuckers solicitors and barrister Sean Horstead of Garden Court Chambers.
The Justice for Habib 'Paps' Ullah/Justice4Paps campaign was set up in July 2008 after the death of Habib during a routine stop and search in a car park in High Wycombe. So far the campaign in partnership with family members have organised thirteen vigils in the town centre/Police station, a demonstration through the town, five public meetings, and attended national and regional demonstrations against deaths in custody. For further information please click here
Zia Ullah, family contact : 07597873614
Saqib Deshmukh, Volunteer information worker: 07766464358
Marian Ellingworth, Tuckers solicitors: 020 7388 8333
Black, Asian and minority ethnic groups


text:
How to Create a Parenting Plan that Works
A parenting plan is a contract that parents can enter into (or request the Court to create) in lieu of a typical custody and parenting time order. The purpose of a parenting plan is to mitigate the amount of conflict that can arise between parents when custody and parenting time is an issue. Unlike a typical custody and parenting time order, a parenting plan can reduce the polarizing effect that custody labels may have for parents and can set apart many details that go into parenting a child that are not usually contemplated in a custody and parenting time order.
What Does a Parenting Plan Include?
According to Minnesota Statute 518.1705 a parenting plan must include the following:
A schedule of the time each parent spends with the child
A designation of decision-making responsibilities regarding the child
A method of dispute resolution
With a parenting plan, parents have the ability to agree to use alternative terminology regarding the custody of their children. For example, some parents believe that saying one parent has sole physical custody makes it seem like that parent has an advantage over the other or "won" on the issue of custody. A parenting plan can say that the parents are not going to use the label of physical custody and instead set apart the decisions the parents will make together and which parent will have the home designated as the primary residence for the child. The parenting plan will contain what the custody label would be in the event that a custody label is necessary, but otherwise, there is no label.
A final judgment and decree must designate whether the parents have joint legal custody or joint physical custody or which parent has sole legal custody or sole physical custody, or both. This designation is solely for enforcement of the final judgment and decree and has no effect under the laws of this state, any other state, or another country that do not require this designation.
For example, if a parent moves with the child out of the state of Minnesota to California, the parent in California may need to inform the child's school of the custodial arrangement. In this scenario, if the parents in their parenting plan had no custody labels, but the parent in California needs to demonstrate to the school that the parent has the authority to enroll the child, receive information from the school, etc. then the parent has the label to do so. The designation of custody under the parenting plan does not give the parent those rights under that designation, but rather, is used to enforce the judgment and decree.
Making a Parenting Plan that Works
So how do you make a parenting plan that "works?" First, as listed above, the parenting plan needs to conform to the requirements of the statute. From there, it is up to the parents entering into the parenting plan to decide what will work and what will not work.
The benefits and drawbacks of a parenting plan are in the details of a plan. Parents can be extremely detailed in their parenting plan, but if they are too detailed, they might come to agreements that later are not beneficial to the child or plausible for the parents.
For example, say the parties agree that the cost of the child's extracurricular activities will be shared equally between both parties. As the child grows up, the child may decide to play hockey and will be required to attend practice before and after school. This would severely cut into one of the parent's parenting time and work schedule. In addition, it is extremely expensive even if it is shared by the parents equally. Since there are details that effectively govern this issue, the only way that a party is going to be able to modify this issue is through a court order.
Parties need to be careful about entering into Parenting Plans, because the modification of decision-making authority is governed by the same high standard that is used to modify custody.
Avoiding Future Conflicts
A parenting plan that works is one that the parents spend a lot of time discussing. It works best when the parties agree to work together for the best interests of their child. A parenting plan allows parents to make decisions about their child when they are represented by counsel and acting rationally, rather than in the heat of the moment. When a majority of decisions about a child are made before any argument can ensue, sometimes it will prevent misunderstandings and arguments because the outcome is predetermined.
If you have any questions about parenting plans, one of our experienced child custody lawyers would be happy to speak with you. Give us a call for a free consultation at (612) 294-2200.
Mike Lammers2020-08-27T16:38:49-05:00May 14, 2019|Categories: Family Law Blog|Tags: divorce, parenting plan|
How Is the Court Handling Parental Disagreements on COVID-19 Vaccines for Kids?
What are the different types of Alternative Dispute Resolution in family court cases?
What Is the Advanced Child Tax Credit?
What Is a Guardian Ad Litem?
Website, content, and images ©


text:
Q: Summing up two lists of tuples on a condition We have two lists of tuples of probably different length which look like this:
list1 = [(15339456, 140), (15340320, 412), (15341184, 364), (15342048, 488),
         (15342912, 272), (15343776, 350), (15344640, 301), (15345504, 159),
         (15346368, 224), (15347232, 241), (15348096, 223), (15348960, 175)]

list2 = [(15339456, 1516), (15341184, 2046), (15342048, 2400), (15342912, 8370),
         (15343776, 2112), (15344640, 1441), (15345504, 784),  (15346368, 1391)]

The first element of each tuple is the key and is unique in each list. We cannot assume that the key is existing in both lists. One list can have elements with keys that are not in the other. Now we want to sum up the second value of the tuple if its key is in both lists, otherwise we take the complete tuple.
Result:
[(15339456, 1656),
 (15340320, 412),
 (15341184, 2410),
 ...
]

Usually lists are summed up using zip like:
for tup1, tup2 in zip(list1, list2):
    sum_ = tup1[1] + tup2[1]
    lst.append((tup1[0], sum_))

That would work if both lists were of the same length and each key would exist in both lists, which is not the case.
Is there a nice way to build a condition in this for loop? Or probably a pythonic solution on this one? Two for loops and element wise comparing seems not quite satisfying.

A: An obvious solution is to create a result dictionary, then add all values from the first list and then all values from the second list:
from collections import defaultdict

result = defaultdict(int)
for key, value in list1:
    result[key] += value
for key, value in list2:
    result[key] += value

# convert dictionary-like to list of tuples if you want
result = list(result.items())

Using a dictionary as result spares you from doing a linear search to find the key to which to add a value (leading to an overall quadratic complexity), and a defaultdict in particular spares you from doing
if key not in result:
    result[key] = 0

to initialize the result before adding the first value.
You can generalize this to any number of input lists by using itertools.chain:
from collections import defaultdict
from itertools import chain

input_lists = [list1, list2]

result = defaultdict(int)
for key, value in chain.from_iterable(input_lists):
    result[key] += value

Visually there is now only one for loop but under the hoods it is doing the same.


I'm very glad that you have taken this first, often difficult step towards finding a therapist to help you. People turn to therapy for many reasons, and each therapist has a different focus and approach. To optimize your treatment, it's important that you select the person who can best help you, so I encourage you to speak and meet with me, if you feel we may be a good match. My approach is varied, and depends on your specific needs.
You are a first responder or healthcare professional being affected by trauma or PTSD?
"Something" is missing in your life. You have relationship/marriage issues.
You have an addiction, or are the child of an addict or alcoholic.
You would like to work through some important issues prior to saying "I do".
You are struggling with a palliative or chronic illness, or supporting a loved one who is.
Grief, depression or anxiety has become a huge weight.
You are grappling with issues that are rooted in your spiritual or religious beliefs.
I'll help you to begin healing the wounds that are causing your pain, and move towards peace and happiness.


text:
Q: timestamp with offset +05:30 need to be converted into yyyy mm dd hh mm ss format using mongo using mongo aggr i need to convert an epoch to human-readable date eg my epoch :1563557673 which i want in yyyy mm dd hr mm ss and offset +05:30`
displayTime: moment(getReferral[0][i].timeStamp * 1000)
                        .utcOffset("+05:30")
                        .format("YYYY-MM-DD hh:mm:ss A")


text:
Home / GECOL operates second turbine of khums power station
GECOL operates second turbine of khums power station
November 28, 2020 - 11:36
Written by: LibyaMohammed
The General Electricity Company of Libya (GECOL) has announced that the second turbine of Khums power station is connected to the public grid, with a capacity of 260 megawatts, after a hiatus of more than two years.
GECOL said in a statement that this achievement will contribute to supporting and stabilizing the electrical grid and reducing the load shedding hours.
The electrical power grid has recently improved greatly, with a remarkable decrease of the hours of load shedding in all cities and regions, after witnessing blackouts for more than 12 hours per day.
Khums power plant
Al-Khums emergency power station


text:
CharlieCharlesRDG
Death of the Nightclub?
Originally written and published for AltReading on 11 August 2015
What is the first thing which comes to mind when you hear the word 'utopia'? For some it is an imagined perfect place, or state of things, and for the majority of people in Reading you are more than likely to reminisce about the two-tier superclub which resided on the outskirts of Reading in Calcot back in the mid to late nineties.
If Utopia was still open today, it would have been running for twenty-one years, and once upon a time was regarded as the go to venue for a drink or post 11pm entertainment.
In 1999 when The Oracle opened, as well as offering shops and restaurants, it came along with themed bars such as the infamous Brannigans and Bar Med which were open to the early hours, and were easily accessible for everyone due to its central location. Around the same time, the short-lived Matrix nightclub opened its doors and drew in clubbers from all over Berkshire, and Southern England, and a number of additional bars sprung up along Friar Street and town such as the Broadwalk, The Litten Tree and Revolutions. Not forgetting the likes of the already established late night venues such as Club RG1s, Nue Valbones and Level One to choose from.
At one time during the peak of this period it was estimated that around 20,000 people would descend on to Reading for a night out, mainly at the weekends. However over a short period of time, all this newfound choice of places to go in the centre of town would begin to have a knock on effect, firstly on Utopia.
The choice was pretty simple, you could pay a mildly expensive taxi ride to the outskirts of town for your nightclub fix, or you could stay in the town centre with easy access for the majority of clubbers to get home from a central location.
Utopia finally closed its doors in 2001 due to competition from town centre venues, followed closely by Club RG1s, Nue Valbonnes, Po Na Na's and others who called it a day on the town's dancefloors shortly afterwards. And then in 2006 the licencing laws were changed which allowed town centre venues to be open much longer. Did this spell the beginning of the end of nightclubs in Reading and the rest of the country? According to a recent report 50% of nightclubs in Britain have closed their doors over the last decade.
Lee Buxton, who was one of the main resident DJs at Utopia during its heyday says that this recent statistic is no surprise to people who still work in the nightclub industry in this country:
"Since 2006 smaller venues have been able to open later meaning there is no need to go to a club if you want a late drink. There are plenty of smaller venues where you can do that. Why would you want to leave town and take an expensive taxi ride to a nightclub? It's really only the big-room venues that have suffered over recent years such as Utopia, simply because there is now more choice in town. Clubland isn't dying, it's just become more diluted and fragmented".
Today in town we have various venues staying open well into the night particularly at the weekends such as Yates and the Walkabout offering a more mainstream affair, whilst the likes of Club20 and The Purple Turtle which has undergone a very noticeable transformation in the last year offering late night specialist and underground music events, and not forgetting The After Dark Club which is still going strong as an alternative venue after all these years.
Has the nightclub finally seen the light of day on the dancefloor in town? Do you still go out 'clubbing'? Do you prefer the mainstream bars, or smaller specialist clubs and gig venues? Has it become too expensive? Do you stay in? Do you go out in town for the music or to socialise, or both? And what was your favourite nightstop in town from back in the day?
Ethnic Connoisseur of 🎶 📻 💪🏾🍗🌞🌎⚽
Urbanmusic
More from CharlieCharlesRDG


text: Q: Can OCIExtractToInt be used to get parameters from query? I wonder if the C-Functions OCIExtractToInt and other OCIExtractToXXX provided by OCI could be used to extract data from statements? And if so how this could work? Sadly I could not find any example where something like this is done. Additionally the Oracle documentation does not help much at this point.


text:
Research 2022, Eyewear Market Size Is Projected to Reach USD 172.42 Billion in 2028 while exhibiting a CAGR of 6.0%
by Globe Newswire
August 2, 2022 6:42 AM | 8 min read
Pune, India, Aug. 02, 2022 (GLOBE NEWSWIRE) -- The global eyewear market size was USD 105.56 billion in 2020. The market is projected to grow from USD 114.95 billion in 2021 to USD 172.42 billion in 2028 at a CAGR of 6.0% in the 2021-2028 period. This information is published by Fortune Business Insights™ in its report titled, "Eyewear Market, 2021-2028."
As per our expert analysts, in the present situation, people desire to utilize eyeglasses owing to the increasing consciousness about optical conditions, pooled with the rising occurrence of vision irregularity. For example, in 2020, as per the Lancet Global Health, it is anticipated that approximately 43.3 million people were blind, out of which 23.9 million were evaluated to be female.
Get Sample PDF Brochure:
https://www.fortunebusinessinsights.com/enquiry/sample/eyewear-market-101749
Eyewear Market Report Scope :
Report Coverage Details
Forecast Period 2021 to 2028
Forecast Period 2021 to 2028 CAGR 6.0%
2028 Value Projection USD 172.42 Billion
Market Size in 2020 USD 105.56 Billion
Historical Data for 2017 to 2019
No. of Pages 120
Drivers and Restraints
Rising Occurrence of Eye Health Concerns to Bolster Market Growth
On a global foundation, there is an upsurge in the alertness linked with optical conditions in emerging nations, which is anticipated to inflate the acceptance of eyeglass products. A greater population of individuals undergoing ocular ailments is projected to be one of the significant factors impacting the eyewear market growth.
On the basis of predictions given by the World Health Organization in the year 2015, by 2020, there will be around 2.2 billion novel frequencies of myopia worldwide. In nations such as South Korea, Japan, and China, individuals embrace colored contact lenses for augmented aesthetic intention.
We provide reports which are conducted with an all-inclusive examination approach that majorly emphasizes delivering precise material. Our scholars have applied a data triangulation method which further assists us in offering trustworthy estimations and testing the dynamics of this market, accurately. Further, our analysts have received admission to numerous international as well as regional funded registers for providing the up-to-date material so that the stakeholders and business professionals invest only in essential zones.
To get to know more about the short-term and long-term impact of COVID-19 on this market, please visit:
https://www.fortunebusinessinsights.com/industry-reports/eyewear-market-101749
Frequently Asked Questions :
Is the eyewear industry growing?
Eyewear Market size was USD 105.56 billion in 2020. The market is projected to grow from USD 114.95 billion in 2021 to USD 172.42 billion in 2028 at a CAGR of 6.0% in the 2021-2028 period.
Who are the key players in the eyewear market?
Alcon (Part of Novartis AG) (Switzerland) , EssilorLuxottica (France) , CooperVision (U.S.) , Johnson & Johnson Services, Inc. (U.S.) , Bausch Health Companies Inc. (U.S.) , Carl Zeiss (Germany) , Fielmann AG (Germany) , Safilo Group S.p.A (Italy)
What are Key Factors Raising the Market?
Eyewear Market to Reach USD 172.42 Billion by 2028; JINS Launches JINS&SUN in the U.S. with 29 Different Shapes and 84 Styles
Buying Rate of Glasses and Sunglasses Sternly Affected by COVID-19 Pandemic
The regional spread of the coronavirus has considerably impacted the sales of eyewear, such as sunglasses, contact lenses, and prescribed eyeglasses, and sunglasses. Moreover, government organizations across the world had inflicted stringent lockdown regulations in the early phase of the pandemic spread. This resulted in the shutdown of ophthalmic clinics, as well as retail stores selling glasses for a prolonged period. These factors have hampered the demand for eyewear amid the pandemic.
On the basis of product type, the market can be segregated into spectacles, sunglasses, and contact lenses. The spectacles segment was anticipated to hold the largest share in the overall market in 2020. The segment is estimated to uphold its dominating position at the end of the forecast period. It generated 79.1% in terms of share in 2020.
By distribution channel, the market is classified into retail stores, online stores, and ophthalmic clinics. In terms of region, the market is categorized into North America, Asia Pacific, Latin America, the Middle East & Africa, and Europe.
Speak To Our Analyst:
https://www.fortunebusinessinsights.com/enquiry/speak-to-analyst/eyewear-market-101749
North America to Lead Backed by Surging Approval of Vision Care Products
North America held the maximum eyewear market shares and formed an income worth USD 30.87 billion in 2020. The growing approval of vision care products is assessed to increase the growth of the market in this region.
Europe held the second-largest market share. Aspects such as the inclination towards superior eye care products, greater consciousness of ocular conditions, and surging ability to buy exclusive sunglasses are expected to fuel the market in European nations.
On the contrary, Asia Pacific is expected to follow the lead after North America in the global market for eyewear in terms of income by 2028.
Key Players such as Johnson and Johnson Services, Inc. and Alcon to Hold Major Market Shares
The market is greatly fragmented owing to the existence of both regional as well as international players. Principal companies are branched into the contact lens market and spectacles and sunglasses market. Moreover, Johnson and Johnson Services, Inc. owns the maximum share in the global contact lens market, tailed by Alcon.
March 2021: JINS eyewear declared the unveiling of the JINS&SUN sunglasses brands, especially in the U.S., with 29 diverse designs as well as 84 styles.
List of Key Players Covered in the Report
Alcon (Part of Novartis AG) (Switzerland)
EssilorLuxottica (France)
CooperVision (U.S.)
Johnson & Johnson Services, Inc. (U.S.)
Bausch Health Companies Inc. (U.S.)
Carl Zeiss (Germany)
Fielmann AG (Germany)
Safilo Group S.p.A (Italy)
Other Prominent Players
Quick Buy - Eyewear Market
Research Scope
Introduction of New Products / Approvals (by Major Players)
Epidemiology of Ocular Disease - For Key Countries
Key Industry Developments - Mergers, Acquisitions, and Partnerships
Snapshot: U.S. Reading Glasses Market
Key Trends in the Eyewear Market
Impact of COVID-19 on the Global Market
Global Eyewear Market Analysis, Insights and Forecast, 2017-2028
Key Findings / Summary
Market Analysis, Insights and Forecast – By Product Type
Toric
Market Analysis, Insights and Forecast – By Distribution Channel
Ophthalmic Clinics
Market Analysis, Insights and Forecast – By Region
North America Eyewear Market Analysis, Insights and Forecast, 2017-2028
Market Analysis – By Product Type
Market Analysis – By Distribution Channel
Market Analysis – By Country
Toc Continue..
Ask for Customization of this Report:
https://www.fortunebusinessinsights.com/enquiry/customization/eyewear-market-101749
Fortune Business Insights Pvt. Ltd.9th Floor, Icon Tower, Baner –
Mahalunge Road, Baner, Pune-411045,
Posted In: M&ANewsHealth CareContractsPress Releases


Easter Sunday: I am not over it.
Basically I woke up on Sunday, threw some resurrection rolls in the oven (it is officially the Norman family Easter thing), put the girls in their matching easter outfits (thanks Grandma!), and prayed that the Holy Spirit would meet me at the park. I broke my Lenten fast with some glorious Land of a Thousand Hills coffee (Yeah, that: lent fast post coming up Thursday), had some conversations that started with Jesus is Risen! and grabbed the paper bulletins we only use when we are outside (1027 tries to be Green like God). I am glad I grabbed an extra one because the Rooster has entered what my cousin Kim calls "the dog stage" because that thing got chewed up faster than a chocolate bunny.
I have sung that song probably every Easter Sunday for as long as I could talk. But this Sunday I really read the words. Where oh death is now thy sting? Because of Jesus Christ, not just his death but also his resurrection, I can talk smack in the face of death y'all! You see that satan, you see that death IN. YOUR. FACE. My savior, he defeated death. DEATH! This is a big deal. This is THE DEAL! I know I am overusing the caps lock and the exclamation points. But I can't help shouting about it. MY SAVIOR LIVES! HE DEFEATED DEATH FOR ME!
I was reminded of the funerals of the people I love: my cousin Rachel and my Grammy, my Great Grandma's Burgess and Michael . It is still painful that they are no longer here. I don't want to gloss over the pain, especially of my Aunt and Uncle who had to bury a daughter. But I get to mourn with hope, because Jesus Christ defeated death for them too! Because Jesus lived, so too can they live. This is not over. My Jesus got the last word, the last laugh. I too will one day get to give a nana-nana-boo-boo to death.
Part of me wonders why we save that message for Easter Sunday. It is a big freaking deal people! Jesus Christ is ALIVE! How could there be a more important message than that? Next week and the week after, and the week after that. Let's come together and simply remind each other of the fact that our savior lives. I am not over it. And I don't plan to be for quite some time. Jesus is alive. It is a big deal.
This entry was posted in Community, Easter, Faith, Grace, Jesus, Promises, Redemption and tagged alive, blessings, christianity, Church, Easter, I believe, Jesus, promises, Redemption, reflection, Resurrection by Abby Norman. Bookmark the permalink.
It is the BIGGEST deal! Amen to this post.
Made like him like him we rise. Alleluia.
Ours the cross, the grave, the skies. Alleluia.


The SCTE Foundation is a non-profit 501(c)3 organization dedicated to the advancement of knowledge by funding the technical and business education of industry professionals to further fuel the growth and strength of our industry as a whole. The SCTE Foundation is a vital resource dedicated to providing educational grants across all professional levels designed to help our industry stay ahead of a rapidly changing landscape. You can share in the Foundation's mission; a mission we all benefit from; a mission that requires financial support and a commitment to better ourselves and our industry.
The Mission of the SCTE Foundation is to increase the technical, business and leadership skills of the telecommunications engineering workforce, promote technology and engineering in the early stages of education, attract and recruit women and minorities into an engineering career, and position the telecommunications industry as a desirable career opportunity for aspiring young people through grants and innovative educational research initiatives.
You can make a difference. Everyone can benefit. Consider the impact of your giving. You can fund an online course, enable a complete higher-education experience, advance a career or advance our industry. The choice in giving is yours. The mandate to give is imperative. Please support the SCTE Foundation so it will be there for your employees, for the industry and for you, now and in the future.


text:
A  point-and-click grafikus kalandjáték, melyet a japán székhelyű Cherrymochi fejlesztett és a Square Enix Collective jelentetett meg. A Tokyo Dark 2017. szeptember 7-én jelent meg Microsoft Windowsra, melyet később macOS-, Nintendo Switch- és PlayStation 4-átiratok fognak követni. A játékos Itó Ajami nyomozó szerepét ölti magára, miközben az eltűnt partnere után kutat Tokió nagyvárosában.

A játék a Square Enix japán videójáték-kiadó "Collective" kurátorplatformjának egyik legsikeresebb projektje lett, így később a cég támogatásával felkerült a Kickstarter közösségi finanszírozási oldalra. A játék elkészítéséhez eredetileg 40 000C$-t kértek, azonban végül több, mint 225 000C$-t hoztak össze, így további fejezeteket, japán nyelvű szinkronsávot, egy új játékmódot, a rajongói fordításokat támogató eszközöket, illetve animált átvezetőjeleneteket is készíthettek.

Játékmenet
A Tokyo Dark egy kétdimenziós oldalra mozgó point-and-click grafikus kalandjáték visual novel horror elemekkel, nemlineáris rejtvényekkel, elágazó történetmeséléssel. A játékos döntései befolyással vannak a főszereplő,  személyiségrajzára, ami pedig kihatással van a detektívnőt körülvevő emberekre. Itó személyiségét az úgynevezett "S.P.I.N-rendszer" jegyzi, ami a főhősnő épelméjűségét (sanity), professzionalizmusát (professionalism), nyomozói készségét (investigative skill) és neurotikusságát (neuroticism) méri. Mindegyik személyiségjegyre más és más van kihatással — így például az épelméjűségre az irracionális döntések, a jelentéktelen tárgyak vizsgálata vagy a paranormális jelenségekkel való kapcsolatok vannak befolyással. Az épelméjűséget gyógyszerekkel ugyan lehet kezelni, viszont ez Itó nyomozói készségének rovására megy, mivel eltompítja érzékeit, így előfordulhat, hogy bizonyos nyomok felett átsiklik. A személyiségjegyek különböző szintjei eltérő lehetőségeket nyithatnak meg, így például az alacsony professzionalizmus nem éppen legális cselekményekre nyújt lehetőséget, de az alacsony épelméjűség hallucinációkhoz, majd végül idegösszeomláshoz is vezethet. A játék minden beszélgetésére kihatással vannak a személyiségjegyek, melyeknek több, akár harminc lehetséges elágazása is lehet ezek függvényében. A rendszer gyors döntést igényelő helyzetekre is befolyással van: a személyiségjegyek határozzák meg, hogy mennyi ideje van a játékosnak választania a lehetőségek közül.

A játékos döntései a Tokyo Dark cselekményére is hatással vannak, melynek összes tizenegy lehetséges befejezése van, egyenként 4–6 óra játékidővel. A játék első végigvitele után megnyílik a nagyobb kihívást nyújtó Déjà vu névre keresztelt "New Game Plus" mód, ahol Itó valóságérzete jóval alacsonyabb, mint a főjátékban. Ebben a módban új jelenetek és egy csak itt megnyitható befejezés is van.

Cselekmény
A játék jelentősebb része a modern kori japán fővárosban, Tokióban játszódik, ahol Itó Ajami (szinkronhangja: Aszama Hikage) nyomozó eltűnt partnere, Tanaka Kazuki után kutat. Kalandjai során találkozik a körözés alatt álló öngyilkos hajlamú Reinával, Mai Kavana szentélyszolgálóval, illetve Jukimura bűnügyi nyomozóval. A játék egyik melléktörténete Aokigaharában, az "öngyilkosok erdejében" játszódik és Reina múltjára derít fényt. A Tokyo Dark története szembesíti a játékost Tokió igazi borzalmaival, így az öngyilkosságokkal, a gyereksztárokkal, az intézményesített szexizmussal vagy a növekvő nacionalizmussal.

Fejlesztés
A játék írója, Jon Williams az egyetem elvégzése után Hazel Griannel alternatív valóságjátékokat tervezett és programozott. 2009-ben Japánba költözött, hogy ötleteket merítsen egy új interaktív történethez. Ugyan eredetileg 1–2 évet akart maradni, azonban a 2011-es tóhokui földrengés és a fukusimai atomerőmű-baleset személyes átélése után úgy döntött, hogy tovább marad, mivel a katasztrófa hatására további ihletet kapott a projektjéhez. Eközben megismerkedett Mahóval, akit feleségül vett, majd megalapították a Cherrymochi videójáték-fejlesztő céget Tokió közelében, Kamakura városától délre. A játék elkészítése során főleg szabadúszók képezték a Cherrymochi fejlesztőcsapatát, mivel a japán munkajogoknak hála rövid távra szerződött teljes munkaidőben foglalkoztatott munkaerőt igen nehéz felvenni. A játék fejlesztőcsapatának tagja volt Jon Williams tervező, író, programozó és környezeti művész, Laura "Moochirin" Jin szereplőtervező, Matt "Bison" Steed zeneszerző, Tyler Bradbury szereplőanimátor, Chris Krubeck szövegkönyvíró, Maho Williams producer és műfordító és Uresino Kimi regényíró. A játék anime stílusú átvezető jeleneteit a Graphinica animestúdió készítette el. A programot a Construct 2 játékmotor hajtja a Sprite DLight megvilágítási motorral kiegészítve. Ugyan a játék sikerétől függően további platformokra is át akarják portolni, azonban a Construct 2 csak a Microsoft Windows, a macOS és a Linux operációs rendszereket, illetve a Wii U videójáték-konzolt és az iOS és Android mobilplatformokat támogatja natívan, ezért a játékot átírhatják a Unity játékmotorra, ami az előbbieken felül a PlayStation 3, a PlayStation 4, az Xbox 360 és az Xbox One asztali, valamint a New Nintendo 3DS és a PlayStation Vita kézikonzolokat, illetve a BlackBerry 10, a Tizen és a Windows Phone mobiltelefonos operációs rendszereket is támogatja. A játék fejlesztését 2014 elején, több, mint 10 hónappal a Kickstarter-kampány 2015 májusi elindítása előtt kezdték meg. A Tokyo Dark a Heavy Rain és a Shenmue filmszerű történetmesélését vegyíti a Clock Towerhöz vagy a Blackwell Legacyhoz hasonló kétdimenziós oldalra mozgó point-and-click grafikus kalandjátékokkal, anime stílusú prezentációban. A játék a Higurashi When They Cry vagy a Corpse Party: Book of Shadows című visual novelekből, a 42 Entertainment alternatív valóságjátékaiból, számos korábban megjelent kaland- és horrorjátékból, a Törvény nevében, a Hannibal és a hasonszőrű modern amerikai filmdrámákból, az X-akták és a Twin Peaks televíziós sorozatokból, a Hetedik krimiből, a Marebito horrorfilmből, a Perfect Blue animefilmből, a film noir stílusból, valamint H. P. Lovecraft és Guillermo del Toro horrorműveiből, illetve nyugati és japán képregényekből, így Itó Dzsundzsi horrormangáiból is merített ötleteket, legnagyobb inspirációforrása a játékokon kívül azonban a 2011-es tóhokui földrengéssel és a fukusimai atomerőmű-balesettel járó borzalmak voltak. A játék zenei anyagát többek között az Autechre, a Boards of Canada, Clint Mansell, Merzbow, a Nine Inch Nails és Trent Reznor, a Rosemary's Baby zenei anyaga, Igor Stravinsky, a Pink Floyd és a Portal inspirálta.

Megjelenés
A Tokyo Dark 2017. szeptember 7-én jelent meg Windowsra, melyet később egy macOS-átirat fog követni. Az eredeti tervek szerint a játéknak 2016 októberében kellett volna megjelennie, azonban a Cherrymochi 2016. augusztus 26-án bejelentette, hogy nem bírják tartani a korábban megadott megjelenési dátumot, így 2017-re tolják el a játék megjelenését. A játékot először 2016. február 17–25-e között próbálhatták ki a támogatók egy zárt alfaverzió képében. A játékot szélesebb közönség előtt először 2016 áprilisában, az EGX Rezzed játékkiállításon demózták. A Tokyo Darkot a kiotói BitSummit játékkiállításon is bemutatták, ahol az elnyerte a fődíjat, illetve további két kategóriában is jelölve volt. Ugyanebben a hónapban a játék a San Diego Comic-Conon és a bécsi Radiuson is játszható volt. A játékot a következő hónapban a Square Enix a kölni Gamescomon is bemutatta. 2016 szeptemberében a játékot a Tokyo Game Show és az EGX, míg novemberben a Lisbon Games Week kiállításokra vitték ki. A játék a 2017-es EGX Rezzeden, a BitSummiton és a Tokyo Indie Festen is kipróbálható volt.

Díjak

Források

További információk
 A játék weboldala

 A játék a Kickstarteren

2017 videójátékai
Anime stílusú videójátékok
Független fejlesztésű videójátékok
Japánban fejlesztett videójátékok
Japánban játszódó videójátékok
Kalandjátékok
Kickstarter-projektek
Közösségi finanszírozású videójátékok
MacOS-játékok
Windows-játékok
Pszichológiaihorror-játékok
Steam Greenlight-játékok
Tokióban játszódó videójátékok
Videójátékok női főszereplővel
Visual novelek


text:
Who is Nelson Mandela
Nelson Mandela is a South African leader, who was the head of the African National Congress and its armed resistance group, Umkhonto we Sizwe. This group fought against the apartheid policies of South Africa. Mandela spent 27 years imprisoned on Robben Island for his political activities. Upon his release in 1990, Mandela asserted a policy of reconciliation and negotiation to end the racist policies of apartheid. He was the first fully representative, democratically elected president of South Africa, serving as head of state from 1994 to 1999. He was awarded the Nobel Peace Prize for his work in 1993.
The prison on Robben Island, Cape Town, South Africa, where Nelson Mandela was held for 27 years as a political prisoner.


Difference between revisions of "MARCUS-WALLACE COMPANY"
MARCUS-WALLACE COMPANY. The 1980 ''Dubuque City Directory'' listed 2625 John F. Kennedy Road.
MARCUS-WALLACE COMPANY. The 1980 '''Dubuque City Directory''' listed 2625 John F. Kennedy Road.
MARCUS-WALLACE COMPANY. The 1980 Dubuque City Directory listed 2625 John F. Kennedy Road.


Beginner running tips, what you need to know to start running.
Here are some more running tips to make you a pro in no time!
9) Every now and then, leave the Garmin home, and run an unplanned course, for an unplanned amount of time. Just enjoy the scenery, enjoy the run just for the sake of running.
Having running goals and pushing yourself to run faster and longer is all good, but you don't want to take all the fun of running and make it all work.
So if you're feeling a lot of pressure, nothing like a good run on an unplanned course to help you fall in love with running all over again.
Don't run every day. Just like all your other muscles, your running muscles break down when you are running and need rest to build themselves back up again stronger than ever.
So be sure to take a couple days a week off from running and rest or if you insist on working out, do some cross training or strength training like we talked about in beginner running tips part 1.
11) Don't forget to breathe.
Breath in through your nose and out through your mouth. Breathing in through your nose helps your body much better absorb the oxygen then breathing through your mouth.
Without being an expert on the scientific reason for this, I'll just recommend trying it right now and you will see the difference.
Focus on this while your running, especially if you feel dizzy or experience cramps in your side during your runs.
12) Have a recovery snack available to eat right after your run.
Not only have you just had a big workout and need to recover your energy, but eating right after your run will also help decrease muscle soreness later on.
A meal of protein and whole carb is a good choice. My favorite is as an egg white spinach omelet with whole wheat toast and tomato juice.
But if you find it hard to eat immediately after your run because you're feeling nauseous, at least drink a sports drink like Gatorade or Ensure. Chocolate Milk is also a good recoery drink that many runners love.
13) Drink small sips of water throughout your run.
This will help better keep you hydrated without needing to stop and empty your bladder in the middle of running.
14) Your body doesn't just take in energy from what you eat immediately before your run.
It is important to eat healthy the entire day leading up to your run and even the day before your run.
It helps me to think about it like this: When you have a hangover, it's from drinking too much the day before. So it makes sense to fuel up with healthy foods in order to give you energy for your runs starting at least the day before.
Some foods I've experimented with eating the day before my races or long runs that have been very effective in giving me energy are whole wheat pasta, lentils and salad with chick peas.
Of course making a habit of eating healthy on a regular basis is even better. Here are some more beginner running tips on the runners diet.
Oh and don't forget to eat breakfast. All too often we miss breakfast because we forget to eat or our stomach's don't feel up to it.
You don't have to eat a big breakfast but breakfast is the most important meal of the day. Not eating breakfast or just eating coffee for breakfast slows down our metabolism, causes us to gain weight and decreases our energy for the entire day.
I know how hard it can be to get breakfast in though. What I do is eat a small yogurt for breakfast and then eat a bigger brunch an hour or two later.
15) Don't make a bad run into a bigger deal than it is.
Of all the beginner running tips I can share with you, this is probably the most important lesson. I learned it this summer when I ran my 4th annual August half marathon.
I had a great training season all spring and early summer, pulling in some PRs on my training runs of 6 and even 7 miles. And my long runs I was doing better than ever too.
I had big hopes for pulling in a PR on my 4th annual half marathon which I planned to run as I had since my first year of running in New York City in the heat of August.
Even though this summer was pretty mild, come the day of the half marathon, as it has been every year I'd run it, it was the hottest day of the year.
And I'd been on vacation the week before, had not run for over a week, had been drinking and eating regular vacation junk food.
And to top it all off, I'd taken in a teenager for the summer, an experience that had turned out to be way more emotionally exhausting than I ever could have expected.
Well not only did I not get that PR, it was one of the worst times for a half marathon I'd ever had. I felt so blue about it, and was sure it meant I wouldn't do better on my third marathon I was training for either.
I spent the next month asking myself what was the point of running if I couldn't get faster (forgetting that I was faster, just not on that one hot day!), started imagining injuries and missed a month of marathon training.
Later when I was looking back on my running plan, I saw how well I had done throughout the summer overall, and I realized that I had knocked myself down for no reason with this self-defeating attitude because of ONE bad run in a summer full of great runs.
So the lesson learned: a sucky run is just a sucky run, even if that run. Don't put more energy into it deserves.
Stick with your training plan and you're consistent accumulated training will get you the results you're working so hard for.
Once you get the hang of these beginner running tips, you'll be a pro in no time!


Who are the Top Ten Travel Blogs For Entrepreneurs?
Thank you for including me in the Top Ten Travel Blogs For Entrepreneurs Who Keep Exploring New Business Opportunities!
Travel and entrepreneurship go hand in hand, and there are countless stories where entrepreneurs go on pleasure sojourns, when all of a sudden something clicks in their mind,an inspiration forming a basis for an innovative idea to work upon. For instance,Howard Schultz, the former CEO of Starbucks,gleaned inspiration by the coffee shop experience he witnessed in his visit to Italy in 1983,where he perceived the popularity of Espresso bars in Milan, back when he was a director of retail operations and marketing.After coming back from Italy, Howard Schultz some how managed to convince the founders of Starbucks to shift their business model from supplying coffee to fine restaurants and espresso bars to creating a whole exceptional coffeehouse culture for the customers in downtown Seattle.His efforts bore fruit, and now Starbucks is the largest coffeehouse company in the world, touting 22000 stores globally, over a period of 25 years.
History is abounding with business success stories, which are comprised of the experiences of the people and what they witnessed on their various excursions. People around the world have diverse styles of living, and those who keep on exploring the world through travel, bring not only the wonders of those cultures back home, but also the memories and experiences they had had on the trip.The main challenge associated with travelling is that it requires time and money, and most of the entrepreneurs are pretty busy in their lives, not being able to spare time to leave their business operations for travelling. Internet has somehow made it easier for people to experience many things while perusing at the comforts of their home.
Here we have selected a few people who cannot get enough of travelling, and have come up with stellar blogs for helping travelers and entrepreneurs in experiencing cultures across the universe by just taking out a little bit of time from their busy schedules.
Keith Jenkins was a name to contend with in the banking industry for about a decade before he left it to follow his passion for travelling, since he often felt a void in his life, despite being so ahead in his career. Now he travels around the world and manages his blog, titled the Velvet Escape".
Here is the sample screenshot from his visit to Camps Bay, Cape Town, South Africa.
Mia Voss is an entrepreneur, a brand ambassador, and the ultimate definition of a traveler. Since she returned from a 3 week sponsored trip to Italy, she dove into a full term travelling career, as she loves connecting with new people. Mia has traveled the world from Italy to Austin, from the exotic islands to Americana. She manages her blog with the name "That's what she said" and shares her trips with her audience who cannot resist virtually visiting these new places with her.
Here is the recent click from her latest trip to Jamaica.
Sabina Trojanova's passion for travelling ignited with her moving around to different places where her father's job got transferred. Now she is obsessed with travelling around the world, experiencing new fashion and veggie food as she describes on her Twitter account. She also has an amazing blog, "GirlvsGlobe".
Here is an image of Nova Scotia where she recently paid a visit.
Lawrence and Jessica Norah is the couple that dreams are made of,traveling around the world and blogging about their awe-inspiring journey experiences. People who love travelling can glean amazing tips, stories, and advice for what to do and how to prepare for travelling to these places. Grab all their recent travel stories on their blog, known as the "Independent travel cats".
Recent click from their trip to Isle of Wight.
Stefanie Fauquet is a lifestyle blogger and family traveler. She resides in the Tampa Bay area with her husband who is also a blogger and her 13 year old daughter. She has launched her blog "Mommy Musings" to share her amazing expedition experiences with travel aficionados all over the world. Here,you can join her on all her amazing excursions.
Here is a click from her recent trip to The Roman Forum.
Iain Mallory became aware of his passion for seeking thrill, adventure and travel when he served in an Army Physical Trainings Corp, where his primary duties involved running the unit's fitness program and providing instructions for adventurous outdoor pursuits to different corners of the world. He did some mountaineering, skiing and many other adventurous activities, which helped him gain the prerequisite skills to satisfy his passion for adventure. He started travelling across the world to different exciting places where he could indulge in his passions. So if you are fan of visiting mountainous and thrilling places, his blog "Mallory on Travel" is a perfect fit for you.
Here is one click from his trip to Mount Athos.
Johnny Ward had always sported an urge for travelling, and if you are determined and keenly want something in life, there is nothing that can stop you from achieving your purpose. Johnny Ward hailed from a poor family and spent the first 13 years of his life on welfare payments. He struggled a lot and moved to England after he turned 18, where he pursued higher studies. He later decided to gratify his passion for travelling and exploring the world. He roams around the world like a free spirit, and takes shots of places he visits and upload them on his blog "One Step 4Ward", so that his audience can revel in the wonders of the world as well.
Recent click of his visit to Scotia Yemen.
Becki is an award winning writer working at the British Travel Press, in addition to being an avid explorer as well. In her childhood, she used to look at maps wishfully, but did not have enough finances to embark on grand adventures. However, in her teenage years, she went to Russia and Europe on a school trip for learning more about the Cold War history and at the age of 24, she quit wasting her money on short package trips and went on her first independent trip to Vietnam. Currently she roams around the whole world exploring new places, in addition to managing her blog "Borders of Adventures" as well where top class clicks from her recent trips can be found in her blog posts.
Recent click from her visit to Roman City of Spain.
Brian Chesky is the Co-founder and CEO of Airbnb, the world's top accommodation provider touting a presence in 65000 cities and 191 countries. Brian Chesky is lucky enough to glean great opportunities for roaming around the world and meeting different people. He loves blogging, so he shares all of his stories on his profile "Brian Chesky".
Lisa Niver is a travel expert, artist and entrepreneur. She has explored 99 countries to date, and is continuously engaging in exploring adventures around the world. Her blog "We Said go Travel" is read by more than 300,000 people each year. She also adds videos about her travel trips which cross over 1.3 million views on three channels Roku, Youtube and Amazon Fire Tv.
You have perused through the list of top travel blogs for entrepreneurs who wish to travel to new places for exploring business opportunities and ideas. You can also easily get connected with these influencers on their twitter for interacting with them indulging in their latest trip at home.
Thank you to Chris Stone and Branex for including me and We Said Go Travel on your new list! I am honored to be included.
I congratulate you on the success you are in such a prestigious list, because I strongly believe that travelling is the best investment people can make.


Luxury custom homebuilder Harwick Homes has completed a 7,490-total-square-foot estate in the Coquina Sands neighborhood at 375 Yucca Road in Naples.
The four-bedroom, three-bathroom estate home is designed by Naples architect, Jon Kukk of Kukk Architecture and Design, with interior design by Sydney Sorenson and landscape design by Christian Andrea of Architectural Land Design.
The interior color palette is white and crisp with bright colors to accent throughout the home. Shades of pink, blue and green add warmth to the home.
This coastal contemporary estate home welcomes guests through dark wood and glass front doors opening to a bright foyer. A quaint wrap around porch and rotunda sit to the left of the grand covered entrance, and to the right is a four-car garage. The foyer expands to the great room, featuring 32-foot ceilings with exposed beams and reclaimed hardwood floors. Large double doors open from the great room to the outdoor living area.
The outdoor living area of the home includes a covered lanai space featuring a dining area and lounge seating. The lanai is fitted with an outdoor grill and refrigerator. Past the lanai is the pool deck with steps down to the resort style pool which is well lit and includes a waterfall feature. Stepping-stones and green grass comprise the lawn surrounding the outdoor living space. To the left of the pool is a pergola, bringing a vacation feel to the space.
The living room to the left boasts a black marble fireplace with tiling extending all the way up the wall. Attached to the great room is the chef's kitchen. The white kitchen includes two islands, both equipped with sinks and ample counter space. The kitchen is complete with Wolf appliances and custom all-white cabinetry. The counters are topped off with white quartz and silver finishes. The kitchen includes an open dining nook with views overlooking the tropical backyard and resort-style pool.
French doors in the great room lead to a private family room. The family room is fitted with electric shades making it easy to turn the space into a movie or gaming room at the press of a button. Vaulted ceilings leave a breathtaking impression. Sharing a wall with the TV room is the first-floor home office. The office is a key component of the home, decorated as a pink, white and orange oasis. An oversized circular window overlooks the front lanai and rotunda with views of the front landscaping.
The right wing of the home hosts the first-floor living quarters. The first bedroom has a large walk in closet and an en suite bathroom featuring a tub-shower. The bedroom has access to an attached playroom fitted with custom built-in window seats. The playroom also opens to a vestibule off the kitchen for easy access.
The master suite overlooks the outdoor living space and pool. The symmetrical master bathroom features a freestanding tub flanked by his and her vanities, wash closets, and showers. Two his and her closets are tucked away opposite the bathroom in the master suite. The master suite has access to the outdoor lanai and living space as well as a dog run along the side of the home.
The second floor of the home includes an exercise room with reinforced floors. Attached to the exercise room is a Jack-and-Jill full bathroom shared with the second-floor guest bedroom. A second home office and large storage space completes the second floor.
Harwick Homes is located at 3368 Woods Edge Circle, Unit 101, Bonita Springs. Online at www.HarwickHomes.com.