<?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>Dr. Joe Maffia &#124; &#34;Good artists copy. Great artists steal.&#34; &#124; Online CV</title> <atom:link href="http://www.joemaffia.net/feed/" rel="self" type="application/rss+xml" /><link>http://www.joemaffia.net</link> <description>Just another way to show what I&#039;m doing... my Design, my Music, my Development.</description> <lastBuildDate>Wed, 14 Dec 2011 23:12:40 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3</generator> <item><title>SQLite Dynamic Data in Titanium</title><link>http://www.joemaffia.net/blog/2011/11/30/sqlite-dynamic-data-in-titanium/</link> <comments>http://www.joemaffia.net/blog/2011/11/30/sqlite-dynamic-data-in-titanium/#comments</comments> <pubDate>Wed, 30 Nov 2011 09:19:06 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2011/11/30/sqlite-dynamic-data-in-titanium/</guid> <description><![CDATA[
My talk at @LondonTitanium on using SQLite as an API cache.
&#160;
SQLite Dynamic Data in Titanium
View more presentations from Joe Maffia
]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><p>My talk at @LondonTitanium on using SQLite as an API cache.</p><p>&nbsp;</p><div
style=""><strong
style="display: block; margin: 12px 0 4px;"><a
href="http://www.slideshare.net/joemaffia/sqlite-dynamic-data-in-titanium" title="SQLite Dynamic Data in Titanium" target="_blank">SQLite Dynamic Data in Titanium</a></strong> <iframe
scrolling="no" marginheight="0" marginwidth="0" src="http://www.slideshare.net/slideshow/embed_code/10390366?rel=0" frameborder="0" height="426" width="510"></iframe><div
style="padding: 5px 0 12px;">View more <a
href="http://www.slideshare.net/" target="_blank">presentations</a> from <a
href="http://www.slideshare.net/joemaffia" target="_blank">Joe Maffia</a></div></p></div></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2011/11/30/sqlite-dynamic-data-in-titanium/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Where are my rounded corners?</title><link>http://www.joemaffia.net/blog/2011/11/26/where-are-my-rounded-corners/</link> <comments>http://www.joemaffia.net/blog/2011/11/26/where-are-my-rounded-corners/#comments</comments> <pubDate>Sat, 26 Nov 2011 21:18:14 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2011/11/26/where-are-my-rounded-corners/</guid> <description><![CDATA[
Factsheet-_Where_are_my_rounded_corners.pdf Download this file
]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><div
class='p_embed p_file_embed'> <a
href="http://joemaffia.posterous.com/where-are-my-rounded-corners"><img
alt="" src="http://posterous.com/images/filetypes/pdf.png" /></a><div
class='p_embed_description'> <strong>Factsheet-_Where_are_my_rounded_corners.pdf</strong> <a
href="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-11-26/iDJHuAHsgzJmmHJFqDeIGCqddxenFlBtEqyoionInEHnlEJlqfoIrAlktaDx/Factsheet-_Where_are_my_rounded_corners.pdf">Download this file</a></div></p></div></p></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2011/11/26/where-are-my-rounded-corners/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>If it was hard to write, it should be hard to understand.</title><link>http://www.joemaffia.net/blog/2011/05/18/if-it-was-hard-to-write-it-should-be-hard-to-understand/</link> <comments>http://www.joemaffia.net/blog/2011/05/18/if-it-was-hard-to-write-it-should-be-hard-to-understand/#comments</comments> <pubDate>Wed, 18 May 2011 20:01:08 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2011/05/18/if-it-was-hard-to-write-it-should-be-hard-to-understand/</guid> <description><![CDATA[Let me get this straight to the point from the start and in a really short matter&#8230;
You may rewrite the whole API, you may do it so well that is actually 10x more performant of the ugly previous version that you spent months moaning about&#8230;
To be honest based on some queries, it may be 100x [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'>Let me get this straight to the point from the start and in a really short matter&#8230;<p>You may rewrite the whole API, you may do it so well that is actually 10x more performant of the ugly previous version that you spent months moaning about&#8230;</p><p>To be honest based on some queries, it may be 100x better&#8230; More robust, clean and scalable!!!</p><p>You do all this job in your own fucking world, close in your headsets and maybe whispering what are you doing to few fellas that venerate you like a God. The rest of the world, won&#8217;t even know the existence &#8217;cause you can&#8217;t write and communicate about&#8230;</p><p>But if they ask you&#8230; Well of course you stand proud of your 10x or 100x performance factor.</p><p>So in that way I found out about the existence of this miraculous piece of code and I decide to investigate if not, use it.</p><p>Surprise!!!</p><p>All those lines of genius are empty. Why? &#8217;cause you didn&#8217;t wasted 10sec in creating a doc about, you couldn&#8217;t even spend 2sec to add a line of comment before opening a curly bracket&#8230;</p><p>Result?<br
/>You&#8217;re a kamikaze! You&#8217;re not a developer, to be honest with you&#8230; You&#8217;re pretty useless &#8217;cause you&#8217;re useless to the community around you; even the first men living in a cave managed to leave us something.</p><p>Maybe rough and not pretty, but not useless.</p></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2011/05/18/if-it-was-hard-to-write-it-should-be-hard-to-understand/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Timing</title><link>http://www.joemaffia.net/blog/2011/05/17/timing/</link> <comments>http://www.joemaffia.net/blog/2011/05/17/timing/#comments</comments> <pubDate>Tue, 17 May 2011 21:57:31 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2011/05/17/timing/</guid> <description><![CDATA[“Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking and don’t settle.” — [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'>“Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking and don’t settle.” — Steve Jobs</div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2011/05/17/timing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>The best idea&#8230; #2</title><link>http://www.joemaffia.net/blog/2011/02/02/the-best-idea-2/</link> <comments>http://www.joemaffia.net/blog/2011/02/02/the-best-idea-2/#comments</comments> <pubDate>Wed, 02 Feb 2011 02:53:06 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2011/02/02/the-best-idea-2/</guid> <description><![CDATA[It doesn&#8217;t happen that I travel for work often but when it does your mind get all the benefits.   Well of course it depends from a lots of different variables but in general:  Your mind reads things with a different prospective. You&#8217;re outside your daily environment, your daily chaos, your daily Q&#038;A [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'>It doesn&#8217;t happen that I travel for work often but when it does your mind get all the benefits.   Well of course it depends from a lots of different variables but in general:  Your mind reads things with a different prospective. You&#8217;re outside your daily environment, your daily chaos, your daily Q&#038;A session and your daily neighborhood. It&#8217;s in this situation that your best ideas arrive.   Take note of them.</div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2011/02/02/the-best-idea-2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Meetings Are Toxic</title><link>http://www.joemaffia.net/blog/2010/09/10/meetings-are-toxic/</link> <comments>http://www.joemaffia.net/blog/2010/09/10/meetings-are-toxic/#comments</comments> <pubDate>Fri, 10 Sep 2010 16:07:05 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2010/09/10/meetings-are-toxic/</guid> <description><![CDATA[
There&#39;s nothing more toxic to productivity than a meeting. Here&#39;s a few reasons why:
They break your work day into small, incoherent pieces that disrupt your natural workflow
They&#39;re usually about words and abstract concepts, not real things (like a piece of code or some interface design)
They usually convey an abysmally small amount of information per [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><div
style=""><p
style="font-family: georgia; font-size: 18px; line-height: 1.4em; margin-bottom: 25px; margin-top: 0px;"> There&#39;s nothing more toxic to productivity than a meeting. Here&#39;s a few reasons why:</p><ul
style="font-family: georgia; margin-bottom: 25px; font-size: 18px; line-height: 1.4em;"><li
style="margin-bottom: 15px;">They break your work day into small, incoherent pieces that disrupt your natural workflow</li><li
style="margin-bottom: 15px;">They&#39;re usually about words and abstract concepts, not real things (like a piece of code or some interface design)</li><li
style="margin-bottom: 15px;">They usually convey an abysmally small amount of information per minute</li><li
style="margin-bottom: 15px;">They often contain at least one moron that inevitably gets his turn to waste everyone&#39;s time with nonsense</li><li
style="margin-bottom: 15px;">They drift off-subject easier than a Chicago cab in heavy snow</li><li
style="margin-bottom: 15px;">They frequently have agendas so vague nobody is really sure what they are about</li><li
style="margin-bottom: 15px;"> They require thorough preparation that people rarely do anyway</li></ul><p
style="font-family: georgia; font-size: 18px; line-height: 1.4em; margin-bottom: 25px; margin-top: 0px;">For those times when you <em>absolutely must</em> have a meeting (this should be a rare event), stick to these simple rules:</p><ul
style="font-family: georgia; margin-bottom: 25px; font-size: 18px; line-height: 1.4em;"><li
style="margin-bottom: 15px;">Set a 30 minute timer. When it rings, meeting&#39;s over. Period.</li><li
style="margin-bottom: 15px;">Invite as few people as possible.</li><li
style="margin-bottom: 15px;">Never have a meeting without a clear agenda.</li></ul></div><p
/><div><a
href="http://gettingreal.37signals.com/ch07_Meetings_Are_Toxic.php">http://gettingreal.37signals.com/ch07_Meetings_Are_Toxic.php</a></div></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2010/09/10/meetings-are-toxic/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>The first step is to start</title><link>http://www.joemaffia.net/blog/2010/09/06/the-first-step-is-to-start/</link> <comments>http://www.joemaffia.net/blog/2010/09/06/the-first-step-is-to-start/#comments</comments> <pubDate>Mon, 06 Sep 2010 05:28:49 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2010/09/06/the-first-step-is-to-start/</guid> <description><![CDATA[
&#8230;The truth is that you don’t need learn anything new in order to begin. The most important thing is simply to start.
Start making something. If you want to learn web design, make a website. Want to be an entreprenuer and start a business selling web based products? Make an app. Maybe you don’t have [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><div
style=""><h2 class="item-title" style="font-size: 21px; color: rgb(51, 51, 51); margin-top: 0px; margin-right: 0px; margin-bottom: 0.2em; margin-left: 0px;"></h2><div
class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><div
style="color: rgb(0, 0, 0); font-weight: normal; font-size: 15px; line-height: 16px;">&#8230;The truth is that you don’t need learn anything new in order to begin. The most important thing is simply to start.</div></div><div
class="item-body" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 16px; font-size: 14px;"><p>Start making something. If you want to learn web design, make a website. Want to be an entreprenuer and start a business selling web based products? Make an app. Maybe you don’t have the skills yet, but why worry about that? You probably don’t even know what skills you need.</p><h2>Start with what you already know</h2><p>If you want to build something on the web, don’t worry about learning <span>HTML</span></p></div><p>, CSS, Ruby, <span>PHP</span>, SQL, etc. They might be necessary for a finished product, but you don’t need any of them to start. Why not mock-up your app idea in Keynote or Powerpoint? Draw boxes for form fields, write copy, link this page to that page. You can make a pretty robust interactive prototype right there with software you already know. Not computer saavy? Start with pencil and paper or Post-it Notes. Draw the screens, tape them to the wall, and see how it flows.<br
/><blockquote
class="posterous_short_quote">You probably don’t even know what skills you need, so don’t worry about it. Start with what you already know.</p></blockquote><p>You can do a lot of the work with <a
href="http://gettingreal.37signals.com/ch06_From_Idea_to_Implementation.php" style="color: rgb(79, 127, 201);">simple sketches</a> or slides. You’ll be able to see your idea take form and begin to evaluate whether or not it really is something special. It’s at that point you can take the next step, which might be learning enough <span>HTML</span> to take your prototype into the browser. The point is, go as far as you can with the skills and tools that you have.</p><h2>Avoid self doubt</h2><p>Many times the reasons we don’t start something have nothing to do with lack of skills, materials, or facilities. The real blockers are self-criticism and excuses. In the excellent book, <a
href="http://en.wikipedia.org/wiki/Drawing_on_the_Right_Side_of_the_Brain" style="color: rgb(79, 127, 201);"><em>Drawing on the Right Side of the Brain</em></a>, the author, Betty Edwards, discusses how we all draw as kids but around adolescence, many of us stop developing that ability.</p><blockquote
class="posterous_medium_quote"><p>“The beginning of adolescence seems to mark the abrupt end of artistic development in terms of drawing skills for many adults. As children, they confronted an artisitc crisis, a conflict between their increasingly complex perceptions of the world around them and their current level of art skill.”</p></blockquote><p>At that age kids become increasingly self-critical and equally interested in drawing realistically. When they fail to draw as well as they know is possible many give up drawing at all.</p><p>This feeling continues into adulthood. We want to design a website or build an application but if our own toolset doesn’t match up to the perceived skillset we never start. It doesn’t help that the internet gives us nearly limitless exposure to amazing work, talented individuals, and excellent execution. It’s easy to feel inadequate when you compare yourself to the very best, but even they weren’t born with those skills and they wouldn’t have them if they never started.</p><h2>Do—there is no try</h2><p>People who succeed somehow find a way to keep working despite the self-doubt. The artist, Vincent Van Gogh was only an artist for the last ten years of his life. We all know him for masterful works of art, but he didn’t start out as a master. Compare these examples from <em>Drawing on the Right Side of the Brain</em> showing an early drawing compared to one completed two years later:</p><div
style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: center; padding-bottom: 10px;"><img
src="http://s3.amazonaws.com/37assets/svn/453-van_gogh.jpg" /><br
/>Vincent Van Gogh <em>Carpenter</em>, 1880 and <em>Woman Mourning</em>, 1882</div><p>He wasn’t some child prodigy (he was 27 when he started painting), he learned his craft by hard work. If he’d listened to his own self doubt or despaired that his skills didn’t compare to Paul Gauguin’s it’s likely he never would have even tried.</p><p>This is all to say that there are many things that can get in the way of the things we should be creating. To never follow a dream because you don’t think you’re good enough or don’t have the skills, or knowledge, or experience is a waste. In fact, these projects where there is doubt are the ones to pursue. They offer the greatest challenge and the greatest rewards. Why bother doing something you already have done a hundred times, where there is nothing left to learn? Don’t worry about what you need to know in order to finish a project, you already <em>have</em> everything you need to start.</p></p></div><p><span
style="">via <a
href="http://37signals.com/svn/posts" class="f" style="color: rgb(79, 127, 201);">Signal vs. Noise</a></span></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2010/09/06/the-first-step-is-to-start/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>There’s Nothing Functional about a Functional Spec</title><link>http://www.joemaffia.net/blog/2010/08/30/there%e2%80%99s-nothing-functional-about-a-functional-spec/</link> <comments>http://www.joemaffia.net/blog/2010/08/30/there%e2%80%99s-nothing-functional-about-a-functional-spec/#comments</comments> <pubDate>Mon, 30 Aug 2010 16:54:38 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2010/08/30/there%e2%80%99s-nothing-functional-about-a-functional-spec/</guid> <description><![CDATA[
Don’t write a functional specifications document
These blueprint docs usually wind up having almost nothing to do with the finished product. Here’s why:
Functional specs are fantasies
They don’t reflect reality. An app is not real until builders are building it, designers are designing it, and people are using it. Functional specs are just words on paper.
Functional specs [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><div
style=""><div
style="font-size: 12px;"><div
style=""><div
style="font-size: 12px;"><b>Don’t write a functional specifications document</b></div></div><div
style=""><div
style="font-size: 12px;">These blueprint docs usually wind up having almost nothing to do with the finished product. Here’s why:</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs are fantasies</b></div></div><div
style=""><div
style="font-size: 12px;">They don’t reflect reality. An app is not real until builders are building it, designers are designing it, and people are using it. Functional specs are just words on paper.</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs are about appeasement</b></div></div><div
style=""><div
style="font-size: 12px;">They’re about making everyone feel involved and happy which, while warm and fuzzy, isn’t all that helpful. They’re never about making tough choices and exposing costs, things that need to happen to build a great app.</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs only lead to an illusion of agreement</b></div></div><div
style=""><div
style="font-size: 12px;">A bunch of people agreeing on paragraphs of text isn’t a true agreement. Everyone may be reading the same thing but they’re thinking something different. This inevitably comes out later on: “Wait, that’s not what I had in mind.” “Huh? That’s not how we described it.” “Yes it was and we all agreed on it – you even signed off on it.” You know the drill.</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs force you to make the most important decisions when you have the least information</b></div></div><div
style=""><div
style="font-size: 12px;">You know the least about something when you begin to build it. The more you build it, the more you use it, the more you know it. That’s when you should be making decisions – when you have more information, not less.</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs lead to feature overload</b></div></div><div
style=""><div
style="font-size: 12px;">There’s no pushback during spec phase. There’s no cost to writing something down and adding another bullet point. You can please someone who’s a pain by adding their pet feature. And then you wind up designing to those bullet points, not to humans. And that’s how you wind up with an overloaded site that’s got 30 tabs across the top of the screen.</div></div><p
/><div
style=""><div
style="font-size: 12px;"><b>Functional specs don’t let you evolve, change,and reassess</b></div></div><div
style=""><div
style="font-size: 12px;">A feature is signed off and agreed on. Even if you realize during development that it’s a bad idea, you’re stuck with it. Specs don’t deal with the reality that once you start building something, everything changes.</div></div><p
/></div><div
style=""><span
style="font-size: 12px;">So what should you do in place of a spec? Go with a briefer alternative that moves you toward something real.</span></div><div
style=""><span
style="font-size: 12px;">Write a one page story about what the app needs to do. Use plain language and make it quick. If it takes more than a page to explain it, then it’s too complex. This process shouldn’t take more than one day.</span></div><p
/><div
style=""><span
style="font-size: 12px;">Then begin building the interface – the interface will be the alternative to the functional spec. Draw some quick and simple paper sketches. Then start coding it into html. Unlike para- graphs of text that are open to alternate interpretations, interface designs are common ground that everyone can agree on.</span></div><p
/><div
style=""><span
style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;">Confusion disappears when everyone starts using the same screens. Build an interface everyone can start looking at, using, clicking through, and “feeling” before you start worrying about back-end code. Get yourself in front of the customer experience as much as possible.</span></div><div
style=""><span
style="font-size: 12px;">Forget about locked-in specs. They force you to make big, key decisions too early in the process. Bypass the spec phase and you’ll keep change cheap and stay flexible.</span></div></div><p
/><div
style=""><span
style="font-size: 12px;">&#8230;</span></div><p
/><div
style=""><span
style="font-size: 12px;">A “spec” is close to useless. I have never seen a spec that was both big enough to be useful and accurate.</span></div><div
style=""><span
style="font-size: 12px;">And I have seen lots of total crap work that was based on specs. It’s the single worst way to write software, because it by definition means that the software was written to match theory, not reality.</span></div><div
style=""><span
style="font-size: 12px;">-Linus Torvalds, creator of Linux (from: Linux: Linus On Specifications)</span></div><p
/><div
style=""><span
style="font-size: 12px;"><a
href="http://gettingreal.37signals.com/">http://gettingreal.37signals.com/</a></span></div></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2010/08/30/there%e2%80%99s-nothing-functional-about-a-functional-spec/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Article: On jQuery &amp; Large Applications – rmurphey</title><link>http://www.joemaffia.net/blog/2010/08/27/article-on-jquery-large-applications-rmurphey/</link> <comments>http://www.joemaffia.net/blog/2010/08/27/article-on-jquery-large-applications-rmurphey/#comments</comments> <pubDate>Fri, 27 Aug 2010 09:36:33 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2010/08/28/article-on-jquery-large-applications-rmurphey/</guid> <description><![CDATA[
On jQuery &#38; Large Applications &#8211; rmurphey http://rmurphey.posterous.com/on-jquery-large-applications
On jQuery &#38; Large Applications &#8211; rmurphey
I’ve been thinking a lot lately about JavaScript applications. As my skills have evolved, I’ve had the privilege of working on more actual applications, and I’ve gotten further and further from clients who want to add a bit of Ajax or bling [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'><p><b>On jQuery &amp; Large Applications &#8211; rmurphey</b><br
/> <a
href="http://rmurphey.posterous.com/on-jquery-large-applications"></a><a
href="http://rmurphey.posterous.com/on-jquery-large-applications">http://rmurphey.posterous.com/on-jquery-large-applications</a></p><hr
/><h1>On jQuery &amp; Large Applications &#8211; rmurphey</h1><div><div><div><div><div><p>I’ve been thinking a lot lately about JavaScript applications. As my skills have evolved, I’ve had the privilege of working on more actual applications, and I’ve gotten further and further from clients who want to add a bit of Ajax or bling to an otherwise fairly traditional web site.</p><p>The most interesting applications I work on are client-side intensive: the server is responsible for providing data as JSON to the client, and most everything else — templating, state management, data management, site navigation, and of course user interaction — is left to the client side.</p><p>It’s a lovely way of writing an application. There’s no need for me to touch server-side code; in some cases I work with a server-side developer to decide what the data they send will look like, but in others I just take what an API already provides and make it work. I get to use the same templating framework across projects, regardless of server-side technology, and I can prototype complex interactions before the server side even exists.</p><p>This is a land where HTML, CSS, and JavaScript are almost all you need, and I like it. I’ve become a firm believer in moving giant hunks of functionality that used to belong to the server over to the client. For a variety of reasons, I think it’s clear that this is where most interesting web development is headed, to the extent it’s not already there.</p><p>This style of building an application changes the front-end development game. In fact, “development” may no longer be an adequate description; we’re moving into the realm of engineering, here. We’re not using JavaScript to add a bit of bling to our sites — a slideshow here, some Ajax there — we’re architecting an <em>application</em>, damnit. We can’t just write some procedural code that binds a bunch of anonymous functions to some events and call it a day; if we do, I can tell you from experience that we’re going to end up with a steaming pile of unmaintainable crap.</p><p>Among a host of questions presented by these sorts of applications, some of the most interesting to me are:</p><ul><li>What are the units of functionality that will make up the application?</li><li>How will those pieces be organized into units of code?</li><li>How will those pieces communicate with each other?</li><li>How will dependencies between components be expressed and managed while adhering to the principle of loose coupling?</li><li>How will components manifest themselves in the DOM? Do they need to?</li><li>How will we persist data across URL and page loads?</li><li>How will we manage communication with the server?</li><li>How will we make sure users only see the data they’re allowed to see?</li></ul><p>At the risk of making a broad generalization, this isn’t the way today’s average JavaScripter learned to think. The mantra of jQuery, the most popular JavaScript library on the internets, is “get some elements, do something with them” — perfectly terrible preparation for analyzing an application from a perspective other than the DOM. And, IMHO, therein lies a tremendous problem.</p><p>As more and more application logic moves to the browser, I’m eager to see the JavaScript community rise to the challenge, but instead it feels like the opposite is happening. People with little understanding or appreciation of these questions are taking on projects that demand these questions be answered. The result is a land of fragile code that gets the job done while giving the finger to the next developer; a land of code so tightly coupled, so deeply beholden to the DOM, so blatantly not reusable or extensible or maintainable as to render every subsequent commit a complete crapshoot, as liable to cripple the application as not. The viability of the project is threatened, and so is the reputation of JavaScript.</p><p>We are better than this. JavaScript, even that old-fashioned browser kind, is a language worthy of respect, not a thing to be dreaded. But — and here’s the sentence I have struggled 10 months to realize and an hour to write: in order to prove that we are better than this, we must make abundantly clear to the budding developers, to the project managers, to the enterprises, to anyone intending to build a remotely complex JavaScript application, that there’s more to JavaScript than jQuery. The questions are bigger, the answers more complex, and the relevant skills, alas, a bit harder to come by.</p><p>We have to make clear that, in fact, jQuery is but a hammer. When it comes to building these intensively client-side applications, we’re talking about building skyscrapers, for god’s sake. The problems solved by a hammer are the least of our concerns.</p><p>It was just a few months ago that I gave a presentation on <a
href="http://www.slideshare.net/rmurphey/building-large-jquery-applications"> building large jQuery applications</a>. I emphasized jQuery’s role as strictly a DOM and Ajax tool, and demonstrated a few other tools — John Resig’s <a
href="http://ejohn.org/blog/simple-javascript-inheritance/">simple inheritance</a>, James Burke’s <a
href="http://requirejs.org/">RequireJS</a> dependency management and build tool, Jan Lenhardt’s <a
href="http://github.com/janl/mustache.js/">mustache.js</a> — that one would want to bring to the table for such an undertaking.</p><p>But to what end do we assemble said hodgepodge of tools? Is it just so we can continue to “use jQuery”?</p><p>jQuery’s API is, indeed, dead-simple, but we are smart people! We are building skyscrapers! When it’s time to write a complex application, and we need all of these things that jQuery doesn’t offer, can we not learn to use another hammer — learn that <code>dojo.place(&#39;&lt;div&gt;I am new!&lt;/div&gt;&#39;, oldDomElement, &#39;last&#39;)</code> means the same thing as <code>$(&#39;&lt;div&gt;I am new!&lt;/div&gt;&#39;).appendTo(oldDomElement)</code> — if learning it gives us access to legions more functionality than jQuery even aspires to provide?</p><p>Do we assemble this hodgepodge because finding jQuery developers is perceived as an easier task than finding practitioners of another library, even though someone saying they “know jQuery” is little indication that they will know how to work with the assembled solution?</p><p>Do we do it for the plugin ecosystem — full of code of varying quality and maintenance — even though many of the large application needs addressed by those plugins are addressed by other libraries as well, and sometimes better?</p><p>And when we do it, when we assemble this collection of tools ourselves, what risks are we accepting? What price will we pay down the road to maintain three or five or 10 different pieces from three or five or 10 different authors, with different release cycles, no guarantee of compatibility or maintenance, and no central project thoughtfully considering their future?</p><p>I’ve wrestled with these questions for months, agonizing during sleepless early-morning hours over how to advise clients on the answers. I’m the co-host of yayQuery, a contributor to the jQuery Cookbook, and, I’ll venture to say, a decently respected member of the jQuery community. I did not arrive at this conclusion lightly, and I have few illusions it will be well-received, or even heeded.</p><p>But I’ve grown weary of people championing a tool that simply does not answer the big questions I see in project after intensively client-side project. I’ve grown weary of those same people dismissing tools that answer those questions handily and have been answering them for a while now. I cringe when clients tell me they’ve chosen jQuery because it was “easy,” and then watch them predictably struggle with all of the questions it does not answer. And I’ve found I can’t continue to bite my tongue when people recommend jQuery as an enterprise-grade solution while failing to acknowledge these questions, let alone answer them*.</p><p>I do not want to see jQuery go away. The simplicity of its API was undeniably instrumental in the rise of JavaScript as a language these last few years. It is a perfect gateway drug, and I greatly enjoy watching people transition from “get some elements, do something with them” to the elegant patterns of JavaScript itself.</p><p>jQuery is an entirely appropriate answer to so many questions, but it falls so short for large applications, forcing you to assemble such a tenuous toolkit of your own, that it simply isn’t a viable answer — or, in my opinion, part of an answer — for large applications. If we hope to continue to gain respect as a community, we ought to admire jQuery’s immense contributions, but we must not be afraid to accept and make very clear its limitations. We do otherwise at our peril.</p><p><i><br
/></i></p></div></div></div></div></div></div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2010/08/27/article-on-jquery-large-applications-rmurphey/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Don’t split into silos…</title><link>http://www.joemaffia.net/blog/2010/08/26/dont-split-into-silos/</link> <comments>http://www.joemaffia.net/blog/2010/08/26/dont-split-into-silos/#comments</comments> <pubDate>Thu, 26 Aug 2010 09:36:18 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[General]]></category> <guid
isPermaLink="false">http://www.joemaffia.net/blog/2010/08/28/dont-split-into-silos/</guid> <description><![CDATA[I never believed that a developer (in this example) should be a front-end/back-end ONLY guy&#8230;
There&#8217;s no such thing and in my opinion if you&#8217;re hiring in this way you&#8217;re not doing yourself a favour and sure won&#8217;t be your smartest decision!
Was reading the &#8220;Getting Real&#8221; ebook by 37signals&#8230;when this topic came out so [...]]]></description> <content:encoded><![CDATA[<div
class='posterous_autopost'>I never believed that a developer (in this example) should be a <br
/>front-end/back-end ONLY guy&#8230;<p
/> There&#8217;s no such thing and in my opinion if you&#8217;re hiring in this way <br
/>you&#8217;re not doing yourself a favour and sure won&#8217;t be your smartest <br
/>decision!<p
/> Was reading the &#8220;Getting Real&#8221; ebook by 37signals&#8230;when this topic <br
/>came out so here&#8217;s a summary:<p
/> Too many companies separate design, development, copywriting and <br
/>marketing into different silos. While specialisation has it&#8217;s <br
/>advantages, it also create a situation where staffers see just their <br
/>own little world instead of the entire context&#8230;<p
/> Don&#8217;t let things get lost in translation.<p
/> Even better, hire people with multiple talents who can wear different <br
/>hats&#8230;the end result will be a more harmonious product.</div> ]]></content:encoded> <wfw:commentRss>http://www.joemaffia.net/blog/2010/08/26/dont-split-into-silos/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Dynamic page generated in 1.179 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2011-12-15 22:32:40 -->
<!-- Compression = gzip -->
