<?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>Snipe.Net &#187; webdev</title>
	<atom:link href="http://www.snipe.net/tags/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.snipe.net</link>
	<description>Bitterness never tasted so sweet</description>
	<lastBuildDate>Tue, 24 Jan 2012 04:30:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>iPhone/iPad Apps for Coders and Sysadmins</title>
		<link>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/</link>
		<comments>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 20:49:28 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=3366</guid>
		<description><![CDATA[It wasn&#8217;t that long ago that I scoffed at the idea of the iPad, or at least thought it would never have any place in my tech toolkit. I finally broke down and got one, and it&#8217;s changed the way I work, largely because of the number of fantastic apps out there. We&#8217;re finally at [...]]]></description>
			<content:encoded><![CDATA[<p>It wasn&#8217;t that long ago that I scoffed at the idea of the iPad, or at least thought it would never have any place in my tech toolkit. I finally broke down and got one, and it&#8217;s changed the way I work, largely because of the number of fantastic apps out there.</p>
<p>We&#8217;re finally at a point where someone who spends a reasonable amount of time at a server command line can actually get real work done, and I gotta say, it&#8217;s pretty cool. Just last night I was discussing an obscure Apache config issue with a friend at a bar, and rather than working from memory, I busted out the iPad and my Bluetooth keyboard, and 5 minutes later, the configuration issue was solved. </p>
<p>Having the freedom to go to the park to read for a bit but knowing I have the ability to handle an emergency should it come up is very freeing. Yes, I have become that douchebag at Starbucks &#8211; and you know what? I fucking love it. </p>
<p><img src="http://www.snipe.net/wp-content/uploads/2011/04/ipad.jpg" alt="" title="ipad" width="540" height="403" class="aligncenter size-full wp-image-3371" /></p>
<p>Anyway. Point is, the iPad (or iPhone) can be used for more than just porn now (which is good, because the folks at Starbucks get surprisingly upset when you try adding your own &#8220;cream&#8221; to your latte), and I&#8217;ve spent some time and money to try out some of the most promising apps in the app store that allow you to do actual work, and edge the iPad closer to being a viable option for a netbook replacement.</p>
<p>I didn&#8217;t address any design/mockup/mindmapping apps in this list, but that may be a topic for another post sometime. This list isn&#8217;t meant to be all-inclusive, and doesn&#8217;t reflect the totality of what is available in the app store &#8211; it&#8217;s a short list of personal recommendations of products I actually use and like.</p>
<p>Disclosure: Some of the links below are hooked into the iTunes affiliate program so that I might get a penny or two if you decide to buy, however the recommendations are legit, and I wouldn&#8217;t recommend something unless I had used it. Click through on the affiliate links or don&#8217;t &#8211; but do leave me a comment if you&#8217;ve fallen in love with something I haven&#8217;t mentioned here.</p>
<h3>Code Editors/FTP</h3>
<p>There are quite a few nice code editors for iPad in the app store, but I won&#8217;t consider any that only offer FTP instead of SFTP and neither should you. I am just as likely to use vi in an SSH app on my iPad as I am to use a code editor, but for handling multiple open files at one time, sometimes an editor is kinda nice. Unfortunately, 90% of the code editors in the app store are complete and utterly shit-tastic garbage. Seriously. Even if you don&#8217;t pick one of my recommendations, make sure you read the comments on the code editor apps before you buy so you don&#8217;t get burned. </p>
<h4>Textastic</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.383577124&#038;type=2&#038;subid=0"><img border=0 src="http://a1853.phobos.apple.com/us/r1000/034/Purple/59/bb/fa/mzi.qkikkfrp.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.383577124&#038;type=2&#038;subid=0" /></div>
<p>I think Textastic might be my new favorite code editor for iPad. The interface is very clean, it supports FTP and SFTP, integrates with Dropbox and WebDav (if you&#8217;re into that sort of thing) and comes with syntax highlighting for around 80 different languages. It&#8217;s a little pricier than some of the other options, but I think it&#8217;s well worth the investment. I want to make sweet ASCII love to it all the time.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.383577124&#038;type=2&#038;subid=0">Buy Now ($9.99)</a></strong><br />
Developer: <a href="http://www.textasticapp.com/">Alexander Blach</a></p>
<h4>Gusto</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364906873&#038;type=2&#038;subid=0"><img border=0 src="http://a1853.phobos.apple.com/us/r1000/051/Purple/e7/31/5b/mzi.gshzwuci.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.364906873&#038;type=2&#038;subid=0" /></div>
<p>Gusto is pretty sexy and has come pretty far in a short time. (When it first appeared in the app store, there was no SFTP support.) It supports projects, one-touch uploading, background processing so your state doesn&#8217;t get lost when you have to switch apps, pretty Coda-like site thumbnails, tabbed editing, and remove and local preview support. Three obvious features that are missing are syntax highlighting, line-wrapping and public-key authentication, but it&#8217;s a great start and a solid option for busting out quick changes on the road.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364906873&#038;type=2&#038;subid=0">Buy Now ($6.99) </a></strong><br />
Developer: <a href="http://horseandtherook.com/gusto/">Horse and the Rook</a></p>
<p>An alternative to Gusto that&#8217;s an app to watch would be <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.365590383&#038;type=2&#038;subid=0">Markup for iPad</a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.365590383&#038;type=2&#038;subid=0" />, but I&#8217;ve heard such crap things (crashy, no SFTP) about it that I haven&#8217;t tried it. Sounds like it&#8217;s worth keeping an eye on, but not ready for prime time yet and not worth the $10 pricetag until it&#8217;s a bit more stable and can handle SFTP.</p>
<h4>FTP on the Go (Pro)</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364787363&#038;type=2&#038;subid=0"><img border=0 src="http://a1408.phobos.apple.com/us/r1000/048/Purple/3f/eb/cd/mzi.vgywhamx.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.364787363&#038;type=2&#038;subid=0" /></div>
<p>Feature-packed FTPS app. Honestly, too many spiffy features to list &#8211; the best FTP app I&#8217;ve come across so far. Comes with a built in FTP Server and Web Server allow viewing and adding files to the iPhone or iPod touch. Browse files on your iPhone from your computer with a web browser. Madness. Madness, I say!<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.364787363&#038;type=2&#038;subid=0">Buy Now ($9.99)</a></strong><br />
Developer: <a href="http://www.ftponthego.com/">Headlight Software</a></p>
<h3>MySQL</h3>
<h4>MySQL Database Client</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.412789347&#038;type=2&#038;subid=0"><img border=0 src="http://a1150.phobos.apple.com/us/r1000/039/Purple/53/88/85/mzi.ufppzvke.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.412789347&#038;type=2&#038;subid=0" /></div>
<p>Small, simple MySQL client for iPad and iPhone. Supports stored profiles and custom queries, but don&#8217;t go too nuts. It can handle basic queries, but more complicated stuff like JOINS will return unpredictable results. Still, it&#8217;s $0.99, and is worth at least that much, contrary to the cheesedick who &#8220;wants a refund&#8221; in the reviews. Seriously. It&#8217;s a buck. Get over it, kid.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.412789347&#038;type=2&#038;subid=0">Buy it Now ($0.99)</a></strong><br />
Developer: <a href="http://hankinsoft.com/">Kyle Hankinson</a></p>
<h4>MySQL Editor Pro</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.414309098&#038;type=2&#038;subid=0"><img border=0 src="http://a154.phobos.apple.com/us/r1000/057/Purple/c4/4b/82/mzi.vkpiwyde.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.414309098&#038;type=2&#038;subid=0" /></div>
<p>A much more full-featured app with a price tag that reflects it, MySQL Editor Pro is the real deal. If the cost doesn&#8217;t scare you off, this is well worth the month for such a strong db admin app.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.414309098&#038;type=2&#038;subid=0">Buy it Now ($14.99)</a></strong><br />
Developer: <a href="http://itopchiyev.com/">Pasha Topchiyev</a></p>
<h3>SSH/VNC</h3>
<h4>Prompt</h4>
<p>That Apache configuration issue I was having? Solved in 5 minutes using Prompt. It&#8217;s made by the same folks that make the super-sexy Coda code editing app for Mac. The UI is pretty nice, and it supports special characters and keystrokes like CTRL which one ends up using frequently in a shell. Prompt supports DSA/RSA keys, automagically remembers your frequently used commands, runs in the background so screen-switching won&#8217;t disconnect you, and you can map commonly used keystrokes easily for speedy access. An added bonus &#8211; it&#8217;s a universal app, so you buy it once and it works on your iPhone and your iPad. (Given my horrible typing on the iPhone and the iPhones even more horrible auto-correction, I don&#8217;t know that I&#8217;d want to use it on my phone much, but it&#8217;s nice to know it&#8217;s an option.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/prompt/id421507115?mt=8">Buy it Now ($4.99)</a></strong><br />
Developer: <a href="https://www.panic.com/blog/2011/04/introducing-prompt-ssh-for-ios/">Panic, Inc.</a></p>
<h4>iSSH</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.287765826&#038;type=2&#038;subid=0"><img border=0 src="http://a13.phobos.apple.com/us/r1000/026/Purple/b2/a0/fa/mzi.pcnnfqne.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.287765826&#038;type=2&#038;subid=0" /></div>
<p>Less sexy than Prompt but still one helluvan app is iSSH. iSSH boasts a pretty impressive feature set, including a tunneled VNC client, tunneled X server, the fact that SSH, telnet and VNC all work via EDGE, WiFi and 3G, transparent keyboard, Bluetooth keyboard mapping, RSA and DSA key generation and exchange, tons of keyboard customizations and holy shit a lot more. It&#8217;s a solid client, and a universal app, so you can buy it once and use it on your iPhone, iPad, iPod touch, etc. Even works with older iPhones running iOS 3.0.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.287765826&#038;type=2&#038;subid=0">Buy it Now ($9.99)</a></strong><br />
Developer: <a href="http://www.zinger-soft.com/iSSH_features.html">Zingersoft</a></p>
<h3>Network Tools &#038; Miscellaneous Hackery</h3>
<h4>IT Tools</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.324054954&#038;type=2&#038;subid=0"><img border=0 src="http://a671.phobos.apple.com/us/r1000/005/Purple/cb/c1/ff/mzi.yocyeqez.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.324054954&#038;type=2&#038;subid=0" /></div>
<p>Puts a whole handful of diagnostics just a tap or two away, with DNS, Ping, Route, ARP, active sockets and Interface tools. 45 supported DNS record types, including A, AAAA, CNAME, LOC, MX, NS, SRV, TXT &#8211; and it come with a database of MAC addresses so you can look up manufacturers of devices on your network. All of these things can be done through SSH if you&#8217;ve already got a terminal running, but this app makes it so much easier.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.324054954&#038;type=2&#038;subid=0">Buy it Now ($4.99)</a></strong><br />
Developer: <a href="http://ittools.koltzau.com/">Kevin Koltzau</a></p>
<h4>Server Admin Remote (Mac OSX Server)</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.300347476&#038;type=2&#038;subid=0"><img border=0 src="http://a1814.phobos.apple.com/us/r1000/039/Purple/a7/df/ed/mzi.skdmwozh.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.300347476&#038;type=2&#038;subid=0" /></div>
<p>Called a Swiss army-knife for the mobile Mac OS X admin, with Server Admin Remote IT administrators can monitor the alive status of Mac OS X Server services, start/stop services and observe the services&#8217; logs (Mac OS X Snow Leopard, Mac OS X Leopard Server and Mac OS X Tiger Server). Works on EDGE, WiFi and 3G connections. No further installation on your Mac OS X Server needed, since Server Admin Remote uses the same interface as Mac OS X Server Admin.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.300347476&#038;type=2&#038;subid=0">Buy it Now ($11.99)</a></strong><br />
Developer: <a href="http://www.harlekins.org/ServerAdminRemote/">Harlekins</a></p>
<h4>Rackspace Cloud</h4>
<p>If you&#8217;ve got a Rackspace Cloud Servers account, this app is the shit. Reboot, rename, resize, and rebuild your Cloud Servers, spin up a new server or delete an existing one, change your root password, bootstrap Cloud Servers with Chef from your Chef server or the Opscode Platform, open and manage Cloud Files assets and control your CDN settings for Cloud Files containers, play Cloud Files audio and video over Airplay to your Apple TV (iOS 4.3 and up) &#8211; a ton more. It&#8217;s not a complete replacement for their control panel, but you can do a heck of a lot with it.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/rackspace-cloud/id327870903?mt=8#">Download Now (FREE)</a></strong><br />
Developer: <a href="http://www.rackspace.com">Rackspace</a></p>
<h4>Vtrace</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.335485119&#038;type=2&#038;subid=0"><img border=0 src="http://a546.phobos.apple.com/us/r1000/051/Purple/54/d0/e5/mzi.nlhvsldh.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.335485119&#038;type=2&#038;subid=0" /></div>
<p>Simple visual traceroute (or TracerT, if you&#8217;re <a href="http://www.youtube.com/watch?v=SXmv8quf_xM">this kid</a>) that uses your current location to take you down the bunny trail to whatever IP or hostname you&#8217;re looking up.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.335485119&#038;type=2&#038;subid=0">Download Now (FREE)</a></strong><br />
Developer: <a href="http://vladalexa.com/apps/ios/vtrace/">Vlad Alexa</a></p>
<h4>iAccess for Nagios</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.340379438&#038;type=2&#038;subid=0"><img border=0 src="http://a327.phobos.apple.com/us/r1000/013/Purple/5e/0f/17/mzi.ggbpufwi.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.340379438&#038;type=2&#038;subid=0" /></div>
<p>Mobile Nagios client that gives you direct access to the /nagios dashboard. (Obviously, you need a Nagios server configured for this to work.)<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.340379438&#038;type=2&#038;subid=0">Buy Now ($3.99)</a></strong><br />
Developer: <a href="http://www.asion-it.de/iaccess-nagios.html">ASION IT Services</a></p>
<h4>Flame for Bonjour</h4>
<p>Flame is a browser for Bonjour network services. It lists the services advertised on your wireless network and you can browse them by server or by service type. When selecting a service, its advertised details are displayed. If an application on your iPhone or iPod touch can handle any of the advertised services, a command to open it right away is provided.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/flame/id325206381?mt=8">Download Now (FREE)</a></strong><br />
Developer: <a href="http://jerakeen.org/code/flame-iphone/">Tom Insam</a></p>
<h4>Ping A Majig</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.288423680&#038;type=2&#038;subid=0"><img border=0 src="http://a1253.phobos.apple.com/us/r1000/032/Purple/90/a8/6a/mzl.yduwxjhs.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.288423680&#038;type=2&#038;subid=0" /></div>
<p>Handy app that lets you check the ping status of multiple hostnames at one time. It&#8217;s a bit handier as a monitoring tool than the other apps that include ping as an available tool, since the at-a-glance view lets you see if any of your hosts are in trouble on one screen.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.288423680&#038;type=2&#038;subid=0">Buy Now ($0.99)</a></strong><br />
Developer: <a href="http://www.pingysoft.com/">Pingysoft</a></p>
<h4>RBL Status</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.328354770&#038;type=2&#038;subid=0"><img border=0 src="http://a133.phobos.apple.com/us/r1000/041/Purple/42/18/92/mzi.aceimxqj.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.328354770&#038;type=2&#038;subid=0" /></div>
<p>Simple but effective Real Time Blacklist looker-upper.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/flame/id325206381?mt=8">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://happymagenta.com/rblstatus/">Pavel Ahafonau</a></p>
<h4>iPortscan Pro</h4>
<div style="float: left; padding-right: 10px;"><a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.320540236&#038;type=2&#038;subid=0"><img border=0 src="http://a789.phobos.apple.com/us/r1000/025/Purple/67/18/c1/mzl.gybkjuav.png" /></a><img border=0 width=1 height=1 src="http://ad.linksynergy.com/fs-bin/show?id=koi7Sx2nFJ8&#038;bids=146261.320540236&#038;type=2&#038;subid=0" /></div>
<p>iPortScan PRO is a port scanner for your IPhone or IPodTouch. It does not feature any network discovery; however, this tool is useful for sysadmins checking what services are listening on a known system. This is very handy for the system admin who can use this tool to quickly portscan all of their systems to make sure nothing is open that shouldn&#8217;t be.<br />
<strong>In iTunes: <a href="http://click.linksynergy.com/fs-bin/click?id=koi7Sx2nFJ8&#038;offerid=146261.320540236&#038;type=2&#038;subid=0">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://www.whitesidesolutions.com/">Whiteside Solutions LLC</a></p>
<h4>Default Logins</h4>
<p>This app contains a database of over 300 common and uncommon manufactures and the usernames and passwords they pre-configure their devices with (which there are 1,000 + in the database). Can come in handy for more nefarious reasons (if you&#8217;re that kinda person), but also super useful for fixing a relative&#8217;s biffed router when they ask you to come over and fix their internets.<br />
<strong>In iTunes: <a href="http://itunes.apple.com/us/app/default-logins/id348570963?mt=8#">Buy Now ($1.99)</a></strong><br />
Developer: <a href="http://www.anthonylamantia.com/">anthony lamantia</a></p>
<p>So that&#8217;s my list &#8211; for now. Did I miss any that you love? Leave me a note in the comments.</p>
<p>PS &#8211; yes, that&#8217;s a photo of my actual license plate at the top of the post. And yes, that makes me more awesome than you. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/03/twitter-facebook-scams-rogue-apps/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/03/kutcherpic.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Know Your Social Media Scams &#038; Rogue Apps" height="90" width="90" onmouseover="onover('Know Your Social Media Scams &#038; Rogue Apps')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/07/nes-haiku-win-iphone-skin/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/07/nes.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Share Your NES Haiku, Enter to Win an NES Controller iPhone 3G/3GS Ski" height="90" width="90" onmouseover="onover('Share Your NES Haiku, Enter to Win an NES Controller iPhone 3G/3GS Ski')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/version-control.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="SVN Working Copies and Repository Locations" height="90" width="90" onmouseover="onover('SVN Working Copies and Repository Locations')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2011/04/iphone-ipad-sysadmin-apps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Microsoft Web Developer&#8217;s Summit 2009</title>
		<link>http://www.snipe.net/2009/12/mswds09/</link>
		<comments>http://www.snipe.net/2009/12/mswds09/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 03:20:31 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP/mySQL]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mswds]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=2557</guid>
		<description><![CDATA[I had the opportunity this week to go out to Redmond, Washington to attend the Microsoft Web Developer&#8217;s Summit at the MS headquarters. For this summit, about 25 leaders in the PHP (and PHP project) community were invited out to sit down with members of the MS product development teams and provide critical, honest feedback [...]]]></description>
			<content:encoded><![CDATA[<p>I had the opportunity this week to go out to Redmond, Washington to attend the Microsoft Web Developer&#8217;s Summit at the MS headquarters. For this summit, about 25 leaders in the PHP (and PHP project) community were invited out to sit down with members of the MS product development teams and provide critical, honest feedback about Microsoft.<br />
<span id="more-2557"></span></p>
<h3>Background</h3>
<p>The MSWDS is one of only four significant annual events within the PHP community (others include tek, DPC and ZendCon), and this summit is a bit harder to get invited to. Unlike most other conferences, where all you need is the cash to pony up for a conference pass and a hotel room to crash in, invites are very limited and attendees are selected because they have had some interaction with the folks at Microsoft, and are believed to be leaders and influencers within the open source community. To be blunt, these summits cost Microsoft a lot of money, so they need to make sure they&#8217;re getting the best bang for their buck.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2009/12/IMG_0065-sm.jpg" alt="IMG_0065-sm" title="IMG_0065-sm" width="200" height="126" class="alignright size-full wp-image-2577" />Keeping that in mind, it would be easy to assume that we were being brought out there so that Microsoft could pitch us on the latest and greatest Microsoft products, trying to get the movers and shakers of open source to drink the corporate kool-aid and switch to Microsoft products. While more acceptance of Microsoft products within the open source community is obviously a goal, they are making a concerted effort to learn from us &#8211; what we need, where they are falling short, and how we can move forward together.</p>
<h3>Discussions and Format</h3>
<p>The summit itself was a total of three days, with the last day being optional for those open source developers who were willing to sign an NDA to discuss some of Microsoft&#8217;s emerging technology. During the three days, different representatives from Microsoft&#8217;s product teams sat down with us and asked for our comments, thoughts and ideas about where they&#8217;re at, and where we think they should be going. We met with folks from the <a href="http://microsoft.com/web/">IIS Web Platform</a> team, the <a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx">SQL server</a> team, as well as some representatives from <a href="http://www.codeplex.com/">Codeplex</a>, <a href="http://silverlight.net/">Silverlight</a>, <a href="http://technet.microsoft.com/en-us/library/bb978526.aspx">Powershell</a>, <a href="http://www.asp.net/%28S%28waglea45zymnbmbli4vgme45%29%29/ajax/">ASP.NET Ajax</a> (which is not exclusive to ASP.NET, despite the name), and <a href="http://www.bing.com/maps/explore/">Bing maps</a>. </p>
<p>We had a chance to air grievances, which was cathartic in some ways, but I think it was more important to us to be able to sit down with the actual teams who are working on this technology at Microsoft, and really get into the specific challenges we face. The approach was not generally pitchy, and with very few exceptions, a great deal of effort was put into making all of us from the open source community feel like respected authorities in our field whose opinions really matter. </p>
<p>Something they did this year which was apparently not done last year was to include representatives from well-known PHP-based projects who are not normally parts of the PHP community. I honestly hadn&#8217;t realized that the many of the folks over Joomla, WordPress and Drupal often don&#8217;t consider themselves as part of the greater PHP community, and getting a chance to discuss that with them brought up some interesting perspectives. I don&#8217;t think the guys representing these projects were there in an official capacity, but their point of view was one that had honestly not occurred to me before, so that was a really interesting and unexpected benefit. There was some debate on whether or not these types of projects should be a more involved part of the PHP community, with good points on both sides, but I think most walked away with some ideas on how to move forward in making those lines of communication more accessible and open.</p>
<h3>My Perspective</h3>
<p>Of course the ultimate question from Microsoft was &#8220;What would it take for you to switch to Microsoft products for your clients?&#8221; My smartass remark was, of course &#8220;A fucking miracle.&#8221; But everyone in the room knew I was joking. I hope. If we weren&#8217;t willing to work with Microsoft on improving their products to work with open source better, we wouldn&#8217;t have been there. </p>
<p>As often as Microsoft has been an easy target in the past, and as much bad blood as there may have been in the past, there <em>are</em> people at Microsoft that care about working with the open source community, and who are making progress to get there. It is our job as technology professionals to fairly evaluate technology and make recommendations based on what makes the most sense technologically and financially. It is NOT our job to make religious decisions based on zealotry. </p>
<p>That means that if and when Microsoft can meet my needs and/or the needs of my clients, it can and should be part of that evaluation or I&#8217;m not doing my job. Does that mean I&#8217;m ready to switch back? No. Not yet, anyway. But I believe they are listening, and I saw some things during this summit that make me far more likely to start including some parts of Microsoft&#8217;s products into the technology I suggest as being potentially viable for client projects, which is a far cry closer than I was last week. Specifically, some of the stuff I learned about Silverlight, Bing&#8217;s geolocation products and Windows Azure (Microsoft&#8217;s cloud hosting platform) was pretty impressive. As I get to play with these products a little more, I&#8217;ll be blogging about them with my fair evaluation of pros and cons, so stay tuned.</p>
<p>I&#8217;m also excited to see where the <a href="http://www.microsoft.com/web/Downloads/platform.aspx">Microsoft Web Platform Installer product</a> heads. Right now, the WebPI product is a very easy to use, slick solution for the less techy individual who wants to, for example, deploy a WordPress blog in 5 minutes or less and may not have the savvy to do the install themselves &#8211; basically a MS version of Cpanel/Fantastico, which we have had available to us as web administrators for over a decade. That product is less interesting to me right now, but some of the directions they could go in for more advanced users like us hold real potential. We had some suggestions that were well-received, and if they are actually implemented in the way I envision them, it could honestly turn the table and make some of the Microsoft web server products something that I could consider recommending, or even using myself. (I should also mention that Cpanel is the most horrific, insecure, hack-prone web control panel I&#8217;ve ever used, and I am NOT endorsing it as a solution.)</p>
<p>The reality is that competition inspires innovation, and Microsoft getting better means progress for everyone. I saw a post on Twitter that basically implied that open source representatives attending this conference were traitors or sellouts. I don&#8217;t see it that way at all. We have amazing open source products like Firefox because the open source community worked together to create a better product, and Microsoft responded by making vast improvements to Internet Explorer, building in more security and standards compliance. <strong>When we work together to innovate, everybody wins.</strong></p>
<p>Another transition I&#8217;ve been seeing in Microsoft which was really made more obvious by this summit is that there is a less omnipresent feeling of &#8220;all or nothing&#8221; within many Microsoft departments. As open source advocates, we enjoy having choices. Previously with Microsoft, you&#8217;d get the most benefit from their products by committing to an entirely Microsoft development process (&#8220;drinking <em>all</em> of the kool-aid, since the best stuff is the sugary goop at the bottom&#8221;), with benefits sharply falling off if you opted to pick and choose. This philosophy has always been distinctly in opposition with the open source philosophy, and I believe was likely the cause for some of the distrust coming from the open source community. Seeing this transition into a paradigm of being able to cherry-pick what we like for some things and sticking with open source solutions we like better for others is a step in the right direction, in my opinion. </p>
<p>An additional unexpected benefit to sitting down with all these MS product people was that I got a chance to better understand some of the legal/licensing challenges Microsoft faces. I&#8217;m not making excuses for them, but I hadn&#8217;t considered some of the obstacles in the way of people at MS who care about working with us. Microsoft is a big target with deep pockets, and they have to cover their own asses. I was quicker to dismiss some of the corporate decisions as being &#8220;evil&#8221; prior to sitting down with some of them and understanding why they do what they do. Don&#8217;t get me wrong &#8211; some of their decisions (*cough*sudo*cough*) still don&#8217;t make sense to me and I believe they are wrong, but I think I have a better understanding of where they sit than I did before</p>
<h3>Wrapping Up</h3>
<p>Overall, I would consider this summit a great success, and I hope I get to participate again in the future. There are several people who really deserve a shout-out for all of the hard work that went into this and are directly responsible for it&#8217;s success. From the PHP community, <a href="http://blog.calevans.com/">Cal Evans</a> was a co-host and an absolute rock star, always quick to make sure things ran smoothly and kick-start conversations and redirect us back when we went off on tangents. From Microsoft, Karri Dunn, Tonya Young, Josh Holmes, Peter Laudati, Lauren Cooney, and others were amazing. I may be forgetting a few &#8211; I am still a little wiped from the week and the traveling.</p>
<p>Was this an instant fix? Certainly not. Do we all have a lot more work to do before we&#8217;re &#8220;there&#8221;? Absolutely. But as Cal Evans put it on his own blog roundup, &#8220;The more people I get to know at Microsoft, the less I’m able to despise the company.&#8221; They took the time to find out what we think, even when it may not have been what they wanted to hear. Time will tell whether or not they actually act on it. </p>
<h3>Other PHP Representatives Blog Post Roundups</h3>
<p>I&#8217;ll be updating this list as more people finish their blog post roundups, so you can get take their on the summit. Many of them are far smarter than I am, so it&#8217;s worth reading what they have to say.</p>
<ul>
<li><a href="http://blog.calevans.com/2009/12/05/mswds09/">Cal Evans</a> (<a href="http://twitter.com/CalEvans">@CalEvans</a>)</li>
<li><a href="http://blog.phpdeveloper.org/?p=246">Chris Cornutt</a> (<a href="http://twitter.com/enygma">@enygma</a>)</li>
<li><a href="http://blog.maartenballiauw.be/post/2009/12/07/Microsoft-Web-Development-Summit-2009.aspx">Maarten Balliauw</a> (<a href="http://twitter.com/maartenballiauw">@maartenballiauw</a>)</li>
<li><a href="http://www.rafaeldohms.com.br/2009/12/04/microsoft-web-developer-summit-2009-in-review/en/">Rafael Dohms</a> (<a href="http://twitter.com/rdohms">@rdohms</a>)</li>
<li><a href="http://blueparabola.com/blog/microsoft-web-developer-summit-2009">Keith Casey</a> (<a href="http://twitter.com/CaseySoftware">@CaseySoftware</a>)</li>
<li><a href="http://blog.wampserver.com/index.php/2009/12/05/microsoft-web-development-summit-2009/">Romain Bourdon</a> (in French) (<a href="http://twitter.com/le_vrai_roms">@le_vrai_roms</a>)</li>
<li><a href="http://blog.tabini.ca/2009/12/09/microsoft-is-and-microsoft-does/">Marco Tabini</a> (<a href="http://twitter.com/mtabini">@mtabini</a>)</li>
<li><a href="http://community.joomla.org/blogs/community/1088-slowing-back-down-mswds-and-jdc09-reflection.html">Sam Moffatt</a> (<a href="http://twitter.com/Pasamio">@Pasamio</a>)</li>
<li><a href="http://blog.echolibre.com/2009/12/microsoft-web-developer-summit/">Helgi Þormar Þorbjörnsson</a> (<a href="http://twitter.com/h">@h</a>)</li>
</ul>
<h3>MS Representative Blogs</h3>
<p>If you&#8217;d like to see more about the fabulous people at MS who are working hard to move the company forward in a way that works with open source, check out their blogs. I&#8217;m proud to call these guys friends, and as long as we continue to have people like this working for Microsoft, I think the lines of communication and cooperation between both sides of the aisle will keep moving forward.</p>
<ul>
<li><a href="http://www.davebost.com/blog/">Dave Bost</a> (<a href="http://twitter.com/DaveBost">@DaveBost</a>)  &#8211; Developer Evangelist</li>
<li><a href="http://www.joshholmes.com/blog/">Josh Holmes</a> (<a href="http://twitter.com/JoshHolmes">@JoshHolmes</a>) &#8211; UX Architect Evangelist</li>
<li><a href="http://blogs.iis.net/tobintitus/">Tobin Titus</a> (<a href="http://twitter.com/tobint">@tobint</a>) &#8211; MSDN Site Manager</li>
<li><a href="http://blogs.msdn.com/peterlau/">Peter Laudati</a> (<a href="http://twitter.com/jrzyshr">@jrzyshr</a>) &#8211; Developer Evangelist</li>
<li><a href="http://blogs.msdn.com/markbrown/">Mark Brown</a> (<a href="http://twitter.com/markjbrown">@MarkJBrown</a>) &#8211; Product Manager for Microsoft Web Platform</li>
<li>William Coleman (<a href="http://twitter.com/will_coleman">@will_coleman</a>) &#8211; Developer Evangelist</li>
<li>Lauren Cooney (<a href="http://twitter.com/lcooney ">@lcooney</a>) &#8211; GPM for Web Platforms at Microsoft</li>
<li>Jas Sandhu (<a href="http://twitter.com/jassand">@jassand</a>) &#8211; Interop Strategy Evangelist</li>
<li><a href="http://ruslany.net/">Ruslan Yakushev</a> (<a href="http://twitter.com/ruslany">@ruslany</a>) &#8211; Program Manager on IIS team in charge of FastCGI and PHP support</li>
<li><a href="http://hanselman.com">Scott Hanselman</a> (<a href="http://twitter.com/shanselman">@shanselman</a>)  &#8211; Principal Program Manager Lead</li>
</ul>
<p>Funnily, as I&#8217;m writing this, <em>Futurama: Into the Wild Green Yonder</em> has been on television, and the scene that just played is the one where Calculon says &#8220;I&#8217;d like to thank the academy, my agent, and most of all my operating system &#8211; Windows 7, for everything it &#8211;&#8221; at which point his OS locks up. Windows 7 is actually a great product, and I run it on my Mac using Bootcamp and VM Fusion, but I thought the timing was amusing.</p>
<p><em>Kool-aid photo taken in <a href="http://www.snipe.net/2009/02/getting-to-know-belize/">Belize</a> by me &#8211; just thought it was funny. Lead post image by <a href="http://eliw.com/">Eli White</a>.</em></p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/02/practical-mod_rewrite/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/02/dave.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Practical Mod_Rewrite for Web Developers" height="90" width="90" onmouseover="onover('Practical Mod_Rewrite for Web Developers')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/01/facebook-https-opt-in/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/01/Facebook-Needle.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Facebook Introduces HTTPS Opt-In for Users, Impacts App Developers" height="90" width="90" onmouseover="onover('Facebook Introduces HTTPS Opt-In for Users, Impacts App Developers')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/identify-and-fix-sql-injection-vulnerabilities-in-web-applications/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/screenshot.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Identify and Fix SQL Injection Vulnerabilities in Web Applications" height="90" width="90" onmouseover="onover('Identify and Fix SQL Injection Vulnerabilities in Web Applications')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/12/mswds09/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SVN Working Copies and Repository Locations</title>
		<link>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/</link>
		<comments>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:11:35 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1641</guid>
		<description><![CDATA[In part one of this series, you learned what Subversion is and how it can help you, in addition to the terms you&#8217;ll need to become familiar with in order to use Subversion in your development process. Part two of this series goes into more specific detail about potential development environments that may work for [...]]]></description>
			<content:encoded><![CDATA[<p>In part one of this series, you learned what Subversion is and how it can help you, in addition to the terms you&#8217;ll need to become familiar with in order to use Subversion in your development process. Part two of this series goes into more specific detail about potential development environments that may work for you.<span id="more-1641"></span></p>
<p><strong>Subversion creates a bunch of hidden files and folders inside of every directory in your Working Copy that&#8217;s checked into SVN. </strong>If your Working Copy is on your local computer, you&#8217;ll see these as .svn directories if your system preferences allow you to see hidden files and folders. You don&#8217;t need to worry about these, and you never really need to look at them, but as a result, it is not recommended that your Working Copy be on your live production box. If you decide not to listen to me, you should at least consider <a href="http://claudio.cicali.name/post/2005/08/protecting-svn-entries/" target="_blank">adding a few lines to your .htaccess</a> to deny prying eyes access to your .svn directories.</p>
<h2>Working Copy &amp; Repository on your local machine</h2>
<p><strong>Create a Working Copy on your local machine, create the Repository on your local machine, and FTP/SFTP the files once they&#8217;re committed.</strong> This will really only work if you are the only developer, or your local machine is the only machine changing files. (Okay, that&#8217;s not entirely true &#8211; you can set up the Repository on a network drive and have multiple developers Check Out their own Working Copies to their own computers, but I have run into issues running Subversion over a network.)</p>
<p><img class="aligncenter" style="margin: auto;" title="config1" src="http://www.snipe.net/wp-content/uploads/2009/03/config1.png" alt="config1" width="334" height="491" /></p>
<p>If you&#8217;re running OSX on your local machine, see this <strong><a href="http://www.wikihow.com/Install-Subversion-on-Mac-OS-X" target="_blank">tutorial on WikiHow on how to set up Subversion locally</a></strong>. If you&#8217;re running Windows, there is <strong><a href="http://www.thewebsqueeze.com/web-design-articles/an-introduction-to-subversion.html" target="_blank">an exceptional walkthrough on The WebSqueeze</a></strong> written by Christopher Hyne that is a must-read. Setting up Subversion on Mac or PC is really quite painless, and this is a perfectly valid way to go.</p>
<p><strong>Pros:</strong> Easy, local setup. No external services to set up, your workflow doesn&#8217;t change that much, and you don&#8217;t need an internet connection to commit things to your repository.</p>
<p><strong>Cons:</strong> Possible challenges with running Subversion over a network, you still have to upload your files manually, and you don&#8217;t get the benefit of a slick gui with which to view revision history, as you would using <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a> for hosted solutions, or by setting up <a href="http://trac.edgewall.org/" target="_blank">Trac</a> (a gui reporting interface/wiki/ticket system) on your server. You can set up Trac on your local machine with Python and some extra work, but that&#8217;s always been too much trouble for me. Just MHO though &#8211; it works great for some people.</p>
<h2>Working Copy on your local machine, remote Repository</h2>
<p><strong>For my personal stuff, since I use <a href="http://www.snipe.net/series/moving-to-mosso/" target="_blank">Mosso</a> as my web host, which does not currently provide Subversion (though I hear they&#8217;re working on it), I use a third party Subversion host, like <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a>.</strong> I create my Repository on Beanstalk or Unfuddle, Import whatever files I may have created for the project already, Check Out a Working Copy to my laptop, and I&#8217;m all set. I work on files on my laptop, test them on my local installation of Apache/PHP using <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a>, Commit them to Beanstalk or Unfuddle (depending which service I&#8217;m using to host my Repository), and upload them via FTP/SFTP to the development server area.</p>
<p>The result is a little extra work &#8211; I have to deal with SVN on top of FTP/SFTP, but the security of knowing my ass is covered and I have a detailed revision history makes it entirely worth it to me.</p>
<p><strong>One benefit to using a third-party SVN host, such as <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a> (besides the fact that it gives you SVN capabilities if your server doesn&#8217;t support it) is that you get a shmancy web interface with which to view your revisions.</strong> Below is a screenshot of the Unfuddle web interface. You can see that it gives me a nice, organized view of all of the history, including revisions messages, numbers and person committing. (This is a project for JPM Morgan that I worked on with my friend <a href="http://www.phpcult.com/blog/" target="_blank">Vidyut Luther</a>.)</p>
<p><img class="aligncenter" style="margin: auto;" title="picture-5" src="http://www.snipe.net/wp-content/uploads/2009/03/picture-5-560x354.png" alt="picture-5" width="560" height="354" /></p>
<p>In getting Vidyut&#8217;s blog url, I see his latest blog posts states that he can, in fact, use Subversion on Mosso, by using Expandrive. I haven&#8217;t tried it yet, and he has, so if you&#8217;re interested in exploring that as an option, <a href="http://www.phpcult.com/blog/using-subversion-with-mosso/" target="_blank">check out his blog post about it</a>. I may give it a shot at some point, but I do like the simplicity of working with a third-party SVN host. I don&#8217;t have to administer anything, just create the Repository and go.</p>
<h2>Remote Branches on dev, remote Repository, rsync to live</h2>
<p>One way of handling your development environment is to set up a Repository on the remote server, Check Out a Working Copy on a dev area on the remote server, such as dev.example.com, and set up individual <em>Branches</em> for each developer. An SVN Branch is simply a copy of the filesystem separate from the main version, called the <em>Trunk</em>. Using Branches allows you to save your half-broken work frequently without interfering with others, yet you can still selectively share information with your collaborators.</p>
<p><a href="http://www.snipe.net/wp-content/uploads/2009/03/config4.png"><img class="aligncenter size-full wp-image-1679" title="config4" src="http://www.snipe.net/wp-content/uploads/2009/03/config4.png" alt="config4" width="550" height="600" /></a></p>
<p><strong>In this scenario, no one ever touches the live files directly, ever. Ever ever.</strong> Everything gets pushed to dev for review, and once it&#8217;s approved, you run the rsync script and rsync is the <em>only</em> utility that ever moves stuff over to live.  It may sound confusing, but <a href="http://www.robsearles.co.uk/2008/12/05/want-to-svn-but-cant-rsync-to-the-rescue/" target="_blank">check out this simple blog post that explains how it can be done</a>.</p>
<p>This can be daunting to set up, since there will be directories on live you may want to skip during the rsync (uploaded images, cache files, etc), but once it&#8217;s set up, it generally works like a charm, and it insures that no one ever screws up the live server, since no one is ever touching the live server.</p>
<p>Creating Branches is incredibly easy &#8211; check out the section on Branches in the free <em><a href="http://svnbook.red-bean.com/en/1.0/ch04s02.html" target="_blank">Version Control with Subversion book</a></em>. They cover this concept and process very well. To give you an idea of what Branches look like, we&#8217;ll use their example structure, with a project named <em>calc</em><em></em>. This is what the original directory structure looks like:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1683" title="svn-struct" src="http://www.snipe.net/wp-content/uploads/2009/03/svn-struct.png" alt="svn-struct" width="258" height="232" /></p>
<p>You can see in this example, the &#8216;branches&#8217; directory is currently empty, since we haven&#8217;t created any branches yet. The three file icons represent the total files in the project, which live in the Trunk.</p>
<p>Once we create a Branch, named &#8216;my calc branch&#8217; (since it&#8217;s a Branch within the &#8216;calc&#8217; project), you can see that a new directory is shown in the &#8216;branches&#8217; directory, and a copy of the files from the Trunk live there:</p>
<p><img class="aligncenter size-full wp-image-1684" title="svn-struct-branches" src="http://www.snipe.net/wp-content/uploads/2009/03/svn-struct-branches.png" alt="svn-struct-branches" width="323" height="340" /></p>
<p>Parts of each Branch can be selectively merged into the Trunk, so each developer can work on their tasks within their own Branch, break (and hopefully fix) as many things as they need to, Committing their work as they go, without affecting the main Trunk until the revisions are merged.</p>
<p><strong>If you didn&#8217;t want to use Branches, you could add a staging server in this process. </strong>At a place I used to work, we had a development version that was actively worked on, a staging server, and a live server. We would Commit changes to the development server, rsync over to the staging server, and the staging server would automagically rsync every 10 minutes to live. Nothing was synced to staging unless we had kicked the tires and done QA on it on the development box, and if we couldn&#8217;t wait the 10 minutes, we could do a manual push to live by running the rsync script directly from the command line.</p>
<p>These are just a few of the possibilities. How are you using Subversion? Leave your configuration in the comments! And keep your eyes out for the next section that deals with the basic Subversion commands you&#8217;ll need to get started and optional gui applications you can use to make your Subversion experience easier.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/getting-started-with-subversion/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/version-control.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Getting Started with Subversion" height="90" width="90" onmouseover="onover('Getting Started with Subversion')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/dropbox-versus-foldershare-for-syncing-files-between-computers/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/box.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Dropbox versus FolderShare for Syncing Files Between Computers" height="90" width="90" onmouseover="onover('Dropbox versus FolderShare for Syncing Files Between Computers')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/02/practical-mod_rewrite/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/02/dave.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Practical Mod_Rewrite for Web Developers" height="90" width="90" onmouseover="onover('Practical Mod_Rewrite for Web Developers')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Getting Started with Subversion</title>
		<link>http://www.snipe.net/2009/03/getting-started-with-subversion/</link>
		<comments>http://www.snipe.net/2009/03/getting-started-with-subversion/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 08:14:09 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1620</guid>
		<description><![CDATA[As a web developer, hopefully you&#8217;re already using subversion, and this tutorial is utterly useless to you. If so, good job, and carry on! If you&#8217;re a web developer (or web designer, or web programmer, or are in any way creating files that display or do something on the internet) and you&#8217;re not using subversion [...]]]></description>
			<content:encoded><![CDATA[<p>As a web developer, hopefully you&#8217;re already using subversion, and this tutorial is utterly useless to you. If so, good job, and carry on! If you&#8217;re a web developer (or web designer, or web programmer, or are in any way creating files that display or do something on the internet) and you&#8217;re not using subversion (or any other version control), this tutorial is for you.<span id="more-1620"></span></p>
<p>Since this is a question that comes up a lot, I&#8217;ve scoured the web for a really basic subversion primer, and although many come close (including the outstanding free online book, <em><a href="http://svnbook.red-bean.com" target="_blank">Version Control with Subversion</a></em>), some people may feel overwhelmed at such an immense amount of information. Truly, I believe the only flaw in the <em>Version Control with Subversion</em> book is that they don&#8217;t include any real life set-up examples when discussing the <a href="http://svnbook.red-bean.com/en/1.1/ch01s04.html" target="_blank">Subversion Architecture</a>.</p>
<p>There are many different ways you can set up your development environment, so I can understand why they would be hesitant to give specific examples, however some people learn best by seeing examples that relate to their lives, so that&#8217;s what I&#8217;m going to attempt to do.</p>
<p>The example set-up we&#8217;ll be looking at is one in which the developer is currently working either locally or remotely, and using FTP/SFTP to move files to the remote development environment webserver. For example, you either:</p>
<ul>
<li>Have a copy of Apache running on your desktop/laptop computer. You store and work on the files on your desktop/laptop, test them locally, and then upload them to your server  -<em> or you</em> -</li>
<li>Make changes to the files locally on your desktop/laptop and test directly in the development space of the webserver (no local webserver) -<em> or you</em> -</li>
<li>Use a text editor that allows you to pull files from FTP directly. You open them from FTP, make your changes, and save to FTP (no local copy stored at all)</li>
</ul>
<p><strong>I should mention that the third option here is absolutely the least recommended, especially since you&#8217;re not using version control.</strong> If your FTP process konks out mid-way through and the file isn&#8217;t saved completely, closing your application could mean losing that file forever. (Yeah, I&#8217;m looking at you, UltraEdit.) Regardless, if you&#8217;re using any of the above scenarios, or something fairly similar, this is aimed at you.</p>
<p>Because the <em>Version Control with Subversion</em> book is so good at explaining so much of this, I&#8217;ll be linking to it liberally, and just filing in the blanks where some people may get a little lost.</p>
<p><strong>Disclaimer: </strong>This article is a <em>very basic</em> overview of subversion. There are many ways you might have your system and repository set up, and I won&#8217;t try to list them all, or even most. I&#8217;m going to use what many web developers would consider a &#8220;real world&#8221; example. You will not walk away from this a subversion guru, or able to deftly administer a subversion server. You will hopefully walk away knowing how to set up a simple repository, connect to it, and begin using svn in your day to day development. If you fuck something up, it is not my fault. Start on a test environment until you get your svn legs and feel pretty comfortable with basic commands.</p>
<p>This article is not a replacement for <em>Version Control with Subversion</em> &#8211; more of a supplement for newbies. <strong>As you begin to delve further into using subversion, that book will become your bible.</strong></p>
<h2>What is Subversion?</h2>
<p>According to the <em>Version Control with Subversion</em> book:</p>
<blockquote><p>Subversion (SVN) is a free/open-source version control system.       That is, Subversion manages files and directories, and the       changes made to them, over time.  This allows you to recover       older versions of your data, or examine the history of how your       data changed.</p>
<p>Subversion can operate across networks, which allows it to       be used by people on different computers.  At some level, the       ability for various people to modify and manage the same set of       data from their respective locations fosters collaboration.       Progress can occur more quickly without a single conduit through       which all modifications must occur.  And because the work is       versioned, you need not fear that quality is the trade-off for       losing that conduit—if some incorrect change is made to       the data, just undo that change. (<a href="http://svnbook.red-bean.com/en/1.4/svn.intro.whatis.html" target="_blank">more</a>)</p></blockquote>
<p>This is a pretty good explanation of what it is, but it can be hard to imagine what that actually looks like or how you&#8217;d use it in practical terms.</p>
<h2>So what can Subversion actually do for <em>you</em>?</h2>
<p><strong>It means you can have multiple developers working on a project without fear of one overwriting the other one&#8217;s work.</strong> Have you ever worked on a project with multiple developers, where everyone is working on the same codebase?</p>
<blockquote><p>&#8220;Hey Bob &#8211; I&#8217;m working on index.php &#8211; don&#8217;t touch it for now. I&#8217;ll let you know when I&#8217;m done, okay?&#8221;</p></blockquote>
<p>or how about</p>
<blockquote><p>&#8220;CRAP! Did you make changes to view.php? You blew out my work! I spent half a day working on that frakking function!&#8221;</p></blockquote>
<p>All of that goes away. Each developer can have their own version of the application or website (called <em>branches</em>), where the changes they make will not impact the other developers, and the changes can then be selectively merged into the main development area, or <em>trunk</em>.</p>
<p><strong>It also means that you have a method by which to track all of the changes you&#8217;ve made to any given file.</strong> Each time you commit changes to the file, subversion assigns that change a unique revision number. This means that if you ever need to roll a file back to a specific revision, you can easily do so with a simple command.</p>
<p><strong>A good example of where you might need to do this is where you&#8217;ve &#8220;fixed&#8221; a bug that broke something else on the site</strong> (and really, who hasn&#8217;t done that?). If you know the now-broken functionality was working before, you can roll back to a previous version of the changed file (or any version before that, if needed) to the point where the functionality wasn&#8217;t broken.</p>
<p><strong>You can also compare revisions side by side, so if you don&#8217;t want to do a full rollback, you can see what changed from one revision to the next </strong>to figure out what you (or they) did to break it so you can undo just that part or find a new solution. Plus, since each developer has their own subversion username, you can see who did what (so you know who to fire/berate/pummel/defenestrate).</p>
<p><strong>In short &#8211; whether you&#8217;re flying solo or working with a team, Subversion can help keep you sane, and bail your ass out when you need it most.</strong></p>
<h2>Sounds awesome, right? Let&#8217;s get started!</h2>
<p>Before we go any further, there are some terms that you&#8217;ll need to understand in order to grok Subversion. Don&#8217;t worry too much if they are hard to remember &#8211; we&#8217;ll be using them a lot, and they&#8217;ll become second nature to you.</p>
<blockquote><p><strong>Repository </strong>- this is the central location where Subversion keeps all of the information about your files, folders, and revisions. The repository can live on the same server as your development environment if your hosting setup has Subversion installed, or it can live somewhere completely separate.</p>
<p>If your hosting company does not have Subversion installed, you can even use a third-party Subversion host like Beanstalk or Unfuddle, whose sole purpose is to store your repository, and only your repository. Your local files are still on your hard drive, and your development files are still on your webserver.</p>
<p><strong>Working Copy </strong>- this is the set of files you work with to make changes to your code, build your application, etc. The working copy usually lives on your hard drive, and would replace the directory you upload from and download to if you were using FTP. Simply put, this is the <em>copy</em> of the files you are meant to be <em>working</em> with. You can have multiple working copies of a site for any single repository, and in fact, you would have multiple versions if you have multiple developers. Each developer would have their own working copy.</p>
<p><strong>Import</strong> &#8211; Importing in Subversion allows you to pull your existing files into a new repository. So, for example, if you have a site that&#8217;s already halfway built before you have the epiphany to use version control, you&#8217;d import your existing stuff into the repository.</p>
<p><strong>Check Out</strong> &#8211; If you already have files in a repository and need to create a new Working Copy, you&#8217;d use Check Out.</p>
<p><strong>Update </strong>- Using the Update command pulls the most recent version from the repository. If you had multiple developers working on the same files, or if you&#8217;re working from multiple computers, you&#8217;d want to make sure you update before you start making any edits to the files. If you fail to update before you make changes, you risk running into a Conflict when you Commit. (see below)</p>
<p><strong>Commit</strong> &#8211; When you&#8217;ve made changes to a file or files in your Working Copy and you&#8217;re ready to push those changes into the repository, you Commit them.</p>
<p><strong>Conflict</strong> &#8211; A Conflict occurs when there are changes on both your local version (Working Copy) of a file and the Repository of that file. For example, Sally makes changes to the file         <tt class="filename">sandwich.txt</tt> in the repository.  Harry has         just changed the file in his working copy and commits it.         Sally doesn&#8217;t update her working copy before committing it and she gets         a conflict (since Harry committed his version <em>after</em> Sally&#8217;s last Update, and Subversion therefore sees Sally&#8217;s version as out of date). More on predicting and resolving conflicts later.</p>
<p><strong>Trunk </strong>- the location within your Working Copy where your main project files live.</p>
<p><strong>Branches</strong> &#8211; individual copies of the project that allow each developer to have their own working version. Changes can be Committed without breaking the Trunk, and are then merged into the Trunk when they are deemed worthy. (More on this in the bonus section of <a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" target="_blank">part two</a>.)</p></blockquote>
<p>The image below gives a very high level view of how Subversion works.</p>
<p><img class="aligncenter size-full wp-image-1653" title="svn" src="http://www.snipe.net/wp-content/uploads/2009/03/svn.png" alt="svn" width="550" height="500" /></p>
<p>The Repository is your gatekeeper. It is the part of Subversion that makes sure files don&#8217;t get over-written with outdated versions, and allows you to work in tandem with other developers without risking stepping on each others toes. Other than through the command line (to execute import, update, commit, and status commands) or through whatever gui application you prefer using, you never access the Repository directly.</p>
<h2>How often to Commit?</h2>
<p>This is largely a matter of preference. Some developers wait until entire classes or functions are added/edited/etc before committing a file. I personally tend to commit more often, since it gives me a more granular way of seeing what broke something else and rolling it back, etc &#8211; but <strong>the only wrong way to Commit is to not Commit at all</strong>. You do not need to commit every time you change every tiny thing, though. For example, if I had to do some copy changes, I wouldn&#8217;t Commit after changing each word. The revisions would be so broken down, it would be hard to find important changes in the sea of revisions.</p>
<p>You (and your team, if you&#8217;re working in a group) will find a Commit frequency that works for you, as you become more comfortable using Subversion, so don&#8217;t sweat it too much in the beginning.</p>
<p>Now that you know the lingo and what it <em>does</em>, you need to decide how you&#8217;re going to set up your subversion workflow. <strong><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/">Check out the second part in this series</a></strong>!</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/03/version-control.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="SVN Working Copies and Repository Locations" height="90" width="90" onmouseover="onover('SVN Working Copies and Repository Locations')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/dropbox-versus-foldershare-for-syncing-files-between-computers/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/box.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Dropbox versus FolderShare for Syncing Files Between Computers" height="90" width="90" onmouseover="onover('Dropbox versus FolderShare for Syncing Files Between Computers')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2009/02/practical-mod_rewrite/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2009/02/dave.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Practical Mod_Rewrite for Web Developers" height="90" width="90" onmouseover="onover('Practical Mod_Rewrite for Web Developers')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/03/getting-started-with-subversion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Questions to Ask Before Starting a Project</title>
		<link>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/</link>
		<comments>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 18:30:40 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1518</guid>
		<description><![CDATA[We&#8217;re all human, and we all make mistakes and overlook important details sometimes &#8211; but the thing I can&#8217;t stand is making the same mistake twice. To prevent making the same mistakes twice, I have an ever-evolving list of questions that I use to create the tech brief for new projects. In the hopes that [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re all human, and we all make mistakes and overlook important details sometimes &#8211; but the thing I can&#8217;t stand is making the same mistake twice. To prevent making the same mistakes twice, I have an ever-evolving list of questions that I use to create the tech brief for new projects.</p>
<p><span id="more-1518"></span>In the hopes that this saves you some of the headaches I&#8217;ve had to suffer through, I&#8217;m making my list available to you. Some of these questions don&#8217;t have yes-or-no answers, and require additional discussion &#8211; but that&#8217;s okay. The point is that they were asked in the first place, and you&#8217;re including them in your plan.</p>
<p>Every time I start a new project, I run through this list of questions with the project managers or client, one by one, until I have all the answers I need &#8211; and after every project, I revisit this list of questions to see if there is anything I should have asked up-front that would have made the project go more smoothly.</p>
<p>Yes, this is long. But better to spend the time asking questions now and save yourself days or weeks worth of work later. Also, there may be whole sections you can skip entirely if they don&#8217;t pertain to your project &#8211; just be sure they really and truly don&#8217;t before you give them the brush-off.</p>
<p><span style="color: #db2c0f;"><strong>I will be out of the country for a week in <a href="http://www.snipe.net/2009/02/getting-to-know-belize/">Belize</a> starting oh-my-god-o&#8217;clock tomorrow morning, so this post is my gift to all of you who are stuck working on projects while I&#8217;m on a beach in Belize sipping Mai Tais. Enjoy!</strong></span></p>
<h2>Basics:</h2>
<p><strong>What is the main purpose of this website? </strong> General overview, specifically addressing goals the website or application hopes to accomplish.  Online sales, brand reinforcement, etc. This answer doesn&#8217;t have to be long, but I find it helpful to include them here so that the tech process always compliments and enhances achieving those goals.</p>
<p><strong>How “big” is this project? </strong>This is a generalized question and doesn&#8217;t require specifics most of the time &#8211; is it a 4 page site, a 40 page site, or a 400 page site. This helps to understand the basic scope. The answers to this question should include:</p>
<ol>
<li>Approximate number of screens/pages in the website/application</li>
<li>What are the basic functions of the site? i.e.Registration, Game, Ecommerce, Search, catalog, photo upload, discussion boards, voting, etc</li>
</ol>
<p><strong>What data will be stored/accessed locally?</strong> Will the website/application require a database? You don&#8217;t need to make a concrete decision about what kind of database at this stage &#8211; just knowing there needs to be one is enough.</p>
<p><strong>How will the site be updated?</strong></p>
<ol>
<li>Will it require a CMS?</li>
<li>What content is dynamic vs static?</li>
<li>How frequently is the data updated (hourly, daily, weekly, monthly, periodically)?</li>
<li>Where will the data come from? (client or administration back-end of any kind)</li>
<li>Who is responsible for updating the data?</li>
</ol>
<p><strong>What are the reporting needs?</strong></p>
<ol>
<li>Basic site traffic?</li>
<li>Will it require content‐specific reporting? (i.e.  how many new users signed up between specific dates, etc.)</li>
</ol>
<p><strong>Will there be a mobile/WAP component?</strong> The answer to this question is usually &#8220;no&#8221; for the projects I work on, but it&#8217;s important to know in advance. Phone browsers these days are so similar to desktop web browsers that creating a WAP version of a site is far less trouble than it used to be, when you had to take black-and-white screens into consideration, etc.</p>
<p><strong>What operating systems, browsers and browser versions are we targeting? </strong>Do we care about IE6 or other older browsers (pleasesaynopleasesaynopleasesayno)?</p>
<p><strong>Are there additional considerations such as printer‐friendly versions, BOBBY/ADA‐compliance, age verification or other that we need to be aware of?</strong> Make sure you&#8217;re familiar with the <a href="http://www.coppa.org/comply.htm" target="_blank">COPPA-compliance</a> guidelines before you create a site or application that asks for user information and doesn&#8217;t screen for the user&#8217;s age.</p>
<h2>Domain Name &amp; Hosting:</h2>
<p>Where will this application/website be developed? If it will be developed on a different machine than its final hosting situation, we must provide time for file transfers, additional QA once the site is moved, etc.</p>
<p><strong>Where will this application/website be hosted?</strong> If we are hosting, will it require a dedicated host, or virtual hosting environment?</p>
<p><strong>If the client is hosting, have we confirmed that their server supports the technology we intend to use? </strong>This is a key point, but one that is often overlooked. If you&#8217;re expecting PHP on a Linux server and the client has an IIS box without PHP or MySQL, you need to know that up-front, so you can decide how to handle it. Maybe the client installs PHP and MySQL, or maybe you do the application in ASP &#8211; either way, the answer here has a huge impact on how you proceed, before even a line of code has been created, so you need to know that right away.</p>
<p><strong>Also, if possible, try to obtain access to the hosting server as soon as possible, so you can run some basic configuration tests.</strong> One follower on Twitter remarked that the client confirmed that they had PHP and MySQL (on IIS), but the environment was not set up to allow PHP to talk to MySQL. Not something that&#8217;s impossible to fix, but if you&#8217;re pushing it close on your deadline, you want to know that right away so you can have the hosting company make whatever changes you need with plenty of time to spare. A simple phpinfo() would have spit out everything you needed to know (not to rub anything in, <a href="http://twitter.com/derekobrien">@derekobrien</a>!). To be fair, I might have just assumed the same way he did, so it&#8217;s important to remind ourselves to check <em>everything</em> up front.</p>
<p>I would imagine <em>that</em> hosting blunder (and that was a blunder &#8211; who sets up PHP and MySQL but forgets to allow them to talk to each other?) is hopefully uncommon, but if you&#8217;re using libraries or modules like PEAR, cURL, imagemagik, the GD library, and so on, you&#8217;d best confirm that everything is all set up before you move forward.</p>
<p>In @derekobrien&#8217;s case, they weren&#8217;t granted server access until last minute, so he was caught off-guard by this. One way to protect yourself against issues like this is to <strong>set clear milestones in the tech brief or feature scope</strong> that you create based on these questions (which the client signs), <strong>with the caveat that if the client doesn&#8217;t provide server access by xyz date, the launch date can and will be pushed back, and additional budget may be required</strong> to get things up to snuff.</p>
<p>@derekobrien also included a clause in the fine print that says &#8220;<span class="status-body"><span class="entry-content">If your server admin is a fool we reserve right to point and laugh at you.&#8221; I generally consider that implied, but it&#8217;s just as good in writing <img src='http://www.snipe.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
</span></span></p>
<p><strong>Will it require its own domain name?</strong></p>
<ol>
<li>If yes, will the client provide, or will we?</li>
<li>If yes, we must allow time for propagation</li>
<li>If no, at what url will this live?  (sub‐domain of noise, sub‐domain of primary client domain, etc)</li>
<li>If sub‐domain of client, we must provide time to work with the client’s IT dept to configure DNS settings</li>
</ol>
<p><strong>Will we need to manage any email accounts for the project?</strong> If so, what are the account names, and are they pop3, IMAP or forwarding accounts? Who will be checking them?</p>
<p><strong>Will this project be migrated to the final hosting location from an existing location?</strong> If so, a migration plan (including e‐mail address, DNS, content, database, etc migration should be created.)</p>
<p><strong>Is this project ongoing, or for a limited time?</strong> If for a limited time:</p>
<ol>
<li>What ongoing service or support will be required? Webmaster support email? Unsubscribe administration?</li>
<li>What is the plan for the domain name and/or website once the project is over? Do we keep hosting the project? Do we let the domain name expire, or simply redirect it to the main client site?</li>
</ol>
<p><strong>If the project is hosted on a server we are managing, server setup should include:</strong></p>
<ol>
<li>Realistic bandwidth estimate. We should confirm with the hosting company we select that if we surpass anticipated bandwidth, there will be no interruption in services. (Extra charges will apply, but service should NOT be suspended for bandwidth issues.)</li>
<li>Maximum throughput configuration available. There is generally an insignificant additional monthly charge for this.</li>
<li>If the project relies heavily on mySQL, we should consider making adjustments to the my.conf file to tune the database configuration for optimal settings.  (I.e. if the database queries are largely SELECTs, optimize for SELECTS, etc.)</li>
<li>Fine‐tune the apache httpd.conf file to allow for maximum concurrent connections</li>
</ol>
<p><strong>Backup and Restore</strong> &#8211; if we are hosting the project on a server we manage, dedicated or virtual, some level of backup must be implemented for every account.Backup should include files, user data, and applicable databases &#8211; and a restoration plan should be created, should catastrophic system failure occur.  The backup process MUST be tested during non-emergency circumstances. An untested backup is no better than no backup at all.</p>
<h2>Flash/Video:</h2>
<p><strong>Will there be substantial flash or video aspects to this project? </strong> If yes, we should consider hosting arrangements and ensure we have the bandwidth available and ensure the throughput is set up to handle maximum traffic.</p>
<p><strong>If the primary site or application content is Flash‐based, we must budget time to create an SEO‐optimized version of the page in plain text.</strong> Copy will need to be obtained from the client, and MUST accurately reflect the true content of the Flash. Attempts to keyword bomb or deceive search engines will result in being blocked from the search engine altogether.</p>
<h2>Email:</h2>
<p>Will the application or website be communicating with users via email or text messages? If so, we may wish to consider outsourcing email/text messaging for ease of management and to circumvent potential SPAM blacklisting issues. This decision needs to be made on a case‐by‐case basis.</p>
<h2>Integration:</h2>
<p><strong>Will the application or website be required to interface (push or pull) with a third party system or service?</strong> If yes, documentation on the integration should be obtained at the beginning of the development planning so any potential obstacles can be addressed.</p>
<h2>User and Content Filtering:</h2>
<p>In projects where users will be contributing or creating content using the tools we develop, is there a need to build in support for:</p>
<ol>
<li>Banning or blocking specific users by username or IP address?</li>
<li>Moderating content before it is displayed publicly or at least the ability for and administrator to delete to unapproved content to remove it.</li>
</ol>
<p><strong>If yes, by what method will offensive material be flagged as offensive? </strong>Does the application require a “report this content” function, and if so, what needs to happen when content is flagged? Who is notified, and what actions do they take? Should the system automatically unapprove content that is flagged many times?</p>
<p><strong>Scrubbing or filtering bad words. </strong>If yes, what action should be taken if an offensive word is found? (i.e. is the offensive word replaced with ****, is it rejected by the system, etc.)</p>
<h2>Pre‐Existing &amp; New Content:</h2>
<p><strong>Does this project require us to import existing client data or content into the application?</strong> If so, in what format will the client be providing this data? (Excel, csv, Word, etc.) Adequate time must be allowed to scrub the data and create custom import scripts, and then to QA the imported data.</p>
<p><strong>If content being provided runs on a timeline</strong> (such a daily quiz, where a new question is presented every day), do we need to set up an alert system that notifies an administrator if content is about to or has already run out?</p>
<p><strong>Will there be ongoing new content that would be appropriate for use in an RSS feed? </strong>(Events, articles, blog content, etc.)</p>
<h2>User Support:</h2>
<p><strong>What options does the user have if they have experiencing a problem with the application or website?</strong> Is there a Help/Tech FAQ page, a contact page, or some other way that they can reach out to us for assistance? What email address should be used for replies?</p>
<p>If we are going to be sending the user emails or text messages, we should outline the nature and frequency of this communication very clearly on a page available to the user.</p>
<p>A privacy policy should be built into the site or application whenever we are collecting any information from the user.</p>
<p><strong>How does the user opt out? </strong>We should make it very easy for a user to globally opt out of our communications. Where applicable, on the opt‐out form, we should ask the user why they chose to opt out so we can better tailor future communications. Any email or text communication should require a double‐opt‐in confirmation.</p>
<h2>Statistics &amp; Reporting:</h2>
<p><strong>What aggregate statistical reporting needs to be done on this website/application?</strong> (Omniture, Google Analytics, Refresh Analytics for FB apps)</p>
<p>Do we plan on implementing click heatmap technology and/or multiple page versions for conversion rate evaluations?</p>
<h2>Marketing and Promotion:</h2>
<ol>
<li>What media is driving traffic to this site? Online/Offline?</li>
<li>What is the schedule for that media?</li>
<li>What is the total exposure?</li>
<li>Are there any specific activities that would drive spikes in traffic?  Superbowl Ad, etc.</li>
</ol>
<div class="wp-caption alignright" style="width: 56px"><a href="http://www.snipe.net/wp-content/uploads/2009/02/tech_questionnaire.pdf"><img src="http://www.snipe.net/wp-includes/images/crystal/document.png" alt="Download the PDF" width="46" height="60" /></a><p class="wp-caption-text">PDF</p></div>
<p>So, that&#8217;s my list. After all of the questions are answered (which usually doesn&#8217;t happen all at once &#8211; it very often requires a bit of back and forth with the client and project managers), I create a tech brief or feature scope document based on the answers I from this questionnaire.</p>
<p>If the client doesn&#8217;t know the answers to some of the questions (&#8220;are you running linux or Microsoft?&#8221;), I do my best to find out who does. If the client can&#8217;t decide on something &#8220;do you need a content management system?&#8221;), I advise my project managers that we have to be given authority to make that decision for them. NO development will be done until the tech brief is done. Period.</p>
<p>I then get the client to SIGN the scope/brief so that they agree, in writing, to everything we&#8217;ve decided &#8211; and more importantly, what I expect from them, <em>when</em> I expect it, and what <em>they</em> can expect if I don&#8217;t get it on time &#8211; that way when they don&#8217;t deliver server access or copy/creative assets on time, there are no surprises when I tell them that we are not going to make their deadline.</p>
<p><strong>The tech brief is written to protect both parties, the client and the service provider. </strong>When done properly, it helps manage client expectations, and protects you from being expected to deliver something that was not in the scope. Everyone knows what happens next, how much it will cost, and what the final product is supposed to do.</p>
<p>I&#8217;ll be updating this as new screw-ups happen and we (hopefully) continue to learn from them.</p>
<p>Leave your own in the comments, and feel free to download the (slightly longer) PDF version if it will help you do battle with middle management that doesn&#8217;t understand why you have to take so much time to plan your projects. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/gui-planning-made-easy-with-the-pencil-project/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/selected-home.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="GUI Planning Made Easy with the Pencil Project" height="90" width="90" onmouseover="onover('GUI Planning Made Easy with the Pencil Project')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/02/wireframes/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/02/iplotz.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Sexy, Cheap and Easy: Not Your Mom, Your Wireframes" height="90" width="90" onmouseover="onover('Sexy, Cheap and Easy: Not Your Mom, Your Wireframes')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Practical Mod_Rewrite for Web Developers</title>
		<link>http://www.snipe.net/2009/02/practical-mod_rewrite/</link>
		<comments>http://www.snipe.net/2009/02/practical-mod_rewrite/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 23:44:53 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1481</guid>
		<description><![CDATA[On *nix-based servers, mod_rewrite can be a powerful tool in any web monkey&#8217;s arsenal, however it still voodoo to many, while others may not even be aware that it can help them at all. What is Mod_Rewrite? Simply put, mod_rewrite is an Apache module that let&#8217;s you rewrite urls based on rules you define. That&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>On *nix-based servers, mod_rewrite can be a powerful tool in any web monkey&#8217;s arsenal, however it still voodoo to many, while others may not even be aware that it can help them at all.</p>
<h2><span id="more-1481"></span>What is Mod_Rewrite?</h2>
<p><strong>Simply put, mod_rewrite is an Apache module that let&#8217;s you rewrite urls based on rules you define.</strong> That&#8217;s it. Seriously.</p>
<p>Regardless of how confusing some of the rules you may have come across appear to be, all they are doing is taking one url and rewriting as a different url. This rewriting happens at the server level, before the user&#8217;s browser sees anything, so the end result is seamless to them.</p>
<p><strong>When you hear about &#8220;search engine friendly&#8221; urls, you&#8217;re most often seeing mod_rewrite in action.</strong> Mod_rewrite is the Apache module that let&#8217;s you turn a url like:</p>
<p><a class="linkification-ext" title="Linkification: http://www.example.com/shop.php?category=Books&amp;Title=Foo" href="http://www.example.com/shop.php?category=Books&amp;Title=Foo">http://www.example.com/shop.php?category=Books&amp;Title=Foo</a></p>
<p>into:</p>
<p><a class="linkification-ext" title="Linkification: http://www.example.com/shop/books/foo.html" href="http://www.example.com/shop/books/foo.html">http://www.example.com/shop/books/foo.html</a></p>
<p><strong>Some other common uses for mod_rewrite:</strong></p>
<ul>
<li>Directing all traffic from multiple domain names to one domain</li>
<li>Directing all traffic from www and non-www to one location</li>
<li>Blocking traffic from specific websites</li>
<li>Blocking spammy searchbots and offline browsers from spidering your site and eating your bandwidth</li>
<li>Mask file extensions</li>
<li>Preventing image hotlinking (other web pages linking to images on your server)</li>
</ul>
<p>Apache&#8217;s mod_rewrite can be intimidating if you start where you&#8217;re supposed to start &#8211; <a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html" target="_blank">the Apache documentation</a>, however there are some very useful, common &#8211; and <em>simple</em> rewrite rules that you may wish to consider implementing into your site development plan, if you&#8217;re not doing so already.</p>
<p><strong>Note: If you&#8217;re using Microsoft IIS, you have a few options</strong>, but I don&#8217;t use IIS, so I&#8217;m afraid I won&#8217;t be of much help to you beyond telling you where to look. <a href="http://www.isapirewrite.com/" target="_blank">ISAPI ReWrite</a> seems to be very popular, and there is a free &#8220;lite&#8221; version available.</p>
<h2>Getting Started</h2>
<p>Your mod_rewrite rules typically live in an .htaccess file in your web root. You can only have one .htaccess per directory, but you can have individual .htaccess files in sub-directories under the web root. I generally do not recommend doing this. If mod_rewrite rules from one .htaccess conflict with the rules from the .htaccess in a sub-directory, it can be a real pain in the ass to troubleshoot. Try to avoid it.</p>
<p>When you&#8217;re adding mod_rewrite rules to your .htaccess file, you&#8217;ll want to start by using a conditional that checks to see if mod_rewrite is installed on your server. This can prevent getting a 500 Internal Server Error if you don&#8217;t.</p>
<p>[source='c#']<ifmodule mod_rewrite.c><br />
# Start your (rewrite) engines&#8230;<br />
RewriteEngine On</p>
<p># rules and conditions go here&#8230;<br />
</ifmodule>[/source]</p>
<h2>Directing Multiple Domain Names to a Single Domain Url</h2>
<p>If you have multiple domain names pointing to the same site, mod_rewrite can also help you direct all traffic to a single domain url, to improve your search engine rankings. Search engines don&#8217;t take too kindly to the same content living at multiple urls &#8211; they usually think its an attempt to spam the search engine &#8211; and you can actually be penalized for it. To redirect all traffic to one specific domain name,</p>
<p>[source='css']RewriteCond %{HTTP_HOST} !^www\.snipe\.net$ [NC]<br />
RewriteRule ^(.*)$ http://www.snipe.net/$1 [R=301][/source]</p>
<p>This basically says &#8220;if the domain requested (the HTTP_HOST) does not match <em><a class="linkification-ext" title="Linkification: http://www.snipe.net" href="http://www.snipe.net">www.snipe.net</a></em> then rewrite the url as <em><a class="linkification-ext" title="Linkification: http://www.snipe.net" href="http://www.snipe.net">www.snipe.net</a></em>&#8220;. (Note the escaping slashes after the www and before the .net in the condition.)  The R=301 specifies that the redirect should be a 301 redirect, meaning that the address has moved permanently and search engines should use the new url instead of the old one.</p>
<h2>To www or not to www</h2>
<p>Even if you have only one domain name, if you&#8217;re not redirecting traffic from the &#8220;www&#8221; version to the &#8220;non-www&#8221; version (or vice versa), you may encounter this problem. Whether or not you choose to use the www in your url is largely a branding decision more than anything else (i.e. it doesn&#8217;t really matter in most cases) &#8211; but you should pick one and stick with it.</p>
<p><strong>Require (force) the www</strong></p>
<p>[source='css']RewriteCond %{HTTP_HOST} !^www\.snipe\.net$ [NC]<br />
RewriteRule ^(.*)$ http://www.snipe.net/$1 [R=301,L][/source]</p>
<p><strong>Remove the www</strong></p>
<p>[source='css']RewriteCond %{HTTP_HOST} !^snipe\.net$ [NC]<br />
RewriteRule ^(.*)$ http://snipe.net/$1 [R=301,L][/source]</p>
<h2>Deny traffic by referrer</h2>
<p>There may be a few reasons why you want to block traffic by referrer. Maybe you&#8217;re getting a lot of bandwidth-sucking hits from a spammy website &#8211; or maybe someone is linking to you that you feel does not represent you very well, and you want to pull the plug on traffic from coming their site.</p>
<p>[source='css']RewriteCond %{HTTP_REFERER} onebadsite\.com [NC,OR]<br />
RewriteCond %{HTTP_REFERER} anotherbadsite\.com [NC]<br />
RewriteRule .* &#8211; [F,L][/source]</p>
<p>In this snippet, the rule is saying &#8220;If the referring url is onebadsite.com OR anotherbadsite.com, redirect the user to an HTTP Forbidden error.&#8221; The NC specifies that the condition is <em>not</em> case-sensitive, and the OR flag is&#8230; well&#8230; an &#8220;or&#8221;. OR is used with multiple RewriteCond directives to combine them with OR instead of the implicit AND.</p>
<p><img class="aligncenter size-large wp-image-1501" title="snipe-sucks" src="http://www.snipe.net/wp-content/uploads/2009/02/snipe-sucks-560x509.png" alt="snipe-sucks" width="560" height="509" /></p>
<p><strong>Keep in mind &#8211; this method of blocking traffic is hardly foolproof, at least in the latter of the two scenarios above. </strong>If the webmaster of onebadsite.com is linking to you in a way or context you do not want (and you&#8217;ve asked them to remove the link), the above method will cause a user on onebadsite.com&#8217;s website who has clicked on the link to you from onebadsite.com to hit a Forbidden error. If that user has half a brain, they may very well just google your site name or try to access it later from a bookmark &#8211; but it&#8217;s a simple measure you can take to keep the idjits out.</p>
<h2>Blocking Bad Bots and Spiders</h2>
<p>While there is some potential debate as to what is a &#8220;bad&#8221; bot or spider, the consensus seems to that a bot is bad if they do more harm than good, such as e-mail harvesters, site rippers that download entire websites for offline browsing, etc. Even if bandwidth isn&#8217;t so much an issue, I like to block these just on principle.</p>
<p>Please note &#8211; this list is not mine &#8211; it was <a href="http://www.javascriptkit.com/howto/htaccess13.shtml" target="_blank">directly nicked from a list on JavascriptKit</a>.</p>
<p>[source='css']RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]<br />
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]<br />
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Zeus<br />
RewriteRule ^.* &#8211; [F,L][/source]</p>
<p><strong>Once again, this method isn&#8217;t foolproof. </strong>The HTTP_USER_AGENT is quite easily spoofed, and some site ripping applications even allow you to specify what user agent you want to appear as. But if your site is large, implementing this list may make a significant impact on your monthly bandwidth bill.</p>
<h2>Mask File Extensions</h2>
<p>If for some reason you want to hide the fact that you&#8217;re using PHP (or Perl, or whatever), all it takes is a simple line in your .htaccess to have your .php files look like .html files:</p>
<p>[source='css']RewriteRule ^(.*)\.html$ $1.php [R=301,L] [/source]</p>
<p>You could even completely obfuscate it if you wanted to, for example serving files that end in .snipe that are really .php files:</p>
<p>[source='css']RewriteRule ^(.*)\.snipe$ $1.php [R=301,L] [/source]</p>
<p>In these examples, redirects all files that end in .html (or .snipe) to be served from <em>filename.php</em> so it looks like all your pages are .html (or .snipe) but really they are .php. Notice again that we&#8217;re using a 301 redirect.</p>
<h2>Prevent Image/File Hotlinking</h2>
<p>This snippets prevents people from hotlinking to your files &#8211; that is, linking directly to files hosted on your server from their website, thus sucking your bandwidth. It should be noted that in my experience, this rewrite rule seems somewhat spotty, and doesn&#8217;t always work, so be sure to test thoroughly.</p>
<p>[source='css']RewriteCond %{HTTP_REFERER} !^$<br />
RewriteCond %{HTTP_REFERER} !^http://(www\.)?snipe.net/.*$ [NC]<br />
RewriteRule \.(gif|jpg|swf|flv|png)$ /images/dont_steal_bandwidth_jackass.png [R=302,L] [/source]</p>
<p>This rule basically says &#8220;If the request&#8217;s referrer is not blank (meaning the file was accessed directly in a browser) AND is not snipe.net (case insensitive), rewrite any files that end in .gif, .jpg, .swf, .flv or .png to display the file /images/dont_steal_bandwidth_jackass.png.</p>
<p>I have a friend who was trolling through their server logs (as he tended to do) and he realized that someone was using an image from his server, a Debian logo, if I recall correctly &#8211; as their MySpace background image. My friend spicyjack, being of the snarky persuasion, set up a leech=prevention mod_rewrite that directed all requests for that image that were not coming FROM his server to an image that was&#8230; shall we say&#8230;. not something you&#8217;d want as the background image of your MySpace page. (Google &#8220;hotcurry.jpg&#8221; if you&#8217;re really curious. It&#8217;s NSFW. Or anything, or that matter.)</p>
<h2>Search Engine Friendly URLS &#8211; Make Dynamic Pages appear Static</h2>
<p>To turn site.com/index.php?category=foo&amp;subcat=bar into site.com/category-foo/bar.html, just use:</p>
<p>[source='css']RewriteRule ^category-([0-9]+)/([0-9A-Za-z]+).html index.php?category=$1&amp;subcat=$2 [/source]</p>
<p>The category number and the subcategory name are variables, these are now represented by $1 and $2. The round brackets and the stuff inside them will be replaced by the variables. The things inside the round brackets are the regex rules for what the variable can contain. Example [0-9] means that it can contain any number from 0 to 9 and the + sign means that the number can be repeated 1 or more times.</p>
<h2>The [L]ast Word</h2>
<p>The [L] flag tells mod-rewrite that no more rules should be processed after that. Also remember that the order these rules are in DOES matter, so you&#8217;ll want to consider their intended behavior carefully when you&#8217;re planning your .htaccess. If at all possible, have your Apache error logs accessible while experimenting. when mod_rewrite goes wrong, it very often gives you a generic (and infuriating) &#8220;500 Internal Server Error&#8221; instead of anything actually useful to you &#8211; the Apache error logs may help shed some light on things.</p>
<p>Also be sure to test thoroughly whenever using mod_rewrite, since you can seriously break stuff if you&#8217;re not careful.</p>
<h2>More Resources</h2>
<p>Can&#8217;t get enough mod_rewrite? Check out these links for additional information and tips.</p>
<ul>
<li><a href="http://www.htaccesselite.com/mod-rewrite-flags-vt101.html" target="_blank">Mod_Rewrite flags</a></li>
<li><a href="http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html" target="_blank">Mod_rewrite Tips &amp; Tricks</a></li>
<li><a href="http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html" target="_blank">Mod_Rewrite Cheat Sheet</a></li>
</ul>
<p>And if you&#8217;ve got a handy mod_rewrite rule you can&#8217;t live without, let us know in the comments.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2011/01/facebook-https-opt-in/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2011/01/Facebook-Needle.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Facebook Introduces HTTPS Opt-In for Users, Impacts App Developers" height="90" width="90" onmouseover="onover('Facebook Introduces HTTPS Opt-In for Users, Impacts App Developers')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/06/upgrading-to-wordpress-3/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/06/wordpress-mug.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Upgrading to WordPress 3.0 and Adding Multi-Site" height="90" width="90" onmouseover="onover('Upgrading to WordPress 3.0 and Adding Multi-Site')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/02/practical-mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Easier Cross-Browser Testing</title>
		<link>http://www.snipe.net/2009/01/easier-cross-browser-testing/</link>
		<comments>http://www.snipe.net/2009/01/easier-cross-browser-testing/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 19:31:40 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[compatibility]]></category>
		<category><![CDATA[cross-browser]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1015</guid>
		<description><![CDATA[Cross-browser testing is one of those aspects of web development that no one really likes, but everyone has to do. It&#8217;s gotten better, don&#8217;t get me wrong. As browsers have slowly crawled (some more slowly than others *cough*IE*cough*) towards achieving standards compliance, the differences between browsers has become far less drastic than it used to [...]]]></description>
			<content:encoded><![CDATA[<p>Cross-browser testing is one of those aspects of web development that no one really likes, but everyone has to do. It&#8217;s gotten better, don&#8217;t get me wrong. As browsers have slowly crawled (some more slowly than others *cough*IE*cough*) towards achieving standards compliance, the differences between browsers has become far less drastic than it used to be.<span id="more-1015"></span></p>
<p>Back in the day, it wasn&#8217;t uncommon for a website to look and work fine in one browser, and be utterly, horrifically broken in another. These days, if you&#8217;re coding to standards, your woes are more likely to be weird (but subtle) padding issues, some javascript issues, etc &#8211; not the complete and utter train wreck you&#8217;d have seen 10 years ago.</p>
<h2>Planning and frequent testing will save your hide</h2>
<p>Just because things are better now than they&#8217;ve ever been doesn&#8217;t mean we can get lazy. Cross-browser testing should be done often, and with gusto. One common pitfall with cross-browser testing is the temptation to leave testing until the very end, once the project has been completed. Problem is, if something is broken, you won&#8217;t necessarily have time to fix it, and depending on what&#8217;s wrong, the fix might take longer than you&#8217;ve allowed for.</p>
<p>You can avoid finding yourself in that kind of situation by testing more frequently throughout your development process. Whenever a large chunk of code or markup gets written, take the 5 minutes to check it on multiple browsers. By addressing these issues during these mini-milestones, you can take care of problems as they arise and avoid finding yourself in a bad situation the day before launch.</p>
<p>If you&#8217;re a small design shop, or an independent developer, you may not have access to the complete array of potential browser and OS combinations. I personally have a Mac laptop running Leopard, a Mac desktop running Tiger, four Windows XP machines, and a RedHat box set up, but even that doesn&#8217;t cover every possible combination &#8211; and you may not have as many machines at your disposal.</p>
<p>Fortunately, you&#8217;ve got some options, some better than others. The three primary ways you can test for cross-browser compatibility, short of actually running all of the browser and OS combinations on physical machines, are <strong>screenshot generators</strong>, <strong>browser emulators</strong> and <strong>virtual terminals</strong>. Each serves a slightly different purpose, and you may end up deciding that a combination of the three is most appropriate for your needs.</p>
<h2>Screenshot Generators</h2>
<p>Services like <strong><a href="http://browsershots.org/" target="_blank">BrowserShots.Org</a></strong> and <strong><a href="http://litmusapp.com/" target="_blank">Litmus</a></strong> allow you to enter a url, click submit, and use their resources to generate multiple screenshots based on your selection of browser, setting and OS choices. Both have free and paid versions. (For the record, Snipe.Net looks like dog balls in IE4 for Windows&#8230; Hah!)</p>
<p><strong>The free version of BrowserShots allows you to run a test on the full spectrum of browser/resolution/OS choices available, but your request will be lower priority than paying customers</strong>, so it can take a little while to get your results. Upgrading to a premium processing membership of $30 for one month bumps your job up higher in the queue for faster screenshots. Personally, I don&#8217;t think the improvement in speed is worth $30 a month, but you may disagree.</p>
<p><strong>Litmus allows you to sign up for a free account which allows you 50 tests per month, but on only two browsers, both only on Windows, rendering the free version basically useless.</strong> If you don&#8217;t have access to IE7 and Firefox 2 somewhere, you probably shouldn&#8217;t be in this business. So the only useful way to use Litmus is through their paid version. They offer a few different packages, each with increasing features, starting from a day pass at $24, moving up to a monthly subscription of $49 a month for individuals and $199 a month for &#8220;team&#8221; membership. Once you get into the paid accounts, tests are done on 23 browsers, including Mac and Linux browsers. (A side note, I love how they say you get access to &#8220;all 23 browsers&#8221;, as if 23 is the final number.)</p>
<p>While their price structure is a bit steep and their browser/OS selection isn&#8217;t complete (no Firefox for Mac? Really?), <strong>it&#8217;s worth noting that Litmus <a href="http://litmusapp.com/email-testing" target="_blank">offers HTML email testing across muiltiple email clients</a> in their paid packages &#8211; something Browsershots doesn&#8217;t do</strong>. If you do a lot of email marketing for clients, this service may be worth it for that aspect alone.</p>
<p>Litmus also has a few value added features that may make it worth shelling out the money, depending on your needs.</p>
<ul>
<li>Nicer design &#8211; more suitable to showing to clients directly if you don&#8217;t feel like downloading dozens of screenshots for each iteration of a site.</li>
<li>Ability to test password-protected areas of a site.</li>
<li><strong></strong>Automatically checks for validation errors in both HTML and CSS, with a link to the W3C validator pages &#8211; so if something doesn&#8217;t look right in the screenshots you get, you&#8217;ve got a shortcut to start figuring out why.</li>
<li>Version support, so each time you do a test, it creates a separate instance of that test as a new version for the site. If you test a page 6 times, you&#8217;ll see your current test and 5 historical versions in your control panel.</li>
</ul>
<p>Me personally? I use the free BrowserShots service. They have more browser/OS combinations available and the wait time doesn&#8217;t bother me. I might use a paid Litmus account to test emails at some point though, as testing that manually can be a real pain in the ass.</p>
<h2>Browser Emulators</h2>
<p>The good news is, browser emulators are usually free. The bad news is that they are not available for all scenarios, and Macs seem to be at a real disadvantage here. Of course, Mac users can always use Parallels, WINE, or some other virtual OS that will allow you run Windows on your Mac, but that does require extra work.</p>
<p>If you usually develop on Firefox, the <strong><a href="https://addons.mozilla.org/en-US/firefox/addon/35" target="_blank">Firefox addon IE View</a></strong> can be very helpful. It simple provides a shortcut to an IE-engine rendered version of the page right in Firefox, that opens in a FF tab. Back when I worked on Windows, I loved this extension, but alas, it is for Windows only.</p>
<p>Also for Windows users, downloadable application <strong><a href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">DebugBar puts multiple versions of IE at your fingertips</a></strong>, including IE8 beta 2, IE7 IE 6 and IE5.5 on Vista and XP, as well as the installed IE. This one is handy because you can compare displays side by side, within one program.  I have gotten this to successfully install on my Parallels version of Windows on my Mac.</p>
<p>And the third one that comes to mind is <strong><a href="http://tredosoft.com/Multiple_IE" target="_blank">Multiple IEs</a></strong>, a small downloadable application (again, Windows only, sorry) that lets you create separate instances of IE in many versions, going back as far as IE3. I managed to get this installed on Parallels, but it crashed every time I tried to use it. I had been using it for years on my native Windows computers though. I cannot speak to whether it works on Vista or Windows 7.</p>
<h2>Virtual Terminals</h2>
<p>Virtual terminals for cross-browser testing is a relatively new option for web developers, and brings something to the table that the other options cannot. Rather than simply seeing a picture of your site&#8217;s layout with screenshots, and rather than just being limited to IE as with the emulators, <strong>virtual terminals actually let you physically login to a machine running the OS and browser you&#8217;re looking to test</strong>. They are created using disk images, so when you logout, the image is destroyed and recreated for the next user.</p>
<p>What makes virtual terminals so unique and advantageous is that you are using the actual OS and browser you&#8217;re testing on. You can click around, test out your javascripts, login to protected areas and test functionality such as cookie behavior, and so on. What you end up with is a much more sophisticated test environment that results in a more genuine reflection of what the user will see and experience.</p>
<p>The funny thing is, with the pricey packages of the screenshot services, you&#8217;d probably expect to pay dearly for this much more advanced option, but in reality, they&#8217;re about the same as the screenshot services, with far more bang for your buck.</p>
<p><strong><a href="http://crossbrowsertesting.com/">CrossBrowserTesting.Com</a> </strong>even offers free access, and although the sessions are limited to 5 minutes and based on priority (paying customers come first if there&#8217;s a line), the free sessions are not limited in any other way. Their top-level paid package is still quite reasonable, at $29.95 for the first month and $19.95 each month after. For that top-level package, you get unlimited sessions (capped at a total of 40 hours of connected time), with a maximum of 30 minutes per session. They have a <a href="http://www.crossbrowsertesting.com/configurations.php" target="_blank">huge list of available OS and browser combinations</a>, and for my money, this is the way to go. <a href="http://crossbrowsertesting.com/pricing.php" target="_blank">Check out their pricing structure here</a>.</p>
<p><strong><a href="http://www.realityboxlabs.com" target="_blank">RealityBoxLabs</a></strong> offers a very similar service with a slightly different pricing structure. Unlike CrossBrowserTesting.Com, they offer a day pass for $5, and then and unlimited membership for $49 a month. They don&#8217;t specify which OS/browsers they offer, but they do mention that Linux will be available soon.</p>
<h2>Which browsers to test?</h2>
<p>The question of which browsers to test for is hotly debated in the web development community, but the realty is, there is no one single right answer. I can&#8217;t give you an answer, but here are some tips on coming up with the answer for your own situations.</p>
<ul>
<li>Consider existing browser/OS stats for the site, but don&#8217;t limit yourself to that if you&#8217;re pushing for a large increase in traffic or reaching new demographics, since your browser/OS stats may change once you succeed.</li>
<li>Consider the browser/OS stats for the media outlets you may be pushing media from (such as Facebook and Facebook ads). If 90% of your traffic is going to come from a media outlet, make sure your site works on their top browsers.</li>
</ul>
<p>My general rule of thumb, unless the stats indicate otherwise, is to develop and test on all of the major browsers, while still maintaining some level of normalcy for IE6 users. Depending on the project (and the client), I may have to work particularly hard to make sure the display on IE6 looks exactly the same as it does on current browsers, but if that&#8217;s not a requirement, I make sure it looks good on IE6. There may be some padding that isn&#8217;t quite right, but only the designer and the client would even notice.</p>
<p>For personal projects, it really depends on the audience. Snipe.Net has a user base of over 50% FireFox users, with the remaining large chunk being IE7 users. I made the decision to sacrifice some minor display points on IE in order to optimize for newer browsers. I am never so cavalier with paying clients.</p>
<p>Developing cross-browser compatible sites is easier than ever, both because of improved adherance to sandards, and because of advancing testing technology. Whether you choose to do it the old fasioned way, hopping from one computer to another hitting &#8220;refresh&#8221;, or whether you use some of these new-fangled, high-tech methods, it is your responsibility to your clients &#8211; and to their users &#8211; to make sure it works.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/10/firefox-addons-xss-testing/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/10/beach-xss.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Firefox Addons for Penetration/XSS Testing" height="90" width="90" onmouseover="onover('Firefox Addons for Penetration/XSS Testing')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2007/02/the-cross-eyed-bear-that-you-gave-to-me/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/348713yegd_w.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="The Cross-Eyed Bear That You Gave to Me" height="90" width="90" onmouseover="onover('The Cross-Eyed Bear That You Gave to Me')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/11/rockmelt/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/11/RockMelt.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="A Few Quick Thoughts on RockMelt" height="90" width="90" onmouseover="onover('A Few Quick Thoughts on RockMelt')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/01/easier-cross-browser-testing/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Multiple IEs</title>
		<link>http://www.snipe.net/2007/01/multiple-ies/</link>
		<comments>http://www.snipe.net/2007/01/multiple-ies/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 20:42:37 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Windows Downloads]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=94</guid>
		<description><![CDATA[This is handy for when you need to test a website out in multiple versions of Internet Explorer. And its free! Windows only, but then again, IE for Mac is out of development, so its less of an issue. Installation is a breeze, and I&#8217;ve set it up on several systems without so much as [...]]]></description>
			<content:encoded><![CDATA[<p>This is handy for when you need to test a website out in multiple versions of Internet Explorer. And its free! Windows only, but then again, IE for Mac is out of development, so its less of an issue. Installation is a breeze, and I&#8217;ve set it up on several systems without so much as a single glitch. No promises for Vista tho &#8211; I refuse to install it, so I can&#8217;t vouch for anything running on it.</p>
<p>Get it free at <a href="http://tredosoft.com/Multiple_IE" target="_blank">tredoft.com</a>.</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/sync-your-browsers-across-multiple-computers-with-mozilla-weave/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/weave_splash2.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Sync Your Browsers Across Multiple Computers with Mozilla Weave" height="90" width="90" onmouseover="onover('Sync Your Browsers Across Multiple Computers with Mozilla Weave')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2006/06/checkboxesmultiple-select-boxes-in-php/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/drupal-taxonomy-as-checkboxes.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Checkboxes/Multiple Select Boxes in PHP" height="90" width="90" onmouseover="onover('Checkboxes/Multiple Select Boxes in PHP')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/07/track-your-stolen-laptop-for-free-with-adeona/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/07/adeonalogo.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Track Your Stolen Laptop (for Free) with Adeona" height="90" width="90" onmouseover="onover('Track Your Stolen Laptop (for Free) with Adeona')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2007/01/multiple-ies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox extensions I can&#8217;t live without</title>
		<link>http://www.snipe.net/2007/01/firefox-extensions-i-cant-live-without/</link>
		<comments>http://www.snipe.net/2007/01/firefox-extensions-i-cant-live-without/#comments</comments>
		<pubDate>Mon, 15 Jan 2007 20:00:10 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Geek Life]]></category>
		<category><![CDATA[Life Tools]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=92</guid>
		<description><![CDATA[The full list of Firefox extensions that I consider absolutely mandatory. All of these work with FF 2, and many work with older versions. All but one or two have also been updated to work with FF 3. (List last updated Aug 26, 2008.) General Browsing: URL Fixer Seamlessly fixes the fat-fingered &#8220;.con&#8221; typos in [...]]]></description>
			<content:encoded><![CDATA[<p>The full list of Firefox extensions that I consider absolutely mandatory. All of these work with FF 2, and many work with older versions. All but one or two have also been updated to work with FF 3. (List last updated Aug 26, 2008.)<span id="more-92"></span></p>
<p><span style="font-size: medium;">General Browsing:</span></p>
<p><strong><a href="https://addons.mozilla.org/firefox/2871/">URL Fixer</a></strong><br />
Seamlessly fixes the fat-fingered &#8220;.con&#8221; typos in a domain name. (Other similar extensions only suggest the alternates after the page has failed to load)</p>
<p><strong><a href="https://addons.mozilla.org/firefox/134/">Copy Plain Text</a></strong><br />
Allows you to copy without formatting</p>
<p><strong><a href="https://addons.mozilla.org/firefox/1865/">AdBlock Plus</a></strong><br />
Blocks out inline ads, such as banner ads, Google Adwords, etc. (Note, if you&#8217;re a regular at the IWG site, please consider disabling this plugin while there. The ad revenue actually does help keep it running. Its not a lot, but its enough.)</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3199/">Link Alert</a></strong><br />
Pops up a teenie icon when you mouseover a link, indicating the type of file a hyperlink goes to (.doc, .pdf, etc).  This is particularly handy if you (like me) hate clicking on a link and then waiting 10 for Adobe Acrobat to open.  Obviously, yes, you can look at the status bar and find out where it&#8217;s going &#8211; but this extension makes it much more intuitive.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/403/">URL Link</a></strong><br />
Reconnects broken links that are only broken because web-based email wrapped them, etc.  Also has some other neat features.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/636/">PDF Download</a></strong><br />
Makes FF ask you what you want to do with a PDF file, rather than automatically opening it in a browser window.  I&#8217;m on a lot of law and court websites often, and many of them offer PDFs, so this is a nice one for me.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3818/">Resizable textarea</a></strong><br />
Just what it sounds like &#8211; it lets you make a textarea box bigger for more room to type.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3542/">Aging Tabs</a></strong><br />
Changes the color of the tabs in FF based on how long they have been idle.  This isn&#8217;t a critical one, but its helpful to me, since I switch back and forth from tabs so often. At a glance, I can see which are the most active, so I know which ones to click on.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/2410/">Foxmarks Synchronizer</a></strong><br />
Syncs all of your Firefox bookmarks across multiple computers.  Requires you to sign up for an account at Foxmarks, but the account sign-up is built in to the initial setup, and it literally took less than 30 seconds. As of October 2008, Foxmarks now supports browser password syncing.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3006/">Download Helper</a></strong><br />
Grab images and video from YouTube, MySpace, etc.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/2140/">FavLoc</a></strong><br />
Allows you to set specific favorite folders to save your downloads.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/1853/">Background Image Saver</a></strong><br />
More and more sites are utilizing a transparent gif overlay to prevent their images from being saved via the right+click &#8220;save image as&#8221;. Since Firefox doesn&#8217;t have a &#8220;Save background image as&#8230;&#8221;. this extension gives it back to you.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/500/">Google Adsense Notifier</a></strong><br />
Shows you how much you&#8217;ve earned in the status bar.  I have found a bit of a glitch with this since the last update, where I can no longer view the amount from last payment (it shows the amount for all time instead), but I am hopeful that this will get fixed soon, since I really like this extension.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3755/">Gutil!</a></strong><br />
Just a quick shortcut to Google services (mail, news, etc.)  Simple, but nice.</p>
<p><strong><a href="http://www.ideashower.com/ideas/launched/read-it-later/" target="_blank">Read it Later</a></strong><br />
This is a handy little addon that lets you flag a page to read later. If you&#8217;re like me, you constantly find interesting pages that you want to delve into, but don&#8217;t always have time, the very moment you find them. While you could certainly just set up a Bookmarks folder for stuff you want to get to later, Read it Later adds a spiffy icon in your address bar. One click and its saved for later.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/189" target="_blank">Google Preview</a></strong><br />
Provides a thumbnail screenshot next to the site link and summary in Google search results. I wouldn&#8217;t have thought I needed this when I first heard about it, but its become one of my favorites.</p>
<p><span style="font-size: medium;">Web Development:</span></p>
<p><strong><a href="https://addons.mozilla.org/firefox/1419/">IE Tab</a></strong><br />
This is perhaps more important as a web developer, but there are times when a page won&#8217;t render correctly in FF, so it&#8217;s nice to have an alternate way of viewing it. There is also a trimmed down version of this extension available as <a href="https://addons.mozilla.org/firefox/1429/">IE Lite</a>. Alas, for PC only.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/4111/">Aardvark</a></strong><br />
This one is a must-have for all web developers.  It allows you to quickly and easily view and select distinct elements of a webpage, displaying their characteristics, including id. Great for troubleshooting HTML and CSS.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/60/">Web Developer Toolbar</a></strong><br />
This is THE first extension I go for when setting up a new computer.  Tons of web dev tools, including viewing submitted headers, debugging tools, and so on.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a></strong><br />
This is the SECOND extension I go for when setting up a new computer. If I ever get to meet the people who came up with this, I&#8217;m going to march right up to them and plant a wet one on their face. This extension has saved me so much time and aggravation &#8211; I can&#8217;t imagine being a web developer without it. How did I do it before Firebug? Firebug gives you easy access to CSS styles, HTML attributes, even network calls for external files.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/59/">User Agent Switcher</a></strong><br />
Helps debug any weird encoding issues you might run across.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/590/">ShowIP</a></strong><br />
Shows the IP address of the website host.  Useful if you&#8217;re working with a site that does load-balancing, dev environments, and so on.</p>
<p><strong><a href="http://www.softpedia.com/get/Internet/Internet-Applications-Addons/Mozilla-Extensions/Server-Spy.shtml" target="_blank">Server Spy</a></strong><br />
This addon lets you see what type of server the website you&#8217;re visiting is running, similar to <a href="http://searchdns.netcraft.com/?position=limited" target="_blank">Netcraft&#8217;s &#8220;What that site running&#8221; lookup</a>.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/3929/">Character Identifier</a></strong><br />
This extension adds a context menu item for selected text that provides more information (from the Unicode database) about the characters selected.</p>
<p><strong><a href="https://addons.mozilla.org/firefox/2409/">Server Switcher</a></strong><br />
If you work with a dev and live server environment, such as dev.yoursite.com and <a class="linkification-ext" title="Linkification: http://www.yoursite.com" href="http://www.yoursite.com">www.yoursite.com</a>, this extension allows you to easily switch between the two servers from any page on either server.Â  It would have been nice if you could add one more version, such as staging, but overall its really quite handy.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/5648" target="_blank">Fireshot</a></strong><br />
A very slick, lightweight screenshot addon that allows simple annotations and highlight boxes. Very handy for explaining elements to clients, helping non-techy people understand what and where to click, and so on. There is a free version and a paid version, but I&#8217;ve found that the free version is more than adequate for most use. Only available for Windows&#8230; *sniffle*</p>
<p><strong><a href="http://www.iosart.com/firefox/colorzilla/" target="_blank">Colorzilla</a></strong><br />
Great little addon that gives you the power of a color eyedropper in your browser. Need to grab a color from a website to make additional graphics? No problem. Two clicks later, you&#8217;ve got the RGB or hex color code copied to your clipboard. This addon has saved me a ton of time.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/539" target="_blank"><strong>MeasureIt</strong> </a><br />
Handy little addon that lets you whip out a ruler and measure the size of anything in your browser, in pixels.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/6647" target="_blank">HttpFox</a></strong><br />
Lets you see the headers being sent through the browser &#8211; can be helpful for debugging scripts.</p>
<p><strong><a href="http://www.evolus.vn/Pencil/Home.html" target="_blank">The Pencil Project</a></strong><br />
Great addon that lets you plan and tweak GUI interfaces right in your browser. <a href="http://www.snipe.net/2008/07/gui-planning-made-easy-with-the-pencil-project/" target="_blank">Click here</a> to read more about the Pencil Project in a previous Snipe.Net article.</p>
<p><span style="font-size: medium;">Social</span></p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/5081" target="_blank">Twitterfox</a></strong><br />
Simply THE easiest way to Twitter. There isn&#8217;t a time when I&#8217;m on the computer without a browser window open, so this slim Twitter client makes it unbelievably easy to post to and read Twitter updates. Don&#8217;t use Twitter? <a href="http://www.snipe.net/2008/07/what-exactly-is-the-point-of-twitter/">Click here</a> to learn why you should!</p>
<p><span style="font-size: medium;">Not at All Useful, But Still Fun</span></p>
<p><strong><a href="https://addons.mozilla.org/firefox/507/">Bork Bork Bork!</a></strong><br />
Translates webpage text into Swedish Chef</p>

 <script type="text/javascript">
	<!--
		function onover(what){
	document.getElementById('blurbtext').innerHTML=''+what+'';
	}
	function onout(){
	document.getElementById('blurbtext').innerHTML='&nbsp;';
	}
	-->
	</script>



<h3 style="padding-bottom: 0px; margin-bottom: 0px;">Also check out: <br /><span id="blurbtext"><br /></span></h3>

<div id="relatedposts">




		
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2010/10/firefox-addons-xss-testing/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2010/10/beach-xss.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Firefox Addons for Penetration/XSS Testing" height="90" width="90" onmouseover="onover('Firefox Addons for Penetration/XSS Testing')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/06/hacking-firefox/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/firefox.jpg&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Hacking Firefox" height="90" width="90" onmouseover="onover('Hacking Firefox')" onmouseout="onout()" /></a></div>

			
               

        
        
        
		<div class="yarppimg"><a href="http://www.snipe.net/2008/06/tweak-firefox-3-to-display-richer-colors/" rel="bookmark">
		<img src="http://www.snipe.net/wp-content/themes/snipe/thumb.php?src=http://www.snipe.net/wp-content/uploads/2008/06/fx3vsfx2.png&amp;h=90&amp;w=90&amp;zc=1&amp;q=95" alt="Tweak Firefox 3 to Display Richer Colors" height="90" width="90" onmouseover="onover('Tweak Firefox 3 to Display Richer Colors')" onmouseout="onout()" /></a></div>

	</div>

]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2007/01/firefox-extensions-i-cant-live-without/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.519 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-02 11:54:31 -->

