<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5586991834325457581</id><updated>2011-11-27T17:02:12.447-08:00</updated><category term='bzr'/><category term='distributed-vcs'/><title type='text'>Phil Larson</title><subtitle type='html'>Code Atheist</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5586991834325457581.post-5156610697931349224</id><published>2008-07-28T11:20:00.001-07:00</published><updated>2008-07-28T15:04:21.260-07:00</updated><title type='text'>MagicPad First Look</title><content type='html'>&lt;div style="text-align:center"&gt;&lt;object width="400" height="300"&gt; &lt;param name="allowfullscreen" value="true" /&gt; &lt;param name="allowscriptaccess" value="always" /&gt; &lt;param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1424256&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt; &lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1424256&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.vimeo.com/1424256?pg=embed&amp;sec=1424256"&gt;First Look - MagicPad&lt;/a&gt; from &lt;a href="http://www.vimeo.com/user605129?pg=embed&amp;sec=1424256"&gt;Apple iPhone Apps&lt;/a&gt; on &lt;a href="http://vimeo.com?pg=embed&amp;sec=1424256"&gt;Vimeo&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;The guys over at &lt;a href="http://appleiphoneapps.com/"&gt;appleiphoneapps.com&lt;/a&gt; have posted a &lt;a href="http://www.appleiphoneapps.com/2008/07/magicpad-iphone-copy-paste-more-video/"&gt;first look at MagicPad&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5586991834325457581-5156610697931349224?l=phillarson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/5156610697931349224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5586991834325457581&amp;postID=5156610697931349224' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/5156610697931349224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/5156610697931349224'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/2008/07/magicpad-first-look.html' title='MagicPad First Look'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5586991834325457581.post-2780090909216328913</id><published>2008-07-24T11:54:00.000-07:00</published><updated>2008-07-24T12:21:16.803-07:00</updated><title type='text'>MagicPad: The Missing Rich Text Editor For The iPhone</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_fU-4XC-1ZnE/SIjVbPRdlSI/AAAAAAAAABY/M-OKgvEsTTU/s1600-h/photo15.jpg" style="text-decoration: none;"&gt;&lt;img style="text-decoration: underline;cursor: pointer; " src="http://bp3.blogger.com/_fU-4XC-1ZnE/SIjVbPRdlSI/AAAAAAAAABY/M-OKgvEsTTU/s320/photo15.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5226662031496418594" /&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;   &lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_fU-4XC-1ZnE/SIjVWgq1DFI/AAAAAAAAABQ/iZvMsN7ioyU/s1600-h/24-0700-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_fU-4XC-1ZnE/SIjVWgq1DFI/AAAAAAAAABQ/iZvMsN7ioyU/s320/24-0700-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5226661950266870866" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This last week I took a break from my &lt;a href="http://proximi.com/"&gt;usual duties&lt;/a&gt; to create a new app that is sorely missing. Today I'm proud to introduce the first rich text editor for the iPhone, we're calling it MagicPad. What better way to take advantage of the iPhone's gorgeous high-resolution screen, than creating documents with different fonts, sizes, colors, and decorations. MagicPad shows that the iPhone can be used for &lt;span style="font-style:italic;"&gt;creating&lt;/span&gt; as well as consuming, without compromising on ease of use.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Oh yeah, MagicPad also has copy and paste support within the app. To select text, simply do a double tap hold, wait for the loupe, and drag. This is the easiest way to select text on the iPhone and you only need a single finger.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The guys over at &lt;a href="http://appleiphoneapps.com/"&gt;appleiphoneapps.com&lt;/a&gt; have been playing with beta copies and have posted some &lt;a href="http://www.appleiphoneapps.com/2008/07/iphone-copy-and-paste-coming-to-an-app-store-near-you/"&gt;screenshots&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We're currently waiting for Apple to go through their approval process and get the app in the store. When it does I'll keep you posted.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5586991834325457581-2780090909216328913?l=phillarson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/2780090909216328913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5586991834325457581&amp;postID=2780090909216328913' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/2780090909216328913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/2780090909216328913'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/2008/07/magicpad-missing-rich-text-editor-for.html' title='MagicPad: The Missing Rich Text Editor For The iPhone'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_fU-4XC-1ZnE/SIjVbPRdlSI/AAAAAAAAABY/M-OKgvEsTTU/s72-c/photo15.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5586991834325457581.post-8292112529589630527</id><published>2008-06-30T02:35:00.000-07:00</published><updated>2008-06-30T12:21:07.696-07:00</updated><title type='text'>Flexibility Is Bad Design</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Ground Rules&lt;/span&gt;&lt;br /&gt;Since this is the Internet, the land of mistranslation, I'm going to get a few things out of the way at the beginning.&lt;br /&gt;&lt;br /&gt;Design has many meanings and contexts. For this post, I'm going to use the following definition of design:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px; padding: 0px 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;&lt;code style="padding:0"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;design&lt;/span&gt; &lt;br /&gt;&lt;span style="font-style:italic;"&gt;noun&lt;/span&gt;&lt;br /&gt;The purposeful or inventive arrangement of parts or details: &lt;span style="font-style:italic;"&gt;the aerodynamic design&lt;br /&gt;of an automobile; furniture of simple but elegant design.&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That is, I'm going to talk about the &lt;em&gt;particular&lt;/em&gt; design that represents a piece of application/service software.&lt;br /&gt;&lt;br /&gt;Also, this post refers &lt;em&gt;only&lt;/em&gt; to application/service software. Libraries have entirely different goals.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Get On With It Already&lt;/span&gt;&lt;br /&gt;Alright, now that we're on the same page, I'm going to tell you that flexibility in application code is bad design.&lt;br /&gt;&lt;br /&gt;The job of a programmer is to make a realization of some type of specification. There are good and bad specifications to be sure. However, the end result of all application programming should be a piece of software that does its intended job. This sounds completely logical, and many developers will pay lip service to it. But time and time again I will have a conversation with a developer who will start going on and on about flexibility for situations that might possibly happen in the future.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;STOP IT!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;What these developers mean by "flexibility" is that the code allows you to do something that currently has no plan to be used. Where is the flexibility in code that has every path and possible use covered by the application? That's just code that solves the problem. For these developers, true flexibility comes from solving problems that do not need to be solved.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;An Analogy&lt;/span&gt;&lt;br /&gt;In my opinion, good design is whatever results in a shipping product, using the least amount of code, in the least amount of time. This definition won't allow you to say what the &lt;em&gt;best&lt;/em&gt; design is, but it does give you a rubric to pit two actual designs against each other. Less code is always better than more code because it will always be more readable, easier to digest, and easier to maintain. Note for the dense, I'm not talking about deliberately obtuse or obfuscated code. Least amount of time is obvious. If you aren't interested in shipping, then fiddle with your code all you want, be my guest. Most of us want this software out the door yesterday.&lt;br /&gt;&lt;br /&gt;This definition of good design also lends itself well to a grocery shopping analogy. Everyone knows you're supposed to buy based on the lowest per unit price of an item right? If you can buy 30 apples for 10 cents a piece, and 10 apples for 20 cents apiece, then the 30 apples is the way to go right? Obviously this isn't always correct. If you are only going to eat 1 apple a day, and the apples go bad after 10 days, you're now overpaid $1 if you bought the 30 pack.&lt;br /&gt;&lt;br /&gt;The same is true of "flexibility" in code. Since this "flexibility" in code is related to the future, that means you're only going to receive value out of it &lt;em&gt;if&lt;/em&gt; it eventually gets used. Until then, it is dead weight. It is more code that must be read, understood, and maintained. It is a minus on the overall design because it is work spent for no gain. You could mark it as a plus to possibly be received at a later date, but then you would be building the Enron of code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Most Flexible Code Ever&lt;/span&gt;&lt;br /&gt;So maybe I haven't convinced you to stop trying to write flexible code that will also make toast in the morning. I have a little secret to let you in on.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The most flexible code already exists!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Seriously, go &lt;a href="http://en.wikipedia.org/wiki/Turing_completeness"&gt;look it up&lt;/a&gt;. The amazing thing about it, is we all use it everyday. That's right, it's called a Turing complete programming language. If your goal is to create the ultimate in flexible code, then I think Alan Turing, and everyone who has written a programming language has got you beat.&lt;br /&gt;&lt;br /&gt;These guys have written code that allows you to make operating systems, databases, windowing toolkits, financial software, even the software that you are working on right now. I guess it's easy to forget that programming languages are software too. &lt;br /&gt;&lt;br /&gt;If you think you can make a better programming language, then I would love to try it out. But please, all you &lt;a href="http://www.joelonsoftware.com/articles/fog0000000018.html"&gt;architecture astronauts&lt;/a&gt;, let's stop worrying about the undefined future and start shipping great software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5586991834325457581-8292112529589630527?l=phillarson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/8292112529589630527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5586991834325457581&amp;postID=8292112529589630527' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/8292112529589630527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/8292112529589630527'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/2008/06/flexibility-is-bad-design.html' title='Flexibility Is Bad Design'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5586991834325457581.post-5928396491426599655</id><published>2008-06-27T16:35:00.000-07:00</published><updated>2008-06-27T18:56:22.788-07:00</updated><title type='text'>14 Bazaar Howtos</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Howto 1 - Tell Bazaar Who You Are&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bazaar will add your identifier information to your commits.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr whoami &amp;quot;Phil Larson &amp;lt;phil.larson@gmail.com&amp;gt;&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 2 - Create Local Project Folder&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This step is not technically necessary for Bazaar, but I think it is helpful. First you should create a project folder on your machine that should probably match the name of the project on the server. So I'll do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ mkdir ~/Code/projectfoo&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 3 - Checkout The Trunk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bazaar has two ways of making a "working copy." The most general way is making a branch of another branch, I will show that later. For the trunk, I find it useful to have an in sync copy of the server. Bazaar calls this a checkout, and it works similarly to a Subversion checkout. Any commits made on the working copy automatically get copied to the published branch on the server.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr checkout sftp://bzr@mysourceserver.com/var/bzr/projectfoo/trunk/ ~/Code/projectfoo/trunk&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 4 - Make A Feature Branch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you want to start working on a new feature, make a branch off the trunk and give it a descriptive name. This name is local and private to your machine so you don't have to worry about conflicts or a specific naming convention.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr branch ~/Code/projectfoo/trunk ~/Code/projectfoo/featureA&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 5 - Make Changes On Feature Branch As Needed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now you can make changes as usual to get your feature working.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 6 - Tell Bazaar To Add, Rename, or Move&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you do anything that changes the path of the file, you should let Bazaar do it for you:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Add&lt;/span&gt;&lt;br /&gt;This lets you add specific files to version control.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr add README.txt&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Add All&lt;/span&gt;&lt;br /&gt;This lets you add all non-versioned files to version control.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr add&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Create a folder and add it&lt;/span&gt;&lt;br /&gt;This allows you to create a folder and add it at the same time&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr mkdir docs&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Move/Rename&lt;/span&gt;&lt;br /&gt;Moving and renaming is the same command, just like a Unix shell.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr mv README.txt docs/README.txt&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 7 - Automatically Detect Deletes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bazaar will automatically find missing files and mark them as deleted when you commit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 8 - Commit Changes Often And Early&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you make units of changes, you can commit them on the branch with a message. This gives you a history of what you did, and the chance to roll back.&lt;br /&gt;&lt;br /&gt;You can set up your EDITOR environment variable to have your editor launch and let you edit the commit message.&lt;br /&gt;&lt;br /&gt;Or you can specify the message inline like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr commit -m 'My commit message'&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 9 - Merge Changes From The Trunk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As changes happen on the trunk they won't be pulled into the feature branch. To get the changes into the feature branch:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ cd ~/Code/projectfoo/trunk&lt;br /&gt;$ bzr update&lt;br /&gt;$ cd ../featureA&lt;br /&gt;$ bzr pull ../trunk&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 10 - Prepare To Merge Changes To The Trunk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First thing to do is make sure there are no outstanding changes on the trunk:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ cd ~/Code/projectfoo/trunk&lt;br /&gt;$ bzr status&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then you want to make sure you have the latest version of the trunk&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ cd ~/Code/projectfoo/trunk&lt;br /&gt;$ bzr update&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 11 - Merge Changes Into The Trunk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you get your feature branch how you want it, then it's time to merge into the trunk.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ cd ~/Code/projectfoo/trunk&lt;br /&gt;$ bzr merge ../featureA&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This will apply the changes from the feature branch to your trunk working copy. Then you should compile and run tests on the trunk to make sure there are no conflicting changes. When you are satisfied that the merge completed successfully, commit like normal. Since the trunk is a checkout, not a branch, it will send the changes to the server so other people can access them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 12 - Publish A Branch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want your branch to exist on the server for whatever reason, you can push it to the server.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ cd ~/Code/projectfoo/events&lt;br /&gt;$ bzr push ssftp://bzr@mysourceserver.com/var/bzr/projectfoo/events/&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;From now on the url will be recorded as a push location. So in the future you can just run the shorter command to update the published branch.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr push&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This branch is the same as the trunk branch, so you can make a checkout style working copy as well if you want.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 13 - View Change&lt;/span&gt;s&lt;br /&gt;&lt;br /&gt;If you're on a Mac and you have the Developer Tools installed, you can ask bzr to open up a FileMerge window with the current changes that haven't been committed:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr diff --using opendiff&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can also view the diff between different revisions:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr diff -r1..10 --using opendiff&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Or for specific files:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr diff -r1..10 --using opendiff README.txt&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For the other combinations read:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ bzr help diff&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also there are other tools that are valid for the 'using' parameter. Some examples of supported diff tools include 'kdiff3', 'kompare', 'meld', 'vimdiff', and 'xxdiff'.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Howto 14 - Use The Docs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bookmark the &lt;a href="http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html"&gt;Bazaar Reference Guide&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5586991834325457581-5928396491426599655?l=phillarson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/5928396491426599655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5586991834325457581&amp;postID=5928396491426599655' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/5928396491426599655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/5928396491426599655'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/2008/06/bazaar-howtos.html' title='14 Bazaar Howtos'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5586991834325457581.post-2399524687462417217</id><published>2008-06-27T16:21:00.000-07:00</published><updated>2008-06-27T16:34:19.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed-vcs'/><title type='text'>Why Bazaar?</title><content type='html'>Bazaar is an open source, distributed version control system. It's similar to git, mercurial, svk, etc. There is a lot of info on it at the &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar site&lt;/a&gt;. Plus more reasons to use it on their &lt;a href="http://bazaar-vcs.org/BzrWhy"&gt;Wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I choose Bazaar because in my opinion it has the simplest/friendliest interface of the distributed version control systems. It also has the most powerful renaming support that I am aware of, including true directory renaming. The other version control systems, distributed or not, all have major problems with renaming directories. Hopefully this means we can be a little more experimental with project organization, and if we come up with a different approach we aren't dead in the water.&lt;br /&gt;&lt;br /&gt;Other than that, it is similar to the other distributed version control systems. If any of you are unfamiliar with the benefits of distributed version control:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8&amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4XpnKHJAok8&amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;From my perspective there are three major advantages of distributed version control over a centralized system like cvs, svn, sourcesafe, clearcase, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Work Without The Network&lt;/span&gt;&lt;br /&gt;The first is distributed version control allows you to work when you're disconnected. I personally got into distributed version control when I used to ride the train for an hour and a half each way to work everyday, and I wanted to work on the train. You don't have to save up one huge commit for when you get a network connection, you can commit early and commit often whenever you want. Along with full rollback, diff, and branching support. When you want to share your changes, you push them to a server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Private Branches&lt;/span&gt;&lt;br /&gt;The second major benefit in my opinion is that you can create personal and private branches. I always think it's better to explain programming concepts using actual code. Being able to make a private branch of a project AND still be able to do commits, merges, diffs, etc., allows me to test my ideas before involving other people or muddying up a central source repository. With a centralized system, you would have to make a branch that everyone can see, and you have to worry about naming conflicts, muddying up the source history, and explaining why you're trying some approach. Or you can choose not to commit at all, which has it's share of problems and anxiety because you can't make major changes with a safety net anymore.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Real Branching/Merging Support&lt;/span&gt;&lt;br /&gt;The third benefit is that you can't have distributed version control without first class branching support and being able to branch at will has plenty of benefits. The way I work with bazaar is I make a branch for every new feature or set of features I'm working on. Especially in a small group environment, you can never really work on only one feature at a time. I could be working on the networking code with a broken build, and alex asks me to make a quick UI change so they can have something new to demo to a potential investor. All I need to do in that case is make a new branch of the clean/working branch and make the change. And since it's all handled by the version control system, i can then merge that change into all the in progress branches without having to think. Centralized version control systems typically leave branch and merge support as an afterthought. In your typical centralized version control system, making a branch is a big event that must be recorded and managed and has all the issues that I mentioned about private branches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5586991834325457581-2399524687462417217?l=phillarson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phillarson.blogspot.com/feeds/2399524687462417217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5586991834325457581&amp;postID=2399524687462417217' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/2399524687462417217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5586991834325457581/posts/default/2399524687462417217'/><link rel='alternate' type='text/html' href='http://phillarson.blogspot.com/2008/06/why-bazaar.html' title='Why Bazaar?'/><author><name>Phil Larson</name><uri>http://www.blogger.com/profile/01414328591706730584</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-1l8WGJgWLBw/TdCslTY1z_I/AAAAAAAAAB8/Zs1TK6vt7OM/s220/Photo%2Bon%2B2011-05-15%2Bat%2B12.23.jpg'/></author><thr:total>1</thr:total></entry></feed>
