<?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/"
	>

<channel>
	<title>Calling Shotgun</title>
	<atom:link href="http://www.callingshotgun.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.callingshotgun.net</link>
	<description>Hitching a ride on the information superhighway.</description>
	<lastBuildDate>Fri, 08 Dec 2017 23:37:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.3.2</generator>
	<item>
		<title>Migratr 1.06 &#8211; Zenfolio fix and general cleanup</title>
		<link>http://www.callingshotgun.net/migratr/migratr-1-06-zenfolio-fix-and-general-cleanup/</link>
				<comments>http://www.callingshotgun.net/migratr/migratr-1-06-zenfolio-fix-and-general-cleanup/#comments</comments>
				<pubDate>Tue, 13 Oct 2009 03:48:45 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Migratr]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=105</guid>
				<description><![CDATA[This is a bugfix release. Those of you who were trying to migrate to/from Zenfolio should have no problems now:) Also did a little cleanup and removed some obsolete import/export options: -AOL Pictures: Site no longer exists -Faces.com: Site (the one I built support for) no longer exists, and has been replaced with a social [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>This is a bugfix release.  Those of you who were trying to migrate to/from Zenfolio should have no problems now:)</p>
<p>Also did a little cleanup and removed some obsolete import/export options:<br />
-AOL Pictures:  Site no longer exists<br />
-Faces.com:  Site (the one I built support for) no longer exists, and has been replaced with a social network.<br />
-&#8220;Phanfare 2&#8221;:  There were previously two versions of Phanfare set up for migration from within Migratr.  This is because Phanfare went through some pretty drastic changes, and for a time was really two different services-   The old one and the new one (designated as &#8220;Phanfare&#8221; and &#8220;Phanfare 2&#8221;).  They were kind enough to leave the old version of the site up for several months in order to give users time to debate whether to convert over to an account on the new Phanfare (managed internally by them) or to determine that the new vision for the site wasn&#8217;t for them and migrate elsewhere (which is where Migratr came into play).  The transition is complete, and there&#8217;s no longer a reason to keep the API for the &#8220;Old&#8221; Phanfare in Migratr.  So it&#8217;s been removed, and to clear things up, &#8220;Phanfare 2&#8221; (the New Phanfare) has been renamed simply to &#8220;Phanfare&#8221;, as there&#8217;s only one version up anymore.</p>
<p>As mentioned in a previous post, I&#8217;ll be digging into Gallery 2.3 issues as time permits.  My earlier statement that &#8220;It&#8217;s stopped working completely&#8221; turns out to be wrong-  It works for me, which is really frustrating-  I can&#8217;t duplicate the issues others are experiencing.  Those of you who have emailed me about Gallery support-  I might be hitting you up for beta testing in the coming weeks:)</p>
<p>For the time being&#8230; Enjoy the download, and happy Migrating!<br />
-Alex</p>
<p>[download#1#image]</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/migratr/migratr-1-06-zenfolio-fix-and-general-cleanup/feed/</wfw:commentRss>
		<slash:comments>120</slash:comments>
							</item>
		<item>
		<title>Zenfolio/Menalto woes</title>
		<link>http://www.callingshotgun.net/uncategorized/zenfoliomenalto-woes/</link>
				<comments>http://www.callingshotgun.net/uncategorized/zenfoliomenalto-woes/#comments</comments>
				<pubDate>Mon, 12 Oct 2009 20:45:27 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=103</guid>
				<description><![CDATA[There&#8217;s been a bit of a surge of reports of late that Migratr crashes on export to Zenfolio. I just got an email from them mentioning this and suggesting that I should update my API endpoints (I&#8217;m pointing to an older version of the API- Far back enough to be before they started versioning for [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>There&#8217;s been a bit of a surge of reports of late that Migratr crashes on export to Zenfolio.  I just got an email from them mentioning this and suggesting that I should update my API endpoints (I&#8217;m pointing to an older version of the API-  Far back enough to be before they started versioning for consistency) and it should work&#8230; So, everyone, sorry for the inconvience, and that it&#8217;s taken this long for me to get around to it.  Life&#8217;s been a little hectic of late :)  I&#8217;ll be digging into this and verifying the fix very soon, and should have a working version up in the next day or two.</p>
<p>Also, for those of who you are having issues with Gallery-  I have to admit Gallery support has always been a little sketchy with Migratr.  Different hosting setups have meant that one person&#8217;s 2.2 installation could work with Migratr, wheras someone else&#8217;s would tank out while it was still pulling album data (before photos were even downloaded)-  On top of that the &#8220;API&#8221; is meant to be used with PHP, which Migratr isn&#8217;t even written in.  Support basically started out by ripping code out of some open source .NET Gallery remote and tweaking it to work with Migratr.  With 2.3 this seems to have stopped working completely, so in the coming weeks I&#8217;ll be hunting around for a suitable replacement.  </p>
<p>Also, if any experienced .NET developers can recommend good plugin frameworks, I&#8217;m planning on modifying the core Migratr code so that someone can write a service support DLL, drop it in the migratr directory, and have it show up as an option.  This would help enormously with Migratr&#8217;s ability to support closing services, since it doesn&#8217;t always happen at a time where it&#8217;s possible for me to ninja something together (especially since they&#8217;re often places where I don&#8217;t have an account, and have closed account creations).</p>
<p>Thanks for the patience.  Happy migrating!</p>
<p>-Alex</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/uncategorized/zenfoliomenalto-woes/feed/</wfw:commentRss>
		<slash:comments>90</slash:comments>
							</item>
		<item>
		<title>Contacts Evolved &#8211; My first Android Project</title>
		<link>http://www.callingshotgun.net/geekery/contacts-evolved-my-first-android-project/</link>
				<comments>http://www.callingshotgun.net/geekery/contacts-evolved-my-first-android-project/#comments</comments>
				<pubDate>Tue, 01 Sep 2009 07:02:08 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=99</guid>
				<description><![CDATA[Just completed my first project for the android, and submitted to the ADC2 with about 12 minutes to spare. Last minute bugs are dangerous things. Oh, man. Observe! Details later. For now, sleep.]]></description>
								<content:encoded><![CDATA[<p>Just completed my first project for the android, and submitted to the ADC2 with about 12 minutes to spare.  Last minute bugs are dangerous things.  Oh, man.</p>
<p>Observe!</p>
<p><img src="http://www.callingshotgun.net/wp-content/uploads/2009/08/submission_screenshot.png" alt="Screenshot of my submission" title="Screenshot of my submission" width="570" height="248" class="size-full wp-image-100" srcset="http://www.callingshotgun.net/wp-content/uploads/2009/08/submission_screenshot.png 570w, http://www.callingshotgun.net/wp-content/uploads/2009/08/submission_screenshot-300x130.png 300w" sizes="(max-width: 570px) 100vw, 570px" /></p>
<p>Details later.  For now, sleep.</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/geekery/contacts-evolved-my-first-android-project/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
							</item>
		<item>
		<title>Mixed Feelings on The Sumo Omni Plus</title>
		<link>http://www.callingshotgun.net/uncategorized/mixed-feelings-on-the-sumo-omni-plus/</link>
				<comments>http://www.callingshotgun.net/uncategorized/mixed-feelings-on-the-sumo-omni-plus/#comments</comments>
				<pubDate>Sat, 28 Feb 2009 20:22:17 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=92</guid>
				<description><![CDATA[I just received my Sumo Omni Plus yesterday. I&#8217;ve been excited about getting this thing for weeks, but after setting everything up, I noticed it was missing something- The straps. If you go to the website, you&#8217;ll notice that in the pictures of the product, this monstrous beast of a pillow-chair-thing has straps on the [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I just received my <a href="http://www.sumolounge.com/omniPlus.php?re=na">Sumo Omni Plus</a> yesterday.  I&#8217;ve been excited about getting this thing for weeks, but after setting everything up, I noticed it was missing something-  The straps.</p>
<p>If you go to the website, you&#8217;ll notice that in the pictures of the product, this monstrous beast of a pillow-chair-thing has straps on the corners which snap together, allowing you to make it form into a chair.  This is why I&#8217;d chosen this product.  The versatility of having a crash pillow that turns into a chair, that can be picked up and chucked in a closet when not in use (so as to free up room), so that you can optimize for space or seating in the living room on the fly depending on how many people are over.  This is what made the Sumo Omni Plus a theoretical masterpeice-  All the reviews I read touted those straps as the killer feature, the thing that really set it apart from the regular omni.  But what I received in the mail wasn&#8217;t that masterpeice.  Instead, I got what amounts to a giant freakin&#8217; pillow.  Not that it isn&#8217;t an AWESOME pillow.  It&#8217;s still comfortable (even though the foam inside hasn&#8217;t finished expanding/settling-  it&#8217;s been less than 24 hours), and you can flip it on it&#8217;s side and sit on it in a comfortable, slightly goofy fashion.</p>
<p>After going over all the packaging twice to make sure that it wasn&#8217;t simply an external set of straps that I&#8217;d tossed aside accidentally, I called customer support this morning, and was pretty surprised to hear their explanation.</p>
<p>&#8220;The new model doesn&#8217;t come with straps.&#8221;</p>
<p>Excuse me?  So I basically just paid 50 bucks more for a regular Omni, only a little smaller and with a microsuade cover instead of rip-proof nylon?  The pictures on the website were still the model with straps.  This is where I honestly started to feel gipped, as we were pretty much matching the definition of &#8220;not as advertised&#8221;.  The next words out of my mouth were, as a software developer, words I never thought I&#8217;d ask.  &#8220;Can I exchange it for the older version, then?&#8221;  She said that the old version was sold out, but that she&#8217;d check with shipping to see if they had any left, and call me back.  I specified that I didn&#8217;t actually need them to send me a full new Omni Plus-  I only wanted a new cover, the one that came with straps.</p>
<p>I suppose, worst-case scenario, I can just exchange it for a Gamer instead.  Since the primary role is going to be as a chair and not a pillow, this seems like the logical substitute (also since it&#8217;s the exact same price).  However, I&#8217;m a little worried about the return policy, which states that returns must be pre-approved by the Customer Service Department (is &#8220;I was expecting your older model, not the new one where you took away the feature I most cared about&#8221;), not to mention instructions, which state that all returns must be made in original packaging.  This is a problem because the original packaging was vacuum-sealed, and the exposure to air has ballooned the end product into something much larger than one could ever hope to fit back into the box without the proper machinery.  To give you an idea, here&#8217;s a picture of the Omni, standing next to the box it was shipped in.</p>
<p><img src="http://farm4.static.flickr.com/3614/3316380609_86597b97cb.jpg" /></p>
<p>At the very least, I think they need to update the pictures on the website, and throw an article into their &#8220;news&#8221; section that specifies the change to the omni.  I have no idea what else is different in the &#8220;new version&#8221; of the omni plus-  God knows why they removed those straps, but having done so they at least have a responsibility to not advertise something with more features than what they&#8217;re actually providing.  As for sumo customers out there-  I&#8217;d ignore the omni plus until this gets addressed.  If what you want is primarily a crash mat, rock the straight Omni and save yourself 50 bucks.  If you want something that&#8217;ll primarily be used as a chair, you should probably lean toward the &#8220;gamer&#8221; model.</p>
<p>Still waiting on a response from customer service as to whether I can get the old cover, straps attached, that actually makes it worthy of the &#8220;Plus&#8221; moniker, or not.  I&#8217;ll let you know how that turns out.</p>
<p>-Alex</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/uncategorized/mixed-feelings-on-the-sumo-omni-plus/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
							</item>
		<item>
		<title>Top 5 signs you&#8217;re an internet cliche</title>
		<link>http://www.callingshotgun.net/geekery/top-5-signs-youre-an-internet-cliche/</link>
				<comments>http://www.callingshotgun.net/geekery/top-5-signs-youre-an-internet-cliche/#comments</comments>
				<pubDate>Tue, 20 Jan 2009 18:08:13 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=84</guid>
				<description><![CDATA[You think being smart makes you better than everyone on the internet. You get angry and mean when others don&#8217;t acknowledge it. We all know the internet is full of dumbasses. Newsflash, you&#8217;re one of them. Being smart isn&#8217;t enough to set you apart around here. Welcome to the party. You type &#8220;M$&#8221; when referring [&#8230;]]]></description>
								<content:encoded><![CDATA[<h4>You think being smart makes you better than everyone on the internet.  You get angry and mean when others don&#8217;t acknowledge it.</h4>
<p>We all know the internet is full of dumbasses.  Newsflash, you&#8217;re one of them.  Being smart isn&#8217;t enough to set you apart around here.  Welcome to the party.</p>
<h4>You type &#8220;M$&#8221; when referring to Microsoft.</h4>
<p>Congratulations, you&#8217;re against the establishment!  Way to be a rebel, just like everyone else.  Showing contempt for a company that charges you for use of their hard work is kind of ridiculous, so if you&#8217;re a consumer, you&#8217;re being lame.  If you&#8217;re a linux hacker, you&#8217;ve got a leg to stand on, but you&#8217;ve also got a day job where they pay your salary by charging other people money.  And if you&#8217;re an Apple user, then, let&#8217;s face it, you&#8217;re being an epic hypocrite.  Before you go off on another rant about how bloated a Microsoft OS is, check out your mac&#8217;s price tag.</p>
<h4>You make constant references to anything someone with &#8220;geek cred&#8221; would know, in parantheses, ending in &#8220;anyone?&#8221; (slashdot/reddit commentors, anyone?)</h4>
<p>Often the committer of this particular sin is masking it as an on-topic reference.  This is not impressive.  But it is annoying.  It is especially egregious if you do this during one-on-one conversation.</p>
<p>BTW, I consider this to be <a href="http://www.codinghorror.com/">Jeff Atwood&#8217;s</a> only serious blogging sin.  I love that blog, but every time he does that I wince a little, just because I think he&#8217;s better than that.</p>
<h4>You Namedrop e-famous bloggers like Yegge, Atwood or Spolsky</h4>
<p>I just got called out on this one, by a friend who saw point #3.  Look, none of us are perfect.  That&#8217;s why it&#8217;s a cliche :D</p>
<h4>You&#8217;ve actually answered a &#8220;How do I do (this) in (this environment)?&#8221; question with &#8220;switch to (my environment of choice)&#8221;.</h4>
<p>This one is pretty generic.  So, examples!</p>
<p>Q:  How do I do (x) in PHP?<br />
A:  Switch to Rails  (In the history of the internet, the person who asked this one has never once gone &#8220;I talked to my boss, and convinced him you were right!  We&#8217;re scrapping 3 years of development to switch to a language/framework none of us know, on your say-so!  Everyone&#8217;s cool with it!  Hooray!&#8221;)</p>
<p>Q:  How do I do (x) in Windows?<br />
A:  Switch to *nix  (Because there&#8217;s no way the learning curve is going to become a bigger issue than the original problem, right?)<br />
Alternate A:  Switch to Mac (Often, in this case, the real answer in windows is to right click on something.  HA! I&#8217;m mostly kidding, though I&#8217;ve witnessed it in the wild)<br />
Non-existent A:  Worth mentioning, I&#8217;ve never seen anyone say &#8220;switch to windows&#8221; when asked the question in linux or apple forums.  You can interpret that any way you want, but I think it&#8217;s at least partially because the reaction of a windows user is something along the lines of &#8220;I don&#8217;t know.  I&#8217;m a windows user.&#8221;</p>
<p>Q:  How do I make my ford truck stop making this noise?<br />
A:  Switch to Chevy<br />
I&#8217;m not a car guy, but from I understand, in certain parts of the country, saying this out loud is a really bad idea.  Ah, the anonymizing power of the interwebs.</p>
<p>We&#8217;re all guilty of something.  Be it namedropping, inappropriate evangalizing, self-important rambling (Yeah, I&#8217;m talking to <a href="http://www.callingshotgun.net/geekery/top-5-signs-youre-an-internet-cliche/">you!</a>), none of us are perfect.  But I think a goal we can all agree on, an ideal we should continue to strive for, is this.</p>
<p>Don&#8217;t be <i>that guy</i></p>
<p>-Alex</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/geekery/top-5-signs-youre-an-internet-cliche/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
							</item>
		<item>
		<title>Making Your Webservice More Developer Friendly</title>
		<link>http://www.callingshotgun.net/geekery/making-your-webservice-more-developer-friendly/</link>
				<comments>http://www.callingshotgun.net/geekery/making-your-webservice-more-developer-friendly/#comments</comments>
				<pubDate>Sun, 04 Jan 2009 23:43:53 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=77</guid>
				<description><![CDATA[I&#8217;ve been working on Migratr for around a year and a half now, and in that time have added support for 11 different webservices. Sometimes I&#8217;ve grabbed third party libraries designed for interacting with those API&#8217;s, other times I coded up the service-interaction layer myself, and I&#8217;ve gone through SOAP, Rest (via URL munging or [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>I&#8217;ve been working on <a href="http://www.callingshotgun.net/hard-rock-casino-jobs/">http://www.callingshotgun.net/hard-rock-casino-jobs/</a>for around a year and a half now, and in that time have added support for 11 different webservices.  Sometimes I&#8217;ve grabbed third party libraries designed for interacting with those API&#8217;s, other times I coded up the service-interaction layer myself, and I&#8217;ve gone through SOAP, Rest (via URL munging or XML via post), JSON and in one case, even webscraping.  It&#8217;s been an immensely educational and rewarding experience, with degrees of difficulty varying from totally easy (23HQ, by copying the flickr API verbatim and changing only URL endpoints, took about an hour including testing) to ridiculously difficult (AOL Pictures might have been more popular if their API was more than lipservice).</p>
<p />
I can only speak to Photo-related web services, as that would be the area where I have the most experience.  But I think most web services &#8220;get it&#8221; with regards to an API-  By publishing an API, and enabling and encouraging developers to interact with your webservice, you&#8217;ve effectively given yourself a dev team larger than you could ever hope to afford.  Users passionate about your services, with ideas on how to extend and improve it, and the know-how to implement those great ideas.  More applications related to your website means more ways for users to interact with it, which means more chance of a &#8220;killer feature&#8221; written by a user of your service that ends up driving thousands of new users to you, any one of which can be a developer that continues the cycle.  It&#8217;s an upward spiral.</p>
<p />
But it takes more than just publishing an API.  You have to make your developers WANT to write stuff for your service.  Make it easy and enjoyable for them, and remove as many roadblocks and speedbumps as you possibly can so that they can complete their brilliant idea before throwing up their hands in frustration, or slowly, quietly losing motivation amidst a sea of vicious bugs, counter-intuitive behavior and documentation that either looks like it was written by Hemingway or run through babelfish.</p>
<p />
Given my relative experience in dealing with API&#8217;s en masse, I decided to compile a checklist for being developer-friendly.  Some of it is necessary.  Some of it is more along the lines of &#8220;helpful&#8221;.  Some of it is just wishful thinking.  But these steps will help you tenfold.</p>
<p />
<h2>Let developers know your API exists</h2>
<p>Publish a listing for your API on <a href="http://www.callingshotgun.net/best-online-blackjack-game-android/">best online blackjack game android</a>, effectively giving the internet a cheat-sheet for your API-  Protocols (soap, json, etc), documentation links, fee information (free non-commercial, pay commercial?), 1st and 3rd party libraries.  You&#8217;ll get legions of volunteer devs through this site, who might not have even known your service existed.  Also, a &#8220;developers&#8221; link in the footer of your website is like gold.  It should link to a page providing the basic information:  API Sign-up process, documentation, etc. I don&#8217;t want to go trolling through support documentation or chat live with a customer service rep.  Just let me hit the ground running.</p>
<p />
<h2>The developer section of your site should be more than a couple pages.  It should be a microsite.</h2>
<p>In no particular order, this should include most (if not all) of:</p>
<ul>
<li>developer forums</li>
<li>some of your own developers monitoring and answering questions in the forums</li>
<li>API documentation</li>
<li>links to working third-party applications that use your API, or third-party libraries that access it</li>
<li>API news and updates, blog-style</li>
<li>a &#8220;My Profile&#8221; section showing me my own API keys, stored app descriptions and (unusual, but I consider this a bonus) usage statistics.</li>
</ul>
<h2>Don&#8217;t half-ass your API</h2>
<p>AOL Pictures API was little more than &#8220;Look at us, we have an API!&#8221; lipservice.  There&#8217;s no way to programmatically log-in and access private pictures, there&#8217;s no way to upload via the API, and the system for returning information about those pictures was unintuitive bordering on useless.  The API should be a programmatic reflection of what your web service is capable of.  On the complete opposite end of the spectrum from AOL, Flickr has an AMAZINGLY comprehensive API.  You can fine-tune not only what data, but how much of it you want returned. You could practically create a flickr clone using the flickr API as a backend.  (Disclaimer:  Morally and legally, that&#8217;s a really bad idea.)  Another bonus-points case:  Kristopher Tate (of <a href="http://www.callingshotgun.net/casinos-in-southeast-florida-beaches-close/">http://www.callingshotgun.net/casinos-in-southeast-florida-beaches-close/</a> fame) once told me that the Zooomr website was a display layer built on top of the API.  I&#8217;m not asking you to do that, it&#8217;s a decision you have to make.  But we know for a fact that, in this case, it&#8217;s well-tested:D  It&#8217;s also based off the Flickr API, which means it&#8217;s super-easy to modify a Flickr app to make it Zooomr-compatible.  </p>
<p />
Another point, try to provide a few different options in terms of protocol.  At least two of SOAP, JSON, or straight-up REST.  Recently I came across an API that&#8217;s accessed via SOAP, but doesn&#8217;t provide a WSDL file.  That&#8217;s cruel.  I mean it, it gives me the distinct impression they dislike me personally:P  Seriously, though, different languages a way of making different protocols easier/harder.  Giving the option of parsing XML vs JSON, or providing a WSDL file and letting a code generator handle all that for you (a serious perk of client development in .NET) makes your API more language-agnostic and universally accessible. To summarize, the API should be stable, complete, flexible, and not counter-intuitive.</p>
<h2>API Documentation:  People actually read it.</h2>
<p>Again, Flickr comes to mind as a shining example.  Every method you call via their API has documented behavior on whether it needs the user to be authenticated, parameters, example of the response sent from the server, and possible error codes.  There should be a TOC of methods split up by category (for example: photos, albums, user groups, friend list, authentication) so I can quickly and easily hone in on exactly what I&#8217;m looking for.  Provide links to every third-party library that someone has written for accessing your service in a particular language.  </p>
<p />
Provide tutorials and walkthroughs, and if a third-party dev writes one too, link to that.  Throw in some sample code in a few popular languages (Java, c#, python, ruby, perl) so people know what the code should look like.  You don&#8217;t have to do this for every method.  I&#8217;d recommend doing this for the authentication step, as developers will be able to test this without getting anything else right first.  The net idea is that I should be able to get rocking with your API as soon as possible in the language of my choice, provided it&#8217;s a relatively common language (I don&#8217;t expect there to be a &#8220;Flickr Haskell Library&#8221;, for instance.  But I do expect a Java one).  Good documentation means your dev forums will be manageable.</p>
<h2>Dev Accounts</h2>
<p>I&#8217;m a little biased on this one, given that I interact with so many different webservices.  But of all the services I use, most have &#8220;pro&#8221; accounts that I need to be able to test against.  Some sites (major props to <a href="http://www.callingshotgun.net/borderlands-2-slot-machine-differences-between/">http://www.callingshotgun.net/borderlands-2-slot-machine-differences-between/</a>and <a href="http://www.zenfolio.com">Zenfolio</a>) comp pro accounts to developers who have written software that interacts with their services, as a matter of practice.  Others will give the developer a one-year coupon upon request, while others don&#8217;t give us anything at all.  Software is going to need testing, and if I run into a free-account limit for uploading data to your webservice while testing my software, I&#8217;m either going to have to cough up money for the right to add value to your service, go through the lengthy process of clogging your database with test accounts, or wait a month until I can do more testing.  These are all roadblocks.  I&#8217;m trying to write something your users will appreciate.  Please don&#8217;t leave me hanging like this!  </p>
<p>One thing that I would *like* to see, that I haven&#8217;t yet, is a special developer account-  Not just a comped pro account, but a user account specific to developers.  This account could have behavior specific to testing my software, like</p>
<ul>
<li>API-Accessible switch between account types, like &#8220;free&#8221;,&#8221;standard&#8221;,&#8221;pro&#8221;,&#8221;super-mega-expensive-awesome-pro-account-of-extreme-justice&#8221;, in terms of toggling things like upload/download limitation that vary from account to account, to reproduce errors my users are seeing and test for different errors that might come up</li>
<li>None of the things I do via the API show up in &#8220;Latest activity&#8221; bar on front of site.  If I&#8217;m running tests, it would be good etiquette for me to be able to avoid what could be considered spamming</li>
<li>24-hour deletes or auto-rollbacks:  If it&#8217;s a test account, It&#8217;d be nice for me to be able to keep the account empty when I&#8217;m done testing, without writing housekeeping code on my end that just deletes everything.  This means I&#8217;m trying to take up less space on your servers.  I&#8217;m not saying this should be automatic, just we&#8217;d both be happier if I had the option.</li>
</ul>
<p>Sites that don&#8217;t hand out free pro accounts to developers could offer these up instead, and just cripple the accounts in ways that would only matter to an active user:  the 24 hour deletes could be mandatory, all data posted on a social site could be kept private and not visible to the community, etc.  The main point here is that while I totally dig on the incentives provided by the services whose API&#8217;s I interact with, it&#8217;s more important that I be able to test my software against theirs, fully and comprehensively.</p>
<h2>All this really matters, and so do your developer-users</h2>
<p>I know it sounds pretentious and self-important when I say that as a third-party developer, I&#8217;m adding value to your service just by coding something against your API, and thus you should make things as easy for me as possible.  Like I&#8217;m the kind of guy who always types &#8220;M$&#8221; when I mean Microsoft, or leaves obscure, nerdy references in parentheses followed by &#8220;anyone?&#8221; (Slashdot/Reddit commenters, anyone?).  But I swear I&#8217;m not being that guy.  I&#8217;m basing the idea that I&#8217;m adding value (or, in the case that I suck, the idea that someone else is adding value) off of the services I&#8217;ve seen flourish, and the ones I&#8217;ve seen wither and die.</p>
<p />
Yahoo Photos and AOL Pictures:  Half-assed API (Yahoo&#8217;s was even web-only, so you couldn&#8217;t write a desktop application for it).  Both deadpooled.</p>
<p />
Imagestation and Epson Photos:  No API.  Both Deadpooled.</p>
<p />
Flickr, SmugMug, Zenfolio, Phanfare, PicassaWeb:  Comprehensive, well-documented API&#8217;s with active developer communities, responsive staff and a wealth of resources for helping you get stuff done. Thriving.</p>
<p>In summation, in the words of Jerry McGuire, &#8220;Help me help you.&#8221;</p>
<p>Come on. I had to say it.  You know I did.</p>
<p>-Alex</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/geekery/making-your-webservice-more-developer-friendly/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
							</item>
		<item>
		<title>Migratr 1.05 &#8211; Migratr adds Photobucket Support!</title>
		<link>http://www.callingshotgun.net/migratr/migratr-105-migratr-adds-photobucket-support/</link>
				<comments>http://www.callingshotgun.net/migratr/migratr-105-migratr-adds-photobucket-support/#comments</comments>
				<pubDate>Wed, 31 Dec 2008 22:21:42 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Migratr]]></category>
		<category><![CDATA[migratr photobucket]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=71</guid>
				<description><![CDATA[I know it&#8217;s been a while since I released a new version of migratr, but since I had a couple of days off post-christmas, I had some free time to finish up some bugfixes, aesthetic tweaks, and photobucket support that I&#8217;ve been working on for a while. Oh snap! What&#8217;s that? Yeah, you read correctly. [&#8230;]]]></description>
								<content:encoded><![CDATA[<p><img src="http://www.callingshotgun.net/wp-content/uploads/2008/12/migratr.jpg" alt="migratr" title="migratr" width="230" height="230" class="alignleft size-full wp-image-70" srcset="http://www.callingshotgun.net/wp-content/uploads/2008/12/migratr.jpg 230w, http://www.callingshotgun.net/wp-content/uploads/2008/12/migratr-150x150.jpg 150w" sizes="(max-width: 230px) 100vw, 230px" />I know it&#8217;s been a while since I released a new version of migratr, but since I had a couple of days off post-christmas, I had some free time to finish up some bugfixes, aesthetic tweaks, and photobucket support that I&#8217;ve been working on for a while.</p>
<p>Oh snap!  What&#8217;s that?  Yeah, you read correctly.  Migratr [finally] has Photobucket support!  So for those of you itching to give Photobucket a shot, or for those of you with a few hundred photos wrapped up in photobucket and wanting to give another service a shot, now&#8217;s your chance.  Go!  Play!  You&#8217;re free now.  It&#8217;s all okay.</p>
<p>Also, I outsourced some logo development for Migratr.  The picture you see at the top of this post is what you&#8217;ll see from now on as the application icon in the start-menu and/or desktop shortcuts.</p>
<p>Anyway, as always, rock the big download button to download the new, swanky version.</p>
<p>[download#1#image]</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/migratr/migratr-105-migratr-adds-photobucket-support/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
							</item>
		<item>
		<title>Migratr Reviewed on PCWorld.com!</title>
		<link>http://www.callingshotgun.net/geekery/migratr-reviewed-on-pcworldcom/</link>
				<comments>http://www.callingshotgun.net/geekery/migratr-reviewed-on-pcworldcom/#comments</comments>
				<pubDate>Thu, 04 Dec 2008 16:50:22 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Migratr]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=68</guid>
				<description><![CDATA[Hello there friends! A bit of good news, Migratr got a very nice review on the pcworld.com website! Check it out here. Sorry for the lack of updates lately. I&#8217;ve been plugging away, but sometimes it&#8217;s hard to get to a stopping point where I can say &#8220;this is ready for release&#8221;. Will prob. have [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Hello there friends!  A bit of good news, Migratr got a very nice review on the pcworld.com website!  Check it out <a href="http://www.pcworld.com/downloads/file/fid,74309-order,1-page,1/description.html">here</a>.</p>
<p>Sorry for the lack of updates lately.  I&#8217;ve been plugging away, but sometimes it&#8217;s hard to get to a stopping point where I can say &#8220;this is ready for release&#8221;.  Will prob. have something up before the end of the year.  And, as a sidenote / friendly reminder, AOL Pictures closes on Dec. 31, so all you who use that service have just under a month to get your pictures and get out:)</p>
<p>-Alex</p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/geekery/migratr-reviewed-on-pcworldcom/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
							</item>
		<item>
		<title>Killing the Fencepost in C#:  A handy code snippet</title>
		<link>http://www.callingshotgun.net/geekery/killing-the-fencepost-in-c-a-handy-code-snippet/</link>
				<comments>http://www.callingshotgun.net/geekery/killing-the-fencepost-in-c-a-handy-code-snippet/#comments</comments>
				<pubDate>Wed, 20 Aug 2008 04:11:06 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=39</guid>
				<description><![CDATA[A short while ago, a buddy was saying how learning Lisp had made him start thinking of everything in terms of map/reduce. As an example he gave me an example of a recent python snippet he&#8217;d written. return reduce(lambda l, r: l + seperator + r, (str(s) for s in values)) While I&#8217;m not going [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>A short while ago, a buddy was saying how learning Lisp had made him start thinking of everything in terms of map/reduce.  As an example he gave me an example of a recent python snippet he&#8217;d written. </p>
<pre lang="python" style="margin:15px; height: 50px">
return reduce(lambda l, r: l + seperator + r, (str(s) for s in values))
</pre>
<p>While I&#8217;m not going to claim to be some sort of industry expert on the subject, and there are probably wikipedia entries and blog posts and Knuthian essays I haven&#8217;t read on the subject, this is pretty easily the most simple, elegant fencepost solution I&#8217;ve ever seen in my life.  There are no special cases, boundary case handling, seeding (ie, initialize the final string to the first element, then start the loop at the second).  It&#8217;s flexible, straightforward, relatively easy to understand to someone with a sufficient familiarity of lambdas.  It just does its thing and disappears.  </p>
<p>And then it occurred to me, since lambdas had been brought to c#, that this was suddenly within my power to accomplish as well.</p>
<p>I had certain goals in mind, as the snippet provided to me had set a serious benchmark.  I wanted it to be as general and flexible as possible-  It shouldn&#8217;t take only arrays, or only lists.  You should be able to throw any sort of collection at it that you want.  You also shouldn&#8217;t be restricted to only sending it Strings-  Might as well make it possible to send it a collection of numbers, or people, or pretty much anything you want.  This was more of a &#8220;hey, while we&#8217;re at it.&#8221;  Feature creep, I know, I know.  But it&#8217;s my exercise, and I&#8217;ll rock it as I see fit:D</p>
<p>Next, I wanted it to be as simple, elegant, and straightforward as possible.  To me, the most significant thing about the snippet was, as stated above, that there was no special case code, and no seeding.  You can develop an inferiority complex trying to make c# code as elegant as python code, because c# is a more verbose language.  It just requires you to be much more explicit about everything than python does-  Especially when it comes to LINQ and collections.  Brackets, parentheses and curly braces everywhere.  Still, I felt a degree of elegance was possible, and I was determined to find it.  What can I say, I was bored, have had minimal exposure to functional programming, and the idea intrigued me&#8230;</p>
<p>Here&#8217;s what I came up with.</p>
<pre lang="csharp">
public static String fencepost(IEnumerable values, String seperator)
{
    IEnumerable<String> strings = values.Cast<Object>().Select(x => x.ToString());
    return strings.Aggregate((x, y) => x + seperator + y);
}
</pre>
<p>By way of explanation, LINQ is more an attempt at emulating SQL than functional programming.  So the rough FP -> .NET corollaries are &#8220;Map&#8221; -> &#8220;Select&#8221;, &#8220;Reduce&#8221; -> &#8220;Aggregate&#8221;.  Also, as a one liner it got way too complex to really be readable, so I split it up into two-  The first line creates a typed Enumerable of type String from a typed or untyped collection, for the second line to work with.</p>
<p>I also somewhat bundled up the whole thing as a full method, which you can copy-paste somewhere and call whenever you need it, choosing your seperator token on the fly (comma, period, space, whatever).  If, on the other hand, an in-line snippet is more your style, here&#8217;s a very straightforward one-liner (that assumes you have a typed collection)</p>
<pre lang="csharp" style="margin: 15px; height:70px">
  string seperator = ","; //Or whatever else you want to use
  string result = (String)foo.Aggregate((x, y) => x.ToString() + seperator + y.ToString());
</pre>
<p>Not quite as zen-like as the python version, but it has it&#8217;s own strongly-typed schwerve to it.  I consider this &#8220;Garage Sale&#8221; code- Not really complicated enough to license it, so just copy/paste to your heart&#8217;s content.  Enjoy:)</p>
<p>-Alex<br />
 <script type="text/javascript">var dzone_url = 'http://www.callingshotgun.net/geekery/killing-the-fencepost-in-c-a-handy-code-snippet/'; var dzone_title = 'Killing The Fencepost in C#:  A handy Code Snippet'; var dzone_blurb = 'A simple, straightforward example of how to use Functional Programming facilities in .NET to provide an elegant, generic, one-size-fits-all fencepost solution'; var dzone_style = '1';</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script> </p>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/geekery/killing-the-fencepost-in-c-a-handy-code-snippet/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
							</item>
		<item>
		<title>AOL Abandons 28 Million Potential Pictures Users By The End Of The Year</title>
		<link>http://www.callingshotgun.net/migratr/aol-abandons-28-million-potential-pictures-users-by-the-end-of-the-year/</link>
				<comments>http://www.callingshotgun.net/migratr/aol-abandons-28-million-potential-pictures-users-by-the-end-of-the-year/#comments</comments>
				<pubDate>Mon, 11 Aug 2008 19:54:59 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Migratr]]></category>

		<guid isPermaLink="false">http://www.callingshotgun.net/?p=37</guid>
				<description><![CDATA[AOL disappoints yet again! It has 28 million users all over the country and it can&#8217;t seem to get its act together. In the last year or so it has launched or talked about launching and then killed off over 50 product and service options, and much of what was touted as being the new [&#8230;]]]></description>
								<content:encoded><![CDATA[<p><img src="http://www.callingshotgun.net/images/file_this_please.jpg" alt="File this!" align="left" style="padding: 10px 10px 10px 0px" />AOL disappoints yet again! It has 28 million users all over the country and it can&#8217;t seem to get its act together. In the last year or so it has launched or talked about launching and then killed off over 50 product and service options, and much of what was touted as being the new wave of innovation for the future of the company has already been discontinued. The rest is following suit like rats fleeing from a sinking ship!</p>
<p>As if AOL hasn&#8217;t done enough disappointing things in the past, like getting rid of a number of people who relied on their jobs because the company&#8217;s plans for some silly thing it tried to launch didn&#8217;t work out right, or badgering people who try to cancel their membership over the phone until they&#8217;re nearly in tears, now AOL users who are still loyal to the company (for whatever reason) have something else to contend with.</p>
<p>On July 14th, Kevin Conroy (he&#8217;s AOL&#8217;s Executive Vice President, for those of you who don&#8217;t know), sent out an internal memo saying that AOL Pictures and a few other things â€“ XDrive, BlueString, and MyMobile â€“ were going bye-bye. Just leaving. Why? Simple. And the same reason that any business gets rid of anything â€“ it&#8217;s not pulling in the huge sacks full of dollars that the company thought it would back when it launched. It doesn&#8217;t seem to matter that a lot of people like this service and use it, or that there are a lot more AOL members who might be enticed to use it in the future if it was marketed to them properly. AOL users would probably be pretty disappointed about the disappearance of their photo site â€“ if they knew.</p>
<p>Conveniently, there is no mention on the actual Website (<a href="http://pictures.aol.com/" target="_blank">http://pictures.aol.com/</a>) that the service is shutting down. Not even a hint hidden somewhere in a corner or a little tidbit of info stuck down in all that fine print along the bottom. Instead, the site offers to log you in or sign you up for a free account if you don&#8217;t already have one, and invites you to do more with your pictures and check out BlueString (also leaving). You&#8217;d think that a site that has a number of users who rely on it and was going away in the <em>very</em> near future would make some mention of it, but hey, thatâ€<img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s just AOL<br />
for ya.</p>
<p>Thankfully, there&#8217;s a solution. Here&#8217;s what you do. Download <a href="http://www.callingshotgun.net/about/migratr/">Migratr</a> and move your photos away from AOL Pictures, and to something that will still be there for you the next time you want to look at or share those photos. Migratr is a desktop application that&#8217;s designed to take photos from one sharing site and put them on another one, along with all the titles, tags and captions you&#8217;ve added to them, along with the albums you organized them by. Then the next time AOL gets a bright idea and launches a photo sharing site and then yanks it away just a few short months later, users will be better prepared. In the meantime, AOL users â€“ let&#8217;s get those photos moved!</p>
<p><a href="http://www.techcrunch.com/2008/07/24/full-text-of-aol-email-xdrive-aol-pictures-mymobile-and-bluestring-to-shut-down/" target="_blank">http://www.techcrunch.com/2008/07/24/full-text-of-aol-email-xdrive-aol-pictures-mymobile-and-bluestring-to-shut-down/</a></p>
<p><a href="http://www.callingshotgun.net/about/migratr/" target="_blank">http://www.callingshotgun.net/about/migratr</a></p>
<table border="0">
<tr>
<td>
<script type="text/javascript">digg_url = 'http://www.callingshotgun.net/migratr/aol-abandons-28-million-potential-pictures-users-by-the-end-of-the-year/';</script><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</td>
<td>
<script>reddit_url='http://www.callingshotgun.net/migratr/aol-abandons-28-million-potential-pictures-users-by-the-end-of-the-year/'</script><script>reddit_title='AOL Abandons 28 million potential pictures users by the end of the year'</script><br />
<script type="text/javascript" src="http://www.reddit.com/button.js?t=3"></script>
</td>
</tr>
</table>
]]></content:encoded>
							<wfw:commentRss>http://www.callingshotgun.net/migratr/aol-abandons-28-million-potential-pictures-users-by-the-end-of-the-year/feed/</wfw:commentRss>
		<slash:comments>540</slash:comments>
							</item>
	</channel>
</rss>
