text:
My author's copies of the Fourth Edition of my book showed up today:
It is significantly updated from the previous version. I especially enjoyed writing the sections on Linq and asynchronous features.
I've come across some code that is using – and overusing – IEnumerable<T>, and thought it might be of general interest.
Consider the following method signatures:
IEnumerable<string> Process(List<string> input); IList<string> Process(IEnumerable<string> input);
IEnumerable<string> Process(List<string> input);
IList<string> Process(IEnumerable<string> input);
Of the two, which is the better choice? Write down your answer.
There are really two questions – what is the best choice for input parameters, and what is the best choice for return values. I'll cover them separately:
The input parameter should be the smallest (ie least functional) type that allows the method to efficiently do what it needs to do. I've seen methods like this:
void Process(List<string> input) { foreach (string in input) { … } }
void Process(List<string> input) { foreach (string in input) { … } }
(or maybe the Linq equivalent).
In this case, you are just making things harder for the caller; all you really need is an IEnumerable<string>, so that's what you should specify. On the other hand, I've also seen code like this:
void Process(IEnumerable<string> items, IEnumerable<ReferenceItem> referenceItems) { var lookup = referenceItems.ToDictionary(referenceItem => referenceItem.Name, referenceItem => referenceItem.Contents)' … }
void Process(IEnumerable<string> items, IEnumerable<ReferenceItem> referenceItems) { var lookup = referenceItems.ToDictionary(referenceItem => referenceItem.Name, referenceItem => referenceItem.Contents)' … }
This code takes a simple enumerable, and constructs a dictionary out of it. This is worse than the first case; if you need a dictionary, ask for a dictionary.
Output parameters should be the biggest (ie most functional) type that is acceptable for the scenario. I've seen methods like this:
IEnumerable<string> Process(List<string> input) { List<string> items = new List<string>(); // fill list here return items; }
IEnumerable<string> Process(List<string> input) { List<string> items = new List<string>(); // fill list here return items; }
The developer has created a beautiful, functional list object, but they're only going to let the caller enumerate over it. This often leads to my favorite outcome, where the caller writes something like:
List<string> items = new List<string>(myClass,Process(input));
List<string> items = new List<string>(myClass,Process(input));
Don't do that. Just return the List<string> or perhaps the IList<string>.
Return values aren't as cut-and-dried as input parameters, however. If we modify the previous example as follows:
IList<string> Process(List<string> input) { m_items = new List<string>(); // fill list here return m_items; }
IList<string> Process(List<string> input) { m_items = new List<string>(); // fill list here return m_items; }
In this example, the class is retaining ownership of the list, and in that case, it probably doesn't want to give it out to somebody who could clear it, or replace all the strings with the string "Haddock". If the class is going to retain ownership, it should use a return type that prevents bad things like that from happening.
More months than I'd like to think about, I decided to undertake an update of my sorely out-of-date C# book, and Saturday I submitted the last of the chapters for the rewrite. I still have the author review (after the tech review) and the final review to do on each chapter, but that's a huge amount of work out of the way.
Back when the last version of the book came out, C# was an upstart language that had just added generics to it. Now, several * 3 years later, it has matured into a language with a lot going for it. Over that same time period, I've written a lot of C# code and have much more informed opinions about what works and what doesn't.
When I was working on the update, I was once again reminded that there is a huge gulf between "I understand how that works enough to use it" and "I understand how that works enough to write about it", and I've enjoyed writing the chapters on Linq, the new asynchronous support, and a bit about Roslyn.
I'm starting off the new year (well, in a few weeks…) in a new group. I am leaving the HealthVault team, and moving to an internal Engineering Excellence team where I will be working on… making our engineering 28.5% more excellent.
Actually, I'm not sure what I'm able to talk about yet, so I'll leave it at that.
A while back I wrote a post about using the built-in HealthVault transforms to get a different view on your data. That post discusses the mtt, stt, and form transforms.
There's another transform option in HealthVault that gives you the option to transform the response that comes back. It is best explained through a scenario. Most of this discussions is going to be at the raw xml request/response level. Some
If you want to do a full synchronization of weight values in a HealthVault record (and please read the guidance here before you decide to do so), you will need to get the instance ids of all the items. This simplest way to do this is just to ask for all the weight items, which will result in the following response:
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <thing> <thing-id version-stamp="8853d460-3c79-4284-aa12-08cb9730d151">645cae6f-942d-40bb-bc36-5529b6f9f46a</thing-id> <type-id name="Weight Measurement">3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <thing-state>Active</thing-state> <flags>0</flags> <eff-date>2011-10-26T10:14:01.17</eff-date> <data-xml> <weight> <when> <date> <y>2011</y> <m>10</m> <d>26</d> </date> <time> <h>10</h> <m>14</m> <s>1</s> <f>170</f> </time> </when> <value> <kg>79.4010889292196</kg> <display units="lbs">175</display> </value> </weight> </data-xml> </thing> </group> </wc:info> </response>
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <thing> <thing-id version-stamp="8853d460-3c79-4284-aa12-08cb9730d151">645cae6f-942d-40bb-bc36-5529b6f9f46a</thing-id> <type-id name="Weight Measurement">3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <thing-state>Active</thing-state> <flags>0</flags> <eff-date>2011-10-26T10:14:01.17</eff-date> <data-xml> <weight> <when> <date> <y>2011</y> <m>10</m> <d>26</d> </date> <time> <h>10</h> <m>14</m> <s>1</s> <f>170</f> </time> </when> <value> <kg>79.4010889292196</kg> <display units="lbs">175</display> </value> </weight> </data-xml> </thing> </group> </wc:info> </response>
Where the <thing/> element is repeated for each weight item.
That's a lot of data (almost 2K) just to get the single instance guid. The first thing we can do is change our request so that the response only contains the key information. This is done by telling the platform not to return you any full items, but just return them as partial items. You do that by setting the max-full attribute to "0". If you are working with the SDK, you can set the MaxFullItemsReturnedPerRequest property and use GetMatchingItemsRaw().
If you do this, you will get a response that looks like this:
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <unprocessed-thing-key-info> <thing-id version-stamp="8853d460-3c79-4284-aa12-08cb9730d151">645cae6f-942d-40bb-bc36-5529b6f9f46a</thing-id> <type-id name="Weight Measurement">3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <eff-date>2011-10-26T10:14:01.17</eff-date> </unprocessed-thing-key-info> </group> </wc:info> </response>
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <unprocessed-thing-key-info> <thing-id version-stamp="8853d460-3c79-4284-aa12-08cb9730d151">645cae6f-942d-40bb-bc36-5529b6f9f46a</thing-id> <type-id name="Weight Measurement">3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <eff-date>2011-10-26T10:14:01.17</eff-date> </unprocessed-thing-key-info> </group> </wc:info> </response>
That takes us down to about 500 bytes, which is much smaller. But there's still a lot of extraneous information there. What we really need is a way to get back only the information that we care about. That something is a HealthVault final xsl.
A final-xsl is an application-supplied transform that is run on the response right before it is sent back to the client. In the .NET sdk, the GetTransformedItems method is used. In the pure xml world, it is done by adding a <final-xsl> element to the request after the <country> element and before the <msg-time> element. The xsl is represented as a string in the request, so it must be appropriately escaped in the request xml.
Here's a transform I wrote to process the unprocessed items response:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3" exclude-result-prefixes="fn fo wc xs"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/response"> <response> <xsl:copy-of select="status"/> <xsl:copy-of select="error"/> <wc:info> <xsl:for-each select="wc:info/group"> <group> <xsl:for-each select="unprocessed-thing-key-info"> <id> <xsl:value-of select="thing-id"/> </id> </xsl:for-each> </group> </xsl:for-each> </wc:info> </response> </xsl:template> </xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3" exclude-result-prefixes="fn fo wc xs"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/response"> <response> <xsl:copy-of select="status"/> <xsl:copy-of select="error"/> <wc:info> <xsl:for-each select="wc:info/group"> <group> <xsl:for-each select="unprocessed-thing-key-info"> <id> <xsl:value-of select="thing-id"/> </id> </xsl:for-each> </group> </xsl:for-each> </wc:info> </response> </xsl:template> </xsl:stylesheet>
Which results in the following output:
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <id>645cae6f-942d-40bb-bc36-5529b6f9f46a</id> </group> </wc:info> </response>
<response> <status> 0 </status> <wc:info xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3"> <group> <id>645cae6f-942d-40bb-bc36-5529b6f9f46a</id> </group> </wc:info> </response>
That takes us down to about 250 bytes, but still preserves the basic form of the response; the mobile libraries will still be able to parse it successfully. If the application is willing to do more parsing, we can simply further to:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3" exclude-result-prefixes="fn fo wc xs"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/response"> <xsl:for-each select="wc:info/group"> <xsl:for-each select="unprocessed-thing-key-info"> <id> <xsl:value-of select="thing-id"/> </id> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:wc="urn:com.microsoft.wc.methods.response.GetThings3" exclude-result-prefixes="fn fo wc xs"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/response"> <xsl:for-each select="wc:info/group"> <xsl:for-each select="unprocessed-thing-key-info"> <id> <xsl:value-of select="thing-id"/> </id> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet>
which yields:
<group> <id>645cae6f-942d-40bb-bc36-5529b6f9f46a</id> </group>
<group> <id>645cae6f-942d-40bb-bc36-5529b6f9f46a</id> </group>
which takes us to 66 easy-to-parse bytes.
The following set of parameters are passed to all final-xsl transforms:
I have been working with some developers working on mobile applications that connect to HealthVault, and the issue of synchronizing data between the mobile device and HealthVault has come up a couple of times. We've come up with some guidance around this area and I'd like to share it more widely.
I'm assuming that the mobile application needs to keep the data around to work effectively – for example, it may want to produce a chart of weight values for the last few years. If your application only works with small amounts of data, you may not need to store any data locally.
First, a bit of expectation setting about what our goal is.
We can start with a goal of "perfect sync" between the mobile application and HealthVault. It is possible to be current within a few seconds – but to do so will result in:
The first two aren't good for the user of the application, and the HealthVault team would like to avoid the third one.
Instead of trying for the "perfect sync", we're going to try for a "good enough sync" – a scheme that is right the majority of time for the majority of users.
These are our current guidelines for keeping data synced on mobile devices.
If your application fetches all of the weight items in a user's record and the user has recorded daily weights for the last 3 years, it's going to take a while to process 1000+ weights.
Instead, when the application fetches data items, request the audit section as part of the filter:
<info> <group> <filter> <type-id>30cafccc-047d-4288-94ef-643571f7919d</type-id> <thing-state>Active</thing-state> </filter> <format>
audits

core
 <xml/> </format> </group> </info>
You will get back XML that looks like this:
<thing> <thing-id version-stamp="cdb934a8-08c9-44a2-85e2-429cde027d01">1a868d6f-26c2-4504-bbc5-7b28b11de351</thing-id> <type-id name="Medication">30cafccc-047d-4288-94ef-643571f7919d</type-id> <thing-state>Active</thing-state> <flags>0</flags> <eff-date>2008-09-12T09:46:27.987</eff-date> <created> <timestamp>2008-09-12T16:46:28.22Z</timestamp> <app-id name="HelloWorld-SDK">05a059c9-c309-46af-9b86-b06d42510550</app-id> <person-id name="Eric Gunnerson">41b87f12-9b6f-40b6-a6ee-be4fbfd12170</person-id> <access-avenue>Online</access-avenue> <audit-action>Created</audit-action> </created> <updated> <timestamp>2008-09-12T16:46:28.22Z</timestamp> <app-id name="HelloWorld-SDK">05a059c9-c309-46af-9b86-b06d42510550</app-id> <person-id name="Eric Gunnerson">41b87f12-9b6f-40b6-a6ee-be4fbfd12170</person-id> <access-avenue>Online</access-avenue> <audit-action>Created</audit-action> </updated> <data-xml> <medication> <name> <text>Marmoset</text> </name> </medication> <common/> </data-xml> </thing>
When you process the items, extract the updated timestamp out, and figure out the maximum timestamp value for all of the items that you have fetched. Then, when you call next time, you can only get items that are newer than that timestamp:
<filter> <type-id>30cafccc-047d-4288-94ef-643571f7919d</type-id> <thing-state>Active</thing-state> <updated-date-min>2011-10-10T16:50:45.334Z</updated-date-min> </filter>
That will reduce the amount of data that you fetch considerably.
When a filter would return a large number of items, HealthVault will return the more recently updated items in their entirety, and then it will return the remainder of the items as partial items. Instead of a full "<thing></thing>" structure, you will see something like this:
<unprocessed-thing-key-info> <thing-id version-stamp="fdd3f6cd-6eb6-46d7-bd7d-3d2c2fccc08b">34b0f978-f454-476a-b4a2-004c4a504e66</thing-id> <type-id name="Medication">5c5f1223-f63c-4464-870c-3e36ba471def</type-id> <eff-date>2011-07-22T19:22:30.94</eff-date> </unprocessed-thing-key-info>
The number of full items that are returned can be specified by the caller, in the following manner:
<group max-full="1"> <filter> <type-id>30cafccc-047d-4288-94ef-643571f7919d</type-id> <thing-state>Active</thing-state> </filter> <format>
audits

core
 <xml/> <type-version-format>30cafccc-047d-4288-94ef-643571f7919d</type-version-format> </format> </group>
Where the "max-full" attribute sets the number of full items returned in this request. There is a hard limit of 240 full items returned per request.
Instead of fetching a large number of instances all at once, applications should fetch a few full items initially and save the unprocessed keys around. It can then fetch any later items in the background. This can be done by listing all of the instance ids (obtained from the <thing-id> element of the unprocessed thing key info section) in the filter:
<group> <id>34b0f978-f454-476a-b4a2-004c4a504e66</id> <id>e8655aca-eb68-4670-b253-4bc3585fa513</id> <format>
audits

core
 <xml/> </format> </group>
If your application needs to fetch data for more than one data type, you should consider whether you can fetch all the data in a single get request. This will reduce the number of trips you make to the server and the amount of data you send over the network.
This is done by including multiple filters in a single request:
<group> <filter> <type-id>30cafccc-047d-4288-94ef-643571f7919d</type-id> <thing-state>Active</thing-state> </filter> … </group> <group> <filter> <type-id>3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <thing-state>Active</thing-state> </filter> … </group>
The response will have one group for each group in the request.
HealthVault records can contain a considerable amount of data in them. A weight tracking application may work fine with your set of test data, but if it gets pointed to a record that contains daily weights for the past 3 years, it may roll over and die.
Applications should instead limit their queries to fetch bounded amounts of data. If the application is only going to show the user their weight for the last month, it should only fetch that data.
Mobile apps tend to be run for short periods of time, so checking for new data at startup and when you know there is new data (ie you put it there) is the recommended approach.
Applications may add a "refresh" option if desired.
HealthVault does not currently provide a simple way for applications to determine when data has been deleted from a user's HealthVault record. Since deletions are rare in HealthVault, we recommend that mobile applications do not attempt to track deletions automatically.
An app may choose to provide a "synchronize" option that the user may choose to invoke. In that case the app should fetch using max-full="0", which will return the minimal amount of data.
If an application does want to detect deleted data, it should fetch the things using max-full="0", and then remove any items in the local cache that were not returned from the query.
Anybody who has watched movies about software development knows that reality is much different. None of us work with huge screens on the wall, and debugging is a lot of unexciting detective work.
Today, we were doing some remote debugging over live meeting in a conference room, trying to figure out why an interaction between a website and a web service wasn't working correctly. We worked through some backend verification, which is as exciting as writing and executing ad-hoc SQL queries always is (not very). Then we moved on to running Fiddler, where we started looking at requests. The URL was pretty complicated and we were verifying all the items in it when I noticed that there was a problem with the base part of the URL. I couldn't figure out any easy way to tell people what it was because the screen was busy, so I jumped up and pointed at the spot on the giant projected desktop and exclaimed "that's the problem!".
And it was, and I got to do a happy dance. But the soundtrack was a bit lacking.
I recently had a request for more information on dealing with blob data using our newly-released Mobile support, which finally got me to write something about low-level blob support.
This information applies to any application that isn't using the .NET SDK to talk to HealthVault. If you are using the .NET SDK, I recommend using the support that is provided in the SDK.
HealthVault provides the capability of storing additional data – such as documents, images, etc. – as a blob of data attached to any of the HealthVault data types.
HealthVault provides two ways for applications to manage blob data; an inline method where the blob data is passed with the rest of the data for an item instance, and a streaming approach where blob data is accessed through http get and put requests.
This method passes the blob data in a base64-encoded format with the rest of the item data. It's the simpler of the methods to use, but it has the following drawbacks:
Here's how you deal with blob data using the inline method:
Here's the "<info>" section of a GetThings request:
<info> <group> <filter> <type-id>3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <thing-state>Active</thing-state> </filter> <format>
core

blobpayload
 <xml/> <type-version-format>3d34d87e-7fc1-4153-800f-f56592cb0d17</type-version-format> <blob-payload-request> <blob-format> <blob-format-spec>inline</blob-format-spec> </blob-format> </blob-payload-request> </format> </group> </info>
The "
blobpayload
" line specifies that in addition to the core part of the data item, any blob data should be passed back along with the rest of the XML. If you forget to do that, you won't get any blob data…
This query returns a <blob-payload> section that comes after the <data-xml> section:
<blob-payload> <blob> <blob-info> <name /> <content-type>text/plain</content-type> <hash-info> <algorithm>SHA256Block</algorithm> <params> <block-size>2097152</block-size> </params> <hash>K9OYLkNyHLtTKRinTVTPh4WqbsZQ5l3jcUBIoMieNIc=</hash> </hash-info> </blob-info> <content-length>11</content-length> <base64data>U2FtcGxlIFRleHQ=</base64data> </blob> </blob-payload>
The following elements are important:
Here's an example of saving a blob as inline data. The blob is passed at the same time the rest of the data for the instance is passed.
<info> <thing> <type-id>3d34d87e-7fc1-4153-800f-f56592cb0d17</type-id> <thing-state>Active</thing-state> <flags>0</flags> <data-xml>...</data-xml> <blob-payload> <blob> <blob-info> <name/> <content-type>text/plain</content-type> </blob-info> <content-length>4</content-length> <base64data>U2FtcGxlIFRleHQ=</base64data> </blob> </blob-payload> </thing> </info>
The <data-xml> section is removed for the sake of brevity. The important parts are:
In the streamed method, the blog data is fetched or stored using separate interfaces or methods.
Fetching the blob data is simple. If you change the filter to be:
Instead of the base64data element, you will get a blob-ref-url element that looks something like this:
You can then download the blob data directly using the URL.
Uploading blob data through the streamed interface is considerably more complex; it requires calling the BeginPutBlob method to get the destination url and then uploading in chunks of data that are a specific size (it also supports signing data, which makes things even more complex).
If you are interested in using this to load large blobs, let me know, and I'll try to update this to show that approach as well.
When we were creating our talk, we had a problem.
Well, to be fair, we had a few problems, but the problem that I want to talk about is the "for more information" slide, the one that you put at the end to direct people to a location where they can find more information.
There were actually two problems.
The first was was that we covered 13 different things during the talk, and there was no way to fit enough information onto a single slide (or even a few slides) to help people out.
The second was that a fair number (1 "fair" = 6) of items aren't yet released and this was the first time we were talking about them, so there are no public resources to reference.
We decided to solve that by doing a "for more information" blog post on the HealthVault blog, which would help attendees find more information and also be of use to those who didn't attend the talk.
And then I didn't remember to write anything until Tuesday night, and had to do a bit of scrambling to get it done. But now, for your reading pleasure, you can read HealthVault at CHC 2011, find out what we demoed, what we announced in the mobile space, and other juicy tidbits of information.
The conference itself was pretty good, but at only a day and a half tends to feel pretty rushed. We spoke at 8AM on the second day of the conference, second only to the immediately after lunch as a slot that I would like to avoid, but the crowd seemed pretty good, at least, to the extent that I could see them; I tried to look around in the crowd but was a bit hampered by the lights; two searchlights previously used to illuminate Saturn V rockets were aimed directly at my face, and I literally could not tell whether people were standing or sitting; they could all have been wearing clown makeup for all I knew. And if you looked up too much, you'd end up with a bunch of spots in your eyes that made it hard to read your slides.
Our demo had a lot of moving parts, and it mostly worked correctly. What Vaibhav did was clean as far as I could tell; in my part, the conference center WiFi timed out and I had to re-initiate it during the talk, and I ended up provisioning the mobile application to talk to our practice account, not our live account, but luckily Vaibhav had written the eventing application so that either account worked. Oh, and I had unexpected lack of success with our CAPTCHA, even with the help of others.
Our goal was to time the talk to 45 minutes, and after answering a few questions during the talk, we finished at 8:52 which is pretty much perfect in my book.
Please let us know if you have questions or comments.
I'm in Chicago this week to speak at the Microsoft Connected Health Conference, 2011 edition. It's been nice to get away from the cool and rainy northwest and spend some time in Chicago,where the weather has been... well, it's been cool, and rainy, though the rain has been a bit torrential at times. We are rain wimps in Seattle.
I ended up with some spare time earlier this week and spent a morning at the Museum of History and Industry, where I toured the U505 (an authentic WWII U boat captured in 1944 IIRC), and the bodies in motion exhibit, which was Oh my god did you see that guy? that's so gross I think I'm going to be sick!, or at least that was what the group of teenagers next to me thought. I found it fascinating and disturbing at the same time.
I'm co-presenting at an overview presentation on HealthVault, where we have an hour to cover everything we've done in HealthVault in the last year or so. We have an involved demo and technical explanation, then a lot of short items. I'm thoroughly practiced-out the night before the talk, but I feel pretty good about it.
The conference so far has been pretty good. We had a HealthVault-specific event last night and I was able to put some faces with a few names of people, and talk with partners about what they are doing.
We will be posting more information about what we talk about on the HealthVault blog; I'll link here when the post is up.
Intercultural Computer Science Education
Data sorting dances
I enjoyed the dances, though I'm not sure that insertion sort is correctly danced.
From an internal discussion we're having on the advisability of using default parameters in C#:
Currently, the pain and limitation of doing overloads forces you to rethink how a method should work. Consider the following:
Process(int a);
Process(int a, float b);
Process(int a, float b, string c);
If I now need to change how that works in some situations, I could add a boolean to control that behavior, but it's not obvious how to add it to the current overload scheme. I can do something like:
Process(int a);
Process(int a, bool doBackground);
Process(int a, float b, bool doBackground);
Process(int a, float b, string c, bool doBackground);
But not only is that a bit hard to write, it's a bit confusing, and if I need to add another parameter in the future, I'm pretty much SOL. So, that forces me to consider the alternatives; should I go with a "Settings" class (like XmlWriterSettings), should I live with it, or should I think about refactoring the process to simplify things? That forced stop gives me the chance to think about better ways to approach things.
With default parameters, it's going to be really tempting to just add a default, and it's more likely you'll end up with methods like this:
Process(int a, float b, string c, bool doBackground = false, bool writeToLog = true, string database=null, string method="jumble");
That is bad not only for the caller of the api, but it suggests that the process method is pretty complex internally.
On the other hand, I can't count how many times I've written a well-constrained series of overloads that purely added in default values and had to write nearly duplicate xml docs for each of them, and I'd be really happy to save that time and not have those methods clutter up the code.
Or, to put it another way, default parameters are great if you use them to simplify scenarios that you would have written with overloads. If you start doing things that would be hard to express in overloads, I'd look harder at the overall design.
We have added some useful new functionality designed to make it easier to test a HealthVault application.
The existing HealthVault SDKs didn't make it easy if you wanted to write isolated (or method-level) unit tests for features that talked to the HealthVault Platform. You could usually do it by designing your own layer that could return simulated results (sometimes called "mocking" in agile methodologies), but that was sometimes difficult because of the way the SDK worked.
In this release, we've made some changes that should make this a whole lot easier.
For the sake of discussion, consider a bit of application code that fetches medications from HealthVault and filters them:
HealthRecordItemCollection GetNewMedications(HealthRecordAccessor record)
HealthRecordSearcher searcher = record.CreateSearcher(Medication.TypeId);
HealthRecordItemCollection items = searcher.GetMatchingItems()[0];
// filter items here...
return items;
We want to write a test that verifies that the "filter items here" part of the method works correctly, and we'd like the test to run without talking to the HealthVault platform. That's not easy to do in the current SDK, because there's no way to control what comes back from GetMatchingItems().
In the new SDK, there is a way to do that. If we debug down we will find that the call to GetMatchingItems ends up in the following method in a new class named HealthVaultPlatform.
public static ReadOnlyCollection <HealthRecordItemCollection > GetMatchingItems(
ApplicationConnection connection,
HealthRecordAccessor accessor,
HealthRecordSearcher searcher)
return HealthVaultPlatformItem .Current.GetMatchingItems(connection, accessor, searcher);
The HealthVaultPlatform class centralizes all operations (except for one exception I'll cover later) in a single class – if the SDK needs to talk to HealthVault it goes through that class. You can call into that class directly if you wish, or just troll through to see what operations can be performed.
To create our test, we are going to be hooking in underneath that level. The method above just forwards into a method in the HealthVaultPlatformItem class, and that class provides a way for us to override the behavior.
To get started, we need to create a class that derives from HealthVaultPlatformItem and overrides the GetMatchingItems() method. The first version looks like this:
public class HealthVaultPlatformItemMock : HealthVaultPlatformItem
HealthRecordItemCollection _itemsToReturn;
public HealthVaultPlatformItemMock(params HealthRecordItem[] items)
_itemsToReturn = new HealthRecordItemCollection(items);
public override ReadOnlyCollection <HealthRecordItemCollection> GetMatchingItems(
ApplicationConnection connection,
HealthRecordAccessor accessor,
HealthRecordSearcher searcher)
List <HealthRecordItemCollection> collections =
new List <HealthRecordItemCollection>();
return new ReadOnlyCollection <HealthRecordItemCollection>(collections);
We can use it like this (this is an NUnit test):
public void GetMatchingItems()
Medication medication = new Medication(new CodableValue("Ibuprofen" ));
Medication medication2 = new Medication(new CodableValue("Vitamin C" ));
HealthRecordItemCollection newItems = null ;
HealthVaultPlatformItemMock mock = new HealthVaultPlatformItemMock(medication, medication2);
ApplicationConnection connection = new ApplicationConnection(Guid .NewGuid());
HealthRecordAccessor accessor = new HealthRecordAccessor(connection, Guid .NewGuid());
newItems = GetNewMedications(accessor);
Assert.AreEqual(2, newItems.Count);
Assert.AreEqual("Ibuprofen" , ((Medication)newItems[0]).Name.Text);
Assert.AreEqual("Vitamin C" , ((Medication)newItems[1]).Name.Text);
When the call to GetMatchingItems() gets down to HealthVaultPlatformItems, it will end up calling our mocked method rather than the built-in one.
The code requires us to do a few things:
We can make it nicer by having the mock class itself handle enabling and disabling the mock, using the following:
public class HealthVaultPlatformItemMock : HealthVaultPlatformItem, IDisposable
HealthVaultPlatformItem.EnableMock(this );
List <HealthRecordItemCollection> collections = new List <HealthRecordItemCollection>();
#region IDisposable
Dispose(false );
///
/// Disposes the request.
///
public void Dispose()
Dispose(true );
GC.SuppressFinalize(this );
/// Disables the mocking.
/// <param name="disposing"></param>
protected void Dispose(bool disposing)
#endregion IDisposable
That allows us to simplify our test code to this:
using (HealthVaultPlatformItemMock mock = new HealthVaultPlatformItemMock(medication, medication2))
ApplicationConnection connection = new ApplicationConnection(Guid .NewGuid());
HealthRecordAccessor accessor = new HealthRecordAccessor(connection, Guid .NewGuid());
newItems = GetNewMedications(accessor);
Assert.AreEqual("Ibuprofen" , ((Medication) newItems[0]).Name.Text);
Assert.AreEqual("Vitamin C" , ((Medication) newItems[1]).Name.Text);
There are a few classes where it's not straightforward to create the class. For classes such as ServiceInfo, we don't provide a way to create and modify them directly. To create an instance of those classes, you need to derive a new class and use that:
public class ServiceInfoTest : ServiceInfo
public ServiceInfoTest(string version)
Version = version;
and the associated test uses this class instead of ServiceInfo:
public void GetServiceInfoTest()
ServiceInfoTest serviceInfo = new ServiceInfoTest("V2.x" );
ServiceInfo serviceInfoBack = null ;
using (HealthVaultPlatformInformationMock mock = new HealthVaultPlatformInformationMock(serviceInfo))
serviceInfoBack = connection.GetServiceDefinition();
Assert.AreEqual("V2.x" , serviceInfoBack.Version);
We currently don't have mockable interfaces for blob operations. We hope to do that in a future release.
The HealthVault platform now provides the ability to notify applications when specific conditions are met.
A blood-pressure-tracking application wants to be notified whenever a new blood pressure measurement is added to any of the user records that the application has access to, so it can perform some operation with the data.
With previous releases, the only way to do this was for the application to periodically call GetUpdatedRecordsForApplication(), and then look at each record that was updated to see if the update was a new blood pressure instance.
Each application can now create a series of subscriptions, where each subscription specifies the event to detect and how to notify the application when the event occurs.
The BloodPressureTracker application creates a new subscription, specifies that it wants to be notified when a blood pressure measurement is added, updated or removed, and that the notification should be sent to www.example.com/notificationBloodPressurePage.ashx. The subscription is persistent until the application deletes it.
The notification page must be in a location that is accessible to HealthVault, which means it is accessible to other internet programs. To allow the application to verify that a notification came from the HealthVault platform, the application registers a key with the subscription, and when the notification arrives the application can verify that the HMAC in the message is identical to one computed by the application.
The dispatching of a notification happens on the HealthVault Platform.
The notification processing happens in the HealthVault application.
The processing of the notification should be performed on a separate thread to prevent the possibility of taking so much time that the timeout is reached.
For this release, the platform supports one event type – a change (add/update/delete) of an instance of a specific set of data types in a user's record – and one delivery method – over an https: connection. We are planning to extend support in future releases – if you would like to influence which events and delivery methods we consider, please send us feedback.
The health record item changed event passes the following information in the notification:
After the notification is received the application will need to fetch the item to determine what change was made. If the object was deleted, it will not be returned from the fetch operation.
The notification URL must be on the same domain as the action url that is registered with the application.
The user must have granted the application offline read access to the data type that the subscription refers to.
An application can only register 25 subscriptions at a time. This number is subject to change.
The HealthVault platform makes a "best effort" to deliver each notification in a timely manner, but does not guarantee delivery. It is not designed for real-time monitoring scenarios.
Notifications are delivered only for changes that are detected in records – the platform does not notify for items that are already existing in a record when the user first authorizes the application, nor does it notify for deletion if a user de-authorizes the application.
We have created a sample application which serves three purposes:
The first time that you run the application, it will generate an application id and a key for you to use. The sample will tell you how to properly define these in the web.config file.
The management part of the application is pretty simple – you merely add a new subscription and then list the data type ids that you want to be monitored.
In many cases, developer machines are not directly reachable from the internet and therefore there is no address that can be used in a subscription. To make it easier to develop notification handlers, the sample application can send simulated notifications to a notification handler for debugging purposes. It provides the following options:
Choose between the URL defined in the subscription, the test notification handler defined in the project, or a URL that you enter.
Choose Normal to have correct authentication headers, send bad HMAC to send an HMAC that is incorrect, or send bad key version to send a key version that is different than the one in the subscription.
The sample application can generate fake instance ids (if you just want to check that the notification handler is set up correctly), send an empty instance list, or select actual instance IDs from the current record.
I few weeks ago James Curran came up with the idea of a number of .NET bloggers (or, in my case, bloggers who remember vaguely what .NET is about) write a serial story. I, who am easily flattered by the smallest of attentions to my previous brush with semi-fame, signed on.
And then when it came around to me, I procrastinated for a few days, wrote something I didn't like and threw it away, wrote something I liked that I couldn't figure out how to fit into the existing story, then finally wrote something that I'm somewhat fond of that fits into the story, more or less. Which is kindof the point.
My contribution is here. I recommend reading the first two chapters so that you won't be lost. You can also read James' explanation for the title.
If you have questions about the obscure parts (ie – what is he writing about) feel free to ask in comments, and I'll try to answer when I get a few seconds away from my adoring fans.
The HealthVault SDK is currently built on top of the .NET 2.0/Visual Studio 2005 toolset. We are thinking about moving forward a few years and switching to the .Net 3.5/Visual Studio 2008 toolset, but would like some feedback from customers on what they are using first.
If you are building HealthVault applications, can you reply with the version of VS that you are using? Thanks.
There's a fairly active photography alias at Microsoft, and last year during October – the annual Microsoft Giving Campaign – about 200 photographers got together and produced a Blurb book titled "Photographers @ Microsoft". They put it on sale for a price that would raise $25 per copy.
The ended up raising $50,000.
This year there has been more participation, and the book is printed on an offset press. I've seen advance copies and they're as nice as any coffee table book you've seen (well, perhaps not as nice as Kramer's…). They are slightly cheaper than the previous year's books (offset printing is cheaper if you print enough), and still raise $25 per copy.
You can preview and order the book here (if you're at MS, enter your alias and employee number and matching will happen to make it $50 a copy).
If you click on the image above, you can see small versions of the photos – they're stunning. If you look carefully, you might find my contribution.
Bubo bubo
Just wonderful.
I love how he went to the trouble to overdub the way the original video was and matched the cheesy video.
This is a post about how to take conference audio and add it to a powerpoint presentation to give you a self-contained package you can give out. It took me a while to figure out how to do this effectively, so I'm hoping this will help others.
But, since I'm all about the story, there's a bit of background first. If you just want to understand the mechanics of how to do it, scroll down until you see "Mechanics".
Earlier this year I did a presentation (with Lowell Meyer) for the Microsoft Connected Health Conference, entitled "Practical HealthVault: Challenges and Opportunities".
The goal of the deck was to cover the things that are different and/or confusing about HealthVault – the things that we've answered over and over in the past couple of years. We wanted to come out with something that we could give to people who were new to HealthVault (anybody from the technical side, be they developer or manager) and therefore make our lives easier. And – which will come as no surprise to those who have seen me speak – I was interested in the adulation of my fans.
In both writing and presenting, I'm a big fan of progressive revelation, where you start simple and build things up. For this talk, that meant a lot of custom animations in powerpoint. A *lot* of custom animations in powerpoint. Five of my slides have more custom animation steps than will fit in the custom animation box on the side.
We had a company doing video production for the conference, and a few weeks after our presentation (which was a lot of fun – I always forget how much I enjoy presenting), the video showed up.
It consists of a lot of mostly-dark shots of us presenting, cutting back and forth with the slides. If they happen to be showing the slides when the animation happens, things generally work okay, but at times they showed the design view. And the resolution is what you get with video, which isn't great.
What I want is a narrated presentation, so I set out to do that.
For this I used AoA Audio Extractor, which gave me 155 MB MP3 file.
For editing the audio, I used Audacity, which is pretty darn nice. My one caveat is that with the version I have, you can't perform any operations on the audio if the audio is paused. So, you have to hit "stop" on the transport controls and then do a trim/cut/export/whatever.
If you just took that whole audio track and put it on a powerpoint presentation, it would work fine at the beginning but would get out of sync on some machines. To prevent this from happening, we need to use per-slide audio.
It's also true that working with a 90-minute track is not a lot of fun, so breaking it up will help in that realm as well.
I started by going though the audio track and putting labels on all of the slide breaks. This support is there to break albums up into songs, but it works very well for this as well. I had the presentation open on another monitor so I could reference it during the audio. Name the labels "Slide<x>", where <x> is the number of the slide. Make sure to put one at the beginning for the start of the presentation.
Once you have the labels, you choose "File->Export multiple", and it creates individual .wav files for each slide.
At that point I walked through all the slides and did some judicious editing. This is a bottomless pit of time consumption if you let it, so I tried to just pull out the things that were distracting where it was simple to do so. I also highly recommend adding 5 seconds of silence at the end of each slide's audio – I didn't do this initially and had to go back and re-edit all of them.
Audicity gave me files in .wav format, which are a bit wasteful in size. I download Lame and converted them into .mp3s. You can use the encoder of your choice (the list of formats that PP supports is here); I used lame because it's what my home system runs on and is very simple to use from the command-line.
The following steps are all manual – if you have powerpoint 2010 (which has a macro recorder) and/or want to write some macros, you may be able to automate it. I just suffered doing it by hand in PP 2007.
At this point, you should be able to start the slideshow and have your audio start playing.
For some reason that is not apparent to me, powerpoint calls this "rehearsing" the timings. And by default, it only supports it for the whole presentation, and there's no (obvious) way to do it for a single slide.
However, my mad search-fu led to a workaround. When you rehearse the timings, it only does it for the slides that are visible, so you can hide all the slides but one and rehearse the timings only for that slide.
Here's the progression:
You may find that you need to slightly modify your animations – some of mine seemed to change the "1" elements to "0" elements so they showed up too early. I think this happened when I added the audio to the slides.
The 5 seconds of silence is critical here. If not, you get to step 6, and your audio will start to repeat.
We had a few slides with 2 minutes of presentation and 10 minutes of questions. If you have this, stop the recording when the animation is done, and accept the timings. Then go to the Animations tab – on the right side you will see "advance slide automatically after" and a time. Look at the length of the audio for that slide (any player will tell you that), and set the value to 2 seconds shorter than that. That will put the advance right in the middle of the silent section you added.
At this point, you may need to polish the animation on certain slides. You may have to go back and redo some audio.
At this point you will want to publish the presentation. My plan is to just use PP's publish to folder functionality, though there are also ways to publish to video if you are willing to deal with the loss in resolution. Publish to HD video might be worthwhile, but it would be pretty big, and right now the publish to folder is about 80MB in size.
Your neologism for the day...
A devotion to creating and implementing metrics for a system or process while loosing sight of the real goal.
I've recently been doing some work on the HealthVault SDK to improve the consistency of how it deals with floating-point numbers, and thought that the information would be of general interest.
First off, I'll note that if you're new to the often-surprising world of floating-point arithmetic, a few minutes reading What Every Computer Scientist Should Know About Floating-Point Arithmetic would be a good introduction.
While my code examples are C#, this is a general issue, not just a .NET one.
Anyway, off to the issue. Consider the following:
static void Main(string[] args) { double original = 3.1; string stringRepresentation = original.ToString(); double parsed = Double.Parse(stringRepresentation);
Console.WriteLine("Equal: " + (original == parsed).ToString()); }
What is the output of this program?
If you said "Equal: true", you are correct. You might try a few more numbers before deciding that this is a general solution. Or maybe you don't even think about it..
But what if you choose a different number:
double original = 667345.67232599994;
What is the output this time?
It is "false".
I hope that there was sufficient foreshadowing earlier in the post so that you are not uncomfortably disturbed by this turn of events.
We could modify our code to check whether the two numbers are equal within an epsilon value. Or, we could dig a bit deeper…
If we look at the wikipedia, we'll find that under the IEEE 745 standard for floating-point arithmetic, there are 53 significant bits in the fractional part of the number. That is not quite 16 digits, so to be correct, we treat the numbers as if they only have 15 digits of precision when we convert them to strings. The last few bits are ignored.
Another way of saying that is to say that it is possible to find two numbers that have the same ToString() representation but are different in those last few bits. Which is what is going on her.
If we are printing out numbers for somebody to look at, the ToString() behavior is what we want, because the numbers really only have 15 digits of precision.
In this scenario, however, what we want is a string format that will ensure that we get the exact same number back. We can do that by using the "R" numeric format:
string stringRepresentation = original.ToString("R"); That gets us the behavior that we want. We could also have called XmlConvert.ToString(), which has the same behavior.
For some unfathomable reason, I didn't know about Uncyclopedia until recently. Like many things internet-related, there's a lot of junk there, but there is also some good stuff.
Last night I finished my first contribution, an article about llamas.
A brief, incomplete, and mostly wrong history of programming languages
A brief, incomplete, and mostly wrong history of programming languages
Brian Harry wrote a post entitled "Thoughts on TDD" that I thought I was going to let lie, but I find that I need to write a response.
I find myself in agreement with Brian on many points in the post, but I disagree with his conclusion.
Not surprisingly, I agree with the things that he likes about TDD. Focusing on the usage rather than the implementation is really important, and this is important whether you use TDD or not. And YAGNI was a big theme in my "Seven Deadly Sins of Programming" series.
Now, on to what he doesn't like.
He says that he finds it inefficient to have tests that he has to change every time he refactors.
Here is where we part company.
If you are having to do a lot of test rewriting (say, more than a couple of minutes work to get back to green) *often* when you are refactoring your code, I submit that either you are testing things that you don't need to test (internal details rather than external implementation), your code perhaps isn't as decoupled as it could be, or maybe you need a visit to refactorers anonymous.
I also like to refactor like crazy, but as we all know, the huge downside of refactoring is that we often break things. Important things. Subtle things. Which makes refactoring risky.
*Unless* we have a set of tests that have great coverage. And TDD (or "Example-based Design", which I prefer as a term) gives those to us. Now, I don't know what sort of coverage Brian gets with the unit tests that he writes, but I do know that for the majority of the developers I've worked with – and I count myself in that bucket – the coverage of unit tests written afterwards is considerably inferior to the coverage of unit tests that come from TDD.
For me, it all comes down to the answer to the following question:
How do you ensure that your code works now and will continue to work in the future?
I'm willing to put up with a little efficiency on the front side to get that benefit later. It's not the writing of the code that's the expensive part, it's everything else that comes after.
I don't think that stepping through test cases in the debugger gets you what you want. You can verify what the current behavior is, sure, and do it fairly cheaply, but you don't help the guy in the future who doesn't know what conditions were important if he has to change your code.
His second part that he doesn't like backing into an architecture (go read to see what he means).
I've certainly had to work with code that was like this before, and it's a nightmare – the code that nobody wants to touch. But that's not at all the kind of code that you get with TDD, because – if you're doing it right – you're doing the "write a failing tests, make it pass, refactor" approach. Now, you may miss some useful refactorings and generalizations for this, but if you do, you can refactor later because you have the tests that make it safe to do so, and your code tends to be easy to refactor because the same things that make code easy to write unit tests for make it easy to refactor.
I also think Brian is missing an important point.
We aren't all as smart as he is.
I'm reminded a bit of the lesson of Intentional Programming, Charles Simonyi's paradigm for making programming easier. I played around with Intentional Programming when it was young, and came to the conclusion that it was a pretty good thing if you were as smart as Simonyi is, but it was pretty much a disaster if you were an average developer.
In this case, TDD gives you a way to work your way into a good, flexible, and functional architecture when you don't have somebody of Brian's talents to help you out. And that's a good thing.


text:
Log in to Quirky
New to Quirky and need an account?Sign up for Quirky
Citrus spritzer
$3.99 $3.99
Tap the flavor
When life gives you lemons, you should hope to have Stem in hand. It sprays juice directly from any citrus fruit with the press of a finger. No cutting, no skinning... just liquid zest for your food and drink that comes straight from the source.
A sweet tool for a sour task
Stem's serrated teeth allow for simple insertion into all types of citrus fruit, its nozzle sprays evenly, and its body comes apart for easy cleaning.
Tim Houle
Like all Quirky products, Stem was invented and influenced by real people like you. Tim Houle was working at a Mexican restaurant when he discovered the magic of lime juice on tortilla chips. But squeezing citrus the conventional way got a lot of juice on a few chips, and none on others. Stem became his tortilla-seasoning masterpiece! Tim has worked as a bartender, zookeeper, and lifeguard and now serves as a biologist working in agriculture.
1841 influencers helped bring Stem to life.
Plastic *all materials are food safe
3.6" H x 1" D (84 mm H x 24 mm D)
Development duration: about 1 month
Time in store: about 2 years
Units sold to date: 140,604
View the development history
In the box
1 Stem citrus spritzer
- Washington City Paper: Bought in D.C.
- Brit + Co.: 10 New Quirky Products You Don't Want to Miss
- lifehacker: Stem Is An Attachment That Sprays Fruit Juice Directly from the Fruit, No Juicing Required
- Real Simple: 40 Most-Pinned Problem-Solving Products
- Men's Journal: Best Grilling Accessories - Quirky Stem
Viewing 1-5 of 22 Show more

subset: commoncrawl


text:
Skip to content
Hi and welcome to DadsDivorce, the leader in divorce help for men, fathers rights and mens rights. We provide divorced dads with concrete, practical divorce resources to achieve the best results in the courtroom.
Read Cordell & Cordell Reviews
The List - Forum users created a comprehensive list of items to consider when going through divorce. The intent is to get you to think, ask hard questions, and above all, to be prepared.Read more in our divorce and child custody forum.
The DadsDivorce.com Weekly Newsletter is delivered to your inbox each Wednesday morning with the latest mens divorce news.Get more info now...
We all have questions at some point in our life. What better way to get your family law questions answered than by a real, live attorney.Ask Your Legal Question Now...
The Men's Divorce Source App is a complete app to help guide you through your divorceGet It Now...
DadsDivorce.com brings you the most beneficial resources to help you through any aspect of your divorce.
The 10 Stupidest Mistakes Men Make When Facing Divorce: And How to Avoid Them. Order your copy now.
DadsDivorce podcasts offer listeners the freshest divorce topics from the most knowledgeable professionals in the industry.Listen Now...
Support and help for men and fathers before, during, and after divorce
Postby ScoutLeaderDad » Mon Feb 27, 2012 3:42 pm
Postby hoosier_dad » Mon Feb 27, 2012 3:48 pm
Postby Thoughts? » Mon Feb 27, 2012 3:49 pm
Postby spritom » Tue Feb 28, 2012 3:06 am
Postby ScoutLeaderDad » Tue Feb 28, 2012 11:26 am
Postby hoosier_dad » Tue Feb 28, 2012 11:40 am
ScoutLeaderDad wrote:@ Hosier - The TRO was something I saw on the LIST to do at the day of filing, so that is why I had mentioned it. I'll consult with my atty on this one prior to filing. For those who have gone down this road, is a TRO necessary or recommended (point of leverage)? I could justify it based on her violent outbursts (throwing things, banging my car window to the point of almost breaking). But, I don't wan to come off as an as* to a judge, etc.
Postby Thoughts? » Tue Feb 28, 2012 12:46 pm
Postby ScoutLeaderDad » Fri Mar 09, 2012 1:30 pm
Postby Bubba Seal » Fri Mar 09, 2012 2:21 pm
Postby justlarry » Fri Mar 09, 2012 4:45 pm
Return to Before and During Divorce Forum
Users browsing this forum: MO dad, Toxicity and 12 guests


text:
Cool online music player. Alternative to Lala or grooveshark. Over 8 million songs streaming all free. You can create your own playlist and share it with friends. Fully integrated with Facebook (friendsandmusic app).
Your Mashup not listed on ProgrammableWeb yet? Tell us about it and get listed.
©ProgrammableWeb.com 2014. All rights reserved.
Terms of Service | Privacy Policy


text:
The Longitude 7596411 & Latitude 3253233 of the Hotel
Classic Hill Top Resort - Tg
Chamba, India Hotels & Resorts
Escape to the comfortable confines of this 3 Star resort at Mussoorie Road. It has 32 luxurious rooms to choose from. Guests are served multi-cuisine fare ...
Pine Tree Lodge
Chamba, India Vacation Rentals
Perfect Peace For Nature Lover,s. Stay at dalhousie in wilderness,amidst cedars,centarlly located villas and yet serene surroundings....
4,000 Rupees (Indian) Per Night
Hotels, Travel Agents Himachal, Dalhousie,manalit
Chamba, India Sight-Seeing Tours
Himachal Tours, Himachal Hotel Bookings- Honeymmon Tours of Shimla, Manali, Palampur, Dharamshala, Dalhousie, North India Tours, Car Rental Services, Adventure Tours, Trekking, Camping, Events & Conferences and lots more.. ...
1,500 Rupees (Indian) Per Night
Luxurious Hotel in South Delhi ,New Delhi
Adilabad, India Bed & Breakfasts
Our Hotel in the name of HOTEL FOREST GREEN ideally located in the vicinity of Sirifort Road with convenient access to Defence Colony, South Extention., Nehru Place and a stone throw away from Greater kailash I.Hauz khas...
Starting at 3,200 Rupees (Indian) Per Night
Mangalore Highlights
Agni, India Sight-Seeing Tours
Mangalore is the birthplace of the cashew processing industry. Many innovations in processing this delicious nut have been spawned right here, especially those affecting product quality and performance....
Starting from US $88 Per Person
3 star hotel within 1km of Golden Temple.
Amritsar, India Bed & Breakfasts
This 3 Star hotel is a heavenly abode for tourists coming in from all walks of life to visit the Golden Temple, which is just a walk away. It offers super deluxe and deluxe rooms to stay....
Starting at 1,895 Rupees (Indian) Per Night
Yoga Teacher Training in Goa, INDIA
Anjuna, India Yoga
Oceanic Yoga is a certified Yoga school and its Yoga Teacher Training programs are approved by Yoga Alliance USA which is an internationally recognized organization....
Starting at 1,700 Euro Per Month
Aurangabad Gymkhana Club Hotel
Aurangabad, India Hotels & Resorts
Aurangabad Gymkhana Club is a unique and modern club. Nestled in 2 ½ acres of lush landscaped greenery, Aurangabad Gymkhana Club is an exclusive combination of a club and a hotel as it offers the modern health, fitness and sports facilities of a clu...
Special Discounted Rates from 3,000 Rupees (Indian) Per Night/Room
Hotel Ganpati
Bhopal, India Hotels & Resorts
Welcome To Hotel Ganpati Since its inception in 1994 Hotel Ganpati has established an enviable refreshing Hospitality and personalized service. It is the ideal place for business and leisure travellers located in the heart of Bhopal ,the maj...
1,499 Rupees (Indian) Per Night
Umaid Safaris & Desert Lodge, Bikaner
Bikaner, India Bed & Breakfasts
We are pleased to introduce our self as SAFARI & LODGE Operator in desert destination Bikaner(rajasthan). We have been operating A DESERT LODGE(eco friendly), CAMEL SAFARI, JEEP SAFARI, SAND DUNE GALA DINNER & RURAL CULTURAL EXCURSION with bone fire...
Starting at 1,800 Rupees (Indian) Per Night
Unexplored Motorbike Tour
Chandigarh, India Motorcycle Rentals
Motorbike tour 5N/6D 3& 4 star accommodation , bonfire & cultural activities Destinations covered : Chandigarh , kausali , Shimla ,Chail & Narkanda British golf course...
799 Euro Per Trip
Hotel Isabel Palace
Chhindwara, India Hotels & Resorts
The hotel was built in 2011 the beautiful "White Marble" with the intent to give a comfortable accommodation to tourists visiting the fantastic temples in the area with beautiful garden with sunbathing beds. Pick up from airport and rail station. Bik...
1,550 Rupees (Indian) Per Night
|Link Code


text:
Publications : Browse
Browse PATH publications
Subject: About PATH's work > Strengthening health systems
- Improving Health for Families Everywhere: PATH Reaches Mothers, Children, and Communities With Key Innovations for Strong Futures
PATH has worked to improve maternal and child health, nutrition, and family planning in developing countries for more than 30 years. This brochure describes our integrated approach to reach mothers, children, and communities with key innovations for strong futures.
Publication date: May 2010
Region: Global
- Improving Health in Vietnam: Celebrating 30 Years of Partnership
PATH's work in Vietnam began in 1980 with a focus on contraceptive technologies. In 1997, we opened a permanent office in Hanoi. Today, our work addresses a range of health issues, including vaccines and immunization, reproductive health, maternal and child health, health technologies, and emerging and epidemic diseases.
Publication date: December 2010
Region: Asia
- Improving Immunization Through Supportive Supervision
This fact sheet describes PATH's training of 70 immunization program supervisors in Vietnam's Ha Tinh Province to use supportive supervision methods, leading to immediate and significant improvements in performance.
Publication date: 2007
Region: Asia
- Improving Labor Migration Processes and Protection of Migrant Workers From Cambodia and Thailand: Issues and Recommendations
Through PROMDAN, agencies in Thailand and Cambodia responded to the issue of uninformed labor migration. The project aimed to increase access to health services and make labor migration beneficial for migrants and their families. This fact sheet outlines issues and recommendations for stakeholders.
Publication date: March 2010
Region: Asia
- Improving Women's and Children's Health in Senegal
This fact sheet provides an overview of PATH's work in Senegal. Since 2001, PATH has worked side by side with government and community partners in Senegal to reduce the burden of infectious disease, improve family planning and reproductive health, and strengthen health systems to save lives.
Publication date: December 2013
Region: Africa
- Integrating Early Childhood Development Project
This fact sheet describes PATH's Integrating Early Childhood Development (I-ECD) Project in Kenya and Mozambique, which is funded by the Conrad N. Hilton Foundation. I-ECD works with existing PATH projects to integrate and strengthen ECD services in communities and facilities and support multi-sectoral linkages and collaboration.
Publication date: April 2012
Region: Africa
- Integrating Tuberculosis and HIV Services in Tanzania
This case profile highlights a project in Tanzania as an example of PATH's efforts to deliver critical services while strengthening health systems. Key issues related to the delivery of integrated TB–HIV services in low-resource settings are summarized along with PATH's efforts to deliver innovative service models, address human resource constraints, and improve management of these diseases in the region.
Publication date: December 2008
Region: Global
- Integration of Sexual and Reproductive Health and HIV/AIDS Services
This fact sheet provides an overview of sexual and reproductive health and HIV/AIDS service integration and PATH's experience in this area.
Publication date: December 2008
Region: Global
- Japanese Encephalitis Vaccine Introduction in Cambodia
This fact sheet describes PATH's partnership with Cambodia's Ministry of Health to conduct sentinel surveillance on Japanese encephalitis and introduce a vaccine in 2009.
Publication date: December 2010
Region: Asia
- John Taolo Gaetsewe District Profile: Ensuring Healthier Futures for Mothers and Children
This document describes the Window of Opportunity project's efforts to improve the health and development of mothers and children in John Taolo Gaetswe District, South Africa. The Window of Opportunity project is a five-year initiative led by PATH, with support from BHP Billiton Sustainable Communities, that focuses on improving the health and development of children younger than two years in South Africa and Mozambique.
Publication date: September 2012
Region: Africa
Part of series: Window of Opportunity project: district profiles
- Leveraging the Capacity of Pharmacies to Improve Health Outcomes in Vietnam
This fact sheet provides an overview of PATH's work to enhance the capacity of pharmacies to strengthen community health throughout Vietnam. Through trainings and supportive supervision, PATH is working to strengthen a vital source of health information and services in Vietnam.
Publication date: October 2009
Region: Asia
- Making Progress Against HIV/AIDS and Tuberculosis: PATH Combines Wide-Ranging Expertise With Effective Strategies to Meet Urgent Global Challenges
This brochure provides an overview of PATH's work to reduce the burden of HIV/AIDS and tuberculosis around the world. It outlines PATH's overall approach, key strategies, and core competencies.
Publication date: July 2010
Region: Global
- Medical Waste Management for Primary Health Centers in Indonesia
In 2003 and 2004, PATH worked with the Indonesian Ministry of Health to build awareness and provide policy guidance to the country's decision-makers. This report describes the process and lessons learned implementing pilot waste-management systems in three districts of Yogyakarta province. The report was used to guide development of waste-management policy in Indonesia and could serve as a useful model for other countries.
Publication date: October 2005
Region: Global
- Meeting the Global Challenge of HIV/AIDS: Our Strategies and Expertise Help Communities Reduce Risk and Provide Access to Lifesaving Services
PATH is committed to collaborating with partners around the world to improve and expand effective HIV/AIDS prevention, diagnosis, care, and treatment services. Using evidence-based, integrated, and innovative approaches, our work reaches communities across Africa, Asia, Eastern Europe, and Latin America.
Publication date: July 2012
Region: Global
- mHealth, eHealth, Reproductive Health (Outlook, vol. 29, no. 1)
This issue of Outlook explores the promise and current realities of new information technologies in service to reproductive health programming in low-resource settings (including HIV/AIDS prevention and treatment and maternal and child health interventions). The issue examines new approaches and looks to the future for current needs and potential solutions.
Author: Wittet S
Publication date: December 2012
Region: Global
Part of series: Outlook
- Monitoring and Evaluation of Advocacy, Communication, and Social Mobilization Interventions to Support Tuberculosis Prevention and Care: Training Curriculum
This training curriculum was designed to build capacity for rigorous monitoring and evaluation of advocacy, communication, and social mobilization (ACSM) activities among tuberculosis prevention and care professionals, ACSM officers, and civil-society activists at national and local levels. The curriculum is based on Guide to Monitoring and Evaluation of Advocacy, Communication, and Social Mobilization to Support Tuberculosis Prevention and Care.
Publication date: March 2013
Region: Global
- Nkangala District Profile: Reaching Mothers and Children to Improve Health and Development
This document describes the Window of Opportunity project's efforts to improve the health and development of mothers and children in Nkangala District, South Africa. The Window of Opportunity project is a five-year initiative led by PATH, with support from BHP Billiton Sustainable Communities, that focuses on improving the health and development of children younger than two years in South Africa and Mozambique.
Publication date: September 2012
Region: Africa
Part of series: Window of Opportunity project: district profiles
- Optimize Phase I Summary Report: Evaluating the Vaccine Supply Chain in Preparation for Demonstrating Future Options in Vietnam
Project Optimize is collaborating with the Vietnamese National Institute of Hygiene and Epidemiology on a series of activities designed to assess the opportunities and needs for strengthening the immunization system in Vietnam. This document reports the results of assessments of the vaccine supply chain in Vietnam, completed in March 2010.
Publication date: March 2010
Region: Asia
- Optimize Strategy: 2009-2012
This document provides a brief overview of the Optimize project's strategy for developing delivery systems that are as advanced and innovative as the vaccines they support. Project Optimize, a collaboration between the World Health Organization and PATH, has been given a unique mandate to think far into the future: to put technological and scientific advances to work, helping define the ideal characteristics and specifications for health products; and to create a vaccine supply chain that is flexible and robust enough to handle an increasingly large and costly portfolio of vaccines.
Publication date: October 2009
Region: Global
- PATH and HIV/AIDS: Applying a Range of Strategies Across Multiple Populations to Achieve Measurable Impact
PATH has worked to reduce the global impact of HIV and AIDS since the epidemic's inception. Our collaborative approach to leadership and our technical approach to programming align closely with the US Global Health Initiative framework to promote strong health systems. This capability statement summarizes how we've conducted HIV-related activities covering a broad array of populations in 35 countries in Africa, Asia, Eastern Europe, and Latin America.
Publication date: February 2012
Region: Global


text:
EAST HARTFORD — The day started with renewed hope and the temporary traction gained by the first victory ever against a Top 25 team on the road.
The day started with Beef O'Brady's Bowl or Bust! And all that sort of meaty, motivational senior day stuff.
The season ended with the thud of Chandler Whitmer's helmet driven into the Rentschler Field turf. The season ended with the sight of too many empty seats in the Rentschler Field stands. And the 2012 season ended with what must be a steely resolve that UConn's offense cannot, must not, stink it up for so many games again in 2013.
After Whitmer was knocked out of the second game in a row with what he — not anyone from UConn — identified as a concussion, the Huskies' quarterback surely will go through a battery of tests in the coming days to make sure he's OK.
Yet if the sight-and-smell test of the season-ending 34-17 loss to Cincinnati tells us anything, it's this: What UConn must address in the coming weeks and months is a rededication to making sure that the football program regains the uphill track it had been on until Randy Edsall bolted after the Fiesta Bowl in January 2011.
Otherwise, there will continue to be the entire rows of empty seats for a most intriguing Big East finale that could have put UConn in a bowl game and did give Cincinnati a four-way piece of the Big East title. Otherwise, the ACC, the Big Ten or whatever would-be suitor isn't going to be thrilled with State U.
The program-low 22,500 season tickets — after a high of 32,000 in 2005 — must improve. The program-low average of 34,672 fans after an announced crowd Saturday of 33,112 must improve. And to be honest, I had maybe 25,000 to 26,000 folks in the stands on this cold day.
Coach Paul Pasqualoni stood there for 20 minutes after this game and this season got away from his team. He stood there politely. He answered questions in a gentlemanly, if entirely unspectacular, fashion.
But he must know this: Back-to-back 5-7 seasons aren't good enough. A 10-14 record through two seasons in charge isn't good enough. And an offense that ranked last in the Big East at 17.7 points and 318.3 total yards isn't nearly good enough. Coming into Saturday, the Huskies were ranked 113th of 120 teams nationally in total offense. And coming on the heels of a similar ranking in 2011, well, the status quo isn't good enough.
He must address offensive coordinator George DeLeone's holding jobs as both offensive coordinator and line coach. DeLeone should do one or the other. Athletic director Warde Manuel, armed with proof that firing coaches after two years has not proved fruitful, isn't firing Pasqualoni after this season. No way. No how. So save your breath, folks. Yet if Pasqualoni balks at any and all suggestions at ways to improve the offense, well, that's not smart. And if he does, clearly the weight is all on him.
When asked if the team should have been better than 5-7, Pasqualoni talked the giveaway-takeaway ratio. He talked about two years of close games that could have changed with a turnover here, a field position there, a little thing anywhere.
Sorry, Paul, but this is the last time the close-but-no-cigar defense works. Next season, you've got to do better than 5-7.
Yes, the Huskies showed spine in winning against Pittsburgh and at Louisville. They showed some spine in twice battling back in this game, but the Bearcats blew it open in the fourth quarter. The good news is that the Huskies finally scored their only touchdown in the second half of a Big East game (not counting overtime). The bad news is that two Johnny McEntee interceptions helped pave the way to 13 unanswered points in the fourth quarter.
McEntee, who threw a touchdown pass in overtime at Louisville, entered in the third quarter after a trick play ended Whitmer's season.
"I'm all right; I guess I blacked out and they wanted to take precautions since I had a concussion last week," Whitmer said. "They just didn't want me to go back in. It's part of football. The doctors say you don't want to mess around with your head."
Asked if this was worse than last week when he was knocked out of the game in Louisville, Whitmer said, "No, no, last week was pretty bad. I think being back so soon with getting hit again, they just didn't want to risk anything."
Whitmer had been crushed by Dan Giordano three plays earlier when Giordano got called for roughing the passer. There was a timeout. Scott McCummings went in for a play. But then Whitmer was left vulnerable on a trick play. He got smashed by Greg Blair along the sideline and got called for intentional grounding as he crashed to the turf.
Pasqualoni said a conservative approach was taken with Whitmer. He said as a coach he doesn't like to play doctor. And as a sports writer, I don't either. But mounting blows to the head are one of the greatest fears in athletics today. And if the UConn staff isn't wondering if they left Whitmer vulnerable with that trick play, well, they aren't human.
"Absolutely not," Whitmer answered when asked if he felt he shouldn't have gone out there. "I passed all my tests. There were extensive tests. I took days off. I was able to subside the headache and [handle] the bright lights. After that I was good. I was good to play. They did what was best and smart. I just happened to get hit again."
The cumulative effect of head blows is always a concern. Pasqualoni says once the evaluation is done on Whitmer, he'll let us know. We will hold him to that.
"Am I concerned long term?" Pasqualoni said. "I'll be concerned if the medical staff is concerned."
"I'll have to see what they say," Whitmer said. "We have a great medical staff. They'll stay on top of it. I'm not too worried."
Pasqualoni, meanwhile, had better be worried about this program. He should be worried. Manuel, too. A day of hope crashed into a disappointing season.


text:
This store has multiple locations.
Phase I, Nearest Mall Entrance: 23 780-444-3370 http://www.lenscrafters.com/
Phase III, Nearest Mall Entrance: 2 780-444-1110 http://www.lenscrafters.com/
Every hour of every day, LensCrafters is helping someone see better. Lenscrafters is your total eye-care centre. You can get your exam, buy your frames and have the lenses made all in one store.Payment Details: Cash, Debit, Visa, Mastercard, American Express 1410, 8882 170 Street
Edmonton, Alberta


text:
alright heres the dealio.
i have 2 laptops 1 is a intel one is a amd, now i have a external hdd cradle and a spare 160gb sata hdd, i need to use my intel pc to install HAZARDS os x because when i try to boot it in my amd it just passes the screen where u press f8 and it reboots, so i want to install hazards os x on the 160gb using the intel then put it into my amd, so i install it on my intel using the amd kernels and what not but when i put the 160 gb hd into my amd, i try to boot verbose mode but i get the error ioapic version 0x21 vectors 64:87,
i have tried inserting a flash drive into the computer but that doesnt make it boot, and my bios is pretty simple so theres nowhere i can disable apic, ive got achi mode enabled in my bios also. i really need help
my amd is
Amd Athlon II p340 dual core 2.2 ghz
500gb HDD
4gb sd ram
and its a ATI mobility radeon HD 5470


text:
Premium match-grade Rifle Ammo with Berger VLD (Very Low Drag) bullets that penetrate 2" to 3" before expansion. The expansion process fragments the bullets, causing massive wounding.
Because most of the bullet's energy is expended inside your target, quick and humane kills are ensured. These rounds are made with Winchester brass, match-grade primers and new powders that are not affected by temperature or altitude.
Order ONLINE Today!
* Products are made with brass casing NOT Winchester brass.
You qualify for a free gift. It will be added to your cart automatically.
Shop Similar Items
to find something that we have now or that can be backordered.
If you would like to be notified when we have this item available for sale, click
and enter your email address to receive an email notification.


text:
Most common shower valves have remodel cover plates available for installing a new valve through the wall without removing tile unnecessarily. New valves have an anti-scald feature built in which is required in many areas.
Does anyone know if anyone makes a shower/tub faucet that is on 6" center on the hot and cold knobs?
We are trying to get an old family home ready for a new tennant and have a problem with a tub and shower faucet. The push up diverter does not seat properly because of its very old age. The house is on well water and the flow of water through the valve body is also greatly reduced. My father believes that the existing 3 hole valve is an old Sears variety. About 6 years ago, we converted all of the iron pipes in the crawl space to CPVC, but did not change out this bathroom. We are not wanting to redo any of the tile in the shower. It would be nice to find another 6" OC 3 hole valve, but so far have not found one.
We figure our other option is to put in a faucet kit we saw at Lowe's that is labeled for Mobile Home which has a full shroud around the entire faucet and knobs. At least this would allow us to enlarge the existing outer holes and then seal the new shroud/escutcheon to the tile.
Any thoughts on finding a 6" OC 3 hole valve, or other ideas on how to retrofit?
Most common shower valves have remodel cover plates available for installing a new valve through the wall without removing tile unnecessarily. New valves have an anti-scald feature built in which is required in many areas.
I am not following your suggestion. A remodel plate would just cover up the large holes. But to use an 8" spacing 2 knob valve would require enlarging the existing holes and possibly risk cracking the tiles. I would be very happy to find a valve with a 6" spacing between the knobs.
Again, what I have is a 3 hole setup with all 3 hole in line horizontally. The hot and cold knobs are in line with the tub spout. The knobs (valve spacing) are 6" on center. It looks very much like this version (but this is an 8") http://www.lowes.com/pd_232617-69305...uantity_sold|1
I finally found the same fixture online, but it is out of stock at the only place I can locate it. This is what was installed and why I need to try and find the 6" spacing replacement. http://www.lockeplumbing.com/detail....r3=FEI-NL9-LED
I didn't understand that your spigot was part of the unit. An old 2 valve shower is commonly refitted using a single handle control and remodel plate. Because current code requires the shower valve to be thermostatically controlled/pressure balanced, you may have a hard time finding what you want.
Last edited by Terry; 03-20-2011 at 05:37 PM.
To limit your liability, it is recommended that you get rid of that old control valve an put one in that meets current codes. To do that, you'd need something like the remodel plate to cover the existing holes, and provide a mount for the new single-handle valve. There are two handle valves that meet current codes, but they tend to be thermostatically controlled, and the more costly option. Technically, you can repair what you have, but if you replace it, it must be brought up to code. In a tenant situation, updating it is a really good idea.
Jim DeBruycker
Important note - I'm not a pro
Retired Defense Industry Engineer; Schluter 2.5-day Workshop Completed 2013, 2014
You have two problems, one is the 6" centers valve, and the other is that it is surface mounted. Go to a recreational vehicle service company and check with them. That valve is often used in RV coaches.
Did you ever find some tub valve repair for the 6 in centers? I saw some at Lowes but they told me that they were to be used in mobile homes, I really don't understand why. I am trying to find info for changing out the 6" to 8" I can't find any instructions. If you had to convert yours to the 8" would you please share your how to's. Thanks.
Going from 6" to 8" is such a small difference, (1" on either side), that making the offset would be somewhat difficult. The reason Lowe's said that is because they are usually only used in RVs these days. Back in the old days, Milwaukee, UR, and Lady Kenmore all sold them for use in homes.
Licensed residential and commercial plumber
These are not cheap, but are adjustable for centers from 5-7". They make several versions, one has a tub spout built-in and it is available in other styles and various finishes. I have a similar one in my bathroom as I didn't want to deal with an air duct behind that wall - this gave me access to the whole shebang from the finished side. http://www.groheamerica.com/lib/0/ca...4189000_GW.pdf
Jim DeBruycker
Important note - I'm not a pro
Retired Defense Industry Engineer; Schluter 2.5-day Workshop Completed 2013, 2014


text:
You must read and accept the terms and conditions before submitting an order.
We're sorry, but our records indicate this deal is sold out.
We're sorry, your registered payment method is invalid.
You must be signed in to proceed with this order.
There was an error with your order.
We're sorry, this is not a valid business.
We're sorry, this is not a valid deal.
We're sorry, this is not a valid deal option.
You have chosen an invalid quantity.
We're sorry, there was an error processing your order.
View Gift Email Sample
Add another gift
Remove Gift
Promotion Code
Total Purchase Cost
Your certificate purchase will only be valid at the selected location.
924 N. McKnight St. Louis
In order to continue, please register below
Registration is complete! An email has been sent for confirmation.
Returning DealChicken Customer?Sign in.
Sign In
First purchase with DealChicken? Create an account.
First Name
Last Name
Confirm Password
Zip Code
We ask for zip code in order to work with merchants closest to you to get you the best deals within your neighborhood.
By Creating an account I agree to all the legal chicken scratch, Terms of Service and Privacy Notice / Your California Privacy Rights.
Returning DealChicken Customer? Sign in.
Forgot your password?
First purchase with DealChicken? Create an account.
Create Account
Total purchase cost
$25 for $50 towards 3 bottles of organic sugarless wines + 1 free bottle + free shipping
Cash refunds up to 14 days after date of purchase. See Terms of Service for refund details. May purchase multiples for self and as gifts. Tax not included. Merchant will abide by state gift certificate laws. No cash value. No cash back. May not be used in combination with any other offer or promotion. Shipping included. Merchant charges $25 online service fee at time of wine purchase.
$50 for $100 towards 5 bottles of organic sugarless wines + 2 free bottles + free shipping
Your Payment will not expire until five years after your credit card is charged.
If you do not use the Deal by the Promotion Expiration Date, the promotion is no
longer effective and the Merchant will accept the amount that you paid toward your
purchase of regularly priced goods or services until five years after your credit
card is charged.
The Merchant, not DealChicken, is solely responsible for this Deal.
This Deal is subject to the Terms of Service and How DealChicken Works.
To give this deal as a gift, enter the recipient's name below.
For gift certificates to multiple recipients, you must place multiple orders. Once
you've completed each purchase, you can print or email the certificate to the lucky
Recipient's Name:
Promotion Codes need a valid email p to be applied. We are using the following
email address for you:
If this is not the email address that was used to receive the promotion code, please
enter the correct one now. Then click Apply.
For your protection, please verify your credit card information by entering the card identification number. Card Identification Number verification is a proven too to reduce the risk of credit card fraud.
Calling All Shoppers...
Calling All Merchants...
Stay Connected!
© 2010-2014
DealChicken.com. All Rights Reserved. Users of this site agree to the
Terms of Service
Privacy Policy / Your California Privacy Rights
Ad Choices
Subscribe below and we'll send you a daily deal alert for Northern Virginia.
MontgomeryPhoenixPhoenix - East Valley Phoenix - West ValleyScottsdale/Paradise ValleyTucsonLittle RockMountain HomePalm SpringsSacramentoSalinasVisaliaDenverNorthern ColoradoDelawareWashingtonFort Myers/Cape CoralFSUJacksonvillePensacolaSpace CoastTallahasseeTampa BayUCF / East Seminole CountyAtlantaAtlanta NorthAtlanta SouthMaconGuamChicagoEast Central Indiana / RichmondIndianapolisLafayetteMuncieDes MoinesIowa CityLouisvilleAcadianaCentral LouisianaMonroe/West MonroeOpelousasShreveportBangorPortlandMontgomery CountySalisbury/Ocean CityBattle Creek / KalamazooDetroitGrand RapidsLansingLivingston CountyPort HuronCentral MinnesotaTwin CitiesHattiesburgJacksonOzarksSt. LouisGreat FallsRenoCentral JerseyCumberland CountyMonmouth CountyNorth JerseyOcean CountySouth JerseyBinghamtonBuffaloElmiraIthacaPoughkeepsieRochesterRockland-GreaterWestchesterWestchester-Shore TownsAshevilleThe TriadCincinnatiClevelandCoshocton / Holmes CountyFairfield CountyGreater CincinnatiLicking CountyMarion CountyMuskingum ValleyNorth Central OhioNorth CoastScioto ValleySalemBucks/MontgomeryPittsburghColumbiaGreenvilleSioux FallsClarksvilleJacksonKnoxvilleMurfreesboroNashvilleSouthern UtahNorthern VermontNorthern VirginiaStauntonCentral WisconsinFond du Lac / OshkoshFox CitiesGreen BaySheboygan / Manitowoc
There's one last thing we need from you to create your account.


text:
AUSTIN -- A man was struck by a car as he was directing traffic away from his broken down 18-wheeler Friday evening.
The accident occurred at the northbound service road of U.S. 183 at Anderson Mill Road just after 8 p.m.
The broken down 18-wheeler was being towed by a pickup truck. The truck attempted to move in to the access road but couldn't make the move on its own so the driver stepped out of the vehicle to divert traffic.
It was then that two cars on the road swerved to avoid hitting the driver but one car accidentally struck him.
The driver was taken to Seton Williamson in Round Rock and is in critical condition.


text:
Master keyboard, 256 voice synth
New colours too
Nektar announces controller's workflow integration with BitWig Studio DAW
Swedish synthesis at its finest?
Copyright Sonic State Ltd © 1995-2014. All rights reserved.
Reproduction in whole or in part in any form or medium without express written permission from Sonic State is prohibited.