<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tech4Him - Technology with Integrity &#187; drupal</title>
	<atom:link href="http://blog.tech4him.com/tags/drupal/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tech4him.com</link>
	<description>A Christian technology chaos wrangler and his thoughts</description>
	<lastBuildDate>Fri, 27 Jan 2012 02:08:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dallas Drupal 2011 &#8211; Profiling Drupal with XHProf Notes</title>
		<link>http://blog.tech4him.com/2011/08/dallas-drupal-2011-profiling-drupal-with-xhprof-notes/</link>
		<comments>http://blog.tech4him.com/2011/08/dallas-drupal-2011-profiling-drupal-with-xhprof-notes/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 14:58:59 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[tuning]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1119</guid>
		<description><![CDATA[XHProf came from Facebook Only does profiling Made to run in a live site. Very little to no performance hit. Lightweight. PECL library &#8211; XHProf (Easy to setup) Brian Mercer...]]></description>
			<content:encoded><![CDATA[<div style="float: right;"><a href="http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/"><img class="alignright size-medium wp-image-1165" src="http://blog.tech4him.com/wp-content/uploads/xhprof1-300x150.png" alt="" width="300" height="150" /></a></div>
<p>XHProf came from Facebook</p>
<p>Only does profiling<br />
Made to run in a live site. Very little to no performance hit. Lightweight.<br />
PECL library &#8211; XHProf (Easy to setup)<br />
Brian Mercer php5-xhprof maintains PPA<br />
PECL package is broken so you can&#8217;t sudo pecl install<br />
1. Install the extension<br />
2. Get the XHProf ???? from github<br />
3. Devel module for Drupal</p>
<p>Now every page has the link at the bottom<br />
Click it and see the profile data</p>
<p>Uses Access devel information so only those with permission see the link<br />
He leaves enabled all the time</p>
<p>Inclusive Wall time: Generally what we need to look at. Includes wait time.<br />
CPU time: only time to execute.<br />
Exclusive: Only the time for that one call. probably want to sort by this.</p>
<p>If you see module_implements at the top&#8230; good indication you have too many modules. There is a pressflow branch to resolve this in D6. Use Catch&#8217;s version</p>
<p>** Environment Indicator module !!!! Use it. http://drupal.org/project/environment_indicator<br />
$conf['environment_indicator_text'] = &#8216;DEVELOPMENT SERVER&#8217;;<br />
$conf['environment_indicator_color'] = &#8216;dark-red&#8217;;<br />
$conf['environment_indicator_enabled'] = FALSE;</p>
<p>Views cache plugin. Use as an example and write your own as needed. This is a huge performance help on sites with lots or large views.</p>
<p>Turn off dblog and replace with syslog. Big help</p>
<p>Working on Drupal UI version to review the XHProf data. Look for in future in the XHProf module project.<br />
Also starting writing views 3 plugin for XHProf<br />
Probably won&#8217;t be available for a while yet.</p>
<p>Drush enabled. You can profile drush runs for profiling s well. Link provided at the end of the run.<br />
Drush migrate &#8211; can be long running migrations (hours)</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1119&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/08/dallas-drupal-2011-profiling-drupal-with-xhprof-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dallas Drupal 2011 &#8211; Building Mobile Application with Drupal Notes</title>
		<link>http://blog.tech4him.com/2011/07/dallas-drupal-2011-building-mobile-application-with-drupal-notes/</link>
		<comments>http://blog.tech4him.com/2011/07/dallas-drupal-2011-building-mobile-application-with-drupal-notes/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 19:34:03 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupalcamp]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1121</guid>
		<description><![CDATA[# Building Mobile Applications with Drupal Jeff Linwood @jefflinwood http://jefflinwood.com Drupal + mobile architecture jQuery Mobiles + PhoneGap demo Configuring Drupal 7 services (Service v3) Native &#8211; Can use all...]]></description>
			<content:encoded><![CDATA[<p># Building Mobile Applications with Drupal<br />
Jeff Linwood<br />
@jefflinwood</p>
<p>http://jefflinwood.com</p>
<p>Drupal + mobile architecture<br />
jQuery Mobiles + PhoneGap demo<br />
Configuring Drupal 7 services (Service v3)</p>
<p>Native &#8211; Can use all the phone hardware as needed if it exists.<br />
HTML 5 &#8211; Mobile framework (sensa touch, jQuery mobile) No hardware<br />
Hybrid &#8211; Phonegap &#8211; wrapper that does allow access to some hardware devices. App store &#8211; Phonegap | Titanium &#8211; cross platform</p>
<p>Drupal &#8211; Provides, user management, permission/roles, CMS, etc&#8230; already. Leverage it<br />
Services module<br />
REST/JSON</p>
<p>Plist server module &#8211; Plist is native for iPhone but can also do JSON like Android does also.<br />
Pick what makes sense. Don&#8217;t just say &#8220;everything&#8221; needs to be in the app</p>
<p>Caching and offline access<br />
Cache data in SQLite<br />
Cache JSON on the file system<br />
Some functionality will be online only.</p>
<p>Configuring Services 3 in Drupal 7<br />
Enable Serivces+REST server<br />
resTt_server_plist<br />
..<br />
&#8230;</p>
<p>localhost/blog/node/1/json &#8211; blog=endpoint , node=resource, 1=nid</p>
<p>drupal-ios-sdk<br />
drupalcloud &#8211; not as well maintained (android)<br />
PhoneGap &#8211; immature right now but moving fast<br />
jQuery Mobile &#8211; immature but moving fast</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1121&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/07/dallas-drupal-2011-building-mobile-application-with-drupal-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Drupal Recipe? SSL and Non-SSL for Anonymous Users</title>
		<link>http://blog.tech4him.com/2011/07/best-drupal-recipe-ssl-and-non-ssl-for-anonymous-users/</link>
		<comments>http://blog.tech4him.com/2011/07/best-drupal-recipe-ssl-and-non-ssl-for-anonymous-users/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 16:19:08 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Picks]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[secure pages]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1155</guid>
		<description><![CDATA[Two of our largest sites have run on Drupal since 2007. That was Drupal 4.7 for those who knew Drupal in those days. From day one, these sites allowed for...]]></description>
			<content:encoded><![CDATA[<div id="attachment_1156" class="wp-caption alignright" style="width: 209px"><a href="http://blog.tech4him.com/wp-content/uploads/4295295279_9f978d7b95.jpg"><img class="size-medium wp-image-1156 " title="4295295279_9f978d7b95" src="http://blog.tech4him.com/wp-content/uploads/4295295279_9f978d7b95-199x300.jpg" alt="" width="199" height="300" /></a><p class="wp-caption-text">Photo By loop_oh</p></div>
<p>Two of our largest sites have run on Drupal since 2007. That was Drupal 4.7 for those who knew Drupal in those days. <img src='http://blog.tech4him.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  From day one, these sites allowed for online donations from anonymous users. Since we started on Drupal 4.7, LOTS of custom code was written. On Drupal 5 we began using the Secure Pages module to help the switching between HTTPS and HTTP for various URL paths and such. This wasn&#8217;t without it&#8217;s share of bugs which much has been fixed. Today we are on Drupal 6 but we&#8217;ve also grown up. Our hosting is now across multiple servers, dedicated DB server, memcache, etc&#8230; These performance and scalability changes has seemed to highlight some additional challenges with secure pages.</p>
<p>This is not a bash on the secure pages module, however it has caused me to think about architecture and strategy. See, these sites are not the typical &#8220;Here&#8217;s our non-profit and here is a form you can give donation through.&#8221; Instead we have 50+ different giving forms for different programs, partnerships and experiences with more being creating weekly it seems. Forcing a user to create an online account in order to donate is not an option. We have recently implemented integration between SalesForce.com and these Drupal sites. This integration with the CRM solution means that in short order, users on these Drupal sites will be able to see information about their partnership, contributions, pledges, update their contact information, make more decsions about how they interact and partner with this organization and more. Anticipated traffic spikes are going to require us to add Pressflow and varnish to our configuration in the near future.</p>
<p>All this to say that there is a definite need to secure a number pieces of these sites, but the majority of content is still really anonymous user content. So here is my question to the community of medium to large sites on Drupal that have the need for mixed HTTPS/HTTP traffic:</p>
<blockquote><p>What&#8217;s the best recipe in Drupal 6 &amp; 7 for ensuring certain, but not all pages, including login, user and other content types or paths, are delivered via HTTPS while the rest of the site is HTTP?</p></blockquote>
<p>Actually wondering if a better approach is to have anything needing SSL to be delivered from a subdomain (<a href="http://secure.mydomain.com/">secure.mydomain.com</a>) that points to the same Drupal instance.</p>
<p>Curious how others deal with this for client projects. What&#8217;s your experience been?</p>
<p>&nbsp;</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1155&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/07/best-drupal-recipe-ssl-and-non-ssl-for-anonymous-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dallas Drupal 2011 &#8211; Creating a New Administration Paradigm Notes</title>
		<link>http://blog.tech4him.com/2011/07/dallas-drupal-2011-creating-a-new-administration-paradigm-notes/</link>
		<comments>http://blog.tech4him.com/2011/07/dallas-drupal-2011-creating-a-new-administration-paradigm-notes/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 12:56:47 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Links/Resources]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1116</guid>
		<description><![CDATA[Photo by The Library of Congress Kris Vanderwater (EclipseGC) @EclipseGC Commerce Guys [video of presentation] Contextual Admin module &#8211; http://drupal.org/project/context_admin Provide plastic, plugin driven, context aware administration tool Wrapped in...]]></description>
			<content:encoded><![CDATA[<p><span class="wp-decoratr-image alignright"><img class="alignright" src="http://farm3.static.flickr.com/2003/2179136411_a0490eb496_m.jpg" alt="Riveter" width="240" height="193" /><br />
<a href="http://www.flickr.com/photos/8623220@N02/2179136411" rel="external">Photo by The Library of Congress</a></span><br />
Kris Vanderwater (<a href="http://drupal.org/user/61203">EclipseGC</a>) <a href="http://twitter.com/EclipseGc">@EclipseGC</a><br />
<a href="http://www.commerceguys.com/"> Commerce Guys</a></p>
<p>[<a href="http://t.co/Qk4rcgy">video of presentation</a>]</p>
<p>Contextual Admin module &#8211; <a href="http://drupal.org/project/context_admin">http://drupal.org/project/context_admin</a><br />
Provide plastic, plugin driven, context aware administration tool<br />
Wrapped in flexibilty of page manager<br />
Exportable, Reusable, features compatible</p>
<p>Start with View inside a panel<br />
VBO to administer other nodes of the same context<br />
Customer: If I want to do something in a section, I just go to it.</p>
<p>This can allow users of a role the ability to add others users of a certain role. Drupal can&#8217;t&#8230;.context admin can</p>
<p>Have an article, with now an add image tab, add a new image node, save it returnng to the article. Node reference automatically added as well.</p>
<p>In context admin settings.<br />
Access = who can see the link<br />
Selection = what they can see when they get here</p>
<p>Excellent presentation~! Lots of potential here for much more user friendly way of managing content but got to think ahead.</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1116&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/07/dallas-drupal-2011-creating-a-new-administration-paradigm-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dallas Drupal 2011 &#8211; Products, Distributions and Apps For Drupal Notes</title>
		<link>http://blog.tech4him.com/2011/07/dallas-drupal-2011-products-distributions-and-apps-for-drupal-notes/</link>
		<comments>http://blog.tech4him.com/2011/07/dallas-drupal-2011-products-distributions-and-apps-for-drupal-notes/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 10:08:51 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Links/Resources]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[openpublish]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1110</guid>
		<description><![CDATA[Jeff Walpole &#8211; CEO Phase 2 Technology OpenPublish &#8211; Drupal 6.x Tattler is on it&#8217;s way out. No business model for it. OpenPublic &#8211; Drupal 7 Open Atrium &#8211; Acquired from...]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.tech4him.com/wp-content/uploads/bass-screen3_0.jpg"><img class="alignright size-medium wp-image-1136" title="bass-screen3_0" src="http://blog.tech4him.com/wp-content/uploads/bass-screen3_0-300x168.jpg" alt="" width="300" height="168" /></a>Jeff Walpole &#8211; <a href="http://www.phase2technology.com/" target="_blank">CEO Phase 2 Technology</a></p>
<p><a href="http://openpublishapp.com/" target="_blank">OpenPublish</a> &#8211; Drupal 6.x<br />
<a href="http://tattlerapp.com/" target="_blank"> Tattler</a> is on it&#8217;s way out. No business model for it.<br />
<a href="http://openpublicapp.com/" target="_blank"> OpenPublic</a> &#8211; Drupal 7<br />
<a href="http://openatrium.com/" target="_blank"> Open Atrium</a> &#8211; Acquired from Developmneet Seed<br />
<a href="http://www.managingnews.com/" target="_blank"> Managing New</a>s &#8211; Acquired from Development Seed</p>
<p>Companies that only do dev work are at risk.<br />
Can only make as much money as code you can develop, hours you can charge.<br />
Move from a VAR into also being an ISV.</p>
<p>Phase 2 Technology is the maintainer of the <a href="http://drupal.org/project/features" target="_blank">features module</a></p>
<p>Features Module<br />
Kit Compliance module &#8211; Basic set of standards to ensure distributions, apps from cause problems with eachother when used together</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1110&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/07/dallas-drupal-2011-products-distributions-and-apps-for-drupal-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dallas Drupal 2011 &#8211; The Economist: Tech Talk Session Notes</title>
		<link>http://blog.tech4him.com/2011/07/dallas-drupal-2011-the-economist-tech-talk-session-notes/</link>
		<comments>http://blog.tech4him.com/2011/07/dallas-drupal-2011-the-economist-tech-talk-session-notes/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 12:08:10 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Links/Resources]]></category>
		<category><![CDATA[Picks]]></category>
		<category><![CDATA[camp]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[notes]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1083</guid>
		<description><![CDATA[Four Kitchens staffers Diana Montalion Dupuis, Aaron Forsander, Robert Ristroph All items relate to the ongoing support and development for http://www.economist.com/ Front page components: Frontpage made up of lots of pieces and parts...]]></description>
			<content:encoded><![CDATA[<p><a href="http://fourkitchens.com/" target="_blank">Four Kitchens</a> staffers<br />
<a href="https://dallasdrupal.org/users/dianadupuis">Diana Montalion Dupuis</a>, <a href="https://dallasdrupal.org/users/pifantastic">Aaron Forsander</a>, <a href="https://dallasdrupal.org/users/rob-ristroph">Robert Ristroph</a></p>
<p>All items relate to the ongoing support and development for <a href="http://www.economist.com/">http://www.economist.com/</a></p>
<p>Front page components:</p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/economoist-frontpage.png"><img class="alignright size-medium wp-image-1084" title="The Economist front page screenshot" src="http://blog.tech4him.com/wp-content/uploads/economoist-frontpage-300x241.png" alt="" width="300" height="241" /></a></p>
<ul>
<li>Frontpage made up of lots of pieces and parts</li>
<li>Hero box.</li>
<li>Each item in each area of FP is individually selected. Admin is a single place tabbed for each section so easily managed to &#8220;build the page&#8221;</li>
</ul>
<p>London &#8211; New York &#8211; Austin</p>
<ul>
<li>Mailing list (Team), IRC (Team), Skype (1 to 1)</li>
<li>Developers / Core Committers</li>
<li>1 Designer</li>
<li>SCRUM manager</li>
</ul>
<p>2 week sprints. 15 minute stand-up daily. (What I did yesterday, What I&#8217;m doing today, any impediments)<br />
Demo what is done to customer.<br />
Code review, Tested, Deployed.</p>
<p>Use Google Docs for multi-organization teams as the SCRUM tool. Four Kitchens uses JIRA internally.<br />
Defined single person that is the final approved/decline of any feature request. (Product Owner)</p>
<p>The Most X Box (Most commented, Most recommended)</p>
<ul>
<li>Too query intensive to run on every page load. Ran in cron, cached every x minutes and then use the cache for display.</li>
<li>No longer using it this way as it has gotten more intelligent.</li>
<ul>
<li>Jenkins runs jobs that pre-load cache.</li>
<li>User page loads only every get this box content from cache. Never sets cache.</li>
<li>If no cache, blank box.</li>
</ul>
</ul>

<p>Dev Ops</p>
<ul>
<li>Branching &#8211; BZR -</li>
<li>Every feature starts in a feature branch Use launchpad to manage.</li>
<li>Trunk -&gt; Stage -&gt; Live</li>
<li>Fridays &#8211; Promote to stage. Teams signoff via email</li>
<li>Tuesday &#8211; Push live.</li>
</ul>
<p>Testing</p>
<ul>
<li>Selenium &#8211; More features than simpletest</li>
<li>Wow! &#8211; Runs in a headless Ubuntu X-Window recorded with FFMPEG so you actually see what was happening on a failure.</li>
</ul>
<p>Vendor Branching</p>
<ul>
<li>Each contrib module has a vendor branch</li>
<li>Pristine version of contrib as base and changes tracked.</li>
</ul>
<p>Topic trees</p>
<ul>
<li>At least ten pieces of content for a topic before it will be vailable as a topic.</li>
</ul>
<p>Jenkins</p>
<ul>
<li>Web based system for automating builds. Used to be called Hudson.</li>
<li>Now can do other things.</li>
<ul>
<li>Make calls to drush cron</li>
<ul>
<li>Take your imports and such and make them as drush cron calls</li>
</ul>
</ul>
<li>Drupal CRON runs in order of module weight. If a module cron run fails, everything after will not run</li>
<ul>
<li>Database download and sanitize user data.</li>
</ul>
</ul>
<p>Performance</p>
<ul>
<li>Caching</li>
<ul>
<li>Varnish front-end (Pressflow for Drupal 6 or Drupal 7)</li>
<li>Logged in session cookie, Varnish is setup to not serve cached is user is logged in.</li>
</ul>
<li>Database</li>
<ul>
<li>MySQL replication</li>
<ul>
<li>All write queries to master (Pressflow)</li>
<li>reads are from one of the replicants</li>
</ul>
</ul>
</ul>
<p>Migration</p>
<ul>
<li>Continual Integration</li>
<li>All stories created in CCI &#8211; Oracle</li>
<li>Custom code pulls from Oracle and then creates/updates nodes in drupal</li>
</ul>
<p>They wrote menu_callback_cache as finer grain control of caching in drupal</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1083&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/07/dallas-drupal-2011-the-economist-tech-talk-session-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal Mobile Tools Presentation from NorthPoint</title>
		<link>http://blog.tech4him.com/2011/06/drupal-mobile-tools-presentation-from-northpoint/</link>
		<comments>http://blog.tech4him.com/2011/06/drupal-mobile-tools-presentation-from-northpoint/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 22:05:48 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Links/Resources]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1060</guid>
		<description><![CDATA[I have been tinkering with mobile device support in Drupal on and off for a while now. From re-purposing everything on a site with themes/context (one size fits all approach) to developing...]]></description>
			<content:encoded><![CDATA[<p>I have been tinkering with mobile device support in Drupal on and off for a while now. From re-purposing everything on a site with themes/context (one size fits all approach) to developing custom apps that are fed from web services within Drupal, to responsive design. Yup, its actually fun. <img src='http://blog.tech4him.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ran across <a href="http://www.slideshare.net/twom/mobileizing-your-organization-with-drupal-acquia-webinar" target="_blank">this presentation</a> from NorthPoint recently that I thought did a good job of summing some of the current state of implementation and thinking:</p>
<div id="__ss_7399453" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Mobile-izing Your Organization with Drupal: Acquia webinar" href="http://www.slideshare.net/twom/mobileizing-your-organization-with-drupal-acquia-webinar">Mobile-izing Your Organization with Drupal: Acquia webinar</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7399453" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/twom">Tom Deryckere</a></div>
</div>
<p>Just thought I&#8217;d put this out there for my personal reference and possibly your intrigue.</p>
<p><em>Featured image from: <a href="http://www.mobiledrupal.com/">http://www.mobiledrupal.com</a></em></p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1060&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/06/drupal-mobile-tools-presentation-from-northpoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple Drupal Sites on same server with Memcache</title>
		<link>http://blog.tech4him.com/2011/06/multiple-drupal-sites-on-same-server-with-memcache/</link>
		<comments>http://blog.tech4him.com/2011/06/multiple-drupal-sites-on-same-server-with-memcache/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 15:44:24 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[memcache]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1040</guid>
		<description><![CDATA[Recently, the non-profit I work for made the decision to move to new VPS services. As part of the move we also were able to implement APC and Memcache as...]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.tech4him.com/wp-content/uploads/memcache.jpg"><img class="alignleft size-medium wp-image-1047" style="margin: 10px;" title="memcache" src="http://blog.tech4him.com/wp-content/uploads/memcache-300x68.jpg" alt="" width="300" height="68" /></a>Recently, the non-profit I work for made the decision to move to new VPS services. As part of the move we also were able to implement APC and Memcache as part of our performance strategy now that we are in a hosting environment we can actually control.</p>
<p>On our production boxes we installed our production site as well as a copy of production for staging purposes. For us, this is used for final QA testing prior to production deployment. This is our low tech solution to ensuring that staging is on an identical configuration as production to ensure no gotchas with slight differences in server builds, library versions, etc&#8230;</p>
<p>Things had been humming along nicely for about a week when a staff member came rushing into to my office to show me that the production homepage had the tag &#8220;STAGING SITE&#8221; in the site title. My heart dropped as my mind immediately went to &#8220;oh no, the production db is pointing at the staging DB! Has it been that way for a week&#8230;. ARGH!!&#8221; After a few frantic minutes of checking Drupal and apache site configurations, I realized that the worse case scenario was not the issue. Phew. So it got me thinking that this must be cache related, but how would cache cross sites? Immediately the new piece of memcache came to mind. We are running a single instance for all bins initially.</p>
<p>Doh! That had to be it. So a little Googling and I found <a href="http://drupal.org/node/238420">this issue</a> in the <a href="http://drupal.org/project/memcache">memcache module</a> queue that was closed. Double Doh! All I had to do was read the README.txt file and the answer was staring me in the face. The cache keys are not always created uniquely with identifiers including URLs/Hostnames nor absolute files paths. So as an example telnet to your default bin.</p>
<pre>&gt;telnet 127.0.0.1 11211
&gt;stats items
&gt;stats cachedump 1 100</pre>
<p>Let&#8217;s look at these. The <em>stats items</em> command lists all the slab and statistics about the items in each slab. Pick a slab number that has some items in it. The slab number is to the right of <em>:items:</em>&#8220;. The slab number is 37 in the example below. It indicates there are 3 items in the slab.</p>
<pre>STAT items:37:number 3</pre>
<p>Now if we want to see the contents of the items in the slab we issue the <em>stats cachedump &lt;slabnumber&gt; &lt;maxitems&gt;</em> command.</p>
<pre>&gt;stats cachedump 37 100
ITEM cache_views-views_data%3Aen [276200 b; 1307993360 s]
ITEM cache-variables [285776 b; 1307993360 s]
ITEM cache_content-content_type_info%3Aen [235095 b; 1307993360 s]
END</pre>
<p>So here we see that in slab 37 there are 3 items. One of those items is cache-variables. Now here is where we have to understand. Drupal has created a cache item with a key of <em>cache-variables</em>. That key has nothing unique about it to let anyone know which of the many drupal sites running it is for. If more than one Drupal site is using this same memcache bin, then it will get/set the same cache item for the variables of the site. Whichever site gets to set this cache item first, the second or third site will use the variables cached by the first site.</p>
<p>In our case, the staging site was hit and set this cache item. Our production site then looked to see if a cache item with the same key existed. It did and so the production site used those values to help generate the requested page. This explains why we saw the site title including the STAGING SITE text on the production site.</p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/drupal_memcache.png"><img class="alignright size-medium wp-image-1043" style="margin: 10px;" title="Drupal settings.php for Memcache and Prefix key" src="http://blog.tech4him.com/wp-content/uploads/drupal_memcache-300x136.png" alt="" width="300" height="136" /></a>Let&#8217;s get back to the README.txt file in the <a href="http://drupal.org/project/memcache">memcache module</a>. It very explicitly explains that when running multiple sites in the same bin that you need to use the memcache_key_prefix configuration variable in the settings.php that uniquely identifies each site.</p>
<pre>$conf['memcache_key_prefix'] = 'staging_';</pre>
<p>Now when I look at the slab containing the cache-variable key, we&#8217;ll notice it is prefix with &#8220;staging_&#8221; which now only the staging site is going to look at. Adding a different prefix configuration to the production site ensures that it too has unique cache item keys.</p>
<pre>&gt;stats cachedump 37 100
ITEM staging_-cache_views-views_data%3Aen [276200 b; 1307993360 s]
ITEM staging_-cache-variables [285776 b; 1307993360 s]
ITEM staging_-cache_content-content_type_info%3Aen [235095 b; 1307993360 s]
END</pre>
<p>This is obvious now having found the problem and solution however it definitely was one of those &#8220;Doh&#8221; moments. Hopefully this will help someone else.</p>
<p>Blessings</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1040&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/06/multiple-drupal-sites-on-same-server-with-memcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal Commons 4/18/2011 (Dev) Release Brings Changes</title>
		<link>http://blog.tech4him.com/2011/05/drupal-commons-4182011-dev-release-brings-changes/</link>
		<comments>http://blog.tech4him.com/2011/05/drupal-commons-4182011-dev-release-brings-changes/#comments</comments>
		<pubDate>Fri, 06 May 2011 05:32:30 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Links/Resources]]></category>
		<category><![CDATA[acquia]]></category>
		<category><![CDATA[commons]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=1026</guid>
		<description><![CDATA[For those who are familiar with Drupal, you are probably also familiar with Acquia, the company created by Dries Buytaert, Jay Batson and others. Acquia has worked to create an...]]></description>
			<content:encoded><![CDATA[<div id="attachment_1027" class="wp-caption alignright" style="width: 191px"><a href="http://brightlemon.com/blog/new-dev-version-drupal-commons-released"><img class="size-medium wp-image-1027" title="commons_home" src="http://blog.tech4him.com/wp-content/uploads/commons_home-181x300.png" alt="Drupal Commons (Connect theme homepage screenshot) - BrightLemon" width="181" height="300" /></a><p class="wp-caption-text">Drupal Commons (Connect theme homepage screenshot) - BrightLemon</p></div>
<p>For those who are familiar with Drupal, you are probably also familiar with Acquia, the company created by Dries Buytaert, Jay Batson and others. Acquia has worked to create an &#8220;installation profile&#8221; called <a href="http://acquia.com/products-services/drupal-commons-social-business-software" target="_blank">Drupal Commons</a> as an out of the box social community building site.</p>
<blockquote><p><a href="http://acquia.com/products-services/drupal-commons-social-business-software" target="_blank">Drupal Commons</a> is ready-to-use social software that provides familiar  tools from the social web to help you create positive buzz, brand  loyalty, and customer satisfaction in your community.</p></blockquote>
<p>Looks like there is a fairly <a href="http://network.acquia.com/downloads/drupal-commons" target="_blank">substantial dev release</a> in the works unlike the previous, primarily security update focused releases. According to the <a href="http://network.acquia.com/downloads/drupal-commons/6.x-1.x-2011-April-18-release-notes" target="_blank">release notes</a>, it looks like the next version 1.6 will include a number of substantial changes. One of the most striking changes is the appearance of a new default theme. This new theme appears to be thanks to a partnership between Acquia and BrightLemon. I for one, love the new theme as it provides a much more visually appealing/compelling look when showing Drupal Commons to customers or users as an &#8220;out of the box&#8221; experience before discussing what is then possible via templates and themes.</p>
<p>Additionally, Context has fully replaced Panels module. In previous versions, the home page, user profile, and group home page were rendered by Panels but now will retrieve display components using Context. Apparently Context gave a few more features and <a href="http://commons.acquia.com/blog/new-dev-release-available-2011-april-18#comment-18576" target="_blank">using both was causing confusion</a>.</p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/20110418DCnextVersionName.png"><img class="alignleft size-medium wp-image-1033" title="20110418DCnextVersionName" src="http://blog.tech4him.com/wp-content/uploads/20110418DCnextVersionName-300x62.png" alt="" width="300" height="62" /></a>NOTE: This is a DEV release. As Acquia warns, do not use it as a production implementation. There is currently no upgrade from previous versions, however Jay Batson confirms that an <a href="http://commons.acquia.com/blog/new-dev-release-available-2011-april-18#comment-18586" target="_blank">upgrade path will exist</a> for the final release of this version.</p>
<blockquote><p>Installation profiles provide site features and functions for a specific  type of site as a single download containing Drupal core, contributed  modules, themes, and pre-defined configuration. They make it possible to  quickly set up a complex, use-specific site in fewer steps than if  installing and configuring elements individually.  For example, an <a href="http://drupal.org/project/cod">installation profile for conferences</a> might include modules for advanced user registration, attendee  profiles, ticketing, and a list of speakers and sessions. Once  installed, installation profiles can be configured and customized the  same as traditionally-built Drupal sites. Refer to the <a href="http://drupal.org/node/306267">installation profile documentation</a> for more information.</p></blockquote>
<p>&nbsp;</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=1026&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2011/05/drupal-commons-4182011-dev-release-brings-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal 5 to 6 Form Migration #TREE Attribute</title>
		<link>http://blog.tech4him.com/2010/03/drupal-5-to-6-form-migration-tree-attribute/</link>
		<comments>http://blog.tech4him.com/2010/03/drupal-5-to-6-form-migration-tree-attribute/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:12:23 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.tech4him.com/?p=910</guid>
		<description><![CDATA[Today was spent working on creating a Drupal 6 version of a custom Drupal 5 module as part of a Drupal upgrade project. This module is similar to the image_attach...]]></description>
			<content:encoded><![CDATA[<p><a href="http://farm1.static.flickr.com/72/183313765_12a606d998.jpg"><img class="alignright" title="Tree" src="http://farm1.static.flickr.com/72/183313765_12a606d998.jpg" alt="" width="350" height="199" /></a>Today was spent working on creating a Drupal 6 version of a custom Drupal 5 module as part of a Drupal upgrade project. This module is similar to the image_attach module that is a contrib module package with the <a href="http://drupal.org/project/image">Image module</a>. The difference is that the module allows you to designate categories for images by content_type and allows for the upload, selection, removal and ordering of images in each &#8220;image category&#8221;.<span id="more-910"></span></p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/20100310-images_attach-screenshot.png"><img class="alignleft size-medium wp-image-913" style="border: 1px solid black; margin: 8px;" title="20100310 images_attach screenshot" src="http://blog.tech4him.com/wp-content/uploads/20100310-images_attach-screenshot-212x300.png" alt="" width="212" height="300" /></a>Now, one of the biggest challenges is that there are multiple instances of the &#8220;image_attach&#8221; sections on a single content edit form, one for each category. The Drupal 5 version handled this by naming these by appending the category name to the fields. This allows the submitted form value for &#8220;iids&#8221; to be an array of categories. Each category itself being an array of image iid values.</p>
<p>For the life of me, my Drupal 6 version of this functionality failed to maintain the category arrays. After some frustrated hair pulling (hmmm&#8230;. no wonder my hair is so short), I remembered to take a look at the <a href="http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6">FAPI docs</a>.</p>
<p>http://api.drupal.org/api/drupal/developer&#8211;topics&#8211;forms_api.html/6</p>
<blockquote><p><span style="color: #800080;"><em>An important thing to note:</em> notice that <code>$form['access']</code> has a <code>'#tree' =&gt; TRUE</code> attribute. this setting retains  the full tree structure for all elements under it when it is passed to <code>$form_state['values']</code>.  you must explicitly declare this anywhere you wish to retain an array&#8217;s  full hierarchy when it is passed.</span></p></blockquote>
<p>So, Drupal 6 collapses form elements where possible by default. By adding the #tree attribute, the hierarchy of form elements is maintained in the form_state submitted. Eureka!</p>
<p>Here&#8217;s an example of what I was getting without the #tree attribute:</p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/20100310-Drupal-Without-Form-Tree.png"><img class="aligncenter size-medium wp-image-911" title="20100310 Drupal Without Form Tree" src="http://blog.tech4him.com/wp-content/uploads/20100310-Drupal-Without-Form-Tree-300x281.png" alt="form_state values without #tree" width="300" height="281" /></a></p>
<p>And now with the #tree attribute set to true, the form hierarchy is retain and not collapsed:</p>
<p><a href="http://blog.tech4him.com/wp-content/uploads/20100310-Drupal-With-Form-TREE-on.png"><img class="aligncenter size-medium wp-image-912" title="20100310 Drupal With Form TREE on" src="http://blog.tech4him.com/wp-content/uploads/20100310-Drupal-With-Form-TREE-on-285x300.png" alt="form_state values with #tree" width="285" height="300" /></a></p>
<p>I&#8217;m sure most of you doing Drupal development are saying &#8220;Duh!&#8221;. Well, let&#8217;s just say I really didn&#8217;t know. <img src='http://blog.tech4him.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Thought I&#8217;d throw it on the blog so I don&#8217;t forget.</p>
<p>Blessings.</p>
<img src="http://blog.tech4him.com/?ak_action=api_record_view&id=910&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.tech4him.com/2010/03/drupal-5-to-6-form-migration-tree-attribute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

