<?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>Think Vitamin &#187; Chris Nagele</title>
	<atom:link href="http://thinkvitamin.com/author/chris-nagele/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkvitamin.com</link>
	<description>The Web Practitioner&#039;s Blog</description>
	<lastBuildDate>Thu, 09 Feb 2012 16:41:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Fail Safe Email Delivery for Web Apps</title>
		<link>http://thinkvitamin.com/code/fail-safe-email-delivery-for-web-apps/</link>
		<comments>http://thinkvitamin.com/code/fail-safe-email-delivery-for-web-apps/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 16:00:23 +0000</pubDate>
		<dc:creator>Chris Nagele</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://carsonified.com/?p=6591</guid>
		<description><![CDATA[I have to be honest with you. If you run a web app and it sends email, right now you’re probably blind. You have an app or site, you setup a local SMTP server and start firing messages through it. You don’t know if they are bouncing, making it to the inbox or just failing [...]]]></description>
			<content:encoded><![CDATA[<p>I have to be honest with you. If you run a web app and it sends email, right now you’re probably blind. You have an app or site, you setup a local SMTP server and start firing messages through it. You don’t know if they are bouncing, making it to the inbox or just failing altogether.</p>
<p>To be fair, it’s not your fault. This is the way most people handle email. To ensure that those important emails get to the inbox, there is a lot more involved. I’m going to explain how to make it happen in two ways: The hard way and the easy way.</p>
<p>Before getting into the details, I should probably tell you about myself. My company, <a href="http://wildbit.com">Wildbit</a>, runs <a href="http://postmarkapp.com">Postmark</a>, which is an API based service for delivering email in web apps. While <a href="http://postmarkapp.com">Postmark</a> is new, we’ve been running <a href="http://newsberry.com">Newsberry</a> (an email marketing system) for years, giving us the experience to properly handle a large volume of email for many customers. Let’s jump in.<span id="more-6591"></span></p>
<h3>The Hard Way (Brace Yourself)</h3>
<p>Email is old and seemingly simple, while at the same time extremely effective. If you send even a moderate amount of email from your app, you can outsource the complexities to a provider like us, or do it on your own. Here’s what you’ll need to know if you want to do it yourself.</p>
<p><strong>Mail Servers and DNS</strong></p>
<p>Obviously to send email, you need a good mail server. Any well known open source email server will work fine. On the commercial side there are some very good providers that offer more specific configuration options for outbound sending. Personally, I highly recommend <a href="http://port25.com">PowerMTA from Port25</a>.</p>
<p>The next important step is configuring DNS <em>(Ed: Confused by DNS? Read<a href="http://carsonified.com/blog/web-apps/get-started-with-dns/"> this Think Vitamin article</a> by Chris Lea)</em>. Without this, receiving mail servers have no idea who you are. Make sure to give your mail server a dedicated IP address and a domain. Now, this is where most people stop, and also where they get into trouble.</p>
<p>The final step is having a proper PTR (or reverse DNS) record for the dedicated IP address. Most email receivers require that your IP address resolves to the domain you chose for your mail server. Without this, many ISPs will quickly block your messages.</p>
<p><strong>Email Authentication</strong></p>
<p>Once your mail server is up and running and messages are sending, it’s time to think about authentication. No, I am not talking about a username and password. Email authentication was created to help validate and verify senders. The standards we’ll discuss are SPF and DKIM</p>
<p><strong>SPF (Sender Policy Framework)</strong></p>
<p>SPF is pretty simple. You create a record in your DNS and define the IP addresses or domains who are allowed to send for your domain. When an email is sent, the receiving mail server looks this up and decides if it should accept the message.</p>
<p><strong>DKIM (DomainKeys Identified Mail)</strong></p>
<p>DKIM is also managed via DNS, but is very different. With DKIM you designate the various servers that you send email from (email marketing, transactional, departments, etc) and give each one a private and public key pair.</p>
<p>The public key is added to DNS and the private key is configured on your mail servers. When you send email, each message is “signed” with the key and used by receiving mail servers to identify and verify your domain.</p>
<p><strong>Reputation &amp; Monitoring</strong></p>
<p>If you send even a moderate volume of email, you can be sure that ISPs are building a reputation on you. They watch email coming from your IP or domain, then track things like spam complaints, bounces, unsubscribes and volume. From there, they can determine a reputation and decide how to treat your messages (inbox, reject, spam).</p>
<p>ISPs are now building reputations on the from domain, and further, basing that reputation on things like opens and clicks (engagement). Remember that DKIM stuff? By signing your messages, it helps email receivers identify your sending domain and build a good (or bad) reputation that you can hold on to.</p>
<p>While ISPs don’t publish their reputation data, there are two well known public resources: <a href="http://senderscore.org">Senderscore</a> and <a href="http://senderbase.org">Senderbase</a>. You can use these for free to track your own IP reputation, but keep in mind they are not definitive and should be used for reference only. The best way to test delivery results is through something like <a href="http://www.returnpath.net/commercialsender/monitoring/">Mailbox Monitor</a> from Return Path, which will track the inbox, missing and spam rates of a seed list to major ISPs worldwide.</p>
<p><strong>Throttling (or Being Polite)</strong></p>
<p>The amount of spam ISPs need to deal with is both overwhelming and expensive. As a reputable sender, it is important to remain polite and follow their rules. Each ISP has rules about how you should send email to their servers. This includes the number of connections you can open, messages per connection, what to do if you receive certain responses.</p>
<p>Remember I mentioned commercial mail servers? This is where they really shine. <a href="http://port25.com">PowerMTA</a>, for example, has some great options to not only control these settings, but to change them based on the responses from the ISP. For example, during the holidays many email servers get overloaded and start rejecting connections. Instead of overloading them more and reconnecting, the mail server can backoff a bit to reduce the load.</p>
<p><strong>Whitelists and Feedback Loops</strong></p>
<p>Heard enough already? I’m almost done so you can read the easy way. The final important aspect of sending email is getting listed (no, not blacklisted). A growing number of ISPs having something called a Feedback loop. In short, it is a way to get notified when someone clicks “This is spam” in their email client.</p>
<p>Most people don’t even know about it, but it’s just as important as having an unsubscribe option. By tracking spam complaints, you can easily remove these people from your list and avoid damaging your reputation. This is also a good metric to understand how relevant your email is to subscribers. Something to keep in mind, AOL (and others) consider 1 complaint for every 1,000 messages a target rate for bulk senders.</p>
<p>Whitelists still exist, but only with ISPs such as Yahoo, AOL, Verizon, and United Online. If you send a high volume of email, you may want to look into commercial accreditation services like <a href="http://www.returnpath.net/commercialsender/certification/">SenderScore Certified</a> and <a href="http://www.isipp.com/email-accreditation/">ISIPP</a>.</p>
<p>Okay, even I am bored at this point. Almost all of the stuff I just told you can be accomplished with hardly any effort, so let’s jump to the easy way.</p>
<h3>Doing it the Easy Way</h3>
<p>An easy way actually exists, and all you have to do is use a service that already has all of this in place and follow their instructions. When it comes to sending transactional email from your web app, there are a few services popping up lately, but I’ll just explain how we tackle the above in <a href="http://postmarkapp.com">Postmark</a>.</p>
<p><strong>Mail Server and DNS</strong></p>
<p>When you create an account, you can add a &#8220;virtual server&#8221; for each project or site. In the background, all of the magic for configuring the mail server and setting DNS is done automatically. All you have to do is drop some code into your app (we have many libraries) or point to our SMTP server to start sending.</p>
<p><img src="http://farm5.static.flickr.com/4077/4809146470_19e6f8e063_o.png" alt="pm-rack" width="470" height="253" style="border: 1px solid #999;" /></p>
<p><strong>Email Authentication</strong></p>
<p>Before you can start sending, Postmark requires that you create a “sender signature” for each FROM email. This confirms that you own the email address, but it also informs us of the domain you use for sending. By knowing the domain, it is then easy to create a DKIM pair and explain the proper settings to add DKIM and SPF to your DNS. It turns a complex process into something easy and straight forward. Even if you choose not to implement DKIM for your own domain, Postmark will still sign emails with our own domain, allowing you to “borrow” our reputation.</p>
<p><strong>Reputation and Monitoring</strong></p>
<p>By using an Email Service Provider (ESP), you are also using their reputation. It’s extremely important to make sure that the ESP handles abuse before it happens and keeps their customers under control. By maintaining a good reputation across a high volume of email, you then benefit from the reputation for your own messages.</p>
<p>With Postmark, since we sign outgoing messages (DKIM), you can either benefit from <a href="http://blog.postmarkapp.com/post/761753382/take-your-reputation-with-you">building your own reputation</a> or piggy back on our well maintained reputation.</p>
<p>When it comes to tools, we use <a href="http://returnpath.com">ReturnPath</a> and <a href="http://isipp.com">ISIPP</a> to monitor our reputation, inbox rates, and blacklists. If any issues arise, they are known immediately so they can be resolved. Of course, maintaining a good reputation is all about stopping things “before” they happen. This is why we have our own algorithms in place to alert if a customer is misbehaving. This could range from high spam complaints to content issues or even anomalies in volume.</p>
<p><img src="http://farm5.static.flickr.com/4100/4809146538_c11196be0c_o.png" alt="pm-tracking" width="470" height="290" style="border: 1px solid #999;" /></p>
<p><strong>Throttling</strong></p>
<p>By using PowerMTA, we can quickly analyze and adapt to what the ISPs want when it comes to sending practices. These rules can change based on reputation as well, so they go hand in hand. For instance, if we add a new IP address to our servers it is basically unknown to the ISPs. We can easily “warm up” this new IP address slowly over time until it has built enough of a reputation to send a higher volume.</p>
<p><strong>Whitelists and FBLs</strong></p>
<p>Out of everything mentioned, this is the easiest part. For each IP or sending domain we just make sure we have feedback loops in place to monitor your spam complaints and maintain any existing whitelists. An elegant reporting interface is available for customers to view spam complaints if they occur.</p>
<p><strong>Wait, There’s More!</strong></p>
<p>There are some features that a hosted provider can offer that a regular mail server might not provide. The most important is bounce handling. By using Postmark, all bounce types are automatically tracked and if appropriate, deactivated. For instance, if an email no longer exists you should stop sending to it.</p>
<p>This is not only polite to the ISP, but also helps you recover and <a href="http://blog.beanstalkapp.com/post/758755557/handling-email-delivery-issues-with-postmark">report these problems to your customers</a> or members. You can also categorize (tag) and track messages that were sent, along with a full archive of the content. These features are great for troubleshooting and monitoring.</p>
<p><img src="http://farm5.static.flickr.com/4138/4809249774_2682e9d18e_o.png" width="470" height="304" alt="activity-vitamin" style="border: 1px solid #999;" /></p>
<h3>Summing it Up</h3>
<p>If you are still with me, the short answer to Email Delivery for Web Apps is just like anything else: Focus on what you do best and give the rest to the experts. By using a hosted service for email delivery you can have more confidence that your emails are delivered to the inbox.</p>
<p><strong>Further reading and resources:</strong></p>
<ul>
<li><a href="http://postmarkapp.com">Postmark</a></li>
<li><a href="http://www.openspf.org/">Sender Policy Framework</a></li>
<li><a href="http://dkim.org">DKIM</a> and <a href="http://dkimcore.org">DKIM Core</a></li>
<li><a href="http://www.maawg.org/sites/maawg/files/news/MAAWG_Senders_BCP_Ver2.pdf">MAAWG Senders Best Communications Practices</a></li>
<li><a href="http://blog.wordtothewise.com/isp-information/">ISP Information on Word to the Wise</a></li>
<li><a href="http://returnpath.com">Return Path</a></li>
<li><a href="http://isipp.com">ISIPP</a></li>
<li><a href="http://port25.com">Port25</a></li>
</ul>
<h3>Questions or Feedback?</h3>
<p>If you have any general questions about email, deliverability, or want to discuss, leave a comment below or email me at <a href="mailto:cn@wildbit.com">cn@wildbit.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkvitamin.com/code/fail-safe-email-delivery-for-web-apps/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Building and managing virtual teams</title>
		<link>http://thinkvitamin.com/web-industry/building-and-managing-virtual-teams/</link>
		<comments>http://thinkvitamin.com/web-industry/building-and-managing-virtual-teams/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 16:17:46 +0000</pubDate>
		<dc:creator>Chris Nagele</dc:creator>
				<category><![CDATA[Web Industry]]></category>

		<guid isPermaLink="false">http://www.thinkvitamin.com/features/biz/building-and-managing-virtual-teams</guid>
		<description><![CDATA[I constantly get the same question, &#8220;How do you manage a virtual team and actually get stuff done.&#8221; At Wildbit, each of the 10 team members work from home or a coworking environment. We&#8217;re spread out across four countries and many timezones. With such separation, we still manage to get a lot done and enjoy [...]]]></description>
			<content:encoded><![CDATA[<p>I constantly get the same question, &#8220;How do you manage a virtual team and actually get stuff done.&#8221; At Wildbit, each of the 10 team members work from home or a coworking environment. We&#8217;re spread out across four countries and many timezones. With such separation, we still manage to get a lot done and enjoy our work.</p>
<p>Before writing this article, I had not given much thought to exactly how we work in a virtual environment. My first answer was simply practice and many mistakes. Although, the knowledge gained from those mistakes can be narrowed down to three main ingredients: The people on the team, the process that drives the team, and clear communication.</p>
<h2>The people</h2>
<p><strong>Skip the resumes</strong></p>
<p>You can have a good process and great tools, but it all starts with a team who can work well together. I have been running Wildbit for almost eight years. In that time, I learned to not hire just based on need or skill set, but to hire based on interests, personality, and a motivation to constantly improve. Hiring virtually makes this much harder. You can&#8217;t sit down and feel out a person or get to know them, you need to base their personality and passion other factors. For instance, we usually ask people what books they read, blogs they follow, or people they look up to in the industry. This helps us learn about their interests, but can also demonstrate their passion and dedication to their work. If people take time to write a blog, it tells me they are confident in their ideas and willing to work on their own. The key is to find people who love what they do, then provide the environment for them to express it.</p>
<p><strong>Plan for mistakes</strong></p>
<p>If you&#8217;re planning to hire someone remotely, be prepared for mistakes. Most people would love to work from home, but most people are also not cut out for it. We&#8217;ve had situations where very talented team members did not work out. Not due to their skills or interest, but their inability to work from home without supervision. Once this is realized, the process of trying to supervise and recover can be toxic. The manager tries to improve the situation while the employee has a constant feeling of failure. In these scenarios it&#8217;s very important to trust your gut and move on. In a virtual team, always make sure to plan for these mistakes and accept delays and cost.</p>
<p><strong>Listen and learn</strong></p>
<p>There is a psychological element to running virtual teams that is much different from the physical environment. Instead of reading body language, we have to pay close attention to habits and read between the lines. I can quickly notice from an IM conversation when someone is not motivated or is losing interest. Even the smallest things like emoticons, punctuation, and frequency of participation can reveal a lot. The trick is to know each person, their usual habits, and when they start changing those habits. It&#8217;s pretty easy for someone to hide mistakes or poor productivity. By encouraging open and honest communication, the issues are most likely to surface sooner.</p>
<h2>The process</h2>
<p>If you hire the right people who enjoy what they do, most of the painful management issues go away. At the same time, a solid process is still necessary to improve productivity. A specific process should always be tailored to the needs of your company, but I can give some insight on what works for Wildbit.</p>
<p><strong>Focus on results, not time</strong></p>
<p>We&#8217;re a software company, so our process is specific. We work strictly in weekly iterations. Each week, each person is dedicated to one project. This clarifies communication across the team, sets expectations, and maintains focus. Everyone on the team always know what each person is working on, as well as our clients.</p>
<p>Weekly iterations also help us avoid hour tracking and baby sitting. Each week is planned based on a desired outcome, not the number of hours worked. This avoids tracking and posting hours and enables us to deliver results. At the end of the week, it is clear to everyone on the team if the expected results were delivered.</p>
<p><strong>Schedules matter</strong></p>
<p>A primary advantage to working remotely is a flexible schedule. While we don&#8217;t have rigid daily working hours, it is still important that each person has a consistent schedule. We try to have a range of time when each person will be available, with a plus or minus flexibility. This sets clear expectations across the team with some leniency to start work when the person is ready. In regards to leadership, a schedule also makes it clear when someone is slacking off. While we don&#8217;t use IM for constant conversation, it still provides a clear status of when someone arrives or leaves each day.</p>
<p><strong>Coworking: Working alone, together</strong></p>
<p>Unless you have the right office space at home, it can get really distracting. The question always comes up on whether an office away from home makes sense. My usual answer is that it depends on the person. Over the years, we have tried it all. The important thing is that each person has the flexibility to work where they are most productive and comfortable. With so many people working remotely these days, the concept of <a href="http://coworking.pbwiki.com/">coworking</a> has really caught on. I work at <a href="http://indyhall.org/">Independents Hall</a> in Philadelphia, which provides a great balance between working at home and working in an office. As more of these spaces open, the rest of our team will be sure to jump on board.</p>
<h2>Clear communication</h2>
<p>With the right people and the right process, a solid communication process brings it all together. While there are plenty of tools to assist in communication, the real value is in setting communication guidelines. Nothing is more distracting than the Internet (I hate you <a href="http://twitter.com">Twitter</a>). By focusing on communication tools first, it just feeds the fire. Here are some of our guidelines.</p>
<p><strong>Daily meetings</strong></p>
<p>The biggest disadvantage to a virtual team is not having the time to hang out. In the usual workplace, a lot of great ideas happen through daily chatter or over lunch. To emulate this environment, we setup very short meetings each morning in <a href="http://campfirenow.com/">Campfire</a>. It helps start the day, mess around, and catch up before we focus on work.</p>
<p><strong>Kill the IM distration</strong></p>
<p>Instant Messages do a great job of killing focus. Nothing is worse than tasks assigned over IM or someone distracting you in the middle of a thought. Over time, we learned how to minimize IM discussion. By not using IM, we are forced to use tools that encourage structured team discussion. We use <a href="http://basecamphq.com">Basecamp</a> to post ideas or questions to the team, which can be answered at any time. We use <a href="http://campfirenow.com">Campfire</a> to chat as a group, which keeps a record for future use. And we use <a href="http://fogbugz.com">FogBugz</a> to assign and organize tasks and iterations. We&#8217;ve also <a href="http://www.wildbit.com/blog/2007/06/28/twitter-for-business/">used Twitter</a> to notify each other about the status of a task or situation.</p>
<p><strong>Get to know each other</strong></p>
<p>It&#8217;s not always about business. Nothing helps a team gel more than learning about each others personal lives. It&#8217;s easier when you work in the same office, but in a virtual team you need to make time for it. We&#8217;ve celebrate with <a href="http://www.wildbit.com/blog/2007/05/03/welcome-dmitry-sabanin/">shots of vodka in Campfire</a>. We send each other pictures of our home offices. We remember birthdays or occasions and announce them to the team. The personal discussions are always overlooked, so be sure to make the time.</p>
<p>It&#8217;s not all virtual. No matter what, you always need some face time. There&#8217;s nothing better than a team retreat to hang out with the team, celebrate success, and focus on strategy. Our last <a href="http://www.wildbit.com/blog/2007/03/12/wildbit-retreat-cyprus/">retreat was in Cyprus</a>, and it was well worth it. When planning a retreat make sure that most of the time is casual. It&#8217;s a time to relax and get to know each other, rather than pushing business needs. The strategic conversations will happen naturally.</p>
<h2>People, Process, Communication</h2>
<p>Our experience working remotely is just one example. It&#8217;s important to adjust based on the needs and structure of your team. As I said, it all starts with the right people. With a great team that really strives for quality, the rest just happens. The concepts and process that Wildbit has created over the years has come from each person on the team, instead of a single manager or leader.</p>
<p>I&#8217;m very interested in hearing ideas or strategies that have worked for other teams. If you have any thoughts or questions, post a comment and I will reply.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkvitamin.com/web-industry/building-and-managing-virtual-teams/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Subversion for Designers</title>
		<link>http://thinkvitamin.com/design/subversion-for-designers/</link>
		<comments>http://thinkvitamin.com/design/subversion-for-designers/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 15:26:09 +0000</pubDate>
		<dc:creator>Chris Nagele</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.thinkvitamin.com/features/design/subversion-for-designers</guid>
		<description><![CDATA[If you attended Future of Web Apps this year in Miami, or even listened to the audio, it&#8217;s apparent that version control is a crucial part of building web apps. As Cal Henderson put it, &#8220;If you listen to nothing else I say today, start using source control.&#8221; This might be obvious to developers, but [...]]]></description>
			<content:encoded><![CDATA[<p>If you attended Future of Web Apps this year in Miami, or even <a href="http://futureofwebapps.com/" alt="Future of Web Apps">listened to the audio</a>, it&#8217;s apparent that version control is a crucial part of building web apps. As Cal Henderson put it, &#8220;If you listen to nothing else I say today, start using source control.&#8221; This might be obvious to developers, but many web designers still have not discovered the benefits of version control. Without version control, most web designers work in constant risk. Each time a new change is made, the previous code or files disappear forever.  In this article I&#8217;m going to explain how to get started and why Subversion is going to change the way you work. </p>
<p>Subversion is an impressive version control system that has been widely adopted. You&#8217;ve probably heard of it. You might have even tried to use it without success. Most people know they need it, but can&#8217;t get past the complexities of getting started. At <a href="http://wildbit.com/">Wildbit</a>, we realized these problems and created <a href="http://www.beanstalkapp.com" alt="Beanstalk">Beanstalk</a>, a hosted Subversion system designed to make version control painless. In order to understand Subversion, let&#8217;s start with the benefits and how it works.</p>
<h3>Fear commitment? Drop that ball and chain.</h3>
<p>With Subversion, you don&#8217;t have to worry about overwriting files or losing code. Subversion will keep a constant history of revisions for every file in your project. Each time changes are made to your code or files, they are preserved forever. Subversion allows you to view the changes to specific code, review with your team, and even roll back changes to previous versions. Think of it as a never-ending &#8220;undo&#8221; for the life of your projects.</p>
<p>In addition to revision history, Subversion improves team collaboration. Many people can update the same files without the risk of overwriting each others work. Subversion also provides a constant backup of your files in a central location, where you can share changes and updates with clients or team members. Since it preserves the history of your files, you can instantly compare multiple revisions of HTML mockups.</p>
<h3>How does it work?</h3>
<p>Subversion works as a client/server tool, similar to the way most designers use FTP. A Subversion server stores all of your files in a repository and a Subversion client is used to download (update) and upload (commit) file changes to the server. In the past, the process of setting up a server, finding a good Subversion client, and learning the basics of Subversion was a painful process. These days there are many tools and services available that allow almost anyone to get started. Let&#8217;s jump in.</p>
<h3>Setting up a Subversion server</h3>
<p>The first step is to setup the server. This used to be the most difficult step, but there are now various web applications that simplify this process. Services such as <a href="http://www.beanstalkapp.com" alt="Beanstalk">Beanstalk</a>, <a href="http://www.versionshelf.com" alt="Version Shelf">Versionshelf</a>, <a href="http://www.cvsdude.com" alt="CVSDude">CVSDude</a>, and <a href="http://www.roundhaus.com" alt="RoundHaus">RoundHaus</a> make it easy to create a repository, manage users, and view activity. These services have literally taken the process from hours to minutes.</p>
<p>After signing up for one of the services, you can setup a repository. A repository is like a project, which defines the location where your files are stored. Each repository has a URL that is used to interact with the client and the server. As part of setting up the repository, you can either import an archive of existing files or start from scratch. An example repository URL would look something like <code>http://svn.account.beanstalkapp.com/reponame</code> where <em>reponame</em> is the name of your repository.</p>
<h3>Installing the client</h3>
<p>The next step is to setup a Subversion client on your computer. I feel like this is the part where most people give up. There are many options and most are poorly documented or difficult to install. Fortunately, there are a few installable clients that can make this process much easier without having to bother with the command line.</p>
<p>If you are on Windows, I highly recommend <a href="http://www.tortoisesvn.net" alt="TortoiseSVN">TortoiseSVN</a>. This Subversion client seamlessly integrates into the Windows Explorer, making it easy to interact with your Subversion repositories. With a right-click, you are provided with the most common Subversion commands. The installation process is really straight-forward.</p>
<p>On Mac, you have several options. The biggest issue with Subversion on Mac is that you need to install Subversion as well as the GUI. Fortunately, there is a <a href="http://homepage.mac.com/martinott/" alt="Subversion package for Mac">package from Martin Ott</a> that will install Subversion for you. You can grab the file (My Subversion-1.4.4 Package) from the link and install it. After the install, you can choose a Subversion GUI client. I recommend either <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/" alt="svnX">svnX</a> or <a href="http://macromates.com/" alt="Textmate">Textmate&#8217;s</a> Subversion bundle. Details about the use of each product can be found on the respective web sites.</p>
<h3>Basic Subversion usage </h3>
<p>With a Subversion server, repository and client we are ready to start using Subversion for a project. The best way to explain Subversion is through a normal day to day work cycle. In this example, I will use <a href="http://www.beanstalkapp.com" alt="Beanstalk">Beanstalk<a/> (server) and <a href="http://www.lachoseinteractive.net/en/community/subversion/svnx/" alt="svnX">svnX</a> (client) to cover the common commands and terms. </p>
<h4><code>svn checkout</code></h4>
<p>The first step is to checkout the files from your subversion server. A checkout is the first download of files from the Subversion server to your computer. In your Subversion client you will insert the repository URL along with your username/password and perform a checkout. This will &#8220;checkout&#8221; all files from the repository to a directory on your computer. The screen shot below shows that we checked out several files. As you can see, I am using Subversion to edit this article.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-checkout.png" alt="Checkout in svnX" /></p>
<h4><code>working copy</code></h4>
<p>The working copy is the local copy of files on your computer from your repository, which is created after your first checkout. Subversion will automatically keep track of changes in your working copy as long as you edit within the initial checkout directories. For now, I will edit this page in Textmate.</p>
<h4><code>svn commit</code></h4>
<p>After editing the file, we can commit (upload) the changes to the Subversion server. svnX will automatically find all new or changed files when you are ready to commit. Make sure to write a detailed comment that explains the changes.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-commit.png" alt="Commit in svnX" /></p>
<h4><code>changeset</code></h4>
<p>Once the files are committed, Subversion will create a changeset that records the changes from the commit. Each changeset is assigned a revision number and is frozen in history in your repository. The changeset and revision is displayed in Beanstalk and is visible to other members on your team. The screen below shows that I modified the file <em>subversion-for-desgners.html</em> at Revision 2.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-changeset.png" alt="Changeset in Beanstalk" /></p>
<h4><code>diff</code></h4>
<p>When viewing a changeset or file in Beanstalk, you can see a &#8220;diff&#8221; of the changes. A diff is simply the difference between one revision and another, which will display the lines of code that were changed, added, or removed. This makes debugging and reviewing changes very easy, since you can review specific differences in each file between revisions. I went ahead and edited this line so we can see the &#8220;diff&#8221; between revision 2 and 3.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-diff.png" alt="Diff in Beanstalk" /></p>
<h4><code>svn update</code></h4>
<p>If you are working in a team it is important to have the latest version of files. An update is the command used to grab the latest version of files from the Subversion server. You should run this often to minimize any conflicts with team members.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-update.png" alt="SVN update in svnX" /></p>
<h4><code>svn log</code></h4>
<p>The Subversion server will keep a constant log of everyone&#8217;s activity across your repositories. Most hosted Subversion services offer a section where you can view recent revisions and changesets. This is ideal if you need a snap shot of recent updates in your projects. The log will display the latest commits from each person as well as a direct link to the changeset.</p>
<p><img src="http://thinkvitamin.com/images/articles/svn/svn-activity.png" alt="Activity in Beanstalk" /></p>
<h4>much more</h4>
<p>There are many other terms and commands, but the above are the most important to get started. Once you start using Subversion on a daily basis, you will learn how to resolve conflicts, revert files to previous revisions, and create a smarter workflow for your process. The best in-depth resource for Subversion is the book <em><a href="http://svnbook.red-bean.com/en/1.4/index.html" alt="Version Control with Subversion">Version Control with Subversion</a></em>. Instead of starting at the top, I recommend starting at the chapter <em><a href="http://svnbook.red-bean.com/en/1.4/svn.tour.cycle.html" alt="Basic Work Cycle">Basic Work Cycle</a></em>. This will help you discover the key advantages of Subversion without reading the entire book.</p>
<h3>Taking it further</h3>
<p>I tried to keep this as simple as possible, but once you get started with Subversion there are many more tools and benefits. Hosted Subversion services have some great tools that allow you to automatically deploy files from Subversion to your servers, notify your team when new changes are committed, integrate with your favorite web apps and allow anonymous access for open source projects. After you decide to use Subversion, you will wonder how you ever got any work done without it.</p>
<p>If you have any questions, feel free to post comments and I will reply quickly. You can also email us at <a href="mailto:support@beanstalkapp.com">support@beanstalkapp.com</a> if you need help along the way. Our goal is to open up the world of version control for designers, so we are here to help.</p>
<p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkvitamin.com/design/subversion-for-designers/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.248 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-11 16:35:03 -->

