<?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>Velos Mobile</title>
	<atom:link href="http://velosmobile.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://velosmobile.com</link>
	<description></description>
	<lastBuildDate>Wed, 03 Apr 2013 23:45:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Enhanced Sectioned Grid with Varying Columns</title>
		<link>http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/</link>
		<comments>http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 23:45:38 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=618</guid>
		<description><![CDATA[We&#8217;ve been pleased to see that the Sectioned Grid adapter we open-sourced last year has been useful for other Android developers. It&#8217;s a modular component that fulfills a commonly encountered desire for nicely formatted grids of data, which seem to be increasingly in demand as Android tablets become more popular. One suggestion made at our [...]]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve been pleased to see that the <a title="A Sectioned Grid for Android" href="http://velosmobile.com/2012/10/24/a-sectioned-grid-for-android/">Sectioned Grid adapter</a> we open-sourced last year has been useful for other Android developers. It&#8217;s a modular component that fulfills a commonly encountered desire for nicely formatted grids of data, which seem to be increasingly in demand as Android tablets become more popular.</p>
<p>One suggestion made at <a href="https://github.com/velos/SectionedGrid">our GitHub project</a> was to keep grid items at a fixed size. The original implementation let you specify the number of columns, and then automatically resized your grid items based on the available space. However, there are some cases where you would prefer for the grid items to keep a consistent size, and vary the number of columns. This is particularly useful for cases like presenting a gallery of image thumbnails, where aspect ratio is important.</p>
<p>For example, the previous implementation running on a handset might look like the following.</p>
<div id="attachment_482" class="wp-caption aligncenter" style="width: 178px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/grid_phone.png"><img class="size-medium wp-image-482" title="grid_phone" src="http://velosmobile.com/wp-content/uploads/2012/10/grid_phone-168x300.png" alt="" width="168" height="300" /></a><p class="wp-caption-text">Sectioned grid with 2 columns specified.</p></div>
<p>When using the new mode, it&#8217;s possible to specify that every item should be 190dp by 190dp large. This will keep every item as a perfect square, regardless of the screen size or device orientation. The following four screens show the same layout rendering on a Nexus 4 and a Nexus 7 in both horizontal and vertical orientations.</p>

<a href='http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/nexus4landscape/' title='Nexus4Landscape'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2013/04/Nexus4Landscape-150x150.png" class="attachment-thumbnail" alt="Nexus4Landscape" /></a>
<a href='http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/nexus4portrait/' title='Nexus4Portrait'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2013/04/Nexus4Portrait-150x150.png" class="attachment-thumbnail" alt="Nexus4Portrait" /></a>
<a href='http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/nexus7landscape/' title='Nexus7Landscape'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2013/04/Nexus7Landscape-150x150.png" class="attachment-thumbnail" alt="Nexus7Landscape" /></a>
<a href='http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/nexus7portrait/' title='Nexus7Portrait'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2013/04/Nexus7Portrait-150x150.png" class="attachment-thumbnail" alt="Nexus7Portrait" /></a>

<p>As a bonus, when using this mode you can use a single layout for all screen sizes without needing to use configuration qualifiers. Depending on your app needs, you still might want to provide an alternative layout; for example, you might specify a larger item size in layout-w720dp if you would like to show larger thumbnails on tablets.</p>
<p>Our updated version of the Sectioned Grid Adapter is now available for pulling. By default it maintains the previous behavior of varying column widths. To switch to the new method of varying the number of columns, pass the argument SectionableAdapter.MODE_VARY_COUNT to the SectionableAdapter constructor.</p>
<p>You will need to slightly tweak your layouts as well. When using the default behavior (now called MODE_VARY_WIDTHS), the number of columns is determined from the number of child item elements in a row.</p>
<script src="https://gist.github.com/5302889.js"></script><noscript><pre><code class="language-xml xml">&lt;LinearLayout 
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:orientation=&quot;horizontal&quot;
    android:id=&quot;@+id/bookRow_itemHolder&quot;
    &gt;
    &lt;include layout=&quot;@layout/book_item&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item&quot;/&gt;
&lt;/LinearLayout&gt;
</code></pre></noscript>
<p>When using MODE_VARY_COUNT, the adapter will automatically determine how many columns will fit in your rows. Just supply enough items to support your expected maximum count. The adapter will hide any unused items.</p>
<script src="https://gist.github.com/5302898.js"></script><noscript><pre><code class="language- ">&lt;LinearLayout 
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:orientation=&quot;horizontal&quot;
    android:id=&quot;@+id/bookRow_itemHolder&quot;
    &gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
    &lt;include layout=&quot;@layout/book_item_vary_columns&quot;/&gt;
&lt;/LinearLayout&gt;
</code></pre></noscript>
<p>Finally, you&#8217;ll want to omit layout_weight for your grid items, since this would cause Android to stretch them out. Just provide specific values for your layout_width and layout_height.</p>
<script src="https://gist.github.com/5302925.js"></script><noscript><pre><code class="language- ">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;190dp&quot;
    android:layout_height=&quot;190dp&quot;
    android:orientation=&quot;vertical&quot; 
    android:padding=&quot;8dp&quot;
    &gt;
    &lt;TextView
        android:id=&quot;@+id/bookItem_title&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        android:textColor=&quot;#ffffff&quot;
        android:padding=&quot;8dp&quot;
      android:background=&quot;@drawable/gradients&quot;
        /&gt;
&lt;/LinearLayout&gt;</code></pre></noscript>
<p>If you choose to specify the widths of your columns, try to pick values that fit well into a variety of screen sizes. This should help avoid showing too much empty space on the end of your rows. Of course, you could also use other approaches like horizontally aligning your grid to make it look balanced.</p>
<p>Feel free to check out the project. Hopefully it will serve you as well as it has served us!</p>
<p><center><a class="large black nice button radius" href="https://github.com/velos/SectionedGrid">Download on GitHub</a></center></p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2013/04/03/enhanced-sectioned-grid-with-varying-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Harlem Shake for iOS</title>
		<link>http://velosmobile.com/2013/03/08/harlem-shake-for-ios/</link>
		<comments>http://velosmobile.com/2013/03/08/harlem-shake-for-ios/#comments</comments>
		<pubDate>Fri, 08 Mar 2013 18:06:06 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=553</guid>
		<description><![CDATA[You thought it was over didn&#8217;t you? You thought that surely this meme was done by now. Well it&#8217;s not. Introducing Harlem Shake for iOS. Here&#8217;s another example using MusicID: It&#8217;s super easy to use. Just give it a view to do the initial &#8216;dance&#8217; like so: Then when you want craziness to ensue: Please [...]]]></description>
				<content:encoded><![CDATA[<p>You thought it was over didn&#8217;t you? You thought that surely this <a href="http://knowyourmeme.com/memes/harlem-shake">meme</a> was done by now.</p>
<p>Well it&#8217;s not. Introducing Harlem Shake for iOS.</p>
<p><center>
<div class="rve-embed-container" style="max-width:500px;">
<div class="rve-embed-container-inner"><iframe src="http://www.youtube.com/embed/IyXBbqy90_Q?feature=oembed" frameborder="0" allowfullscreen></iframe></div>
</div>
<p></center></p>
<p></p>
<p>Here&#8217;s another example using <a href="http://www.musicid2.com">MusicID</a>:</p>
<p><center>
<div class="rve-embed-container" style="max-width:500px;">
<div class="rve-embed-container-inner"><iframe src="http://www.youtube.com/embed/v0f-5znHxE8?feature=oembed" frameborder="0" allowfullscreen></iframe></div>
</div>
<p></center></p>
<p><center><a class="large blue nice button radius" href="https://github.com/velos/VLMHarlemShake">⬇ on GitHub</a></center></p>
<p>It&#8217;s super easy to use. Just give it a view to do the initial &#8216;dance&#8217; like so:</p>
<script src="https://gist.github.com/99c225cbadde06386b0c.js"></script><noscript><pre><code class="language-objective-c objective-c">harlemShake = [[VLMHarlemShake alloc] initWithLonerView:lonerView];</code></pre></noscript>
<p>Then when you want craziness to ensue:</p>
<script src="https://gist.github.com/ba4fa5dc860927722dc0.js"></script><noscript><pre><code class="language-objective-c objective-c">[harlemShake shakeWithCompletion:^{
    NSLog(@&quot;COMPLETE&quot;);
}];</code></pre></noscript>
<p>Please don&#8217;t ship this. And before you say anything, we know this is incredibly dumb. We promise we&#8217;ll release some real open source soon enough.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2013/03/08/harlem-shake-for-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Sectioned Grid for Android</title>
		<link>http://velosmobile.com/2012/10/24/a-sectioned-grid-for-android/</link>
		<comments>http://velosmobile.com/2012/10/24/a-sectioned-grid-for-android/#comments</comments>
		<pubDate>Wed, 24 Oct 2012 18:24:46 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=507</guid>
		<description><![CDATA[Tablets give you a lot of real estate to play around with. Google has created several features specifically to help developers take advantage of the extra screen space, most obviously the Fragment system. However, one of the most widely-used Android components, the ListView, has not been optimized for the wider screens you encounter on a [...]]]></description>
				<content:encoded><![CDATA[<p>Tablets give you a lot of real estate to play around with. Google has created several features specifically to help developers take advantage of the extra screen space, most obviously the <a href="http://developer.android.com/guide/components/fragments.html">Fragment</a> system. However, one of the most widely-used Android components, the <a href="http://developer.android.com/guide/topics/ui/layout/listview.html">ListView</a>, has not been optimized for the wider screens you encounter on a tablet.</p>
<p>Here at Velos, we&#8217;ve often found that presenting information in a grid format can look really sharp on tablet devices. You can present many grid items in a single row, which lets the user see a lot of information before they need to start scrolling. Since grids with fewer columns present nicely on handsets as well, it&#8217;s also a good way to maintain consistency between handset and tablet while still taking advantage of each device&#8217;s strengths.</p>
<p>There is a pretty significant limitation with the standard Android <a href="http://developer.android.com/guide/topics/ui/layout/gridview.html">GridView</a>, though: it cannot be sectioned. Like with the ListView, there&#8217;s no API-level ability to add sections that divide up the items within your collection. Designers still enjoy specifying them, though, and for good reason: section headers help give users crucial context and help them more easily navigate through a large body of information.</p>
<p>We had previously tackled the section header limitation for basic scrolling lists, but what about grids? Imagine that we want to create an app that presents the books in a user&#8217;s library. To make it easier to browse, we&#8217;ll put each author in a separate section. That way, you can quickly scroll down to find your author, and then look through the rows to find your particular book. (It&#8217;s tricky to find an author who&#8217;s buried between two other, more prolific writers.) The app might look something like this on a tablet:</p>
<div id="attachment_481" class="wp-caption aligncenter" style="width: 310px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/grid_tablet.png"><img class="size-medium wp-image-481" title="SectionedGrid" src="http://velosmobile.com/wp-content/uploads/2012/10/grid_tablet-300x187.png" alt="" width="300" height="187" /></a><p class="wp-caption-text">Sectioned grid displayed on a tablet.</p></div>
<p>&nbsp;</p>
<p>A phone could use a list, or just fewer columns, like so:</p>
<div id="attachment_482" class="wp-caption aligncenter" style="width: 178px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/grid_phone.png"><img class="size-medium wp-image-482" title="grid_phone" src="http://velosmobile.com/wp-content/uploads/2012/10/grid_phone-168x300.png" alt="" width="168" height="300" /></a><p class="wp-caption-text">Sectioned grid displayed on a phone.</p></div>
<p>This isn&#8217;t supported with any native Android UI components (at least, not to the best of my knowledge), but proved to be relatively simple to implement. The key is to forget about overriding GridView, and instead build this as a complex ListView. From the ListView&#8217;s perspective, each row is a single item; we can then enhance the Adapter subclass to manage the logic of translating to the specific item in each row.</p>
<p>When you take this approach, your Activity and ListView are very simple. All the grunt work needed to define sections, determine how many items fit within each section, where to display the headers, and so on, can be handled within the Adapter subclass.</p>
<p>We have created a reusable component that does exactly this, called SectionableAdapter. A SectionableAdapter overrides two important methods. getCount() handles the conversion between the actual number of items to display and the number of rows required to display them. For example, in the first screenshot above, the screen is displaying 17 items, split across 3 different sections, for a total of 4 rows. To do this, we keep track of how many cells we can fit in each row.</p>
<p><script src="https://gist.github.com/3947644.js?file=getCount.java"></script></p>
<p>Secondly, <code>getView()</code> similarly manages the translation between the list row, and the items within that row. From Android&#8217;s perspective, &#8220;David Mitchell&#8221; is a single list item; internally, we expand the 5 data items to draw within that row.</p>
<p>You can subclass SectionableAdapter and set it on your ListView to create your own sectioned grid. You just need to provide a few pieces of information.</p>
<ol>
<li>Create an XML layout file for each <em>row</em> within your grid. This will probably include an optional section header at the top, and one or more cell items below. You&#8217;ll likely want to create at least two versions of this file, one for handset and one for tablet, and you may even want to create different tablet versions to optimize for both 7&#8243; and 10&#8243; screens, or for tablets in portrait orientation.</li>
<li>Tell the adapter the resource IDs you have defined for the header and to hold your cell items. SectionableAdapter will then manage all the bookkeeping around this: determining whether the header should be made visible, counting the number of columns in your grid, etc.</li>
<li>Implement the abstract methods that tell the adapter how many sections you want to support, how many items are in each section, and what header to use for each section. These are completely under your control, and depending on how you source your Adapter data source they may be statically defined, loaded from the network, driven by user input, etc.</li>
<li>Finally, implement the bindView() method. This is basically equivalent to the standard getView() method, except the adapter has already taken care of the boilerplate tasks like recycling views, inflating new views if necessary, and so on. All you need to do now is populate your item&#8217;s UI, and attach any click handlers or other controls you want to support.</li>
</ol>
<p>Also of note: if you still want sectioned data, but want to present it in a list instead of a grid, that is supported by SectionableAdapter as a degenerate case where you provide a single column. This might be a useful approach if you are using fragments and don&#8217;t have much horizontal space on a tablet.</p>
<p>This class has served us very well so far. If you&#8217;d like to give it a whirl yourself, or check out the full code, head on over to our GitHub repository.</p>
<p><center><a class="large black nice button radius" href="https://github.com/velos/SectionedGrid">Download on GitHub</a></center></p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/10/24/a-sectioned-grid-for-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS 6 for developers</title>
		<link>http://velosmobile.com/2012/10/01/ios-6-for-developers/</link>
		<comments>http://velosmobile.com/2012/10/01/ios-6-for-developers/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 22:45:14 +0000</pubDate>
		<dc:creator>Bill Williams</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=441</guid>
		<description><![CDATA[Apple released iOS 6 to the public last week, just before the iPhone 5 went on sale. There are a lot of new APIs available to make apps better. Here are a few of the ones we&#8217;re most excited about. UICollectionView Older versions of iOS didn’t have a built-in control for displaying grid views, similar [...]]]></description>
				<content:encoded><![CDATA[<p>Apple released iOS 6 to the public last week, just before the iPhone 5 went on sale. There are a lot of new APIs available to make apps better. Here are a few of the ones we&#8217;re most excited about.</p>
<h3 id="uicollectionview">UICollectionView</h3>
<div id="attachment_468" class="wp-caption aligncenter" style="width: 179px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/ios6-collection-view.png"><img src="http://velosmobile.com/wp-content/uploads/2012/10/ios6-collection-view-169x300.png" alt="A collection view-style grid in the Pinterest app for iOS." title="Pinterest for iOS" width="169" height="300" class="size-medium wp-image-468" /></a><p class="wp-caption-text">This used to be a lot harder.</p></div>
<p>Older versions of iOS didn’t have a built-in control for displaying grid views, similar to the ones in Pinterest or iBooks. Anyone implementing a more complex UI (like Cover Flow) had to either hope a good open-source version existed or start from scratch.</p>
<p>Collection Views solve all these problems and more. Out of the box, it works just like a table view, but with the contents displayed in a grid. Built-in APIs make it easy to customize how the background, different sections, and individual items are displayed. For more complex interfaces, it’s possible to redefine how items are arranged using a layout manager.</p>
<p>Ash Furrow has a great article about <a href="http://ashfurrow.com/uicollectionview-example">using UICollectionView with NSFetchedResultsController</a> to make developing custom UI components even easier. And yes, collection views can even be used to <a href="https://github.com/schwa/Coverflow">re-create Cover Flow</a>.</p>
<h3 id="mapsandrouting">Maps and Routing</h3>
<div id="attachment_469" class="wp-caption aligncenter" style="width: 179px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/ios6-maps-sanfrancisco.png"><img src="http://velosmobile.com/wp-content/uploads/2012/10/ios6-maps-sanfrancisco-169x300.png" alt="San Francisco in the Maps app on iOS 6" title="San Francisco in the Maps app on iOS 6" width="169" height="300" class="size-medium wp-image-469" /></a><p class="wp-caption-text">Vector mapping means we can finally view The Embarcadero like it’s the end of the world.</p></div>
<p>There’s been a lot of press coverage since iOS 6 launched about what the switch from Google Maps data means for users. As unfortunate as some of the launch bugs might be, there are more than enough useful additions on the developer side to make it worthwhile in the long run.</p>
<p>Using new APIs in MapKit, apps can now display the name, phone number, and URL for one or many locations directly in the Maps app, or display this information while getting directions. Apps can now also provide directions between two addresses, opening up an entirely new way of interacting with apps that provide information about transit, highways, bicycles, and even cabs.</p>
<h3 id="sharing">Sharing</h3>
<p>iOS 6 adds a new Social framework. Building on the Twitter framework from iOS 5, it allows users to post to Facebook, Twitter, or Sina Weibo, without having to enter their username and password in every app they want to share from.</p>
<p>There’s also a new Activity View Controller, which you probably know better as the new sharing sheet in Safari. It can display a mix of built-in services (like Facebook or Twitter sharing) and custom options your app defines (like printing, or reposting on your own social network).</p>
<div id="attachment_466" class="wp-caption aligncenter" style="width: 179px"><a href="http://velosmobile.com/wp-content/uploads/2012/10/ios6-activity-controller.png"><img src="http://velosmobile.com/wp-content/uploads/2012/10/ios6-activity-controller-169x300.png" alt="An Activity View Controller in Safari on iOS 6" title="iOS 6 Activity View Controller" width="169" height="300" class="size-medium wp-image-466" /></a><p class="wp-caption-text">An Activity View Controller in Safari on iOS 6.</p></div>
<p>Using the Social framework and Activity controllers in iOS 6 make sharing easier for users and faster for developers.</p>
<h2 id="shouldmynewapprequireios6">Should my new app require iOS 6?</h2>
<div id="attachment_467" class="wp-caption aligncenter" style="width: 310px"><a href="http://david-smith.org/iosversionstats"><img src="http://velosmobile.com/wp-content/uploads/2012/10/ios6-adoption-lateseptember-300x287.png" alt="iOS 6 adoption rates in late September 2012." title="iOS 6 adoption rates" width="300" height="287" class="size-medium wp-image-467" /></a><p class="wp-caption-text">iOS adoption statistics courtesy David Smith.</p></div>
<p>These APIs are great, but are they enough to require iOS 6? The answer to that question really depends on the app that’s being developed. But with these great new APIs, the ease of over-the-air updates, and stats like the chart above, we think the answer for most of our clients is a resounding <em>yes</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/10/01/ios-6-for-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireframing with OmniGraffle Pro</title>
		<link>http://velosmobile.com/2012/07/30/wireframing-with-omnigraffle-pro/</link>
		<comments>http://velosmobile.com/2012/07/30/wireframing-with-omnigraffle-pro/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 18:17:01 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[omnigraffle]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=405</guid>
		<description><![CDATA[Wireframing is an important part of the development process. If it isn&#8217;t something your team does, it should be. Like blueprints for builders, wireframes give your team enough information to understand the product, estimate cost and architect foundations. This kind of information is invaluable in delivering a solid, well designed product on time and within [...]]]></description>
				<content:encoded><![CDATA[<p>Wireframing is an important part of the development process. If it isn&#8217;t something your team does, it should be. Like blueprints for builders, wireframes give your team enough information to understand the product, estimate cost and architect foundations. This kind of information is invaluable in delivering a solid, well designed product on time and within a budget.</p>
<p>There are several approaches to doing wireframing and many tools that can help you wireframe. At Velos, we use <a href="http://www.omnigroup.com/products/omnigraffle/">Omnigraffle Pro</a>, combined with our custom stencil composed of several freely available resources.</p>
<h3>Create a Template</h3>
<p>You&#8217;ll want a template which provides the background for your wireframes. Here are some simple steps to make your own template:</p>
<ol>
<li>Go to File > New Resource > New Template…</li>
<li>Choose a Blank file.</li>
<li>Modify the Canvas Size and Canvas Grid inspectors to be the following:</li>
<p><center><img src="http://velosmobile.com/wp-content/uploads/2012/07/inspector_canvas.png" alt="inspector_canvas.png" border="0" width="270" height="479" /></center></p>
<li>Save as &#8220;Wireframe&#8221; in the Templates directory.</li>
</ol>
<p>By setting snap to grid and having the major spacing be 10px with 10 steps, we can get pixel accurate wireframes. If you don&#8217;t set these, your views won&#8217;t fall on pixel boundaries as you nudge them around.</p>
<h3>Create a Stencil</h3>
<p>You&#8217;ll want to gather all your wireframing resources in one place. Perhaps you have a particular style to which you&#8217;d like to adhere. We&#8217;ve compiled our own Stencil from various sources. Here are some valuable stencil components that you can use to create your own.</p>
<ul>
<li><a href="https://github.com/davidmorford/iOSDesignStencils">iPad/iPhone wireframe Stencil</a> by David Morford.</li>
<li><a href="http://viget.com/inspire/an-omnigraffle-stencil-for-twitter-bootstrap-2">Twitter Bootstrap Stencil</a> by Vigit. </li>
<li><a href="http://glyphish.com">Glyphish Icons</a>. The vector versions of these icons work great in Omnigraffle to provide placeholder iconography.</li>
</ul>
<h3>Add Flow Graphics</h3>
<p>In order to make the flow of your wires obvious, you&#8217;ll want to have graphics that make it clear how a user gets from one screen to another. Omnigraffle Pro has quite a few arrow designs. We&#8217;ve set up arrows that jump over other arrows for easy visibility and also uses an orthogonal path.</p>
<p><center><img src="http://velosmobile.com/wp-content/uploads/2012/07/arrow_inspector.png" alt="arrow_inspector.png" border="0" width="270" height="335" /></center></p>
<p>Showing touches is important too. To illustrate a touch, we use circle with a semitransparent, large stroke. The end result looks something like this:</p>
<p><center><img src="http://velosmobile.com/wp-content/uploads/2012/07/touch.png" alt="touch.png" border="0" width="45" height="46" /></center></p>
<h3>Our Stencil</h3>
<p>To get you started, download a simplified version of our stencil. It has some other interesting things in it like vector forms of our branding and typography we commonly use. This allows you to keep a consistent style.</p>
<p><center><a class="large blue nice button radius" href="http://velosmobile.com/wp-content/uploads/2012/07/Velos-Mobile-Lite.gstencil.zip">⬇ Velos Mobile Lite.gstencil</a></center></p>
<h3>Example Wireframe</h3>
<p>Once everything is set up properly, it&#8217;s very easy to produce high quality wireframes. I&#8217;ve created a simple example out of Mail for iOS. It isn&#8217;t complete, but it gives you an idea of what the software is capable of.</p>
<p><center><br />
<a href="http://velosmobile.com/wp-content/uploads/2012/07/example1.jpg"><img src="http://velosmobile.com/wp-content/uploads/2012/07/example1-550x369.jpg" border="0" width="550" height="369" /></a></p>
<a class="large blue nice button radius" href="http://velosmobile.com/wp-content/uploads/2012/07/example.graffle.zip">⬇ Example.graffle</a>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/07/30/wireframing-with-omnigraffle-pro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Say Farewell to Pixels</title>
		<link>http://velosmobile.com/2012/06/07/say-farewell-to-pixels/</link>
		<comments>http://velosmobile.com/2012/06/07/say-farewell-to-pixels/#comments</comments>
		<pubDate>Thu, 07 Jun 2012 22:16:40 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=375</guid>
		<description><![CDATA[I often feel jealous of my iOS colleagues. How nice it must be, I think, to have a mere two set of screen resolutions to design for (four if we&#8217;re counting retina displays). How nice to have only two aspect ratios to worry about. It must be pleasant to always know exactly how tall the [...]]]></description>
				<content:encoded><![CDATA[<p>I often feel jealous of my iOS colleagues. How nice it must be, I think, to have a mere two set of screen resolutions to design for (four if we&#8217;re counting retina displays). How nice to have only two aspect ratios to worry about. It must be pleasant to always know exactly how tall the status bar is, and how much space to reserve for the navigation bar.  We Android developers are used to living in a messier world, with far greater variation among our devices.</p>
<h3>Adapting to Changes</h3>
<p>Android device fragmentation affects all aspects of development, but differences in screens probably have the biggest impacts on an app&#8217;s visual design. A few common resolutions account for the most popular devices: 1280&#215;800, 480&#215;800, 480&#215;854, 1280&#215;720, and 1024&#215;600 will cover most of today&#8217;s popular handsets and tablets. But, there will always be device manufacturers large and small that want to &#8220;push the boundaries&#8221; by releasing their own unique screens. Remember when the Droid X 2 came out? Motorola helpfully increased the screen resolution from earlier Droids&#8217; 480&#215;800 to 540&#215;960. That close-but-different size meant that many apps looked just a little wrong when running on the newer devices.</p>
<p>The simplest apps tend to do the best at running on a wide variety of Android screen sizes: as long as you stick to the default Android layouts and styles, the platform does a good job of resizing everything to fit appropriately. Unfortunately, this rarely looks impressive; it&#8217;s great for hobby projects or open-source apps, but I&#8217;ve never met a business that didn&#8217;t want to brand their app and make it look at least somewhat distinctive.</p>
<p>At the other extreme, many designers who are new to mobile software want to specify everything down to the pixel. They may pick two or three &#8220;target&#8221; screens, create a design that lays everything out precisely, and then hand it over to development to build. It&#8217;s easy to make this type of design run properly on the target devices, but harder to make it look correct on larger screens, and even more challenging to look good on smaller screens. It also can lead to some confused customers asking, &#8220;We already have the app running on a tablet that&#8217;s 800&#215;480, why can&#8217;t we just put that same design on a phone that&#8217;s 480&#215;800?&#8221;</p>
<h3>Designing for Differences</h3>
<p>You need two things to escape from the morass of Android screen layouts, a small tool and a big solution. The tool is to always use density-independent pixels (commonly expressed as &#8220;dp&#8221; or &#8220;dip&#8221;) in your layouts. Google has been very good at pushing this approach from the very beginning of Android, and describing the motivation behind it. A density-independent pixel will always occupy the same physical size on a screen, regardless of that screen&#8217;s dot pitch. 10 pixels on a ViewSonic 7&#8243; tablet will be much larger than 10 pixels on a Samsung Galaxy S III; however, 10 dp will be the same size on each.</p>
<p>Density-independent pixels are not a panacea, though. Even if you create your tablet UI using dp units, the UI still may draw off the edge of the screen when you try and run it on a handset. As a general rule, Android designs tend to do well when running on screens that are physically larger than the ones they were created for, but not in the other way. We&#8217;ve found that the most skilled Android designers we work with tend to do the following.</p>
<ol>
<li>Decide how many different designs you want to create. This is usually one handset and one tablet design, but it could easily be one small handset, one large handset, one 7&#8243; tablet and one 10&#8243; tablet.</li>
<li>For each design, build to the lowest common denominator: focus on the &#8220;worst&#8221; device that needs to be capable of running that app. If you want to use one design for both 480&#215;800 and 480&#215;854, design for the former, and it should look fine on the latter.</li>
<li>Decide whether to handle rotation. Android makes it fairly easy to support both portrait and landscape orientations, but it&#8217;s even easier (and cheaper) to only support one. People are used to portrait-only apps for handsets and landscape-only apps for tablets.</li>
<li>Try to keep app flow as consistent as possible across all designs, while taking advantage of the opportunities larger screens afford. That means using fragments or Master-Detail designs for tablets, which should ideally behave similarly to single-screen designs for handsets.</li>
<li>Design to the width, and let the height flow, scrolling vertically if necessary. This is the standard UI experience on most Android apps, including the pre-loaded apps like GMail and the browser.</li>
</ol>
<h3>Leave Room for More</h3>
<p>Finally, the part that separates veteran designers from novices: describe where unclaimed space should go. This is what will future-proof your design, and ensure that it will look fine on screen sizes that you don&#8217;t have to specifically build for.</p>
<p>I&#8217;m not a designer, but here&#8217;s a rough sketch of the type of design I love receiving.</p>
<p><a href="http://velosmobile.com/wp-content/uploads/2012/06/TabletDesign.png"><img class="aligncenter size-medium wp-image-377" title="Android tablet design" src="http://velosmobile.com/wp-content/uploads/2012/06/TabletDesign-300x147.png" alt="" /></a></p>
<p>This looks different from a standard Photoshop-style design, which precisely positions every element at a specific location. Instead, this type of design gives sizes for most elements, describes the margins and borders for nested elements, and most importantly, describes where unallocated space should go. This last point allows the design to &#8220;scale up&#8221; to arbitrarily larger devices.</p>
<h3>Partners in Design</h3>
<p>Ultimately, a successful mobile app will depend on the coordination of designer and developer. The designer is responsible for creating an attractive and useful interface; the developer should help by providing technical feedback and encouraging the designer to think about what will happen if the app runs on different types of devices. Iteration of design helps a lot, and spending a few days or weeks at the start of a project to future-proof an app design can save weeks or months of headaches at the end. Developers, be good to your designers, because everyone will judge your app by what they produce; designers, consult your developers, because they will make your app feel as good as it looks.</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/06/07/say-farewell-to-pixels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS Development Best Practices</title>
		<link>http://velosmobile.com/2012/05/17/ios-development-best-practices/</link>
		<comments>http://velosmobile.com/2012/05/17/ios-development-best-practices/#comments</comments>
		<pubDate>Thu, 17 May 2012 22:37:19 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[testflight]]></category>

		<guid isPermaLink="false">http://velosmobile.com/?p=356</guid>
		<description><![CDATA[There are a lot of ways to successfully develop an iOS application from the ground up. Working in a team can be difficult, especially if everyone has a different idea of how to accomplish the tasks at hand. Here are some general best practices for developing an iOS app. Register for GitHub. Using version control [...]]]></description>
				<content:encoded><![CDATA[<p>There are a lot of ways to successfully develop an iOS application from the ground up. Working in a team can be difficult, especially if everyone has a different idea of how to accomplish the tasks at hand. Here are some general best practices for developing an iOS app.</p>
<h3>Register for <a href="http://github.com/">GitHub</a>.</h3>
<p>Using version control of some kind is not optional. I suggest using GIT with GitHub as it adds several tools to help with collaboration such as a news feed of activity, wiki and simple bug tracker.</p>
<h3>Define some SCM best practices.</h3>
<p>First, start your project off on the right foot with a proper git ignore file, which GitHub provides <a href="https://github.com/github/gitignore">here</a>. Next set some guidelines for commit messages. Since you&#8217;re using a bug tracker (see below), define how commits that fix bugs should be expressed. Here&#8217;s an example of a good commit message.</p>
<blockquote><p>Fix for interaction being disabled for an entire view hierarchy on iOS 4.X whereas iOS 5.0 only disables interaction on the view being animated. Now the cancel button is tappable on iOS 4.X. Fixes #243.</p></blockquote>
<p>Now here&#8217;s a bad commit message.</p>
<blockquote><p>Fix for #243.</p></blockquote>
<p>Make sure your team knows that you need a detailed commit message and a reference to the bug number using a unified format. Some bug trackers can parse bug numbers and assign commits to the actual bug, making a descriptive commit even more important.</p>
<h3>Set up a bug tracker.</h3>
<p>This part might seem optional or unnecessary on small projects. It&#8217;s not. Having a bug tracker helps keep your developers focused on remaining tasks and helps management define releases.</p>
<p>At the very least, use GitHub Issues. But consider something a little more full-featured such as <a href="http://www.atlassian.com/software/jira/overview">JIRA</a>.</p>
<p>It&#8217;s a good idea to set up best practices for your bug tracker too. Here are a couple of my personal best practices.</p>
<p><strong>Everything goes in the bug tracker.</strong> No matter how trivial or silly a bug is, put it in the bug tracker. Don&#8217;t mention it to a developer over lunch and think that it will get fixed. It might, but it probably won&#8217;t.</p>
<p><strong>Don&#8217;t mix up severity and priority and use both.</strong> Severity is how severe a bug is. Does it cause a crash? Does it delete user data? Does it set the user&#8217;s house on fire? Priority is how important a bug is to finish. This can (and should) factor in severity, but all Severity 1 bugs aren&#8217;t necessarily the highest priority. If you have a crasher, but you can only reproduce by doing 16 tasks in a particular order, it&#8217;s probably not the highest priority. Conversely, a typo would be of the lowest severity. But if it&#8217;s your product name on your splash screen, that should be high priority.</p>
<p><strong>Use the features of the tracker.</strong> Add a build number to your bugs. Make sure that your bugs have target versions associated with them. Attach screenshots and include steps to reproduce. These all might seem obvious, but you&#8217;d be surprised how much time is wasted working off of incomplete bugs.</p>
<p><strong>Use assignment and bug state in a structured way.</strong> When a bug first gets put into the system, it gets assigned to a QA manager. QA then verifies the bug exists and cleans up the bug description and steps to reproduce. After verification, QA assigns it to an engineer. When the engineer is done, the bug is marked as fixed (<em>not</em> closed) and assigned back to QA. When the bug is verified fixed, it is closed.</p>
<h3>Register for <a href="https://testflightapp.com/">TestFlight</a>.</h3>
<p>TestFlight allows you to distribute iOS builds over the air to groups of testers. It&#8217;s magic. TestFlight also supports distribution groups. Meaning you can choose where your builds go. Set up a &#8220;Continuous&#8221; distribution group for the automated builds. It should only include your development team and perhaps your QA. These builds are bleeding edge, so sometimes they are bug-filled.</p>
<p>Adding new testers to TestFlight is a breeze. Once a tester registers for TestFlight and installs a simple configuration profile, you immediately have access to her device identifier. So your new tester process will go something like this:</p>
<ol>
<li>Invite them to your team on TestFlight.</li>
<li>Put them in a distribution group that makes sense.</li>
<li>Add the device to your provisioning portal.</li>
<li>Generate a new provisioning profile.</li>
<li>Add the profile to the build machine (see below).</li>
</ol>
<h3>Setup a build machine.</h3>
<p>Your build machine sits there, listens for updates on GitHub, builds the latest source tree and pushes the new build to TestFlight. It is the hub that stitches all these pieces together.</p>
<p><a href="http://en.wikipedia.org/wiki/Continuous_integration">Continuous integration</a> is a valuable tool for development. Being able to discover bugs as soon as they develop is required for a quality software product. If bugs are only caught near the end of a development cycle, be prepared to blow right past the due date.</p>
<p>Several tools can help with this battle against bugs. <a href="http://jenkins-ci.org/">Jenkins</a> is a continuous integration tool that can kick off builds as soon as commits hit your repository. Tests can be run as part of the build and developers can be held personally responsible for failures introduced.</p>
<p>After a successful build, <a href="https://testflightapp.com/">TestFlight</a> can be used to push new builds directly to your testers. Automated, bleeding edge builds can be sent to your internal QA, and select builds can be promoted to your clients or external beta testers.</p>
<p>I won&#8217;t go into details, but if you&#8217;d like a good tutorial on setting up Jenkins + TestFlight, check out <a href="http://blog.shinetech.com/2011/06/23/ci-with-jenkins-for-ios-apps-build-distribution-via-testflightapp-tutorial/">this tutorial</a>.</p>
<h3>Develop.</h3>
<p>Ah, the hard part. Definitely integrate the <a href="https://testflightapp.com/sdk/">TestFlight SDK</a> into your app. It brings a couple cool features to the table:</p>
<ul>
<li>Crash reporting. This is the killer feature. TestFlight will collate and symbolicate your crash logs for you.</li>
<li>The <code>TFLog()</code> calls for the sessions. In development, just define <code>NSLog</code> as <code>TFLog</code>.</li>
<li>A list of activity in your application. By using &#8220;checkpoints&#8221; you can see when users are doing particular tasks.</li>
<li>Update notifications. When your build server kicks out a new build, users of the old build will get an in-app notification of the build.</li>
</ul>
<p>So that&#8217;s a high-level overview of best practices when developing a project on iOS. I use these steps <em>even when I&#8217;m working by myself.</em> When working in a small or large team, being able during the debug cycle to iterate on a bug and get a build to the testers within minutes, is incredibly valuable. Once you work on a project like this, going back to ad-hoc builds and disorganized bug reporting will be unthinkable.</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/05/17/ios-development-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fragging Fragments</title>
		<link>http://velosmobile.com/2012/04/30/fragging-fragments/</link>
		<comments>http://velosmobile.com/2012/04/30/fragging-fragments/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 16:14:17 +0000</pubDate>
		<dc:creator>chris</dc:creator>
				<category><![CDATA[work]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://velosmobile.com/new-wp/?p=242</guid>
		<description><![CDATA[Android has been enthusiastically pushing fragments ever since they were added in Honeycomb. They were primarily created to improve code re-use across handset and tablet UIs; in the most common case, tablets will load fragments into two panes on one screen, while handsets will load one fragment per screen. However, fragments also get used in [...]]]></description>
				<content:encoded><![CDATA[<p>Android has been enthusiastically pushing <a href="http://developer.android.com/guide/topics/fundamentals/fragments.html" target=_blank>fragments</a> ever since they were added in Honeycomb. They were primarily created to improve code re-use across handset and tablet UIs; in the most common case, tablets will load fragments into two panes on one screen, while handsets will load one fragment per screen. However, fragments also get used in other cases. They&#8217;re the preferred replacement for the old <a href="http://developer.android.com/reference/android/app/TabActivity.html" target=_blank>Tab</a>, and play a key role in the very useful <a href="http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html" target=_blank>ViewPager</a> support class.</p>
<p>This is great when it works, but makes it all the more annoying when they fail to behave. We recently ran into a problem while building a UI that involved several tabs. When launching a new Activity from a tab other than the first one, the app would crash with a NullPointerException deep within the FragmentManager call stack.</p>
<p>As usual, the open-source nature of Android makes these sorts of bugs easier to track down (have I mentioned how glad I am to finally have source again after going on a fast during the Honeycomb era?). It turns out that it&#8217;s  a problem with FragmentManager, which fails to create an internal Bundle under certain circumstances (specifically, if the internal &#8220;user visible hint&#8221; flag hasn&#8217;t been raised). A few enterprising souls have recently identified the <a href="https://android-review.googlesource.com/#/c/31261/" target=_blank>bug</a>, and Google should be patching it shortly.</p>
<p>Of course, there&#8217;s still a question of how to solve the problem. For now, we&#8217;re taking the approach of avoiding the bug by overriding <code>onSaveInstanceState</code> in our Activity and not calling through to the superclass. That works fine for our app, but if yours relies on this method to save its UI state, then you&#8217;ll need to selectively replicate that functionality, which would be tedious and risky. Once the bug is fixed, you can grab the updated build of the support package; however, this requires you to convert all of your Fragment-related code to use the android.support.v4 versions instead of the android.app versions, which in turn may cause other issues &#8211; for example, the android.support.v13 version of FragmentPagerAdapter uses regular Fragments and not the v4 support versions. Eventually the fix should show up in the standard platform version of FragmentManager, but not every device will necessarily get that fix.</p>
<p>The morals of the story: More recent additions to an API should be viewed with caution. Take advantage of the Android source code &#8211; if you haven&#8217;t already linked to it in Eclipse, I highly recommend it, as it will even make your own bugs easier to find. And do report real issues you find to Google so they can fix them.</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/04/30/fragging-fragments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coffee on the block: FOURBARREL</title>
		<link>http://velosmobile.com/2012/03/10/coffee-on-the-block-fourbarrel/</link>
		<comments>http://velosmobile.com/2012/03/10/coffee-on-the-block-fourbarrel/#comments</comments>
		<pubDate>Sat, 10 Mar 2012 18:08:21 +0000</pubDate>
		<dc:creator>ericTAMO</dc:creator>
				<category><![CDATA[culture]]></category>
		<category><![CDATA[coffee]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[office]]></category>

		<guid isPermaLink="false">http://velosmobile.com/new-wp/?p=243</guid>
		<description><![CDATA[While looking for office space in SF we were very attracted to the Mission district: food, bars, music, parks, people, and coffee. I thought our vicinity to the 16th Mission BART station was going to be my prize but after finding our space I was so excited to find ourselves a couple doors down from [...]]]></description>
				<content:encoded><![CDATA[<p>While looking for office space in SF we were very attracted to the Mission district: food, bars, music, parks, people, and coffee. I thought our vicinity to the 16th Mission BART station was going to be my prize but after finding our space I was so excited to find ourselves a couple doors down from Fourbarrel coffee. Not only are they roasting great coffee on site and preparing it correctly, they also worked with the City to permanently occupy a few parking spaces to provide more outdoor seating for patrons and places for securely locking your bike while giving due patronage to the cafe. Mid week I won&#8217;t lie, caffeine tends to get me down, so I aim for a slightly less amped stimulant, and Fourbarrel&#8217;s hot cocoa definitely hits the spot; made with another Mission local, Dandelion Chocolate.</p>
<p>Needless to say we didn&#8217;t even bother buying a coffee pot when we moved in, our neighbors will always make better coffee than our pot ever would have yielded. It kinda sucks that my first coffee blog post is probably the best coffee I have ever tasted, perhaps this will drain my motivation to make a second post? Nah.</p>
<p>One more reason to call a meeting with Velos and meet up in our hood, we&#8217;ll feed you coffee from <a href="http://fourbarrelcoffee.com/">FOURBARREL</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/03/10/coffee-on-the-block-fourbarrel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Office!</title>
		<link>http://velosmobile.com/2012/01/21/new-office/</link>
		<comments>http://velosmobile.com/2012/01/21/new-office/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 20:16:40 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[office]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[party]]></category>

		<guid isPermaLink="false">http://velosmobile.com/new-wp/?p=11</guid>
		<description><![CDATA[We moved into a new office! It&#8217;s in the wonderful Mission District here in San Francisco. Just a stones throw from Four Barrel Coffee and many other great places. &#160; To celebrate our new offices, we had a few people over and called it an office warming. There was laughing, there was crying. There was [...]]]></description>
				<content:encoded><![CDATA[<p>We moved into a new office! It&#8217;s in the wonderful Mission District here in San Francisco. Just a stones throw from Four Barrel Coffee and many other great places.</p>
<p>&nbsp;</p>
<p>To celebrate our new offices, we had a few people over and called it an office warming. There was laughing, there was crying. There was also RockBand. See some shots below.</p>

<a href='http://velosmobile.com/2012/01/21/new-office/img_5983/' title='IMG_5983'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5983-e1335835098113-150x150.jpg" class="attachment-thumbnail" alt="IMG_5983" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5979-2/' title='IMG_5979-2'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5979-2-e1335835309137-150x150.jpg" class="attachment-thumbnail" alt="IMG_5979-2" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5969/' title='IMG_5969'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5969-150x150.jpg" class="attachment-thumbnail" alt="IMG_5969" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5966/' title='IMG_5966'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5966-e1335835056349-150x150.jpg" class="attachment-thumbnail" alt="IMG_5966" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5952/' title='IMG_5952'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5952-e1335835170751-150x150.jpg" class="attachment-thumbnail" alt="IMG_5952" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5949/' title='IMG_5949'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5949-150x150.jpg" class="attachment-thumbnail" alt="IMG_5949" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5947/' title='IMG_5947'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5947-150x150.jpg" class="attachment-thumbnail" alt="IMG_5947" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5960-2/' title='IMG_5960-2'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5960-2-e1335835213377-150x150.jpg" class="attachment-thumbnail" alt="IMG_5960-2" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5939/' title='IMG_5939'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5939-e1335835239183-150x150.jpg" class="attachment-thumbnail" alt="IMG_5939" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5937/' title='IMG_5937'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5937-e1335835268431-150x150.jpg" class="attachment-thumbnail" alt="IMG_5937" /></a>
<a href='http://velosmobile.com/2012/01/21/new-office/img_5987/' title='IMG_5987'><img width="150" height="150" src="http://velosmobile.com/wp-content/uploads/2012/04/IMG_5987-150x150.jpg" class="attachment-thumbnail" alt="IMG_5987" /></a>

]]></content:encoded>
			<wfw:commentRss>http://velosmobile.com/2012/01/21/new-office/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
