<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Awesome Software</title>
	<atom:link href="http://awesome-software.net/home/feed/" rel="self" type="application/rss+xml" />
	<link>http://awesome-software.net/home</link>
	<description>Provider of advanced Customer Value prediction solutions.</description>
	<pubDate>Thu, 26 Jun 2008 22:33:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>How to make hover tooltips</title>
		<link>http://awesome-software.net/home/2008/03/04/how-to-make-hover-tooltips/</link>
		<comments>http://awesome-software.net/home/2008/03/04/how-to-make-hover-tooltips/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 17:42:21 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2008/03/04/how-to-make-hover-tooltips/</guid>
		<description><![CDATA[Like almost everything that has the potential to be incredibly useful, hover tooltips have been taken over by advertisers. When you visit any number of large, ad-supported sites, you see text that looks like a link, but when you mouse over it, an irritating, usually unrelated ad pops up. It&#8217;s even worse that a significant [...]]]></description>
			<content:encoded><![CDATA[<p class="post-body">Like almost everything that has the potential to be incredibly useful, hover tooltips have been taken over by advertisers. When you visit any number of large, ad-supported sites, you see text that looks like a link, but when you mouse over it, an irritating, usually unrelated ad pops up. It&#8217;s even worse that a significant portion of them can&#8217;t even be bothered to use decent grammar.</p>
<p> </p>
<p>But I digress. If you promise to use these hover tooltips for good and not for evil, you can use them on your own site. I have found them particularly useful for one of my clients that requires a data-rich intranet. Only so much data can fit on the page, but if extra data is available on demand, it saves having to click over to a separate page and back.</p>
<p onmouseover="document.getElementById('pif').style.visibility='visible'" onmouseout="document.getElementById('pif').style.visibility='hidden'">You can mouse over <strong>here</strong> to see how it works.</p>
<p id="pif" class="hidden" style="visibility: hidden">OMG you did it!</p>
<p>Wow, that was cool. Imagine for a moment that your webpage contains a list of people, and sometimes you might want to see the addresses belonging to those people. The point of the page is to display names, but you need to see addresses often enough that it&#8217;s a pain. You could use a popup window, or you could just link the names to a page that displays the address for that name. Or you could use a hover tooltip.</p>
<blockquote>
<p onmouseover="document.getElementById('example').style.visibility='visible'" onmouseout="document.getElementById('example').style.visibility='hidden'">Alice Archetype</p>
<p id="example" class="hidden" style="visibility: hidden">123 Main St.<br />
Anytown, USA<br />
787-555-3931</p>
<p onmouseover="document.getElementById('example2').style.visibility='visible'" onmouseout="document.getElementById('example2').style.visibility='hidden'">Bob, the Builder</p>
<p id="example2" class="hidden" style="visibility: hidden">234 City Pl, Bigcity, USA<br />
723-555-3931</p></blockquote>
<p>Wow, that was sweet.  Here&#8217;s the code to do it:</p>
<blockquote>
<pre>&lt;div 

onmouseover='document.getElementById("example").style.visibility="visible"'

onmouseout='document.getElementById("example").style.visibility="hidden"'

&gt;

Alice Archetype&lt;/div&gt;

&lt;div id="example" style="border: 1px solid rgb(0, 0, 0); padding: 3px; font-size: 10px; width: 125px; max-width: 200px; position: absolute; visibility: hidden; background-color: rgb(238, 238, 238);"&gt;123 Main St.

Anytown, USA

787-555-3931

&lt;/div&gt;

&lt;div

onmouseover='document.getElementById("example2").style.visibility="visible"'

onmouseout='document.getElementById("example2").style.visibility="hidden"'

&gt;

Bob Builder&lt;/div&gt;

&lt;div id="example2" style="border: 1px solid rgb(0, 0, 0); padding: 3px; font-size: 10px; width: 125px; max-width: 200px; position: absolute; visibility: hidden; background-color: rgb(238,238,238);"&gt;234 City Pl,&lt;br&gt;Bigcity, USA&lt;br&gt;723-555-3931

&lt;/div&gt;</pre>
<p> </p></blockquote>
<p>NOTE: in order to get this to look the way you want, you will have to:</p>
<ol>
<li>Play around with the CSS styling for the hover &lt;div&gt;s</li>
<li>give a different &#8220;id&#8221; to each of the hover &lt;div&gt;s, so you can address them individually</li>
<li>possibly strip some of the extraneous whitespace out</li>
</ol>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2008/03/04/how-to-make-hover-tooltips/feed/</wfw:commentRss>
		</item>
		<item>
		<title>One Thousand Nappies</title>
		<link>http://awesome-software.net/home/2007/12/11/one-thousand-nappies/</link>
		<comments>http://awesome-software.net/home/2007/12/11/one-thousand-nappies/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 02:54:11 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/11/one-thousand-nappies/</guid>
		<description><![CDATA[Gross.
Wow.  With Nappy out less than a week, we&#8217;ve had a thousand downloads from this site.  I&#8217;m not sure how many the download sites have had.  I am pretty happy with this.  Long live the Portable Application Description, I guess!
]]></description>
			<content:encoded><![CDATA[<blockquote>Gross.</p></blockquote>
<p>Wow.  With Nappy out less than a week, we&#8217;ve had a thousand downloads from this site.  I&#8217;m not sure how many the download sites have had.  I am pretty happy with this.  Long live the Portable Application Description, I guess!</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/11/one-thousand-nappies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Painless Introduction to the MySQL JOIN</title>
		<link>http://awesome-software.net/home/2007/12/11/a-painless-introduction-to-the-mysql-join/</link>
		<comments>http://awesome-software.net/home/2007/12/11/a-painless-introduction-to-the-mysql-join/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 00:45:21 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/11/a-painless-introduction-to-the-mysql-join/</guid>
		<description><![CDATA[if you already understand the JOIN clause, you could be forgiven for thinking it needs no explanation.  like so much of programming, once you understand it it&#8217;s almost trivial.  but figuring it out is pretty hard.  let&#8217;s begin at (ok, near) the beginning.
 you have two tables with data that you want [...]]]></description>
			<content:encoded><![CDATA[<p>if you already understand the JOIN clause, you could be forgiven for thinking it needs no explanation.  like so much of programming, once you understand it it&#8217;s almost trivial.  but figuring it out is pretty hard.  let&#8217;s begin at (ok, near) the beginning.<br />
<img src="/images/join1.jpg" align="right" border="0" /> you have two tables with data that you want to cross reference.  the classic example is table a, containing customers, and table b, containing orders.  you could have just created one table, but if you expect your customers to place more than one order, you end up with needless duplication of data.  that is, with only one table, you would have to enter all of the customer information as well as all of the order information with each order.  with two separate tables, you enter the customer information just once, and then for each order the customer places, you put a reference to the customer id in the orders table.<br />
if you want to follow along, copy and paste the following code into a query window to create the tables:</p>
<blockquote><p>CREATE TABLE customers (<br />
customer_id int auto_increment not null primary key,<br />
customer_name varchar(100),<br />
customer_email varchar(100)<br />
);<br />
CREATE TABLE orders (<br />
order_id int auto_increment not null primary key,<br />
customer_id int not null,<br />
item_name varchar(100),<br />
item_price float(5,2)<br />
);<br />
#ADD SOME SAMPLE DATA#</p>
<p>insert into customers (customer_name, customer_email) values (&#8217;Alice&#8217;,'alice@example.com&#8217;),  (&#8217;Bob&#8217;,'bob@example.com&#8217;), (&#8217;Carol&#8217;,'carol@example.com&#8217;), (&#8217;Dave&#8217;,'dave@example.com&#8217;);<br />
insert into orders (customer_id,item_name,item_price) values (1,&#8217;A toaster&#8217;,12.99), (1,&#8217;Bread&#8217;,2.50), (1,&#8217;Butter&#8217;,1.79), (3,&#8217;Butter&#8217;,1.79), (3,&#8217;Cereal&#8217;,3.23), (4,&#8217;Paper&#8217;,4.99), (5,&#8217;Bread&#8217;,2.50);</p></blockquote>
<p>our example only allows for one item per order.  if we wanted to allow for more than one item per order, we would probably create a third table (&#8221;order_items&#8221;) that would contain a reference to the orders table.  the third table would not need a reference to the &#8220;customers&#8221; table, because each item in &#8220;order_items&#8221; is necessarily part of an &#8220;order&#8221;, and each order belongs to a certain customer.  in a real-world system, we would probably want to use innoDB tables and foreign keys, but for now we will focus on the JOIN.</p>
<p>the JOIN allows us to take the data that we have spread out for ease of storage and look at it as though it were all in one table, while maintaining the association between the two tables. without the JOIN, we could still get all the data, it just wouldn&#8217;t make any sense:<br />
<code>SELECT * FROM customers, orders;<br />
&lt;28 rows found&gt;</code><br />
<img src="/images/cartesianjoin.jpg" align="right" border="0" /> this can&#8217;t be the data we wanted: the result of this query is a <em>cartesian join</em>, and if you run it on large tables the result set quickly grows very large.  it pairs every row of the first table with every row of the second table.  if you have more than two tables in the SELECT clause, it outputs every row of each table with every row of all the other tables.  most importantly, it ignores the logical association between the tables.</p>
<h3>why would it do that?</h3>
<p>the database doesn&#8217;t know and doesn&#8217;t care that we have a column we&#8217;re using as a cross-reference.  JOIN uses the keyword &#8220;ON&#8221; to specify the cross-reference column.</p>
<blockquote><p>SELECT * FROM customers JOIN orders ON customers.customer_id=orders.customer_id</p></blockquote>
<table>
<tr>
<th><strong>customers. customer_id</strong></th>
<th><strong>customer_name</strong></th>
<th><strong>customer_email</strong></th>
<th><strong>order_id</strong></th>
<th><strong>orders. customer_id</strong></th>
<th><strong>item_name</strong></th>
<th><strong>item_price</strong></th>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>1</td>
<td>1</td>
<td>A toaster</td>
<td>12.99</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>2</td>
<td>1</td>
<td>Bread</td>
<td>2.5</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>3</td>
<td>1</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>4</td>
<td>3</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>5</td>
<td>3</td>
<td>Cereal</td>
<td>3.23</td>
</tr>
<tr>
<td>4</td>
<td>Dave</td>
<td>dave@example.com</td>
<td>6</td>
<td>4</td>
<td>Paper</td>
<td>4.99</td>
</tr>
</table>
<p><img src="/images/innerjoin.jpg" align="left" border="0" />that&#8217;s more like it.  what we wanted, if you remember your venn diagrams, is the <em>intersection</em> of the two tables.  that is, we want &#8220;all of the customers and their respective orders&#8221;.  without the JOIN statement, we just get &#8220;all the customers and orders&#8221;.</p>
<h3>but what about bob?</h3>
<p>too true.  a useful (or irritating, depending on whether you understand it) feature of the JOIN is that it automatically excludes rows from one table that do not have a corresponding entry in the other table.  so the above query has only given us customers that have placed orders, and orders whose customer_id exists in the &#8220;customers&#8221; table.  notably, we don&#8217;t have the customer &#8220;Bob&#8221; anywhere in the result set, or the order with order_id 7.  the default JOIN in mysql is a pure inner JOIN: it gives only the rows where the join row exists in both tables.  since Bob (customer id 4) has no orders, he doesn&#8217;t show up in the result set.  likewise since order #7&#8217;s customer_id (5), doesn&#8217;t exist in the customers table, it doesn&#8217;t show up in the result set.  we can get at this other data using the OUTER JOIN.</p>
<p>first lets try a query that gets all of the orders, along with the customer information if it exists:</p>
<blockquote><p>SELECT * FROM customers LEFT JOIN orders ON customers.customer_id=orders.customer_id;</p></blockquote>
<table>
<tr>
<th><strong>customers. customer_id</strong></th>
<th><strong>customer_name</strong></th>
<th><strong>customer_email</strong></th>
<th><strong>order_id</strong></th>
<th><strong>orders. customer_id</strong></th>
<th><strong>item_name</strong></th>
<th><strong>item_price</strong></th>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>1</td>
<td>1</td>
<td>A toaster</td>
<td>12.99</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>2</td>
<td>1</td>
<td>Bread</td>
<td>2.5</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>3</td>
<td>1</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>bob@example.com</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>4</td>
<td>3</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>5</td>
<td>3</td>
<td>Cereal</td>
<td>3.23</td>
</tr>
<tr>
<td>4</td>
<td>Dave</td>
<td>dave@example.com</td>
<td>6</td>
<td>4</td>
<td>Paper</td>
<td>4.99</td>
</tr>
</table>
<p><img src="/images/leftjoin.jpg" align="left" border="0" />ah, <strong>there&#8217;s</strong> Bob.  the LEFT JOIN has given us all of the rows of the customers table, along with any rows from the orders table that have a customer_id that exists in the customers table.  similarly, we can get all of the orders, along with any existing customer information, by using a RIGHT JOIN:</p>
<blockquote><p>SELECT  * FROM customers RIGHT JOIN orders ON customers.customer_id=orders.customer_id;</p></blockquote>
<table>
<tr>
<th><strong>customers. customer_id</strong></th>
<th><strong>customer_name</strong></th>
<th><strong>customer_email</strong></th>
<th><strong>order_id</strong></th>
<th><strong>orders. customer_id</strong></th>
<th><strong>item_name</strong></th>
<th><strong>item_price</strong></th>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>1</td>
<td>1</td>
<td>A toaster</td>
<td>12.99</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>2</td>
<td>1</td>
<td>Bread</td>
<td>2.5</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>3</td>
<td>1</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>4</td>
<td>3</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>5</td>
<td>3</td>
<td>Cereal</td>
<td>3.23</td>
</tr>
<tr>
<td>4</td>
<td>Dave</td>
<td>dave@example.com</td>
<td>6</td>
<td>4</td>
<td>Paper</td>
<td>4.99</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>7</td>
<td>5</td>
<td>Bread</td>
<td>2.5</td>
</tr>
</table>
<p><img src="/images/rightjoin.jpg" align="left" border="0" />alright, we lost bob, but now we have that order whose customer_id doesn&#8217;t exist in the customers table.<br />
the LEFT and RIGHT joins are often used, along with a WHERE clause, to find &#8220;orphaned&#8221; rows.  for instance, we could add a WHERE clause to the above RIGHT JOIN to give us <strong>only</strong> those rows where the order has no valid customer id:</p>
<blockquote><p>SELECT * FROM customers LEFT JOIN orders ON customers.customer_id=orders.customer_id WHERE customers.customer_id IS NULL;</p></blockquote>
<table>
<tr>
<th><strong>customers. customer_id</strong></th>
<th><strong>customer_name</strong></th>
<th><strong>customer_email</strong></th>
<th><strong>order_id</strong></th>
<th><strong>orders. customer_id</strong></th>
<th><strong>item_name</strong></th>
<th><strong>item_price</strong></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>7</td>
<td>5</td>
<td>Bread</td>
<td>2.5</td>
</tr>
</table>
<h3>what if we want both?</h3>
<p><img src="/images/outerjoin.jpg" align="left" border="0" />the full outer join is harder to accomplish in mysql.  but from our little exercise, we can tell it would be useful.  a query that would give you ALL of the customers and ALL of the orders, corresponding to each other where a correspondance exists.  mysql doesn&#8217;t support the FULL OUTER JOIN statement, but we can accomplish a FULL OUTER JOIN fairly easily using the UNION statement.  UNION is a way of merging the result sets of two separate SQL queries.  we&#8217;ll try it out:</p>
<blockquote><p>SELECT * FROM customers<br />
left join orders ON customers.customer_id=orders.customer_id<br />
union<br />
SELECT * FROM customers<br />
right join orders ON customers.customer_id=orders.customer_id;</p></blockquote>
<table>
<tr>
<th><strong>customers. customer_id</strong></th>
<th><strong>customer_name</strong></th>
<th><strong>customer_email</strong></th>
<th><strong>order_id</strong></th>
<th><strong>orders. customer_id</strong></th>
<th><strong>item_name</strong></th>
<th><strong>item_price</strong></th>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>1</td>
<td>1</td>
<td>A toaster</td>
<td>12.99</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>2</td>
<td>1</td>
<td>Bread</td>
<td>2.5</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>alice@example.com</td>
<td>3</td>
<td>1</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>bob@example.com</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>4</td>
<td>3</td>
<td>Butter</td>
<td>1.79</td>
</tr>
<tr>
<td>3</td>
<td>Carol</td>
<td>carol@example.com</td>
<td>5</td>
<td>3</td>
<td>Cereal</td>
<td>3.23</td>
</tr>
<tr>
<td>4</td>
<td>Dave</td>
<td>dave@example.com</td>
<td>6</td>
<td>4</td>
<td>Paper</td>
<td>4.99</td>
</tr>
<tr>
<td>0</td>
<td></td>
<td></td>
<td>7</td>
<td>5</td>
<td>Bread</td>
<td>2.5</td>
</tr>
</table>
<p>well, that worked pretty well.  we got all the data from both tables, with corresponding data if it exists.  whew!</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/11/a-painless-introduction-to-the-mysql-join/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wow, featured on Apple.com!</title>
		<link>http://awesome-software.net/home/2007/12/06/wow-featured-on-applecom/</link>
		<comments>http://awesome-software.net/home/2007/12/06/wow-featured-on-applecom/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 18:49:12 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/06/wow-featured-on-applecom/</guid>
		<description><![CDATA[Nappy is featured on the Apple Widget Download page today!  Thanks, Apple!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://awesome-software.net/home/dont-wake-the-baby-dashboard-widget/">Nappy</a> is featured on the Apple Widget Download page today!  Thanks, Apple!</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/06/wow-featured-on-applecom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Whoops!</title>
		<link>http://awesome-software.net/home/2007/12/05/whoops/</link>
		<comments>http://awesome-software.net/home/2007/12/05/whoops/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 00:12:15 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/05/whoops/</guid>
		<description><![CDATA[Software development is a process. One thing about a process is that it offers an endless series of opportunities to screw up. So today as I was going over my server logs I noticed an inordinate amount of traffic coming from the Nappy notifier widget. Way too much, unless hundreds of people had purchased it [...]]]></description>
			<content:encoded><![CDATA[<p>Software development is a process. One thing about a process is that it offers an endless series of opportunities to screw up. So today as I was going over my server logs I noticed an inordinate amount of traffic coming from the <a href="http://awesome-software.net/home/dont-wake-the-baby-dashboard-widget/">Nappy notifier widget</a>. Way too much, unless hundreds of people had purchased it in the twelve hours since I launched it. A quick check of my paypal account confirmed my suspicions - a bug in the program, not a flood of customers.</p>
<p>And lucky for them, too!</p>
<p>Here&#8217;s what I learned: when you set a &#8220;timeout&#8221; in Javascript, you create a timeout object by passing in a string. But to destroy it (that is, to get it to stop repetitively calling the same update server every few seconds) you call clearTimeout() on the <em>object</em>.   This makes sense once you think about it.</p>
<p>The widget is updated on the server now &#8230; any of the handful of you who downloaded it last night, you might want to grab the latest version.</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/05/whoops/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software to improve your baby&#8217;s sleep.</title>
		<link>http://awesome-software.net/home/2007/12/04/software-to-improve-your-babys-sleep/</link>
		<comments>http://awesome-software.net/home/2007/12/04/software-to-improve-your-babys-sleep/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 06:27:42 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/04/software-to-improve-your-babys-sleep/</guid>
		<description><![CDATA[Yes, I have just named a piece of software after a diaper.
I am proud to announce Nappy, probably the first piece of software ever named after a diaper.  It is a widget for Mac OS X that lets your family know at the push of a button that it&#8217;s a bad time for a phone [...]]]></description>
			<content:encoded><![CDATA[<blockquote>Yes, I have just named a piece of software after a diaper.</p></blockquote>
<p>I am proud to announce <a href="/home/dont-wake-the-baby-dashboard-widget/">Nappy</a>, probably the first piece of software ever named after a diaper.  It is a widget for Mac OS X that lets your family know at the push of a button that it&#8217;s a bad time for a phone call.</p>
<p>It consists of two widgets - a Parent widget, which you have; and a Friends &amp; Family widget, which other people have.  When your baby is ready for her nap, you just click the &#8220;asleep&#8221; button on your widget.   All of the Friends &amp; Family widgets in your channel update themselves automatically, showing a big red message that says &#8220;Evelyn is asleep.&#8221;</p>
<p>When she wakes back up, just click the &#8220;awake&#8221; button, and again everyone in your channel will be notified automatically.</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/04/software-to-improve-your-babys-sleep/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Yet More Awesome Software</title>
		<link>http://awesome-software.net/home/2007/12/01/yet-more-awesome-software/</link>
		<comments>http://awesome-software.net/home/2007/12/01/yet-more-awesome-software/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 02:35:16 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/12/01/yet-more-awesome-software/</guid>
		<description><![CDATA[Awesome Software (that is, I), is pleased to announce a unique new product: Coursify.
Coursify helps you grow your business by making it absurdly easy to publish your course listings online.  You manage your classes through a simple, fast, intuitive management panel, and a searchable list is automatically created for your customers.  And it is automatically [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome Software (that is, <strong><em>I</em></strong>), is pleased to announce a unique new product: <a href="http://coursify.com">Coursify</a>.</p>
<p>Coursify helps you grow your business by making it absurdly easy to publish your course listings online.  You manage your classes through a simple, fast, intuitive management panel, and a searchable list is automatically created for your customers.  And it is automatically kept up to date with the latest information on enrollment.</p>
<p>It&#8217;s easy to use, and free for up to ten courses.  Go ahead a <a href="http://coursify.com/index.php?page=signup">give it a try!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/12/01/yet-more-awesome-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LILE, coming soon.</title>
		<link>http://awesome-software.net/home/2007/11/16/lile-coming-soon/</link>
		<comments>http://awesome-software.net/home/2007/11/16/lile-coming-soon/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 04:54:38 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<guid isPermaLink="false">http://awesome-software.net/home/2007/11/16/lile-coming-soon/</guid>
		<description><![CDATA[My latest project is a program to identify groupings in large amounts of data.  A bit abstract, I admit, but it has wide-ranging applications.  By identifying groupings, you free yourself from the requirement that all data be numeric.  Your data models no longer need to be straight, or even continuous, lines.
Your predictive [...]]]></description>
			<content:encoded><![CDATA[<p>My latest project is a program to identify groupings in large amounts of data.  A bit abstract, I admit, but it has wide-ranging applications.  By identifying groupings, you free yourself from the requirement that all data be numeric.  Your data models no longer need to be straight, or even continuous, lines.</p>
<p>Your predictive power goes way, way up.</p>
<p>At this stage of development it works, if a bit slowly, and preliminary results are promising.  I am testing on a variety of datasets used for machine learning research kindly provided by the folks at Carnegie-Mellon (these are public datasets, I don&#8217;t have any big university connections right now <img src='http://awesome-software.net/home/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).   How promising?  LILE is predicting bodyfat percentages ten percent better than multiple linear regression, and customer churn fifty percent better.</p>
<p>I am very excited, and hope to have a private alpha release sometime in the next three weeks.  <a href="/home/contact" title="Contact">Contact me</a> if you&#8217;d like to be part of it!</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/11/16/lile-coming-soon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Welcome to Awesome Software!</title>
		<link>http://awesome-software.net/home/2007/03/06/hello-world/</link>
		<comments>http://awesome-software.net/home/2007/03/06/hello-world/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>Will</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Awesome Software develops complete data-mining solutions for companies of all sizes. I can help you make the most effective use of your company&#8217;s best asset - it&#8217;s data.  I specialize in solutions custom-tailored to your business&#8217; domain, adapted from the most effective predictive modeling algorithm ever developed.
Effective modeling can tell you more than any human [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome Software develops complete data-mining solutions for companies of all sizes. I can help you make the most effective use of your company&#8217;s best asset - it&#8217;s data.  I specialize in solutions custom-tailored to your business&#8217; domain, adapted from the most effective predictive modeling algorithm ever developed.</p>
<p>Effective modeling can tell you more than any human ever could about your data.  It can predict customer behavior with startling accuracy, and give you powerful tools to identify your best customers.  The right model can identify trends in data, and combinations of identifying traits too complex to be found by the naked eye.</p>
<p>You can get started by yourself by downloading CrunchTime, the easiest-to-use data mining software in the whole world.</p>
]]></content:encoded>
			<wfw:commentRss>http://awesome-software.net/home/2007/03/06/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
