<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xml:base="http://drupalcleveland.info/blog/feed2" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Drupal Cleveland Blog</title>
    <link>http://drupalcleveland.info/blog/feed2</link>
    <description>Drupal jobs in Cleveland and Northeast Ohio. Visit http://drupalcleveland.info/jobs for more, and to submit your own.</description>
    <language>en</language>
          <item>
    <title>Companies and Contributing to Drupal</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/companies-and-contributing-drupal</link>
    <description>&lt;p&gt;The &lt;a href=&quot;http://www.lullabot.com/podcast&quot;&gt;Lullabot Podcast&lt;/a&gt; is a great Drupal resource -- from a rockstar company comprised of some of the very best of the Drupal community.&lt;/p&gt;
&lt;p&gt;I&amp;nbsp;was listening to an old episode,&amp;nbsp;(because of a &lt;a href=&quot;http://twitter.com/DavidWheelerPhD/status/2792666212&quot;&gt;Twitter from DavidWheelerPhd&lt;/a&gt;) and came across a quote that resonated with me:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The other thing that I&#039;ve heard a lot of businesses say is that they can&#039;t find Drupal people fast enough.&lt;/p&gt;
&lt;p&gt;What Drupal developer, or contributor in general, doesn&#039;t want to work for a company who gives stuff back to the community?&lt;/p&gt;
&lt;p&gt;Because that&#039;s the ultimate thing, right? You want your work that you do to be done for tons and tons of people -- because it&#039;s good for your feeling of self worth, it&#039;s good for &amp;quot;the world...&amp;quot;&lt;/p&gt;
&lt;p&gt;If you have a choice between signing up with a company who does a lot of work and gives it back to the Drupal community, and helps everybody, or going with a company that makes you sign a bunch of NDAs and locks everything up in perpetuity, and the minute you leave that company all your code is gone...&lt;/p&gt;
&lt;p&gt;It&#039;s a no-brainer choice.&lt;/p&gt;
&lt;p&gt;-- &lt;a href=&quot;http://www.webchick.net/&quot;&gt;Angie Byron&lt;/a&gt; (&lt;a href=&quot;http://drupal.org/user/24967&quot;&gt;webchick&lt;/a&gt;), &lt;a href=&quot;http://www.lullabot.com/audiocast/podcast-54-contributing&quot;&gt;Lullabot Drupal Podcast No. 54: Contributing to Drupal&lt;/a&gt; (at about 33:44) [my transcription &amp;amp;&amp;nbsp;edits]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The health of the project and the world at large are super important factors to the workings and decisions of the Drupal community. This is the Long View, this is sustainability.&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/companies-and-contributing-drupal#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/contribution">contribution</category>
 <category domain="http://drupalcleveland.info/category/tags/employment">employment</category>
 <category domain="http://drupalcleveland.info/category/tags/industry">industry</category>
 <category domain="http://drupalcleveland.info/category/tags/open-source">open source</category>
 <pubDate>Thu, 23 Jul 2009 18:15:51 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">122 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Drupal Presentation for WebSIG</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/drupal-presentation-websig</link>
    <description>&lt;p&gt;Attached are PDF and &lt;a href=&quot;http://www.openoffice.org/product/impress.html&quot;&gt;OpenOffice Impress&lt;/a&gt; versions of the Drupal presentation I prepared for the WebSIG &lt;a href=&quot;/content/open-source-content-management-systems-joomla-drupal-web-development-sig&quot;&gt;Open Source Content Management Systems: Joomla! &amp;amp; Drupal&lt;/a&gt; meeting today.&lt;/p&gt;
&lt;p&gt;The slides comprise a brief overview on Drupal, plus-and-minus certain particulars. Any comments and feedback are welcome and appreciated, as I may refine and expand this for future use.&lt;/p&gt;
&lt;p&gt;I&#039;m releasing the presentation under the &lt;a href=&quot;http://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CreativeCommons Attribution-Share Alike&lt;/a&gt; license -- feel free to reuse and adapt, but please give credit and redistribute likewise.&lt;/p&gt;
&lt;p&gt;Thanks to everyone who attended for your friendly and active participation!&lt;/p&gt;
&lt;table id=&quot;attachments&quot; class=&quot;sticky-enabled&quot;&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class=&quot;odd&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://drupalcleveland.info/sites/default/files/WebSIG.pdf&quot;&gt;WebSIG.pdf&lt;/a&gt;&lt;/td&gt;&lt;td&gt;84.35 KB&lt;/td&gt; &lt;/tr&gt;
 &lt;tr class=&quot;even&quot;&gt;&lt;td&gt;&lt;a href=&quot;http://drupalcleveland.info/sites/default/files/WebSIG.odp&quot;&gt;WebSIG.odp&lt;/a&gt;&lt;/td&gt;&lt;td&gt;65.45 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/drupal-presentation-websig#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/cleveland">cleveland</category>
 <category domain="http://drupalcleveland.info/category/tags/education">education</category>
 <category domain="http://drupalcleveland.info/category/tags/learning">learning</category>
 <category domain="http://drupalcleveland.info/category/tags/presentation">presentation</category>
 <category domain="http://drupalcleveland.info/category/tags/websig">websig</category>
 <enclosure url="http://drupalcleveland.info/sites/default/files/WebSIG.pdf" length="86371" type="application/pdf" />
 <pubDate>Sun, 19 Apr 2009 02:46:59 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">112 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>A Glimpse into Drupal&#039;s Open Source Process</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/glimpse-drupals-open-source-process</link>
    <description>&lt;p&gt;Drupal is free and open-source software. Anybody can download, use, modify, repackage, and redistribute it (event at a price,) freely. Open source is not only key to its distribution but also its development, culture, and very nature.&lt;/p&gt;
&lt;p&gt;Drupal is modular to its core, meaning it&#039;s made up of relatively small pieces, loosely joined. Adding a new feature to a site is often accomplished by installing or creating a module to do so. The collapsible sidebar menus on this site are driven by a module called &lt;a href=&quot;http://drupal.org/project/dhtml_menu&quot;&gt;DHTML Menu&lt;/a&gt;, there&#039;s a &lt;a href=&quot;http://drupal.org/project/google_analytics&quot;&gt;Google Analytics&lt;/a&gt; module for tracking traffic, I just installed &lt;a href=&quot;http://http://drupal.org/project/SaveGuard&quot;&gt;SaveGuard&lt;/a&gt; to warn before allowing to browse away from a page when editing a post, and the list goes on... Blog is a &lt;em&gt;core&lt;/em&gt; module, and Aggregator, and Forum -- these are the modules that comprise Drupal itself, and come standard -- out-of-the-box, (though thankfully there&#039;s no box.)&lt;/p&gt;
&lt;p&gt;A big part of Drupal&#039;s major releases, (this site is running version 6, a number of other sites I&#039;m administering are still on 4 and 5,... and 7 is under development,) is the rolling of contributed modules into to core. For example, Drupal 6 brought the &lt;a href=&quot;http://drupal.org/project/openid&quot;&gt;OpenID&lt;/a&gt; module into core, and Drupal 7, &lt;a href=&quot;http://http://drupal.org/project/cck&quot;&gt;CCK&lt;/a&gt;. These modules were originally created by developers who had an itch to scratch -- maybe for a client, maybe their own interest. CCK was contributed in 2006, and is now the &lt;a href=&quot;http://drupal.org/project/usage&quot;&gt;second most-used contributed module&lt;/a&gt;. OpenID, begun the same year, is much further down the list in popularity, but decided an important inclusion -- for the evolution of Drupal in the emergent &lt;a href=&quot;http://diso-project.org/&quot;&gt;distributed online identity&lt;/a&gt; space. The community chose that these modules should become part of the basic Drupal installation, instead of discovered and installed separately.&lt;/p&gt;
&lt;p&gt;When a module is contributed, it becomes part of the open source process, and managed on &lt;a href=&quot;http://drupal.org&quot;&gt;Drupal.org&lt;/a&gt;. Its project page, (e.g., &lt;a href=&quot;http://drupal.org/project/rotor&quot;&gt;http://drupal.org/project/rotor&lt;/a&gt; ) aggregates info on what the module does, and how to download and use it, as well as provides a platform for feedback and contribution.&lt;/p&gt;
&lt;p&gt;A module&#039;s &lt;em&gt;Issue Queue&lt;/em&gt; is typically the first place to look to see how the module is faring in the wild. Since a contributed module is owned and co-created by the whole community, issue tracking is central to its evolution. Bugs, typos, feature requests, and problems are all submitted and handled here. If I find an error in a module&#039;s workings, I submit an issue about it.&lt;/p&gt;
&lt;p&gt;Each &lt;a href=&quot;http://buytaert.net/responsible-maintainers&quot;&gt;module has a maintainer&lt;/a&gt;, who may or may not be its original creator. An important distinction exists between developer and maintainer -- the latter of which is largely responsible (as facilitator/manager/leader) of the module&#039;s evolution, but not necessarily the one writing all of the code to improve it.&lt;/p&gt;
&lt;p&gt;If I submit an issue on a module, someone else may then come along and corroborate what I&#039;ve seen, another person suggest a solution, and yet another write code to patch the issue. The community then reviews and tests the patch and, if approved, the maintainer might then commit the patch to the module. The change has now been incorporated into the module&#039;s development version, waiting for further inspection to be marked as &#039;stable.&#039;&lt;/p&gt;
&lt;p&gt;The process can be even more involved at every step: a number of designations of an issue&#039;s &lt;em&gt;state&lt;/em&gt; exist, and quite a few issues have been around for years, yet without an agreed-upon or implemented resolution. Drupal&#039;s core happens on the same system, in the same manner.&lt;/p&gt;
&lt;p&gt;Issues, and comments on them, are on the order of hundreds of thousands. Constant discussion, support, and collaboration happen in IRC (chat)&amp;nbsp;channels #drupal, #drupal-support, #drupal-dev, &lt;a href=&quot;http://drupal.org/irc&quot;&gt;and many more&lt;/a&gt;. The ecosystem of support functions well.&amp;nbsp;Its strongest members lead with the realization that handing out ownership and encouragement inspires investment, responsibility, and great work: a meritocracy and gift-economy. If you use Drupal, are you &lt;a href=&quot;http://drupal.org/contribute&quot;&gt;contributing back&lt;/a&gt;?&amp;nbsp;You might not realize how easy it can be. It&#039;s not just your responsibility or the good feelings, &lt;em&gt;it&#039;s your community and your co-creation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;It&#039;s amazing and refreshing that an ad-hoc and decentralized group works so effectively. Co-creating a more secure, fault-tolerant, distributed-risk, adaptable, and robust system:&amp;nbsp;&lt;strong&gt;sounds like a sustainable solution&lt;/strong&gt; to me.&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/glimpse-drupals-open-source-process#comments</comments>
 <pubDate>Thu, 12 Mar 2009 00:14:30 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">106 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>The Path to Richer Text (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/path-richer-text-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/path-richer-text-input-format-improvements-drupal-7&quot;&gt;The Path to Richer Text: Input Format Improvements in Drupal 7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://drupal.org/user/124982&quot;&gt;David Rothstein&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding input formats to main permissions lists -- this role can use this input format.&amp;nbsp;Not quite in D7 core yet.&lt;/p&gt;
&lt;p&gt;Warnings on permissions page for allowing unsafe formats? New patch needed.&lt;/p&gt;
&lt;p&gt;Must get rid of allowing setting of site-wide default text format.&lt;/p&gt;
&lt;p&gt;Weights on input formats&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User&#039;s default input format is her lowest-weight (highest on list) allowed format&lt;/li&gt;
&lt;li&gt;Plain text becomes site-wide lowest-common denominator text format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Long standing issue with patch (PCNR -- please review!)&amp;nbsp;for this:&amp;nbsp;&lt;a href=&quot;http://drupal.org/node/11218&quot;&gt;#11218:&amp;nbsp;Allow default input formats per role, and integrate input format permissions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also be easy to reliably&amp;nbsp;(in code) override the default format, and user experience improvements.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/304330&quot;&gt;Text format widget&lt;/a&gt; - adds list menu of available formats below text field (instead of&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;particulary WYSIWYG included in core is not the right question to focus on now.&amp;nbsp;Better WYSIWYG support &lt;em&gt;is&lt;/em&gt;. Check out &lt;a href=&quot;http://drupal.org/user/54136&quot;&gt;sun&lt;/a&gt;&#039;s &lt;a href=&quot;http://drupal.org/project/wysiwyg&quot;&gt;WYSIWYG module&lt;/a&gt; and &lt;a href=&quot;http://groups.drupal.org/wysiwyg&quot;&gt;g.d.o./wysiwyg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Can D7 text formats give WYSIWYGs enough info to disable buttons on their own?&lt;/p&gt;
&lt;p&gt;Can we get D7 core/contrib modules to include text formats attached to them?&lt;/p&gt;
&lt;p&gt;With Fields in Core!&amp;nbsp;(patch posted yesterday: &lt;a href=&quot;http://drupal.org/node/391924&quot;&gt;#391924: Use Fields to store variables that require text format support&lt;/a&gt; )&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fields have text format support built in, and you can attach a field to any kind of &amp;quot;object&amp;quot;&lt;/li&gt;
&lt;li&gt;..Was relatively easy, then to create an API that uses fields to automatically store formatted text&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(see also: &lt;a href=&quot;http://groups.drupal.org/node/8911&quot;&gt;Cutting through the input format clutter&lt;/a&gt;)&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/path-richer-text-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Fri, 06 Mar 2009 22:17:58 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">105 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Keynote: Our Online Identity (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/keynote-our-online-identity-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/node/4222&quot;&gt;Keynote: Our Online Identity&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/user/chrismessina&quot;&gt;Chris Messina&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Social Web, Cloud computing, and its discontents&lt;/p&gt;
&lt;p&gt;Our Online Identies, My Online Identity, I am Mine, I am You&lt;/p&gt;
&lt;p&gt;Web 2.0:&amp;nbsp;WTF?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;Build applications that harnes network effects -- to get better, the more people use them.&amp;quot; (O&#039;Reilly)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rules&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The perpetual beta becomes a process for engaging customers&lt;/li&gt;
&lt;li&gt;Share and share-alike, reuse, provide APIs&lt;/li&gt;
&lt;li&gt;Ignore distinction between client and server&lt;/li&gt;
&lt;li&gt;Open and standards win&lt;/li&gt;
&lt;li&gt;Lock-in comes from data accrual, owning a namespace, non-standard formats&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;World doesn&#039;t really operate on version numbers.&lt;/p&gt;
&lt;p&gt;Does Open Source Matter?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not like it used to.&lt;/li&gt;
&lt;li&gt;it&#039;s more about data...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Technology is becoming humanized. Humans are bcoming technologized.&lt;/p&gt;
&lt;p&gt;Before blow-ups and big buy-outs, we (geeks) were outliers using little unknown sites and gadgets -- . Now, those who don&#039;t, are becoming the outliers...&lt;/p&gt;
&lt;p&gt;We are becoming cyborganic.&lt;/p&gt;
&lt;p&gt;Summary&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;online services I&amp;nbsp;use help defines [part of] my identity&lt;/li&gt;
&lt;li&gt;social graph also helps define:&amp;nbsp;you somewhat the aggregate of your friends&lt;/li&gt;
&lt;li&gt;(false)&amp;nbsp;dichotomy between online and offline world is going away&lt;/li&gt;
&lt;li&gt;Online Social Networks are moving away from &amp;quot;handles&amp;quot; to Real Names -- this is significant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Friends&lt;/li&gt;
&lt;li&gt;Social Web&lt;/li&gt;
&lt;li&gt;Open, Social Stack&lt;/li&gt;
&lt;li&gt;Privacy and Property&lt;/li&gt;
&lt;li&gt;Cloud Computing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;#hashtags:&amp;nbsp;low-cost way to add to a service without changing underlying premise&lt;/p&gt;
&lt;p&gt;Activity Streams&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enhance way to utilize social web&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Twitter usage has been hockey-stick growth, whereas blogging doesn&#039;t work as well, now that so many folk are online -- now not enough time to write and write and read and read.&lt;/p&gt;
&lt;p&gt;We&#039;re addicted to our friends, not the computer.&amp;nbsp;When the computer lets us get access to our frineds, we look like we&#039;re addicted to the computer. -- danah boyd&lt;/p&gt;
&lt;p&gt;moving away from banal senseless befriending behavior to more pointed attention.&amp;nbsp;Activity streams allow and necessitate this.&lt;/p&gt;
&lt;p&gt;How do you get your service into the FriendFeed list? RSS/Atom only way, right now, but these feed types are not enough to model richness that web offers.&lt;/p&gt;
&lt;p&gt;Creating an extension to atom that allows for more expressiveness:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Weblog Entry&lt;/li&gt;
&lt;li&gt;Note&lt;/li&gt;
&lt;li&gt;Photo&lt;/li&gt;
&lt;li&gt;Video&lt;/li&gt;
&lt;li&gt;Bookmark&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Move out of Facebook and FriendFeed, but allow for rich activity streams&lt;/p&gt;
&lt;p&gt;Open, Social Stack&lt;/p&gt;
&lt;p&gt;In Drupal, &lt;a href=&quot;http://drupal.org/project/activity&quot;&gt;Activity module&lt;/a&gt; coming along..&lt;/p&gt;
&lt;p&gt;The Stack, (human readably) :&amp;nbsp;Identity, Friends, Feed&lt;/p&gt;
&lt;p&gt;The Blimp diagram: Identity contains Discovery contains Authorization&lt;/p&gt;
&lt;p&gt;Private and Public data:&amp;nbsp;your Streams, Friends, Profile have some parts needing auth, some not&lt;/p&gt;
&lt;p&gt;Facebook gives pretty robust control over what you show to who, with assumption that options make users feel safer and more in control&lt;/p&gt;
&lt;p&gt;Performative Identity&lt;/p&gt;
&lt;p&gt;People, companies, and organizations are discovering that there is value in openness.&lt;/p&gt;
&lt;p&gt;Legality of sharing user information?&amp;nbsp;All bets are off.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;People want full ownership and control of their information so they can turn off access to it at any time. At the same time, people also want to be able to bring the information others have shared with them&amp;mdash;like email addresses, phone numbers, photos and so on&amp;mdash;to other services and grant those services access to those people&#039;s information. These two positions are at odds with each other.&lt;/p&gt;
&lt;p&gt;Mark Zuckerberg, &lt;a href=&quot;http://blog.facebook.com/blog.php?post=54434097130&quot;&gt;On Facebook, People Own and Control Their Information&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Terms of service; changes freak people out.&lt;/p&gt;
&lt;p&gt;Walled gardens are going away.&lt;/p&gt;
&lt;p&gt;Licensing and &amp;quot;property&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;copyrights, trademarks, patents:&amp;nbsp;protect creators&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ownership, but ability to expose to rest of the world&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;express where you store your data...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Government&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to bring transparency to gov&#039;t?
&lt;ul&gt;
&lt;li&gt;current situation is result of lack&lt;/li&gt;
&lt;li&gt;we (geeks)&amp;nbsp;know more about transparency than most others&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Open Source Government
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transparent and &lt;em&gt;modifiable&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;government&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OpenID&amp;nbsp;in Government
&lt;ul&gt;
&lt;li&gt;Trust and transparency make open source work&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Work on stuff that matters!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work on something that matter more to you than money.&lt;/li&gt;
&lt;li&gt;Create more value than you capture.&lt;/li&gt;
&lt;li&gt;Take the long view.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/keynote-our-online-identity-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Fri, 06 Mar 2009 20:22:57 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">104 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Project Management For Fun and Profit</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/project-management-fun-and-profit</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/project-management-fun-and-profit&quot;&gt;Project Management For Fun and Profit&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.twitter.com/ccg&quot;&gt;Crystal Williams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Talking Stage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is no shortcut&lt;/li&gt;
&lt;li&gt;Clients are the experts on their needs, though they don&#039;t always know how to express that, but your&#039;e the expert on getting them there. Show what you know, but listen.&lt;/li&gt;
&lt;li&gt;You can&#039;t afford to save time on planning or communication.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Process&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your toolbox: light and agile but provide structure&lt;/li&gt;
&lt;li&gt;minimize the &amp;quot;what now?&amp;quot;, &amp;quot;where is that file?&amp;quot;, &amp;quot;when is it due?&amp;quot;&lt;/li&gt;
&lt;li&gt;re-examine until you have structure works&lt;/li&gt;
&lt;li&gt;there should be an owner for every piece: if you&#039;re a PM, try to make it not be you!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agile vs/ Waterfall&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Neither is appropriate for ALL&amp;nbsp;projects or developers, so be careful.&lt;/li&gt;
&lt;li&gt;Agile
&lt;ul&gt;
&lt;li&gt;has become a sacred cow in OSS&amp;nbsp;community. Can be great when it works, but takes a lot from client&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Waterfall: &amp;quot;standard&amp;quot;&amp;nbsp;sequential design &amp;amp;&amp;nbsp;dev process&lt;/li&gt;
&lt;li&gt;Holy war...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agile
&lt;ul&gt;
&lt;li&gt;User-centric social networking sites, Web apps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Waterfall
&lt;ul&gt;
&lt;li&gt;Corporate Sites and other informational sites, even with interactivity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agile Requirements&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extremely talented and motivated developers who know how to say &lt;em&gt;No&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Constant access to design resources&lt;/li&gt;
&lt;li&gt;Progressive clients who are willing to invest continuous resources in the project and actively &lt;em&gt;think&lt;/em&gt; about the direction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even with Agile,&lt;/p&gt;
&lt;p&gt;Estimating&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is hard!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://civicactions.com/estimating-worksheet&quot;&gt;The CivicActions Estimating Worksheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;State assumptions&lt;/li&gt;
&lt;li&gt;Estimate each area of work separately, and include adequate time for communication with client and internal, and testing&lt;/li&gt;
&lt;li&gt;Never estimate &amp;quot;to&amp;quot;&amp;nbsp;a budget: line items disregard available budget: how long to get the job done?
&lt;ul&gt;
&lt;li&gt;discuss a reduced feature set&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scheduling&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mythical man-hour:&amp;nbsp;8 hour task doesn&#039;t take 2 people 4 hours.&lt;/li&gt;
&lt;li&gt;order of operations:&amp;nbsp;gaps in dependencies&lt;/li&gt;
&lt;li&gt;client approval time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Design&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clients don&#039;t care about Drupal. Design for their needs, and not for Drupal defaults.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tools&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scheduling:&amp;nbsp;Merlin, MS&amp;nbsp;Project&lt;/li&gt;
&lt;li&gt;WIreframes and sitemaps:&amp;nbsp;omnigraffle, Visio&lt;/li&gt;
&lt;li&gt;Shared notes, estimation worksheets, proposal drafts:&amp;nbsp;intranet, wikis, google docs&lt;/li&gt;
&lt;li&gt;task and time tracking:&amp;nbsp;basecamp, unfuddle, storm, harvest, LiquidPlanner, more more&lt;/li&gt;
&lt;li&gt;Bug tracking:&amp;nbsp;Mantis, Trac, JIRA, Case Tracker Module, many&lt;/li&gt;
&lt;li&gt;Code Review:&amp;nbsp;Crucible&lt;/li&gt;
&lt;li&gt;Whiteboards (real)&lt;/li&gt;
&lt;li&gt;Skype/IM&amp;nbsp;:&amp;nbsp;sparingly, and never for critique&lt;/li&gt;
&lt;li&gt;Phone:&amp;nbsp;don&#039;t ignore!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clients&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Great&lt;/em&gt; project do not happen &lt;em&gt;in spite of&lt;/em&gt; bad clients&lt;/li&gt;
&lt;li&gt;seek and cultivate great clients&lt;/li&gt;
&lt;li&gt;Great work to show off takes clients who &#039;get it&#039; -- and are stable enough to support their end of the deal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Warning Signs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;I don&#039;t care, just get it done&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;I don&#039;t need project management&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;I need it this week&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;I&amp;nbsp;could get a freelancer [in India] for $__&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;My neighbor, [who&#039;s an expert in this,] says...&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good Clients know they&#039;re investing. Key questions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Immediate goal or cricital biz issue:&amp;nbsp;reason for the project? can they articulate?&lt;/li&gt;
&lt;li&gt;Budget: What&#039;s budget for the project or the estimated cost of solution? Ample funds for their scope? Ambition is good, but make sure they&#039;re stable.&lt;/li&gt;
&lt;li&gt;Timeline:&amp;nbsp;When does the project need to go live? External influences?&lt;/li&gt;
&lt;li&gt;Key metrics of success? Who decides? They should be important to all.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basic Client Management&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Focus on goal&lt;/li&gt;
&lt;li&gt;Have central contact and ensure they&#039;re vetting all through necessary stakeholders&lt;/li&gt;
&lt;li&gt;You are the General for the web aspect of their brand: act it.&lt;/li&gt;
&lt;li&gt;Demonstrate expertise&lt;/li&gt;
&lt;li&gt;Know their market, etc&lt;/li&gt;
&lt;li&gt;Provide real value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Urgency is a factor&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&#039;t over-promise&lt;/li&gt;
&lt;li&gt;Whas&#039; the reason for the emergency?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Manage expectations...&lt;/p&gt;
&lt;p&gt;The busier your contact, the more in advance you need to communicate what they owe you (in meetings, feedback, etc.)&lt;/p&gt;
&lt;p&gt;How to say no&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;voice concerns early&lt;/li&gt;
&lt;li&gt;protect your team&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;quot;Bless and release&amp;quot; :&amp;nbsp;fire bad client -- avoid toxicity&lt;/p&gt;
&lt;p&gt;Know your modules:&amp;nbsp;difference between 10 minutes and 10 hours for a feature.&lt;/p&gt;
&lt;p&gt;Blaance development load against developers and non-developers for site configuration tasks :&amp;nbsp;consistent method for initial site configuration&lt;/p&gt;
&lt;p&gt;Work closely with IA/UE designers so they know what&#039;s possible with Drupal. Taxonomy and Views make functionality possible on Drupal sites that would be prohibitively expensive to build elsewhere.&amp;nbsp;Likewise, know how to suggest features you&#039;re [familiar with] to clients.&lt;/p&gt;
&lt;p&gt;Give Back&amp;nbsp;(to the community) -- many ways to do so...&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/project-management-fun-and-profit#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/project-management">Project Management</category>
 <pubDate>Fri, 06 Mar 2009 19:21:28 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">103 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Selling Drupal Services (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/selling-drupal-services-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;Selling You and Your (Drupal) Services&lt;br /&gt;&lt;a href=&quot;http://www.lucidus.net/blog/2&quot;&gt;Neil Giarratana&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;True genius is pulling threads out of the ether, and giving them reality. &amp;quot;Oh wow, nobody&#039;s ever said that?&amp;quot;&lt;/p&gt;
&lt;p&gt;If you do the right thing, winning takes care of itself.&lt;/p&gt;
&lt;p&gt;What you&#039;re selling is invisible.&lt;/p&gt;
&lt;p&gt;The true product of a business is the business itself.&lt;/p&gt;
&lt;p&gt;We talk about Drupal at the tail end of a meeting with a customer. Talk instead, about our business, our process, our team... You&#039;re really selling yourself. Create a &amp;quot;love mark&amp;quot; for your brand -- Apple, Starbucks. Don&#039;t create satisfied customers, create &lt;em&gt;raving fans&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;Your customer&#039;s view is the only one that matters. Customer is not too stupid to understand -- rather, &lt;em&gt;you&#039;re too stupid to put it into words they can understand.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The way you deliver is at least as important as what you deliver.&lt;/strong&gt; Even if you delivered a solution to spec, &lt;em&gt;if you don&#039;t sell comfort, you haven&#039;t delivered&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Here is Lucidus&#039; sales pitch for Drupal. First, they don&#039;t talk about Drupal.&amp;nbsp;They don&#039;t use the word, &lt;em&gt;Drupal&lt;/em&gt;.&amp;nbsp;&amp;quot;For every site we build, we use a content management system...&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&#039;s easy to install&lt;/li&gt;
&lt;li&gt;It&#039;s easy to use&lt;/li&gt;
&lt;li&gt;-- end customers shouldn&#039;t get Drupal (core)&amp;nbsp;-- it&#039;s your job as a consultant to package it in such a way that it&#039;s easy for the client.&lt;/li&gt;
&lt;li&gt;It has &lt;em&gt;lots&lt;/em&gt; of features:&amp;nbsp;point out a few key ones... 4,400 modules, (good reason they need you)&lt;/li&gt;
&lt;li&gt;It&#039;s free
&lt;ul&gt;
&lt;li&gt;Using FOSS, we are well positioned to take advantage of the financial situation.&amp;nbsp;Longevity of project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;quot;No, really... why do you use Drupal?&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configuration vs. Customization
&lt;ul&gt;
&lt;li&gt;Drupal provides configuration rather than code for site building: New content types: Views +&amp;nbsp;CCK solves so many problems without code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What&#039;s a content type? Web pages, photos, books, blogs,...&lt;/li&gt;
&lt;li&gt;Comments on &lt;em&gt;anything&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;File attachments&lt;/li&gt;
&lt;li&gt;Keyword tagging -- tying things together&amp;nbsp;(related items...)&lt;/li&gt;
&lt;li&gt;Subscriptions:&amp;nbsp;users &amp;quot;ask&amp;quot; to be notified any time a produc of a certain type is added&lt;/li&gt;
&lt;li&gt;Restricted access to &lt;em&gt;anything&lt;/em&gt;... groups&lt;/li&gt;
&lt;li&gt;Syndication (B2B)&lt;/li&gt;
&lt;li&gt;Drupal was built for this -- for connecting things together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sales Process&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do you know how you get your leads?&lt;/li&gt;
&lt;li&gt;Who are the targets? Define well.&lt;/li&gt;
&lt;li&gt;Set up a campaign for those targets&lt;/li&gt;
&lt;li&gt;Find partners:&amp;nbsp;team up with someone who fills in your gaps
&lt;ul&gt;
&lt;li&gt;Get in with a good marketing business:&amp;nbsp;they&#039;ll send you business&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Targets -&amp;gt;&amp;nbsp;Campaigns -&amp;gt;&amp;nbsp;Leads -&amp;gt;&amp;nbsp;Opportunities -&amp;gt;&amp;nbsp;Quotes -&amp;gt;&amp;nbsp;Contracts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lessons Learned&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lucidus has charged in 5 different ways, but now have two ways:
&lt;ul&gt;
&lt;li&gt;build standard Drupal sites w stuff they&#039;ve done before at a fixed price
&lt;ul&gt;
&lt;li&gt;The better they get, the more money they make&lt;/li&gt;
&lt;li&gt;Charging hourly, the opposite happens&lt;/li&gt;
&lt;li&gt;Customer gets pissed if scope expands, but if it takes less time, you don&#039;t make up the difference&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;do blocks of hours, pre-paid in advance
&lt;ul&gt;
&lt;li&gt;here&#039;s our expectation, but this is all going to depend on what left turns you take... don&#039;t you want the possibility to take left turns?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Getting the Gig&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No hocus pocus or slicky-boy sales guy: Here I am, here you are, let&#039;s talk about what we can do.&lt;/li&gt;
&lt;li&gt;Listen!&amp;nbsp;Listen! &lt;em&gt;Listen!&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;You&#039;re not allowed to tell anything about yourself for the first 20 minutes&lt;/li&gt;
&lt;li&gt;&amp;quot;Can we hear about you?&amp;quot;
&lt;ul&gt;
&lt;li&gt;&amp;quot;if you&#039;d please indulge me, I&#039;d like to know more about you so I can tell you the right things.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;People want you to feel you sympathize with them.&lt;/li&gt;
&lt;li&gt;Most important thing you can do is find Joy in their story.&lt;/li&gt;
&lt;li&gt;&amp;quot;I&#039;ve got the greatest job in the world -- I get to help build all these businesses.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Find their pain (at a high level)&lt;/li&gt;
&lt;li&gt;Explain your USP - Unique Sellling Propisition&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Let them set the next step&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;What would you like to do now?&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Qualifier Questions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We do projects between $1 and $1000 range... Would you be in the $1-$100, $100-$200, $200-$500, or $500-$1000 ?&amp;nbsp;(if it&#039;s not in your range, refer.)&lt;/li&gt;
&lt;li&gt;What&#039;s your time frame to make a decision?&lt;/li&gt;
&lt;li&gt;What is your launch date?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closing Questions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On a scale of 0-10, (0 being not interested at all, 10 being ready to move forward,) where are you?&lt;/li&gt;
&lt;li&gt;...How can I&amp;nbsp;get you to 10?&lt;/li&gt;
&lt;li&gt;How would you like me to proceed?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contracts...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set expectations for payment increments&lt;/li&gt;
&lt;li&gt;Get a signature on everything you do&lt;/li&gt;
&lt;li&gt;Get a blanket agreement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Q&amp;amp;A&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;We&#039;re not going to respond to an RFP -- we find that the relationships we like to build are not built well based on RFPs, which tend to be $ focused, and not really tailored to building a solution that suits you. Very best of luck to you, I&#039;m happy to have coffee sometime, and talk (no charge...)&amp;quot;&lt;/li&gt;
&lt;li&gt;When do you make the commit?
&lt;ul&gt;
&lt;li&gt;We do a one hour meeting, and they&#039;re going to start charging them after the first hour.&lt;/li&gt;
&lt;li&gt;Why don&#039;t we go through the spec process... If, at the end of it, you don&#039;t want us to do this, you can walk away with the spec and bring it to someone else...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Every site they build, they package in a support contract -- regardless.&lt;/li&gt;
&lt;li&gt;You (client) want me to make a profit -- you want me to stay in business!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Great Books&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://books.google.com/books?id=FNGtSFeLglMC&quot;&gt;The E Myth Revisited&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://books.google.com/books?id=h4_axFpCi0AC&quot;&gt;Raving Fans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://books.google.com/books?id=m98zHQAACAAJ&quot;&gt;Selling the Invisible&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/selling-drupal-services-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/sales">Sales</category>
 <pubDate>Fri, 06 Mar 2009 17:44:53 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">102 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Promiscuous Drupal: Building Your Site With Web APIs (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/promiscuous-drupal-building-your-site-web-apis-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/promiscuous-drupal-building-your-site-web-apis&quot;&gt;Promiscuous Drupal: Building Your Site With Web APIs&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://jeff.viapositiva.net/&quot;&gt;Jeff Eaton&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How many folks in this room came to Drupal after trying to build their own CMS?&amp;nbsp;Quite a few... Drupal tends to emphasize homegrown, native solutions to everything.&lt;/p&gt;
&lt;p&gt;&amp;quot;Drupal: the blogging software with the worst forum software built-in.&amp;quot; -- Walkah&lt;/p&gt;
&lt;p&gt;We love Drupal&#039;s swiss army knife -ness, but if we don&#039;t keep our minds open, and stick to the Not Invented Here -- not use existing tools -- we end up with a humungous unwieldly mess.&lt;/p&gt;
&lt;p&gt;Drupal as &lt;strong&gt;one&lt;/strong&gt; tool among &lt;strong&gt;many&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Enlarging the Toolbox&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spam Filtering (Mollom, Akismet, etc.)&lt;/li&gt;
&lt;li&gt;Searching/Indexing (Solr, Google, Acquia, etc.)&lt;/li&gt;
&lt;li&gt;Feed Generation (Feedburner, etc.)&lt;/li&gt;
&lt;li&gt;Content Tagging (Calais, TimesTag, etc.)&lt;/li&gt;
&lt;li&gt;Authentication (OpenID, etc.)&lt;/li&gt;
&lt;li&gt;Sending bulk mail (Mailchimp, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whole category of modules for &lt;a href=&quot;http://drupal.org/taxonomy/term/52&quot;&gt;Third-party integration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Farm out stuff that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Benefits from centralization&lt;/li&gt;
&lt;li&gt;Requires expertise&lt;/li&gt;
&lt;li&gt;Demands massive processing or sample data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Taking it up a notch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Posting links? Use Delicious&lt;/li&gt;
&lt;li&gt;Shoutbox? Use Twitter&lt;/li&gt;
&lt;li&gt;Photos and galleries? Flickr&lt;/li&gt;
&lt;li&gt;Video?&amp;nbsp;YouTube, Blip.tv&lt;/li&gt;
&lt;li&gt;Reviewing books? Amazon, Goodreads&lt;/li&gt;
&lt;li&gt;Comments?&amp;nbsp;&lt;a href=&quot;http://drupal.org/project/Disqus&quot;&gt;Disqus&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Blogging? &lt;strong&gt;&lt;em&gt;Use WordPress&lt;/em&gt;&lt;/strong&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will never...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enter product information as accurately as Amazon!&lt;/li&gt;
&lt;li&gt;be as popular as Flickr.&lt;/li&gt;
&lt;li&gt;write a Firefox Plugin for Link Field&lt;/li&gt;
&lt;li&gt;enjoy transcoding your own video!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To take the red pill... two approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;become a crossroads&lt;/li&gt;
&lt;li&gt;enhance native content
&lt;ul&gt;
&lt;li&gt;value add what you&#039;re already managing internally&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When does this work?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Common on heavily social sites&lt;/li&gt;
&lt;li&gt;Facebook&lt;/li&gt;
&lt;li&gt;News sites&lt;/li&gt;
&lt;li&gt;Personal Aggregators&amp;nbsp;(FriendFeed, Tumblr)&lt;/li&gt;
&lt;li&gt;External content is treated as something that &lt;strong&gt;lives out there&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Users are active on your site even when they&#039;re not really doing something &lt;em&gt;on your site&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;How?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/aggregation&quot;&gt;Aggregator&lt;/a&gt; module&amp;nbsp;(themeable now)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/Activity&quot;&gt;Activity&lt;/a&gt; module (supports views!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.daylife.com/&quot;&gt;DayLife&lt;/a&gt;&amp;nbsp;API, &lt;a href=&quot;http://www.nowpublic.com/&quot;&gt;NowPublic&lt;/a&gt;&#039;s new service&lt;/li&gt;
&lt;li&gt;Native modules (&lt;a href=&quot;http://drupal.org/project/delicious&quot;&gt;delicious&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/flickr&quot;&gt;flickr,&lt;/a&gt; etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One step further: using &lt;strong&gt;external sources&lt;/strong&gt; as your &lt;strong&gt;primary source&lt;/strong&gt; of content...&lt;/p&gt;
&lt;p&gt;Does this make sense?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How hardcore are you?&lt;/li&gt;
&lt;li&gt;How badly do your content producers hate the node form?&lt;/li&gt;
&lt;li&gt;External content is treated as something that lives in here&lt;/li&gt;
&lt;li&gt;Drupal becomes a presentation engine&lt;/li&gt;
&lt;li&gt;Drupal becomes a ... mashup?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How the...?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native modules&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/FeedAPI&quot;&gt;FeedAPI&lt;/a&gt;&amp;nbsp;+&amp;nbsp;&lt;a href=&quot;http://drupal.org/project/feedapi_mapper&quot;&gt;Feed Element Mapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nodes become flexible wrappers&lt;/li&gt;
&lt;li&gt;Lay your own pipes (we&#039;ll see this later)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our stack (LAMP&amp;nbsp;+&amp;nbsp;Drupal) ... and 3rd party bits.&amp;nbsp; Moving toward Drupal as one element in the rest of the services system.&lt;/p&gt;
&lt;p&gt;Downsides&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filtering the firehose (tagging helps)&lt;/li&gt;
&lt;li&gt;&amp;quot;Importing&amp;quot; the internet&lt;/li&gt;
&lt;li&gt;8192 auth methods (OAuth helps?)&lt;/li&gt;
&lt;li&gt;Even Amazon goes down... but flipside is that there are a whole lot of others tying their fate to same:&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ma.gnolia.com/&quot;&gt;Magnolia&lt;/a&gt; ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Congrats, you&#039;re no longer a module developer, you&#039;re an integration specialist!&lt;/p&gt;
&lt;p&gt;Doing it with Drupal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/drupal_http_request&quot;&gt;drupal_http_request()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PHP 5 - &lt;a href=&quot;http://us.php.net/simplexml&quot;&gt;SimpleXML&lt;/a&gt;&amp;nbsp;&amp;amp;&amp;nbsp;&lt;a href=&quot;http://us2.php.net/json&quot;&gt;JSON&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://http://api.drupal.org/api/function/drupal_write_record/6&quot;&gt;drupal_write_record()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Expose your tables via Views&lt;/li&gt;
&lt;li&gt;Wrap local vs remote&lt;/li&gt;
&lt;li&gt;(See &lt;a href=&quot;http://drupalcleveland.info/user-blogs/building-apis-rock-drupalcon-2009-notes&quot;&gt;Building APIs That Rock&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you release it&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support the full API.&lt;/li&gt;
&lt;li&gt;Fail gracefully&lt;/li&gt;
&lt;li&gt;Don&#039;t force data into nodes:&amp;nbsp;store stuff in their own tables, and maintain data structure of original source as well as possible. For, say, Amazon integration, just store ISDN&amp;nbsp;# in a node with a CCK field&lt;/li&gt;
&lt;li&gt;Cache data whenever you can&lt;/li&gt;
&lt;li&gt;Don&#039;t write an SQL&amp;nbsp;query builder.. Integrate with Views&lt;/li&gt;
&lt;li&gt;PHPDoc, PHPDoc, PHPDoc!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&#039;t forget&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Respect API&amp;nbsp;policies (Limits, Caching)&lt;/li&gt;
&lt;li&gt;Don&#039;t trust the data you get back&lt;/li&gt;
&lt;li&gt;There are cutting-edge options
&lt;ul&gt;
&lt;li&gt;CustomViews queries (Flickr?)&lt;/li&gt;
&lt;li&gt;In Drupal 7, FieldAPI&amp;nbsp;supports remote fields&lt;/li&gt;
&lt;li&gt;NowPublic&#039;s Aggregation system: building a Drupal site on a front end to back-end APIs/processing built in C++&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Leveraging&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drupal is a great tool&lt;/li&gt;
&lt;li&gt;It&#039;s strengths can be weaknesses&lt;/li&gt;
&lt;li&gt;Outsourcing services&lt;/li&gt;
&lt;li&gt;Drupal can be a mixer&lt;/li&gt;
&lt;li&gt;If you roll your own, &lt;em&gt;think ahead&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/promiscuous-drupal-building-your-site-web-apis-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/web-services">Web Services</category>
 <pubDate>Fri, 06 Mar 2009 15:26:39 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">101 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>CCK Mashup -- Oh The Things You Can Do! (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/cck-mashup-oh-things-you-can-do-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/cck-mashup-oh-things-you-can-do&quot;&gt;CCK Mashup -- Oh The Things You Can Do!&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.karen-stevenson.com&quot;&gt;Karen Stevenson&lt;/a&gt; and &lt;a href=&quot;http://www.developmentseed.org/team/alex-barth&quot;&gt;Alex Barth&lt;/a&gt; from Development Seed&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/feedapi&quot;&gt;FeedAPI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/feedapi_mapper&quot;&gt;Feed Element Mapper&lt;/a&gt; - create CCK fields in a FeedAPI content type, and map elements in a feed to those fields.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/parser_csv&quot;&gt;CSV Parser&lt;/a&gt; - use FeedAPI to parse CSV&lt;/p&gt;
&lt;p&gt;Also exist mappers for M-Fields, mappers for Taxonomy, mappers for less common CCK fields (email, link)&lt;/p&gt;
&lt;p&gt;Can specify a field as GUID to compare for updates&lt;/p&gt;
&lt;p&gt;For other XML formats? Write your own parser: not too hard with PHP5&#039;s &lt;a href=&quot;http://us.php.net/simplexml&quot;&gt;SimpleXML&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/prepopulate&quot;&gt;Prepopulate&lt;/a&gt; - Prepopulate fields when creating a new node by specifying in URL&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/cck-mashup-oh-things-you-can-do-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/cck">CCK</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/web-services">Web Services</category>
 <pubDate>Fri, 06 Mar 2009 15:17:02 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">100 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Drush - command line Drupal productivity (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/drush-command-line-drupal-productivity-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/drush-command-line-drupal-productivity&quot;&gt;Drush - command line Drupal productivity&lt;/a&gt;&lt;br /&gt;Moshe Weitzman and Owen Barton&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;Drush module&lt;/a&gt;:&amp;nbsp;why?
&lt;ul&gt;
&lt;li&gt;quit switching between browser and shell -- stay on the command line&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;download and put it anywhere
&lt;ul&gt;
&lt;li&gt;can symlink or alias to run it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;doesn&#039;t matter, D5, D6
&lt;ul&gt;
&lt;li&gt;for more specifics, get &lt;a href=&quot;http://drupal.org/project/drush_extras&quot;&gt;Drush extras&lt;/a&gt; module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;can specify directories and URI, or it&#039;ll try to figure out based on working directory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;commands... try drush on the command-line&amp;nbsp; to see!&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/drush-command-line-drupal-productivity-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Thu, 05 Mar 2009 22:59:42 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">99 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Front/Back End Performance – Make Your Website Lightning Fast (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/frontback-end-performance-%E2%80%93-make-your-website-lightning-fast-drupalcon-dc-2009-no</link>
    <description>&lt;p&gt;Front/Back End Performance &amp;ndash; Make Your Website Lightning Fast&lt;br /&gt;&lt;a href=&quot;http://kkaefer.com/&quot;&gt;Konstantin K&amp;auml;fer&lt;/a&gt; (Front End) and &lt;a href=&quot;http://dc2009.drupalcon.org/user/kbahey&quot;&gt;Khalid Baheyeldin&lt;/a&gt; (Back End)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Front End&amp;nbsp;Performance&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how user perceives?&lt;/li&gt;
&lt;li&gt;how fast website is loaded?&lt;/li&gt;
&lt;li&gt;how fast the page loads?&lt;/li&gt;
&lt;li&gt;how well the page performs after it&#039;s loaded?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;styles, scripts, images account for 80% of load time&lt;/p&gt;
&lt;p&gt;background images, images, other media, html, css, scripts, other media...&lt;/p&gt;
&lt;p&gt;over time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HTML (generating page in Drupal)&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Scripts&lt;/li&gt;
&lt;li&gt;Backgrounds&lt;/li&gt;
&lt;li&gt;Images &amp;amp;&amp;nbsp;Media&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Tools &amp;amp;&amp;nbsp;Measurement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Measure: to prove optimization success&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overall load time?&lt;/li&gt;
&lt;li&gt;Page size? Not a perfect metric:&amp;nbsp;ping time, roundtrip time&lt;/li&gt;
&lt;li&gt;Time until DOM&amp;nbsp;is loaded?&lt;/li&gt;
&lt;li&gt;Time until page is functional? : users perceive differently, or use different things&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tools&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firebug&#039;s Net panel&lt;/li&gt;
&lt;li&gt;YSlow&lt;/li&gt;
&lt;li&gt;AOL&amp;nbsp;Page Test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alphaworks.ibm.com/tech/pagedetailer&quot;&gt;IBM&amp;nbsp;Page Detailer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tools.pingdom.com&quot;&gt;Pingdom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://webkit.org&quot;&gt;WebKit&#039;s Web Inspector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Web Debugging Proxies:&amp;nbsp;http://charlesproxy.com, &lt;a href=&quot;http://fiddlertool.com&quot; title=&quot;http://fiddlertool.com&quot;&gt;http://fiddlertool.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most display as waterfall: Start, Connect, First Byte, Last Byte&lt;/p&gt;
&lt;p&gt;How can we optimize?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reduce requests (More requests more troublesome than larger files)
&lt;ul&gt;
&lt;li&gt;CSS Sprites
&lt;ul&gt;
&lt;li&gt;many images into one file, and shift into view using background-position&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Aggregate scripts and styles
&lt;ul&gt;
&lt;li&gt;built into Drupal&lt;/li&gt;
&lt;li&gt;Sophisticated: &lt;a href=&quot;http://drupal.org/project/sf_cache&quot;&gt;Support File Cache module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Don&#039;t use redirects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Use CSS instead of images 
&lt;ul&gt;
&lt;li&gt;-moz-border-radius, -webkit-border-radius, border-radius&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;data:&amp;nbsp;&lt;/em&gt;URLs in style sheets&lt;/li&gt;
&lt;li&gt;Use a CDN&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Gzip&lt;/li&gt;
&lt;li&gt;CSS at the top
&lt;ul&gt;
&lt;li&gt;Browsers don&#039;t render until all CSS&amp;nbsp;has been loaded&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;scripts at the bottom&lt;/li&gt;
&lt;li&gt;minify CSS&amp;nbsp;and JS&lt;/li&gt;
&lt;li&gt;remove comments and whitespace
&lt;ul&gt;
&lt;li&gt;still savings, even with GZip&lt;/li&gt;
&lt;li&gt;Drupal&#039;s aggregator or sf_cache.module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Parallelization
&lt;ul&gt;
&lt;li&gt;2 requests per host name in parallel&lt;/li&gt;
&lt;li&gt;use multiple host names:&amp;nbsp;higher parallelization
&lt;ul&gt;
&lt;li&gt;but don&#039;t overdo it:&amp;nbsp;DNS&amp;nbsp;lookups will slow down&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stevesouders.com/ua&quot;&gt;browser support for parallelization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;reduce image weight
&lt;ul&gt;
&lt;li&gt;OptiPNG, PNGCrush
&lt;ul&gt;
&lt;li&gt;Removes invisible content&lt;/li&gt;
&lt;li&gt;Lossless recompression&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JPEGtran/ImageMagick
&lt;ul&gt;
&lt;li&gt;Remove color profiles, meta data, ...&lt;/li&gt;
&lt;li&gt;Lossless&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;lazy initialization&lt;/li&gt;
&lt;li&gt;microoptimization
&lt;ul&gt;
&lt;li&gt;only if you have optimized everything else
&lt;ul&gt;
&lt;li&gt;&amp;quot;Premature optimization is the root of all evil.&amp;quot; -- Knuth&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Back-End Optimization&lt;/p&gt;
&lt;p&gt;definitions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;High Availability&lt;/li&gt;
&lt;li&gt;Load Balancing&lt;/li&gt;
&lt;li&gt;Performance Assessment/Analysis&lt;/li&gt;
&lt;li&gt;Performance Optimization/Tuning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Define goals and objectives first&lt;/p&gt;
&lt;p&gt;Optimization: diminishing returns&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;usually low-hanging fruit with dramatic performance; after that, it&#039;s more expensive and/or more difficult&lt;/li&gt;
&lt;li&gt;infrastructure, patching Drupal, re-architecting the app&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;proper diagnosis is essential for any solution; otherwise, running blind&lt;br /&gt;must be based on proper data, and analysis of the data collected&lt;/p&gt;
&lt;p&gt;validate results on a test server&lt;/p&gt;
&lt;p&gt;Physical server matters&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dedicated / VPS&lt;/li&gt;
&lt;li&gt;Multiple cores are the norm, now:&amp;nbsp;8 better than 4 better than 2&lt;/li&gt;
&lt;li&gt;Lots of RAM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Multiple servers&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one DB&amp;nbsp;server, multiple web servers&lt;/li&gt;
&lt;li&gt;Can use DNS&amp;nbsp;round robin for load leveling, or proper load balancers (commercial / free,)&amp;nbsp;or even a reverse proxy
&lt;ul&gt;
&lt;li&gt;only if you have the budget&lt;/li&gt;
&lt;li&gt;complexity is expensive -- running cost&lt;/li&gt;
&lt;li&gt;tuning a system can avoid or delay the split&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LAMP&amp;nbsp;Stack&lt;/p&gt;
&lt;p&gt;Linux&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a stable distro:&amp;nbsp;Debian stable, Ubuntu Server LTS, CentOS)&lt;/li&gt;
&lt;li&gt;Use recent versions&lt;/li&gt;
&lt;li&gt;Use whatever distro your staff has expertise in&lt;/li&gt;
&lt;li&gt;Be a minimalist; avoid bloat
&lt;ul&gt;
&lt;li&gt;Install only what you need&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Balance:&amp;nbsp;&amp;quot;compile your own&amp;quot;&amp;nbsp;vs. upgrades&lt;/li&gt;
&lt;li&gt;Compile your own:
&lt;ul&gt;
&lt;li&gt;pros: full control on specific versions&lt;/li&gt;
&lt;li&gt;cons:&amp;nbsp;not easy to do security upgrades&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Apache
&lt;ul&gt;
&lt;li&gt;mod_php and mod_rewrite only, from the start&lt;/li&gt;
&lt;li&gt;MaxClients:
&lt;ul&gt;
&lt;li&gt;too low:&amp;nbsp;can&#039;t serve a spike&lt;/li&gt;
&lt;li&gt;too high:&amp;nbsp;mem can&#039;t keep up with load &amp;amp; start swapping&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MaxRequestsPerChild
&lt;ul&gt;
&lt;li&gt;to terminate process faster and free up memory&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;KeepAlive
&lt;ul&gt;
&lt;li&gt;should be low:&amp;nbsp;~3 seconds&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mod_gzip/deflate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;lighthttp&amp;nbsp;(lighty)
&lt;ul&gt;
&lt;li&gt;popular with RonR crowd&lt;/li&gt;
&lt;li&gt;1MB per process&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;reports of bad mem leaks, recently&lt;/li&gt;
&lt;li&gt;nginx
&lt;ul&gt;
&lt;li&gt;newcomer&lt;/li&gt;
&lt;li&gt;more stable than lighty&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MyIsm
&lt;ul&gt;
&lt;li&gt;faster for reads, less overhead, poor concurrency&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;innoDB
&lt;ul&gt;
&lt;li&gt;transactional, slower in certain cases (SELECT&amp;nbsp;COUNT(*))&lt;/li&gt;
&lt;li&gt;Better concurrency:&amp;nbsp;good for heavily hit tables, such as sessinos, watchdog, ..\&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tuning
&lt;ul&gt;
&lt;li&gt;Query Cache (most important)&lt;/li&gt;
&lt;li&gt;Table Cache&lt;/li&gt;
&lt;li&gt;Key buffer&lt;/li&gt;
&lt;li&gt;InnoDB&amp;nbsp;for sessions, watchdog, accesslog&lt;/li&gt;
&lt;li&gt;Temp tables on Linux tempfs (in memory)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Replication
&lt;ul&gt;
&lt;li&gt;patch needed until Drupal 7&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PHP&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Always use recent version:&amp;nbsp;5.2 min for 7.x and many 6.x contribs&lt;/li&gt;
&lt;li&gt;Install an Op-code cache
&lt;ul&gt;
&lt;li&gt;eAccelerator&amp;nbsp;(fastest), APC (most stable)&lt;/li&gt;
&lt;li&gt;Benefits
&lt;ul&gt;
&lt;li&gt;Dramatic speedup of apps,&lt;/li&gt;
&lt;li&gt;decrease in CPU/mem utilization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Won&#039;t help for
&lt;ul&gt;
&lt;li&gt;not just code execution&lt;/li&gt;
&lt;li&gt;network connections&lt;/li&gt;
&lt;li&gt;sorting of arrays&lt;/li&gt;
&lt;li&gt;heavy database access&lt;/li&gt;
&lt;li&gt;tagadelic, node access modules, admin_menu, forum, tracker&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mod_php
&lt;ul&gt;
&lt;li&gt;normal apache config&lt;/li&gt;
&lt;li&gt;shared nothing&lt;/li&gt;
&lt;li&gt;no state retained between requests, less issues, most tested/supported&lt;/li&gt;
&lt;li&gt;stay with mod_php if possible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;php as CGI&lt;/li&gt;
&lt;li&gt;FCGI
&lt;ul&gt;
&lt;li&gt;use if possible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;other exotic ways...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Drupal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;db intensive&lt;/li&gt;
&lt;li&gt;disable modules you don&#039;t need&lt;/li&gt;
&lt;li&gt;make sure cron runs regularly&lt;/li&gt;
&lt;li&gt;enable throttle
&lt;ul&gt;
&lt;li&gt;be wary about throttle and cache&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;does your module do stuff over the network?
&lt;ul&gt;
&lt;li&gt;cache the data, and use job_queue or queue_mail_module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Drupal Caching
&lt;ul&gt;
&lt;li&gt;anonymous only&lt;/li&gt;
&lt;li&gt;enable page caching:&amp;nbsp;expire too often on a busy site, causing slow-downs&lt;/li&gt;
&lt;li&gt;set expiry&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Boost for anonymous visits&lt;/li&gt;
&lt;li&gt;Pluggable caching -- custom caching&lt;/li&gt;
&lt;li&gt;Block caching -- core in D6&lt;/li&gt;
&lt;li&gt;memcached
&lt;ul&gt;
&lt;li&gt;necessity for every big site&lt;/li&gt;
&lt;li&gt;distributed object caching in memory&lt;/li&gt;
&lt;li&gt;no disk I/O (database or files)&lt;/li&gt;
&lt;li&gt;requires patches...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/advcache&quot;&gt;Advanced Cache Module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slow modules
&lt;ul&gt;
&lt;li&gt;Statistics module
&lt;ul&gt;
&lt;li&gt;adds more queries&lt;/li&gt;
&lt;li&gt;disable popular content block&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Aggregateor2 abandoned, thank god&lt;/li&gt;
&lt;li&gt;Tagadelic&lt;/li&gt;
&lt;li&gt;Admin_menu (adds up to 500ms)&lt;/li&gt;
&lt;li&gt;Node access modules with large number of nodes&amp;nbsp;(10,000 nodes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How to measure&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;top&lt;/li&gt;
&lt;li&gt;htop&lt;/li&gt;
&lt;li&gt;atop&lt;/li&gt;
&lt;li&gt;vmstat :&amp;nbsp;mem and swapping:&amp;nbsp;can show history&amp;nbsp;(30 minutes ago..)&lt;/li&gt;
&lt;li&gt;apachetop
&lt;ul&gt;
&lt;li&gt;reads and analyzes Apache&#039;s log&lt;/li&gt;
&lt;li&gt;how many requests/sec&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mtop, ntop&lt;/li&gt;
&lt;li&gt;MySQL&amp;nbsp;report, query timer, slow query log&lt;/li&gt;
&lt;li&gt;Stress Testing
&lt;ul&gt;
&lt;li&gt;ab, ab2, Seige, JMeter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Nagios monitoring:&amp;nbsp;now Drupal Nagios module&lt;/li&gt;
&lt;li&gt;analytics, AWStats&lt;/li&gt;
&lt;li&gt;Performance Logging&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/frontback-end-performance-%E2%80%93-make-your-website-lightning-fast-drupalcon-dc-2009-no#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/performance">Performance</category>
 <pubDate>Thu, 05 Mar 2009 20:10:28 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">98 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Building a Frankenstein monster &amp; how to maintain it (DrupalCon DC 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/building-frankenstein-monster-how-maintain-it-drupalcon-dc-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/building-frankenstein-monster-how-maintain-it&quot;&gt;Building a Frankenstein monster &amp;amp; how to maintain it&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://morten.dk/&quot;&gt;morton.dk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Setup: ideal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clients give you enough time to get the job done&lt;/li&gt;
&lt;li&gt;the clients don&#039;t bitch about small stuff, and pays in advance&lt;/li&gt;
&lt;li&gt;wire framing is complete!&amp;nbsp;&amp;quot;nothing&#039;s gonna change, ever!&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setup:&amp;nbsp;reality&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;limited time theming is the last in line:&amp;nbsp;after design &amp;amp;&amp;nbsp;functionality&lt;/li&gt;
&lt;li&gt;the client can&#039;t understand the site before it&#039;s completely done&lt;/li&gt;
&lt;li&gt;wire framing missing for 25% of the site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Designer ideal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understands Drupal
&lt;ul&gt;
&lt;li&gt;knows limits and not gonna bitch about them&lt;/li&gt;
&lt;li&gt;uses a grid system&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Designer reality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;don&#039;t care about mighty Drupal&lt;/li&gt;
&lt;li&gt;Have no clue of limits&lt;/li&gt;
&lt;li&gt;Don&#039;t use grids:&amp;nbsp;&amp;quot;I don&#039;t do boxes! I&#039;m an artist&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Developer:&amp;nbsp;ideal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;all output is overwritable through theme();&lt;/li&gt;
&lt;li&gt;not have lots of CSS&amp;nbsp;files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hardcoded HTML&lt;/li&gt;
&lt;li&gt;$styles full with css files from a ton of modules - with a ton of classes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Editor ideal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;only adds words &amp;amp;&amp;nbsp;predefined images to the content&lt;/li&gt;
&lt;li&gt;kindly ask to have changes in the css if something&#039;s gotta change&lt;/li&gt;
&lt;li&gt;knows that inline styles are made by satan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Editor reality&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;copy-paste directly from word&lt;/li&gt;
&lt;li&gt;throw in classes to the style.css&lt;/li&gt;
&lt;li&gt;adds inline styles anyway&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Themer ideal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;knows every corner of theme()&lt;/li&gt;
&lt;li&gt;works hard and long and listens to the codes, pm&#039;s &amp;amp;&amp;nbsp;designers&lt;/li&gt;
&lt;li&gt;always makes the wise choice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Themer reality&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;don&#039;t know every corner of theme()&lt;/li&gt;
&lt;li&gt;uses {display:&amp;nbsp;none}&lt;/li&gt;
&lt;li&gt;+10% hotter than the rest - that&#039;s just a fact&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To control the monster:&amp;nbsp;the mothership:&lt;br /&gt;Basic starting theme &amp;amp;&amp;nbsp;subtheming&lt;/p&gt;
&lt;p&gt;In the mothership theme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mothership.info&lt;/li&gt;
&lt;li&gt;page.tpl.php&lt;/li&gt;
&lt;li&gt;node.tpl.php&lt;/li&gt;
&lt;li&gt;style.css&lt;/li&gt;
&lt;li&gt;template.php&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep mothership as theme as possible.&lt;/p&gt;
&lt;p&gt;Subtheme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;subtheme.info&lt;/li&gt;
&lt;li&gt;page.tpl.php&lt;/li&gt;
&lt;li&gt;node.tpl.php&lt;/li&gt;
&lt;li&gt;style.css&lt;/li&gt;
&lt;li&gt;template.php&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;overrides in subtheme for page.pl.php, node.tpl.php&lt;/p&gt;
&lt;p&gt;Note:&amp;nbsp;if you need a node-foo.tpl.php as a subtheme override, you need a node.tpl.php in your subtheme, too.&lt;/p&gt;
&lt;p&gt;mothership: only the most common elements; as little as possible&lt;/p&gt;
&lt;p&gt;subthemes: everything else&lt;/p&gt;
&lt;p&gt;files&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mothership.info includes meta, regions, features, stylesheets, conditional styles, scripts&lt;/li&gt;
&lt;li&gt;subtheme.info: adds &amp;quot;base theme&amp;quot;, stylesheets&lt;/li&gt;
&lt;li&gt;mother/style/reset.css:&amp;nbsp;clean up browser hell, resent font size, remove img borders, .clearfix, clear-break, ... these can be found online&lt;/li&gt;
&lt;li&gt;mother/style/drupal.css: makes block admin workable, menus, tabs, drupal stuff...&lt;/li&gt;
&lt;li&gt;mother/style/grid.css:&amp;nbsp;&amp;quot;width sized class definitions&amp;quot;, grid-1&amp;nbsp;{width: 60px}; grid-2{width:140}...
&lt;ul&gt;
&lt;li&gt;google:&amp;nbsp;mark boulton &amp;amp;&amp;nbsp;grids&lt;/li&gt;
&lt;li&gt;960.gs&lt;/li&gt;
&lt;li&gt;blueprintcss.org&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mother/style.css: basic layout, design, colors...&lt;/li&gt;
&lt;li&gt;style/grid.css: overrides&lt;/li&gt;
&lt;li&gt;style/styles.css: overrides&lt;/li&gt;
&lt;li&gt;styles.css:&amp;nbsp;quickfixes, clean it up every so often, move the good stuff up into style/style.css&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/stylestripper&quot;&gt;StyleStripper module&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;selectively remove all unwanted .css files from theme&amp;nbsp;(from other modules, core, etc.)&lt;/li&gt;
&lt;li&gt;different settings for different themes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/theme-guide&quot; title=&quot;http://drupal.org/theme-guide&quot;&gt;http://drupal.org/theme-guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alistapart.com/articles/howtosizetextincss&quot; title=&quot;http://www.alistapart.com/articles/howtosizetextincss&quot;&gt;http://www.alistapart.com/articles/howtosizetextincss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/building-frankenstein-monster-how-maintain-it-drupalcon-dc-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/design">Design</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/themes">Themes</category>
 <category domain="http://drupalcleveland.info/category/tags/theming">Theming</category>
 <pubDate>Thu, 05 Mar 2009 18:51:20 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">97 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>A Paradigm for Reusable Drupal Features (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/paradigm-reusable-drupal-features-drupalcon-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/paradigm-reusable-drupal-features&quot;&gt;A Paradigm for Reusable Drupal Features&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.developmentseed.org/team/young-hahn&quot;&gt;Young Hahn&lt;/a&gt;, &lt;a href=&quot;http://www.developmentseed.org/team/robert-soden&quot;&gt;Robert Soden&lt;/a&gt;, &lt;a href=&quot;http://www.developmentseed.org/team/ian-ward&quot;&gt;Ian Ward&lt;/a&gt; (&lt;a href=&quot;http://www.developmentseed.org/&quot;&gt;DevelopmentSeed&lt;/a&gt;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In theory:&amp;nbsp;the problem +&amp;nbsp;solution&lt;/li&gt;
&lt;li&gt;In practice:&amp;nbsp;feature building demo&lt;/li&gt;
&lt;li&gt;The future:&amp;nbsp;what comes next&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A blog is a &amp;quot;feature&amp;quot;. So is a pressroom, an image gallery, a publication library, etc., etc.&amp;nbsp;Blog can be created using core module, or cusotm recreated.&lt;/p&gt;
&lt;p&gt;Example:&amp;nbsp;making a pressroom:&amp;nbsp;content types, fields, views, etc.&lt;/p&gt;
&lt;p&gt;3 problems:&amp;nbsp;slow, not reusable, disconnected pieces&lt;/p&gt;
&lt;p&gt;A (turnkey)feature module:&amp;nbsp;takes everything usually done in UI and puts it into code. How?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scripted:&amp;nbsp;content type, fields, taxonomy, menus&lt;/li&gt;
&lt;li&gt;Exported: imagecache presets, block visibility, block views, page views, comp. relations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/project/spaces&quot;&gt;Spaces&lt;/a&gt; + &lt;a href=&quot;http://drupal.org/project/context&quot;&gt;Context&lt;/a&gt; demo&lt;a href=&quot;http://drupal.org/project/context&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is reusable&lt;/li&gt;
&lt;li&gt;is distributable&lt;/li&gt;
&lt;li&gt;can be kept under version control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Getting site-building into code:&lt;/p&gt;
&lt;p&gt;Scripts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pain to debug&lt;/li&gt;
&lt;li&gt;pain to maintain&lt;/li&gt;
&lt;li&gt;not easily extensible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Earl Miles&#039; &lt;a href=&quot;http://drupal.org/project/ctools&quot;&gt;Chaos tool suite&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Exportables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;abstract data storage so that your module can be indifferent to whether it&#039;s in code or db&lt;/li&gt;
&lt;li&gt;provide definitions, not scripts&lt;/li&gt;
&lt;li&gt;are easy to maintain&lt;/li&gt;
&lt;li&gt;are overridable and extensible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modules with exportables?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;views&lt;/li&gt;
&lt;li&gt;panels&lt;/li&gt;
&lt;li&gt;context_ui&lt;/li&gt;
&lt;li&gt;imagecache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recipe for exportables&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;string identifiers&lt;/li&gt;
&lt;li&gt;API functions for collecting all items&lt;/li&gt;
&lt;li&gt;Structured array or object to represent your item&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Future: ability to export features into module form&lt;/p&gt;
&lt;p&gt;Developers:&amp;nbsp;move toward adding exportability into your module!&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/paradigm-reusable-drupal-features-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/administration">Administration</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/site-setup">Site Setup</category>
 <pubDate>Thu, 05 Mar 2009 16:38:43 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">96 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Optimizing your LAMP stack for Drupal (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/optimizing-your-lamp-stack-drupal-drupalcon-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/optimizing-your-lamp-stack-drupal&quot;&gt;Performance and Scalability: Optimizing your LAMP stack for Drupal&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.blackmesh.com/&quot;&gt;Eric Mandel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Performance&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;different things to different people&lt;/li&gt;
&lt;li&gt;amount of useful work accomplished by system, compared to resources used&lt;/li&gt;
&lt;li&gt;however you define the atomic unit of measurement -- that one thing -- it&#039;s generally how fast can you do it.
&lt;ul&gt;
&lt;li&gt;in a web app, how fast can you serve something (a page) to a user?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scalability&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can the system grow without degradation&lt;/li&gt;
&lt;li&gt;How big is the system and how big can you make it?
&lt;ul&gt;
&lt;li&gt;In a web app, how many users can your app serve while maintaining acceptable performance levels?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Performance:&amp;nbsp;1 user, Scalability:&amp;nbsp;manu users&lt;/p&gt;
&lt;p&gt;Drupal&#039;s Performance Problems&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lots of queries&lt;/li&gt;
&lt;li&gt;Unoptimized queries&lt;/li&gt;
&lt;li&gt;search gets slower as nodes increase&lt;/li&gt;
&lt;li&gt;3rd party modules are performance unknowns&lt;/li&gt;
&lt;li&gt;logged-in users require more queries&lt;/li&gt;
&lt;li&gt;handling millions of nodes requires hacking core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;[Damn... just lost my notes here...]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Scalability Prerequisites&amp;nbsp;(cont.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Isolate multimedia files&lt;/li&gt;
&lt;li&gt;Use a CDN or have a plan to use a CDN&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/optimizing-your-lamp-stack-drupal-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/performance">Performance</category>
 <category domain="http://drupalcleveland.info/category/tags/scaling">Scaling</category>
 <pubDate>Wed, 04 Mar 2009 21:23:51 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">95 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>OpenID, Drupal and the Open Web, (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/openid-drupal-and-open-web-drupalcon-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://http://dc2009.drupalcon.org/session/openid-drupal-and-open-web&quot;&gt;OpenID, Drupal and the Open Web&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://walkah.net/&quot;&gt;James Walker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;He&#039;s given this talk before, but all of a sudden (months) things have gotten more interesting&lt;/p&gt;
&lt;p&gt;today: &amp;quot;web 2.0&amp;quot;&lt;br /&gt;All of these various sites where we need to recreate identity and relationships&lt;/p&gt;
&lt;p&gt;password antipattern&lt;br /&gt;giving out passwords for other sites -- you&#039;ve given facebook access to all of your Gmail, Google Docs, etc?!&lt;/p&gt;
&lt;p&gt;how about User Controlled Authorization&lt;br /&gt;I am the center of my internet&lt;br /&gt;It&#039;s MY identity, they&#039;re MY contacts, it&#039;s MY content&lt;/p&gt;
&lt;p&gt;Facebook Connect&lt;/p&gt;
&lt;p&gt;You are not Facebook!&lt;/p&gt;
&lt;p&gt;USER-centric, &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://diso-project.org/&quot;&gt;DiSo&lt;/a&gt;: Distributed Social&lt;br /&gt;activity streams, microformats, portable contacts&lt;/p&gt;
&lt;p&gt;OAuth&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;realms&lt;/li&gt;
&lt;li&gt;per-site&lt;/li&gt;
&lt;li&gt;OAuth in D7? (because Dries mentioned it...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenID&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identity:&amp;nbsp;need unique, ubiquitous identity globally (on the internet)&lt;/li&gt;
&lt;li&gt;what about when someone dies?&lt;/li&gt;
&lt;li&gt;what about single sign-&lt;em&gt;out&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;how to merge OpenIDs or Facebook Connect IDs with current IDs on sites&lt;/li&gt;
&lt;li&gt;Who is the &amp;quot;you&amp;quot; that&#039;s in the middle of the graph?&lt;/li&gt;
&lt;li&gt;Are you a URL? An email address?
&lt;ul&gt;
&lt;li&gt;globally unique&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Do you know you have an OpenID&amp;nbsp;(if you have a Google, Yahoo, MySpace, AOL, etc., account) ?&lt;/li&gt;
&lt;li&gt;Usability issue: redirecting to OpenID provider&#039;s site on login. Facebook Connect does this nicely.&lt;/li&gt;
&lt;li&gt;Facebook is showing a certain amount of recognition of OpenID:&amp;nbsp;joining board as corporate member, hosting UX conference to share what they learned through Facebook Connect...&lt;/li&gt;
&lt;li&gt;What about using DNS&#039;s distributed model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, OpenID&amp;nbsp;and Drupal&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drupal&#039;s tagline:&amp;nbsp;&lt;em&gt;community plumbing&lt;/em&gt;... new one:&amp;nbsp;&lt;em&gt;social publishing&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;plaxo + Google teamed up to do a Facebook Connect with open standards:&amp;nbsp;92%&amp;nbsp;success rate!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/openid&quot; title=&quot;http://drupal.org/project/openid&quot;&gt;http://drupal.org/project/openid&lt;/a&gt; (in D6 core now)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/oauth&quot; title=&quot;http://drupal.org/project/oauth&quot;&gt;http://drupal.org/project/oauth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.drupal.org/openid&quot; title=&quot;http://groups.drupal.org/openid&quot;&gt;http://groups.drupal.org/openid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/openid-drupal-and-open-web-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <category domain="http://drupalcleveland.info/category/tags/identity">Identity</category>
 <category domain="http://drupalcleveland.info/category/tags/openid">OpenID</category>
 <pubDate>Wed, 04 Mar 2009 21:01:24 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">94 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Drupal Module Development Kickstart (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/drupal-module-development-kickstart-drupalcon-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/drupal-module-development-kickstart&quot;&gt;Developing Modules kick-Start&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://hojtsy.hu/&quot;&gt;G&amp;aacute;bor Hojtsy&lt;/a&gt; and &lt;a href=&quot;http://drupal.org/user/49851&quot;&gt;Peter Wolanin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is about developing modules, but if you can find a module that&#039;s already out there and being developed, use it!&lt;/p&gt;
&lt;p&gt;if you can avoid custom code or modifying, build the right way and use existing code when available&lt;/p&gt;
&lt;p&gt;Change almost anything without hacking core.&lt;/p&gt;
&lt;p&gt;What is a module?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.module + .info text files&lt;/li&gt;
&lt;li&gt;Implements hooks, Drupal exposed interfaces to plug into the system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;replace &amp;quot;hook&amp;quot; keyword with module name&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to implement hook_perm(), write modulename_perm()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;module directory goes in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sites/all/modules/modulename&amp;nbsp; (or)&lt;/li&gt;
&lt;li&gt;sites/domainname/modules/modulename&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;example: how to allow admins to delete something faster&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;add a &#039;delete this post&#039; button to a node&#039;s menu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/hook_link&quot;&gt;hook_link()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;example: focused search&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;add a radio button to search panel to search all content or search a particular content type only&lt;/li&gt;
&lt;li&gt;use &lt;a href=&quot;http://api.drupal.org/api/function/hook_form_alter&quot;&gt;hook_form_alter()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;gives modules a chance to change forms before they&#039;re presented&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;example: editing the Contact form&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/hook_form_alter&quot;&gt;hook_form_alter()&lt;/a&gt; again&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;example: module from scratch: &lt;a href=&quot;http://szeged2008.drupalcon.org/whiteboard&quot;&gt;whiteboard (from Szeged)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/hook_menu&quot;&gt;hook_menu()&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;make page callback to custom function (not a hook)&lt;/li&gt;
&lt;li&gt;access arguments&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;but avoid this! use Views&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;module_invoke_all()&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;if any other module is interested, take action now&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/contributors-guide&quot;&gt;Developing for Drupal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/&quot;&gt;API Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;or run API docs locally with &lt;a href=&quot;http://drupal.org/project/api&quot;&gt;API module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;#drupal IRC channel&lt;/li&gt;
&lt;li&gt;books&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/handbook/cvs&quot;&gt;Drupal and CVS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://donthackcore.com&quot;&gt;http://donthackcore.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/drupal-module-development-kickstart-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/development">Development</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Wed, 04 Mar 2009 20:08:39 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">93 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Totally Rocking Your Drupal Development Environment (DrupalCon 2009 Notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/totally-rocking-your-drupal-development-environment-drupalcon-2009-notes</link>
    <description>&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/totally-rocking-your-development-environment&quot;&gt;25 Tips for Totally Rocking Your Drupal Development Environment&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://sachachua.com/wp/&quot;&gt;Sacha Chua&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sachachua.com/wp/2009/03/01/25-tips-for-totally-rocking-your-drupal-development-environment-pre-session-notes/&quot;&gt;Full Session Notes on Sacha&#039;s blog&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;browser&quot;&gt;meta&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Be lazy
&lt;ul&gt;
&lt;li&gt;write tools to save (future) work&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Learn from others&lt;/li&gt;
&lt;li&gt;Know your tools inside-out
&lt;ul&gt;
&lt;li&gt;read your tools&#039; documentation&lt;/li&gt;
&lt;li&gt;read your tools&#039; source code!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Know what&#039;s out there
&lt;ul&gt;
&lt;li&gt;read through Drupal modules listings&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Practice relentless improvement
&lt;ul&gt;
&lt;li&gt;review thoughts about your processes&lt;/li&gt;
&lt;li&gt;think about what you hate, and how you can improve that&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;browser&quot;&gt;Browser tips and plugins (firefox)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://getfirebug.com/&quot;&gt;Firebug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;firefox -ProfileManager -no-remote&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/966&quot;&gt;Tamper Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://https://addons.mozilla.org/en-US/firefox/addon/3863&quot;&gt;iMacros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/8370&quot;&gt;Drupal for Firebug&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;modules&quot;&gt;Drupal modules&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/admin_menu&quot;&gt;Admin Menu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/devel&quot;&gt;Devel&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;check out SMTP facade tool&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/simpletest&quot;&gt;SimpleTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/logintoboggan&quot;&gt;Login Toboggan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xdebug.org/&quot;&gt;XDebug&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;browser&quot;&gt;Source code and configuration management&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Check in your entire source tree&lt;/li&gt;
&lt;li&gt;Organize your source code&lt;/li&gt;
&lt;li&gt;Check-in clean source for third-party modules&lt;/li&gt;
&lt;li&gt;Test all upgrades against a production copy&lt;/li&gt;
&lt;li&gt;Manage your branches and merge changes&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;automation&quot;&gt;Automation and regression testing&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Use build tools
&lt;ul&gt;
&lt;li&gt;make, ant...&lt;/li&gt;
&lt;li&gt;define a common set of commands, and have config/setup variables on the back-end&lt;/li&gt;
&lt;li&gt;allow yourself to forget SQL&amp;nbsp;commands, URLs, passwords...&lt;/li&gt;
&lt;li&gt;Makefile targets:&lt;br /&gt;make mysql &amp;nbsp;&amp;nbsp;&amp;nbsp; connect to the database&lt;br /&gt;make backup &amp;nbsp;&amp;nbsp;&amp;nbsp; make a copy of the database&lt;br /&gt;make backup-partial &amp;nbsp;&amp;nbsp;&amp;nbsp; make a partial copy of the database, omitting accesslog data and other unnecessary information&lt;br /&gt;make restore &amp;nbsp;&amp;nbsp;&amp;nbsp; restore the database from the backup&lt;br /&gt;make dev-restore &amp;nbsp;&amp;nbsp;&amp;nbsp; restore the database from the backup, and enable all the development modules&lt;br /&gt;make clearcache &amp;nbsp;&amp;nbsp;&amp;nbsp; restore the database from the backup&lt;br /&gt;make tags &amp;nbsp;&amp;nbsp;&amp;nbsp; restore the database from the backup&lt;br /&gt;make doc &amp;nbsp;&amp;nbsp;&amp;nbsp; restore the database from the backup&lt;br /&gt;make test &amp;nbsp;&amp;nbsp;&amp;nbsp; run all my project-specific tests&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Learn or make tools to save yourself work&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/drush&quot;&gt;Drush&lt;/a&gt; - the Drupal Shell&lt;/li&gt;
&lt;li&gt;Simpletest&lt;br /&gt;test code AND&amp;nbsp;webpages&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;automation&quot;&gt;From the audience&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vimperator.org/trac/wiki/Vimperator&quot;&gt;Vimperator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Virtual Document Root:&amp;nbsp;svn checkout in a particular directory&lt;/li&gt;
&lt;li&gt;geben:&amp;nbsp;XDebug with emacs&lt;/li&gt;
&lt;li&gt;unfuddle hosted svn and git SCM&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/trace&quot;&gt;Trace module&lt;/a&gt;:&amp;nbsp;trace hooks and timing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.drupal.org/drubuntu&quot;&gt;groups.drupal.org/Drubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/coder&quot;&gt;Coder module&lt;/a&gt;:&amp;nbsp;Developer Module that assists with code review and version upgrade.&lt;/li&gt;
&lt;li&gt;Sun NetBeans&lt;/li&gt;
&lt;li&gt;CustomError for handling 403s/404s (as LoginToboggan alternative)&lt;/li&gt;
&lt;li&gt;Creating aliases for drush for different projects?&lt;br /&gt;Drush will become less of a module...&lt;/li&gt;
&lt;li&gt;make sure development modules don&#039;t end up on live sites!&lt;br /&gt;use sites/localhost for development modules&lt;br /&gt;insert notification to warn you if they are installed&lt;/li&gt;
&lt;li&gt;install profiles&lt;/li&gt;
&lt;li&gt;for searching modules:&amp;nbsp;don&#039;t google! check out all of contrib and do a recursive grep across it.&lt;/li&gt;
&lt;li&gt;aegir - hostmaster evolved&lt;/li&gt;
&lt;/ul&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/totally-rocking-your-drupal-development-environment-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/development">Development</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Wed, 04 Mar 2009 16:53:38 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">91 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>State of Drupal (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/state-drupal-drupalcon-2009-notes</link>
    <description>&lt;div class=&quot;all-attached-images&quot;&gt;&lt;div style=&quot;width: 300px&quot; class=&quot;image-attach-body&quot;&gt;&lt;a href=&quot;/image/dries-buytaert-direction-pre-keynote&quot;&gt;&lt;img src=&quot;http://drupalcleveland.info/sites/default/files/images/dries_direction_pre_keynote.preview.jpg&quot; alt=&quot;Dries Buytaert: &amp;quot;direction,&amp;quot; pre-keynote&quot; title=&quot;Dries Buytaert: &amp;quot;direction,&amp;quot; pre-keynote&quot;  class=&quot;image image-preview &quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/node/51&quot;&gt;State of Drupal&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://buytaert.net/&quot;&gt;Dries Buytaert&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;talk theme:&amp;nbsp;&amp;quot;Drupal Rocks&amp;quot;&lt;/p&gt;
&lt;p&gt;Meet Dries in 1999 ~10 years ago&lt;br /&gt;young geek: Assembler, Compilers, Linux kernel wireless, chess, stamps&lt;/p&gt;
&lt;p&gt;Drop.org message board&lt;/p&gt;
&lt;p&gt;Drupal 1.0.0 -- January 15th, 2001&lt;br /&gt;for news-driven community or portal site&lt;/p&gt;
&lt;p&gt;Jeremy @ kerneltrap needed a site to resist slashdotting&lt;br /&gt;Dries gives him admin privileges to drop.org to try out&lt;/p&gt;
&lt;p&gt;folks in Drupal community have tended to be young&lt;/p&gt;
&lt;p&gt;Mark Boulton&#039;s redesign of Drupal.org&lt;br /&gt;drupal.com forthcoming&lt;br /&gt;Lullabot podcast an important milestone&lt;/p&gt;
&lt;p&gt;action/attendance/attention doubling by year&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;downloads&lt;/li&gt;
&lt;li&gt;conference attendance&lt;/li&gt;
&lt;li&gt;contributed projects&lt;/li&gt;
&lt;li&gt;uniques/month&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hundreds of thousands of websites&lt;br /&gt;thousands of developers&lt;br /&gt;more than 4000 extension modules&lt;br /&gt;100% yearly growth&lt;br /&gt;24/7&lt;br /&gt;Free&lt;/p&gt;
&lt;p&gt;Built by everyone&lt;br /&gt;Controlled by nobody&lt;br /&gt;Like the internet: always a little bit broken, yet works&lt;/p&gt;
&lt;p&gt;&amp;quot;Replace planning with coordination.&amp;quot; -- Clay Shirky&lt;/p&gt;
&lt;p&gt;(Dries:)&lt;br /&gt;&amp;quot;I never believed in formal roadmaps&amp;quot;&lt;br /&gt;&amp;quot;I never believed in hierarchies&amp;quot;&lt;br /&gt;&amp;quot;I never believed that the Drupal Association should be in charge of the roadmap&amp;quot;&lt;/p&gt;
&lt;p&gt;Long tail of contributions -- difference between companies and open source&lt;/p&gt;
&lt;p&gt;&amp;quot;How do we avoid creating institutions, how do we avoid doing planning?&amp;quot;&lt;/p&gt;
&lt;p&gt;code freeze for Drupal 7 on Sept 1st, 2009.&lt;br /&gt;doesn&#039;t mean it will be released then: will be released when it&#039;s ready &lt;/p&gt;
&lt;p&gt;Drupal 5 had installer&lt;br /&gt;Drupal 6 made it clean&lt;/p&gt;
&lt;p&gt;Usability...&lt;/p&gt;
&lt;p&gt;Drupal 7:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;default install profile&lt;/li&gt;
&lt;li&gt;usability team&lt;/li&gt;
&lt;li&gt;Better media/document handling: File API&lt;/li&gt;
&lt;li&gt;Fields API (CCK) in core&lt;/li&gt;
&lt;li&gt;RIP Profile module&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;serious database abstraction layer improvement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dries would like to see these features in core:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OAuth Support&lt;/li&gt;
&lt;li&gt;Job queues&lt;/li&gt;
&lt;li&gt;RDFa output&lt;/li&gt;
&lt;li&gt;Real-time messaging (XMPP)&lt;/li&gt;
&lt;li&gt;Activity log&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Start thinking of the internet as one big machine -- all devices are views into the one machine&lt;/p&gt;
&lt;p&gt;Trends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linking machines (internet)&lt;/li&gt;
&lt;li&gt;Linking pages&amp;nbsp;(web)&lt;/li&gt;
&lt;li&gt;Linking data&amp;nbsp;(semantic web?)&lt;/li&gt;
&lt;li&gt;Linking things (internet of things)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linking data is called:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kevin Kelly:&amp;nbsp;&amp;quot;One machine&amp;quot;&lt;/li&gt;
&lt;li&gt;Tim Berners-Lee: &amp;quot;Giant Global Graph&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Web 3.0&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Drupal is a Movement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A movement needs a mission.&lt;br /&gt;Right now mini mission is usability: allow folks to make any website they want easily, without restriction.&lt;br /&gt;A larger mission is in helping transform the web.&lt;br /&gt;&lt;em&gt;There is a difference between telling people what to do and creating a movement.&lt;/em&gt;&lt;br /&gt;A movement needs a healthy ecosystem.&lt;br /&gt;A movement needs leaders.&lt;br /&gt;Most people are not leaders, they&#039;re lurkers -- waiting, watching what happens.&lt;br /&gt;You are not most people.&lt;/p&gt;
</description>
     <comments>http://drupalcleveland.info/blogs/jeff-schuler/state-drupal-drupalcon-2009-notes#comments</comments>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <enclosure url="http://drupalcleveland.info/image/view/92/preview" length="11010" type="image/jpeg" />
 <pubDate>Wed, 04 Mar 2009 16:13:56 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">90 at http://drupalcleveland.info</guid>
  </item>
  <item>
    <title>Building APIs that Rock (DrupalCon 2009 notes)</title>
    <link>http://drupalcleveland.info/blogs/jeff-schuler/building-apis-rock-drupalcon-2009-notes</link>
    <description>&lt;h3&gt;&lt;a href=&quot;http://dc2009.drupalcon.org/session/building-apis-rock&quot;&gt;Building APIs that Rock&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://jeff.viapositiva.net/&quot;&gt;Jeff Eaton&lt;/a&gt;&lt;br /&gt;9:00 AM, 2009-03-04&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/eaton/building-apis-that-rock&quot;&gt;Official session notes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Why APIs?&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;let other code use your features
&lt;ul&gt;
&lt;li&gt;Focusing on writing modules that provide a nice interface to code as well as humans&lt;/li&gt;
&lt;li&gt;Examples of modules with nice APIs: &lt;a href=&quot;http://drupal.org/project/views&quot;&gt;Views&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/og&quot;&gt;OG&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/project/flag&quot;&gt;Flag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hide complexity
&lt;ul&gt;
&lt;li&gt;Better to write modules that use underlying functions than &amp;quot;pretending&amp;quot; to be a user and using forms&lt;/li&gt;
&lt;li&gt;hides whether ImageMagick or GD tools (or other lib) is being used&lt;/li&gt;
&lt;li&gt;provides &amp;quot;rotate&amp;quot; &amp;quot;scale&amp;quot; &amp;quot;crop&amp;quot; 	&lt;a href=&quot;http://drupal.org/project/messaging&quot;&gt;Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;abstracts /how/ messages are being sent&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;&quot;&gt;cache_get&lt;/a&gt;, &lt;a href=&quot;&quot;&gt;cache_set&lt;/a&gt; (inside Drupal)&lt;/li&gt;
&lt;li&gt;provide simple interface to hide method underneath (memcache, etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Agreement about how things get done
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/project/token&quot;&gt;Token&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Example: Creating &lt;a href=&quot;http://drupal.org/project/votingapi&quot;&gt;VotingAPI&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;started by tearing apart someone else&#039;s module&lt;/li&gt;
&lt;li&gt;find nouns: votes&lt;/li&gt;
&lt;li&gt;find verbs: get / set&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example: myapi_do_something()&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;don&#039;t use enums and hard-coded numbers unless you know it&#039;s something that won&#039;t change
&lt;ul&gt;
&lt;li&gt;use strings to allow others to make their own new type&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;well placed hooks allow other people to do the hard work for you!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/module_invoke_all/6&quot;&gt;module_invoke_all()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/drupal_alter&quot;&gt;drupal_alter()&lt;/a&gt;: &lt;em&gt;&amp;quot;it&#039;s like passing around the doobie of data&amp;quot; : everybody gets a chance. (you don&#039;t have to...)&amp;quot;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/hook_form_alter&quot;&gt;hook_form_alter()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/function/hook_menu_alter&quot;&gt;hook_menu_alter()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;who wants to hijack this before it hits the page?&lt;/li&gt;
&lt;li&gt;let other modules have a chance to change or add more data&lt;/li&gt;
&lt;li&gt;&amp;quot;template&amp;quot; design pattern&lt;/li&gt;
&lt;li&gt;&amp;quot;if you build it they will hook&amp;quot;&lt;/li&gt;
&lt;li&gt;layer verbs to hide complexity&lt;/li&gt;
&lt;li&gt;account for new users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;7 deadly sins&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lone Ranger (reinvents wheel, ignores conventions, ignores related apis... common to newcomers&lt;/li&gt;
&lt;li&gt;invisible Assumptions (assuming the global $user, checking arg(0), assuming logged-in users... common to UI-centric modules&lt;/li&gt;
&lt;li&gt;Helping them to Death (&amp;quot;while i&#039;m at it, I&#039;ll set the breadcrumb, send an email, and add links, and... common to bloated modules&lt;/li&gt;
&lt;li&gt;Leaky Abstraction (&amp;quot;just use this function... and learn everything that&#039;s underneath it! ... common in complex problem domains. Simplify! Assume sensible defaults, and get out of the way when appropriate&lt;/li&gt;
&lt;li&gt;Fake Flexibility (Providing hooks that don&#039;t really provide the functionality they portray&lt;/li&gt;
&lt;li&gt;Mission Creep (even worse than feature creep .. common with &amp;quot;solve a big problem APIs. Split it into smaller APIs!&lt;/li&gt;
&lt;li&gt;Dependency Soup (Flip-side of Mission Creep. Focus focus focus! Make dependencies optional, pray for a package manager in Drupal&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Rules of Thumb&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;cooperate&lt;/li&gt;
&lt;li&gt;don&#039;t assume too much&lt;/li&gt;
&lt;li&gt;do&#039;t be pushy&lt;/li&gt;
&lt;li&gt;simplify or step aside&lt;/li&gt;
&lt;li&gt;test your extensions&lt;/li&gt;
&lt;li&gt;stay focused&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</description>
     <category domain="http://drupalcleveland.info/category/tags/development">Development</category>
 <category domain="http://drupalcleveland.info/category/tags/drupalcon-dc-2009">DrupalCon DC 2009</category>
 <pubDate>Wed, 04 Mar 2009 14:35:39 +0000</pubDate>
 <dc:creator>Jeff Schuler</dc:creator>
 <guid isPermaLink="false">89 at http://drupalcleveland.info</guid>
  </item>
  </channel>
</rss>
