<?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>almost daniel &#187; code</title>
	<atom:link href="http://almostdaniel.com/tags/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://almostdaniel.com</link>
	<description>i am a coder, an array explode(r). but here is where i write.</description>
	<lastBuildDate>Tue, 16 Mar 2010 21:35:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>javascript architecture: the front and back of it</title>
		<link>http://almostdaniel.com/2010/03/14/javascript-architecture-the-front-and-back-of-it/</link>
		<comments>http://almostdaniel.com/2010/03/14/javascript-architecture-the-front-and-back-of-it/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 16:50:25 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sxsw]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=484</guid>
		<description><![CDATA[UI Architecture: all the stuff that it takes to process, package, deliver, and communicate with the client (templating url routing, data validatiion, formatting, ajax). &#8220;Between the front and back end&#8221;: stuff between presentational javascript and the backend logic. The middle end gives a web 2.0 app performance.
We need to talk about this because of issues [...]]]></description>
			<content:encoded><![CDATA[<p>UI Architecture: all the stuff that it takes to process, package, deliver, and communicate with the client (templating url routing, data validatiion, formatting, ajax). &#8220;Between the front and back end&#8221;: stuff between presentational javascript and the backend logic. The middle end gives a web 2.0 app performance.</p>
<p>We need to talk about this because of issues with performance and optimization, the MVC model spaghetti code failure (outputting html if a condition exists: the mixture of model code inside view template, too tight coupling between presentation layer and model layer), &#8220;don&#8217;t repeat yourself&#8221; (DRY: repeating code over and over again, i.e., duplicating validation in the client and the server, &#8220;any time there is more than one copy of something, one copy is always wrong&#8221;), and role separation (wearing multiple skillset hats and mixing contexts–markup/css switch to javascript switch to backend app–without being able to focus on one context at a time). </p>
<p>This isn&#8217;t another framework, it&#8217;s an optimized/reworked &#8220;alternate pattern&#8221; of MVC in an attempt to solve some of the weaknesses/problems of MVC. Can we decouple the view from the existing architecture stack?</p>
<p>CVC + JavaScript puts the power of UI architecture in the hands of front-end engineers.</p>
<p>[ <a href="http://my.sxsw.com/events/event/486">session description</a> ]</p>
<dl>
<dt>Presenter(s)</dt>
<dd>Kyle Simpson </dd>
<dt>Date</dt>
<dd>14 March 2010</dd>
<dt>Tag(s)</dt>
<dd><a href="http://search.twitter.com/search?q=%23frontandbackofit">#frontandbackofit</a></dd>
<dd><a href="http://search.twitter.com/search?q=%23jsarch">#jsarch</a></dd>
<dt>Sites</dt>
<dd><a href="http://getify.me/">Getify</a></dd>
<dd><a href="http://sxsw.getify.com/">Demo of HandlebarJS</a></dd>
<dd><a href="http://spkr8.com/t/2518">Speaker Feedback</a></dd>
<dd><a href="http://github.com/getify/BikechainJS">BikechainJS</a></dd>
<dd><a href="http://github.com/getify/HandlebarJS">HandlebarJS</a></dd>
</dl>
<p><span id="more-484"></span></p>
<h3>Traditional: CVC</h3>
<p>The MVC model doesn&#8217;t have a clear space for client-based JS app (a JS version of the app that is not just the presentation logic, but a representation of the app inside the client).</p>
<h3>New: &#8220;Clients Views Controllers&#8221; (CVC)</h3>
<p>Application Layer (black box): doesn&#8217;t do anything with the presentation layer, no markup; only concerned with state management/session records and representing the data in a standard format: JSON API. Multiple other layers can talk to JSON API, so make it primary communication interface with application layer. </p>
<p><strong>Web Server Layer</strong>: translates protocol request to hand off to rest of stack.</p>
<p><strong>UI Controllers Layer (server)</strong>: written in javascript, takes care of url routing, data validation. Allows more reuse of code/less rewriting in server/client layers. </p>
<p><strong>View Layer (server/client)</strong>: written in javascript, view engine decoupled from application, portable to client because of JS to run in browser.</p>
<p>&#8220;look up state, hands off to controllers, choose a view&#8221;</p>
<h4>Clients</h4>
<p>Everything is a client of everything else. Each layer is decoupled, modular, scalable.</p>
<h4>Views</h4>
<p>Templating, portable, DRY, platform agnostic, uses core web tech.</p>
<h4>Controllers</h4>
<p>Task oriented. Controlled by front-end engineer. Less dependence on backend architecture. Small, independent.</p>
<h3>JavaScript on a Server</h3>
<p>node.js is a wrapper around the V8 JS engine. Some Python dependencies for build, but not for execute. V8 is just a shared lib. a different way to process web requests: asynchronous events instead of firing a thread for every request. narwhal is a wrapper around the rhino JS engine. Others: javascriptcore, spidermonkey.</p>
<p>Reference implementation: BikechainJS is Kyle&#8217;s wrapper around V8. Loads modules to create a hosted environment to run JS. HandlebarJS is a templating engine that uses text/html templates and accepts JSON data input where you cannot call any methods/math. The only logic you can do is to use application &#8220;state&#8221; for template selection. Compiles templates into JS the first time a template is parsed. Environment agnostic (server or client).  </p>
<h3>Standards</h3>
<p>How do I read/write files, i/o, execute processes, conduct network requests? CommonJS is a standards community. Very young.</p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2010/03/14/javascript-architecture-the-front-and-back-of-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web framework battle royale</title>
		<link>http://almostdaniel.com/2010/03/13/web-framework-battle-royale/</link>
		<comments>http://almostdaniel.com/2010/03/13/web-framework-battle-royale/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 18:44:42 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sxsw]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=456</guid>
		<description><![CDATA[Web frameworks make building websites easier. Common tasks are abstracted for faster development. Here is an analysis of five different frameworks: Zope (Python), Rails (Ruby), Sinatra (Ruby), Seaside (Smalltalk), and Symfony (PHP).
[ session description ]

Presenter(s)
(lots)
Date
13 March 2010
Tag(s)
#frameworkbattleroyale


 This was a fast-paced session, so I&#8217;m just going to summarize the frameworks discussed with links so I [...]]]></description>
			<content:encoded><![CDATA[<p>Web frameworks make building websites easier. Common tasks are abstracted for faster development. Here is an analysis of five different frameworks: Zope (Python), Rails (Ruby), Sinatra (Ruby), Seaside (Smalltalk), and Symfony (PHP).</p>
<p>[ <a href="http://my.sxsw.com/events/event/710">session description</a> ]</p>
<dl>
<dt>Presenter(s)</dt>
<dd>(lots)</dd>
<dt>Date</dt>
<dd>13 March 2010</dd>
<dt>Tag(s)</dt>
<dd><a href="http://search.twitter.com/search?q=%23frameworkbattleroyale">#frameworkbattleroyale</a></dd>
</dl>
<p><span id="more-456"></span></p>
<p> This was a fast-paced session, so I&#8217;m just going to summarize the frameworks discussed with links so I can research more at a later date.</p>
<ul>
<li><a href="http://www.symfony-project.org/">Symfony</a> has tutorials to get you going. Can be installed with PEAR. Free books.</li>
<li><a href="http://seaside.st/">seaside</a> is a very different kind of language. <a href="http://www.squeak.org/">Squeak/Smalltalk</a></li>
<li><a href="http://www.sinatrarb.com/">Sinatra</a> is a ruby-based framework require Sinatra, read the readme.</li>
<li><a href="http://rubyonrails.org/">rails</a> is a ruby-based framework. it has the little red book, fast to get up and going.</li>
<li><a href="http://www.zope.org/">zope</a> is a framework for frameworks, hard to decide which framework to go with. poor documentation is improving.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2010/03/13/web-framework-battle-royale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>designers and developers:why can&#8217;t we all just get along?</title>
		<link>http://almostdaniel.com/2009/03/17/designers-and-developers-why-cant-we-all-just-get-along/</link>
		<comments>http://almostdaniel.com/2009/03/17/designers-and-developers-why-cant-we-all-just-get-along/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 17:46:09 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[sxsw]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=165</guid>
		<description><![CDATA[I arrived at this session and it was SRO and full. I got some final ideas (after making it inside with 15 minutes to go):

When designers push their vision out to &#8220;version 10&#8243;, it can cause tension with developers who are usually starting from the other end (i.e., Agile). Developers want to start small (and [...]]]></description>
			<content:encoded><![CDATA[<p>I arrived at this session and it was SRO and full. I got some final ideas (after making it inside with 15 minutes to go):</p>
<ul>
<li>When designers push their vision out to &#8220;version 10&#8243;, it can cause tension with developers who are usually starting from the other end (i.e., Agile). Developers want to start small (and efficient/elegant) and progressively build toward a design. Balance is key.</li>
<li>The best possible thing a designer can do for a developer is to share the problem and challenges, not just ask for a composed feature. That way the designer is asking to partner on the solution with the developer. Happiness ensues.</li>
<li>The best possible thing a developer can do for a designer is to communicate principles and needs to designers to create a more common ground. For example, talking to designers about considering both real-time interactivity and asynchronous actions.</li>
<li>The best possible thing both can do is hang out with each other outside the office.</li>
<li>Build trust.</li>
</ul>
<p>For the <a href="http://danielslaughter.com/2009/03/17/sxsw-2009-designers-and-developers-why-cant-we-all-just-get-along/">rest of the notes</a>, I depend on my trusty Michigan friend, daniel slaughter. He takes amazing notes.</p>
<p><em>These are notes from a session at <a href="http://sxsw.com/interactive">sxsw interactive</a>. My own take on topics are mixed in with what the presenters were actually saying, so do not assume all of this content is my own.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/03/17/designers-and-developers-why-cant-we-all-just-get-along/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>designing our way through web forms</title>
		<link>http://almostdaniel.com/2009/03/15/designing-our-way-through-web-forms/</link>
		<comments>http://almostdaniel.com/2009/03/15/designing-our-way-through-web-forms/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 21:30:46 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[progressive engagement]]></category>
		<category><![CDATA[progressive enhancement]]></category>
		<category><![CDATA[sxsw]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=138</guid>
		<description><![CDATA[Forms suck. Creating a style guide for form design is difficult.

Presenters
Christopher Schmitt &#8211; Heat Vision
Eric Ellis &#8211; Bank of America
Kimberly Blessing &#8211; Comcast Interactive Media
Date
Sunday, March 15
Sites
web form elements research
jquery validation
moz monkey



The Luke W. mantra: forms stand in the way of what we want to do.
Conversations
Conversations are rooted in trust. Good forms should be structured [...]]]></description>
			<content:encoded><![CDATA[<p>Forms suck. Creating a style guide for form design is difficult.</p>
<dl>
<dt>Presenters</dt>
<dd>Christopher Schmitt &#8211; Heat Vision</dd>
<dd>Eric Ellis &#8211; Bank of America</dd>
<dd>Kimberly Blessing &#8211; Comcast Interactive Media</dd>
<dt>Date</dt>
<dd>Sunday, March 15</dd>
<dt>Sites</dt>
<dd><a href="http://webformelements.com/">web form elements research</a></dd>
<dd><a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jquery validation</a></dd>
<dd><a href="http://mozmonkey.com/">moz monkey</a></dd>
</dl>
<p><span id="more-138"></span></p>
<hr />
The Luke W. mantra: forms stand in the way of what we want to do.</p>
<h3>Conversations</h3>
<p>Conversations are rooted in trust. Good forms should be structured on trust. Think about people/relationships, and context. The way you speak to your users impacts their excitement/enjoyment. The way you label your forms focused on a label that makes sense to the user not just to you.</p>
<dl>
<dt>Expectation</dt>
<dd>Apparently expectation is obvious.</dd>
<dt>Flow</dt>
<dd>Can a user look at a page in a matter of seconds and understand the pattern of interaction.</dd>
<dt>[Managed] Noise</dt>
<dd>Forms that are not initiated or expected; noise is anything that inhibits the user&#8217;s ability to complete the task. Marginilization over removal.</dd>
<dt>Order</dt>
<dd>Important things (the task) first, then the rest should be add-on. But make sure I have completed something <em>soon</em>.</dd>
</dl>
<h3>Progressive Engagement</h3>
<p>Lead a user down a path and show them questions only if they are necessary to the context and the type of user you are (if I already know about you, don&#8217;t ask me to fill it in again).</p>
<h3>HTML5 Form Elements</h3>
<ul>
<li>Slider</li>
<li>Input date (calendar) drop-down</li>
<li>Input time</li>
<li>Placeholder</li>
</ul>
<h3>Web Form Management</h3>
<p>Forms get re-purposed most often. How can you manage all the different form purposes simplistically in a common application pattern library? An editorial style guide for web forms: how do we speak to our customer or about our services?</p>
<p>Pull together the people who care about standards and build a style guide from the ground up.</p>
<h3>Validation</h3>
<p>Client-side validation doesn&#8217;t get it all, and can expose your validation methods to DoS. Split validation between client/server: format v. required. Server-side response for validation errors at top so screen readers see it force.</p>
<p><em>These are notes from a session at <a href="http://sxsw.com/interactive">sxsw interactive</a>. My own take on topics are mixed in with what the presenters were actually saying, so do not assume all of this content is my own.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/03/15/designing-our-way-through-web-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>core conversation:should i build my startup on ruby on rails?</title>
		<link>http://almostdaniel.com/2009/03/15/core-conversation-should-i-build-my-startup-on-ruby-on-rails/</link>
		<comments>http://almostdaniel.com/2009/03/15/core-conversation-should-i-build-my-startup-on-ruby-on-rails/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 20:23:40 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming language]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[sxsw]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=105</guid>
		<description><![CDATA[What are the most important qualities of a programming language when you are starting from scratch?

how easy to get a prototype out?
will it scale? or do i need to scale right now?
what existing code libraries are out there and do they support my industry?
what kind of talent is out there?
do i already know the language?
does [...]]]></description>
			<content:encoded><![CDATA[<p>What are the most important qualities of a programming language when you are starting from scratch?</p>
<ul>
<li>how easy to get a prototype out?</li>
<li>will it scale? or do i need to scale right now?</li>
<li>what existing code libraries are out there and do they support my industry?</li>
<li>what kind of talent is out there?</li>
<li>do i already know the language?</li>
<li>does the language encourage good developer habits?</li>
<li>is the language well accepted by a large community/industry?</li>
</ul>
<dl>
<dt>Date</dt>
<dd>Saturday, March 19</dd>
<dt>Sites</dt>
<dd><a href="http://rubyonrails.org/">Ruby on Rails</a></dd>
<p><em>These are notes from a session at <a href="http://sxsw.com/interactive">sxsw interactive</a>. My own take on topics are mixed in with what the presenters were actually saying, so do not assume all of this content is my own.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/03/15/core-conversation-should-i-build-my-startup-on-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3: what&#8217;s now, what&#8217;s new, and what&#8217;s not?</title>
		<link>http://almostdaniel.com/2009/03/15/css3-whats-now-whats-new-and-whats-not/</link>
		<comments>http://almostdaniel.com/2009/03/15/css3-whats-now-whats-new-and-whats-not/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 19:54:23 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[sxsw]]></category>
		<category><![CDATA[w3]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=129</guid>
		<description><![CDATA[Let the W3C be with you. Woo! Cross-browser compatibility problems should end.

Presenters
Molly Holzschlag &#8211; Opera Software
David Baron &#8211; Mozilla
Hakon Wium Lie &#8211; Opera Software
Sylvain Galineau &#8211; Microsoft
Date
Sunday, March 15
Sites
david baron
molly holzschalg
Jonathan Snook



CSS3 doesn&#8217;t really exist: the standard is being modularized so parts of &#8220;CSS3&#8243; can be implemented in browsers before others. But where is Apple?
Modules: [...]]]></description>
			<content:encoded><![CDATA[<p>Let the W3C be with you. Woo! Cross-browser compatibility problems should end.</p>
<dl>
<dt>Presenters</dt>
<dd>Molly Holzschlag &#8211; Opera Software</dd>
<dd>David Baron &#8211; Mozilla</dd>
<dd>Hakon Wium Lie &#8211; Opera Software</dd>
<dd>Sylvain Galineau &#8211; Microsoft</dd>
<dt>Date</dt>
<dd>Sunday, March 15</dd>
<dt>Sites</dt>
<dd><a href="http://dbaron.org/talks">david baron</a></dd>
<dd><a href="http://molly.com/">molly holzschalg</a></dd>
<dd><a href="http://snook.ca">Jonathan Snook</a></dd>
</dl>
<p><span id="more-129"></span></p>
<hr />
CSS3 doesn&#8217;t really exist: the standard is being modularized so parts of &#8220;CSS3&#8243; can be implemented in browsers before others. But where is <a href="http://apple.com/">Apple</a>?</p>
<h3>Modules: Now</h3>
<dl>
<dt>selectors</dt>
<dd>:nth-child(odd), :nth-child(even)</dd>
<dt>color</dt>
<dd>opacity vs. rgba()</dd>
<dt>borders</dt>
<dd>border-image, -moz-border-image</dd>
<dt>rendering properties</dt>
<dd>-moz-column-count, -moz-column-rule</dd>
<dd>text-shadow</dd>
<dd>-moz-box-shadow</dd>
<dd>-moz-border-radius</dd>
<dd>word-wrap: break-word</dd>
<dd>font-size-adjust (specify the font size by the x-height of the characters. e.g., 20px * 0.45)</dd>
<dd>@font-face (downloadable font specification where you define rules for each font and style): src: url(&#8220;font.ttf&#8221;)</dd>
<dt>media queries</dt>
<dd>@media screen, projection {}</dd>
<dd>@media print {}</dd>
<dd>@media (min-width: 22em) { <rules that stop being applied when window width is smaller than 22em> }</dd>
<dd>@media all and (property) { }</dd>
<dt>Transformation/Paths</dt>
<dd>-moz-transform, -webkit-transform</dd>
<dd>svg clip-path, svg mask, svg filter</dd>
</dl>
<h3>Modules: Future</h3>
<ul>
<li>width: calc(50% &#8211; 8px)</li>
<li>h1 { content: url(decorative.png); }</li>
<li>new layout systems for user interface?</li>
</ul>
<h3>Internet Explorer + CSS</h3>
<p>IE must implement 2.1 completely, correctly, and optimally. IE8/02.27 does.</p>
<h4>CSS3 in IE8</h4>
<p>The future includes opacity of color, backgrounds, borders, selectors, web fonts, media queries, and multi-column.</p>
<p>Communicate: www-style (at) w3.org</p>
<h3>Opera + CSS</h3>
<p>CSS3 is ready for demo with backgrounds, borders, fonts, transitions, selectors, media queries, and generated content for paged media. Microsoft needs to adopt TrueType and OpenType. </p>
<h4>Printing (Paged Media)</h4>
<p>Use HTML and CSS to build PDF documents for printing. Some features: Leaders and auto page-number based on pagination, footnotes, page headers, and page numbers. <a href="http://www.yessoftware.com/products/product_detail.php?product_id=50">Yes Software</a>.</p>
<p><em>These are notes from a session at <a href="http://sxsw.com/interactive">sxsw interactive</a>. My own take on topics are mixed in with what the presenters were actually saying, so do not assume all of this content is my own.</em></p>
<h3>Feedback</h3>
<p>When you deal with open standards, you want a single standard to be implemented correctly in a number of different engines/ways because each implementation is taking a different perspective (mobile devices vs. rich devices). Otherwise you have stagnation. Competition on a standards level is a core problem.</p>
<p>Using floats for layouts doesn&#8217;t hit the mark. A true layout module is needed. Jonathan Snook. We need layout modules based on other system user interface design history. HTML5 separation of elements may clash with semantic coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/03/15/css3-whats-now-whats-new-and-whats-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>version control: no more save as…</title>
		<link>http://almostdaniel.com/2009/03/15/version-control-no-more-save-as/</link>
		<comments>http://almostdaniel.com/2009/03/15/version-control-no-more-save-as/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 16:17:38 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[sxsw]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=108</guid>
		<description><![CDATA[Version control can save your life and make you happy.

Presenters
Matt Mullenweg &#8211; Automattic/WordPress
Karen Nguyen &#8211; Yahoo!
Zach Nies &#8211; Rally Software Development
Joe Pezzillo &#8211; joepezzillo.com, @metafy
Derek Scruggs &#8211; SurveyGizmo
Date
Sunday, March 15
Sites
phpadvent article
trac
cornerstone
versions
Beanstalk
mecurial



Teams
Fosters a collaborative environment: when you are working on the same files, multiple people could step on each other&#8217;s toes. Branching and merging lets you [...]]]></description>
			<content:encoded><![CDATA[<p>Version control can save your life and make you happy.</p>
<dl>
<dt>Presenters</dt>
<dd>Matt Mullenweg &#8211; Automattic/WordPress</dd>
<dd>Karen Nguyen &#8211; Yahoo!</dd>
<dd>Zach Nies &#8211; Rally Software Development</dd>
<dd>Joe Pezzillo &#8211; joepezzillo.com, @metafy</dd>
<dd>Derek Scruggs &#8211; SurveyGizmo</dd>
<dt>Date</dt>
<dd>Sunday, March 15</dd>
<dt>Sites</dt>
<dd><a href="http://phpadvent.org/2008/dont-commit-that-error-by-travis-swicegood">phpadvent article</a></dd>
<dd><a href="http://trac.edgewall.org/">trac</a></dd>
<dd><a href="http://zennaware.com/cornerstone/">cornerstone</a></dd>
<dd><a href="http://versionsapp.com/">versions</a></dd>
<dd><a href="http://beanstalkapp.com/">Beanstalk</a></dd>
<dd><a href="http://selenic.com/mercurial/wiki/">mecurial</a></dd>
</dl>
<p><span id="more-108"></span></p>
<hr />
<h3>Teams</h3>
<p>Fosters a collaborative environment: when you are working on the same files, multiple people could step on each other&#8217;s toes. Branching and merging lets you work on your own and then bring something unique back to the main project.</p>
<h3>Bits and Bytes</h3>
<p>Version control has always been a little scary because of the command line format. Three words really matter when it comes to version control:</p>
<ul>
<li>Update &#8211; applies latest changes from the repo to your local working directory</li>
<li>Status &#8211; shows you what has changed in your local working directory</li>
<li>Commit &#8211; applies your local changes back to the repo</li>
</ul>
<p>VC allows you to work on non-live servers, get it working, and push a fix out to a live server only when you know it is working. You can also rollback to a previous version.</p>
<h3>Tools</h3>
<p>Version control is built into many web dev systems (xcode, coda, dreamweaver), as well as some third party tools: <a href="http://zennaware.com/cornerstone/">cornerstone</a> (gui with a timeline, filemerge-like comparisons), <a href="http://versionsapp.com/">versions</a> (easy to set up/use, beanstalk integration). <a href="http://beanstalkapp.com/">Beanstalk</a> (remote hosted repository, integrates with basecamp, fogbugz, lighthouse, twitter).</p>
<p>Git &#8211; vc with branching made easy, <a href="http://gitx.frim.nl/">gitx</a>, <a href="http://github.com">github</a>, social coding, fork central, gists</p>
<p>Branching may be good for maintaining a pro version or lite version, mu version vs. normal.</p>
<p><a href="http://selenic.com/mercurial/wiki/">mecurial</a> (Hg) &#8211; distributed version control, bitbucket.org</p>
<h3>Binaries, Company Size, Cross-repo dev</h3>
<p>No negatives to putting binary files into repositories. You can be guaranteed that you are working with the same version of the file. </p>
<p>In small companies, developers often drive the decision to use version control due to familiarity and specific needs.</p>
<p>Large companies, there is usually a version control culture already in place.</p>
<p>Multiple version control repo types with multiple groups causes delay and problems. Time is money, so you should find something that is easy for IT, QA and dev teams to use. It should provide security and disaster recovery. It should be cost effective (would putting some money into it save money later?). Can you get great reports of how you are using vc, and does the vc repo have a high adoption rate? What is administering a vc repo like? The downside to switching to a single vc repo (if you have multiple now) is a high IT cost for infrastructure and migration. Developers feel switching would impact productivity during migration due to reconfiguration, etc. QA usually doesn&#8217;t get a chance to check things out since there really can&#8217;t be any dev downtime for vc repos.</p>
<h3>Cool Things (yay matt!)</h3>
<p>Matt decided to show a <a href="http://regnskygge.net/sxsw2009/2009/03/15/version-control-no-more-save-as/">live version commit</a> to wordpress.com.</p>
<ul>
<li>svn diff</li>
<li>deployment system to multiple production servers (deploy), svn makes it easy.</li>
<li>post commit hooks (svn email, trac)</li>
<li>sparse checkups</li>
<li>sync multiple computers and backup your svn repo (snapshots)</li>
<li>automate checkins for a backup-like situation, break things up into multiple commits</li>
</ul>
<h3>Hosting</h3>
<p>The providers make it easy to get going quickly.</p>
<h3>Branching</h3>
<p>Love it or leave it? Version control is a channel of your development processes. Branching tends to slow down the project, and really is only useful when you are starting over from scratch.</p>
<p>There were a lot of great questions at the end with awesome information, like WordPress&#8217;s deployment strategy, but I ran out of power and was too comfortable to go find an outlet. Sorry!</p>
<p><em>These are notes from a session at <a href="http://sxsw.com/interactive">sxsw interactive</a>. My own take on topics are mixed in with what the presenters were actually saying, so do not assume all of this content is my own.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/03/15/version-control-no-more-save-as/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tables don&#8217;t kill people, they just kill accessibility.</title>
		<link>http://almostdaniel.com/2009/02/24/tables-dont-kill-people-they-just-kill-accessibility/</link>
		<comments>http://almostdaniel.com/2009/02/24/tables-dont-kill-people-they-just-kill-accessibility/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 23:22:02 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[portals]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/?p=50</guid>
		<description><![CDATA[At least, tables (can) kill accessibility in web portals.
Accessibility in a portal has always been a challenge. It has to do (initially) with boxes.
Many early portals used quite hideous tables to layout the screen. Hey, a portal is a set of boxes, right? Oracle Portal still enforces a level of table-as-layout. Tables aren&#8217;t evil, but [...]]]></description>
			<content:encoded><![CDATA[<p>At least, tables (can) kill accessibility in web portals.</p>
<p>Accessibility in a portal has always been a challenge. It has to do (initially) with boxes.</p>
<p>Many early portals used quite hideous tables to layout the screen. Hey, a portal is a set of boxes, right? Oracle Portal still enforces a level of table-as-layout. Tables aren&#8217;t evil, but as layout devices they make it difficult to control keyboard interaction on a screen. You have to really implement them right to keep them accessible.</p>
<p>But my main problem with tables as a way to arrange a set of boxes is that the boxes (portlets) on a page are not always neat, tabular data in common rows and columns. <em>Tables are for arranging tabular data.</em> That means there are common relationships among the data sets.</p>
<p>A portlet is too complex an interaction to always fit as &#8220;tabular data&#8221;. The ways I want to navigate a table of numeric data is usually different from the way I want to interact with a portlet or group of portlets. For example, do I have to tab through every portlet (and inside through the inner elements) on the screen in order to get to the one I want (with the keyboard)? Or can I jump through HTML headers like <em>every other well-formed webpage I encounter?</em></p>
<p>The other problem with tables is styling. Think about how difficult it is to style your own profile at MySpace. Nested tables to the nth degree. Portals are susceptible to this trap as well. Taking a beautiful Photoshop design of a portal interface and then attempting to style unclassed table cells (when tables themselves tend to break certain CSS layout rules–or better yet, when there is inline CSS inside a table definition that you cannot override!) is an exercise in insanity. I mention this because the level of design control I have over my content is usually closely related to the level of accessibility I can ensure in a page.</p>
<p>So the first accessibility challenge for portals is having enough control over the page layout interface to display portlets on a page in a way that is semantic and easy to interact with via a keyboard. The second is having enough freedom to make it look great.</p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2009/02/24/tables-dont-kill-people-they-just-kill-accessibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FormPress 0.2 released</title>
		<link>http://almostdaniel.com/2008/04/03/formpress-02-released/</link>
		<comments>http://almostdaniel.com/2008/04/03/formpress-02-released/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 20:31:38 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[FormPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/2008/04/03/formpress-02-released/</guid>
		<description><![CDATA[The second update for the beta of FormPress has been released. This version introduces a new &#8220;Required Fields&#8221; feature as well as many maintenance updates.
]]></description>
			<content:encoded><![CDATA[<p>The second update for the beta of <a href="http://almostdaniel.com/formpress/">FormPress</a> has been released. This version introduces a new &#8220;Required Fields&#8221; feature as well as <a href="http://almostdaniel.com/formpress/changelog/">many maintenance updates</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2008/04/03/formpress-02-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Turning WordPress into a fancy form processor</title>
		<link>http://almostdaniel.com/2007/11/21/turning-wordpress-into-a-fancy-form-processor/</link>
		<comments>http://almostdaniel.com/2007/11/21/turning-wordpress-into-a-fancy-form-processor/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 16:33:22 +0000</pubDate>
		<dc:creator>daniel</dc:creator>
				<category><![CDATA[FormPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://almostdaniel.com/2007/11/21/turning-wordpress-into-a-fancy-form-processor/</guid>
		<description><![CDATA[Yes, I know. Five+ years of development. An approach to open-source content management that is at the same time refreshing and inspired. One of the top blogging tools in the world.
And now, WordPress processes my forms for me.


Preempting Genius
The WordPress Plugin API provides hooks into the execution of its code via Actions. As someone views [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I know. Five+ years of development. An approach to open-source content management that is at the same time refreshing and inspired. One of the top blogging tools in the world.</p>
<p>And now, <a href="http://wordpress.org/">WordPress</a> processes my forms for me.<br />
<span id="more-6"></span></p>
<hr />
<h3>Preempting Genius</h3>
<p>The <a href="http://codex.wordpress.org/Plugin_API">WordPress Plugin API</a> provides hooks into the execution of its code via <a href="http://codex.wordpress.org/Plugin_API#Actions">Actions</a>. As someone views a page on your site, a chain of events is triggered until the requested page is displayed. All along this chain, WordPress notifies itself that it is completing certain Actions.</p>
<p>Plugin developers can use the fact that WordPress has just triggered one of its core functions and execute one of the plugin functions as well. In this way, your plugin can insinuate itself quite deeply inside the main WordPress package.</p>
<p>The earliest Action hook that I could find is named <a href="http://codex.wordpress.org/Plugin_API/Action_Reference#Advanced_Actions">init</a>.  The <a href="http://codex.wordpress.org/">WordPress Codex</a> describes this Action:</p>
<blockquote><p> Runs after WordPress has finished loading but before any headers are sent. Useful for intercepting $_GET or $_POST triggers.</p></blockquote>
<p>Translation: Runs after WordPress loads its function environment but before it has displayed anything in the user’s browser. Use our software for your own nefarious goals.</p>
<p>Amazing. They <em>suggest </em>that you use this to turn their software into something else entirely. With a minimum of 8 lines of code, I subverted my favorite open-source software into a simple forms processor that had the power (and data set) of my entire WordPress tool behind it.</p>
<h3>The Method</h3>
<p>Using WordPress Actions is basically a two step process:</p>
<ol>
<li>Write a PHP function that you want to be triggered at some point in the WordPress  execution chain.</li>
<li>Use the <strong>add_action()</strong> function to inform WordPress of a) the core function you want to piggy-back on, and b) the name of the function you wrote in step 1.</li>
</ol>
<h4>Write the Function</h4>
<p>I wanted people to be able to use my WordPress as the action URL in HTML forms. Something like:</p>
<pre>&lt;form action="http://almostdaniel.com/?form_submit=123" method="post"&gt;</pre>
<p>I needed a function that could check for a particular attribute each time my site is accessed, and if the attribute is there, preempt everything else WordPress does (such as loading my actual site) and instead process the form that is (hopefully) being submitted.</p>
<pre>function form_submit() {
 $form_ID = $_REQUEST['form_submit'];
 if ( !empty($form_ID) ) {
  form_do_submit($form_ID, $_REQUEST);
  exit;
 }
}</pre>
<p><em>Note: I&#8217;m only checking to see if some value got passed in “form_submit”</em><em>. A well-written function would validate the information and only process the form if useful information was being passed. I could even go so far as to make sure that the origin of the submission is allowed. But that is for another post.</em></p>
<p>The <strong>form_submit()</strong> function checks to see if the query item “form_submit” was passed to WordPress. In this case, the value of the query item is the form ID number that I will use in processing. If the query item “form_submit” was submitted, I execute a the function <strong>form_do_submit()</strong> (I put it in its own function just for cleanliness of code) that actually processes the submitted <em>$_REQUEST</em> object (i.e., the contents of the form the user just submitted).</p>
<p>And here is the beautiful part: While I am processing the submitted form, I can use any WordPress function I want. I can store and retrieve data from the WordPress database. This proves quite useful.</p>
<h4>Let WordPress in on the Secret</h4>
<p>Now, to tell WordPress when I want it to execute this function, I use the <strong>add_action()</strong> function to my plugin’s main execution space. This ensures that I will always trigger my query check each time my plugin is loaded no matter what.</p>
<pre>add_action('init', 'form_submit', 1);</pre>
<p>As soon as WordPress loads its environment, my <strong>form_submit()</strong> function is executed. The ‘1’ just tells WordPress to execute my function as early as possible (a ‘10‘ would have told WordPress to execute my function as late as possible).</p>
<h4>Jump Ship</h4>
<p>Why does WordPress run my function and not load my website? The handy <strong>exit</strong> command I put in my <strong>form_submit()</strong> function. As soon as I&#8217;ve processed my form, I just tell WordPress to take a coffee break. And we&#8217;re done!</p>
<h3>The Code</h3>
<p>Here is the code in my plugin’s main file:</p>
<pre>function form_submit() {
 $form_ID = $_REQUEST['form_submit'];
 if ( !empty($form_ID) ) {
  form_do_submit($form_ID, $_REQUEST);
  exit;
 }
}

add_action('init', 'form_submit', 1);</pre>
]]></content:encoded>
			<wfw:commentRss>http://almostdaniel.com/2007/11/21/turning-wordpress-into-a-fancy-form-processor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
