<?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>Greg Martin</title>
	<atom:link href="https://slalomdev.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://slalomdev.wordpress.com</link>
	<description></description>
	<lastBuildDate>Wed, 01 Feb 2012 12:59:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='slalomdev.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s-ssl.wordpress.com/i/buttonw-com.png</url>
		<title>Greg Martin</title>
		<link>https://slalomdev.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://slalomdev.wordpress.com/osd.xml" title="Greg Martin" />
	<atom:link rel='hub' href='https://slalomdev.wordpress.com/?pushpress=hub'/>
		<item>
		<title>How to Drastically Reduce an Overgrown iPhoto Library by Starting from Scratch</title>
		<link>https://slalomdev.wordpress.com/2011/07/20/how-to-drastically-reduce-an-overgrown-iphoto-library-by-starting-from-scratch/</link>
		<comments>https://slalomdev.wordpress.com/2011/07/20/how-to-drastically-reduce-an-overgrown-iphoto-library-by-starting-from-scratch/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 16:31:19 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/?p=154</guid>
		<description><![CDATA[Note: Below are the steps I took to cleanup my personal iPhoto library.  Your mileage may vary, and as always, before doing something drastic like this, make sure you have a good backup.  Also, this was done using iPhoto &#8217;11.  I don&#8217;t know if the same process works on previous versions.  Also, this tutorial only [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=154&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>Note: Below are the steps I took to cleanup my personal iPhoto library.  Your mileage may vary, and as always, before doing something drastic like this, make sure you have a good backup.  Also, this was done using iPhoto &#8217;11.  I don&#8217;t know if the same process works on previous versions.  Also, this tutorial only outlines how to save your photos and events.  I did not bother saving any albums or projects from my previous library.  I highly recommend reading through the steps prior to going to the process to ensure you are comfortable with everything that is required.</em></p>
<p>I&#8217;m looking forward to Apple&#8217;s OS X Lion upgrade that was released today.  I&#8217;m hoping to breathe some life back into my MacBook Pro by doing a clean install and then just importing and installing only the things I need as I need them.  In investigating what was using up the majority of my hard drive space I discovered that my iPhoto library was using up 24 GBs of space.</p>
<p>24 GB!  That was shocking to me as I don&#8217;t take that many pictures.  What I&#8217;ve determined is that over the years of iPhoto upgrades my library has collected a lot of cruft.  Thumbnails, iPod Sync Versions, Originals and who knows what else seem to be using up a ton of space.</p>
<p>It is possible to get into the guts of an iPhoto library and try to manually remove junk like the above, however, you are almost guaranteed to screw something up and I would recommend to just avoid this idea altogether.</p>
<p>My solution instead, was to export all my photos, wipe out my existing library and create a new one from scratch.  I was able to reduce my library down to about 11 GB.  That&#8217;s a 13 GB savings in space with the loss of any photos!  Below are the steps to do this.</p>
<p><strong>1. Re-Title All the Photos in Your Library</strong></p>
<p>The first frustrating thing about iPhoto&#8217;s export functionality is that it does not have an option to export your Events in bulk to corresponding folders.  If it did, this tutorial would be 2 steps.  Instead, I had to export all my photos into one folder and then use a script to file them into folders correctly based on their filename.</p>
<p>To get the filenames consistent, first select all of your events, and from the &#8220;Photos&#8221; menu choose &#8220;Batch Change&#8230;&#8221;.  Then tell it to &#8220;Set Title to Event Name&#8221;.</p>
<p style="text-align:center;"><a href="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-12-10-am.png"><img class="alignnone size-medium wp-image-155" title="Set Title to Event Name" src="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-12-10-am.png?w=300&#038;h=88" alt="" width="300" height="88" /></a></p>
<p style="text-align:left;">This will update the titles for all your photos to look something like &#8220;My Event &#8211; 0001&#8243;.</p>
<p style="text-align:left;"><strong>2. Export All Photos to a Folder</strong></p>
<p style="text-align:left;">Create a folder somewhere in your system to export everything to.  I created a folder called &#8220;Photos_Current&#8221; in my Downloads folder.  Now, again, select all your events and from the &#8220;File&#8221; menu, choose &#8220;Export&#8230;&#8221;.</p>
<p style="text-align:left;">From the &#8220;File Export&#8221; tab we have a decision to make.  When you modify a photo in iPhoto it keeps the original version as well as the updated version.  This is nice if you ever want to roll back an image, but not nice if you are looking to clean up some space.  For me, I assume that if I modified a photo, say I cropped it down, straightened it or removed red-eye, the current one is the one I really care about.  If you prefer the original version then that&#8217;s fine to, it means you can skip step 2b below.</p>
<p style="text-align:left;">So next I set the &#8220;Kind&#8221; to &#8220;Current&#8221; and the &#8220;File Name&#8221; to &#8220;Use title&#8221;.</p>
<p style="text-align:left;"><a href="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-20-09-am.png"><img class="aligncenter size-medium wp-image-156" title="Export" src="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-20-09-am.png?w=300&#038;h=217" alt="" width="300" height="217" /></a>This export might take a bit of time depending on the size of your library.</p>
<p style="text-align:left;"><strong>2b. </strong></p>
<p style="text-align:left;">This step is optional, if you chose to export Original instead of Current in the previous step, or you do not have any videos in your library, you can move on to step 3.</p>
<p style="text-align:left;">When exporting Current iPhoto does not properly export videos.  They show up as single frame files rather than full videos.  To correct this, we have to do another export similar to the above, but choosing &#8220;Original&#8221; and exporting that into a different folder.</p>
<p style="text-align:left;">Once that export is complete, you will need to manually copy the video files (could be of many types, MOV, MPG, AVI, MP4, etc&#8230;) into the first export.  Once those are copied over, you can delete the rest of the second export.</p>
<p style="text-align:left;"><strong>3. Trash Your Old Library</strong></p>
<p style="text-align:left;">Again, make sure you have a backup, but if you do, go ahead and close iPhoto and delete your library.  Usually this is called &#8220;iPhoto Library&#8221; in your &#8220;Pictures&#8221; folder.</p>
<p style="text-align:left;"><strong>4. Organize Your Photos Into Foldres</strong></p>
<p style="text-align:left;">So at this point we have one folder with all our files export named after the Events they were a part of.  This is where things require a bit of technical know-how.  Luckily for us, someone out there has already written a script to do just that.</p>
<p style="text-align:left;">You can follow the instructions at <a href="http://hints.macworld.com/article.php?story=20081108132735425">http://hints.macworld.com/article.php?story=20081108132735425</a> to learn how to run this script.</p>
<p style="text-align:left;">Once it is complete, you should now have a series of folders named the same as your original Events.</p>
<p style="text-align:left;"><strong>5. Create a New iPhoto Library</strong></p>
<p style="text-align:left;">Open iPhoto.  Its going to complain about a missing library (remember we deleted it).  Just choose &#8220;Create New&#8221; and you can create a new &#8220;iPhoto Library&#8221; wherever you want, though I suggest just putting it back in the &#8220;Pictures Folder&#8221;</p>
<p style="text-align:left;"><strong>6. Import Your Photos Back In</strong></p>
<p style="text-align:left;">This step is easy, just select all the folders that were created by the script, and drag them into iPhoto.  It will automatically being the import process and when it is done, you will see that it has turned all the folders back into Events.</p>
<p style="text-align:left;">And that&#8217;s it.  Not too bad and you get a huge space savings, or at least I did.</p>
<p style="text-align:left;">- Greg Martin</p>
<p style="text-align:center;">
<p style="text-align:center;">
<p style="text-align:center;">
<p style="text-align:center;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=154&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2011/07/20/how-to-drastically-reduce-an-overgrown-iphoto-library-by-starting-from-scratch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-12-10-am.png?w=300" medium="image">
			<media:title type="html">Set Title to Event Name</media:title>
		</media:content>

		<media:content url="http://slalomdev.files.wordpress.com/2011/07/screen-shot-2011-07-20-at-9-20-09-am.png?w=300" medium="image">
			<media:title type="html">Export</media:title>
		</media:content>
	</item>
		<item>
		<title>How I Stay Organized</title>
		<link>https://slalomdev.wordpress.com/2009/07/17/how-i-stay-organized/</link>
		<comments>https://slalomdev.wordpress.com/2009/07/17/how-i-stay-organized/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 16:39:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[gtd]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/07/17/how-i-stay-organized</guid>
		<description><![CDATA[&#62;I&#8217;ve always been a very organized person.&#160; Though my habits for staying organized change rather frequently.&#160; In grade school I recall cycling through a single divided notebook to a pee-chee for every class to a notebook for every class and back again.&#160; College was no different.&#160; One year, small 5&#215;7 notebooks, color coded for each [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=93&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;<span class="Apple-style-span" style="font-family:Helvetica;font-size:12px;">I&#8217;ve always been a very organized person.&nbsp; Though my habits for staying organized change rather frequently.&nbsp; In grade school I recall cycling through a single divided notebook to a <a href="http://en.wikipedia.org/wiki/Pee_Chee_folder">pee-chee</a> for every class to a notebook for every class and back again.&nbsp; College was no different.&nbsp; One year, small 5&#215;7 notebooks, color coded for each class to easily be able to grab them out of my bag (yeah, I know, huge dork, it doesn&#8217;t get any better…) to a meticulously organized binder with schedules I&#8217;d print out daily to manage my class and work schedules to spending way more money than I had on a <a href="http://en.wikipedia.org/wiki/Handspring_(company)">Handspring Visor PDA</a> (yeah, I was that guy and it was awesome).</span>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">In my post-college work life I&#8217;m no different.&nbsp; What has changed is the amount of technology I can take advantage of.&nbsp; Not too long ago I jumped on the <a href="http://en.wikipedia.org/wiki/Moleskine">Moleskine</a> bandwagon, I think it lasted for a month, but I&#8217;m just not a paper (or writing) person.&nbsp; For one, my handwriting is horrible not to mention slow.&nbsp; The time it takes for me to write something that I will later not be able to read is not worth it.&nbsp; Going to school in the 90&#8242;s and being subjected to keyboarding classes not once, not twice, but three times made me an excellent typist with 5th grade level handwriting.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">So here are the current methods I follow and tools I use to stay organized.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><b>Inbox as a To Do List</b></div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">One thing that has been true since I first got email is that I&#8217;ve always use my inbox as a to do list.&nbsp; If something is in my inbox then it requires some action, otherwise it gets deleted or archived.&nbsp; It&#8217;s not anymore complicated than that.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><b>Multiple Calendars</b></div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">Separating items between different color coded calendars works well for me.&nbsp; At the core I have a personal calendar, my work calendar and a calendar that has reoccurring events for when my various bills are due.&nbsp; Beyond that I&#8217;m a big fan of subscribing to calendar feeds such as my TripIt calendar (more on that in a moment), birthdays and US holidays.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><b>Things</b></div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">I&#8217;ve tried a lot of different to do list applications.&nbsp; Lately I&#8217;ve settled on <a href="http://culturedcode.com/things/">Things</a>.&nbsp; The combination desktop application and iPhone application are worth the initial cost.&nbsp; They key is to to get in the habit of using it.&nbsp; I try to get every item down throughout the day and there is nothing more rewarding than checking things off.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><b>Evernote</b></div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><a href="http://evernote.com/">Evernote</a> is a tool that I really like, and yet still find that I am not using it nearly as much as I should be.&nbsp; My note taking habits are actually not very good.&nbsp; I&#8217;m super OCD about tracking to do items, but general notes from meetings tend to be pretty light.&nbsp; I&#8217;m currently trying to remedy this and Evernote is the tool that seems to fit my needs the best.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;"><b>TripIt</b></div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">Last, but not least, I have been traveling quite a bit in the last couple of years.&nbsp; <a href="http://www.tripit.com/">TripIt</a> has become and invaluable tool for keeping track of my upcoming trips and the details for those trips (i.e. flight times, hotel reservations).&nbsp; Being able to subscribe to my trip items in iCal and being able to see them mixed in with other items on my calendars saves me a lot of scheduling hassle.</div>
<div style="font:12px Helvetica;min-height:14px;margin:0;"></div>
<div style="font:12px Helvetica;margin:0;">I think the key components to each of these tools or methods is that they are all completely in sync with my iPhone.&nbsp; A system that I can maintain while I&#8217;m away from my computer is critical for me.</div>
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7874999921167706419-8853787940324510089?l=slalomdev.blogspot.com' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=93&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/07/17/how-i-stay-organized/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="https://blogger.googleusercontent.com/tracker/7874999921167706419-8853787940324510089?l=slalomdev.blogspot.com" medium="image" />
	</item>
		<item>
		<title>Our First AppStore App</title>
		<link>https://slalomdev.wordpress.com/2009/06/29/our-first-appstore-app/</link>
		<comments>https://slalomdev.wordpress.com/2009/06/29/our-first-appstore-app/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 17:57:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/06/29/our-first-appstore-app</guid>
		<description><![CDATA[&#62;Last week our client SonoSite launched their new iPhone application into the AppStore. &#160;SonoSite makes portable ultrasound machines. &#160;The application we built for them provides instructional video content for general ultrasound procedures as well as a host of other supporting information. &#160;Check out the app at&#160;http://www.sonosite.com/products/sonoaccess/.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=91&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;Last week our client <a href="http://www.sonosite.com/">SonoSite</a> launched their new iPhone application into the AppStore. &nbsp;SonoSite makes portable ultrasound machines. &nbsp;The application we built for them provides instructional video content for general ultrasound procedures as well as a host of other supporting information. &nbsp;Check out the app at&nbsp;<a href="http://www.sonosite.com/products/sonoaccess/">http://www.sonosite.com/products/sonoaccess/</a>.
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7874999921167706419-7040604082115219519?l=slalomdev.blogspot.com' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=91&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/06/29/our-first-appstore-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="https://blogger.googleusercontent.com/tracker/7874999921167706419-7040604082115219519?l=slalomdev.blogspot.com" medium="image" />
	</item>
		<item>
		<title>WWDC 2009</title>
		<link>https://slalomdev.wordpress.com/2009/06/01/wwdc-2009/</link>
		<comments>https://slalomdev.wordpress.com/2009/06/01/wwdc-2009/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 20:02:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[wwdc]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/06/01/wwdc-2009</guid>
		<description><![CDATA[&#62;I will be attending Apple&#8217;s World Wide Developer Conference again this year. &#160;Last year Steve Jobs announced the iPhone 3G at the keynote, I&#8217;m looking forward to seeing what they have in store for us this time. &#160;WWDC is a pretty good event for developers. &#160;I look forward to digging into some of the iPhone [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=90&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;I will be attending Apple&#8217;s World Wide Developer Conference again this year. &nbsp;Last year Steve Jobs announced the iPhone 3G at the keynote, I&#8217;m looking forward to seeing what they have in store for us this time. &nbsp;WWDC is a pretty good event for developers. &nbsp;I look forward to digging into some of the iPhone SDK 3.0 features that I have not yet had a chance to dig into. &nbsp;The developer NDA doesn&#8217;t allow me to talk about 3.0 here, so for now I&#8217;ll just say that it looks like its going to be a pretty significant update.
<div class="blogger-post-footer"><img width='1' height='1' src='' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=90&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/06/01/wwdc-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>
	</item>
		<item>
		<title>Social Media Overload</title>
		<link>https://slalomdev.wordpress.com/2009/04/28/social-media-overload/</link>
		<comments>https://slalomdev.wordpress.com/2009/04/28/social-media-overload/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 18:30:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[myspace]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/04/28/social-media-overload</guid>
		<description><![CDATA[&#62;I&#8217;m starting to become overwhelmed with all the social media sites. I resisted Twitter for a long time, but I caved yesterday. For the most part I&#8217;ve been pretty good about keeping it simple. I killed my MySpace account years ago and have pretty much only used Facebook for keeping connected with folks I don&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=87&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;I&#8217;m starting to become overwhelmed with all the social media sites.  I resisted Twitter for a long time, but I <a href="http://twitter.com/SlalomDev">caved yesterday</a>.  For the most part I&#8217;ve been pretty good about keeping it simple.  I killed my MySpace account years ago and have pretty much only used Facebook for keeping connected with folks I don&#8217;t see on a daily basis.
<div></div>
<div>There is a big push now to find a use for these tools in the enterprise.  Can Twitter really be a viable business tool?  There are certainly some cases of it working, Zappos and Alaska Airlines to name a couple.  Though I feel those users were not born out of trying to jump on the bandwagon, but rather seeing an opportunity to communicate better with customers.</div>
<div></div>
<div>I guess to me, it boils down to each individual case.  Customers are smart, if you aren&#8217;t trying to communicate with them in a genuine manor they will know and respond in kind.</div>
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7874999921167706419-6058988097317491691?l=slalomdev.blogspot.com' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=87&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/04/28/social-media-overload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="https://blogger.googleusercontent.com/tracker/7874999921167706419-6058988097317491691?l=slalomdev.blogspot.com" medium="image" />
	</item>
		<item>
		<title>Using the Cloud</title>
		<link>https://slalomdev.wordpress.com/2009/03/31/using-the-cloud/</link>
		<comments>https://slalomdev.wordpress.com/2009/03/31/using-the-cloud/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 06:02:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[amazon]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/03/31/using-the-cloud</guid>
		<description><![CDATA[&#62;Over the years I&#8217;ve started countless projects by myself or with friends that have never been fully realized. &#160;I&#8217;m still waiting for that one great idea that really drives me to create something from nothing. &#160;In the mean time I am pretty happy bringing other people&#8217;s ideas to light, most of the time. Without giving [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=84&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;Over the years I&#8217;ve started countless projects by myself or with friends that have never been fully realized. &nbsp;I&#8217;m still waiting for that one great idea that really drives me to create something from nothing. &nbsp;In the mean time I am pretty happy bringing other people&#8217;s ideas to light, most of the time.</p>
<p>Without giving away too much detail, one of my current client projects is a pretty cool combination of technologies. &nbsp;We are building an iPhone application with Amazon Web Services back-end. &nbsp;As we&#8217;ve been building this it has occurred to me how many of my ideas in the past died because we would get bogged down in the details about where and how we were going to host it rather than just building it.</p>
<p>It&#8217;s thrilling to see all these cloud computing services springing up that really level the playing field for anyone with an idea to deploy, and more importantly scale if they find success.</p>
<p>I still don&#8217;t have that one great idea, but I feel like the roadblocks that existed in years past have lessened.
<div class="blogger-post-footer"><img width='1' height='1' src='' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/84/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=84&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/03/31/using-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>
	</item>
		<item>
		<title>Once-A-Month Blog Challenge</title>
		<link>https://slalomdev.wordpress.com/2009/02/06/once-a-month-blog-challenge/</link>
		<comments>https://slalomdev.wordpress.com/2009/02/06/once-a-month-blog-challenge/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:50:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/02/06/once-a-month-blog-challenge</guid>
		<description><![CDATA[&#62;You might recall the Once-A-Week Blog Challenge that Joel and I started last year. Well, the wheels kinda fell off that wagon, but never fear, we have a new challenge, but this time we are lowering our expectations. We are both committing to getting at least once post up a month! Here is mine for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=83&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;You might recall the <a href="http://slalomdev.blogspot.com/2008/03/one-week-challenge.html">Once-A-Week Blog Challenge</a> that <a href="http://joelforman.blogspot.com/">Joel</a> and I started last year.  Well, the wheels kinda fell off that wagon, but never fear, we have a new challenge, but this time we are lowering our expectations.  We are both committing to getting at least once post up a month!  <a href="http://slalomdev.blogspot.com/2009/02/my-top-5-iphone-applications-redux.html">Here is mine for February</a>.
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7874999921167706419-1470612366335675360?l=slalomdev.blogspot.com' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=83&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/02/06/once-a-month-blog-challenge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="https://blogger.googleusercontent.com/tracker/7874999921167706419-1470612366335675360?l=slalomdev.blogspot.com" medium="image" />
	</item>
		<item>
		<title>My Top 5 iPhone Applications Redux</title>
		<link>https://slalomdev.wordpress.com/2009/02/06/my-top-5-iphone-applications-redux/</link>
		<comments>https://slalomdev.wordpress.com/2009/02/06/my-top-5-iphone-applications-redux/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:02:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2009/02/06/my-top-5-iphone-applications-redux</guid>
		<description><![CDATA[&#62;Back in july I posted about my top 5 iPhone applications.&#160; I figure it&#8217;s been about 6 months and it would be a good time to revisit this topic as my top 5 have since changed.&#160; So in no particular order, here they are&#8230; Zenbe I managed to pick this app up when it was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=82&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;Back in july I posted about <a href="http://slalomdev.blogspot.com/2008/07/my-top-5-iphone-applications.html">my top 5 iPhone applications</a>.&nbsp; I figure it&#8217;s been about 6 months and it would be a good time to revisit this topic as my top 5 have since changed.&nbsp; So in no particular order, here they are&#8230;</p>
<p>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284448147&amp;mt=8"><b>Zenbe</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284448147&amp;mt=8"><img align="left" src="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_3WGJ63I/AAAAAAAACxI/OeXdMLv-O8g/s320/zenbe.png" /></a>I managed to pick this app up when it was initially released for free, now it runs $2.99, but I would still pay for it.  Zenbe is a pretty straight forward list tracking app that allows you to create multiple lists, assign due dates and organize your items.  It has the added bonus of having a pretty decent web front end that stays in sync at <a href="http://lists.zenbe.com/">lists.zenbe.com</a></div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284910350&amp;mt=8"><b>Yelp</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284910350&amp;mt=8"><img align="left" src="http://3.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_62A18vI/AAAAAAAACxQ/xpl515aWuqk/s320/yelp.png" /></a>I continue to find <a href="http://www.yelp.com/">Yelp</a> very useful when looking for new restaurants and bars, the iPhone app is a nice compliment to the website.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=283179414&amp;mt=8"><b>Solebon</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=283179414&amp;mt=8"><img align="left" src="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_9itY9cI/AAAAAAAACxY/3nY0UrIj3g8/s320/solebon.png" /></a>I am pretty much addicted to iPhone solitaire, this version is great.  They have a free version as well, but I think its worth the price for the added game variations you get.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284882215&amp;mt=8"><b>Facebook</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284882215&amp;mt=8"><img align="left" src="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAAZ-tE5I/AAAAAAAACxg/UHvDNM5MGJI/s320/facebook.png" /></a>I kinda hate to admit it, but I check <a href="http://www.facebook.com/">Facebook</a> on my phone way more than I probably need to be.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300238550&amp;mt=8"><b>Mint</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300238550&amp;mt=8"><img align="left" src="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyACtBh-pI/AAAAAAAACxo/ewrOEXUGE8g/s320/mint.png" /></a><a href="http://www.mint.com/">Mint</a> is a great tool for tacking your expenses and investments, the iPhone application makes it even more useful.</div>
<p>Honorable Mentions&#8230;</p>
<p>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=281796108&amp;mt=8"><b>Evernote</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=281796108&amp;mt=8"><img align="left" src="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAE0xThWI/AAAAAAAACxw/QawugTsyY9s/s320/evernote.png" /></a>I still thing Evernote is a great tool, I just don&#8217;t use is at much as I should.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284993459&amp;mt=8"><b>Shazam</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284993459&amp;mt=8"><img align="left" src="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAHd4d2lI/AAAAAAAACx4/oInW8IK9130/s320/shazam.png" /></a>Shazam is one of the most clever apps I&#8217;ve seen.  It has been able to identify songs in some pretty poor audio situations.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289086967&amp;mt=8"><b>GasBag</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289086967&amp;mt=8"><img align="left" src="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAJ6cAAwI/AAAAAAAACyA/1Xx8iiumccM/s320/gasbag.png" /></a>GasBag crashes way more than a public application should, but I do like the MPG tracking component of the application.</div>
<div>
<div style="margin:5px;"><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&amp;mt=8"><b>Remote</b></a></div>
<p><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&amp;mt=8"><img align="left" src="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAXeFSKUI/AAAAAAAACyI/wqFTM1etqFY/s320/remote.png" /></a>Remote is still a great app for controlling your music from anywhere in your house, even if your house is really only about 750 sq. feet.</div>
<div class="blogger-post-footer"><img width='1' height='1' src='' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=82&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2009/02/06/my-top-5-iphone-applications-redux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_3WGJ63I/AAAAAAAACxI/OeXdMLv-O8g/s320/zenbe.png" medium="image" />

		<media:content url="http://3.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_62A18vI/AAAAAAAACxQ/xpl515aWuqk/s320/yelp.png" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYx_9itY9cI/AAAAAAAACxY/3nY0UrIj3g8/s320/solebon.png" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAAZ-tE5I/AAAAAAAACxg/UHvDNM5MGJI/s320/facebook.png" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyACtBh-pI/AAAAAAAACxo/ewrOEXUGE8g/s320/mint.png" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAE0xThWI/AAAAAAAACxw/QawugTsyY9s/s320/evernote.png" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAHd4d2lI/AAAAAAAACx4/oInW8IK9130/s320/shazam.png" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAJ6cAAwI/AAAAAAAACyA/1Xx8iiumccM/s320/gasbag.png" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_Lh3Pr0ATa7Q/SYyAXeFSKUI/AAAAAAAACyI/wqFTM1etqFY/s320/remote.png" medium="image" />
	</item>
		<item>
		<title>Connecting to iPhone Applications via Peer-To-Peer Networking</title>
		<link>https://slalomdev.wordpress.com/2008/10/15/connecting-to-iphone-applications-via-peer-to-peer-networking/</link>
		<comments>https://slalomdev.wordpress.com/2008/10/15/connecting-to-iphone-applications-via-peer-to-peer-networking/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 23:36:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2008/10/15/connecting-to-iphone-applications-via-peer-to-peer-networking</guid>
		<description><![CDATA[&#62;I recently found myself wanting to copy some documents to the AirSharing application on my iPhone but I was not able to connect to a Wi-Fi network at the time. As it turns out, this is really easy to do using peer-to-peer wireless networking, enabling applications like AirSharing or the Apple Remote to connect to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=79&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;I recently found myself wanting to copy some documents to the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289943355&amp;mt=8">AirSharing</a> application on my iPhone but I was not able to connect to a Wi-Fi network at the time.</p>
<p>As it turns out, this is really easy to do using peer-to-peer wireless networking, enabling applications like <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289943355&amp;mt=8">AirSharing</a> or the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&amp;mt=8">Apple Remote</a> to connect to your machine regardless of if there is an available wireless network.</p>
<p>Note: This can be done on Windows as well, however, I will only be covering the process on a Mac.
<ol>
<li>First you need to create a new network on your Mac by selecting your AirPort menu item and choosing &#8220;Create Network&#8230;&#8221;.</p>
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture12.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture14.png?w=199" /></a></div>
</li>
<li>Choose a name for your network, and optionally require a password (I would suggest adding a password to restrict access to your machine).
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture23.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture24.png?w=300" /></a></div>
</li>
<li> On your iPhone, tap Setttings then Wi-Fi.
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/img_00013.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/img_00014.png?w=200" /></a></div>
</li>
<li>Your phone should find the network you just created, tap it and enter your password if you chose to set one up.
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/img_00033.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/img_00034.png?w=200" /></a></div>
</li>
<li>Now open AirSharing.
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/img_00053.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/img_00054.png?w=200" /></a></div>
</li>
<li>Back on your Mac, from the Finder menu, select &#8220;Connect to Server&#8230;&#8221; (this can also be opened by pressing Command+K on your keyboard).
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture33.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture34.png?w=133" /></a></div>
</li>
<li>Enter the address specified by AirSharing for connecting and click &#8220;Connect&#8221;.
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture43.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture44.png?w=300" /></a></div>
</li>
<li>A finder window will open with the AirSharing share and a mounted disk will appear on your desktop.
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture63.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture64.png?w=300" /></a></div>
<div class="separator" style="clear:both;text-align:center;"><a href="http://slalomdev.files.wordpress.com/2008/10/picture53.png" style="margin-left:1em;margin-right:1em;"><img border="0" src="http://slalomdev.files.wordpress.com/2008/10/picture54.png?w=130" /></a></div>
</li>
</ol>
<p>As I mentioned above, this tip is not limited to the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289943355&amp;mt=8">AirSharing</a> application.&nbsp; Any iPhone application that uses wireless connectivity to interface with your machine, such as the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&amp;mt=8">Apple Remote</a>, should work with this method.
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7874999921167706419-3648453825657819937?l=slalomdev.blogspot.com' alt='' /></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=79&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2008/10/15/connecting-to-iphone-applications-via-peer-to-peer-networking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture14.png?w=199" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture24.png?w=300" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/img_00014.png?w=200" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/img_00034.png?w=200" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/img_00054.png?w=200" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture34.png?w=133" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture44.png?w=300" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture64.png?w=300" medium="image" />

		<media:content url="http://slalomdev.files.wordpress.com/2008/10/picture54.png?w=130" medium="image" />

		<media:content url="https://blogger.googleusercontent.com/tracker/7874999921167706419-3648453825657819937?l=slalomdev.blogspot.com" medium="image" />
	</item>
		<item>
		<title>Active Directory Role Provider</title>
		<link>https://slalomdev.wordpress.com/2008/08/15/active-directory-role-provider/</link>
		<comments>https://slalomdev.wordpress.com/2008/08/15/active-directory-role-provider/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 15:47:00 +0000</pubDate>
		<dc:creator>Greg Martin</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[forms authentication]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://slalomdev.wordpress.com/2008/08/15/active-directory-role-provider</guid>
		<description><![CDATA[&#62;.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: Consolas, &#8220;Courier New&#8221;, Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/} .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=78&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&gt;<br />.csharpcode, .csharpcode pre<br />{<br /> font-size: small;<br /> color: black;<br /> font-family: Consolas, &#8220;Courier New&#8221;, Courier, Monospace;<br /> background-color: #ffffff;<br /> /*white-space: pre;*/<br />}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt <br />{<br /> background-color: #f4f4f4;<br /> width: 100%;<br /> margin: 0em;<br />}</p>
<p>.csharpcode .lnum { color: #606060; }</p>
<p>I&#8217;ve been using the ActiveDirectoryMembershipProvider to allow my users to login to a custom ASP.Net site with their AD credentials and it is pretty straight forward.  Recently I needed to add more granularity to who can view various parts of the site.  I wanted to take advantage of our existing AD groups so I assumed there would be something like an ActiveDirectoryRoleProvider as well.  After a little searching, it became clear that wasn&#8217;t the case, so I decided to roll my own.</p>
<p>Creating a custom role provider is pretty easy, all you have to do is create a new class and inherit RoleProvider:</p>
<pre class="csharpcode">public class ActiveDirectoryRoleProvider : RoleProvider{}</pre>
<p>You will have to create stubs for all the inherited members.  We only need to implement a couple of them to get basic role membership checking.  We need to get our AD configuration information out of the Web.Config values, so we&#8217;ll create a few properties and override the Initialize method:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionStringName { get; set; }<span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionUsername { get; set; }<span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionPassword { get; set; }<span class="kwrd">private</span> <span class="kwrd">string</span> AttributeMapUsername { get; set; }

<span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Initialize(<span class="kwrd">string</span> name, NameValueCollection config){    ConnectionStringName = config[<span class="str">"connectionStringName"</span>];    ConnectionUsername = config[<span class="str">"connectionUsername"</span>];    ConnectionPassword = config[<span class="str">"connectionPassword"</span>];    AttributeMapUsername = config[<span class="str">"attributeMapUsername"</span>];

    <span class="kwrd">base</span>.Initialize(name, config);}</pre>
<p>Now we&#8217;ll override GetRolesForUser which is the bulk of our implementation.  We use the DirectorySearcher class in System.DirectoryServices to query AD for the passed username.  We then pull the memberOf property from that user and extract the CN component for each entry as the role:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span>[] GetRolesForUser(<span class="kwrd">string</span> username){    var allRoles = <span class="kwrd">new</span> List&lt;<span class="kwrd">string</span>&gt;();

    var root = <span class="kwrd">new</span> DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString, ConnectionUsername, ConnectionPassword);

    var searcher = <span class="kwrd">new</span> DirectorySearcher(root, <span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">"(&amp;(objectClass=user)({0}={1}))"</span>, AttributeMapUsername, username));    searcher.PropertiesToLoad.Add(<span class="str">"memberOf"</span>);

    SearchResult result = searcher.FindOne();

    <span class="kwrd">if</span> (result != <span class="kwrd">null</span> &amp;&amp; !<span class="kwrd">string</span>.IsNullOrEmpty(result.Path))    {        DirectoryEntry user = result.GetDirectoryEntry();

        PropertyValueCollection groups = user.Properties[<span class="str">"memberOf"</span>];

        <span class="kwrd">foreach</span> (<span class="kwrd">string</span> path <span class="kwrd">in</span> groups)        {            <span class="kwrd">string</span>[] parts = path.Split(<span class="str">','</span>);

            <span class="kwrd">if</span> (parts.Length &gt; 0)            {                <span class="kwrd">foreach</span> (<span class="kwrd">string</span> part <span class="kwrd">in</span> parts)                {                    <span class="kwrd">string</span>[] p = part.Split(<span class="str">'='</span>);

                    <span class="kwrd">if</span> (p[0].Equals(<span class="str">"cn"</span>, StringComparison.OrdinalIgnoreCase))                    {                        allRoles.Add(p[1]);                    }                }            }        }    }

    <span class="kwrd">return</span> allRoles.ToArray();}</pre>
<p>And finally we need to override IsUserInRole so we can easily check for role membership in code:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">bool</span> IsUserInRole(<span class="kwrd">string</span> username, <span class="kwrd">string</span> roleName){    <span class="kwrd">string</span>[] roles = GetRolesForUser(username);

    <span class="kwrd">foreach</span> (<span class="kwrd">string</span> role <span class="kwrd">in</span> roles)    {        <span class="kwrd">if</span> (role.Equals(roleName, StringComparison.OrdinalIgnoreCase))        {            <span class="kwrd">return</span> <span class="kwrd">true</span>;        }    }

    <span class="kwrd">return</span> <span class="kwrd">false</span>;}</pre>
<p>Here&#8217;s the the full code (minus the unimplemented inherited methods):</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> ActiveDirectoryRoleProvider : RoleProvider{    <span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionStringName { get; set; }    <span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionUsername { get; set; }    <span class="kwrd">private</span> <span class="kwrd">string</span> ConnectionPassword { get; set; }    <span class="kwrd">private</span> <span class="kwrd">string</span> AttributeMapUsername { get; set; }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Initialize(<span class="kwrd">string</span> name, NameValueCollection config)    {        ConnectionStringName = config[<span class="str">"connectionStringName"</span>];        ConnectionUsername = config[<span class="str">"connectionUsername"</span>];        ConnectionPassword = config[<span class="str">"connectionPassword"</span>];        AttributeMapUsername = config[<span class="str">"attributeMapUsername"</span>];

        <span class="kwrd">base</span>.Initialize(name, config);    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">bool</span> IsUserInRole(<span class="kwrd">string</span> username, <span class="kwrd">string</span> roleName)    {        <span class="kwrd">string</span>[] roles = GetRolesForUser(username);

        <span class="kwrd">foreach</span> (<span class="kwrd">string</span> role <span class="kwrd">in</span> roles)        {            <span class="kwrd">if</span> (role.Equals(roleName, StringComparison.OrdinalIgnoreCase))            {                <span class="kwrd">return</span> <span class="kwrd">true</span>;            }        }

        <span class="kwrd">return</span> <span class="kwrd">false</span>;    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span>[] GetRolesForUser(<span class="kwrd">string</span> username)    {        var allRoles = <span class="kwrd">new</span> List&lt;<span class="kwrd">string</span>&gt;();

        var root = <span class="kwrd">new</span> DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString, ConnectionUsername, ConnectionPassword);

        var searcher = <span class="kwrd">new</span> DirectorySearcher(root, <span class="kwrd">string</span>.Format(CultureInfo.InvariantCulture, <span class="str">"(&amp;(objectClass=user)({0}={1}))"</span>, AttributeMapUsername, username));        searcher.PropertiesToLoad.Add(<span class="str">"memberOf"</span>);

        SearchResult result = searcher.FindOne();

        <span class="kwrd">if</span> (result != <span class="kwrd">null</span> &amp;&amp; !<span class="kwrd">string</span>.IsNullOrEmpty(result.Path))        {            DirectoryEntry user = result.GetDirectoryEntry();

            PropertyValueCollection groups = user.Properties[<span class="str">"memberOf"</span>];

            <span class="kwrd">foreach</span> (<span class="kwrd">string</span> path <span class="kwrd">in</span> groups)            {                <span class="kwrd">string</span>[] parts = path.Split(<span class="str">','</span>);

                <span class="kwrd">if</span> (parts.Length &gt; 0)                {                    <span class="kwrd">foreach</span> (<span class="kwrd">string</span> part <span class="kwrd">in</span> parts)                    {                        <span class="kwrd">string</span>[] p = part.Split(<span class="str">'='</span>);

                        <span class="kwrd">if</span> (p[0].Equals(<span class="str">"cn"</span>, StringComparison.OrdinalIgnoreCase))                        {                            allRoles.Add(p[1]);                        }                    }                }            }        }

        <span class="kwrd">return</span> allRoles.ToArray();    }}</pre>
<p>Add the role provider to your Web.Config:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">system.web</span><span class="kwrd">&gt;</span>    <span class="kwrd">&lt;</span><span class="html">roleManager</span> <span class="attr">enabled</span><span class="kwrd">="true"</span> <span class="attr">defaultProvider</span><span class="kwrd">="ADRoleProvider"</span> <span class="attr">cacheRolesInCookie</span><span class="kwrd">="true"</span> <span class="attr">cookieName</span><span class="kwrd">=".ASPXROLES"</span> <span class="attr">cookiePath</span><span class="kwrd">="/"</span>                 <span class="attr">cookieTimeout</span><span class="kwrd">="30"</span> <span class="attr">cookieRequireSSL</span><span class="kwrd">="false"</span> <span class="attr">cookieSlidingExpiration</span><span class="kwrd">="true"</span> <span class="attr">createPersistentCookie</span><span class="kwrd">="false"</span> <span class="attr">cookieProtection</span><span class="kwrd">="All"</span><span class="kwrd">&gt;</span>        <span class="kwrd">&lt;</span><span class="html">providers</span><span class="kwrd">&gt;</span>            <span class="kwrd">&lt;</span><span class="html">clear</span> <span class="kwrd">/&gt;</span>            <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">name</span><span class="kwrd">="ActiveDirectoryRoleProvider"</span> <span class="attr">connectionStringName</span><span class="kwrd">="ADConnectionString"</span> <span class="attr">connectionUsername</span><span class="kwrd">="username"</span>                 <span class="attr">connectionPassword</span><span class="kwrd">="password"</span> <span class="attr">attributeMapUsername</span><span class="kwrd">="sAMAccountName"</span> <span class="attr">type</span><span class="kwrd">="ActiveDirectoryRoleProvider"</span> <span class="kwrd">/&gt;</span>        <span class="kwrd">&lt;/</span><span class="html">providers</span><span class="kwrd">&gt;</span>    <span class="kwrd">&lt;/</span><span class="html">roleManager</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">system.web</span><span class="kwrd">&gt;</span></pre>
<p>You can then check the roles of your user in code like so:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode">Roles.IsUserInRole(<span class="str">"My Group"</span>)</pre>
<p>Or control access to entire directories via the Web.Config:</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ -->
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">location</span> <span class="attr">path</span><span class="kwrd">="RestrictedSubDirectory"</span><span class="kwrd">&gt;</span>    <span class="kwrd">&lt;</span><span class="html">system.web</span><span class="kwrd">&gt;</span>        <span class="kwrd">&lt;</span><span class="html">authorization</span><span class="kwrd">&gt;</span>            <span class="kwrd">&lt;</span><span class="html">allow</span> <span class="attr">roles</span><span class="kwrd">="My Group"</span><span class="kwrd">/&gt;</span>            <span class="kwrd">&lt;</span><span class="html">deny</span> <span class="attr">users</span><span class="kwrd">="*"</span> <span class="kwrd">/&gt;</span>        <span class="kwrd">&lt;/</span><span class="html">authorization</span><span class="kwrd">&gt;</span>    <span class="kwrd">&lt;/</span><span class="html">system.web</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">location</span><span class="kwrd">&gt;</span></pre>
<div class="blogger-post-footer"><img width='1' height='1' src='' alt='' /></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/slalomdev.wordpress.com/78/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/slalomdev.wordpress.com/78/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/slalomdev.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/slalomdev.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/slalomdev.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=slalomdev.wordpress.com&amp;blog=9148917&amp;post=78&amp;subd=slalomdev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://slalomdev.wordpress.com/2008/08/15/active-directory-role-provider/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="https://secure.gravatar.com/avatar/f92e3abefe9a5bd7cabda95b187ff99b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Greg Martin</media:title>
		</media:content>
	</item>
	</channel>
</rss>
