<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>development</title>
  <link rel="alternate" type="text/html" href="http://pingv.com/tag/development"/>
  <link rel="self" type="application/atom+xml" href="http://pingv.com/taxonomy/term/88/atom/feed"/>
  <id>http://pingv.com/taxonomy/term/88/atom/feed</id>
  <updated>2007-12-17T18:36:53-06:00</updated>
  <entry>
    <title>Tips using Eclipse and Drupal, at Wednesday&#039;s Meet-Up at pingVision</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/laura/2008/tips-using-eclipse-and-drupal-wednesdays-meet-up-pingvision" />
    <id>http://pingv.com/blog/laura/2008/tips-using-eclipse-and-drupal-wednesdays-meet-up-pingvision</id>
    <published>2008-11-10T17:49:06-06:00</published>
    <updated>2008-11-10T17:49:06-06:00</updated>
    <author>
      <name>Laura</name>
    </author>
    <category term="DBUG" />
    <category term="development" />
    <category term="Drupal" />
    <category term="Eclipse" />
    <category term="Meet-Up" />
    <content type="html"><![CDATA[ <p><a href="http://drupal.meetup.com/15/calendar/8926979/">This Wednesday's Denver/Boulder Drupal Users' Group Meet-Up</a> will have, among other things, a presentation by <a href="http://pingv.com/about/people/al-steffen">Al Steffen</a> on working on Drupal using Eclipse, the open source integrated development environment that makes coding -- and specifically coding for Drupal -- so much easier.</p>
<p>Also, <a href="http://pingv.com/about/people/matt-tucker">Matt Tucker</a> will continue our ad hoc series on things to do with Views by giving a little overview of Draggable Views, which is a module that pretty much does what you'd expect: drag-and-drop ordering of nodes in Views.</p>
<p>But that's just part of the meet-up. As always, the agenda is open.</p>
<p>Have a question?</p>
<p>Launched a website?</p>
<p>Created a cool new Drupal module?</p>
<p>Share it with fellow Drupal aficionados!</p>
<p><a href="http://www.google.com/maps?f=q&amp;hl=en&amp;q=1350+Pine+Street+Suite+1,+Boulder,+CO+80302&amp;ie=UTF8&amp;z=15&amp;om=1&amp;iwloc=addr" target="_blank"><img src="http://pingv.com/files/images/google-map.png" alt="Google map" title="Click for full Google Map and directions" class="wrapr" /></a><br />
Meet-and-greet-and-Za start at 6:30pm, right here in our main meeting room. (Map below.) Presentations start around 7. All are welcome, from experts to the merely curious!</p>
     ]]></content>
  </entry>
  <entry>
    <title>Node Bodies, Teasers, and hook_nodeapi(&#039;presave&#039;)</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/john-fiala/2008/node-bodies-teasers-and-hooknodeapipresave" />
    <id>http://pingv.com/blog/john-fiala/2008/node-bodies-teasers-and-hooknodeapipresave</id>
    <published>2008-11-05T18:16:43-06:00</published>
    <updated>2008-11-05T18:32:21-06:00</updated>
    <author>
      <name>John Fiala</name>
    </author>
    <category term="code" />
    <category term="development" />
    <category term="Drupal" />
    <category term="Drupal 6" />
    <content type="html"><![CDATA[ <p>Here's something interesting to keep in mind the next time you're getting fancy with your nodes during the <code>hook_nodeapi</code> presave step: Don't forget your teaser.</p>
<p>I was having trouble with a Drupal 6 website I've been working on, where it seemed almost as if the body was duplicating part of itself (or sometimes all of itself) on the edit - it looked fine when you were viewing the node, but editing it caused things to duplicate within the body field.  I tried the usual suspects for fixing - I searched for nodeapi calls inside of the custom modules we'd written to find the culprit, and then even just started turning off modules, and the theme, one by one, hoping to find the culprit that way.</p>
<p>Eventually I just tried using sql to modify the teaser in <code>node_revisions</code>, and when this modification showed up in the edit form, I started doing a search in the code for <code>&#039;teaser .&#039;</code> - and I found it in node.pages.inc's node_body_field:</p>
<div class="codeblock"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">node_body_field</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$node</span><span style="color: #007700">, </span><span style="color: #0000BB">$label</span><span style="color: #007700">, </span><span style="color: #0000BB">$word_count</span><span style="color: #007700">) {</p>
<p>&nbsp; </span><span style="color: #FF8000">// Check if we need to restore the teaser at the beginning of the body.<br />&nbsp; </span><span style="color: #0000BB">$include </span><span style="color: #007700">= !isset(</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">teaser</span><span style="color: #007700">) || (</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">teaser </span><span style="color: #007700">== </span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">body</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">teaser</span><span style="color: #007700">)));</p>
<p>...<br />&nbsp; </span><span style="color: #0000BB">$form</span><span style="color: #007700">[</span><span style="color: #DD0000">'body'</span><span style="color: #007700">] = array(<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#type' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'textarea'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#title' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">check_plain</span><span style="color: #007700">(</span><span style="color: #0000BB">$label</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#default_value' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$include </span><span style="color: #007700">? </span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">body </span><span style="color: #007700">: (</span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">teaser </span><span style="color: #007700">. </span><span style="color: #0000BB">$node</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">body</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#rows' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">20</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#required' </span><span style="color: #007700">=&gt; (</span><span style="color: #0000BB">$word_count </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">),<br />&nbsp; );<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
<p>The problem is that the edit form for nodes compares the teaser with the start of the body data.  If they don't match, then it prepends the teaser to the body data - which is normally used for when the person writing the node splits the teaser/body into two parts.  </p>
<p>However, I was changing the body in <code>hook_nodeapi(&#039;presave&#039;)</code>, which turns out to be after the node teaser was created.  The fix was as simple as adding <code>$node-&gt;teaser = node_teaser($node-&gt;body);</code> to the end of the presave code.</p>
     ]]></content>
  </entry>
  <entry>
    <title>&quot;Pro Drupal Development, Second Edition&quot; has arrived</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/laura/2008/pro-drupal-development-second-edition-has-arrived" />
    <id>http://pingv.com/blog/laura/2008/pro-drupal-development-second-edition-has-arrived</id>
    <published>2008-08-22T16:21:17-05:00</published>
    <updated>2008-08-22T16:21:24-05:00</updated>
    <author>
      <name>Laura</name>
    </author>
    <category term="books" />
    <category term="development" />
    <category term="Drupal" />
    <category term="resources" />
    <content type="html"><![CDATA[ <p>One of the signs of maturity of an open source software is when some really high-end books about the software start hitting the shelves.</p>
<p><a href="http://www.flickr.com/photos/scatteredsunshine/2787182241/" title="Pro Drupal Development, Second Edition by scattered sunshine, on Flickr"><img src="http://farm4.static.flickr.com/3116/2787182241_3dac365ac3.jpg" width="333" height="500" alt="Pro Drupal Development, Second Edition" /></a><a href="http://drupalbook.com">Pro Drupal Development</a> set a new high mark when it was initially released. Now this Second Edition covers even more (and has the higher page-count to show for it), with everything updated for the <a href="http://drupal.org">Drupal 6</a> API.</p>
<p>We just received our first seven copies, to get us started. We'll be picking up some more as needed.</p>
<p>You can pick up your copy at Amazon. Go there through <a href="http://drupalbook.com" title="http://drupalbook.com">http://drupalbook.com</a> and a piece of the sale benefits the <a href="http://association.drupal.org">Drupal Association</a>.</p>
     ]]></content>
  </entry>
  <entry>
    <title>Subversion, OS X and the elusive folder merge</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/laura/2008/subversion-os-x-and-elusive-folder-merge" />
    <id>http://pingv.com/blog/laura/2008/subversion-os-x-and-elusive-folder-merge</id>
    <published>2008-08-15T19:56:33-05:00</published>
    <updated>2008-08-15T19:56:33-05:00</updated>
    <author>
      <name>Laura</name>
    </author>
    <category term="development" />
    <category term="Drupal" />
    <category term="Mac" />
    <category term="OS X" />
    <category term="Subversion" />
    <category term="tips and tricks" />
    <content type="html"><![CDATA[ <p><a href="http://www.flickr.com/photos/28263608@N00/2762372471" title="View &#039;Boulder DBUG Drupal User Group Meet-Up&#039; on Flickr.com"><img src="http://farm4.static.flickr.com/3174/2762372471_a501dbeb0d_m.jpg" alt="Boulder DBUG Drupal User Group Meet-Up" border="0" width="240" height="160" /></a></p>
<p>Lo and behold, this past Wednesday, after waiting all day for the <a href="http://drupal.org/node/295065">Drupal 6.4 update</a> that was rumored to be coming out, it finally was released at around 6:30pm MDT. We saw it at the <a href="http://pingv.com/tag/DBUG">DBUG Meetup</a> during setup, and I knew that once again it was time to do some updating. At <a href="http://pingv.com">pingVision</a>, we have an entire dev/test/production process for all of our clients' and our own sites. But when it comes to <a title="my personal blog about tech, scifi, food..." href="http://rarepattern.com">my own</a> <a title="my photoblog" href="http://scatteredsunshine.com">sites</a>, I prefer to do it myself as much as possible so that I can keep my fingers in code and configuration, even while my more official presidential responsibilities tend to pull me in other directions.</p>
<p>And yet my own sites are still under Subversion, so it's not just a matter of uploading the new code and being done with it. No, I have to do it through SVN.</p>
<p>Now if you are like me (and <em>unlike</em> <a href="http://pingv.com/about/people">our developers</a>), and have a general preference for a <em>good</em> GUI over using the command line, <em>and</em> are working on OS X <em>and</em> using version control like <a href="http://en.wikipedia.org/wiki/Subversion_(software)">Subversion</a>, then you likely have run into the problem that the architects of Finder have not deigned to solve: You cannot "merge" folders in OS X using Finder. No, Finder will overwrite folders completely.</p>
<p>Why is this a problem? Anyone who uses Subversion (or other version controller) will know what I'm talking about: If you try to just overwrite wholesale a folder that's under version control, you end up deleting the hidden <em>.svn</em> folder, which has the versioning information. And that leads to Dante's SVN Inferno, where all sorts of error demons torment you while you wail with pangs of regret: <em>Oh, why didn't I </em>merge<em> that folder instead of replacing it?</em></p>
<p>Using Unix command line, you can of course use <code>mv -v</code> to merge folders, but that forces you to use command line. Since OS X is built upon Unix, I and <a href="http://www.google.com/search?q=merge+folders+mac&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a">many others</a> wonder why Finder does not offer this option, not even with contorting combinations of <em>control</em>, <em>option</em>, <em>command</em> and <em>shift</em>. </p>
<p>It's ridiculous. –Especially when you consider that your basic (s)ftp applications can merge folders without a problem. This isn't rocket science.</p>
<p>A trick to merge folders on Mac I figured out a couple of years ago (when I was first introduced to SVN workflows) is this: ftp <em>from</em> your computer <em>to</em> your computer, using your favorite ftp application. </p>
<p>That's right, rather than copy or drag files from folder to folder using Finder, you drag files from folder to folder using ftp. (I use <a href="http://www.panic.com/transmit/">Transmit</a>, but this will work with any ftp app that can merge folders. A free one I can recommend is <a href="http://cyberduck.ch/">Cyberduck</a>.)</p>
<p><a href="http://www.flickr.com/photos/28263608@N00/2765829058" title="View &#039;file sharing&#039; on Flickr.com"><img src="http://farm4.static.flickr.com/3119/2765829058_08162f897f_o.png" alt="file sharing" border="0" width="250" height="387" /></a></p>
<p>To enable this approach, all you need to do is turn on ftp access in OS X. </p>
<p>You do this in <em>Preferences -&gt; Sharing</em>.</p>
<p><em>Click</em> the checkbox to enable "file sharing".</p>
<p>Then, with the file sharing option highlighted, as pictured, click on the Options button down in the lower right-hand area of the window. </p>
<p><a href="http://www.flickr.com/photos/28263608@N00/2764982053" title="View &#039;file sharing ftp&#039; on Flickr.com"><img src="http://farm4.static.flickr.com/3206/2764982053_83e0b1b210_o.png" alt="file sharing ftp" border="0" width="350" height="60" /></a></p>
<p>This reveals the kinds of file sharing you want to enable, and one of them is ftp. Enable that.</p>
<p>Underneath you will now see a message that provides the IP address where your computer can be reached. You just enter that IP address into your ftp app as the remote server. You may need to enter your username and password for your Mac.</p>
<p>That's it. Now just drag folders over from your desktop into the appropriate area on your ftp app and the merge will happen.</p>
<p><strong>Note: Depending upon the ftp app, you may need to set appropriate preferences to merge folders. Here are the settings I use in Transmit:</strong></p>
<p><a href="http://www.flickr.com/photos/28263608@N00/2766014962" title="View &#039;transmit preferences&#039; on Flickr.com"><img src="http://farm4.static.flickr.com/3144/2766014962_765cfe0211_o.png" alt="transmit preferences" border="0" width="350" height="200" /></a></p>
<p>This way you can maintain your website in a dev environment on your Mac desktop or laptop, and manage updating tasks easily without having to do SVN gymnastics or work in Terminal. </p>
<p>I welcome your comments.</p>
     ]]></content>
  </entry>
  <entry>
    <title>pingVision presenters at DrupalCamp Colorado 2008</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/laura/2008/pingvision-presenters-drupalcamp-colorado-2008" />
    <id>http://pingv.com/blog/laura/2008/pingvision-presenters-drupalcamp-colorado-2008</id>
    <published>2008-07-25T16:02:31-05:00</published>
    <updated>2008-07-25T16:11:20-05:00</updated>
    <author>
      <name>Laura</name>
    </author>
    <category term="AHAH" />
    <category term="development" />
    <category term="Drupal" />
    <category term="DrupalCamp Colorado" />
    <category term="Modules" />
    <category term="Performance" />
    <category term="Project Management" />
    <category term="REST" />
    <content type="html"><![CDATA[ <p>While pingVision as a company is one of the many <a href="http://drupalcampcolorado.org/content/our-sponsors">sponsors of DrupalCamp Colorado 2008</a>, several pingVision people are doing presentations and panels. </p>
<p>Here's a quick run-down:</p>
<h3>Kevin Bridges</h3>
<p>...is doing a BOF on <a href="http://drupalcampcolorado.org/content/bof-project-workflow-management-and-client-expectations">Project Workflow Management and Client Expectations</a>.</p>
<blockquote><p>Waterfall, Agile, Scrum, UML, Process Diagrams, Wireframes, Design Comps ... how does it all fit together into a clearly defined purpose?</p></blockquote>
<h3>John Fiala</h3>
<p>...has a presentation on <a href="http://drupalcampcolorado.org/content/advanced-ahah-modifying-forms">Advanced AHAH and Modifying Forms</a>, which gets into that lovely UI goodness of dynamic forms generation, drag-and-drop, etc. He's also doing a presentation on <a href="http://drupalcampcolorado.org/content/using-simpletest-prove-your-code">Using SimpleTest to Prove Your Code</a>. Very useful to any coder.</p>
<h3>Ezra Barnett Gildesgame</h3>
<p>...has a presentation on <a href="http://drupalcampcolorado.org/content/drupal-benchmarking-and-performance">Drupal Benchmarking and Performance</a>, covering:</p>
<blockquote><p>- Factors that affect performance<br />
- Measuring performance<br />
- Different types of hosting (Shared, VPS, "Grid", Mosso)<br />
- Techniques used to make enterprise websites scalable (ie Facebook, LiveJournal)<br />
- Basics of Performance-friendly Drupal Module development</p></blockquote>
<h3>Greg Hines</h3>
<p>...is presenting on <a href="http://drupalcampcolorado.org/content/restful-web-services-and-drupal">RESTful services and Drupal</a>, and will be showcasing his brand spanking new <a href="http://drupal.org/project/rest_provider">REST provider module</a> which provides something of a REST API.</p>
<h3>Ben Jeavons</h3>
<p>...is presenting on <a href="http://drupalcampcolorado.org/content/contributing-drupal">Contributing to Drupal</a>, which is about how anyone can participate in the Drupal community. He is also presenting <a href="http://drupalcampcolorado.org/content/drupal-lightning-demos">Drupal Lightning Demos</a>:</p>
<blockquote><p>Rapid-fire demonstrations of modules, themes, Drupal-powered sites, fancy Drupal code snippets and anything else Drupal related that can be demoed in 5-10 minutes. These are quick, 5-10 minutes including time for questions, demos of something you've built on or with Drupal. Unless we have very few demos there probably won't be time to go looking at code so just show how it works or what it looks like.</p></blockquote>
<p>He's also doing a session on <a href="http://drupalcampcolorado.org/content/the-drupal-community">the Drupal Community</a>:</p>
<blockquote><p>I'd like to talk about the Drupal community, the ways in which we are open and sponsor participation and the ways we've push people away. Because we have pushed people away. What do we do that is right and what are we doing wrong?</p></blockquote>
<h3>Make it better?</h3>
<p>There is also going to be a BOF about <a href="http://drupalcampcolorado.org/content/bof-drupalcampcoloarado-and-drupalcon-colorado-organization">Making DrupalCamp Colorado better</a>, led by Kevin Bridges and (hopefully) many other interested folks. Maybe we can pull together a DrupalCon proposal?</p>
<h3>The geek weekend</h3>
<p>I was going to be joining Greg Knaddison in a session where we, as <a href="http://association.drupal.org/about/staff">permanent members of the Drupal Association General Assembly</a>, were going to give a little update on what's been happening and attempt to answer questions that may arise, but that proposal was rated lower than the others, so it's not going to happen. No, this is a weekend to get your geek on! See you there!</p>
     ]]></content>
  </entry>
  <entry>
    <title>In Drupal 6, Blocks Need Extra Consideration</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/john-fiala/2008/drupal-6-blocks-need-extra-consideration" />
    <id>http://pingv.com/blog/john-fiala/2008/drupal-6-blocks-need-extra-consideration</id>
    <published>2008-05-08T11:19:55-05:00</published>
    <updated>2008-05-08T11:21:50-05:00</updated>
    <author>
      <name>John Fiala</name>
    </author>
    <category term="development" />
    <category term="Drupal" />
    <content type="html"><![CDATA[ <p>One of the interesting new opportunities - and thus pitfalls until you understand them - is Drupal 6's built in <a href="http://api.drupal.org/api/function/hook_block">block caching</a>.  As a developer, I'm generally used to creating <code>hook_block</code> by just specifying the 'info' data in <code>hook_block</code>, and letting the other options be set by the admin via the blocks page.  However, you can't set the caching level there, and more troublesome, you can't change the caching level of a block once it's been put into your site. </p>
<p>That can be a real problem, given that the default for the cache flag is '<code>BLOCK_CACHE_PER_ROLE</code>'.  If the block in question is customized to a user, then Bob's going to see George's data, and that's no good.  Additional problems result with javascript or css that are linked to the block - if <code>drupal_add_js</code> or <code>drupal_add_css</code> are invoked in the block, their effects aren't included in the cache.</p>
<p>So what to do?  From now on, you've got to plan out your blocks with a little more care than before.  Is the block going to change quickly?  Is the block using javascript or css that you can't (or don't want to) include as in-line data in the block's returned data?  Then you may need to go with <code>BLOCK_NO_CACHE</code>.  Is the block's information personal?  Then <code>BLOCK_CACHE_BY_USER</code>.  On the other hand, if you've got something that shows up on every page and doesn't change much, you might want to go with <code>BLOCK_CACHE_GLOBAL</code>.  </p>
<p>But it's important in Drupal 6 to take a few moments when laying out a new block and consider how you want it to be cached, because once you've created it you'll need to dig into the blocks table to change it.</p>
     ]]></content>
  </entry>
  <entry>
    <title>Drupal for Seasoned Professionals - A Quick Guide to Code and Community</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/greg/200706/drupal-seasoned-professionals-quick-guide-code-and-community" />
    <id>http://pingv.com/blog/greg/200706/drupal-seasoned-professionals-quick-guide-code-and-community</id>
    <published>2007-06-01T18:31:34-05:00</published>
    <updated>2007-12-17T18:36:53-06:00</updated>
    <author>
      <name>Greg</name>
    </author>
    <category term="Web" />
    <category term="development" />
    <category term="Drupal" />
    <category term="resources" />
    <content type="html"><![CDATA[ <p>We've been in hiring mode for a while now.  As most any <a href="http://drupal.org/drupal-services">Drupal Service provider</a> will tell you, there's big demand for people and companies that have an expertise in Drupal.  There's also a bit of a shortage of people to satisfy that demand.  We've decided on a strategy of hiring great people regardless of Drupal experience and then getting them plugged into the "Drupal way" of doing things as quickly as we can.</p>
<p>There are really two pieces to that process - learning the Drupal code, API, modules and learning how to interact with the the Drupal community and the social values of that community.  I distilled some information into a quick document that gives a guide to what I consider to be required reading and actions for anyone serious about being a full time Drupal developer.</p>
<h3>Learn the Mantras and the Standards</h3>
<p><strong>"Code is gold."</strong>  Idle discussion or complaining is not valued and will decrease your karma in the eyes of many.  Contributing high quality issues, ideally with patches attached, is valued.  But don't take the phrase too literally - "Code" is just one thing that's valued.  In a big project like Drupal all substantive contributions (e.g. documentation, spam-policing) are valued.</p>
<p><strong><a href="http://drupal.org/node/65922">"The drop is always moving."</a></strong>  New major releases of Drupal will break the API.  This is not a bug, it's a feature.  On that topic, releases happen between every 9 months and 18 months.  Generally there are about 5 months of feature enhancements before the "code freeze".  After the code freeze the only changes allowed are UI improvements, performance improvements, and bug fixes.  Once the beta releases start the only changes allowed are bug fixes and string changes.  At some point in the betas there will be a "string freeze" to allow localizers to translate the interface.  Once a release candidate has been released which saw no new critical bugs a final release will be made.  There is no calendar schedule for releases.  Only the current and last versions are supported, but more could be if someone skilled enough were willing to do it.</p>
<p><strong>"Where's the roadmap."</strong>  There is no official roadmap.  But with a little effort you can guess it, and if you provide the code then can write it.  There are <a href="http://buytaert.net/suggestions-for-drupal-core">Dries' wishlists</a>, <a href="http://drupal.org/node/111140">personal battle plans</a>, and <a href="http://drupal.org/node/105423">predictions for each year</a>.  Official roadmaps only barely make sense in command-and-control environments like corporations.  Open source projects are <a href="http://www.communitywiki.org/en/DoOcracy">Do-Ocracies</a> - the roadmap is determined by those doing the work.  That said, the predictions and battle plan threads are great ways to glean a roadmap.</p>
<p><strong><a href="http://drupal.org/node/23789">Join Forces With Others</a></strong>.  Don't fork modules.  We have many modules that do basically the same thing in a slightly different way.  That's a great way to lose karma points.  Instead you should work together with other developers to make one really great module.</p>
<p><strong>"Don't hack the core."</strong>  Drupal is built from the ground up to be extensible without having to edit the core code.  You shouldn't ever have to edit any of the core or contrib code unless you are providing that as a patch.  Instead, use the hooks, overrides, and theme layer to alter the behavior of the code (Laura has written more about this <a href="http://pingv.com/blog/laura/200702/how-to-use-open-source-and-how-not-to">as a theory of open source</a> and practically in our <a href="http://pingv.com/blog/laura/200703/theming-drupal-overview">presentation at OSCMS2007</a>).</p>
<h3>One-Way Communication you Should Tap Into</h3>
<ul>
<li><a href="http://planet.drupal.org/rss.xml">planet.drupal.org - aggregated feeds from around the web</a></li>
<li><a href="http://drupal.org/rss.xml">Drupal.org front page rss feed</a></li>
<li><a href="http://groups.drupal.org/rss.xml">Groups.Drupal.org/rss.xml</a></li>
<li><a href="http://association.drupal.org/rss.xml">Association.Drupal.org front page feed</a></li>
<li><a href="http://www.lullabot.com/podcast">Lullabot podcasts</a> - listen to them all.</li>
<li>Read <a href="http://www.drupalbook.com">Pro Drupal Development</a> - it's really good, particularly if you already know PHP/MySQL.</li>
</ul>
<h3>The Community</h3>
<ul>
<li><strong><a href="http://lists.drupal.org">Mailing lists</a></strong> support and devel for everyone. Themes or consulting or others if they interests you.</li>
<li><strong><a href="http://www.drupaldojo.com">Drupal Dojo</a></strong> - great for developers looking to improve their Drupal chops. Provides a Library of past screencasts, documentation, great tips and tricks discussion on g.d.o.  <em>Avoid the desire to just use this as replacement for general support!</em></li>
<li><strong><a href="http://drupal.org/forum">Drupal.org forums</a></strong> - they're OK but often deteriorate to lower quality conversation and bickering.  Find the ones of interest and grab the respective RSS feeds.</li>
<li><strong><a href="http://groups.drupal.org">Groups.Drupal.org</a></strong> - look through the group list, find some of interest, subscribe, and then hit <a href="http://groups.drupal.org/unread">http://groups.drupal.org/unread</a> on a daily basis to see what's new in your groups. In particular look for a regional group near you and working groups on topics that interest you.  Both are valuable.</li>
<li>irc - pound the #
<ul>
<li>#drupal - devel/coding talk only.  Unless you are on topic and/or have serious karma don't go off-topic.  It's a friendly room, but not always patient.</li>
<li>#drupal-dojo - a little nicer than #drupal, but don't push the boundaries.  largely for discussion of dojo specific stuff.</li>
<li>#drupal-support give and receive support.</li>
<li>#drupal-themes - theme discussion </li>
<li>#drupal-ecommerce - ecommerce discussion </li>
<li>#drupal-consulting - you get the idea </li>
<li>See also: <a href="http://drupal.org/node/108355">Drupal.org Handbook Page</a></li>
</ul>
</li>
</ul>
<h3>The filtered firehose</h3>
<p>If you want to know the top posts from mailing lists but don't need to see a <a href="http://www.answers.com/topic/color-of-the-bikeshed">color of the bikeshed</a> discussion, these filtered lists are valuable. <a href="http://drupaldashboard.com">drupaldashboard.com</a> - <a href="http://drupaldashboard.com/feed-item/36">cvs commit messages</a>, <a href="http://drupaldashboard.com/feed-item/43">important module releases</a> - "Our editors read the lists so you don't have to."</p>
<h3>The Contributions</h3>
<p>First, go to your Drupal.org account, edit it, and turn on the Contributions Block.  Those links are really handy.  Here are tips organized by tasks appropriate to your skills.</p>
<p><strong>Aspiring Coder</strong> - hit the <a href="http://drupal.org/patch-bingo">patch bingo button</a>, apply the patch, test it out and review it (really <a href="http://drupal.org/patch/review">review</a>, not just +1).  Look for any ways to improve the patch that are in the scope of the issue.  This process will teach you tons about Drupal's inner workings and endear you to other developers.</p>
<p><strong>Coder</strong> - contribute patches (hit the <a href="http://drupal.org/bug-bingo">bug bingo</a>), create a module, conform to the <a href="http://drupal.org/node/318">coding standards</a>, read the CVS <a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/README.txt?view=markup">README</a>/<a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/FAQ.txt?view=markup">FAQ</a>, ask for a CVS account, contribute that module AND support it.  Fame, glory.</p>
<p><strong>Themer</strong> - provide patches for existing themes (including themes that are in Drupal core). Once you learn theming, write your own theme, read the CVS README/FAQ, ask for a <a href="http://drupal.org/cvs-account">CVS account</a>, contribute that theme AND support it.  Fame, glory.</p>
<p><strong>Not a coder or a themer but want to help?</strong></p>
<ul>
<li>Refine bugs by using the <a>"HOWTO Make good issue" guide</a> and applying that wisdom to the bugs you find from the <a href="http://drupal.org/bug-bingo">bug bingo</a> button.  Enormously helpful to all parties.</li>
<li>Provide <a href="http://drupal.org/contribute/documentation">help in the handbook</a> refining the documentation.  Do it enough and you can join the docs team.  Fame, glory.</li>
<li>Join the support team.  Ok, we don't have one.  But you can self-appoint yourself to it.  See <a href="http://drupal.org/user/5195/track">sepeck</a> and <a href="http://drupal.org/user/23570/track">michelle</a> for examples of members of the support team - all you have to do is consistently provide help which both of them do in amazing amounts AND they have huge community karma as a result.</li>
</ul>
<h3>Zero to Hero</h3>
<p>To go from Zero to Hero in terms of your community karma and also your skills try to figure out the answer to someone else's problem.  Great places to find problems are in #drupal-support, the support forums, and the support mailing list.  Just pay attention to the chatter, find a problem that interests you and figure out how to solve it.  Your knowledge and reputation will shoot through the roof and the discussions of how to solve the problem will teach you about parts of Drupal you would never investigate on your own.</p>
<h3>Stay Safe Out there</h3>
<p>The Drupal.org Handbook has a section on <a href="http://drupal.org/writing-secure-code">Writing Secure Code</a>.  Drupal provides lots of facilities to make it easy to write secure code, but if you ignore them then you risk danger.</p>
<p><strong>So, what else is out there?</strong>  Does anyone have any other good, quick ideas for learning the code and the community?</p>
     ]]></content>
  </entry>
</feed>
