<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>MPD</title>
	<atom:link href="http://blog.mpdaugherty.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mpdaugherty.com</link>
	<description>Mike&#039;s in China, doing tech stuff</description>
	<lastBuildDate>Thu, 11 Mar 2010 16:48:11 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='blog.mpdaugherty.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/75d78ca4874576a82c347ee3ad1b0d45?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>MPD</title>
		<link>http://blog.mpdaugherty.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.mpdaugherty.com/osd.xml" title="MPD" />
	<atom:link rel='hub' href='http://blog.mpdaugherty.com/?pushpress=hub'/>
		<item>
		<title>Staying Connected Overseas with Google Voice and Skype</title>
		<link>http://blog.mpdaugherty.com/2010/03/11/staying-connected-overseas-google-voice-skype/</link>
		<comments>http://blog.mpdaugherty.com/2010/03/11/staying-connected-overseas-google-voice-skype/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 16:17:26 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[china]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[google voice]]></category>
		<category><![CDATA[overseas]]></category>
		<category><![CDATA[skype]]></category>

		<guid isPermaLink="false">http://blog.mpdaugherty.com/?p=211</guid>
		<description><![CDATA[When I first moved to China, I decided that I still wanted to stay connected to the US.  Part of that is keeping a US phone number that can both send and receive calls and text messages.  Luckily, thanks to products like Google Voice and Skype, doing so is now cheap and easy.

If you&#8217;ve used [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=211&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>When I first moved to China, I decided that I still wanted to stay connected to the US.  Part of that is keeping a US phone number that can both send and receive calls and text messages.  Luckily, thanks to products like Google Voice and Skype, doing so is now cheap and easy.<br />
<span id="more-211"></span><br />
If you&#8217;ve used Google Voice, you are already used to the idea of having a forwarding phone number &#8211; every time someone calls your Google Voice number, the call is forwarded to your regular phone.  My phone is in China, though, so it doesn&#8217;t work quite so easily; Google Voice does not support adding overseas phone numbers to an account yet.</p>
<p>When I first set up my Google Voice account, I was living in the US and used my US cell phone.  However, I cancelled my contract with AT&amp;T, so I didn&#8217;t even have that anymore.  If you&#8217;re in a similar situation and would like to continue to have a US-based phone while you&#8217;re abroad, feel free to follow along with my setup below.</p>
<p>My first step was to turn off SMS forwarding and enable &#8216;Do Not Disturb&#8217; mode so that while I had no physical phone, my calls and text messages would not be forwarded to some stranger who ended up with my old number.</p>
<p>To do that, you need to do two things in Google Voice.  First, make sure your messages are sent to your email.  Go to Settings-&gt;Voicemail &amp; SMS.  Within that tab, turn on Voicemail Notifications and SMS Forwarding.  Don&#8217;t forget to save your changes.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Forwarding Google Voice to Email" src="http://img.skitch.com/20100311-qm7ehy9qxyy8aef38j1ja897a5.jpg" alt="Forwarding Google Voice to Email" width="390" height="301" /><p class="wp-caption-text">Forwarding Google Voice to Email</p></div>
<p>Next, turn on Do Not Disturb mode to prevent calls from being forwarded to your old phone number.  This is under Settings-&gt;Calls.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Do Not Disturb" src="http://img.skitch.com/20100311-ehwfjpe5n5ydq89arcy8hay9wd.jpg" alt="Enabling Do Not Disturb in Google Voice" width="390" height="300" /><p class="wp-caption-text">Do Not Disturb</p></div>
<p>Now, you can send and receive text messages, and you can receive incoming calls.  All the calls go to voicemail, but at least you can get messages.</p>
<p>To start making and receiving calls again for real, you need to set up a Skype account with the ability to receive calls.  A basic skype account is free, but to receive calls in the US, it will cost you $18 for 3 months.</p>
<p>Once you have a basic Skype account set up, to add support for incoming calls, go to Account-&gt;View Account from the menu bar.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Skype - View Account" src="http://img.skitch.com/20100311-dmq3rysk8tsd96aewsm3ey39j.jpg" alt="Skype - View Account" width="390" height="335" /><p class="wp-caption-text">Skype - View Account</p></div>
<p>Now that you have your Skype account page open, you want to buy an &#8216;Online Number&#8217;.  Go to that tab and set up a number in the US.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Skype - Online Number" src="http://img.skitch.com/20100311-efrhiqm1dfqfhfw5j8tq3sj196.jpg" alt="Skype - Online Number" width="390" height="172" /><p class="wp-caption-text">Skype - Online Number</p></div>
<p>Once you have your new Skype number, go back to Google Voice and add it as a telephone &#8211; Settings-&gt;Phones-&gt;Add a new phone.  I call mine &#8216;Skype&#8217;.  You don&#8217;t want to receive SMS messages on this phone, because you&#8217;re already receiving them in your email, so choose &#8216;Home&#8217; as your phone type.  Make sure you&#8217;re signed into Skype right now.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Adding Skype Number to Google Voice" src="http://img.skitch.com/20100311-dysecjqi1te7gsew4q4up53u9j.jpg" alt="Adding Skype Number to Google Voice" width="390" height="194" /><p class="wp-caption-text">Adding Skype Number to Google Voice</p></div>
<p>You&#8217;ll receive a call on Skype asking you to input a two digit number.  You&#8217;ll have to open the digital keypad to input the number.</p>
<div class="wp-caption alignnone" style="width: 350px"><img title="Skype - Keypad Button" src="http://img.skitch.com/20100311-jghbrje9nk9sx5eb83np4smmhs.jpg" alt="Skype - Keypad Button" width="340" height="392" /><p class="wp-caption-text">Skype - Keypad Button</p></div>
<p>At this point, you should delete your old number in Google Voice and turn off &#8216;Do Not Disturb&#8217;, so that Google Voice begins forwarding your calls again.  If someone calls your Google Voice number, you will receive the call on Skype, as long as you are signed in.</p>
<p>What if you are not signed in, though?  Supposing you have a phone number in your current country, you can set up Skype to forward the call to your phone number.  To do this, you need to add some Skype credit and set up a forwarding number in the View Account page.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Skype - Adding Credit and a Forwarding Number" src="http://img.skitch.com/20100311-m1i3g2eub2as9se2p43gh5qycw.jpg" alt="Skype - Adding Credit and a Forwarding Number" width="390" height="166" /><p class="wp-caption-text">Skype - Adding Credit and a Forwarding Number</p></div>
<p>Now, if you are not signed into Skype, and someone calls your Google Voice number, the call will be forwarded to Skype, which will then forward it to your new phone number at regular Skype rates (for me, US-&gt;China is 2.1 cents/minute).</p>
<p>This is pretty good, but there&#8217;s one last optimization I made.  If you are worried about people calling who don&#8217;t know you&#8217;re out of the country and waking you up in the middle of the night, you can set up Google Voice to only ring your phone during the daytime in your timezone; otherwise, calls go straight to voicemail.  This has already saved me twice when my bank called to ask me some survey questions.</p>
<p>First, make sure your Google account is set up for the right time zone.  Go to Settings-&gt;Account and select your time zone from the drop down menu.</p>
<div class="wp-caption alignnone" style="width: 401px"><img title="Setting the Google Account Timezone" src="http://img.skitch.com/20100311-q825jxhrpabtwuu73tg98ifacs.jpg" alt="Setting the Google Account Timezone" width="391" height="155" /><p class="wp-caption-text">Setting the Google Account Timezone</p></div>
<p>Then, to set up a custom ring schedule for your phone, go to Settings-&gt;Phones-&gt;Skype and click the &#8216;Edit&#8217; button.</p>
<div class="wp-caption alignnone" style="width: 401px"><img title="Google Voice - Editing the Skype Phone" src="http://img.skitch.com/20100311-be62bcs34gu6gqh1yywp4uae7b.jpg" alt="Google Voice - Editing the Skype Phone" width="391" height="166" /><p class="wp-caption-text">Google Voice - Editing the Skype Phone</p></div>
<p>Finally, click &#8216;Show Advanced Settings&#8217; and go down to the Ring Schedule settings.  Here, you can get as fancy as you want.  I have mine set up to not ring from midnight until 6am on weekdays and from 1am to 7am on weekends.</p>
<div class="wp-caption alignnone" style="width: 400px"><img title="Google Voice - Custom Ring Schedules" src="http://img.skitch.com/20100311-qq7mtiwkb94m9jdq2cq44qe56f.jpg" alt="Google Voice - Custom Ring Schedules" width="390" height="292" /><p class="wp-caption-text">Google Voice - Custom Ring Schedules</p></div>
<p>That&#8217;s it!  You now have a US phone number that you can use anywhere in the world for about 2-3 cents per minute for voice and includes free, unlimited text messages.  To make a call, just use Google Voice as usual by calling your contact and selecting &#8216;Skype&#8217; as the phone to ring.  If you&#8217;re on you&#8217;re computer and are signed into Skype, you will get the call on Skype and won&#8217;t have to pay for it at all.  If you&#8217;re not near your computer, your cell phone will ring and you&#8217;ll pay Skype&#8217;s international rate.  Incoming calls work the same way.</p>
<p>Hope this helps someone!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=211&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2010/03/11/staying-connected-overseas-google-voice-skype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-qm7ehy9qxyy8aef38j1ja897a5.jpg" medium="image">
			<media:title type="html">Forwarding Google Voice to Email</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-ehwfjpe5n5ydq89arcy8hay9wd.jpg" medium="image">
			<media:title type="html">Do Not Disturb</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-dmq3rysk8tsd96aewsm3ey39j.jpg" medium="image">
			<media:title type="html">Skype - View Account</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-efrhiqm1dfqfhfw5j8tq3sj196.jpg" medium="image">
			<media:title type="html">Skype - Online Number</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-dysecjqi1te7gsew4q4up53u9j.jpg" medium="image">
			<media:title type="html">Adding Skype Number to Google Voice</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-jghbrje9nk9sx5eb83np4smmhs.jpg" medium="image">
			<media:title type="html">Skype - Keypad Button</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-m1i3g2eub2as9se2p43gh5qycw.jpg" medium="image">
			<media:title type="html">Skype - Adding Credit and a Forwarding Number</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-q825jxhrpabtwuu73tg98ifacs.jpg" medium="image">
			<media:title type="html">Setting the Google Account Timezone</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-be62bcs34gu6gqh1yywp4uae7b.jpg" medium="image">
			<media:title type="html">Google Voice - Editing the Skype Phone</media:title>
		</media:content>

		<media:content url="http://img.skitch.com/20100311-qq7mtiwkb94m9jdq2cq44qe56f.jpg" medium="image">
			<media:title type="html">Google Voice - Custom Ring Schedules</media:title>
		</media:content>
	</item>
		<item>
		<title>Vistaprint Lessons Learned &#8211; Part 2: Career and Leadership</title>
		<link>http://blog.mpdaugherty.com/2010/02/12/vistaprint-lessons-learned-career/</link>
		<comments>http://blog.mpdaugherty.com/2010/02/12/vistaprint-lessons-learned-career/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 01:39:58 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[lessons learned]]></category>

		<guid isPermaLink="false">http://blog.mpdaugherty.com/?p=199</guid>
		<description><![CDATA[This is part two in my &#8216;Vistaprint Lessons Learned&#8217; series.  I only have four lessons this time, but I think they&#8217;re important. I&#8217;m sure I learned more than just four lessons about working efficiently, but also these lessons are more about continual improvement than many of the software development lessons were.  Therefore, I&#8217;ve spent a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=199&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This is part two in my &#8216;Vistaprint Lessons Learned&#8217; series.  I only have four lessons this time, but I think they&#8217;re important. I&#8217;m sure I learned more than just four lessons about working efficiently, but also these lessons are more about continual improvement than many of the software development lessons were.  Therefore, I&#8217;ve spent a lot of time on each of these lessons, and I&#8217;m sure I&#8221;ll continue to spend a lot more time on them in the future.<span id="more-199"></span></p>
<p><em>Don&#8217;t be bashful &#8211; you have to advertise yourself to be recognized</em></p>
<p>One of the best things that I did when I was at Vistaprint was to write some really thoughtful articles on the internal wiki while working on one of my early projects.  I didn&#8217;t even necessarily mean for people other than my partner to see it, since it was just a good place to collect notes.  However, other people did see the work I was doing and offered me an opportunity to move to the studio team where the sort of stuff I was thinking about was very important.  This was exactly what I wanted to do, because studio looked like it had some of the most interesting technology at Vistaprint.  If I hadn&#8217;t put up public wiki articles, would I have ever had the chance to move to the team I wanted to and on which I would eventually become a leader?  Who knows?</p>
<p><em>Organization is crucial</em></p>
<p>That organization is important shouldn&#8217;t really be a surprise to anyone, but I did get a lot better at it during my time at Vistaprint.  When I first started, I had just come from school and had never led a really large project that required many undefined steps and didn&#8217;t necessarily have a clear end date before.  At Vistaprint, I worked on larger and larger projects and eventually had to drive requirements, tech design, etc.  The smoothest projects had plans upfront and I spent enough time to go through the larger architecture before starting.  I&#8217;ve gotten much better at driving things to completion on my own &#8211; breaking them into manageable pieces, picking where to start, and knowing when they&#8217;re complete.  At Vistaprint, I was constantly involved in many projects at one time and wouldn&#8217;t have been able to finish all my work without being organized.</p>
<p>To keep track of projects, we used the Jira ticket management system, which was pretty good overall.  However, if you just use it in its default state, tasks can still be too coarse to plan with and follow through on.  I developed lots of tricks for staying on top of the actual individual tasks that needed to be done and recording results.  For an example of recording results, I noticed early on that I&#8217;d often want to go back and review the SQL that had been run while finishing a Jira ticket, but since SQL wasn&#8217;t tracked in subversion, I couldn&#8217;t find it.  Therefore, I made a habit of always pasting any SQL that I executed into comments on the jira ticket.  In order to keep track of individual tasks, I took a lot of tips from GTD and made sure I always knew what my next actions were so that I wouldn&#8217;t have to continually spend time deciding what to do.  Finally, I also had to have reminders even for other people&#8217;s tasks if I was waiting on them.  Everyone has good intentions, but people don&#8217;t realize that they&#8217;re holding someone up or that a task is important unless they&#8217;re told, so periodic nudges are necessary.</p>
<p><em>To be a good leader, you have to help your team produce good work</em></p>
<p>Further into my Vistaprint career, I had to organize a number of coworkers for a few projects.  The first big project I worked on was actually very tough.  I was fine managing my own work, but became a bit overwhelmed when trying to manage other people&#8217;s work as well.  I spent a lot of time at the beginning figuring out who should do what and making sure we all had assigned parts, but I didn&#8217;t spend enough time after that following up and making sure that the code everyone was writing was really good.  As my manager, Osi, but it, when you&#8217;re a leader, you can&#8217;t just make sure your work is done well, you need to make sure the team&#8217;s work is done well.</p>
<p>I think my trouble came down to two underlying reasons.  The first is that I didn&#8217;t offer enough feedback.  I let myself get a bit overwhelmed by my own work and didn&#8217;t budget enough time for design reviews, etc.  Another aspect is that even when I did get a chance to go over my coworker&#8217;s work with them, I wasn&#8217;t strong enough in my feedback.  I can think of two or three pieces of code in particular that I could tell were going to be difficult to maintain and hard to prove correct.  However, it seemed to be working, so I didn&#8217;t make the developer clean it up &#8211; instead, I said that it could be improved and that I would have done it differently, but that we&#8217;d leave it so we could keep moving forward.  I also didn&#8217;t take the time to specifically analyze everything that was wrong, so I don&#8217;t even know that the feedback I gave would help my coworkers to not make the same mistakes again.</p>
<p>The projects after that one turned out better, but I still need to improve, and helping a team perform really good work as a whole is something I am going to work on a lot while starting Bespoke Row.</p>
<p><em>No surprises == no problems</em></p>
<p>That&#8217;s not strictly true, but it&#8217;s close enough to be a lesson.  Communicating project status with everyone on the team helps everyone know what&#8217;s going on and helps adjustments to delays or other problems happen early.  Communication isn&#8217;t just telling people what you&#8217;re doing, though, it&#8217;s also listening to what they say.</p>
<p>I worked on a range of projects at Vistaprint that all had different status update styles.  In some projects, we didn&#8217;t really talk much until the show-me right before launch; if there were any problems, they were surprises to management and immediately urgent issues.  In other projects, we had to report status every day and the team constantly adjusted the schedule, moved requirements around, and prioritized in order to make sure we still got as much benefit from our work as possible.  In still other projects, we reported status frequently, but no adjustments were ever made, so we just ran into the same problems knowingly&#8230;</p>
<p>It&#8217;s possible to go too far and have the process end up taking away more time than it saves, but it&#8217;s easy for status updates to be quick and simple so they only take up more time when there&#8217;s an issue to be addressed.</p>
<p>This lesson is mostly written from a team perspective, but it&#8217;s important individually, too.  Even if your team doesn&#8217;t do status updates, etc., it&#8217;s important to keep your manager aware of what and how you&#8217;re doing.  They can help keep you from doing unnecessary work, and if you&#8217;re having problems, they&#8217;re much more likely to understand when something isn&#8217;t done perfectly or on time than if you just tell them on the due date that your project isn&#8217;t done.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=199&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2010/02/12/vistaprint-lessons-learned-career/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>Vistaprint Lessons Learned &#8211; Part 1: Software Development</title>
		<link>http://blog.mpdaugherty.com/2010/02/09/vistaprint-lessons-learned-software-development/</link>
		<comments>http://blog.mpdaugherty.com/2010/02/09/vistaprint-lessons-learned-software-development/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 04:05:07 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[career]]></category>

		<guid isPermaLink="false">http://blog.mpdaugherty.com/?p=191</guid>
		<description><![CDATA[Over the last two years at Vistaprint, I&#8217;ve grown a lot &#8211; both as a developer and in general.  I learned some lessons through mistakes I&#8217;ve made, things that I saw being done correctly, and by observing processes that could have been more efficient.
Over the this and the next two blog posts, I&#8217;ll cover the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=191&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Over the last two years at Vistaprint, I&#8217;ve grown a lot &#8211; both as a developer and in general.  I learned some lessons through mistakes I&#8217;ve made, things that I saw being done correctly, and by observing processes that could have been more efficient.</p>
<p>Over the this and the next two blog posts, I&#8217;ll cover the lessons I learned in three different categories &#8211; software development, career and personal development, and lessons that could be applied to a company.<span id="more-191"></span></p>
<h2>Software Development Lessons</h2>
<p><em>Lots of little bugs waste lots of time</em></p>
<p>This is similar to Jeff Atwood&#8217;s &#8220;<a title="Have You Met Your Dog, Patches?" href="http://www.codinghorror.com/blog/archives/001299.html">My Dog Patches</a>&#8221; post.  Sometimes it&#8217;s tempting to just fix the immediate symptom of a bug because it will be a quick fix.  However, a day or a week later, a similar bug will pop up again.  Even if these bugs only take a few minutes to cover up, if they have the same root cause, it&#8217;s probably worth just fixing the root.</p>
<p>I fell into the &#8216;patch, patch, patch&#8217; trap at least twice at Vistaprint.  The first one was on my first really large project when we were adding hats and dark t-shirts.  After the initial implementation of the system that changed user colors based on their chosen substrate (so text that might be black on a white background would be white on black backgrounds, etc.), we started having a lot of bugs in which a user could do some complicated series of actions and end up with the wrong color text on a given background.  We couldn&#8217;t tell if it was because the user had chosen that particular color or if we had an adjustment bug.  Most of the times that the bug came up, we&#8217;d change some path through the site to keep track of user colors.  Then, another bug would show up somewhere else.  Eventually, I realized that I was wasting at least a few hours every week and in order to do more work, I needed to stop spending time on substrates.</p>
<p>In the end, I just took a day to think about the problem and came up with a system that split some information in user documents into two parts.  This was a deep change in our model, but it allowed us to look at a document at any stage and prove an invariant &#8211; we could see what the original user-chosen colors were and that we were only overriding the non-customized colors with our substrate variants.  Thinking about this problem from an invariant model helped me prove that we would have no more problems in the future and saved me hundreds of hours in the long run.</p>
<p>The second time I can think of was when I was trying to add a lot of new functionality to one of our controls.  I decided to try to just add the new elements on top of the old code and modify that as little as possible.  Afterward, I was going to have a phase two in which I&#8217;d merge the old code and the new code completely.  However, the first version kept breaking and I kept patching local fixes to bugs in the old code that were causing bugs in the new code.  Eventually, I had wasted a week and I missed the first release.  At that point, I realized I just had to rewrite the old code from scratch.  I spent three days and rewrote the whole control to use my new components even for the old functionality.  In the process, I fixed a lot of existing bugs and finished the new requirements.  I had wasted a week trying to get something done in a day, then continually seeing each fix as a three-hour event.  Instead, I should have seen the bigger picture that I would have saved time by investing the three days up front and skipping the week of patches.</p>
<p><em>Code safely the first time</em></p>
<p>When I first started at Vistaprint, I was fresh out of school and had never worked on such a large application before.  I ended up with a lot of null-pointer exceptions in my code because I kept assuming I would get valid values from other code.  After a month of fixing these (particularly in javascript), I finally figured out that any time I have a question about a value, I should verify it first.  It&#8217;s easy code to write and it will save so much debugging time.  I also try to prove that APIs I write will always return valid values or have an explicit failure condition.  This is a much more general problem than null pointers, but that&#8217;s what really made me start checking.</p>
<p><em>Use a third party framework where applicable</em></p>
<p>Vistaprint has a lot of home-grown javascript code which is really good and well written.  However, many of it duplicates what&#8217;s available in open-source javascript frameworks like jQuery.  Every time we had to fix a bug or performance problem in our framework, that was time we may have been able to avoid if we had been using code that has been built and tested by a community.  Luckily, right as I was leaving, Vistaprint was starting to recognize this and move towards replacing some of our common code with jQuery.</p>
<p><em>Requirements will change and code will live longer than you expect</em></p>
<p>Make your work maintainable.  If you are working at a large company, one thing you should always try is searching your code base for words like &#8220;temp&#8221; or &#8220;hack&#8221;.  you&#8217;ll be shocked at how much throwaway code people thought they were writing two years ago that&#8217;s still in the code base.</p>
<p>In general, this isn&#8217;t terrible; sometimes the most important thing to do is to move forward with new work.  However, when the hack is unmaintainable, it will keep costing you time and effort over and over for the rest of its lifetime.  Vistaprint had a few places in the codebase that I can think of in particular that were written so quickly and haphazardly (large pieces of copy/paste, etc.) that they now suck the time out of anyone that has to modify them.  It&#8217;s so hard to understand and to find all the places that have to be modified to make one small change that projects take twice as long as they should.</p>
<p><em>Retire old code early and often</em></p>
<p>Part of a project is retiring whatever it is the new project is replacing.  At Vistaprint, I was stuck maining two APIs because we never had any time budgeted for upgrading the rest of the website to no longer use the legacy code.  We constantly had bugs because other teams would still use the old APIs to access new documents, and the old APIs had too many abstraction violations and were no longer being updated with new features that we were adding in the new APIs.  This went on for the entire two years and a half I was there.  Next time I replace some code, I&#8217;ll make sure we budget time for proving that the new code works just as well as the old, then I&#8217;ll upgrade everything.</p>
<p><em>Backwards compatibility is a big concern</em></p>
<p>This is somewhat related to the last point, because even when you have a plan for upgrading, you will have overlap and you can&#8217;t break a user&#8217;s experience just because they&#8217;ve saved something in an old format.  Even if your upgrade breaks some user&#8217;s information, you need to know how many and how valuable those items are.  At Vistaprint, we had too many documents to upgrade all of them whenever we made a small change to the storage format, but we made sure that documents were upgraded while they loaded.  We also had other ways to ensure backwards compatibility; it was never something we glossed over.</p>
<p><em>Large builds waste time</em></p>
<p>My friend Jim was fond of pointing out how much time we wasted at Vistaprint waiting for code to compile.  With hundreds of projects in our build, any of which might break during the nightly update from SVN, I think he has a valid point.  Even more than that, if we had used a technology that didn&#8217;t require a compilation step, we might be able to go through many more iterations of code in the same amount of time, because we could code, check localhost, code again without compile steps in the middle.  My next environment will definitely be one that does not require compilations for all web code.</p>
<p><em>If you want to unit test, do it from the beginning</em></p>
<p>Coding for testability requires a different type of architecture than just coding for features.  About a year into my tenure at Vistaprint, I tried to help out in a big push to add unit tests to our code, but I found adding tests required massive amounts of rearchitecture to allow us to mock important components.  I was able to get some unit tests in, but the effort mostly faded out because of the difficulty in creating them.</p>
<p>I&#8217;m not entirely convinced of the utility of having comprehensive unit testing coverage, either.  I hear a main benefit of unit tests is that they enable fearless refactoring, because you know the components still fulfill their contracts.  However, most of the time we did any significant refactoring, it involved changing APIs and therefore the unit tests also had to be rewritten.  If we&#8217;re rewriting the tests when we change the code, I&#8217;m not sure their actually preventing mistakes, since we&#8217;ll probably make a similar mistake in the test as we did in the code.  I&#8217;ll probably go with a strong set of functional tests in my next project.</p>
<p><em>Performance counts, and applications should be performance tested</em></p>
<p>This can make a big difference to user experience, as well as affecting the bottom line of things like CPU usage.  However, this is not to say that you should try to pre-optimize code while you write it.  Some of the most productive days I spent at Vistaprint involved running code with a profiler.  We were always able to significantly increase performance, and the places we made the performance gains were not necessarily where we would have guessed at first.  Moreover, we were able to keep the code readable and maintainable while still increasing the performance.  I read a great quote the other day in &#8216;Coders at Work&#8217; &#8211; &#8220;It&#8217;s much easier to optimize correct code than it is to correct optimized code.&#8221;</p>
<p><em>When optimizing, know when to stop</em></p>
<p>This applies to optimizing anything, not just performance.  If you get sucked into making something the &#8216;best possible&#8217;, you can quickly reach diminishing returns and end up paying for it in other ways.  I did this one time when trying to determine the best algorithm for manipulating images to print correctly on hats.  I spend a week trying different parameters and algorithms to make the image perfect, but in the end, my final result was hardly noticeably different than what I had on the second day.  If I&#8217;d stopped then, no one would have been less satisfied, and I would have had three days to work on other projects.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=191&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2010/02/09/vistaprint-lessons-learned-software-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>Root access on Ubuntu server?</title>
		<link>http://blog.mpdaugherty.com/2009/11/01/root-access-ubuntu/</link>
		<comments>http://blog.mpdaugherty.com/2009/11/01/root-access-ubuntu/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:10:04 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[sudo]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.mpdaugherty.com/?p=173</guid>
		<description><![CDATA[I&#8217;m in the process of setting up my very first production server using Ubuntu, and I&#8217;ve ended up spending a lot of time reading about security online.  Since I&#8217;ve always let the ops team worry about setting up environments, etc., I&#8217;ve now learned that there are a lot of different concerns to think about.
One decision [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=173&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m in the process of setting up my very first production server using Ubuntu, and I&#8217;ve ended up spending a lot of time reading about security online.  Since I&#8217;ve always let the ops team worry about setting up environments, etc., I&#8217;ve now learned that there are a lot of different concerns to think about.</p>
<p>One decision in particular is bugging me right now &#8211; how to secure the root account on my new machine? <span id="more-173"></span> So far, I&#8217;ve been doing a lot of the work by SSHing into the root account.  On the whole, this doesn&#8217;t seem so great, since it can be dangerous to use root day-to-day and always have the ability to delete anything on the system.</p>
<p>Ubuntu recommends that I create another user with sudo permission and use that day-to-day.  However, since Ubuntu also asks users for their own password when using sudo (rather than the root password), I feel this isn&#8217;t intrinsically any more secure than just having a root account.  In either case, a cracker would only have to find one password to take over the system.</p>
<p>So, my thought is to create a second user with sudo permission, change sudo to require the use of the root password, and disable remote logins for root.</p>
<p>Advantages:</p>
<ul>
<li>To gain access to root, a hacker would have to find the second username, that username&#8217;s password, and the root password.</li>
<li>Sudo provides logging of all executed commands.</li>
<li>Using the sudoers file, I could potentially mark some commands as offline to even the secondary user.  This could be useful to make sure the user can&#8217;t change the root password or access certain directories.</li>
</ul>
<p>Disadvantages:</p>
<ul>
<li>Since I don&#8217;t have local access to my machine, I&#8217;m worried about turning off SSH access to root.  What if something happens to the secondary user?  Would I be locked out?  I&#8217;m using Linode as my host, so I think I might actually be able to use their online Lish terminal to log in as root as if it were local access.</li>
<li>Every admin user would need to know the root password in order to use sudo.  I think this is ok because I&#8217;ll really only have one admin user, and that will be me.</li>
</ul>
<p>In all, I think that the advantages of my plan outweigh the disadvantages.  What do you think?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/173/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=173&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2009/11/01/root-access-ubuntu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>Exciting new running site</title>
		<link>http://blog.mpdaugherty.com/2009/08/02/exciting-new-running-site/</link>
		<comments>http://blog.mpdaugherty.com/2009/08/02/exciting-new-running-site/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 16:23:00 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://blog.mpdaugherty.com/?p=169</guid>
		<description><![CDATA[Those of you who run a lot and those of us that want to go running a lot but don&#8217;t have inspiration may be interested in my sister Erin&#8217;s new blog.  She&#8217;s writing up a lot of Boston running tours with historical information about the places you will run by.  She&#8217;s also doing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=169&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Those of you who run a lot and those of us that want to go running a lot but don&#8217;t have inspiration may be interested in my sister <a href="http://www.erinkdaugherty.com">Erin</a>&#8217;s new blog.  She&#8217;s writing up a lot of <a href="http://www.cityruntours.com">Boston running tours</a> with historical information about the places you will run by.  She&#8217;s also doing the same thing for San Francisco, where she lives now.</p>
<p>Eventually, I believe the idea is to turn them into podcasts that you can listen to as you run at 7-8 minutes per mile.</p>
<p>Anyway, I&#8217;m excited for her and thought I&#8217;d help her spread the news.  Feel free to tell any of your friends in Boston or San Francisco to check out <a href="http://www.cityruntours.com">cityruntours.com</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/169/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=169&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2009/08/02/exciting-new-running-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>SVN Haiku</title>
		<link>http://blog.mpdaugherty.com/2009/03/10/svn-haiku/</link>
		<comments>http://blog.mpdaugherty.com/2009/03/10/svn-haiku/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 14:36:02 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming haiku]]></category>

		<guid isPermaLink="false">http://mpdaugherty.wordpress.com/2009/03/10/svn-haiku/</guid>
		<description><![CDATA[Here&#8217;s my comment for my latest SVN commit:
How can I forget?
Don&#8217;t access variables,
Unless they&#8217;re not null.
Bug-ID GD-34785
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=167&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s my comment for my latest SVN commit:</p>
<p>How can I forget?<br />
Don&#8217;t access variables,<br />
Unless they&#8217;re not null.<br />
Bug-ID GD-34785</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=167&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2009/03/10/svn-haiku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>iPhone Reference Errors</title>
		<link>http://blog.mpdaugherty.com/2009/02/28/iphone-reference-errors/</link>
		<comments>http://blog.mpdaugherty.com/2009/02/28/iphone-reference-errors/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 16:14:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[my software]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://mpdaugherty.wordpress.com/?p=161</guid>
		<description><![CDATA[I&#8217;ve decided to give iPhone development a try.  I have a few ideas for cool mobile apps that I&#8217;d love to implement so that I can learn a new platform, a new language, and maybe make some money on the side&#8230;  However, I&#8217;ve remembered what I dislike most about programming &#8211; configuration.

I started out trying [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=161&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve decided to give iPhone development a try.  I have a few ideas for cool mobile apps that I&#8217;d love to implement so that I can learn a new platform, a new language, and maybe make some money on the side&#8230;  However, I&#8217;ve remembered what I dislike most about programming &#8211; configuration.</p>
<p><span id="more-161"></span></p>
<p>I started out trying interface builder and got a basic interface to show up pretty quickly, but it was rather confusing and I didn&#8217;t really know what was going on.  Next, I thought I should probably just go through the tutorials in my book (iPhone SDK Application Development by O&#8217;Reilly) so that I could get an overview of what&#8217;s actually possible with the iPhone.  That way, when I restart building my own apps it will be much faster because I&#8217;ll know what I&#8217;m doing.</p>
<p>However, I&#8217;ve now been trying to get the TextView example in Chapter 3 (Hello World) to work for almost a week!  I typed in all the code correctly (twice, into two separate projects), and it compiles fine, but all I get on the iPhone simulator is a black screen!  After a while, I found the debugger console button in XCode and realized I was getting the following errors:</p>
<p>warning: Unable to read symbols for &#8220;/System/Library/Frameworks/UIKit.framework/UIKit&#8221; (file not found).<br />
warning: Unable to read symbols from &#8220;UIKit&#8221; (not yet mapped into memory).<br />
warning: Unable to read symbols for &#8220;/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics&#8221; (file not found).<br />
warning: Unable to read symbols from &#8220;CoreGraphics&#8221; (not yet mapped into memory).</p>
<p>These frameworks are quite obviously linked in XCode (because the code completion works and the project compiles fine), but for some reason they don&#8217;t show up in the simulator.  After searching online, I&#8217;ve gotten to the point where I think it has to do with the way they&#8217;re referenced in XCode and that when running on the simulator, the application doesn&#8217;t actually compile all the references together; it just starts running without them, so you have to run it from within XCode.   Some people have also said that it had to do with breakpoints in code.  However, I&#8217;m running from within XCode and I don&#8217;t have any breakpoints, so I think it must be a file location configuration issue.  Now, I&#8217;ve had no luck finding any solutions online or by experimenting&#8230;</p>
<p>I&#8217;ll let you know how it works out; I&#8217;m not going to give up on this.</p>
<p>&#8212;- Update &#8211; March 1, 2009 &#8212;-</p>
<p>Well, the Hello World example started working&#8230;  First thing to note is that the &#8220;file not found&#8221; type warnings I noted above don&#8217;t actually seem to be related to the problem; now that it works, they still show up.</p>
<p>I fixed the blank black screen by cleaning all targets (in the Build menu), then rewriting Hello World to directly use a TextView instead of manually subclassing UIView myself.  Also, I didn&#8217;t allocate a window object; I just started using it and let the synthesize keyword work for me (before, I was trying to remove Interface Builder from the project, like it recommended in the book.  Here&#8217;s the code that first worked (I called the project &#8220;Arg&#8221; because I was so frustrated):</p>
<p>ArgAppDelegate.h:<br />
<code><br />
#import </p>
<p>@interface ArgAppDelegate : NSObject  {<br />
    UIWindow *window;<br />
	UITextView *textView;<br />
}</p>
<p>@property (nonatomic, retain) IBOutlet UIWindow *window;</p>
<p>@end<br />
</code></p>
<p>ArgAppDelegate.m:<br />
<code><br />
#import<br />
#import<br />
#import<br />
#import "ArgAppDelegate.h"</p>
<p>@implementation ArgAppDelegate</p>
<p>@synthesize window;</p>
<p>- (void) applicationDidFinishLaunching:(UIApplication *)application<br />
{<br />
	CGRect screenBounds = [ [ UIScreen mainScreen ] applicationFrame ];</p>
<p>	textView = [[MainView alloc] initWithFrame:screenBounds];<br />
	[window addSubview:textView];</p>
<p>	[window makeKeyAndVisible];<br />
}</p>
<p>- (void)dealloc {<br />
    [window release];<br />
    [super dealloc];<br />
}<br />
@end<br />
</code></p>
<p>This compiled fine and the text view showed up correctly, etc.  Next, I slowly changed the code one line at a time back to the original code, compiling at each step, to see if I could find the line that was causing the problem.  Unfortunately, I eventually came back to the original code and it worked&#8230;</p>
<p>ArgAppDelegate.h:<br />
<code><br />
#import </p>
<p>@interface MainView	: UIView<br />
{<br />
	UITextView *textView;<br />
}</p>
<p>@end</p>
<p>@interface ArgAppDelegate : NSObject  {<br />
    UIWindow *window;<br />
	MainView *myMainView;<br />
}</p>
<p>@property (nonatomic, retain) IBOutlet UIWindow *window;</p>
<p>@end<br />
</code></p>
<p>ArgAppDelegate.m:</p>
<p><code><br />
#import<br />
#import<br />
#import<br />
#import "ArgAppDelegate.h"</p>
<p>@implementation MainView</p>
<p>- (id)initWithFrame:(CGRect) rect {<br />
	self = [ super initWithFrame: rect ];</p>
<p>	if (self != nil) {<br />
		textView = [ [ UITextView alloc] initWithFrame: rect ];<br />
		textView.text = @"Hello, World!";</p>
<p>		[self addSubview:textView];<br />
	}</p>
<p>	return self;<br />
}</p>
<p>- (void)dealloc {<br />
	[ textView release ];<br />
	[ super dealloc ];<br />
}</p>
<p>@end</p>
<p>@implementation ArgAppDelegate</p>
<p>@synthesize window;</p>
<p>- (void)applicationDidFinishLaunching:(UIApplication *)application {<br />
	CGRect screenBounds = [ [ UIScreen mainScreen ] applicationFrame ];<br />
	CGRect windowBounds = screenBounds;<br />
	windowBounds.origin.y = 0.0;</p>
<p>	self.window = [ [ [ UIWindow alloc ] initWithFrame: screenBounds ]<br />
		autorelease<br />
				   ];</p>
<p>	myMainView = [ [ MainView alloc ] initWithFrame: windowBounds ];<br />
	[window addSubview:myMainView];<br />
    // Override point for customization after application launch<br />
    [window makeKeyAndVisible];<br />
}</p>
<p>- (void)dealloc {<br />
	[myMainView release];<br />
    [window release];<br />
    [super dealloc];<br />
}<br />
</code></p>
<p>main.m:</p>
<p><code><br />
#import </p>
<p>int main(int argc, char *argv[]) {</p>
<p>    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];<br />
    int retVal = UIApplicationMain(argc, argv, nil, @"ArgAppDelegate");<br />
    [pool release];<br />
    return retVal;<br />
}<br />
</code></p>
<p>I hope this helps somewhat to anyone having the same problem.  I found this incredibly frustrating and am not entirely happy about my solution here.  I still don&#8217;t really know why it happened in the first place, so I&#8217;m worried it will come up again in the future.  Let&#8217;s hope not!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=161&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2009/02/28/iphone-reference-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>怎么学中文 (How to study Chinese &#8211; for Gemma)</title>
		<link>http://blog.mpdaugherty.com/2008/09/14/how-to-study-chinese/</link>
		<comments>http://blog.mpdaugherty.com/2008/09/14/how-to-study-chinese/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 02:48:25 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[chinese]]></category>

		<guid isPermaLink="false">http://mpdaugherty.wordpress.com/?p=155</guid>
		<description><![CDATA[As you know, over the last two years, I&#8217;ve learned a bit of Chinese.  I&#8217;ve taken classes, but a lot of what I&#8217;ve learned has come through self-study outside of class as well.  Here&#8217;s a list of resources that should help you along:

1.  ChinesePod &#8211; This site hosts a daily podcast with a 20-minute or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=155&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As you know, over the last two years, I&#8217;ve learned a bit of Chinese.  I&#8217;ve taken classes, but a lot of what I&#8217;ve learned has come through self-study outside of class as well.  Here&#8217;s a list of resources that should help you along:</p>
<p><span id="more-155"></span></p>
<p>1.  <a title="ChinesePod" href="http://www.chinesepod.com" target="_blank">ChinesePod</a> &#8211; This site hosts a daily podcast with a 20-minute or so Chinese lesson.  They also have lots of resources for studying characters, etc.  I don&#8217;t actually spend a lot of time on the site, but I subscribed to the podcast and listen to them on the way to work in the morning; they&#8217;re not only good practice, but fun as well.  The whole cast sounds like they&#8217;re having fun at work, which makes the lessons quite inviting.  Unfortunately, this month, they changed the format so that the free iTunes feed only contains newbie lessons (they have Newbie, Beginner, Intermediate, Advanced-Intermediate, and Advanced).  I will probably start paying for the advanced content, because it is such a good way to practice.</p>
<p>2.  Pimsleur Language CDs &#8211; I&#8217;ve actually done Pimsleur for two languages now (German for 8 CDs and Chinese for 90) and can&#8217;t recommend it highly enough.  The Pimsleur method is entirely audio-based, so you won&#8217;t learn how to read, but you will learn how to speak and understand some simple sentences very quickly.  These are a bit more interactive than ChinesePod and work best when you actually respond outloud, so you probably shouldn&#8217;t do them on the subway.  Also, they are timed so that you optimally do one half-hour lesson a day and the next day get reminded about the material from the day before; this helps it move to your long-term memory.  I set up my computer to play one lesson a day as my alarm clock and did them in the morning before getting out of bed.  Altogether, there are three months of lessons available.</p>
<p>3.  Set up your computer to allow you to type in Chinese.  This is extremely simple on a Mac, since Chinese support is installed by default, but on a PC you&#8217;ll have to install the East-Asia Language Pack, which is a little bit of a hassle (you need the CD).  Before you do this, however, you should make sure you really know pinyin and can write the pinyin for a word after hearing it.  Typing in Chinese is a bit different than you may be used to &#8211; if you use the pinyin input method, you type a few syllables at a time, press space, then are presented with options for each of the characters.  Since so many characters in Chinese use the same pinyin (especially when it&#8217;s toneless), you have to be able to decide which is the right character, which can help with character recognition skills as well.</p>
<p>4.  Install <a title="Download Firefox" href="http://www.mozilla.com/en-US/firefox/?from=getfirefox" target="_blank">Firefox</a> and use the <a title="Chinese Popup Dictionary/Translation Extension" href="https://addons.mozilla.org/en-US/firefox/addon/3349" target="_blank">Chinese Pera-kun</a> extension.  I used to recommend <a title="WordChamp" href="http://www.wordchamp.com" target="_blank">WordChamp</a>, but this extension is like that except that it works so much more smoothly.  With this extension turned on, when you go to a page with Chinese text, all you have to do is hold your mouse over the characters that you don&#8217;t know.  A small popup will appear with the pronunciation and the definition, and it will try to find whole multi-character words in the text as well.  This is great, because as you learn to read more, you use it less.  Plus, it provides a one-to-one mapping between Chinese characters and meaning.  Translation tools like Google Translate will usually translate the whole page at a time, losing the information about the characters, how they sound, which character relates to which English meaning, etc.</p>
<p>5.  Online Chinese-English dictionaries.  There are a lot of them; I usually use <a title="MandarinTools" href="http://www.mandarintools.com" target="_blank">www.mandarintools.com</a>, but that&#8217;s just because it&#8217;s easy to remember; the design is actually not that good (you can&#8217;t directly link to the dictionary, for example).</p>
<p>6.  Finally, don&#8217;t forget that you have to use a language to really learn it.  Make friends with Chinese people and surprise them with some Mandarin phrases.  It can be a bit nerve-racking at first, but once you&#8217;ve reached the level where they can understand you, it will help a lot.  It will also make you realize how little you really know and give you inspiration to learn more.</p>
<p>Of course, all these tips aside, classes really help a lot.  A good price for Chinese classes is about $35/hour.  Even $50/hour is ok if you have an engaging native-speaker for a teacher (who also knows enough English to answer questions easily) and a good class.</p>
<p>Hope this helps.  Have fun studying Chinese; I know I do!</p>
<p>好好学习天天向上！</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mpdaugherty.wordpress.com/155/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mpdaugherty.wordpress.com/155/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=155&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2008/09/14/how-to-study-chinese/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>更多中文</title>
		<link>http://blog.mpdaugherty.com/2008/09/11/morechinese/</link>
		<comments>http://blog.mpdaugherty.com/2008/09/11/morechinese/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 02:12:04 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mpdaugherty.wordpress.com/?p=148</guid>
		<description><![CDATA[今天我要再用中文写日记。
昨天我工作一年了。  很长吗？我听说这是很段的时间工作。  但是这也是我最长的时间只作一个计划。  在大学我的计划都是三个月的。  虽然这是很长的我有时候觉得我不太孳。  我觉得这个感情是因为工作总是有别的问题。  我做完一个问题就开始别的。  很有意思的感情。  我想一个“feeling of completion”。
hmm有别的吗？  有。  今天晚上我看了我的姐姐的履历表。  我体认了我喜欢读履历表。  上大学的时候我做这么多面试所以我也想一想我的履历表。  用LaTeX写。  我觉得我现在知道很多履历表的东西。  要是你想我帮你，当然可以。
今天我也看了我的同事的blog。Lis是一个公司的作家所以她的日记很好。  名字是A Millenial Speaks。  我建议这个。
明天我要写很多中文的电脑工具。  我现在用了很多。
再见！
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=148&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>今天我要再用中文写日记。</p>
<p>昨天我工作一年了。  很长吗？我听说这是很段的时间工作。  但是这也是我最长的时间只作一个计划。  在大学我的计划都是三个月的。  虽然这是很长的我有时候觉得我不太孳。  我觉得这个感情是因为工作总是有别的问题。  我做完一个问题就开始别的。  很有意思的感情。  我想一个“feeling of completion”。</p>
<p>hmm有别的吗？  有。  今天晚上我看了我的姐姐的履历表。  我体认了我喜欢读履历表。  上大学的时候我做这么多面试所以我也想一想我的履历表。  用LaTeX写。  我觉得我现在知道很多履历表的东西。  要是你想我帮你，当然可以。</p>
<p>今天我也看了我的同事的blog。Lis是一个公司的作家所以她的日记很好。  名字是<a title="A Millenial Speaks" href="http://amillennialspeaks.wordpress.com/">A Millenial Speaks</a>。  我建议这个。</p>
<p>明天我要写很多中文的电脑工具。  我现在用了很多。</p>
<p>再见！</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mpdaugherty.wordpress.com/148/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mpdaugherty.wordpress.com/148/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=148&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2008/09/11/morechinese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
		<item>
		<title>生活在哪里？</title>
		<link>http://blog.mpdaugherty.com/2008/09/09/oneday/</link>
		<comments>http://blog.mpdaugherty.com/2008/09/09/oneday/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 03:02:25 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mpdaugherty.wordpress.com/?p=146</guid>
		<description><![CDATA[我从中国回来波士顿了。  先我觉得我得生化比较不一样。  每个东西很不一样－我有新的石室友，有的朋友们搬家走了，有的朋友们搬家到了，我知道我非常喜欢中国了。  现在我觉得我点点忘了这个感情。  每天我工作吃饭睡觉。 忙点。  我非常不要忘我的感情。  有一天我一定要住在一个外国可是现在我也觉得住在波士顿在VistaPrint工作对我生活比较好。  有的人可以说我太responsible了（怎么说？我的字典不能帮我。）我希望有好的生活所以现在我需要工作储蓄。感叹。
有一天
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=146&subd=mpdaugherty&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>我从中国回来波士顿了。  先我觉得我得生化比较不一样。  每个东西很不一样－我有新的石室友，有的朋友们搬家走了，有的朋友们搬家到了，我知道我非常喜欢中国了。  现在我觉得我点点忘了这个感情。  每天我工作吃饭睡觉。 忙点。  我非常不要忘我的感情。  有一天我一定要住在一个外国可是现在我也觉得住在波士顿在VistaPrint工作对我生活比较好。  有的人可以说我太responsible了（怎么说？我的字典不能帮我。）我希望有好的生活所以现在我需要工作储蓄。感叹。</p>
<p>有一天</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mpdaugherty.wordpress.com/146/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mpdaugherty.wordpress.com/146/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mpdaugherty.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mpdaugherty.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mpdaugherty.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mpdaugherty.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mpdaugherty.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mpdaugherty.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mpdaugherty.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mpdaugherty.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mpdaugherty.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mpdaugherty.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mpdaugherty.com&blog=1126752&post=146&subd=mpdaugherty&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.mpdaugherty.com/2008/09/09/oneday/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1789bf112f20b2b53047372a84803581?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">Mike</media:title>
		</media:content>
	</item>
	</channel>
</rss>