<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Cantina Consulting</title>
	
	<link>http://www.cantinaconsulting.com</link>
	<description />
	<pubDate>Thu, 09 Jul 2009 13:31:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CantinaConsulting" type="application/rss+xml" /><item>
		<title>Boston Grails Users’ Group</title>
		<link>http://www.cantinaconsulting.com/2009/06/02/boston-grails-users-group/</link>
		<comments>http://www.cantinaconsulting.com/2009/06/02/boston-grails-users-group/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:14:26 +0000</pubDate>
		<dc:creator>steve</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=181</guid>
		<description><![CDATA[As I&#8217;ve mentioned before, we here at Cantina are big fans of Groovy and Grails, and we are disappointed that the language is not used more widely. To do our part to spread joy that is Groovy, we&#8217;ve started a group on Meetup.com for Boston-based users (start local!). Check us out here: http://www.meetup.com/Grails-Boston. Our focus [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve mentioned before, we here at Cantina are big fans of Groovy and Grails, and we are disappointed that the language is not used more widely. To do our part to spread joy that is Groovy, we&#8217;ve started a group on Meetup.com for Boston-based users (start local!). Check us out here: <a title="Grails Group on Meetup" href="http://www.meetup.com/Grails-Boston" target="_blank">http://www.meetup.com/Grails-Boston</a>. Our focus will be to get together with other fans of Groovy/Grails and share ideas, present work members have done, show-off some plugins (check out <a title="Cantina Consutling Grails Plugins" href="link http://www.cantinaconsulting.com/grails-plugins/" target="_blank">ours</a>), and generally expand everyone&#8217;s knowledge of the language and framework. We&#8217;d love to have anyone who&#8217;s interested join us, even those new to Grails.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/06/02/boston-grails-users-group/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Real Time Web</title>
		<link>http://www.cantinaconsulting.com/2009/05/20/the-real-time-web/</link>
		<comments>http://www.cantinaconsulting.com/2009/05/20/the-real-time-web/#comments</comments>
		<pubDate>Wed, 20 May 2009 14:06:06 +0000</pubDate>
		<dc:creator>carm</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[real-time]]></category>

		<category><![CDATA[Techcrunch]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=165</guid>
		<description><![CDATA[The changing dynamics of the web has been something we&#8217;ve talked a lot about lately.   The shift toward real time services has impacted the way companies are thinking about the web.  Twitter is currently leading the charge in the real time information and many people think it&#8217;s going to become the real time search engine [...]]]></description>
			<content:encoded><![CDATA[<p>The changing dynamics of the web has been something we&#8217;ve talked a lot about lately.   The shift toward real time services has impacted the way companies are thinking about the web.  Twitter is currently leading the charge in the real time information and many people think it&#8217;s going to become the real time search engine of the web, ousting Google when it comes to real time information and current events.</p>
<p><a href="http://www.Techcrunch.com">Techcrunch</a> just wrote a great article on how we&#8217;re shifting away from <a href="http://www.techcrunch.com/2009/05/17/jump-into-the-stream/">pages and into streams</a>.  I think the article raises a great point that this is a huge opportunity for start-ups to really change the status quo and start developing applications that work in real time.</p>
<p>So, the question I would raise is how can your company shift it&#8217;s products toward a real time web?  Think about the big internet brands and what would happen if they had to live in the real time web.  What if companies like Amazon, Ebay, and Google had real time services?  We also know that every time our economy has gone through a shift, new companies and ideas emerge that make us re-think our perception of the web.  In other words, if you&#8217;ve got an idea for the real time web, this is your chance to go out and build it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/05/20/the-real-time-web/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Plugin Development in Grails</title>
		<link>http://www.cantinaconsulting.com/2009/05/19/plugin-development-in-grails/</link>
		<comments>http://www.cantinaconsulting.com/2009/05/19/plugin-development-in-grails/#comments</comments>
		<pubDate>Wed, 20 May 2009 00:22:18 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Groovy on Grails]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=159</guid>
		<description><![CDATA[We&#8217;ve had a bit of time to jump back into Grails plugin development (or maintenance as it were) and couldn&#8217;t be happier to find the recent improvements in Grails 1.1.  The biggest improvement (though perhaps not advertised as such) to me, was the inclusion of functionality that allows plugin developers to build test applications [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve had a bit of time to jump back into Grails plugin development (or maintenance as it were) and couldn&#8217;t be happier to find the recent improvements in Grails 1.1.  The biggest improvement (though perhaps not advertised as such) to me, was the inclusion of functionality that allows plugin developers to build test applications against the live, &#8220;unpacked&#8221; version of the plugin, which is to say, the Grails application that implements the plugin itself.</p>
<p>This may sound esoteric, but to someone doing plugin development in Grails, it&#8217;s a life saver, and here&#8217;s why.</p>
<p>When building a plugin for Grails, the plugin itself is built as a Grails application.  This has many benefits, including in some cases being able to run the plugin and test controllers and domain classes directly in the running plugin.  However, most, if not all plugins are intended to <em>plug into</em> another Grails application.  Given that, the only real way to test the usability of your plugin API, and whether the plugin works in the context of larger Grails application, is to install the plugin into another Grails application.  Here&#8217;s an example:</p>
<ol>
<li>I&#8217;m developing Plugins A and B to be installed in a new Grails CMS application I&#8217;m building</li>
<li>Plugin A depends on Plugin B to function</li>
<li>Once Plugin B is in good enough shape, I&#8217;ll install it into Plugin A using the Grails <em>install-plugin</em> command</li>
<li>Once Plugin A is in good enough shape, I can install it and Plugin B into my Grails CMS application</li>
<li>After testing the CMS for a while, I discover a bug in Plugin B which also requires a small change in Plugin A to accommodate the bug fix (are you still with me?)</li>
<li>I fix the bug in Plugin B and repackage</li>
<li>I remove Plugin B from Plugin A and install the latest version of Plugin B into Plugin A to make the changes required in Plugin A and repackage</li>
<li>In the CMS application, I remove both of the plugins and reinstall both Plugins into the CMS</li>
<li>I become tired of installing and uninstalling plugins and go out for beers</li>
</ol>
<p>With Grails 1.1, this development cycle is improved drastically.  Now, during development you can provide explicit locations for Grails plugin projects, without needing to install the plugin, to develop against that plugin.  Here&#8217;s an excerpt from the <a href="http://grails.org/1.1+Release+Notes">Grails 1.1 release notes</a>:</p>
<blockquote><p>An application can now load plugins from anywhere on the file system, even if they have not been installed. Simply add the location of the (unpacked) plugin to you BuildConfig.groovy file:</p>
<p><code>// Useful to test plugins you are developing.<br />
grails.plugin.location.jsecurity = "/home/dilbert/dev/plugins/grails-jsecurity"</p>
<p>// Useful for modular applications where all plugins and<br />
// applications are in the same directory.<br />
grails.plugin.location.'grails-ui' = "../grails-grails-ui"</code></p>
<p>This is particularly useful in two cases:</p>
<ol>
<li>You are developing a plugin and want to test it in a real application without packaging and installing it first.</li>
<li>You have split an application into a set of plugins and an application, all in the same &#8220;super-project&#8221; directory.
</li>
</ol>
</blockquote>
<p>Now if you want to test your plugins in the context of a larger application, you can do so without the pain of constant reinstallation.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/05/19/plugin-development-in-grails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Applications - What does it take?</title>
		<link>http://www.cantinaconsulting.com/2009/05/18/web-applications-what-does-it-take/</link>
		<comments>http://www.cantinaconsulting.com/2009/05/18/web-applications-what-does-it-take/#comments</comments>
		<pubDate>Mon, 18 May 2009 18:56:18 +0000</pubDate>
		<dc:creator>carm</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[startups]]></category>

		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=150</guid>
		<description><![CDATA[One of the founders of Woofoo just wrote a terrific article on what it takes to build a web application called &#8220;Web App Autopsy&#8220;.  They were lucky enough to get some great information from three other firms, Blinksale, Feedburner and RegOnline.  I think the charts and information they put together are great, but if you [...]]]></description>
			<content:encoded><![CDATA[<p>One of the founders of Woofoo just wrote a terrific article on what it takes to build a web application called &#8220;<a href="http://particletree.com/features/web-app-autopsy/" target="_blank">Web App Autopsy</a>&#8220;.  They were lucky enough to get some great information from three other firms, <a href="http://www.blinksale.com" target="_blank">Blinksale</a>, <a href="http://www.feedburner.com" target="_blank">Feedburner</a> and <a href="http://www.regonline.com" target="_blank">RegOnline</a>.  I think the charts and information they put together are great, but if you dig into the numbers a little deeper you start to see what it really takes to build a web application.</p>
<p>From a time perspective (you have to exclude RegOnline because it was a nights a weekend project) it takes on average about 5 months to launch one of these applications and you need roughly 3 or 4 engineers to get it done.  My guess is that most of these companies boot strapped their development but current estimates say developing a web application costs anywhere from 50k to a few hundred based on complexity.  It&#8217;s also great to see these rapid development frameworks, such as Ruby on Rails, are accelerating development and time to market.</p>
<p>Lastly, I would also emphasize their focus on business processes. Many early stage companies completely neglect support needs, such as returns, customer compliants, etc.  It can end up costing you a lot of time and money if you don&#8217;t have systems on the back end to handle customer support issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/05/18/web-applications-what-does-it-take/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Putting a Stranglehold on your GUI Applications with wxPython</title>
		<link>http://www.cantinaconsulting.com/2009/05/14/wxpython_first_impressions/</link>
		<comments>http://www.cantinaconsulting.com/2009/05/14/wxpython_first_impressions/#comments</comments>
		<pubDate>Thu, 14 May 2009 22:12:32 +0000</pubDate>
		<dc:creator>steve</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[wxPython]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=152</guid>
		<description><![CDATA[It&#8217;s been a few weeks now since I signed up with the group here at Cantina, and so far I&#8217;ve had a great time. I&#8217;ve had the opportunity to learn quite a bit about online video distribution &#38; technologies, expand my knowledge of Flex / Flash, play around with Amazon&#8217;s Cloud solutions, and learn the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a few weeks now since I signed up with the group here at Cantina, and so far I&#8217;ve had a great time. I&#8217;ve had the opportunity to learn quite a bit about online video distribution &amp; technologies, expand my knowledge of Flex / Flash, play around with Amazon&#8217;s Cloud solutions, and learn the excellent framework <a title="Grails" href="http://www.grails.org/" target="_blank">Groovy on Grails</a>. If you are familiar with Rails and like Java, I suggest giving it a try. The rest of the guys here are big fans and we&#8217;re doing our part to expand the Grails community and develop some great plugins.</p>
<p>In turn, I hope to encourage the use of my current favorite language, Python (see <a href="http://www.diveintopython.org/" target="_blank">http://www.diveintopython.org/</a> for a good tutorial). For an interpreted language (it does compile to c byte code at runtime), its capabilities and community support are overwhelmingly substantial. I&#8217;m continually surprised as I discover more; its breadth is so great, that Python leaves itself open to <a title="Python - flying" href="http://xkcd.com/353/" target="_blank">satire</a> ( also: <a href="http://xkcd.com/409/" target="_blank">here</a> and <a href="http://xkcd.com/413/" target="_blank">here</a>). I could drone on,  evangelizing its advantages at some detail (and bore everyone to tears, I&#8217;m sure), but that&#8217;s not why I&#8217;m writing today. No, the point here is to give a quick presentation on a particular package I&#8217;ve just started using that amazes me, and it should get more use: <a title="wxPython.org" href="http://www.wxpython.org/" target="_blank">wxPython</a>.</p>
<p>WxPython is module for Python that is essentially a wrapper for an open source project called <a href="http://wxwidgets.org/" target="_blank">wxWidgets</a>, so most of the credit should go to them. WxWidgets is certainly widely used (link: <a href="http://wxwidgets.org/about/users.htm" target="_blank">http://wxwidgets.org/about/users.htm</a> ); it&#8217;s a package that allows developers to quickly and easily access the GUI components in Windows, OS X, and various flavors of Linux. This allows development of applications that look native to the OS. WxPython allows one to rapidly develop applications entirely in Python, that look native to the OS. Imagine writing an application in OS X, then moving the code to a Windows or Ubuntu machine and having it work and look perfectly without any modifications! No more dealing with .dlls or compiling on individual machines.. just &#8216;python &lt;appname&gt;.py&#8217;.</p>
<p>In practice, it&#8217;s surprisingly easily to generate an entire event-driven application. The basic order of implementation is (1) design layout of your buttons,menus, widgets, etc, (2) implement event handlers, (3) bind event listeners to buttons / actions. I&#8217;d post some of my code, but it&#8217;s almost all currently in an NDA&#8217;ed project, so instead here&#8217;s some sample code from <a href="http://wiki.wxpython.org/AnotherTutorial" target="_blank">http://wiki.wxpython.org/AnotherTutorial</a> that creates a program with a toolbar:<br />
<span style="color: #0000ff;"><br />
</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;">#!/usr/bin/python</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
# toolbar.py</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
import wx</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
class MyToolBar(wx.Frame):</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"> def __init__(self, parent, id, title):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(350, 250))</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"><br />
vbox = wx.BoxSizer(wx.VERTICAL)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.AddSimpleTool(1, wx.Image(&#8217;stock_new.png&#8217;, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), &#8216;New&#8217;, &#8221;)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.AddSimpleTool(2, wx.Image(&#8217;stock_open.png&#8217;, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), &#8216;Open&#8217;, &#8221;)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.AddSimpleTool(3, wx.Image(&#8217;stock_save.png&#8217;, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), &#8216;Save&#8217;, &#8221;)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.AddSeparator()</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.AddSimpleTool(4, wx.Image(&#8217;stock_exit.png&#8217;, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), &#8216;Exit&#8217;, &#8221;)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> toolbar.Realize()</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> vbox.Add(toolbar, 0, border=5)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.SetSizer(vbox)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.statusbar = self.CreateStatusBar()</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.Centre()</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"><br />
self.Bind(wx.EVT_TOOL, self.OnNew, id=1)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.Bind(wx.EVT_TOOL, self.OnOpen, id=2)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.Bind(wx.EVT_TOOL, self.OnSave, id=3)</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.Bind(wx.EVT_TOOL, self.OnExit, id=4)</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
def OnNew(self, event):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.statusbar.SetStatusText(&#8217;New Command&#8217;)</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
def OnOpen(self, event):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.statusbar.SetStatusText(&#8217;Open Command&#8217;)</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
def OnSave(self, event):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.statusbar.SetStatusText(&#8217;Save Command&#8217;)</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
def OnExit(self, event):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> self.Close()</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
class MyApp(wx.App):</span></p>
<p style="text-align: left; padding-left: 60px;"><span style="color: #0000ff;"> def OnInit(self):</span></p>
<p style="text-align: left; padding-left: 90px;"><span style="color: #0000ff;"> frame = MyToolBar(None, -1, &#8216;toolbar.py&#8217;)</span></p>
<p style="text-align: left; padding-left: 90px;"><span style="color: #0000ff;"> frame.Show(True)</span></p>
<p style="text-align: left; padding-left: 90px;"><span style="color: #0000ff;"> return True</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;"><br />
app = MyApp(0)</span></p>
<p style="text-align: left; padding-left: 30px;"><span style="color: #0000ff;">app.MainLoop()</span></p>
<pre style="text-align: left;"><span style="color: #ff0000;">
</span></pre>
<p><span style="color: #000000;">results in this (on Ubuntu):</span></p>
<div id="attachment_153" class="wp-caption aligncenter" style="width: 363px"><a href="http://www.cantinaconsulting.com/wp-content/toolbar.png"><img class="size-full wp-image-153" title="Ubuntu_wxpython_app" src="http://www.cantinaconsulting.com/wp-content/toolbar.png" alt="Resulting application in Ubuntu" width="353" height="263" /></a><p class="wp-caption-text">Resulting application in Ubuntu</p></div>
<p>While not much to look at, certainly, briefly think about what&#8217;s going on here. In ~45 lines of code, we have a fully functional application. It doesn&#8217;t do much,  yet, but imagine what we could do if you started hooking up some of your existing Python code, or hooking in some other Python modules. There&#8217;s a lot of power in this; the mind can hardly grasp the possibilities of, say, Windows apps powered by Python (take that, Visual Studio). I feel strongly that it has the potential to handle some serious projects, if given the opportunity.</p>
<p>This would be intensive, but I&#8217;m still learning wxPython myself. So far, it&#8217;s been great fun, and I highly recommend others to check it out. I&#8217;d love to see some examples out there of anyone who&#8217;s developed apps in the framework (a quick search doesn&#8217;t reveal much), and perhaps I&#8217;ll post some of my own as I start using it more.</p>
<p>Until then, try taking a look at wxPython.org (link) and the wxPython wiki (link). Give it a shot; I&#8217;m sure you&#8217;ll love it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/05/14/wxpython_first_impressions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Stephen Pember joins Cantina as Technical Principal</title>
		<link>http://www.cantinaconsulting.com/2009/04/27/stephen-pember-joins-cantina-as-technical-principal/</link>
		<comments>http://www.cantinaconsulting.com/2009/04/27/stephen-pember-joins-cantina-as-technical-principal/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 19:00:11 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[People]]></category>

		<category><![CDATA[newhire]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=140</guid>
		<description><![CDATA[Please join me in welcoming Stephen Pember as the newest Technical Principal Consultant at Cantina.  After a long and rather selective search, we&#8217;re very excited to bring Steve on board to increase our technical capabilities and to help us continue to deliver a great consulting experience to our clients.
Steve brings a wealth of experience [...]]]></description>
			<content:encoded><![CDATA[<p>Please join me in welcoming Stephen Pember as the newest Technical Principal Consultant at Cantina.  After a long and rather selective search, we&#8217;re very excited to bring Steve on board to increase our technical capabilities and to help us continue to deliver a great consulting experience to our clients.</p>
<p>Steve brings a wealth of experience to the table, including research in social network analysis and data mining during his Master&#8217;s at Tufts University, as well as extensive consulting experience delivering complex client projects in Flex/Flash, Java, Python, and PHP, to name a few.  </p>
<p>He&#8217;s been a great asset so far, as in the 3 weeks he&#8217;s been with us he&#8217;s brought in two new clients, helped us through crunch mode to launch a major project for one of our largest clients, and has begun restructuring our server architecture.  Not bad!</p>
<p>Read more about Steve and his experience on our <a href="http://www.cantinaconsulting.com/about/">About</a> page, or visit him on <a href="http://www.linkedin.com/in/spember">LinkedIn</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/04/27/stephen-pember-joins-cantina-as-technical-principal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web-based video on the iPhone sans Flash</title>
		<link>http://www.cantinaconsulting.com/2009/02/10/web-based-video-on-iphone-sans-flash/</link>
		<comments>http://www.cantinaconsulting.com/2009/02/10/web-based-video-on-iphone-sans-flash/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 15:44:04 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[RIA / Flash]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=108</guid>
		<description><![CDATA[Brightcove isn&#8217;t waiting around for Flash to be supported on the iPhone.  They&#8217;ve recently published an article in the help section of their web site which illustrates how easy it is to build web applications targeted for the iPhone using Brightcove&#8217;s Media API, without any server side code.
http://help.brightcove.com/developer/samples/iPhone/iPhone-portal.cfm
This sample application highlights a couple interest [...]]]></description>
			<content:encoded><![CDATA[<p>Brightcove isn&#8217;t waiting around for Flash to be supported on the iPhone.  They&#8217;ve recently published an article in the help section of their web site which illustrates how easy it is to build web applications targeted for the iPhone using Brightcove&#8217;s <a href="http://help.brightcove.com/developer/docs/mediaapi/media-API-getting-started.cfm">Media API</a>, without any server side code.</p>
<p><a href="http://help.brightcove.com/developer/samples/iPhone/iPhone-portal.cfm">http://help.brightcove.com/developer/samples/iPhone/iPhone-portal.cfm</a></p>
<p>This sample application highlights a couple interest points regarding the iPhone and Brightcove:</p>
<ul>
<li>Just because the iPhone doesn&#8217;t currently support Flash doesn&#8217;t mean that you can&#8217;t deliver high quality video via web applications.  Brightcove&#8217;s sample iPhone web application simply loads an h.264 encoded QuickTime into the iPhone browser which can be played through the iPhone&#8217;s built-in QuickTime video player.  No Flash needed.</li>
<li>With some fairly basic JavaScript, you can achieve functionality in a web application similar to native applications with support for clean and &#8220;touchable&#8221; menus, and orientation (portrait vs. landscape) detection</li>
<li>Brightcove&#8217;s RESTful <a href="http://help.brightcove.com/developer/docs/mediaapi/media-API-getting-started.cfm">Media API</a> provides a flexible way to incorporate videos published through their platform, without requiring a Flash video player</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/02/10/web-based-video-on-iphone-sans-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Random Thoughts: Thick and Thin (Clients) and other Google-isms</title>
		<link>http://www.cantinaconsulting.com/2009/02/04/random-thoughts-thick-and-thin-clients-and-other-google-isms/</link>
		<comments>http://www.cantinaconsulting.com/2009/02/04/random-thoughts-thick-and-thin-clients-and-other-google-isms/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 15:53:00 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=105</guid>
		<description><![CDATA[At Cantina, we use Google in practically everything we do.  We make heavy use of Google Apps for Domains to manage our email, calendars, and internal documentation.  YouTube is a constant distraction, er, research tool.  Some of us share photos via Picasa.  SketchUp can be a handy tool for working on [...]]]></description>
			<content:encoded><![CDATA[<p>At Cantina, we use Google in practically everything we do.  We make heavy use of <a href="https://www.google.com/a/">Google Apps for Domains</a> to manage our email, calendars, and internal documentation.  YouTube is a constant distraction, er, research tool.  Some of us share photos via <a href="http://picasa.google.com/">Picasa</a>.  SketchUp can be a handy tool for working on <a href="http://www.wonderhowto.com/how-to/video/how-to-create-a-poker-game-in-sketchup-256990/">game development</a>.  And every once in a while, we have to do a Google search (yes even we sometimes have to look things up).</p>
<p>As time marches on, it is becoming clearer that Google is focusing on the browser as the primary application development platform.  This is evident with their release of <a href="http://www.google.com/chrome">Chrome</a>, their first foray into the browser market which attempts to make browsing faster and more reliable, and even more clear with the more recent news that Google has managed to get <a href="http://googlesystem.blogspot.com/2009/01/offline-gmail.html">Gmail to work offline</a>, with the use of <a href="http://gears.google.com/">Google Gears</a>.</p>
<p>While I find the ability to have a fully browser-based application running offline impressive, my first thought upon hearing such news is: why?  I may be old fashioned, but I still use an actual email client to read my mail (Apple’s Mail application).  I’ve been able to read my mail offline for as long as I can remember.  Mail clients have been around for years (decades?) and have been admirably solving the problem of reading and writing email for a long time.  I realize that web-based email simplifies the process of reading and writing email by not requiring you to have to configure an email program with the necessary settings.  But what about the other issues that make it a challenge?  Being a developer, my browser is always crashing (and sometimes it’s not even my fault).  Flash 10 on the Mac, for example, is constantly having me reload my Firefox instance and trying to pick up where I left off.  This makes the browser an undesirable place to keep my email open.  </p>
<p>Beyond Gmail, I must say that I’ve been burned enough times in writing long form content, be it emails, or blog posts, or bug reports, you name it, that I’m cautious and reluctant to do that in a browser.  I’m a keyboard shortcut guy, and on the Mac, many times the go to beginning of line, or go to end of line key commands actually force the browser to hit the back button.  I’ve lost a lot of work this way (my own fault), but the key command is a system standard, and the browser breaks that.  In fact, I’m writing this blog post in an offline application, to later cut and paste it into our blogging system.  </p>
<p>I’d also put web-based instant messaging into the category of “why do we need this in browser as well”.   There has been a proliferation of web-based instant messaging, with <a href="http://www.google.com/talk/">Google Talk</a> and <a href="http://www.facebook.com">Facebook</a>, which requires me to hunt down the appropriate tab in Firefox to see what people are writing to me.  This makes the whole instant messaging process far less “instant”.   </p>
<p>So while all of what I have just mentioned might make me an oddball in the Web 2.0 world, where many (most) people I know read their email in the browser and have a Facebook window open at all waking hours, I have to take a moment to realize the lesson here.  If history has taught us anything, it has taught us that the most technically correct or appropriate solution is not always (or rarely is) the solution that ultimately becomes successful, or popular.  Take MySpace for example.  The user experience is arguably miserable, yet MySpace paved the way for large scale adoption of social networking.  Just because I think that my trusty old email client, which I have been using for years, can already do what Gmail’s miraculous new offline feature can do, and better, I have to appreciate the significance to the throngs of people that use Gmail via the browser and have never looked back.</p>
<p>P.S.</p>
<p>In other Google news, I must say I was excited to find that the defunct JotSpot blogging platform, which has consumed by Google has made its way into <a href="http://sites.google.com/">Google Sites</a>.  I was a fan of JotSpot wikis back in the day, and Google’s transformation of the product seems like a great addition to the product line.  </p>
<p>In other news, if you’ve ever used another one of Google’s acquisitions that goes by the name of <a href="http://googlesystem.blogspot.com/2009/01/grandcentral-20-almost-ready-to-be.html">GrandCentral</a>, it’s coming back and I’m looking forward to see what has been done to it.</p>
<p>To round out the Google rumor round up, there have been hints of a <a href="http://googlesystem.blogspot.com/2009/01/more-signs-of-google-webdrive.html">Google Web Drive</a>.  This seems like a natural progression in their cloud-based computing offerings.  I’m an avid user of <a href="http://www.jungledisk.com">Jungle Disk</a> so I’m curious to see what Google can whip up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/02/04/random-thoughts-thick-and-thin-clients-and-other-google-isms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Job Opportunity at Cantina</title>
		<link>http://www.cantinaconsulting.com/2009/01/23/job-opportunity-at-cantina/</link>
		<comments>http://www.cantinaconsulting.com/2009/01/23/job-opportunity-at-cantina/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:03:51 +0000</pubDate>
		<dc:creator>carm</dc:creator>
		
		<category><![CDATA[People]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[job]]></category>

		<category><![CDATA[jobs]]></category>

		<category><![CDATA[open position]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/?p=103</guid>
		<description><![CDATA[While I know some of us are sitting around waiting for our bailout checks, at Cantina we&#8217;re doing our part to stimulate the economy.  We&#8217;re looking for someone with incredible technical skills and a real passion for programming.  You&#8217;ve got to have the personal skills to please our clients and always over deliver.  You should [...]]]></description>
			<content:encoded><![CDATA[<p>While I know some of us are sitting around waiting for our bailout checks, at Cantina we&#8217;re doing our part to stimulate the economy.  We&#8217;re looking for someone with incredible technical skills and a real passion for programming.  You&#8217;ve got to have the personal skills to please our clients and always over deliver.  You should know it&#8217;s not about your favorite technology, but the right technology for the job.  If you&#8217;re tired of the same old legacy projects and want to challenge yourself with a really talented team of individuals and create amazing web applications, than take a look at our job posting:</p>
<p><a href="http://www.linkedin.com/jobs?viewJob=&amp;jobId=647499">http://www.linkedin.com/jobs?viewJob=&amp;jobId=647499</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2009/01/23/job-opportunity-at-cantina/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sync Soup or another case for unified online identity</title>
		<link>http://www.cantinaconsulting.com/2008/12/10/sync-soup-or-another-case-for-unified-online-identity/</link>
		<comments>http://www.cantinaconsulting.com/2008/12/10/sync-soup-or-another-case-for-unified-online-identity/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 19:12:52 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.cantinaconsulting.com/2008/12/10/sync-soup-or-another-case-for-unified-online-identity/</guid>
		<description><![CDATA[As a software engineer, I find that I apply basic software engineering principles to all aspects of my life, and a big one is the &#8220;don&#8217;t repeat yourself&#8221; philosophy, or DRY.  Nowhere have I felt more pain on this lately than with trying to solve the problem of a unified email, calendar, and contact [...]]]></description>
			<content:encoded><![CDATA[<p>As a software engineer, I find that I apply basic software engineering principles to all aspects of my life, and a big one is the &#8220;don&#8217;t repeat yourself&#8221; philosophy, or DRY.  Nowhere have I felt more pain on this lately than with trying to solve the problem of a unified email, calendar, and contact solution that is available to me wherever I am.  Let me state the problem more clearly:</p>
<p>At Cantina, we make heavy use of all that Google Apps has to offer to provide a cost effective, yet extremely functional solution to email (both web-based and IMAP) and shared calendars.  This, for the most part, suits our needs adequately and with minimal cost and maintenance.  Now, throw into this scenario the fact that we are consultants, and as such end up making heavy use of our clients&#8217; respective email and shared calendar solutions, most if not all of which are handled via Microsoft Exchange Server.  There are a whole host of reasons why this is a good thing for our clients, however this presents a problem for someone like myself, who likes to keep everything in one place, depending on where I am:</p>
<ol>
<li>If I&#8217;m at my desk, I want it on my Mac laptop and want all of my email managed via Apple&#8217;s Mail application, and all of my calendar managed through iCal</li>
<li>If I&#8217;m out and about, I want it all on my iPhone (you can see my brand allegiance here - not a fanboy just like low maintenance and high integration)</li>
<li>If I&#8217;m really in a pickle and don&#8217;t have my laptop or my iPhone (this is rare), but still have internet, it would be ideal to have a unified web interface to get to all of this stuff, perhaps via Google Apps.  Again this is a rare case.</li>
</ol>
<p>Now, there are a myriad of synchronization technologies and solutions out there that attempt to bridge the gaps between these various components, such as:</p>
<ul>
<li>IMAP: Apple Mail - Google Apps Mail &amp; Gmail (works great apart from the lack of <a href="http://www.polaine.com/playpen/2008/05/26/apple-mail-folder-subscriptions-and-gmail-imap/" title="Playpen  &raquo; Blog Archive   &raquo; IMAP folder subscriptions with GMail and Apple Mail">Label/Folder IMAP subscription</a>)</li>
<li>Apple Mail&#8217;s Exchange Support: Apple Mail - Exchange (still requires IMAP to be enabled, which isn&#8217;t always the case)</li>
<li><a href="http://spanningsync.com/" title="Spanning Sync - Sync iCal and Google Calendar">Spanning Sync</a>: Google Calendar/Contacts - iCal/Address Book</li>
<li>Entourage with Sync Services: Exchange Calendar/Contacts - iCal/Address Book (issues with multiple exchange accounts)</li>
<li><a href="http://www.nuevasync.com/" title="NuevaSync - Over the Air Synchronization">NuevaSync</a>: Google Calendar - iPhone (over the air, doesn&#8217;t require cable, yet takes up your only Exchange account on the iPhone)</li>
<li>Active Sync on the iPhone: Exchange - iPhone (over the air, but only supports one Exchange account at a time)
<li>And so on&#8230;</li>
</ul>
<p>All of these little &#8220;bridges&#8221; spanning the gaps between various applications each have their own small set of problems and limitations which makes this whole sync ecosystem break down.  What&#8217;s worse, is that sometimes, attempting to make this work can have unintended or potentially disastrous consequences (Imagine all your calendar events from one client syncing onto another client&#8217;s Exchange server).</p>
<p>So there&#8217;s the problem, but what is the solution?  For many people, a single Exchange or <a href="http://www.apple.com/mobileme/" title="Apple - MobileMe">Mobile Me</a> account will do the trick, but for me (a consultant using multiple services), it does not.  Sure, there are some glimmers of hope.  Apple is <a href="http://www.apple.com/macosx/snowleopard/" title="Apple - Mac OS X Leopard - Snow Leopard">bolstering their Exchange support</a> in their applications following the introduction of Active Sync to the iPhone.  Sure, there might be a day soon when the iPhone supports multiple Exchange accounts and can subscribe to <a href="http://lifehacker.com/399366/google-calendar-adds-caldav-support-enabling-ical-sync" title="Google Calendar: Google Calendar Adds CalDAV Support, Enabling iCal Sync">CalDAV on Google</a>.  </p>
<p>These are all patches to a solution that lacks a holistic view of the problem.  Where have we seen this before?  How about a unified login?  <a href="http://openid.net/what/" title="OpenID   &raquo; What is OpenID?">OpenID</a> attempts to solve the real and very present problem of managing separate authentication credentials across the vast ocean of sites requiring registration on the web.  Though it&#8217;s not quite a homerun yet, there&#8217;s progress being made.  Any standard will run into this issue, even <a href="http://www.sitepoint.com/blogs/2008/01/23/ie8-standards-mode-is-opt-in/" title="SitePoint &raquo; IE8 Standards Mode Is Opt-in">HTML</a>.  </p>
<p>The questions here are these: Can we extend this concept of online identity beyond logging into sites?  Can we aggregate our various online presence (including email &amp; calendars) to our one true e-self?  I think the answer is yes, but in time, and I think Apple&#8217;s lowly Address Book application, the humble servant of contact management on the Mac may serve as an example.  You see, in Address Book, there is a particular contact card that is designated as &#8220;Me&#8221;, the current user.  In this contact card, I can add any number of phone numbers, fax numbers, etc., but more importantly I can add multiple email addresses and IM screen names, which all are identified as &#8220;Me&#8221;.  This means that no matter what email address in Apple Mail I use to send or receive email, if it&#8217;s in my &#8220;Me&#8221; card, the system knows it&#8217;s &#8220;Me&#8221;.  I think that this very basic approach can be extended to aggregate online identity at a much higher and more meaningful level, across the various services I might use as a result of my online existence.  Now we just have to agree on what that will look like, and if history has taught us anything, <a href="http://www.internetevolution.com/document.asp?doc_id=162411&amp;print=yes" title="Internet Evolution - The Big Report - One Web, One Web ID">it won&#8217;t happen fast</a>. </p>
<p>Thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cantinaconsulting.com/2008/12/10/sync-soup-or-another-case-for-unified-online-identity/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
