<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://designhammer.com/blog/feed">
  <channel>
    <title>DesignHammer Blog</title>
    <link>http://designhammer.com/blog/feed</link>
    <description />
    <language>en</language>
          <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DesignHammerBlog" /><feedburner:info uri="designhammerblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>35.905765</geo:lat><geo:long>-78.921136</geo:long><item>
    <title>Charting our bicycling commuting habits</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/Z9__xo3NjYs/charting-our-bicycling-commuting-habits</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;Happy belated &lt;a href="https://en.wikipedia.org/wiki/Bike-to-Work_Day"&gt;bike to work day&lt;/a&gt;! In honor of that day – and &lt;a href="http://www.bikeleague.org/programs/bikemonth/"&gt;National Bike Month&lt;/a&gt;, not to mention &lt;a href="http://www.earthday.org/"&gt;Earth Day&lt;/a&gt; (when we started working on this), and because the weather is just so pleasant this time of year – DesignHammer published a new &lt;a href="/about/sustainability"&gt;Sustainable Commuting&lt;/a&gt; page. We'll add more content about our overall sustainability practices as time goes on, but for now the first entry is a section on &lt;a href="/about/sustainability"&gt;our bicycle commuting habits&lt;/a&gt;. From the page:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;DesignHammer's &lt;a href="/about/partner/robert-weeks"&gt;Robert Weeks&lt;/a&gt; and &lt;a href="/about/staff/kosta-harlan"&gt;Kosta Harlan&lt;/a&gt; have been cycling to work since 2005 and 2009, respectively. Robert takes a 17 mile round trip route to work while Kosta's commute is 15.6 miles. Both of them feel fortunate to spend some of their cycling commute on the &lt;a href="http://www.triangletrails.org/"&gt;American Tobacco Trail&lt;/a&gt;.&lt;/p&gt;
  
  &lt;p&gt;In 2011 we started tracking the miles we were putting into our routes in a Google Spreadsheet. Now that we've accumulated some data, we thought it would be interesting to visualize our sustainable commuting habits over time, and to measure our impact on &lt;a href="http://www.epa.gov/cleanenergy/energy-resources/refs.html"&gt;reducing carbon emissions&lt;/a&gt; – the average car emits 4.8 metric tons of CO² per year, so far we've offset &lt;strong&gt;1.72 metric tons&lt;/strong&gt; of CO² through bicycle commuting a total of &lt;strong&gt;4108 miles&lt;/strong&gt;. (To put that in perspective, &lt;a href="http://www.thegreeneconomy.com/what-is-a-carbon/"&gt;a metric ton of CO² is about the size of 35 Toyota Camrys&lt;/a&gt;.) Factoring in DesignHammer's flexible working arrangement where team members can work some days from home, the total emissions offset increases by about one more ton per year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="/about/sustainability"&gt;&lt;img class="img-border" src="/sites/default/files/blog-sustain.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head on over to the new &lt;a href="/about/sustainability"&gt;Sustainability page&lt;/a&gt; to see some Google charts visualizing the miles aggregated over time. We've created two line charts: the first shows a break down of miles cycled for the current month versus the previous month, with metrics for the combined miles and miles per person; and the second chart gives a broader picture of combined miles cycled per month, starting from the beginning of the year to the present. From the latter you can see that we got off to a slower start than last year but are now putting in many more miles in cycling to work.&lt;/p&gt;

&lt;p&gt;Cycling to work has been wonderful for Robert and me. Some of the benefits:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;It's a great way to start the morning and to reduce stress at the end of a work day. &lt;/li&gt;
&lt;li&gt;In Durham odds are you'll get to use the American Tobacco Trail for part of your commute, which means you'll get to see all kinds of interesting and beautiful wildlife in your morning and afternoon commute - we've seen turtles, hawks, foxes and fox cubs, and beavers, among other creatures. &lt;/li&gt;
&lt;li&gt;The health benefits are well-documented – check out this &lt;a href="http://www.fitnessforweightloss.com/bike-to-work-week-infographic/"&gt;neat infographic for a breakdown&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;It's a meaningful way to reduce our carbon footprint and take cars off the road. With atmospheric concentrations of CO² &lt;a href="http://400.350.org/"&gt;recently surpassing 400 parts per million&lt;/a&gt;, it's time for everyone to get real about reducing emissions and thinking about how to contribute to a solution - and bicycle commuting is a great way to do that.&lt;/li&gt;
&lt;li&gt;As a bonus, you can spend more time with your pets by bringing them along for the ride!  Check out these photos of &lt;a href="http://designhammer.com/sites/default/files/942458_10201134240575022_484951642_n.jpg"&gt;Robert's dog&lt;/a&gt; &lt;a href="http://designhammer.com/sites/default/files/984172_10201134232294815_862202429_n.jpg"&gt;sitting pretty&lt;/a&gt; after the commute this morning.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;We hope this inspires you to hop on a bicycle and ride to work!&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/bicycle-commuting" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;bicycle commuting&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/sustainability" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Sustainability&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/Z9__xo3NjYs" height="1" width="1"/&gt;</description>
     <pubDate>Thu, 30 May 2013 14:18:06 +0000</pubDate>
 <dc:creator>Kosta Harlan</dc:creator>
 <guid isPermaLink="false">357 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/charting-our-bicycling-commuting-habits</feedburner:origLink></item>
  <item>
    <title>Google + button hover and Zen 5.x</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/DfIrsj0Hy1c/google-button-hover-and-zen-5x</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;h2&gt;A problem with the recommendations hover&lt;/h2&gt;

&lt;p&gt;After adding the Google + button to our blog and news pages, I notice a display issue with the recommendations hover drop-down. It appeared to be slightly blown apart at the top, but how do I figure out what is causing this?&lt;/p&gt;

&lt;p&gt;&lt;img class="img-center" src="/sites/default/files/gplus-hover-issue.png" /&gt;&lt;/p&gt;

&lt;h2&gt;The problem found&lt;/h2&gt;

&lt;p&gt;Well, after spending some time reviewing the generated code, using firebug, I begun to think it wasn't Google's CSS causing the issue. So I searched through the Drupal core and Zen theme CSS and by process of elimination found the culprit. It was the &lt;strong&gt;normailize.css(scss)&lt;/strong&gt; file in our Zen subtheme. It contained the responsive image declaration that was overridding the inline &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; height value.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="css geshifilter-css" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;img &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #808080; font-style: italic;"&gt;/* Responsive images */&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;max-width&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;100%&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #993333;"&gt;auto&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;One possible, but maybe not ideal, Fix&lt;/h2&gt;

&lt;p&gt;So how do you override, or disable, &lt;strong&gt;height:auto&lt;/strong&gt;? That's a good question, because "auto" is the default setting for height. So the best solution I could come up with to override the CSS was by adding a fixed css height value for each image used. But what happens when Google changes the output… guess I'll have to fix again?&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="css geshifilter-css" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #6666ff;"&gt;.pls-topLeft&lt;/span&gt; img&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-topTail&lt;/span&gt; img.pls-spacerbottom&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-topRight&lt;/span&gt; img&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-contentLeft&lt;/span&gt; img.pls-spacerright&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-dropRight&lt;/span&gt; img.pls-spacerleft&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-bottomLeft&lt;/span&gt; img&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-dropBottom&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.ls-spacertop&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;1px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-vertShimLeft&lt;/span&gt; img&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-vertShim&lt;/span&gt; img&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-vertShimRight&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-dropTR&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;4px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-vert&lt;/span&gt; img.pls-dropBL&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-vert&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-dropBR&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;5px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
     
&lt;span style="color: #6666ff;"&gt;.pls-topTail&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-tailbottom&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;9px&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-dropBottom&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-tailtop&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;13px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-contentLeft&lt;/span&gt; img &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;15px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-contentWrap&lt;/span&gt; img.pls-spinner&lt;span style="color: #00AA00;"&gt;,&lt;/span&gt;
&lt;span style="color: #6666ff;"&gt;.pls-contentWrap&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-tailright&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;16px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;
 
&lt;span style="color: #6666ff;"&gt;.pls-dropRight&lt;/span&gt; img&lt;span style="color: #6666ff;"&gt;.pls-tailleft&lt;/span&gt; &lt;span style="color: #00AA00;"&gt;{&lt;/span&gt;
  &lt;span style="color: #000000; font-weight: bold;"&gt;height&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;:&lt;/span&gt; &lt;span style="color: #933;"&gt;19px&lt;/span&gt;&lt;span style="color: #00AA00;"&gt;;&lt;/span&gt;
&lt;span style="color: #00AA00;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All fixed, for now...&lt;/p&gt;

&lt;p&gt;&lt;img class="img-center" src="/sites/default/files/gplus-hover.png" /&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/google-plus" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Google Plus&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/css" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;CSS&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/DfIrsj0Hy1c" height="1" width="1"/&gt;</description>
     <pubDate>Fri, 04 Jan 2013 02:02:08 +0000</pubDate>
 <dc:creator>Frank Yonnetti</dc:creator>
 <guid isPermaLink="false">347 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/google-button-hover-and-zen-5x</feedburner:origLink></item>
  <item><title>Links for 2012-09-14 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/YTXQdr8Ze5s/designhammer</link><pubDate>Sat, 15 Sep 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2012-09-14</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://educandoalfuturoespectador.blogspot.com.es/2012/09/nuevas-preguntas-para-un-primer-dia-de.html?spref=tw&amp;m=1"&gt;FORMANDO AL FUTURO ESPECTADOR. Cine y Eduaci&amp;oacute;n van de la mano: Nuevas preguntas para un primer d&amp;iacute;a de clase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.festivalcinedaroca.com/cortos/mi-papa-es-director-de-cine/"&gt;Mi pap&amp;aacute; es Director de Cine | Daroca&amp;amp;Prisi&amp;oacute;n Film Fest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://recursostic.educacion.es/buenaspracticas20/web/es/educacion-secundaria-obligatoria/734-aprendizaje-basado-en-proyectos-con-aitor-lazpita"&gt;Aprendizaje basado en proyectos con Aitor L&amp;aacute;zpita&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/YTXQdr8Ze5s" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2012-09-14</feedburner:origLink></item><item><title>Links for 2012-09-12 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/gn_8GPB21SI/designhammer</link><pubDate>Thu, 13 Sep 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2012-09-12</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=-8o99J8NVv4&amp;feature=player_embedded"&gt;Agust&amp;iacute;n Jim&amp;eacute;nez en El Club de la Comedia - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/gn_8GPB21SI" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2012-09-12</feedburner:origLink></item><item><title>Links for 2012-09-11 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/l2K7wg1THfk/designhammer</link><pubDate>Wed, 12 Sep 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2012-09-11</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=Xyp7xt-ygy0"&gt;Qu&amp;eacute; dif&amp;iacute;cil es hablar el espa&amp;ntilde;ol - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rtve.es/alacarta/videos/informe-semanal/informe-semanal-luces-para-aprender/1523419/"&gt;Informe Semanal: Luces para aprender, Informe Semanal - RTVE.es A la Carta&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/l2K7wg1THfk" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2012-09-11</feedburner:origLink></item><item>
    <title>Help us test our contest software for a chance to win an amazon.com gift card</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/cRcekqK0yb8/testing-punchtab</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;h2&gt;Testing PunchTab, the world's first instant loyalty platform&lt;/h2&gt;

&lt;p&gt;It is often said there is no free lunch, though if you are lucky, you may get one, if you can order it from Amazon.com with a $10.00 &lt;a href="http://www.amazon.com/gp/gc/ref=topnav_giftcert" target="_blank"&gt;Amazon.com gift card&lt;/a&gt; from Designhammer. Why the prize you may ask? We are testing out &lt;a href="http://www.punchtab.com/" target="_blank"&gt;PunchTab&lt;/a&gt;, an online service billed as the world's first instant loyalty platform. One component of which is online contest management.&lt;/p&gt;

&lt;p&gt;To get a feel for how PunchTab works, and to iron out any kinks before we offer up a more substantial prize (hint, hint, check back soon), we thought we would put something small on the line. Don't delay; the contest ends at 2pm on Wednesday, September 12th, 2012.&lt;/p&gt;

&lt;div align="center"&gt;
&lt;script src="//www.punchtab.com/mast/10690/giveaway_widget.js"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;/br&gt;
&lt;p&gt;Why PunchTab? I was looking for a better (i.e. easier) way to manage our online contests, and came across a post on TechCrunch: &lt;a href="http://techcrunch.com/2012/05/07/social-loyalty-platform-punchtab-launches-agency-platform-touts-customers-like-ebay-arbys/" target="_blank"&gt;Social Loyalty Platform PunchTab Launches Agency Platform; Touts Customers Like eBay &amp;#38; Arby&amp;#8217;s&lt;/a&gt;. In addition to &lt;a href="http://www.punchtab.com/giveaway-program" target="_blank"&gt;Giveaways&lt;/a&gt; like this one, PunchTab also manages online &lt;a href="http://www.punchtab.com/loyalty-program" target="_blank"&gt;Loyalty Programs&lt;/a&gt;, as well as &lt;a href="http://www.punchtab.com/badges-program" target="_blank"&gt;Badges &amp;#38; Achievements&lt;/a&gt;. There are currently &lt;a href="http://www.punchtab.com/pricing" target="_blank"&gt;three account levels&lt;/a&gt; with different benefits: free, $99/month, and $999/month. We are trying the free account.&lt;/p&gt;

&lt;p&gt; We will be posting our findings once we finish the contest. If you have any feedback on your experience with PunchTab, please leave a comment, below.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/social-media" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Social Media&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/social-networking" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Social Networking&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/cRcekqK0yb8" height="1" width="1"/&gt;</description>
     <pubDate>Wed, 12 Sep 2012 02:45:41 +0000</pubDate>
 <dc:creator>David Minton</dc:creator>
 <guid isPermaLink="false">333 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/testing-punchtab</feedburner:origLink></item>
  <item>
    <title>DesignHammer partner to be a "homeless CEO" for charity</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/xpIGIafP0os/designhammer-partner-be-homeless-ceo-charity</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;&lt;img src="/sites/default/files/ceo-sleepout-logo.png" class="right-border" /&gt;I need your help. &lt;a href="http://www.unitedwaytriangle.org/ceo/minton.php" target="_blank"&gt;I was just accepted&lt;/a&gt; to participate in the &lt;a href="http://www.unitedwaytriangle.org/ceo/index.php" target="_blank"&gt;United Way of the Greater Triangle's CEO Sleepout&lt;/a&gt;, an event that has never been done here before: a leadership sleepout on the streets to draw attention to those who live in poverty. The event will take place, rain or shine, Thursday, September 6 at 6:30pm through Friday, September 7 at 8:00am, in downtown Durham.&lt;/p&gt;

&lt;p&gt;It’s been said, “A nation’s greatness is measured by how it treats its weakest members.” In a nation as great as ours, people shouldn’t need to worry about where they will get there next meal, or if they will have a safe place to sleep at night. I hope through my participation I can help raise awareness for homelessness and poverty in our community.&lt;/p&gt;

&lt;p&gt;This is no ordinary fundraiser; rather than sitting in a climate-controlled room, listening to a keynote speaker over coffee and dessert after a filling dinner, we will be sleeping on the street. Well, actually on the sidewalk in front of the Durham Performing Arts Center (DPAC). We will be provided bottled watter, coffee, and access to a port-a-potty. I will be able to purchase “comfort items” with the donations I raise, which include:&lt;/p&gt;

&lt;ul type="circle"&gt;&lt;li&gt;$250: a piece of cardboard for a CEO to sleep on — AND, a hot, nutritious meal and social call to a homebound senior for six months.&lt;/li&gt;
    &lt;li&gt;$500: a blanket for CEO on Sleepout night — AND, one week of safe shelter and support for a family as they seek to move out of homelessness.&lt;/li&gt;
    &lt;li&gt;$750: a cardboard box as shelter for a CEO — AND, mental health counseling, substance abuse treatment and help finding a job for 10 women.&lt;/li&gt;
    &lt;li&gt;$1000: a sleeping bag for a CEO — AND, a matched savings program and financial literacy assistance for teens aging out of the foster care system.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I hope you will consider pledging to support my efforts toward this worthy cause, and help me not sleep on the bare pavement. &lt;b&gt;&lt;a href="https://www.unitedwaytriangle.org/ceo/donate.php" target="_blank"&gt;Please make sure you select my name&lt;/a&gt; from the “Donate on Behalf of” menu at the very bottom of the form.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Thank you for supporting the United Way of the Greater Triangle, and the effort to fight homelessness and poverty in our community. &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/xpIGIafP0os" height="1" width="1"/&gt;</description>
     <pubDate>Tue, 04 Sep 2012 18:31:51 +0000</pubDate>
 <dc:creator>David Minton</dc:creator>
 <guid isPermaLink="false">327 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/designhammer-partner-be-homeless-ceo-charity</feedburner:origLink></item>
  <item>
    <title>Three notes on leadership</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/n9jXGpZMSOI/three-notes-leadership</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;Today marks the sixty-eighth anniversary of Operation Overlord, the code name for the Allied invasion of Normandy, on June sixth, 1944. The D-Day invasion was successful, and likely shortened the war.&lt;/p&gt;

&lt;p&gt;Prior to the departure of the troops for the invasion, General Eisenhower provided the following message of encouragement to the troops:&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/Order_of_the_Day.png" alt="" /&gt;&lt;span class="photo-caption"&gt;“Order of the Day” — statement as issued to the soldiers, sailors and airmen of the Allied Expeditionary Force on June 6, 1944 [The Dwight D. Eisenhower Presidential Library and Museum]&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;blockquote cite="http://www.eisenhower.archives.gov/research/online_documents/d_day.html"&gt;
&lt;p&gt;“Soldiers, Sailors and Airmen of the Allied Expeditionary Force!&lt;/p&gt;

&lt;p&gt;You are about to embark upon a great crusade, toward which we have striven these many months. The eyes of the world are upon you. The hopes and prayers of liberty loving people everywhere march with you. In company with our brave Allies and brothers in arms on other fronts, you will bring about the destruction of the German war machine, the elimination of Nazi tyranny over the oppressed peoples of Europe, and security for ourselves in a free world.&lt;/p&gt;

&lt;p&gt;Your task will not be an easy one. Your enemy is well trained, well equipped and battle hardened, he will fight savagely.&lt;/p&gt;

&lt;p&gt;But this is the year 1944! Much has happened since the Nazi triumphs of 1940-41. The United Nations have inflicted upon the Germans great defeats, in open battle, man to man. Our air offensive has seriously reduced their strength in the air and their capacity to wage war on the ground. Our home fronts have given us an overwhelming superiority in weapons and munitions of war, and placed at our disposal great reserves of trained fighting men. The tide has turned! The free men of the world are marching together to victory!
I have full confidence in your courage, devotion to duty and skill in battle. We will accept nothing less than full victory!&lt;/p&gt;

&lt;p&gt;Good Luck! And let us all beseech the blessings of Almighty God upon this great and noble undertaking.”&lt;/p&gt;

&lt;p&gt;— Gen. Dwight D. Eisenhower&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An earlier draft of the message provides us an insight into his thoughts, as he reordered parts of the message:&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/Order_of_the_Day_draft.jpg" alt="" /&gt;&lt;span class="photo-caption"&gt;“Order of the Day” — draft of statement [The Dwight D. Eisenhower Presidential Library and Museum]&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The General, however, had also planned for the worst. While not as well know, Eisenhower also drafted a message in case the invasion failed. On D-Day +35, Gen. Eisenhower came across the forgotten note, a piece of history likely to have been lost, had it not be saved by his naval aide, Capt. Harry C. Butcher. The note (mistakenly dated July fifth) read:&lt;/p&gt;

&lt;blockquote cite="http://www.eisenhower.archives.gov/research/online_documents/d_day.html"&gt;
“Our landings in the Cherbourg-Havre area have failed to gain a satisfactory foothold and I have withdrawn the troops. My decision to attack at this time and place was based upon the best information available. The troops, the air and the Navy did all that Bravery and devotion to duty could do. If any blame or fault attaches to the attempt it is mine alone.”
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/failure-message.gif" alt="" /&gt;&lt;span class="photo-caption"&gt;“In Case of Failure Message” [The Dwight D. Eisenhower Presidential Library and Museum]&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Had the invasion failed, another would not have been possible, based on necessary tidal conditions, moon phase, and weather, for another year. During that time, the Soviets would have driven west to Berlin, and likely to the Rhine, and possibly as far as the North Sea and English Channel, resulting in all of continental Europe behind the Iron Curtain.&lt;/p&gt;

&lt;p&gt;As a lesson to the rest of us in leadership, Eisenhower trained and motivated his organization for success, though recognized the chance of failure. In case of failure, he was prepared to accept the ultimate responsibility.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/n9jXGpZMSOI" height="1" width="1"/&gt;</description>
     <pubDate>Wed, 06 Jun 2012 17:50:11 +0000</pubDate>
 <dc:creator>David Minton</dc:creator>
 <guid isPermaLink="false">326 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/three-notes-leadership</feedburner:origLink></item>
  <item>
    <title>How Abandoned Blogs and National Public Radio can help a Black Hat SEO</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/NO8SmsVV58c/how-abandoned-blogs-and-national-public-radio-can-help-black-hat-seo</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;As one of of DesignHammer’s organic &lt;a href="/services/seo-guide"&gt;Search Engine Optimization (SEO)&lt;/a&gt; services, we monitor our client's position on Search Engine Results Pages (SERPs), along with those of their major competitors. Recently, a competitor to one of our clients rocketed to the top of the search rankings for several of their targeted search terms. There are a number of reasons this could happen, so I set out to determine what would account for this dramatic change.&lt;/p&gt;

&lt;p&gt;At the most basic level, organic SEO can be divided into “on page” and “off page” techniques. On Page techniques include HTML structure, and written content on a page being optimized, while Off Page techniques primarily focus on the quality and quantity of incoming links.&lt;/p&gt;

&lt;p&gt;Since there are a number of tools that automate analysis of incoming links, that was my first path of inquiery. I quickly noted links from over ten &lt;a href="http://www.typepad.com/"&gt;TypePad blogs&lt;/a&gt; to the competitor’s website for several of their targeted search terms.&lt;/p&gt;

&lt;p&gt;When I reviewed the TypePad blogs, I found they were obviously being used solely to create &lt;a href="http://en.wikipedia.org/wiki/Backlink"&gt;backlinks&lt;/a&gt; for SEO. While this was not surprising, what did surprise me was several of the blogs I reviewed had exceptionally good &lt;a hreg="http://en.wikipedia.org/wiki/PageRank"&gt;PageRank&lt;/a&gt; for a &lt;a href="http://en.wikipedia.org/wiki/Spam_blog"&gt;spam blog&lt;/a&gt; (PageRank of 4 or 5 out of a possible 10). This was unexpected since a number of recent updates to the Google algorithm were supposed to punish low quality websites such as this one.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/spam-blog-575x300.jpg" alt="A Spam Blog with a Page Rank of 5" /&gt;&lt;span class="photo-caption"&gt;A Spam Blog with a Page Rank of 5 on this page.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Most of the links on the blog are to product pages on e-commerce sites, a common tactic for less reputable SEO firms to improve the search performance of their client's pages. While tactics such as this can be effective in the short term, they violate &lt;a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769"&gt;Google's Webmaster Guidelines&lt;/a&gt; and can result in penalties for a site if it is caught benefitting from such &lt;a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;amp;answer=66356"&gt;link schemes&lt;/a&gt;. The most recent Google algorithm update has reportedly &lt;a href="http://www.hobo-web.co.uk/webspam/"&gt;damaged webspam tactics&lt;/a&gt; such as this. If that is true, why is this link scheme still so effective?&lt;/p&gt;

&lt;p&gt;I did some further investigation and found that one of the sites, librarianinblack.typepad.com* was linked to from &lt;a href="http://www.npr.org/"&gt;National Public Radio&lt;/a&gt; as one of the "&lt;a href="http://www.npr.org/blogs/library/"&gt;library blogs&lt;/a&gt; we love." With a PageRank of 5, a link from this NPR subpage is a high quality link (the NPR home page, with a PageRank of 8, would help even more). As I have come to expect something beyond links to spam from NPR, I decided to dig a bit deeper.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/npr-overlay.jpg" alt="NPR: Library Blogs We Love" /&gt;&lt;span class="photo-caption"&gt;NPR: Library Blogs We Love.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;After consulting the &lt;a href="http://archive.org/web/web.php"&gt;Wayback Machine&lt;/a&gt; (an incomplete archive of Web pages going back as far as 1996), I discovered that from 2004 through 2009 the Librarian In Black was a regularly updated, apparently well read and respected blog sharing resources and discussions for the "tech-librarians-by-default." In 2009, &lt;a href="http://librarianinblack.net/librarianinblack/"&gt;Librarian In Black&lt;/a&gt; moved off of TypePad to it's new home, librarianinblack.net.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/LIB-logo.jpg" alt="Librarian In Black" /&gt;&lt;span class="photo-caption"&gt;The New Librarian In Black Blog.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;However starting in 2011, librarianinblack.typepad.com* started a new life as a splog (splog = spam + blog). &lt;a href="http://www.wired.com/wired/archive/14.09/splogs.html"&gt;Splogs&lt;/a&gt; are not a new phenomenon, and this was a valuable one. When the actual Librarian In Black blog moved to its own domain, not every linking site updated their links. This left a URL with significant &lt;a href="http://www.seomoz.org/blog/pagerank-link-patterns-the-new-flow-of-link-juice"&gt;link juice&lt;/a&gt; to be used for &lt;a href="http://en.wikipedia.org/wiki/Spamdexing"&gt;spamdexing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/site-activity.jpg" alt="Site Activity: 2004-2011" /&gt;&lt;span class="photo-caption"&gt;Site Activity: 2004-2011.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;As a testament to the residual PageRank, librarianinblack.typepad.com* is still the second result in Google for a search for "librarian in black."&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="img-border" src="/sites/default/files/librarian-in-black-Google-Search.png" alt="Search Results: Librarian in Black" /&gt;&lt;span class="photo-caption"&gt;Search Results: Librarian in Black.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;While we may never know exactly how this particular web spammer stumbled upon librarianinblack.typepad.com*, &lt;a href="http://en.wikipedia.org/wiki/Social_engineering_(security)"&gt;Social Engineers&lt;/a&gt; and &lt;a href="/blog/17-black-hat-seo-techniques-avoid"&gt;Black Hat SEO&lt;/a&gt; practitioners are always on the lookout for new ways to claim blogs with existing page rank.&lt;/p&gt;

&lt;p&gt;At DesignHammer, we do not practice or endorse SEO practices that violate &lt;a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;amp;answer=35291"&gt;Google's SEO Guidelines&lt;/a&gt;. We feel that the potential temporary benefit of these prohibited practices is outweighed by the potential for lost business and damaged reputation if caught. In short, &lt;a href="/blog/black-hat-seo-good-idea-business"&gt;black hat SEO practices are bad for business&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* Throughout this blog, I have refrained from linking to the spam blog. I don't see any reason to legitimize it with any of DesignHammer's link authority.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/seo" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;SEO&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/black-hat-seo" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Black Hat SEO&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/google" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Google&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/NO8SmsVV58c" height="1" width="1"/&gt;</description>
     <pubDate>Mon, 14 May 2012 14:00:12 +0000</pubDate>
 <dc:creator>Stephen Pashby</dc:creator>
 <guid isPermaLink="false">324 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/how-abandoned-blogs-and-national-public-radio-can-help-black-hat-seo</feedburner:origLink></item>
  <item>
    <title>Drush Rebuild: A utility for rebuilding Drupal development environments</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/THez-SZdyFI/drush-rebuild-utility-rebuilding-drupal-development-environments</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;Rebuilding a local development environment for a Drupal site can often be a chore - see the last post, &lt;a href="http://www.designhammer.com/blog/workflow-and-tools-developing-install-profiles-and-drush-make"&gt;"Workflow and tools for developing with install profiles and Drush Make"&lt;/a&gt;, for a complex example.&lt;/p&gt;

&lt;p&gt;In theory, you should be able to just get the code from the production or staging site onto your local machine, get a dump of the database, and off you go. &lt;a href="http://drush.ws/#sql-sync"&gt;&lt;code&gt;drush sql-sync&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://drush.ws/#core-rsync"&gt;&lt;code&gt;drush rsync&lt;/code&gt;&lt;/a&gt; are two very powerful commands that can accomplish this for you in no time at all.&lt;/p&gt;

&lt;p&gt;But that's usually not enough to get your dev environment up to date, because then you need to disable Google Analytics, CSS/JS aggregation, caching, and enable the Devel module, etc.&lt;/p&gt;

&lt;p&gt;Further, each site might have its own set of modules that need to have settings adjusted. For example, the Salesforce module should connect to a Sandbox, not the production instance, when it's enabled on the local development environment.&lt;/p&gt;

&lt;p&gt;To make things more complicated, each site can have a different structure. Here at DesignHammer, we have sites built using Drush Make, sites where the entire codebase is in Git, others where the codebase is in SVN, and still others where only our custom code is in the repository, and we symlink to a Drupal directory.&lt;/p&gt;

&lt;p&gt;Once you go through all of the steps of rebuilding your dev environment, then each co-worker needs to go through the same tedious process. Depending on the complexity of the site, this can take quite a while. If you stop development on a site for a couple months, you find you've forgotten half the steps and need to go through the whole process again.&lt;/p&gt;

&lt;p&gt;How can we get rid of repetitive and tedious tasks in rebuilding a local development environment and make this process simpler?&lt;/p&gt;

&lt;h2&gt;Drush Rebuild&lt;/h2&gt;

&lt;p&gt;I wrote a simple utility, &lt;a href="https://drupal.org/sandbox/kostajh/1504594"&gt;Drush Rebuild&lt;/a&gt;, to help me manage the process of rebuilding a local development environment. Drush Rebuild doesn’t make assumptions about your repository structure (Drush Make, entire codebase in repo, etc), nor does it care about extra steps you need to take when configuring a development environment, like disabling caching, adjusting connections with 3rd party services, and so on.&lt;/p&gt;

&lt;p&gt;Instead, the utility provides a framework for executing rebuild scripts for a given site, using the power of Drush aliases and the drush &lt;code&gt;php-script&lt;/code&gt; command.&lt;/p&gt;

&lt;h2&gt;How does Drush Rebuild work?&lt;/h2&gt;

&lt;p&gt;Download the &lt;a href="https://drupal.org/sandbox/kostajh/1504594"&gt;Drush Rebuild&lt;/a&gt; extension to your &lt;code&gt;~/.drush&lt;/code&gt; directory. In your terminal, type &lt;code&gt;drush help rebuild&lt;/code&gt; to test that installation succeeded and to get an overview of the options.&lt;/p&gt;

&lt;p&gt;Edit your local dev site alias (run &lt;code&gt;drush topic docs-aliases&lt;/code&gt; if you are not familiar with aliases), and add an entry under the &lt;code&gt;path-aliases&lt;/code&gt; array for &lt;code&gt;%local-tasks&lt;/code&gt;. It should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="php geshifilter-php" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #000088;"&gt;$aliases&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'dev'&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;
  &lt;span style="color: #0000ff;"&gt;'root'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'/path/to/site'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
  &lt;span style="color: #0000ff;"&gt;'path-aliases'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;
    &lt;span style="color: #0000ff;"&gt;'%local-tasks'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'/path/to/local-tasks-dir'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
  &lt;span style="color: #0000ff;"&gt;'rebuild'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;
     &lt;span style="color: #0000ff;"&gt;'drupal_5_site_root'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'/path/to/drupal5/siteroot'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
    &lt;span style="color: #0000ff;"&gt;'git_repo'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'/path/to/site/repo'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
  &lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;
&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note the &lt;code&gt;rebuild&lt;/code&gt; array in the alias, which can be used to store paths or values specific to your site rebuild script.&lt;/p&gt;

&lt;p&gt;In your local tasks directory, create a file called &lt;code&gt;tasks.php&lt;/code&gt;. This where you implement the logic specific to a given site rebuild so that when you run &lt;code&gt;drush rebuild @mysite.dev&lt;/code&gt;, the &lt;code&gt;tasks.php&lt;/code&gt; file in local tasks is executed.&lt;/p&gt;

&lt;p&gt;This means that you can create rebuild task scripts for your different sites, yet have a single mechanism to trigger a rebuild: &lt;code&gt;drush rebuild @mysite.dev&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Your themer or site builder doesn’t have to know about &lt;code&gt;drush rsync&lt;/code&gt; or &lt;code&gt;drush sql-sync&lt;/code&gt;, or the 20 steps you would take to change module and theme settings, they can just run the rebuild command and have a working local development environment up and running. You can save your rebuild script in the repository so six months from now, you don't have to dig through notes or try to remember the steps you took to set up an environment, you can simply run the command and be ready to go.&lt;/p&gt;

&lt;p&gt;Here is an example script to demonstrate some of what you can do: [gist:2219387]&lt;/p&gt;

&lt;p&gt;One nice thing about this approach is that the &lt;code&gt;tasks.php&lt;/code&gt; file can exist in your site's version control, while the database and paths specific to a given developers environment are defined in the drush alias.&lt;/p&gt;

&lt;p&gt;If you don't like drush scripts, your &lt;code&gt;tasks.php&lt;/code&gt; file can call bash scripts, or anything else for that matter.&lt;/p&gt;

&lt;p&gt;By default, Drush Rebuild will create a backup of your environment by using Drush 5’s archive-dump command, so if your rebuild fails, you can restore your previous environment. You can also pass the &lt;code&gt;--view-script&lt;/code&gt; option to have a look at the rebuild script before you run it, which is good to refresh your memory on the particulars of the local environment and how it might differ from your staging or production site.&lt;/p&gt;

&lt;p&gt;That's all there is to say about Drush Rebuild for now. It's a small utility and its scope is modest, but I think it will help our team save a lot of time. Please try it out, let me know if you find it useful, and if you have additional example scripts or functionality to add to the project, please post them in the &lt;a href="https://drupal.org/project/issues/1504594?categories=All"&gt;issue queue&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal-planet" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal Planet&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/drush" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drush&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drush-rebuild" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drush Rebuild&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/workflow" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Workflow&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/THez-SZdyFI" height="1" width="1"/&gt;</description>
     <pubDate>Wed, 28 Mar 2012 14:04:05 +0000</pubDate>
 <dc:creator>Kosta Harlan</dc:creator>
 <guid isPermaLink="false">322 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/drush-rebuild-utility-rebuilding-drupal-development-environments</feedburner:origLink></item>
  <item>
    <title>Workflow and tools for developing with install profiles and Drush Make</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/W2j15-3iIoo/workflow-and-tools-developing-install-profiles-and-drush-make</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;A few months ago we completed a Drupal 5 to Drupal 7 migration project for a North Carolina museum website. Actually the Drupal 5 site was more of a Frankenstein site; the previous developers had more or less built their own CMS on top of Drupal. Fortunately, the superb &lt;a href="https://drupal.org/project/migrate"&gt;Migrate&lt;/a&gt; module made writing migration code for this project a snap.&lt;/p&gt;

&lt;p&gt;Getting a workflow together, however, was a bit more of a challenge. We had four people working on the project: two developers, a site builder, and a themer.&lt;/p&gt;

&lt;p&gt;Because the project was complex and contained a number of different components, we agreed that development would work best with each developer building aspects of the site on their local machine. That way my work in writing migration code would not interfere with our themer's work, nor would it bother someone working on site building.&lt;/p&gt;

&lt;p&gt;The key ingredients to a local development first workflow are git, &lt;a href="https://drupal.org/project/drush"&gt;drush&lt;/a&gt;, &lt;a href="https://drupal.org/project/drush_make"&gt;drush_make&lt;/a&gt; (now included in Drush 5), &lt;a href="https://drupal.org/node/159730"&gt;installation profiles&lt;/a&gt;, and &lt;a href="https://drupal.org/project/Features"&gt;Features&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this blog post, we'll review some of the workflow and tools we used for development. We'll use a fictitous "MySite" project for our example.&lt;/p&gt;

&lt;h2&gt;Workflow&lt;/h2&gt;

&lt;h3&gt;Install Profile&lt;/h3&gt;

&lt;p&gt;The file mysite.profile contains the default settings for the MySite project. It defines the content types, user roles, permissions, etc
that go into a default Drupal install.&lt;/p&gt;

&lt;p&gt;Unlike Drupal 6, the Install Profile in Drupal 7 is actually a few files: &lt;code&gt;mysite.profile&lt;/code&gt;, &lt;code&gt;mysite.info&lt;/code&gt;, &lt;code&gt;mysite.install&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;Drush Make files&lt;/h3&gt;

&lt;p&gt;There are actually two drush make files: &lt;code&gt;mysite.build&lt;/code&gt; and &lt;code&gt;mysite.make&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mysite.build&lt;/code&gt; is brief:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;core = 7.x
api = 2
projects[drupal][type] = "core"
; Our distribution
projects[mysite][type] = "profile"
projects[mysite][download][type] = "git"
projects[mysite][download][url] = "git@gitserver.com:mysite.git"
projects[mysite][download][branch] = "develop"&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;mysite.make&lt;/code&gt; contains the list of modules, themes, and libraries to download and add to the site.&lt;/p&gt;

&lt;h3&gt;Features&lt;/h3&gt;

&lt;p&gt;Features will be built to separate content from presentation. For
example, if you want to export your work for "Blog functionality", one feature would contain the content type and fields, while a separate feature would contain the Views for displaying it on the site.&lt;/p&gt;

&lt;h3&gt;Git&lt;/h3&gt;

&lt;p&gt;The git repo for MySite is the basic structure for the site. The structure for the repo should not be altered, otherwise drush make won't work properly with it.&lt;/p&gt;

&lt;p&gt;The repo looks like this:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;/mysite (root of git repo)
/mysite/modules/contrib
/mysite/modules/custom
/mysite/themes/
/mysite.build
/mysite.make
/mysite.profile
/mysite.info
/mysite.install
/resources
/README.md&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;&lt;li&gt;As you build your features, drop them into /path/to/repo/modules/custom/[name-of-your-feature]&lt;/li&gt;
&lt;li&gt;Custom themes go in /path/to/repo/themes/[name-of-theme]&lt;/li&gt;
&lt;li&gt;Custom modules go in /path/to/repo/modules/custom/[name-of-module] &lt;/li&gt;
&lt;li&gt;Edits to the install profile go in /path/to/repo/mysite.profile&lt;/li&gt;
&lt;li&gt;Enable modules in /path/to/repo/mysite.info&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The Drupal 5 site is in a separate repo.&lt;/p&gt;

&lt;h3&gt;Example workflow&lt;/h3&gt;

&lt;p&gt;Let's say you want to add Webform functionality to the latest dev build. You enable the Webform module in Drupal and configure the settings to your liking.&lt;/p&gt;

&lt;p&gt;Using Features, you then package up the relevant settings and configuration into your mysite_webform Feature and download it to
/path/to/repo/modules/custom/mysite_webform.&lt;/p&gt;

&lt;p&gt;In the mysite.info file, you would add your Feature to the list of dependencies (this will enable it on site install).&lt;/p&gt;

&lt;p&gt;Using git, you would then add this directory and mysite.info, commit to develop, and push the code up to origin.&lt;/p&gt;

&lt;p&gt;Then other developers can run through the site rebuild command(s) and have your Webform feature enabled and configured locally.&lt;/p&gt;

&lt;h2&gt;Tools to make development easier&lt;/h2&gt;

&lt;p&gt;Our team's comfort with using the command line or &lt;code&gt;drush&lt;/code&gt; varies. For a local development first workflow, using the command line is essential to productive, time-efficient development. Even for those of us more comfortable with the command line and &lt;code&gt;drush&lt;/code&gt; commands, remembering all the commands to rebuild our local environments is a challenge. So, we wrote some scripts to help with the proces.&lt;/p&gt;

&lt;h3&gt;Rebuilding the site&lt;/h3&gt;

&lt;p&gt;The main script is called &lt;a href="https://gist.github.com/1935141#file_rebuild.sh"&gt;&lt;code&gt;rebuild.sh&lt;/code&gt;&lt;/a&gt;. By running &lt;code&gt;rebuild.sh&lt;/code&gt; on your local machine, you can ensure that you will have (1) the latest code from the &lt;code&gt;develop&lt;/code&gt; branch in &lt;code&gt;origin&lt;/code&gt;, (2) your local site's database will be identical to the other developers, (3) the migration script will pull in the latest content from the source database. So, let's break it down:&lt;/p&gt;

&lt;p&gt;The first part is a simple yes/no prompt (borrowed from the Aegir project). This makes it simple for us to ask the user if we should continue at different points throughout the rebuild process:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;prompt_yes_no() {
  while true ; do
    printf "$* [Y/n] "
    read answer
    if [ -z "$answer" ] ; then
      return 0
    fi
    case $answer in
      [Yy]|[Yy][Ee][Ss])
        return 0
        ;;
      [Nn]|[Nn][Oo])
        return 1
        ;;
      *)
        echo "Please answer yes or no"
        ;;
    esac
 done
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The next step in &lt;code&gt;rebuild.sh&lt;/code&gt; is to read the developers configuration from &lt;code&gt;rebuild.config&lt;/code&gt;. This file should sit in the same directory as &lt;code&gt;rebuild.sh&lt;/code&gt; (in our case, we kept both in the &lt;code&gt;/resources&lt;/code&gt; directory at the root of the repository), and &lt;code&gt;rebuild.config&lt;/code&gt; should not be tracked in the repo (a &lt;code&gt;rebuild.config.example&lt;/code&gt; file should be though, as a helpful example to the other developers):&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;# Reading options from rebuild.config
FILENAME=rebuild.config
while read option
do
    export $option
done &amp;lt; $FILENAME
DRUSH="$DRUSH_PATH"
 
# Start our rebuilding
clear
 
cat &amp;lt;&amp;lt;EOF
 
*** IMPORTANT ***
 
The following values were read from rebuild.config in your resources directory.
Please make sure they are correct before proceeding:
 
  D5_DRUPAL_ROOT = $D5_DRUPAL_ROOT
  D7_DRUPAL_ROOT = $D7_DRUPAL_ROOT
  DRUSH_PATH = $DRUSH_PATH
  D7_DATABASE = $D7_DATABASE
  D5_DATABASE = $D5_DATABASE
  D5_GIT_REPO = $D5_GIT_REPO
  D7_GIT_REPO = $D7_GIT_REPO
 
EOF
 
if ! prompt_yes_no "Are you sure you want to proceed?" ; then
    exit 1
fi&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Basically, this is reading some variables that we can use later on the script. If we look at what is in rebuild.conf, we see:&lt;/p&gt;

&lt;p&gt;[gist:1935141:rebuild.conf]&lt;/p&gt;

&lt;p&gt;The script asks that we do indeed want to rebuild our local environment, and continues by removing the old directory, running Drush Make, and re-installing the site using our install profile.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;echo 'Rebuilding MySite...'
echo 'Removing '$D7_DRUPAL_ROOT' directory...'
chmod a+w $D7_DRUPAL_ROOT"/sites/default"
chmod a+w $D7_DRUPAL_ROOT"/sites/default/files"
rm -rf $D7_DRUPAL_ROOT
echo 'Executing drush make'
$DRUSH make --prepare-install --force-complete $D7_GIT_REPO"/mysite.build" $D7_DRUPAL_ROOT -y
cd $D7_DRUPAL_ROOT
echo 'Re-installing site database'
$DRUSH si mysite --site-name="MySite" --db-url="mysql://root:root@localhost/$D7_DATABASE" -y
echo 'Finished rebuilding directory and re-installing site.'&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On a large project (75+ contributed modules), Drush Make and a Site Install could take about 5 minutes. If you use &lt;a href="http://reluctanthacker.rollett.org/node/114"&gt;Squid as a caching server for drush module downloads&lt;/a&gt;, however, the process takes only about one minute. You can also experiment with providing a "file:///" URL in your mysite.build file for the &lt;code&gt;[download][url]&lt;/code&gt; section where you are specifying the location of the &lt;code&gt;make&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Next up, we create some symlinks from the git repo to our site build directory:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;cat &amp;lt;&amp;lt;EOF
 
Would you like to have symlinks set up? The script will create symlinks as
follows:
  ln -s $D7_GIT_REPO/modules/custom $D7_DRUPAL_ROOT/profiles/mysite/modules/custom
  ln -s $D7_GIT_REPO/themes/mysite $D7_DRUPAL_ROOT/profiles/mysite/themes/mysitetheme
 
EOF
 
if ! prompt_yes_no 'Create symlinks?' ; then
    exit 1
fi
 
echo 'Creating symlinks'
cd $D7_DRUPAL_ROOT
rm -rf profiles/mysite/modules/custom
rm -rf profiles/mysite/themes/mysitetheme
ln -s $D7_GIT_REPO"/modules/custom" $D7_DRUPAL_ROOT"/profiles/mysite/modules/custom"
ln -s $D7_GIT_REPO"/themes/mysite" $D7_DRUPAL_ROOT"/profiles/mysite/themes/mysitetheme"
echo 'Done making symlinks.'&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We continue on and migrate content, if desired. Sometimes it's helpful to rebuild the local site without migrating any content, for example, if you want to alter a field, you need to do that before any content has been added to it.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;# Content migration
cat &amp;lt;&amp;lt;EOF
 
The script will run 'drush migrate-import --all', which will run all
content migration patterns. You must have the Drupal 5 site setup locally
for this to work properly.
 
EOF
 
if ! prompt_yes_no "Migrate content and files?" ; then
    exit 1
fi
 
echo 'Migrating database content...'
echo 'Updating Drupal 5 git repo...'
cd $D5_GIT_REPO
git checkout master
git pull
# TODO: Set this so it imports only if git pull brought us new content
echo 'Importing Drupal 5 database...'
mysql -uroot -proot $D5_DATABASE &amp;lt; $D5_GIT_REPO"/database/mysite-production.sql"&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see, we were storing the D5 database in a git repo. Normally I would never put a database in a git repo, but because not all developers had access to the production server running the Drupal 5 site, we decided to store an ordered dump, excluding data from a number of cache tables. We wrote a script for this too; the script takes a snapshot of the D5 database, overwrites the mysite-d5-production.sql file stored in the D5 git repo, commits it to the master branch, and pushes to origin.&lt;/p&gt;

&lt;p&gt;[gist:19035141:db_update.sh]&lt;/p&gt;

&lt;p&gt;Ok, back to the &lt;code&gt;rebuild.sh&lt;/code&gt; script! Next we do a couple of set up tasks for the Drupal site:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;cd $D7_DRUPAL_ROOT
 
echo 'Setting date and timezone settings...'
$DRUSH vset date_first_day 1 -y
$DRUSH vset date_default_timezone 'America/New_York' -y
$DRUSH vset date_api_use_iso8601 0 -y
$DRUSH vset site_default_country 'US' -y
$DRUSH vset configurable_timezones 0 -y
$DRUSH vset user_default_timezone 0 -y
echo 'Done.'
# Run cron to make sure any initialization necessary in Drupal takes place before
# nodes are imported.
echo 'Running cron...'
$DRUSH cron&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We had trouble setting some of these variables in the install profile, so we placed them in this script and had no troubles with this method.&lt;/p&gt;

&lt;p&gt;Then, we run the migrations:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;# Migrate isn't resolving dependencies correctly so we specify the migration order here manually
$DRUSH mi mysiteUser
$DRUSH mi mysiteBlocks
$DRUSH mi mysiteNewsNode
$DRUSH mi mysitePageNode
$DRUSH mi mysiteStaffMemberNode
$DRUSH mi mysiteFinish
 
echo 'Done.'&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then we enable our Webform feature:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;# The Webform feature, which contains Webform nodes, is enabled after 
# all other features so as to not interfere with node IDs that are preserved
# from the Drupal 5 site
echo 'Enabling our Webforms'
$DRUSH en mysite_webforms -y&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Finally we make sure the Drupal 7 site has all the files from Drupal 5:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;# File migration
 
echo 'Copying files...'
mkdir $D7_DRUPAL_ROOT"/sites/default/files/files"
cp -Rp $D5_DRUPAL_ROOT"/files/"* $D7_DRUPAL_ROOT"/sites/default/files/files/"
echo 'Done.'
echo 'Copying images...'
mkdir $D7_DRUPAL_ROOT"/sites/default/files/images"
cp -Rp $D5_DRUPAL_ROOT"/images/"* $D7_DRUPAL_ROOT"/sites/default/files/images/"
echo 'Done.'
echo 'Finished content migration!'
 
echo 'Rebuild completed.'&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;End result, after running &lt;code&gt;rebuild.sh&lt;/code&gt; I have a complete site build that is identical to the other developers, symlinks are set up, content is migrated, and I am ready to start working on features or bug fixes. When I'm done with my work, I can merge into &lt;code&gt;develop&lt;/code&gt; and push my changes up to origin, and now every other developer can have my changes in their local environment.&lt;/p&gt;

&lt;h2&gt;Verifying make files and install profiles&lt;/h2&gt;

&lt;p&gt;One problem that cropped up a few times as we were using this workflow were commits that broke the build. For example, if someone added a module incorrectly to the mysite.make file, and added the module as a dependency in mysite.info, the build would break because Drupal would try to enable a module that actually hadn't been downloaded in the site build. So, we wrote two simple scripts, &lt;a href="https://gist.github.com/1935141#file_verify_install.sh"&gt;&lt;code&gt;verify_install.sh&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://gist.github.com/1935141#file_verify_makefile.sh"&gt;&lt;code&gt;verify_makefile.sh&lt;/code&gt;&lt;/a&gt;. As their filenames suggest, the scripts allow a developer to check a makefile or an install profile before they commit to the repository.&lt;/p&gt;

&lt;h2&gt;Other tools?&lt;/h2&gt;

&lt;p&gt;So, that's the basic workflow and toolset we worked with for a larger migration project using an install profile and drush make. We'd love to hear from you if you used other tools or a different workflow.&lt;/p&gt;

&lt;p&gt;If we did this project again, one thing I'd probably skip is the use of &lt;code&gt;drush make&lt;/code&gt; - better just to track the entire site in a git repo. I would probably also take the time to package up these scripts as a few drush commands that made use of drush aliases, adding a line in the drush alias to specify the git repo.&lt;/p&gt;

&lt;p&gt;Hopefully these scripts will be useful to others who are undertaking projects like this. Feel free to leave a question below!&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal-planet" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal Planet&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/install-profile" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Install Profile&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drush" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drush&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/drush-make" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drush Make&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal-7" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal 7&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/migration" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Migration&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/W2j15-3iIoo" height="1" width="1"/&gt;</description>
     <pubDate>Thu, 01 Mar 2012 16:23:24 +0000</pubDate>
 <dc:creator>Kosta Harlan</dc:creator>
 <guid isPermaLink="false">321 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/workflow-and-tools-developing-install-profiles-and-drush-make</feedburner:origLink></item>
  <item>
    <title>How to relocate modules and themes from a Drupal Install Profile</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/tVgGvg3Y4Es/how-relocate-modules-and-themes-drupal-install-profile</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;At DesignHammer we frequently use Install Profiles for migration projects. An install profile makes it easy for developers to work on &lt;a href="https://drupal.org/project/migrate"&gt;migration code&lt;/a&gt;, site builders to add and configure modules while exporting the settings to &lt;a href="https://drupal.org/project/features"&gt;Features&lt;/a&gt;, and themers to work on the Drupal 7 site theme – all at the same time, without getting in each other's way.&lt;/p&gt;

&lt;p&gt;For example, in working on migration of content, it is sometimes quite useful to tear down the site, rebuild it, and re-run the migration scripts:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;table class="drupal6 geshifilter-drupal6" style="font-family:monospace;"&gt;&lt;tbody&gt;&lt;tr class="li1"&gt;&lt;td style="width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;drush @mysitealias.local site-install my_profile -y
You are about to DROP all tables in your 'mysite' database. Do you want to continue? (y/n): y
Starting Drupal installation. This takes a few seconds ...
Installation complete.  User name: admin  User password: topsecret
drush mi --all&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I don't want that to interfere with other people's work; that's why having a site that can be quickly torn down and rebuilt from an install profile and Features is quite useful.&lt;/p&gt;

&lt;p&gt;Eventually, that usefulness runs its course. The migration scripts are completed, the site builders have added most modules and configured content types, the theme is mostly done. At this point, we need to do some more in depth testing, and edit content or create new content before deployment. So, we stop using the install profile and the site build/rebuild process.&lt;/p&gt;

&lt;p&gt;Depending on the client, it may be fine to leave the modules and themes residing in &lt;code&gt;/profiles/my_profile/&lt;/code&gt;. In other cases, it might be desirable to adopt a more traditional Drupal site structure and place the modules and themes in &lt;code&gt;sites/all/modules&lt;/code&gt; and &lt;code&gt;sites/all/themes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;However, you can't just move the modules and themes to a different directory, because Drupal won't know where they've gone to. You could disable, uninstall, and re-install each and every module and theme but that would be quite tedious. Instead you can do this in a couple minutes with some SQL queries. It's a good idea to run this in your local development environment before trying it out on the development site that you are collaborating with others on.&lt;/p&gt;

&lt;p&gt;The first step is to move the modules and themes. Make sure you double check the paths to match your desired configuration (for example, you may not care about separating modules into custom and contrib directories):&lt;/p&gt;

&lt;p&gt;[gist:1894250:relocate.sh]&lt;/p&gt;

&lt;p&gt;(Note: other developers may have topic branches open that branched off &lt;code&gt;develop&lt;/code&gt; before you relocated everything to &lt;code&gt;sites/all/modules&lt;/code&gt;. If you are tracking the entire codebase in git, these developers will need to checkout their topic branch and run &lt;code&gt;git rebase develop&lt;/code&gt;, assuming that you committed module and theme relocation work to &lt;code&gt;develop&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;Next step is to tell Drupal where to find the modules and themes by executing these SQL queries, again taking care to check that the directories match the &lt;code&gt;mv&lt;/code&gt; operations you just performaed:&lt;/p&gt;

&lt;p&gt;[gist:2855108:relocate.sql]&lt;/p&gt;

&lt;p&gt;Make sure that you update your site-specific drushrc.php, if it exists, to reflect the new location for downloading modules. with drush.&lt;/p&gt;

&lt;p&gt;[gist:1894250:old-drushrc.php]&lt;/p&gt;

&lt;p&gt;Should become:&lt;/p&gt;

&lt;p&gt;[gist:1894250:drushrc.php]&lt;/p&gt;

&lt;p&gt;For good measure, run &lt;code&gt;drush cc all&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now you can visit your site, and it should be working fine. "Admin &amp;gt; Reports &amp;gt; Status" will still show the name of your install profile (which is correct - that is the initial profile used to build the site), but otherwise, you've moved away from the Install Profile and can place modules and themes in &lt;code&gt;sites/all/&lt;/code&gt; without any issues.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal-planet" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal Planet&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/install-profile" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Install Profile&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/drupal" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;Drupal&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/tVgGvg3Y4Es" height="1" width="1"/&gt;</description>
     <pubDate>Fri, 24 Feb 2012 17:36:48 +0000</pubDate>
 <dc:creator>Kosta Harlan</dc:creator>
 <guid isPermaLink="false">320 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/how-relocate-modules-and-themes-drupal-install-profile</feedburner:origLink></item>
  <item><title>Links for 2012-02-17 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/s49Rt4Pc_gw/designhammer</link><pubDate>Sat, 18 Feb 2012 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2012-02-17</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.websitemagazine.com/content/blogs/posts/archive/2012/02/17/here-s-what-s-hot-13-super-startups-to-watch.aspx"&gt;13 Super Startups to Watch - 'Net Features - Website Magazine&lt;/a&gt;&lt;br/&gt;
The Web world moves at a furious pace, and digital workers can miss the next big thing in the blink of an eye. Some emerging services such as Pinterest are fortunate enough to take center stage while other solutions of seemingly equal value to Web pros wallow in relative obscurity.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/s49Rt4Pc_gw" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2012-02-17</feedburner:origLink></item><item>
    <title>New Year's SEO Resolutions</title>
    <link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/VxHGt7g0smo/new-years-seo-resolutions</link>
    <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even" property="content:encoded"&gt;&lt;p&gt;A new year is a great time to break out of old habits and establish new ones. At the January meeting of the DesignHammer hosted &lt;a href="http://www.meetup.com/rtpSEO/"&gt;RTP Search Engine Optimization Meetup&lt;/a&gt;, the group discussed our resolutions for improving our search engine optimization efforts in 2012. Here are some of our top resolutions.&lt;/p&gt;

&lt;h2&gt;Create Content&lt;/h2&gt;

&lt;p&gt;Creating interesting, well-written, and original content (sometimes referred to as &lt;a href="http://www.mattcutts.com/blog/seo-advice-linkbait-and-linkbaiting/"&gt;linkbaiting&lt;/a&gt;) is one of the most widely recommended practices for increasing site traffic. As incoming links are widely believed to be one of the most important contributing factors to a &lt;a href="http://www.seomoz.org/article/search-ranking-factors"&gt;site’s search performance&lt;/a&gt;, any content that is likely to be linked to is valuable.&lt;/p&gt;

&lt;p&gt;Understanding the value of creating quality content is only half of the battle. The real challenge is carving out time in a busy schedule to regularly create new content that others will want to read and share. A modest goal of creating one quality blog entry a month is a good starting point.&lt;/p&gt;

&lt;h2&gt;Share Interesting Content&lt;/h2&gt;

&lt;p&gt;Just pushing your own content via your social media channels may result in your followers seeing everything you share as an advertisement. A better strategy is sharing content that your followers may find interesting, often because you find it interesting. Read about &lt;a href="http://www.nvisolutions.com/blog/seo/social-content-sharing-and-search-rankings/"&gt;creating sharable content&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Content creation is good. Sharing quality content of your own and others is better. Speaking of sharing interesting content, here is an infographic about &lt;a href="http://searchengineland.com/infographic-why-content-for-seo-96834"&gt;sharing interesting content&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Continue SEO Education&lt;/h2&gt;

&lt;p&gt;As search engine algorithms change, SEO practices must adapt. Fortunately the SEO professional is not alone in confronting these changes. Staying up to date with recent SEO developments such as &lt;a href="http://analytics.blogspot.com/2011/10/making-search-more-secure-accessing.html"&gt;Google Analytics's exclusion of logged in users' keyword searches&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some sites we read at DesignHammer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/"&gt;Google Webmaster Central&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/"&gt;Matt Cutts' Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.seomoz.org/blog"&gt;SEOmoz Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hobo-web.co.uk/seo-blog/"&gt;Hobo SEO Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Structure your websites with SEO in mind&lt;/h2&gt;

&lt;p&gt;Sticking to the above resolutions will not deliver their best possible results if your own website’s structure works against you. Most modern websites are powered by content management systems (CMS) such as &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A CMS can make it simple to create new content, but most CMSs are not initially set up to support SEO efforts. For WordPress, take a look at our &lt;a href="/blog/guide-all-one-seo-pack-wordpress"&gt;guide to using the All in One SEO Pack for WordPress&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/category/tags/seo" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;SEO&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="/category/tags/wordpress" typeof="skos:Concept" property="rdfs:label skos:prefLabel"&gt;WordPress&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/VxHGt7g0smo" height="1" width="1"/&gt;</description>
     <pubDate>Mon, 23 Jan 2012 17:48:57 +0000</pubDate>
 <dc:creator>Stephen Pashby</dc:creator>
 <guid isPermaLink="false">317 at http://designhammer.com</guid>
  <feedburner:origLink>http://designhammer.com/blog/new-years-seo-resolutions</feedburner:origLink></item>
  <item><title>Links for 2011-09-20 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/Q0V7h32nBlw/designhammer</link><pubDate>Wed, 21 Sep 2011 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2011-09-20</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://searchengineland.com/seotable"&gt;The Periodic Table Of SEO Ranking Factors&lt;/a&gt;&lt;br/&gt;
A guide, in the form of the periodic table of elements, that summarizes the major factors to focus on for search engine ranking success.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.seomoz.org/article/search-ranking-factors"&gt;2011 Search Engine Ranking Factors&lt;/a&gt;&lt;br/&gt;
SEOmoz has compiled the aggregated opinions of dozens of the world's best and brightest search marketers into this biennial, ranking factors document. This year, for the first time, they are presenting a second form of data - correlation-based analysis - alongside the opinions of the 132-person panel.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visual.ly/"&gt;InfoGraphics by Visual.ly&lt;/a&gt;&lt;br/&gt;
Infographics are popping up everywhere on the web, and now, if you have a data set, you can make your own infographic. San Francisco-based Visual.ly, which offers a free platform for creating infographics from data, has launched its beta version and is open to the public.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.davidmihm.com/local-search-ranking-factors.shtml"&gt;Local Search Ranking Factors&lt;/a&gt;&lt;br/&gt;
A guide to optimizing for Google Local Search results.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://seo2.0.onreact.com/10-commandments-of-business-blogging"&gt;10 Commandments of Business Blogging&lt;/a&gt;&lt;br/&gt;
Useful guidelines for operating a blog for your business, or your employer.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/Q0V7h32nBlw" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2011-09-20</feedburner:origLink></item><item><title>Links for 2011-09-19 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/DsIhbCGZVqM/designhammer</link><pubDate>Tue, 20 Sep 2011 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2011-09-19</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://searchengineland.com/seotable"&gt;The Periodic Table Of SEO Ranking Factors&lt;/a&gt;&lt;br/&gt;
A guide, in the form of the periodic table of elements, that summarizes the major factors to focus on for search engine ranking success.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visual.ly/"&gt;InfoGraphics by Visual.ly&lt;/a&gt;&lt;br/&gt;
Infographics are popping up everywhere on the web, and now, if you have a data set, you can make your own infographic. San Francisco-based Visual.ly, which offers a free platform for creating infographics from data, has launched its beta version and is open to the public.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.seomoz.org/article/search-ranking-factors"&gt;2011 Search Engine Ranking Factors&lt;/a&gt;&lt;br/&gt;
SEOmoz has compiled the aggregated opinions of dozens of the world's best and brightest search marketers into this biennial, ranking factors document. This year, for the first time, they are presenting a second form of data - correlation-based analysis - alongside the opinions of the 132-person panel.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.davidmihm.com/local-search-ranking-factors.shtml"&gt;Local Search Ranking Factors&lt;/a&gt;&lt;br/&gt;
A guide to optimizing for Google Local Search results.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://seo2.0.onreact.com/10-commandments-of-business-blogging"&gt;10 Commandments of Business Blogging&lt;/a&gt;&lt;br/&gt;
Useful guidelines for operating a blog for your business, or your employer.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/DsIhbCGZVqM" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2011-09-19</feedburner:origLink></item><item><title>Links for 2011-07-14 [del.icio.us]</title><link>http://feedproxy.google.com/~r/DesignHammerBlog/~3/9oU3X6vI5Bg/designhammer</link><pubDate>Fri, 15 Jul 2011 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/designhammer#2011-07-14</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://visual.ly/"&gt;InfoGraphics by Visual.ly&lt;/a&gt;&lt;br/&gt;
Infographics are popping up everywhere on the web, and now, if you have a data set, you can make your own infographic. San Francisco-based Visual.ly, which offers a free platform for creating infographics from data, has launched its beta version and is open to the public.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignHammerBlog/~4/9oU3X6vI5Bg" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/designhammer#2011-07-14</feedburner:origLink></item></channel>
</rss>
