<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Framework: The Next Generation</title>
	<atom:link href="http://blog.kevburnsjr.com/framework-the-next-generation/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.kevburnsjr.com/framework-the-next-generation</link>
	<description>Web Application Engineer</description>
	<lastBuildDate>Sun, 18 Dec 2011 02:08:36 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Nate Abele</title>
		<link>http://blog.kevburnsjr.com/framework-the-next-generation/comment-page-1#comment-2114</link>
		<dc:creator>Nate Abele</dc:creator>
		<pubDate>Fri, 20 Nov 2009 17:55:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kevburnsjr.com/?p=607#comment-2114</guid>
		<description>Again, you&#039;re missing the point. The point is not to abstract away having to write HTML, the point is extensibility. Suppose I wanted to replace all my date/time inputs with some other tag that got transformed into a datepicker using jQuery. With tag templates, I can do that easily. Same goes for any other tag.  I can wrap, replace, extend, etc., all without having to unnecessarily extend or replace method calls in my templates.

To the point about the plugin: HTML is pretty much the foundational technology of web applications. Without HTML, you&#039;ve pretty much got nothing. If you&#039;re writing a framework for making web applications, why on earth would you have the component that generates the foundational piece of it in an optional extension??

I&#039;ll grant you, many if not most of the tag templates you listed are hold-overs from a much earlier iteration of that code, (hence most of them are not actually used, and will likely be removed). But let&#039;s be clear: most people don&#039;t want to develop like you do. When choosing between hand-coding HTML (i.e. forms, etc.), or using helpers that save you time *and* buy you flexibility, most people (myself included) would choose the latter. When I go from dev to production, I don&#039;t want to have to think about going through all my templates and replacing all my calls to external assets.

&quot;And it certainly doesn’t mean that it’s okay to disperse additions to the site’s collection of scripts from any-old-place within the application.&quot;

So does this mean that if you need a specific JS library on *one* page in your site, you include it in *all* your pages? This is an anti-optimization at best.

Finally, as my astute colleague Alexander points out, no one is twisting your arm about this. If you like coding straight HTML, by all means, do so.</description>
		<content:encoded><![CDATA[<p>Again, you&#8217;re missing the point. The point is not to abstract away having to write HTML, the point is extensibility. Suppose I wanted to replace all my date/time inputs with some other tag that got transformed into a datepicker using jQuery. With tag templates, I can do that easily. Same goes for any other tag.  I can wrap, replace, extend, etc., all without having to unnecessarily extend or replace method calls in my templates.</p>
<p>To the point about the plugin: HTML is pretty much the foundational technology of web applications. Without HTML, you&#8217;ve pretty much got nothing. If you&#8217;re writing a framework for making web applications, why on earth would you have the component that generates the foundational piece of it in an optional extension??</p>
<p>I&#8217;ll grant you, many if not most of the tag templates you listed are hold-overs from a much earlier iteration of that code, (hence most of them are not actually used, and will likely be removed). But let&#8217;s be clear: most people don&#8217;t want to develop like you do. When choosing between hand-coding HTML (i.e. forms, etc.), or using helpers that save you time *and* buy you flexibility, most people (myself included) would choose the latter. When I go from dev to production, I don&#8217;t want to have to think about going through all my templates and replacing all my calls to external assets.</p>
<p>&#8220;And it certainly doesn’t mean that it’s okay to disperse additions to the site’s collection of scripts from any-old-place within the application.&#8221;</p>
<p>So does this mean that if you need a specific JS library on *one* page in your site, you include it in *all* your pages? This is an anti-optimization at best.</p>
<p>Finally, as my astute colleague Alexander points out, no one is twisting your arm about this. If you like coding straight HTML, by all means, do so.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: KevBurnsJr</title>
		<link>http://blog.kevburnsjr.com/framework-the-next-generation/comment-page-1#comment-2113</link>
		<dc:creator>KevBurnsJr</dc:creator>
		<pubDate>Fri, 20 Nov 2009 16:48:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kevburnsjr.com/?p=607#comment-2113</guid>
		<description>The charset() method.  I don&#039;t have extensive i18n experience so I may very well be full of shit. However I&#039;m pretty sure that just because you set the charset in a framework config variable doesn&#039;t mean to have to generate the HTML inside a helper class.  

I see code like this and I wonder (\lithium\template\Helper\Html;24-52)
&lt;pre lang=&quot;php&quot;&gt;protected $_strings = array(
  &#039;block&#039;            =&gt; &#039;&lt;div{:options}&gt;{:content}&lt;/div&gt;&#039;,
  &#039;block-end&#039;        =&gt; &#039;&lt;/div&gt;&#039;,
  &#039;block-start&#039;      =&gt; &#039;&lt;div{:options}&gt;&#039;,
  &#039;charset&#039;          =&gt; &#039;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;{:type}; charset={:charset}&quot; /&gt;&#039;,
  &#039;doctype&#039;          =&gt; &#039;&lt;!DOCTYPE {:version} PUBLIC &quot;{:dtd}&quot; &quot;{:url}&quot;&gt;&#039;,
  &#039;image&#039;            =&gt; &#039;&lt;img src=&quot;{:path}&quot;{:options} /&gt;&#039;,
  &#039;js-block&#039;         =&gt; &#039;&lt;script type=&quot;text/javascript&quot;{:options}&gt;{:content}&lt;/script&gt;&#039;,
  &#039;js-end&#039;           =&gt; &#039;&lt;/script&gt;&#039;,
  &#039;js-link&#039;          =&gt; &#039;&lt;script type=&quot;text/javascript&quot; src=&quot;{:path}&quot;{:options}&gt;&lt;/script&gt;&#039;,
  &#039;js-start&#039;         =&gt; &#039;&lt;script type=&quot;text/javascript&quot;{:options}&gt;&#039;,
  &#039;link&#039;             =&gt; &#039;&lt;a href=&quot;{:url}&quot;{:options} rel=&quot;nofollow&quot;&gt;{:title}&lt;/a&gt;&#039;,
  &#039;list&#039;             =&gt; &#039;&lt;ul{:options}&gt;{:content}&lt;/ul&gt;&#039;,
  &#039;list-item&#039;        =&gt; &#039;&lt;li{:options}&gt;{:content}&lt;/li&gt;&#039;,
  &#039;meta&#039;             =&gt; &#039;&lt;meta{:options}/&gt;&#039;,
  &#039;meta-link&#039;        =&gt; &#039;&lt;link href=&quot;{:url}&quot;{:options} /&gt;&#039;,
  &#039;para&#039;             =&gt; &#039;&lt;p{:options}&gt;{:content}&lt;/p&gt;&#039;,
  &#039;para-start&#039;       =&gt; &#039;&lt;p{:options}&gt;&#039;,
  &#039;style&#039;            =&gt; &#039;&lt;style type=&quot;text/css&quot;{:options}&gt;{:content}&lt;/style&gt;&#039;,
  &#039;style-import&#039;     =&gt; &#039;&lt;style type=&quot;text/css&quot;{:options}&gt;@import url({:url});&lt;/style&gt;&#039;,
  &#039;style-link&#039;       =&gt; &#039;&lt;link rel=&quot;{:type}&quot; type=&quot;text/css&quot; href=&quot;{:path}&quot;{:options} /&gt;&#039;,
  &#039;table-header&#039;     =&gt; &#039;&lt;th{:options}&gt;{:content}&lt;/th&gt;&#039;,
  &#039;table-header-row&#039; =&gt; &#039;&lt;tr{:options}&gt;{:content}&lt;/tr&gt;&#039;,
  &#039;table-cell&#039;       =&gt; &#039;&lt;td{:options}&gt;{:content}&lt;/td&gt;&#039;,
  &#039;table-row&#039;        =&gt; &#039;&lt;tr{:options}&gt;{:content}&lt;/tr&gt;&#039;,
  &#039;tag&#039;              =&gt; &#039;&lt;{:name}{:options}&gt;{:content}&lt;/{:name}&gt;&#039;,
  &#039;tag-end&#039;          =&gt; &#039;&lt;/{:name}&gt;&#039;,
  &#039;tag-start&#039;        =&gt; &#039;&lt;{:name}{:options}&gt;&#039;
);&lt;/pre&gt;

Is that rly necessary?

I&#039;ve seen many applications where html keeps working its way further away from the view templates.  Letting a helper generate HTML is a constraint I would not soon violate.  But then who cares right?  That&#039;s what helpers are for. To help. But does this belong in the framework or would it be more appropriate as a plugin?

CSS and JS bundling and minification are definitely huge wins for production. That doesn&#039;t mean that the HTML has to be generated in a helper. And it certainly doesn&#039;t mean that it&#039;s okay to disperse additions to the site&#039;s collection of scripts from any-old-place within the application.  If I want to know what scripts are being added to a page, I want to see that in the layout.  For separate applications with individual bundles, nested or separate layouts might be appropriate.

But this is all just me being bitter and bitching about how I would do things differently. Nitpicking aside li3 looks like an interesting framework. I&#039;m planning to release a framework of my own (1/1/2010). I&#039;ll ping you when its up, and hope you&#039;ll see a different approach to what an application framework can be.

- Kev</description>
		<content:encoded><![CDATA[<p>The charset() method.  I don&#8217;t have extensive i18n experience so I may very well be full of shit. However I&#8217;m pretty sure that just because you set the charset in a framework config variable doesn&#8217;t mean to have to generate the HTML inside a helper class.  </p>
<p>I see code like this and I wonder (\lithium\template\Helper\Html;24-52)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">protected <span class="re0">$_strings</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span>
  <span class="st_h">'block'</span>            <span class="sy0">=&gt;</span> <span class="st_h">'&lt;div{:options}&gt;{:content}&lt;/div&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'block-end'</span>        <span class="sy0">=&gt;</span> <span class="st_h">'&lt;/div&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'block-start'</span>      <span class="sy0">=&gt;</span> <span class="st_h">'&lt;div{:options}&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'charset'</span>          <span class="sy0">=&gt;</span> <span class="st_h">'&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;{:type}; charset={:charset}&quot; /&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'doctype'</span>          <span class="sy0">=&gt;</span> <span class="st_h">'&lt;!DOCTYPE {:version} PUBLIC &quot;{:dtd}&quot; &quot;{:url}&quot;&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'image'</span>            <span class="sy0">=&gt;</span> <span class="st_h">'&lt;img src=&quot;{:path}&quot;{:options} /&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'js-block'</span>         <span class="sy0">=&gt;</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;{:options}&gt;{:content}&lt;/script&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'js-end'</span>           <span class="sy0">=&gt;</span> <span class="st_h">'&lt;/script&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'js-link'</span>          <span class="sy0">=&gt;</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot; src=&quot;{:path}&quot;{:options}&gt;&lt;/script&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'js-start'</span>         <span class="sy0">=&gt;</span> <span class="st_h">'&lt;script type=&quot;text/javascript&quot;{:options}&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'link'</span>             <span class="sy0">=&gt;</span> <span class="st_h">'&lt;a href=&quot;{:url}&quot;{:options} rel=&quot;nofollow&quot;&gt;{:title}&lt;/a&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'list'</span>             <span class="sy0">=&gt;</span> <span class="st_h">'&lt;ul{:options}&gt;{:content}&lt;/ul&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'list-item'</span>        <span class="sy0">=&gt;</span> <span class="st_h">'&lt;li{:options}&gt;{:content}&lt;/li&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'meta'</span>             <span class="sy0">=&gt;</span> <span class="st_h">'&lt;meta{:options}/&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'meta-link'</span>        <span class="sy0">=&gt;</span> <span class="st_h">'&lt;link href=&quot;{:url}&quot;{:options} /&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'para'</span>             <span class="sy0">=&gt;</span> <span class="st_h">'&lt;p{:options}&gt;{:content}&lt;/p&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'para-start'</span>       <span class="sy0">=&gt;</span> <span class="st_h">'&lt;p{:options}&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'style'</span>            <span class="sy0">=&gt;</span> <span class="st_h">'&lt;style type=&quot;text/css&quot;{:options}&gt;{:content}&lt;/style&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'style-import'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'&lt;style type=&quot;text/css&quot;{:options}&gt;@import url({:url});&lt;/style&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'style-link'</span>       <span class="sy0">=&gt;</span> <span class="st_h">'&lt;link rel=&quot;{:type}&quot; type=&quot;text/css&quot; href=&quot;{:path}&quot;{:options} /&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'table-header'</span>     <span class="sy0">=&gt;</span> <span class="st_h">'&lt;th{:options}&gt;{:content}&lt;/th&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'table-header-row'</span> <span class="sy0">=&gt;</span> <span class="st_h">'&lt;tr{:options}&gt;{:content}&lt;/tr&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'table-cell'</span>       <span class="sy0">=&gt;</span> <span class="st_h">'&lt;td{:options}&gt;{:content}&lt;/td&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'table-row'</span>        <span class="sy0">=&gt;</span> <span class="st_h">'&lt;tr{:options}&gt;{:content}&lt;/tr&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'tag'</span>              <span class="sy0">=&gt;</span> <span class="st_h">'&lt;{:name}{:options}&gt;{:content}&lt;/{:name}&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'tag-end'</span>          <span class="sy0">=&gt;</span> <span class="st_h">'&lt;/{:name}&gt;'</span><span class="sy0">,</span>
  <span class="st_h">'tag-start'</span>        <span class="sy0">=&gt;</span> <span class="st_h">'&lt;{:name}{:options}&gt;'</span>
<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>

<p>Is that rly necessary?</p>
<p>I&#8217;ve seen many applications where html keeps working its way further away from the view templates.  Letting a helper generate HTML is a constraint I would not soon violate.  But then who cares right?  That&#8217;s what helpers are for. To help. But does this belong in the framework or would it be more appropriate as a plugin?</p>
<p>CSS and JS bundling and minification are definitely huge wins for production. That doesn&#8217;t mean that the HTML has to be generated in a helper. And it certainly doesn&#8217;t mean that it&#8217;s okay to disperse additions to the site&#8217;s collection of scripts from any-old-place within the application.  If I want to know what scripts are being added to a page, I want to see that in the layout.  For separate applications with individual bundles, nested or separate layouts might be appropriate.</p>
<p>But this is all just me being bitter and bitching about how I would do things differently. Nitpicking aside li3 looks like an interesting framework. I&#8217;m planning to release a framework of my own (1/1/2010). I&#8217;ll ping you when its up, and hope you&#8217;ll see a different approach to what an application framework can be.</p>
<p>- Kev</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nate Abele</title>
		<link>http://blog.kevburnsjr.com/framework-the-next-generation/comment-page-1#comment-2111</link>
		<dc:creator>Nate Abele</dc:creator>
		<pubDate>Fri, 20 Nov 2009 09:54:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kevburnsjr.com/?p=607#comment-2111</guid>
		<description>Hey Kev, thanks for checking us out. I&#039;m glad you like most of what you see, but I have to say that when it comes to templates, you&#039;ve really got it wrong.

First of all, I love HTML, especially HTML5. I still get goosebumps every time I type &quot;&lt;!doctype html&gt;&quot; into a new layout template.

I don&#039;t use helper methods because I&#039;m afraid of HTML, and thinking that that&#039;s all those helper methods do for you is incredibly short-sighted.

Let&#039;s take the simplest case first: the charset( ) method, while easy enough to type out manually, ties into the character set settings for the entire framework. It ensures that your data is queried, processed, and displayed in the same consistent character encoding (usually UTF-8, but not always). This not only prevents your pages from displaying broken characters, but has huge security implications as well. Ensuring a consistent (and enforced) character set across the board protects you from several classes of character encoding exploits.

For anyone who&#039;s spent more than 5 minutes with YSlow or front-end optimization in general, the CSS and JavaScript include helpers should be obvious. Not only can I use those to compress (JSMin, Minify, etc.) and pack my assets into a single file (which becomes completely seamless to me as a developer), I can set my site up to only do this in production mode.

Further, with asset timestamps, I don&#039;t have to clear my cache in development every time I make a change to a JS or CSS file. More importantly, I don&#039;t have to tell my users to clear theirs. It just works.

Finally, I&#039;m if you haven&#039;t heard about the new &quot;resource packages&quot; feature which will be part of the next version of Firefox, it&#039;d be worth your while to check it out. With my helpers, I can support resource packages with 1 new class, a couple lines of configuration, and zero template changes.

Next time you try to critique someone else&#039;s design, you would do well to spend a few minutes trying to put yourself in that guy&#039;s shoes. You might stand a better chance of sounding more informed.

Hope that helps,
- Nate</description>
		<content:encoded><![CDATA[<p>Hey Kev, thanks for checking us out. I&#8217;m glad you like most of what you see, but I have to say that when it comes to templates, you&#8217;ve really got it wrong.</p>
<p>First of all, I love HTML, especially HTML5. I still get goosebumps every time I type &#8220;&lt;!doctype html&gt;&#8221; into a new layout template.</p>
<p>I don&#8217;t use helper methods because I&#8217;m afraid of HTML, and thinking that that&#8217;s all those helper methods do for you is incredibly short-sighted.</p>
<p>Let&#8217;s take the simplest case first: the charset( ) method, while easy enough to type out manually, ties into the character set settings for the entire framework. It ensures that your data is queried, processed, and displayed in the same consistent character encoding (usually UTF-8, but not always). This not only prevents your pages from displaying broken characters, but has huge security implications as well. Ensuring a consistent (and enforced) character set across the board protects you from several classes of character encoding exploits.</p>
<p>For anyone who&#8217;s spent more than 5 minutes with YSlow or front-end optimization in general, the CSS and JavaScript include helpers should be obvious. Not only can I use those to compress (JSMin, Minify, etc.) and pack my assets into a single file (which becomes completely seamless to me as a developer), I can set my site up to only do this in production mode.</p>
<p>Further, with asset timestamps, I don&#8217;t have to clear my cache in development every time I make a change to a JS or CSS file. More importantly, I don&#8217;t have to tell my users to clear theirs. It just works.</p>
<p>Finally, I&#8217;m if you haven&#8217;t heard about the new &#8220;resource packages&#8221; feature which will be part of the next version of Firefox, it&#8217;d be worth your while to check it out. With my helpers, I can support resource packages with 1 new class, a couple lines of configuration, and zero template changes.</p>
<p>Next time you try to critique someone else&#8217;s design, you would do well to spend a few minutes trying to put yourself in that guy&#8217;s shoes. You might stand a better chance of sounding more informed.</p>
<p>Hope that helps,<br />
- Nate</p>
]]></content:encoded>
	</item>
</channel>
</rss>

