<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Hi. I’m a front end developer.
I’m leading the effort to implement HTML5 in Drupal 8.
I co-authored The Definitive Guide to Drupal 7.
I’m on Twitter, Google+ &amp; Drupal.org.</description><title>jacine</title><generator>Tumblr (3.0; @jacine)</generator><link>http://jacine.net/</link><item><title>Let's Do Something About Drupal's Theme System</title><description>&lt;p&gt;It’s a mess. Yeah, I said it.  It’s time to admit there is a problem and get serious about fixing it. In this post, I&amp;#8217;m going to explain what I think the problems are, and how I&amp;#8217;d like to see them fixed.&lt;/p&gt;

&lt;p&gt;During the last year, I&amp;#8217;ve spent a lot of time working on the HTML5 Initiative. There has been an incredible amount of work done, by a truly awesome, and growing team. We’ve gotten a &lt;a href="http://drupal.org/node/1193054"&gt;whole&lt;/a&gt; &lt;a href="http://drupal.org/node/1183606"&gt;lot&lt;/a&gt; done so far. The HTML5 Shiv has been added to core, the major templates are all done, and work on Form API elements is moving along. We’re also doing CSS re-factors, at minimum separating administrative styles from the rest.&lt;/p&gt;

&lt;p&gt;Still, I&amp;#8217;ve found myself very unhappy with the theme layer. I see a lot of work going into &lt;a href="http://garfieldtech.com/blog/web-services-initiative"&gt;WSCCI&lt;/a&gt; and now the &lt;a href="http://buytaert.net/layouts-for-drupal-8"&gt;Layout Initiative&lt;/a&gt; that is really exciting. What I don&amp;#8217;t see is if and how that will actually affect the theme system we work with today. This has been really discouraging for me, mostly because I’d like to see a lot more than just markup changes.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve also become skeptical as to whether or not improvements for PHP developers automatically translate into front end improvements. I feel that we got burned with the implementation of Render API.  I don&amp;#8217;t think this was intentional or anything, just sort of &lt;a href="http://garfieldtech.com/blog/drupal-priorities"&gt;the way things are&lt;/a&gt;. I believe the problems that it attempts to solve are hard and the way it goes about it is good, but it was implemented so inconsistently that it ended up making things harder. Many are unwilling to even give it a chance. Without consistent patterns to rely on, many of us are lost. Had the entirety of Drupal’s code base been converted to use the Render API, maybe it would have been different.&lt;/p&gt;

&lt;h2&gt;We are Doing it Wrong&lt;/h2&gt;

&lt;p&gt;When I complain about the theme system, I&amp;#8217;m often surprised by some of the reactions I get.  Many developers know there is a problem, but some seem completely unaware of the problems we face, and the things (which they would consider hacks) we have to do to get the job done. So, in no particular order here is what I think is wrong:&lt;/p&gt;

&lt;h3&gt;Too Many Templates and Theme Functions&lt;/h3&gt;

&lt;p&gt;Creating a new template was the answer for everything in both Drupal 6 and 7. It has been done carelessly, over and over again, and encouraged as The Drupal Way.  As a result, we have hundreds of them. This is just plain ridiculous, considering there are only 109 HTML tags, most of them are used in groups and many of them are text-level elements that wouldn’t exist in Drupal’s theme system. We’d never have theme functions or templates for &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, etc. At least I hope not.&lt;/p&gt;

&lt;h3&gt;Lack of Consistency&lt;/h3&gt;

&lt;p&gt;There is hardly any consistency in what we’re doing inside templates and theme functions. Templates are a mess of arrays, strings, render arrays, and random theme settings variables.  Look no further than page.tpl.php, which is the first impression newbies get with Drupal. In order to change a given variable in page.tpl.php, you need to first track down how it was generated and then figure out the appropriate function that will allow you to change it, which could be one of SO MANY different things:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;THEME_preprocess_page()&lt;/li&gt;
  &lt;li&gt;THEME_process_page() if that doesn&amp;#8217;t work or you&amp;#8217;re looking for something that happens late.&lt;/li&gt;
  &lt;li&gt;Theme settings tweaks in the .info file, and the UI, along with one of the above.&lt;/li&gt;
  &lt;li&gt;THEME_menu_local_tasks_alter() if you want to modify contents of tabs or action links.&lt;/li&gt;
  &lt;li&gt;THEME_menu_local_tasks() if you want to modify the markup of the tabs.&lt;/li&gt;
  &lt;li&gt;THEME_menu_local_task() if you want to modify the markup for the list item and links for the tabs.&lt;/li&gt;
  &lt;li&gt;THEME_menu_local_action() if you want to modify the markup for the list items and links for the action links. Oh, and don&amp;#8217;t forget to wrap that one in a &lt;code&gt;&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;&lt;/code&gt; because just printing the rendering the variable alone leaves you with list items but without a &lt;code&gt;&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;THEME_links(), THEME_links__main_menu() or THEME_links__secondary_menu() to change the markup for the navigation links.&lt;/li&gt;
  &lt;li&gt;THEME_page_alter() if you need to hide or relocate regions or get at anything inside them.&lt;/li&gt;
  &lt;/ul&gt;

This is insane. And we wonder why people have a hard time learning Drupal. And for the record, the &lt;a href="http://drupal.org/project/devel_themer"&gt;Theme Developer&lt;/a&gt; module will not help all of this, nor is it the answer, and neither is documentation.

&lt;h3&gt;Data Structure&lt;/h3&gt;

&lt;p&gt;Data structure is a nightmare, and clearly an afterthought. The variables in templates are complicated, unreliable, and chronically inconsistent and it all starts with the data structure. Unless you are a PHP Ninja and can deal with pre-render functions, good luck trying to change a table into a list or vice versa.&lt;/p&gt;

&lt;p&gt;Drupal may be notorious for its large, complex arrays, but IMO they are not the problem, nor is the existence of data structure.  I believe the fact that data structure is whipped up on a case by case basis and pushed straight to templates in many cases is the root cause for the mess of a theme system that we have.&lt;/p&gt;

&lt;p&gt;Imagine how much easier Drupal would be to learn if the data structure was completely consistent? Imagine if you could just guess based on experience where the value you are looking for is? Imagine if you could transform the format provided for the output from plain text to a definition list by setting one property before rendering?  Imagine if contrib developers didn’t have to write theme functions for everything?&lt;/p&gt;

&lt;h3&gt;Too Many Levels of Processing&lt;h3&gt;

&lt;/h3&gt;&lt;/h3&gt;&lt;p&gt;We’ve got preprocess, process, pre-render and and there can be endless implementations of these. There are no hard and fast rules for when to use one over the other.  Sometimes you learn the hard way that you need to use process instead of preprocess because some module decided to add a variable in the process phase, and nothing you are doing to override that variable has worked in preprocess.&lt;/p&gt;

&lt;p&gt;Other times you’ll get burned by pre render functions.  For example, a while back I was struggling trying to prevent the filter help text from printing on a comment form.  Attempting to hide it in a preprocess, process function or a form alter implementation simply did not work because there is a pre-render and process function manipulating it. The only place it would work was in the template itself. Ultimately I had to implement hook_theme() to use a template for the form solely to accomplish a simple hide(), because the template was the only place it would actually work. It took me hours to figure this out because the data I had access to in the theme layer was what it looked like before before the pre-render function changed it. That&amp;#8217;s way too much troubleshooting and steps to accomplish something that small. This sort of thing is just maddening.&lt;/p&gt;

&lt;p&gt;Additionally, there is no shared processing phase across theme hooks. The default preprocess variables ONLY apply to template file implementations, and cannot be used for theme functions. This means if you need any of the default variables, such as attributes or &lt;a href="http://api.drupal.org/api/drupal/includes%21theme.inc/function/_template_preprocess_default_variables/7"&gt;anything else created here&lt;/a&gt;, you must recreate it in your own theme function implementation.&lt;/p&gt;

&lt;p&gt;Doesn’t seem worth it at the end of the day to me.&lt;/p&gt;

&lt;h2&gt;Your Output is NOT Special&lt;/h2&gt;

&lt;p&gt;Sorry, but it’s just not.  We need to stop treating output as a product of the immediate need of whatever module or API is generating it. The content should drive the output, not the system or API behind it. I’m not saying that we should remove identifiers from output, i.e. a class that labels a container a node or a block.  What I’m saying is&amp;#8230;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Instead of creating new theme hooks for everything under the sun, we should have a common library of components and formats to pull from and utilize.&lt;/li&gt;
  &lt;li&gt;Every container, for example, should be handled the same exact way, whether it’s for a region, node, form element, or whatever.&lt;/li&gt;
  &lt;li&gt;We should stop abusing theme settings to manage content and leave that up to things like blocks, so that content can actually be managed by Drupal. It is a CMS after all.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We don’t have this today.  What we do have is often abused and or not flexible enough, so modules create one-off implementations because it’s easier for them to get the job done.  This ends up hurting everyone.  It’s more code, more complexity, and the attempts to improve things little by little without any planning are making it worse.&lt;/p&gt;

&lt;h2&gt;What I Want to See&lt;/h2&gt;

&lt;p&gt;I’ve been thinking about this for a long, long time, and I’ve started to try and get a handle on what we could possibly do numerous times in the past, starting as far back as two years ago. Ultimately, I’d always be asked “How can we fix it” and always just gave up because the changes that would be required are just massive, and I don’t know if I have the technical aptitude to pull it off. Recently I realized that it’s never going to happen unless I’m able to communicate what I’d like to see somehow, so six weeks ago, I bit the bullet and started gathering my thoughts. I came up with the following.&lt;/p&gt;

&lt;p&gt;Note: It’s still very rough, and not completely thought out. It also doesn’t aim to solve all of these problems, but I think it’s an improvement. Also, I am a theme developer, not a module developer, so please don’t destroy me if you see something you don’t think will work. All of this is up on GitHub and you are welcome to tweak it, log potential problems and send pull requests. Ok?  Great.&lt;/p&gt;

&lt;h3&gt;Provide Two Structural Templates&lt;/h3&gt;

&lt;dl&gt;&lt;dt&gt;Container&lt;/dt&gt;
  &lt;dd&gt;The main purpose of a container is simply to wrap Items (see below). They can be used for anything from regions to nodes to form elements. They usually contain a heading, whether visible or not, and can print ALL children (items) in the base template for that container (sort of like the way you can print and entire view inside views-view.tpl.php).&lt;/dd&gt;
  &lt;dt&gt;Items&lt;/dt&gt;
  &lt;dd&gt;Items are structured content, which are eventually styled via formats (see below) and or components.  They do not print ANY wrapper markup by default, and can optionally be wrapped with containers.&lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;Both of these templates contain the same variables, and the same data structure for as much as humanly possible. They also include $append and $prepend variables that allow content to be injected at the beginning and the end of templates. These are special variables to deal with things like Contextual Links and Shortcut links, which also contain structured content and should not be abused like #prefix and #suffix are today.&lt;/p&gt;

&lt;h3&gt;Use Formats and Components to Generate Output&lt;/h3&gt;

&lt;dl&gt;&lt;dt&gt;Formats&lt;/dt&gt;
  &lt;dd&gt;Formats consist of HTML markup as defined by the spec. Some examples of formats include, unordered or ordered lists, definition lists, tables, etc. Formats need to be extremely flexible. They are variants of the default item implementation, and the key to making them awesome is providing the same data structure across different formats so that they can easily be swapped to use one or another without having to manipulate data.&lt;/dd&gt;
  &lt;dt&gt;Components&lt;/dt&gt;
  &lt;dd&gt;Components are usually a combination of containers and formats that make up custom UI elements. Examples of components include Tabs, Vertical Tabs, Form Widgets (like password confirm and machine name), Carousels, Accordions, etc. Components usually have recommended use cases for application. Their implementation can vary from CSS and JavaScript standpoint, but their markup is pretty standard.&lt;/dd&gt;
&lt;/dl&gt;&lt;h2&gt;Some of the Potential Benefits&lt;/h2&gt;

&lt;p&gt;If we are able to pull this off the way I’m envisioning, we can drastically reduce the number of templates. We can continue to give the theme developer control over the markup without so many assumptions and a sane, reliable data structure and workflow, which IMO will make Drupal a lot easier to learn and a lot less frustrating to use.  It should also allow us to use other theme engines, instead of being locked into PHP Template.&lt;/p&gt;

&lt;p&gt;So, check it out. It’s not, by any means complete, but there are some examples that should give you a decent idea of what it would look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://jacine.github.com/drupal"&gt;&lt;a href="http://jacine.github.com/drupal"&gt;http://jacine.github.com/drupal&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, join the relevant conversations on Drupal.org:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If you’re at Drupalcon, come to the &lt;a href="http://denver2012.drupal.org/content/re-thinking-rendertheme-layers"&gt;Re-thinking the Render/Theme Layers&lt;/a&gt; core conversation.&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/node/1382350"&gt;[meta] Theme/render system problems&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/node/1484720"&gt;Reduce the number of theme functions/templates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://jacine.net/post/19652705220</link><guid>http://jacine.net/post/19652705220</guid><pubDate>Tue, 20 Mar 2012 20:16:16 -0400</pubDate><category>Drupal</category></item><item><title>Drupal 8 HTML5 + Front end Update Slides</title><description>&lt;p&gt;Here are the slides for the presentation I gave yesterday at &lt;a href="http://drupalcampnyc.org"&gt;Drupalcamp NYC&lt;/a&gt; 10.&lt;/p&gt;
&lt;script src="http://speakerdeck.com/embed/4ee50a34f038c0004d00e97e.js"&gt;&lt;/script&gt;&lt;p&gt;&lt;a href="http://bit.ly/uitoVf"&gt;Download the PDF&lt;/a&gt;.&lt;/p&gt;</description><link>http://jacine.net/post/14085371371</link><guid>http://jacine.net/post/14085371371</guid><pubDate>Sun, 11 Dec 2011 17:17:00 -0500</pubDate><category>Drupal</category><category>dcnyc10</category><category>html5</category></item><item><title>adactio:

8 Month Old Deaf Baby’s Reaction To Cochlear Implant...</title><description>&lt;iframe width="400" height="299" src="http://www.youtube.com/embed/HTzTt1VnHRM?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://adactio.tumblr.com/post/13739590467/8-month-old-deaf-babys-reaction-to-cochlear" class="tumblr_blog"&gt;adactio&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;8 Month Old Deaf Baby’s Reaction To Cochlear Implant Being Activated (by &lt;a href="http://www.youtube.com/watch?v=HTzTt1VnHRM"&gt;Pasanonic&lt;/a&gt;)&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://jacine.net/post/13976490828</link><guid>http://jacine.net/post/13976490828</guid><pubDate>Fri, 09 Dec 2011 14:16:07 -0500</pubDate></item><item><title>Strawberry Vomo = Yummy</title><description>&lt;p&gt;Allow me to share the best cocktail I&amp;#8217;ve ever had with you&amp;#8230; :)&lt;/p&gt;

&lt;figure&gt;&lt;img src="http://media.tumblr.com/tumblr_lvtaboCw9V1qazxnc.jpg" alt="Photo of Strawberry Vomo cocktail"/&gt;&lt;figcaption&gt;Strawberry Vomo&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2&gt;Ingredients&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;1 shot - Absolut Vanilla vodka&lt;/li&gt;
  &lt;li&gt;1 shot - sour mix&lt;/li&gt;
  &lt;li&gt;~2 - muddled strawberries&lt;/li&gt;  
  &lt;li&gt;~3 - fresh mint leaves&lt;/li&gt;
  &lt;li&gt;Sprite&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Instructions&lt;/h2&gt;

&lt;p&gt;Combine all the ingredients above, except for the Sprite into an 8 oz. glass. Fill the glass entirely with ice, and then fill the rest with Sprite. Mix it all up (in a Martini shaker if you have one) and enjoy.&lt;/p&gt;

&lt;p&gt;Source: I learned of this drink at &amp;#8220;B Bar&amp;#8221; in &lt;a href="http://www.theborgata.com/"&gt;The Borgata&lt;/a&gt; Hotel and Casino a few weeks ago.&lt;/p&gt;</description><link>http://jacine.net/post/13856292774</link><guid>http://jacine.net/post/13856292774</guid><pubDate>Tue, 06 Dec 2011 21:59:17 -0500</pubDate><category>recipe</category></item><item><title>Creating Patches for Drupal Projects</title><description>&lt;p&gt;This guide will show you what patches are and how to work with them in the context of the Drupal project (though it will likely be useful for any project). When you&amp;#8217;re finished reading, you&amp;#8217;ll be able to create, apply and revert patches like a pro.  Here&amp;#8217;s what we&amp;#8217;ll cover:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="#anatomy"&gt;The Anatomy of a Patch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#git"&gt;Check out a project from the Git Repository&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#create"&gt;How to Create a Patch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#apply"&gt;How to Apply a Patch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#revert"&gt;How to Revert a Patch&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;h3 id="anatomy"&gt;The Anatomy of a Patch&lt;/h3&gt;
&lt;p&gt;A patch is a document that shows the differences between 2 versions of one or more files. We use them for Drupal development along with version control (Git) to communicate changes  in a way that is very easy to understand, share and review. This is an example of a dead simple patch that changes a single line of code. If it looks a little complicated, not to worry.  We&amp;#8217;ll break it down bit by bit.&lt;/p&gt;
&lt;pre class="brush: diff"&gt;
diff --git a/modules/taxonomy/taxonomy-term.tpl.php b/modules/taxonomy/taxonomy-term.tpl.php
index b515a9b..872d4cb 100644
--- a/modules/taxonomy/taxonomy-term.tpl.php
+++ b/modules/taxonomy/taxonomy-term.tpl.php
@@ -37,7 +37,7 @@
* @see template_process()
*/
?&amp;gt;
-&amp;lt;div id="taxonomy-term-&amp;lt;?php print $term-&amp;gt;tid; ?&amp;gt;" class="&amp;lt;?php print $classes; ?&amp;gt; clearfix"&amp;gt;
+&amp;lt;div id="taxonomy-term-&amp;lt;?php print $term-&amp;gt;tid; ?&amp;gt;" class="&amp;lt;?php print $classes; ?&amp;gt;"&amp;gt;
&amp;lt;?php if (!$page): ?&amp;gt;
&amp;lt;h2&amp;gt;&amp;lt;a href="&amp;lt;?php print $term_url; ?&amp;gt;"&amp;gt;&amp;lt;?php print $term_name; ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;/pre&gt;

&lt;h4&gt;The Header&lt;/h4&gt;
&lt;p&gt;The header is automatically generated. It provides information about which files are affected and what command was used to generate it (in this case the &lt;code&gt;git diff&lt;/code&gt;). The last two lines show the files being compared with a &lt;code&gt;---&lt;/code&gt; (original) and &lt;code&gt;+++&lt;/code&gt; (new) prefix. &lt;/p&gt;
&lt;pre class="brush: diff"&gt;
diff --git a/modules/taxonomy/taxonomy-term.tpl.php b/modules/taxonomy/taxonomy-term.tpl.php
index b515a9b..872d4cb 100644
--- a/modules/taxonomy/taxonomy-term.tpl.php
+++ b/modules/taxonomy/taxonomy-term.tpl.php&lt;/pre&gt;


&lt;h4&gt;Hunks of Changes&lt;/h4&gt;
&lt;p&gt;The first line of each hunk range represents the starting line number and the number of lines in the hunk. As above, the &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; prefixes refer to the original and the new version of the file(s). Below this, each change is represented with the original version of it, followed by the new version of it.  The original version is prefixed with minus sign. It represents code being removed in the patch. The plus sign represents the new version of code being added.&lt;/p&gt;
&lt;pre class="brush: diff"&gt;
@@ -37,7 +37,7 @@
* @see template_process()
*/
?&amp;gt;
-&amp;lt;div id="taxonomy-term-&amp;lt;?php print $term-&amp;gt;tid; ?&amp;gt;" class="&amp;lt;?php print $classes; ?&amp;gt; clearfix"&amp;gt;
+&amp;lt;div id="taxonomy-term-&amp;lt;?php print $term-&amp;gt;tid; ?&amp;gt;" class="&amp;lt;?php print $classes; ?&amp;gt;"&amp;gt;
&amp;lt;?php if (!$page): ?&amp;gt;
&amp;lt;h2&amp;gt;&amp;lt;a href="&amp;lt;?php print $term_url; ?&amp;gt;"&amp;gt;&amp;lt;?php print $term_name; ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;/pre&gt;

&lt;h3 id="git"&gt;Checking out a project from Drupal&amp;#8217;s Git Repository with Tower&lt;/h3&gt;

&lt;p&gt;Before you can get started creating patches for Drupal projects, you&amp;#8217;ll need to ensure you&amp;#8217;ve got Git installed and that you&amp;#8217;ve setup a local repository for the Drupal project you want to patch. You can test whether you&amp;#8217;ve got Git installed by opening up terminal, typing &amp;#8220;git&amp;#8221; and hitting enter. If you get a bunch of help text, then you&amp;#8217;re good. If you get a message saying the command isn&amp;#8217;t found, then you&amp;#8217;ll need to install Git.&lt;/p&gt;
&lt;pre class="brush: bash"&gt;-bash: git: command not found&lt;/pre&gt;
&lt;p&gt;If you are comfortable using the command line, &lt;a href="http://book.git-scm.com/2_installing_git.html"&gt;this page&lt;/a&gt; will show you now to install Git. Afterwards, or if you&amp;#8217;ve already got Git installed you can &lt;a href="#create"&gt;skip to creating a patch&lt;/a&gt; instructions. If you need a little guidance with a GUI, read on.&lt;/p&gt;

&lt;h4&gt;Set up a local repository with a GUI (Tower in this case)&lt;/h4&gt;

&lt;p&gt;Personally, I use and like &lt;a href="http://git-tower.com/"&gt;Tower&lt;/a&gt;, so I&amp;#8217;ll show you how to set up a repository using it. There are lots of Git &lt;abbr title="Graphcial User Interface"&gt;GUI&lt;/abbr&gt;&amp;#8217;s available and the process of setting up a new repository is pretty similar across them, so you&amp;#8217;ll probably be able to follow along. Refer to the handbook for a growing list of &lt;a href="http://drupal.org/node/777182"&gt;Git GUI apps&lt;/a&gt; that are available.&lt;/p&gt;  

&lt;ol&gt;&lt;li&gt;
  &lt;p&gt;Begin by click &amp;#8220;Clone Remote Repository&amp;#8221; from the dashboard.&lt;/p&gt;
  &lt;img src="http://i.jacine.net/posts/patches/git-tower-dashboard.png" alt="Clone Remote Repository button"/&gt;&lt;/li&gt;
&lt;li&gt;
  &lt;p&gt;Grab the repository URL from from the &lt;a href="http://drupal.org/project/drupal/git-instructions"&gt;Version control&lt;/a&gt; tab (available from every project page) as use it as the &amp;#8220;Remote URL.&amp;#8221; In this case we are setting up the current development version of Drupal core. Name the repository whatever you want and browse to a location where you want to place the files. Then click &amp;#8220;OK.&amp;#8221;&lt;/p&gt;
  &lt;img src="http://i.jacine.net/posts/patches/git-tower-clone-remote-repo.png" alt="Clone Repository wizard"/&gt;&lt;/li&gt;
&lt;li&gt;
  &lt;p&gt;After clicking &amp;#8220;OK&amp;#8221; the clone process will begin. It usually takes a minute or two depending on your connection speed. When it&amp;#8217;s complete a new repository will appear on your dashboard. When you click into it you&amp;#8217;ll see that repository is already on the proper branch (8.x) and there are no local changes pending. That&amp;#8217;s it.&lt;/p&gt;
  &lt;img src="http://i.jacine.net/posts/patches/git-tower-repo-complete.png" alt="Repository created"/&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;h3 id="create"&gt;How to Create a Patch&lt;/h3&gt;
&lt;p&gt;The first thing we need is an issue to patch. Last month, &lt;a href="http://drupal.org/user/65676"&gt;mortendk&lt;/a&gt; noticed that an unwanted &lt;code&gt;.clearfix&lt;/code&gt; class had somehow made it into the &lt;code&gt;taxnomy-term.tpl.php&lt;/code&gt; template. Eventually, a new &lt;a href="http://drupal.org/node/1198088"&gt;bug report&lt;/a&gt; against core was born. Morten didn&amp;#8217;t know how to create a patch, but he tells us what should be done in the &lt;a href="http://drupal.org/node/1198088#comment-4644622"&gt;first comment&lt;/a&gt;. Unfortunately, if there is no actual patch, it will never reach &amp;#8220;Reviewed and Tested by the Community&amp;#8221; status and will not get fixed so that is just not enough. We need an actual patch. We know what the fix is here.  We simply need to remove the &amp;#8220;clearfix&amp;#8221; class. So how do we do that?&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;
    &lt;h4&gt;Make sure the code is up to date&lt;/h4&gt;
    &lt;p&gt;Since we&amp;#8217;ve already setup the repository, the first thing we need to do is make sure our codebase is completely up to date. There should be no other changes pending in the local repository. If you are using Tower or another GUI, you&amp;#8217;ll need to make sure any pending changes are reverted before continuing.&lt;/p&gt;
    &lt;p&gt;We can update the code in the Terminal with the following 2 commands:&lt;/p&gt;
    &lt;pre class="brush: shell"&gt;
git reset --hard
git pull origin 8.x&lt;/pre&gt;
    &lt;p&gt;In our GUI, we can click the &amp;#8220;Pull&amp;#8221; icon (in Tower it&amp;#8217;s the second icon from the top left) to accomplish the same.&lt;/p&gt;
    &lt;img src="http://i.jacine.net/posts/patches/git-tower-pull-rebase.png" alt="Pull in new changes"/&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;h4&gt;Make Your Changes and Save Them&lt;/h4&gt;
    &lt;p&gt;Since we&amp;#8217;re working with version control, we can freely make changes and then save those changes right in place. They can always be easily reverted, and since none of us actually have commit access to Drupal core (or most contributed projects), we cannot actually do any harm. That being the case, I&amp;#8217;m going to go straight to the affected file: &lt;code&gt;modules/taxonomy/taxonomy-term.tpl.php&lt;/code&gt;. I&amp;#8217;ve deleted the &amp;#8220;clearfix&amp;#8221; class and saved the file. Now when I look in Tower, it appears as &amp;#8220;modified&amp;#8221; and it&amp;#8217;s got what looks like a patch underneath it.&lt;/p&gt;
    &lt;img src="http://i.jacine.net/posts/patches/taxonomy-term-modified-in-tower.png" alt="File shows as modified in Tower"/&gt;&lt;/li&gt;
    &lt;li&gt;
      &lt;h4 id="generate-patch"&gt;Create the Patch&lt;/h4&gt;
      &lt;p&gt;We are now ready to create our patch. Sorry folks, but we&amp;#8217;re definitely going to have to use the command line for this one. Don&amp;#8217;t worry — It&amp;#8217;s 2 painless commands. I promise. First, we navigate to the root of the project and then we run the &lt;code&gt;git diff&lt;/code&gt; command to generate the patch.&lt;/p&gt;
      &lt;pre class="brush: bash"&gt;
cd ~/Dropbox/Sites/drupal-8
git diff &amp;gt; patch-name.patch&lt;/pre&gt;
      &lt;p&gt;It gets more complicated when patches require adding, renaming and(or) removing files. In order to get these changes into a patch, Git needs to know about them. You cannot just &lt;code&gt;git add&lt;/code&gt; or &amp;#8220;stage&amp;#8221; in Tower and then run the patch command. This will not work. Instead, you should stage the files like you normally would for a commit. After doing this, you can generate the patch using the &lt;var&gt;&amp;#8212;staged&lt;/var&gt; option when generating the patch. For more information, see &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-diff.html"&gt;git diff documentation&lt;/a&gt;.&lt;/p&gt;
  &lt;pre class="brush:bash"&gt;
git diff --staged &amp;gt; patch-name.patch&lt;/pre&gt;
  &lt;p&gt;This &lt;a href="http://vimeo.com/jacine/patch"&gt;short video&lt;/a&gt; shows this process in action.&lt;/p&gt;
&lt;iframe src="http://player.vimeo.com/video/28315653" width="525" height="374" frameborder="0"&gt;&lt;/iframe&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;h4&gt;Upload the patch to Drupal.org&lt;/h4&gt;
      &lt;p&gt;You&amp;#8217;re done! Your new patch is sitting in the root of the project directory. Now it&amp;#8217;s time to upload it. It&amp;#8217;s always best to explain what the patch does in the comment to help reviewers.  This one is really simple and so is the comment. The patch is automatically tested by the testbot to ensure that it doesn&amp;#8217;t cause any unwanted test failures elsewhere. Generally markup and CSS patches don&amp;#8217;t have an affect on unit tests, so most of the time these will pass. The green background indicates that this one has passed the tests. Yay!&lt;/p&gt;
      &lt;img src="http://i.jacine.net/posts/patches/patch-posted.png" alt="Patch posted on drupal.org"/&gt;&lt;p&gt;If you &lt;a href="http://drupal.org/node/1198088"&gt;read on&lt;/a&gt; in the issue, you&amp;#8217;ll see that it is reviewed by and marked &amp;#8220;reviewed and tested by the community&amp;#8221; or what we like to call &lt;abbr title="Reviewed and tested by the community"&gt;RTBC&lt;/abbr&gt;.  This gets the attention of core committers. Just a few comments and weeks later, Dries committed the fix to both Drupal 7 and Drupal 8. &lt;strong&gt;SUCCESS!&lt;/strong&gt; Now that wasn&amp;#8217;t so hard was it?  This is how it happens, folks.&lt;/p&gt;
      &lt;img src="http://i.jacine.net/posts/patches/committed.png" alt="Patch committed! Issue fixed!"/&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;h3 id="apply"&gt;How to Apply a Patch&lt;/h3&gt;
&lt;p&gt;The first step, as always is &lt;a href="#create"&gt;making sure your codebase is up to date&lt;/a&gt;. Once your codebase is clean and ready to go, you are ready to apply a patch. I&amp;#8217;ll use the &lt;a href="http://drupal.org/node/1198088"&gt;same issue&lt;/a&gt; as an example.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;
    &lt;p&gt;The first thing we need to do is save &lt;a href="http://drupal.org/files/issues/taxonomy-clearfix-1198088-01.patch"&gt;the patch&lt;/a&gt; to our project root. One fancy trick to speed this process up is to use &lt;a href="http://www.gnu.org/s/wget/"&gt;&lt;code&gt;wget&lt;/code&gt;&lt;/a&gt;. This command doesn&amp;#8217;t come with OS X by default, so if you want it you&amp;#8217;ll need to &lt;a href="http://krypted.com/mac-os-x/howto-install-wget-for-mac-os-x/"&gt;install it&lt;/a&gt;. Of course this is not required. &amp;#8220;Save as&amp;#8221; works just as well, but if you do have it this is the simple command you&amp;#8217;d run from the project root to download the patch:&lt;/p&gt;
    &lt;pre class="brush: bash"&gt;wget http://drupal.org/files/issues/taxonomy-clearfix-1198088-01.patch&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Next we apply the patch using a simple command, again, from the root of the project:&lt;/p&gt;
    &lt;pre class="brush: bash"&gt;git apply -v taxonomy-clearfix-1198088-01.patch&lt;/pre&gt;
    &lt;p&gt;&lt;em&gt;Hint: You can start typing the first few letters of your patch name and use tab completion.&lt;/em&gt;&lt;/p&gt;
    &lt;p&gt;The &lt;var&gt;-v&lt;/var&gt; flag stands for &amp;#8220;verbose.&amp;#8221; When using this, the command will provide feedback in Terminal showing how the patch has applied.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Once the patch has been applied you can begin testing it and making modifications to the code, if needed. You may easily create an updated version of the patch by repeating steps 3-4 in the &lt;a href="#create"&gt;How to create a patch&lt;/a&gt; section.&lt;/p&gt;

&lt;h3 id="revert"&gt;How to Revert a Patch&lt;/h3&gt;
&lt;p&gt;There are a few different ways to revert patches:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;
    &lt;p&gt;Revert changes for a specific file using a &lt;var&gt;-R&lt;/var&gt; (revert) option:&lt;/p&gt;
    &lt;pre class="brush: bash"&gt;git apply -R taxonomy-clearfix-1198088-01.patch&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Revert a specific file using git checkout, or you can select the file and click the &amp;#8220;revert&amp;#8221; icon in your GUI.&lt;/p&gt;
    &lt;pre class="brush: bash"&gt;git checkout modules/taxonomy/taxonomy-term.tpl.php&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Reset the entire working tree with a hard reset:&lt;/p&gt;
    &lt;pre class="brush: bash"&gt;git reset --hard&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;&lt;h3 id="shortcuts"&gt;Learn more&lt;/h3&gt;
&lt;p&gt;Here are some quick shortcuts to the documentation pages that detail everything you ever wanted to know about patches and more.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://drupal.org/documentation/git"&gt;Git Documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/patch/create"&gt;&lt;a href="http://drupal.org/patch/create"&gt;http://drupal.org/patch/create&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/patch/submit"&gt;&lt;a href="http://drupal.org/patch/submit"&gt;http://drupal.org/patch/submit&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/patch/apply"&gt;&lt;a href="http://drupal.org/patch/apply"&gt;http://drupal.org/patch/apply&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://drupal.org/patch/review"&gt;&lt;a href="http://drupal.org/patch/review"&gt;http://drupal.org/patch/review&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://jacine.net/post/8419331209</link><guid>http://jacine.net/post/8419331209</guid><pubDate>Wed, 03 Aug 2011 02:28:00 -0400</pubDate><category>Drupal</category><category>patches</category></item><item><title>HTML5 Initiative Video Presentation and Slides for Drupal Design Camp Berlin</title><description>&lt;p&gt;If you&amp;#8217;re interested in the Drupal 8 HTML5 Initiative, check out this short video presentation and slides I put together for &lt;a href="http://drupaldesigncamp.net/"&gt;Drupal Design Camp Berlin&lt;/a&gt;.  It provides an overview of the initiative, the roadmap, and provides details explaining how to get involved.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="http://player.vimeo.com/video/25585320" width="525" height="394" frameborder="0"&gt;&lt;/iframe&gt; &lt;a href="http://www.vimeo.com/25585320" title="HTML5 Initiative video presentation and transcript on Vimeo.com"&gt;View on Vimeo.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/8439468" width="525" height="394" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;a href="http://www.slideshare.net/jacine/drupal-8-html5-initiative" title="Drupal 8 HTML5 Initiative slides on Slideshare"&gt;View on Slideshare&lt;/a&gt;&lt;/p&gt;</description><link>http://jacine.net/post/7015193159</link><guid>http://jacine.net/post/7015193159</guid><pubDate>Tue, 28 Jun 2011 13:40:00 -0400</pubDate><category>Drupal</category><category>html5</category></item><item><title>HTML5 Drupal 8 Initiative</title><description>&lt;p&gt;Back in March, at Drupalcon Chicago, Dries announced that moving to HTML5 would be one of five major initiatives for Drupal 8.  I was honored when &lt;a href="http://buytaert.net/html5-in-drupal-8"&gt;he asked me to lead the initiative&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These are exciting times for web development and for the Drupal community. Over the past couple of years, we&amp;#8217;ve seen HTML5 usage grow and CSS3 hit the mainstream. There has also been a real shift in design thinking. Gone are the days when you could design a website that would only be viewed on a desktop computer. At the same time, many of us are still stuck supporting older browsers. This presents both a challenge for Drupal, and a great opportunity. Between the &lt;a href="http://buytaert.net/design-for-drupal-8"&gt;Design for Drupal 8&lt;/a&gt;, &lt;a href="http://buytaert.net/web-services-in-drupal-8"&gt;Web Services&lt;/a&gt; and the HTML5 initiative, Drupal 8 is well positioned to make the improvements to Drupal core&amp;#8217;s markup and CSS that many of us (myself included) have been waiting for, for a very long time.&lt;/p&gt;

&lt;h3&gt;Initiative Goals&lt;/h3&gt;
&lt;p&gt;The main goals of this initiative will be to implement HTML5 in Drupal core in a way that will:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Have the most benefit for end users.&lt;/li&gt;
  &lt;li&gt;Enable contributed modules and themes to evolve using HTML5.&lt;/li&gt;
  &lt;li&gt;Allow theme developers to control where to use the new semantic elements, and opt out entirely if they so choose.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We want to ensure we’re spending our time implementing features that will directly benefit Drupal&amp;#8217;s user base the most. As part of this initiative we‘ll focus mostly on:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Adding support for the new form elements to Drupal&amp;#8217;s Form API.&lt;/li&gt;
  &lt;li&gt;Adding new semantic elements in core templates in an appropriate way.&lt;/li&gt;
  &lt;li&gt;Adding ARIA roles to markup to improve accessibility.&lt;/li&gt;
  &lt;li&gt;Simplifying style and script elements.&lt;/li&gt;
  &lt;li&gt;Ensuring input filters and functions accept HTML5 elements.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The process of switching to HTML5 will also allow us take a good hard look at our templates. While updating the markup, we’ll also have the opportunity to re-factor Drupal&amp;#8217;s CSS, and get rid of all the old and crufty bits once and for all.&lt;/p&gt;

&lt;p&gt;HTML5 introduces a number of new APIs including audio, video, drag and drop, offline web applications, storage, geolocation and more. These APIs will not be the main focus of this initiative at this time, but proposals to implement them in core will be considered on a case by case basis.&lt;/p&gt;

&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;In the coming months, we&amp;#8217;ll examine the work that has been done in contrib and discuss what’s best for Drupal core.  We&amp;#8217;ll be working in the core issue queue on &lt;a href="http://drupal.org/project/issues/search/drupal?version=8.x&amp;amp;issue_tags=html5"&gt;issues tagged HTML5&lt;/a&gt; and general discussion will continue in the &lt;a href="http://groups.drupal.org/html5"&gt;HTML5 group&lt;/a&gt;. We&amp;#8217;ll schedule regular meetings to discuss priorities, progress and issues. More details will be posted shortly on the core initiative homepage, which once created will be referenced here.&lt;/p&gt;

&lt;h3&gt;Getting Involved&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;d like to take this opportunity to encourage anyone that’s passionate about HTML5 and wants to get into core development to join this effort. The stronger our team, the more we’ll be able to accomplish and anyone is welcome to get involved. You don’t have to code patches. Feedback, reviewing patches, writing documentation and contributing your awesome project management skills, for example, are just as valuable as code and will go a long way in helping make this initiative a success.  Don’t let a perceived lack of knowledge or phobia of the core issue queues hold you back. ;)&lt;/p&gt;

&lt;p&gt;The best way to get started is to read up on HTML5, and begin to participate by commenting on core &lt;a href="http://drupal.org/project/issues/search/drupal?version=8.x&amp;amp;issue_tags=html5"&gt;HTML5 issues&lt;/a&gt; where you can. If you’re not familiar with HTML5, here are some great free resources to get you started:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://diveintohtml5.org/"&gt;Dive into HTML5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://html5doctor.com/"&gt;HTML5 Doctor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://caniuse.com/"&gt;When can I use&amp;#8230;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://developers.whatwg.org/"&gt;HTML5 Spec for Web Developers&lt;/a&gt; | &lt;a href="http://www.whatwg.org/html"&gt;Full spec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I’d like to thank everyone who encouraged me to accept this challenge, and those who’ve committed to being part of the team so far (more on this will follow soon). I hope to talk to more of you in the coming weeks about logistics and I’m looking forward to working with you all to make this initiative a success. Finally, I’d like to thank my employer, &lt;a href="http://graviteklabs.com"&gt;Gravitek Labs&lt;/a&gt;, for their continued support and for giving me the time I need to work on Drupal core. &lt;/p&gt;</description><link>http://jacine.net/post/5614672142</link><guid>http://jacine.net/post/5614672142</guid><pubDate>Wed, 18 May 2011 16:39:00 -0400</pubDate><category>html5</category><category>Drupal</category></item><item><title>How we've started to clean up CSS in Drupal's System module</title><description>&lt;p&gt;
  A couple of weeks ago, I wrote a post about
  &lt;a href="http://jacine.net/post/978688556/drupal-css"&gt;Drupal&amp;#8217;s CSS&lt;/a&gt; and
  how we can begin to clean it up.  Since then a couple of us have resumed work
  on a  &lt;a href="http://drupal.org/node/885228"&gt;patch&lt;/a&gt; to make some
  progress with the first part:
&lt;/p&gt;
&lt;blockquote cite="http://jacine.net/post/978688556/drupal-css"&gt;
  &lt;p&gt;
    Do a round of cleanup in system.css, and ensure code is in the appropriate
    CSS file.
  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  We are certainly limited to cleanup at this stage, given that Drupal 7 is so
  close to a beta release, so we&amp;#8217;re just moving styles around as opposed to
  rewriting any code. Still, we&amp;#8217;ve gotten &lt;em&gt;really&lt;/em&gt; far.
&lt;/p&gt;
&lt;p&gt;
  Last weekend, while working on the latest patch, I decided to create a document
  summarizing the process of splitting of the base styles from the design styles
  with screenshots and code to help those reviewing the patch. The idea is that 
  themers can easily remove system.theme.css, which makes a lot of assumptions
  about design, without breaking critical functionality.
&lt;/p&gt;
&lt;p&gt;
  This may not end up being the final version of the
  patch, but that&amp;#8217;s beside the point. Hopefully this will help some module
  developers out there begin to think about separating their CSS.
&lt;/p&gt;
&lt;p&gt;
  &lt;a href="http://bit.ly/cshEyL"&gt;Check out the PDF&lt;/a&gt; (pretty pictures and code).
&lt;/p&gt;
&lt;p&gt;
  If you can, please &lt;a href="http://drupal.org/node/885228"&gt;help review&lt;/a&gt; the patch.
&lt;/p&gt;</description><link>http://jacine.net/post/1099051638</link><guid>http://jacine.net/post/1099051638</guid><pubDate>Fri, 10 Sep 2010 18:25:40 -0400</pubDate><category>Drupal</category><category>CSS</category></item><item><title>Stylesheets can't remove CSS files via theme.info anymore in Drupal 7</title><description>&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; The original issue has been fixed.  However, there is still a bug that allows these stylesheets to come back when content is rendered via AJAX.: &lt;a href="http://drupal.org/node/967166"&gt;&lt;a href="http://drupal.org/node/967166"&gt;http://drupal.org/node/967166&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This video demonstrates the Drupal 7 issue outlined here: &lt;a hre f="http://drupal.org/node/901062"&gt;&lt;a href="http://drupal.org/node/901062"&gt;http://drupal.org/node/901062&lt;/a&gt;&lt;/a&gt;. Please comment &lt;a href="http://drupal.org/node/901062"&gt;in the issue&lt;/a&gt; if you want to see this fixed. Posting here wont help.&lt;/p&gt;
&lt;iframe src="http://player.vimeo.com/video/14655898" width="525" height="425" frameborder="0"&gt;&lt;/iframe&gt;</description><link>http://jacine.net/post/1056213989</link><guid>http://jacine.net/post/1056213989</guid><pubDate>Thu, 02 Sep 2010 22:23:00 -0400</pubDate><category>bug</category><category>CSS</category><category>drupal</category></item><item><title>Dreditor TextMate Style for Drupal.org</title><description>&lt;p&gt;
  For those of you who don&amp;#8217;t know,
  &lt;a href="http://drupal.org/project/dreditor"&gt;Dreditor&lt;/a&gt; is a kick-ass
  &lt;a href="https://addons.mozilla.org/en/firefox/addon/748"&gt;Greasemonkey script&lt;/a&gt;
  that &lt;a href="http://www.unleashedmind.com"&gt;Daniel Kudwien&lt;/a&gt;
  wrote to help make the process of reviewing patches more efficient.
&lt;/p&gt;
&lt;p&gt;
  It begins by adding a &amp;#8220;review&amp;#8221; link right next to the link for the patch file that looks
  like this:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://media.tumblr.com/tumblr_l7wm7yifmL1qazxnc.png" alt="Dreditor review link"/&gt;&lt;/p&gt;
&lt;p&gt;
  When you click it, Dreditor opens the patch in an overlay that allows you to
  browse the affected files. It also allows you to select any line(s) you want to 
  comment on and provides a &lt;code&gt;textarea&lt;/code&gt; for you to enter them. You can do this for
  as many lines as you want. When you&amp;#8217;re done, it allows you to paste
  fully formatted comments right in the comment &lt;code&gt;textarea&lt;/code&gt;
  of the issue. It&amp;#8217;s incredibly helpful and one of those &amp;#8220;must have&amp;#8221; tools for anyone
  reviewing patches for Drupal.
&lt;/p&gt;
&lt;p&gt;
  However, I&amp;#8217;m used to viewing patches in TextMate, which is very different looking from
  the default style Dreditor provides. I find TextMate&amp;#8217;s style a lot easier to
  read, so I created a &lt;a href="http://userstyles.org/styles/21102"&gt;Userstyle&lt;/a&gt;
  for it last year. Since then, there have been changes to the markup and new
  features added, and this weekend I finally got around to updating my
  &lt;a href="http://userstyles.org/styles/21102"&gt;Userstyle&lt;/a&gt;. I also gave the
  sidebar a redesign and did some other tweaks. If you use TextMate, you might
  want to &lt;a href="http://userstyles.org/styles/21102"&gt;check it out&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
  Here&amp;#8217;s what it looks like:
&lt;/p&gt;
&lt;img src="http://media.tumblr.com/tumblr_l7wkx0jbx21qazxnc.png" alt="Screenshot of TextMate Style for Dreditor"/&gt;</description><link>http://jacine.net/post/1032076220</link><guid>http://jacine.net/post/1032076220</guid><pubDate>Sun, 29 Aug 2010 14:00:00 -0400</pubDate><category>drupal</category><category>patches</category><category>textmate</category><category>dreditor</category></item><item><title>Jeremy Keith on styling id attributes in stylesheets at Drupalcon Copenhagen</title><description>&lt;p&gt;
  At &lt;a href="http://cph2010.drupal.org"&gt;Drupalcon Copenhagen&lt;/a&gt; last week,
  &lt;a href="http://adactio.com"&gt;Jeremy Keith&lt;/a&gt; did a fantastic
  &lt;a href="http://drupalradar.com/video-jeremy-keith-keynote-session"&gt;keynote on
    HTML5&lt;/a&gt;. After the keynote was finished, he answered some questions.
    Someone asked if the &lt;code&gt;id&lt;/code&gt; attribute behaves the same in HTML5, to
    which he answered yes, and then offered the following, excellent advice:
&lt;/p&gt;

&lt;blockquote cite="http://drupalradar.com/video-jeremy-keith-keynote-session"&gt;
  &lt;p&gt;
    Think about why your using &lt;code&gt;id&lt;/code&gt; though. I&amp;#8217;ve stopped using
    &lt;code&gt;id&lt;/code&gt; in my stylesheets. I generally never style things using
    &lt;code&gt;id&lt;/code&gt;, sticking to class names all the way, because whenever you
    say &lt;code&gt;id&lt;/code&gt; equals you know whatever, header, footer, you&amp;#8217;re saying
    this is only gonna come once in this document. I guarantee it. It will never
    come twice.
  &lt;/p&gt;
  &lt;p&gt;
    That&amp;#8217;s a pretty big commitment. Are you really sure? Are you sure that six
    months from now, a year from now there might not be another one of those
    elements on the same page. Play it safe, use a class.
  &lt;/p&gt;
  &lt;p&gt;
    The &lt;em&gt;only&lt;/em&gt; time I use an &lt;code&gt;id&lt;/code&gt; attribute on an element is
    when I want that element to be addressable, which is the reason
    &lt;code&gt;id&lt;/code&gt;&amp;#8217;s exist, so that you have that fragment identifier in the
    url which is hash and then the &lt;code&gt;id&lt;/code&gt;. That&amp;#8217;s when I use
    &lt;code&gt;id&lt;/code&gt;.
  &lt;/p&gt;
  &lt;p&gt;I pretty much never use it for styling now anyway, and I
    would recommend you look at sticking to classes, understanding specificity,
    understanding the flow, and using classes well, rather than using
    &lt;code&gt;id&lt;/code&gt;.
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
  When theming Drupal sites, targeting &lt;code&gt;id&lt;/code&gt;&amp;#8217;s in stylesheets is a
  very easy trap to fall into. I&amp;#8217;m guilty of doing this myself at times, but
  he&amp;#8217;s absolutely right. Don&amp;#8217;t fall for it! Working with classes is much more
  flexible and generally easier to code.
&lt;/p&gt;
&lt;p&gt;
  Oh, and if you haven&amp;#8217;t watched the keynote, I highly recommend you
  &lt;a href="http://drupalradar.com/video-jeremy-keith-keynote-session"&gt;watch it
    now&lt;/a&gt;. It was top notch.
&lt;/p&gt;
&lt;p&gt;
  If you&amp;#8217;re feeling inspired after that, and want to help with Drupal&amp;#8217;s HTML5
  efforts, join the &lt;a href="http://groups.drupal.org/html5"&gt;HTML5 Drupal
    Group&lt;/a&gt; and get involved with
  &lt;a href="http://drupal.org/project/html5_base"&gt;HTML5 Base (theme)&lt;/a&gt; and
  &lt;a href="http://drupal.org/project/html5_tools"&gt;HTML5 Tools (module)&lt;/a&gt;.
&lt;/p&gt;</description><link>http://jacine.net/post/1031891309</link><guid>http://jacine.net/post/1031891309</guid><pubDate>Sun, 29 Aug 2010 13:19:00 -0400</pubDate><category>drupal</category><category>html5</category><category>CSS</category></item><item><title>The Future of CSS in Drupal</title><description>&lt;p&gt;
  Over the years, the process of theming Drupal sites has improved drastically.
  However, one issue that remains a constant pain point in the community is
  dealing with core and module CSS. I think we all agree that it&amp;#8217;s broken, but
  there are two completely opposite views on how to go about fixing this problem.
  There are those that want to get rid of it altogether, and those that want to
  fix it at the source. What&amp;#8217;s important is that we have a chance to fix things.
  We just need to get involved and share our ideas.
&lt;/p&gt;
&lt;p&gt;
  I&amp;#8217;m firmly in the &amp;#8220;fix it&amp;#8221; camp, and
  I&amp;#8217;m going to take this opportunity to explain why, and also share what I think
  can be done about the situation. If you don&amp;#8217;t care, or already know my story,
  feel free to &lt;a href="#fixing-css"&gt;skip to the fix it part&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;The Evolution of This Drupal Themer&lt;/h3&gt;
&lt;p&gt;
  When I first started theming Drupal sites about 4 years ago it was hard.
  Template files were few and far between, preprocess functions didn&amp;#8217;t exist,
  and figuring out how to override views felt like trying to study rocket
  science. I would google for days at a time, praying for some decent
  information to help me accomplish the task at hand. This was always a crap
  shoot, because back then documentation was scarce and when you did find
  documentation it was either very developer-centric or complete and utter crap.
  I was fairly new to PHP, so at times it was frustrating to say the least,
  but I knew Drupal was going places and I was determined to learn. I spent time
  lurking in IRC, read blog posts from Drupal developers, and usually after
  some trial and error, I was able to figure out how to get most of what I
  needed done.
&lt;/p&gt;
&lt;p&gt;
  When I started working for Gravitek back in 2007, things changed for the
  better. I&amp;#8217;m lucky enough to work with
  &lt;a href="http://drupal.org/user/70352" title="Sarva Bryant"&gt; talented&lt;/a&gt;
  &lt;a href="http://drupal.org/user/92189" title="Vaish"&gt;developers&lt;/a&gt;, that were
  happy to help explain things, and never made me feel stupid. They encouraged
  me. They also told me when I was &amp;#8220;doing it wrong.&amp;#8221; At times, I found this
  annoying. Seriously, what difference did it make what editor I used? And why
  on earth did I need to use the command line to do my job? But hey, they were
  able to do some amazing things with Drupal with ease, things that I still
  consider amazing to this day, so I listened. I&amp;#8217;m glad I did because it made me
  a better coder.
&lt;/p&gt;
&lt;h4&gt;Mistakes&lt;/h4&gt;
&lt;p&gt;
  Since I was mostly able to bend Drupal to my will, of course the natural thing
  to do was to rip things apart and fix it. It was like a reflex. The code
  &lt;em&gt;was&lt;/em&gt; bad and I could do much better, &lt;em&gt;right&lt;/em&gt;? I started by
  rewriting markup to a really minimalist state. This naturally led to the
  removal of many core stylesheets because, of course, I didn&amp;#8217;t need them
  anymore. My markup was clean and, at the time, I was satisfied.
&lt;/p&gt;
&lt;p&gt;
  Throughout the development process, the usual things would occur. New
  functionality was added, which often meant new modules, blocks, views, fields,
  etc. A lot of the time, the modules would add CSS that was based on some
  pre-existing CSS, code that I had removed. I spent a lot of time removing and
  re-writing that CSS to fit my use case. I never once posted a patch to try and
  fix things for everyone. I didn&amp;#8217;t even know what a patch was.
&lt;/p&gt;
&lt;h4&gt;Damage Control and Denial&lt;/h4&gt;
&lt;p&gt;
  Before I knew it, template.php was a mile long, with many theme function
  overrides and crazy logic. I had stripped things down to a minimum, not taking
  into account that every implementation just wasn&amp;#8217;t going to be &lt;em&gt;that&lt;/em&gt;
  simple, and I constantly had to rethink my logic to regain the granularity
  I had initially.
&lt;/p&gt;
&lt;p&gt;
  It was clearly inefficient, and had negative implications for myself and
  client. My code served one highly customized purpose at a time. I was reacting
  to every change that came up and upgrades at the module and core level were
  pure hell. This meant that I ended up doing tons of damage control, which I
  didn&amp;#8217;t enjoy. I enjoyed bringing mockups to life and making clients happy. I
  quickly realized I was &amp;#8220;doing it wrong&amp;#8221; and knew there had to be a better way.
&lt;/p&gt;
&lt;h4&gt;Lessons Learned&lt;/h4&gt;
&lt;p&gt;
  For the most part, I&amp;#8217;ve managed to overcome and these challenges. Realizing
  that Drupal is not WordPress, that things aren&amp;#8217;t always going to be simple,
  and learning to embrace that was a big part of it. Most importantly, I&amp;#8217;ve
  learned that working with the system is better than working against it.
&lt;/p&gt;
&lt;p&gt;
  These days I start with markup that I think provides a good structure and
  will work for the majority of content on the site. Usually, this means a
  couple of extra &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tags and my block.tpl.php and
  panels-pane.tpl.php files end up very similar, or identical in structure. In
  general, I try not to pay attention to what Drupal object is containing the
  content and instead concentrate on the content itself.
&lt;/p&gt;
&lt;p&gt;
  I try to avoid creating template file overrides, unless I have good
  reason. I aim to keep as much logic as possible in preprocess functions,
  and just print variables in template files. I also keep a close eye on
  my preprocess functions, and when it can be done better in a module,
  I try to do it. A good rule of thumb to help determine this, is that when
  something ends up being too much of a challenge to accomplish in the theme
  layer, it probably belongs in a module. Lullabot&amp;#8217;s &lt;a href="http://www.lullabot.com/events/workshops/drupal-module-development-%5Blocation-city_0%5D-%5Blocation-province_0%5D-2009-06-07"&gt;Drupal Module
  Development Workshop&lt;/a&gt; helped me feel more comfortable easing into this.
  I don&amp;#8217;t always succeed, but I try, and I always learn something. I am not
  afraid of PHP, and I don&amp;#8217;t think front-end developers should be.  PHP is your
  friend.
&lt;/p&gt;
&lt;p&gt;
  I don&amp;#8217;t mess with menu theming anymore. It is an epic waste of time. I just
  use the &lt;a href="http://drupal.org/project/menu_block"&gt;Menu block&lt;/a&gt; module,
  which is third in line to &lt;a href="http://drupal.org/project/cck"&gt;CCK&lt;/a&gt; and
  &lt;a href="http://drupal.org/project/views"&gt;Views&lt;/a&gt; on the list of modules
  I cannot live without. BTW, &lt;a href="http://drupal.org/project/panels"&gt;Panels&lt;/a&gt;
  is next in line. I&amp;#8217;ve heard some high profile Drupal developers claim that
  Panels is for people who don&amp;#8217;t know how theme. I think that is absurd. It&amp;#8217;s
  like saying the CSS frameworks are for people who don&amp;#8217;t know how to code
  layouts.
&lt;/p&gt;
&lt;p&gt;
  While I&amp;#8217;m on the subject of layouts, lately I&amp;#8217;ve been using the
  &lt;a href="http://960.gs"&gt;960 Grid System&lt;/a&gt;. I prefer to start theming with a
  very simple base that consists of the &lt;code&gt;ns()&lt;/code&gt; function from the
  &lt;a href="http://drupal.org/project/ninesixty"&gt;NineSixty&lt;/a&gt; theme and
  preprocess functions that combine class and id attributes into one variable
  for template files, as Canvas does in the
  &lt;a href="http://drupal.org/project/studio"&gt;Studio theme&lt;/a&gt;. I also tend to
  recycle code on a much smaller basis, which is where
  &lt;a href="http://drupal.org/project/skinr"&gt;Skinr&lt;/a&gt; comes in handy.
&lt;/p&gt;
&lt;p&gt;
  I try not to sweat the small stuff. For example, I believe that the default
  markup &lt;a href="http://drupal.org/project/views"&gt;Views&lt;/a&gt; provides is good,
  especially with the help of &lt;a href="http://drupal.org/project/semanticviews"&gt;
  Semantic Views&lt;/a&gt;. I know many disagree with this, but I have yet to see
  a better version proposed. Sure there are ways it can be improved, but
  overall, I think it&amp;#8217;s a non-issue and frankly I am baffled by the backlash it
  receives by this community. I mean seriously, what other module gives you that
  many options to change things, and literally guides you through the process
  (if you are willing to look, before lashing out)?
&lt;/p&gt;
&lt;p&gt;
  This has all been working well for me. However, there is one area that
  literally needs the help of an army to overcome. That area is CSS.
&lt;/p&gt;
&lt;a name="fixing-css"&gt;&lt;/a&gt;
&lt;h3&gt;CSS in Drupal is Broken&lt;/h3&gt;
&lt;h4&gt;Some of the problems and challenges we face:&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;
    Lots of CSS is located in the wrong file. system.css is literally a
    garbage pail that exists for when developers don&amp;#8217;t know where to put
    something. Work was done by &lt;a href="http://drupal.org/user/389188"&gt;mverbaar&lt;/a&gt;
    and I to improve this for Drupal 7, but it was quickly (unintentionally)
    messed up again.
  &lt;/li&gt;
  &lt;li&gt;
    Other CSS has no business being there. Completely unnecessary margins,
    padding, font-family, color and other similar declarations are scattered all
    over the place.
  &lt;/li&gt;
  &lt;li&gt;
    In Drupal 7, there&amp;#8217;s a great deal of code in modules that is
    designed for the Seven theme. This is wrong and it makes me crazy.
  &lt;/li&gt;
  &lt;li&gt;
    There&amp;#8217;s lots of outdated code, that was never commented, which ultimately
    needs review and removal.
  &lt;/li&gt;
  &lt;li&gt;
    Some of the markup is so
    &lt;a href="http://drupal.org/node/732914"&gt;horrendous&lt;/a&gt;, it causes equally
    horrendous CSS.
  &lt;/li&gt;
  &lt;li&gt;
    Drupal 7 introduces quite a few brand spanking new modules, that didn&amp;#8217;t get
    refined in contrib and contain some of the most specific selectors I have
    ever seen.
  &lt;/li&gt;
  &lt;li&gt;
    Outside of core, we need to educate module developers to provide what we
    expect, and give them an easy means of implementation.
  &lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Why Getting Rid of it All is Wrong&lt;/h4&gt;
&lt;p&gt;
  I understand that many want to see raw HTML, and don&amp;#8217;t want to deal with any
  existing CSS. Believe me, I get it. I also think it is a natural reaction, but
  having already tried this myself this is why I feel it&amp;#8217;s wrong:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;
   &lt;strong&gt;Maintaining modularity&lt;/strong&gt;
   &lt;p&gt;
     Much of Drupal&amp;#8217;s strength can be attributed to its modularity. The current
     state of CSS &lt;em&gt;files&lt;/em&gt; in Drupal is modular (even though that needs
     improvement), but the CSS styles themselves are not. This is where it
     breaks down, and needs to be fixed – not tossed.
   &lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
   &lt;strong&gt;JavaScript relies on CSS in most implementations&lt;/strong&gt;
   &lt;p&gt;
     When removing all CSS from core, you must also remove the JavaScript
     functionality as the two are closely tied to each other. Things
     like the overlay, toolbar, contextual links, collapsible fieldsets,
     vertical tabs, and tabledrag, etc. simply will not work. Try it yourself
     if you don&amp;#8217;t believe me.
   &lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
   &lt;strong&gt;Duplication needs to be avoided&lt;/strong&gt;
   &lt;p&gt;
     There are things you will want to keep. I&amp;#8217;ll be damned if I am going to
     re-write things like the CSS for the Toolbar, Overlay and Contextual Links
     in any theme, whether it&amp;#8217;s a base theme or not. This is not sustainable,
     modular or effective. It only creates the opportunity for duplicate code
     all over the place, which translates to additional maintenance and
     ultimately damage control.
   &lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
   &lt;strong&gt;UX and accessibility compliance efforts must continue to be supported&lt;/strong&gt;
   &lt;p&gt;
     There is a lot of effort going into achieving these goals, and CSS is often
     a big part of it. We can&amp;#8217;t just give up and ignore those efforts.
   &lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
   &lt;strong&gt;Having a solid base (code, not a base theme) would benefit us all&lt;/strong&gt;
   &lt;p&gt;
     If we all have a good base to start with, I honestly believe that we would
     be bothered by core CSS much less, and hopefully someday, not at all.
     Instead of repeatedly battling bad CSS, we can move and focus on bigger,
     better things, like contributing kick-ass themes and code snippets to help
     others get started.
   &lt;/p&gt;
 &lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;Changing Strategy: A Proposal&lt;/h3&gt;
&lt;p&gt;
  The issues we face are not small, by any means, but I think we can do it, and
  I think we should start working on it now. Here&amp;#8217;s how we can start:
&lt;/p&gt;
&lt;h4&gt;Reevaluate Existing CSS&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;
    Do a round of cleanup in system.css, and ensure code is in the appropriate
    CSS file.
  &lt;/li&gt;
  &lt;li&gt;
    Remove code, and possibly entire files, that clearly do not belong, e.g.
    border, color, font-family, margins, paddings, etc.
  &lt;/li&gt;
  &lt;li&gt;
    Keep CSS that provides helpful visual cues, and accessibility compliance,
    such as system messages, progress bars, etc.
  &lt;/li&gt;
  &lt;li&gt;
    Completely separate admin styles into separate files, i.e. use
    block.admin.css instead of block.css, when the purpose of the file is
    purely administrative.
  &lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;Get Serious About Goals and Organization&lt;/h4&gt;
&lt;p&gt;
  A few of us have been discussing ways to
  &lt;a href="http://drupal.org/node/777814"&gt;overhaul&lt;/a&gt; the way we do things in
  Drupal 8. There hasn&amp;#8217;t been that much discussion yet, because unfortunately
  the idea came up too late in the Drupal 7 development cycle, but the ideas
  are &lt;em&gt;really&lt;/em&gt; good, and IMO open up a world of possibilities. The best
  part is that we can start implementing them now.
&lt;/p&gt;
&lt;p&gt;
  The Mission:&lt;br/&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;
        Make the separation of structural/behavioral styles from design related
        styles standard practice.
      &lt;/li&gt;
      &lt;li&gt;
        Give modules the ability to include a generic design implementation with
        their module, as well as the ability to target specific themes.
      &lt;/li&gt;
    &lt;/ul&gt;&lt;p&gt;Here&amp;#8217;s what it might look like, using the vertical tabs module as an example:&lt;/p&gt;
&lt;table border="0" cellspacing="5" cellpadding="5"&gt;&lt;tr&gt;&lt;th&gt;Filename&lt;/th&gt;
    &lt;th&gt;Purpose&lt;/th&gt;
  &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vertical-tabs.css&lt;/td&gt;
    &lt;td&gt;
      Holds structural and behavior related styling. CSS should be coded against
      the &lt;a href="http://drupal.org/project/stark"&gt;Stark&lt;/a&gt; theme. The
      absolute bare minimum CSS required for the module to function should go
      here. If there is no CSS required, this file should be omitted.&lt;/td&gt;
  &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vertical-tabs.theme.css&lt;/td&gt;
    &lt;td&gt;
      Generic design-related styles that could be used with Stark and other
      themes would go in this file. It&amp;#8217;s where all design assumptions like
      backgrounds, borders, colors, fonts, margins, padding, etc, would go.
    &lt;/td&gt;
  &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vertical-tabs.bartik.css&lt;/td&gt;
    &lt;td&gt;Design-related styles specific to the Bartik theme.&lt;/td&gt;
  &lt;/tr&gt;&lt;/table&gt;&lt;h4&gt;What This Could Mean for Themes&lt;/h4&gt;
&lt;p&gt;
  If module developers follow this as a guideline, in Drupal 7, we can do
  a swift hook_css_alter() in template.php, and wipe out all the design related
  assumptions we don&amp;#8217;t want. Poof, gone! The best part is that JavaScript
  functionality and basic structure would not be lost.
&lt;/p&gt;
&lt;p&gt;
  It also means that we can try give voodoo magical powers to drupal_get_css()
  in Drupal 8, to autoload the ones we need/want. When creating a custom theme
  you automatically wouldn&amp;#8217;t get any of the CSS meant for other themes, and
  there could be a simply theme setting to wipe out all the generic .theme.css
  implementations as well.
&lt;/p&gt;
 &lt;p&gt;
  If you have an opinion on this, want to see more about how it would actually
  work, or think you can help, please &lt;a href="http://drupal.org/node/777814"&gt;chime in&lt;/a&gt;.
 &lt;/p&gt;

&lt;h3&gt;Hey, Front-end Developers: ♥ Drupal needs you. ♥&lt;/h3&gt;
&lt;p&gt;
  As far as I can tell, quality CSS has never been much of a priority in terms
  of code or strategy in Drupal core. This is not surprising to me, even though
  the standards for everything else are so high, because there is a serious lack
  of designers and front-end developers participating in core development. The
  situation is slowly improving, largely because of long-time efforts by
  &lt;a href="http://drupal.org/user/65676" title="John Albin Wilkins"&gt;awesome&lt;/a&gt;,
  &lt;a href="http://drupal.org/user/32095" title="Morten.dk"&gt;enthusiastic&lt;/a&gt;
  members  of the &lt;a href="http://groups.drupal.org/d4d"&gt;Design for Drupal&lt;/a&gt;
  community. However, it&amp;#8217;s still a big problem. We have attracted more front-end
  types to Drupal, but we need more, and we need them involved in core
  development, where they are sorely needed.
&lt;/p&gt;
&lt;h4&gt;Contributing to Core&lt;/h4&gt;
&lt;p&gt;
  Earlier this year, I was asked to volunteer to be a markup co-maintainer for
  Drupal 7. I was hesitant to take this role on for a few of reasons, but
  mostly because I worried that I would not be able to convince front-end
  developers to help, since many are either intimidated by the issue queue in
  general, or think the situation is totally beyond repair.
&lt;/p&gt;
&lt;p&gt;
  Although I was hesitant, I &lt;em&gt;really&lt;/em&gt; wanted to start fixing things.
  I had already gotten quite a few patches in, which was a lot easier than I
  thought it would be and it felt great. With a little encouragement from
  &lt;a href="http://drupal.org/user/1"&gt;Dries&lt;/a&gt; and
  &lt;a href="http://drupal.org/user/24967"&gt;webchick&lt;/a&gt;, along with some guidance
  and tough love from &lt;a href="http://drupal.org/user/54136"&gt;Sun&lt;/a&gt;, I was
  sold. It hasn&amp;#8217;t been easy to find the time, and there is so much to do, but it
  is extremely rewarding, and I am completely confident that if we all come
  together we can fix these problems.
&lt;/p&gt;
&lt;h4&gt;An Opportunity to do Really Rewarding Work&lt;/h4&gt;
&lt;p&gt;
  I really hope all of you rock star Drupal front-end developers reading this
  will take the leap into the issue queue and help us solve some of these issues.
  I know you guys are all out there lurking. You don&amp;#8217;t have to work on this
  specific issue, there&amp;#8217;s plenty of geeky work to go around.
&lt;/p&gt;
&lt;p&gt;
  I&amp;#8217;m not exaggerating when I say it&amp;#8217;s rewarding.  It&amp;#8217;s not always easy, but I
  could practically promise you that you would not regret it. Just
  &lt;a href="http://drupal.org/project/bartik" title="Bartik"&gt;look&lt;/a&gt; at
  &lt;a href="http://drupal.org/project/html5_base" title="An HTML5 base theme"&gt;what&lt;/a&gt;
  &lt;a href="http://twitter.com/jensimmons"&gt;Jen Simmons&lt;/a&gt; has been up to
  &lt;a href="http://drupal.org/project/html5_tools" title="An HTML5 module"&gt;lately&lt;/a&gt;.
&lt;/p&gt;</description><link>http://jacine.net/post/978688556</link><guid>http://jacine.net/post/978688556</guid><pubDate>Thu, 19 Aug 2010 16:35:00 -0400</pubDate><category>drupal</category><category>CSS</category></item><item><title>Hi!</title><description>&lt;p&gt;I moved my site over to Tumblr! I rarely find the time to post anything, and well it&amp;#8217;s just easier to maintain this way. Maybe next time I get a chance to spend an hour or two on this site, I&amp;#8217;ll spend that time actually writing for it instead of updating it.&lt;/p&gt;</description><link>http://jacine.net/post/878237210</link><guid>http://jacine.net/post/878237210</guid><pubDate>Fri, 30 Jul 2010 00:38:27 -0400</pubDate></item></channel></rss>

