<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

    <title type="text"><![CDATA[EE Blog]]></title>
    <subtitle type="text"><![CDATA[EE Blog - ExpressionEngine Blog]]></subtitle>
    <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://expressionengine.com/site/atom" />
    <updated>2012-05-18T14:33:10Z</updated>
    <rights>Copyright (c) 2010, Kyle Cotter</rights>
    <generator uri="http://expressionengine.com/" version="2.2.2">ExpressionEngine</generator>
    <id>tag:expressionengine.com,2010:10:25</id>


    <entry>
      <title><![CDATA[Friday Round Up Post. May 18 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/friday_round_up_post_may_18_edition" />
      <id>tag:expressionengine.com,2012:blog/12.17930</id>
      <published>2012-05-18T17:49:32Z</published>
      <updated>2012-05-18T12:53:34Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>Welcome to another #FRUP. Be sure to add your news by means of the related <a href="http://expressionengine.com/forums/viewthread/217490">forum thread</a>, or <a href="http://twitter.com/#!/search/%23FRUP">#FRUP</a> on Twitter.</p>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://rog.ee/">Michael Rog</a> released <a href="http://rog.ee/email_from_template">Email-from-Template 1.4.1</a>, now with global variables, HTML entity decoding, and template logging.</p>
</li>
<li><p><a href="http://rog.ee/">Michael Rog</a> released <a href="http://devot-ee.com/add-ons/category-sorted-entries">Category Sorted Entries 2.3.0</a> <strong>($)</strong>, which fixes a bug that prevented showing entries from multiple channels.</p>
</li>
<li><p><a href="http://www.madebyhippo.com/">Made By Hippo</a> released <a href="http://devot-ee.com/add-ons/libraree">LibrarEE 1.0.4</a> <strong>($)</strong>, featuring <a href="https://madebyhippo.uservoice.com/knowledgebase/articles/76246-libraree-version-1-0-4">config overrides and bug fixes</a>.</p>
</li>
<li><p><a href="http://supergeekery.com/">John Morton</a> updated <a href="http://devot-ee.com/add-ons/pic-puller-for-instagram">Pic Puller for Instagram</a> <a href="http://picpuller.com/overview/msm">to support MSM</a>.</p>
</li>
<li><p><a href="http://pixelandtonic.com/">Pixel and Tonic</a> released <a href="http://pixelandtonic.com/playa/releasenotes">Playa 4.3</a> <strong>($)</strong>, wich introduces co-parents. With it, you can do neat things, like show a list of similar entries, without a direct relationship. <a href="http://pixelandtonic.com/blog/playa-coparents">Read more</a> about this new feature.</p>
</li>
<li><p><a href="http://iain.co.nz/">Iain Urquhart</a> released <a href="http://devot-ee.com/add-ons/taxonomy">Taxonomy 2.3.3</a> <strong>($)</strong>, which offers a number of <a href="http://iain.co.nz/software/docs/taxonomy-changelog">new features, tags and parameters</a>.</p>
</li>
<li><p><a href="http://dmlogic.com/">Darren Miller</a> released a Markdown fieldtype, <a href="https://github.com/dmlogic/dm_flexidown">DM Flexidown</a>.</p>
</li>
<li><p><a href="http://metasushi.com/">Isaac Raway</a> released a new <a href="http://devot-ee.com/add-ons/proform-10-license-pack">ten license pack for ProForm</a> <strong>($)</strong> with an 11% discount.</p>
</li>
<li><p><a href="http://www.bluestatedigital.com/">Blue State Digital</a> released <a href="https://github.com/bluestatedigital/BSD-PublishEEr">BSD PublishEEr</a>, an accessory that adds a text input to the top of the publish menu that filters the channel list based on the input. It&rsquo;s particularly useful for sites with a very long list of channels.</p>
</li>
<li><p><a href="http://www.vayadesign.net/">Vaya Design</a> released <a href="http://www.vayadesign.net/software/missing-link/release-notes">Missing Link 1.4</a> <strong>($)</strong> which features front end snippet, global variable and Low Variable editing, among other improvements.</p>
</li>
<li><p><a href="http://amphibian.info/">Derek Hogue</a> upgraded his <a href="http://devot-ee.com/add-ons/cp-analytics">CP Analytics</a> accessory this week. Due to changes in Google’s Analytics API, previous versions of the accessory will likely stop collecting data sometime in June, so this upgrade is required if you want to keep the stats flowing into your control panels. CP Analytics has been completely rewritten, and is now a commercial add-on with the option for a <a href="http://devot-ee.com/add-ons/cp-analytics-10-site-license">10-site license</a>.</p>
</li>
<li><p><a href="http://nicolasbottari.com/">Nicolas Bottari</a> updated <a href="http://devot-ee.com/add-ons/zenbu">Zenbu</a> <strong>($)</strong> to 1.5.5, which includes bug fixes and a new column for autosaves.</p>
</li>
<li><p><a href="http://nicolasbottari.com/">Nicola Bottari</a> released <a href="https://github.com/nicolasbottari/zenbu_mx_cloner.zenbu_addon.ee2_addon">Zenbu MX Cloner</a> which adds <a href="http://devot-ee.com/add-ons/mx-cloner">MX Cloner</a> support to Zenbu.</p>
</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><p>James Smith launched a <a href="http://www.jamessmith.co.uk/">new personal site</a> along with his <a href="http://www.jamessmith.co.uk/articles/birth-of-a-design">thoughts on how the process went</a>.</p>
</li>
<li><p><a href="http://420creative.com/">420 Creative</a> launched <a href="http://willcopdx.com/">WILLCO</a>.</p>
</li>
<li><p><a href="http://www.naboovalley.com/">Johan Strömqvist</a> along with <a href="http://www.thedistilleryco.com/">The Distillery</a> released the official website for <a href="http://www.oliverstone.com/">director Oliver Stone</a>.</p>
</li>
<li><p><a href="http://jmx2.com/">JMX2</a> and <a href="http://trufcreative.com/">TRÜF Creative</a> launched <a href="http://rocketfuel.com/">Rocket Fuel</a>.</p>
</li>
<li><p><a href="http://www.antistaticdesign.com/">Antistatic Design</a> launched <a href="http://corporatelivingsolutions.com/">Corporate Living Solutions</a>.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><p>The EE Podcast is out along with their listener survey. Take the time and fill it out! We have <a href="http://expressionengine.com/blog/entry/ee_podcast_annual_survey">more information on our blog</a>.</p>
</li>
<li><p>Vector Media Group is <a href="http://www.vectormediagroup.com/about/careers/web-developer/">hiring a full time web developer</a>!</p>
</li>
</ul>

<!--- Jeremy Gimbel is still alive. -->

<h4>From EllisLab</h4>

<ul>
<li><p>Kevin Cupp talks on &ldquo;<a href="http://expressionengine.com/blog/entry/making_sites_fly_with_varnish">Making Sites Fly with Varnish</a>.&rdquo;. This is a great read for anyone looking to improve site performance.</p>
</li>
<li><p>Robin Sowell put together a video and blog article highlighting <a href="http://expressionengine.com/blog/entry/the_cookie_consent_module_eu_cookie_legislation">everyone&rsquo;s favorite cookie law and how this applies to ExpressionEngine</a>.</p>
</li>
</ul>

<p>Thanks for a great week!</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[EE Podcast Annual Survey]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/ee_podcast_annual_survey" />
      <id>tag:expressionengine.com,2012:blog/12.17925</id>
      <published>2012-05-17T19:40:52Z</published>
      <updated>2012-05-17T14:47:54Z</updated>
      <author>
            <name>Marcus Neto</name>
            <uri>http://marcusneto.com</uri>      </author>

      <category term="News"
        scheme="http://expressionengine.com/blog/entry/category/news"
        label="News" />
      <content type="html"><![CDATA[
        <p><a href="http://twitter.com/#!/lealea">Lea Alcantara</a> &amp; <a href="http://twitter.com/#!/emilylewis">Emily Lewis</a> have published their <a href="http://eepodcast.wufoo.com/forms/2012-listener-survey/">Annual ExpressionEngine Listener Survey</a>. Make sure to take 10 minutes and help them out by filling in the short survey. Plus you will be entered to win a <a href="http://ee-podcast.com/images/EEPodcast-Tshirt.png">very rare EEPodcast T-Shirt</a>.</p>

<p>Also, make sure to listen to <a href="http://ee-podcast.com/episodes/expressionengine-v2.5-with-ellislab">this week&#8217;s Podcast</a>. James and Wes talk about the recent EE Version 2.5 update, the EU Cookie Module, the modularity of EE and more.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[The Cookie Consent Module &amp; EU Cookie Legislation]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/the_cookie_consent_module_eu_cookie_legislation" />
      <id>tag:expressionengine.com,2012:blog/12.17924</id>
      <published>2012-05-17T19:11:10Z</published>
      <updated>2012-05-17T14:37:12Z</updated>
      <author>
            <name>Robin Sowell</name>
            <uri>http://media-cow.com/</uri>      </author>

      <category term="Education & Training"
        scheme="http://expressionengine.com/blog/entry/category/education_training"
        label="Education & Training" />
      <content type="html"><![CDATA[
        <p>In November of 2009, the European Parliament issued <a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2009:337:0011:01:EN:HTML">EU Directive 2009/136/EC</a>, an amendment to several prior directives concerning data protection and electronic privacy rights.&nbsp; Of primary concern to this article were changes regarding the storing and accessing of personal data on a user&#8217;s device via cookies <a href="#footnote-1" name="footnote-1-ref">[1]</a>.&nbsp; The amendment changed such storage to require opt-in rather than opt-out permission from end users.&nbsp; EU member states were supposed to implement laws in accordance with the directive by May 2011.</p>

<h3>Who Is Affected</h3>
<p>So, who has to worry about the directive?&nbsp; The EU member countries (and Norway).&nbsp; If you own, operate or design websites for EU based entities, you need to worry about the specific Data Privacy Laws in that country, because all EU countries were supposed to enact legislation consistent with the directive.&nbsp; Not all of them have, and the existing laws vary from country to country.&nbsp; But if you are operating in the EU, it&#8217;s likely that the privacy directive will apply in some way, shape or form.</p>

<h3>The Legal Basics</h3>
<p>While the specific laws may vary, the EU E-Privacy Directive does provide us with a generic template for building websites that comply with EU privacy concerns.</p>

<h4>Users must be informed</h4>
<p>Visitors to your website must be informed of your privacy policy, including the use of any cookies or similar technologies (i.e., Locally Stored Objects, etc.).&nbsp; A generic statement that cookies are used and necessary to site functioning isn&#8217;t really enough.&nbsp; You should specify each cookie and what it does in terms a layman can understand.</p>

<h4>Users must grant prior consent</h4>
<p><b>Before</b> setting cookies, you must receive the informed consent of the user.&nbsp; Given the current state of web browsers, browser settings cannot be used to infer informed consent.&nbsp; </p>

<p>The directive does make an exception to this requirement, but only when it is <b>strictly necessary</b> and done to provide a service that the user has <b>explicitly</b> requested.&nbsp; The typical example would be a shopping cart where the user has taken direct action to add items to the cart.</p>

<h4>Users should be able to revoke consent</h4>
<p>At any time, a user should be able to revoke their consent and remove any existing cookies.&nbsp; While not explicitly stated in the E-Privacy directive, providing users with an easily accessible means of removing current site cookies and blocking future ones is a wise precaution.</p>

<h3>How to address the EU Privacy laws</h3>
<p>1. Know the law in the relevant country.<br />
Laws differ among the EU member countries, with some having enacted no law derived from the directive at all.&nbsp; There is also variation in how the laws address prior/implied consent.&nbsp; Understanding what the law actually requires is key to compliance.&nbsp; Unfortunately, reading the relevant statutes doesn&#8217;t always provide a lot of clarification and you will need to stay on top of the latest news regarding how the law is actually being interpreted and applied.&nbsp; For UK users, the <a href="http://www.cookielaw.org/">The Cookie Collective</a> is a good resource for tracking the latest legal and technical news regarding cookie regulation.&nbsp; Just keep in mind, the details may vary on a per country basis. </p>

<p>2. Know what cookies your site sets and what they do.<br />
You need to know what data you are storing on visitors&#8217; devices and why you need to store it.&nbsp; If you&#8217;re reading this, you&#8217;re probably using ExpressionEngine on your site, so be sure to check out the <a href="http://expressionengine.com/user_guide/modules/cookie_consent/index.htmls">Cookie Consent Module&#8217;s documentation</a>, which details the cookies set by the CMS and its native modules.&nbsp; It&#8217;s also likely you have cookies being set by other applications.&nbsp; Ad services, analytic tools, store/ordering code, video and social media applications may all be setting cookies on your site.&nbsp; Know the tools you are using and check with each to see what cookies they set.<br />
 <br />
Once you think you know what cookies are being set, doing a manual audit of the site is a good idea.&nbsp; There are a number of browser based tools you can use to help you do a &#8216;cookie audit&#8217; of your site in action <a href="#footnote-2" name="footnote-2-ref">[2]</a>.</p>

<p>3. Provide a Privacy Policy<br />
If you don&#8217;t already have one, put a privacy policy on the website.&nbsp; If you do have one, make sure it is up-to-date.&nbsp; The policy should be easily accessible and it should detail all data that may be stored on a user&#8217;s device, the purpose of the data, and how long it persists.&nbsp; </p>

<p>4. Decide on a plan of action<br />
The reports I&#8217;ve seen on users opting-in to cookies when asked on a website suggest around 5-10% will grant consent.&nbsp; You will need to plan accordingly and make an informed decision regarding the use of cookies on your site.&nbsp; If you are designing the site for a client, you need to ensure they understand the law and what they may need to sacrifice in order to be fully compliant.<br /></p><h3>The Cookie Consent Module and EU Cookie Compliance</h3>

<p>ExpressionEngine sets a number of cookies on each page load for all site visitors.&nbsp; In order to prevent these cookies from being set without end user consent, a Cookie Consent Module is available for <a href="http://expressionengine.com/downloads/details/cookie_consent_module">download</a> in the <a href="http://expressionengine.com/downloads">Add-on Library</a>.</p>

<p>Installing the module instantly prevents any cookies being set using the internal cookie setting method unless consent has been given.&nbsp; Consent is indicated by the presence of an &#8216;allow_cookies&#8217; cookie.&nbsp; Because cookies are required for much member functionality both fronted and backend, login and registration are disabled for users who do not have the consent cookie set.&nbsp; The module also provides several means for deriving consent (and thus setting the consent cookie), a mechanism for revoking consent and clearing domain cookies, and conditionals allowing you to vary the content included based on whether consent has been provided.</p>

<p>Watch the new &#8216;How To&#8217; video &#8220;The ExpressionEngine Cookie Consent Module &amp; EU Cookie Legislation&#8221; for a guide to using the module.</p>

<p>&nbsp;</p><iframe src="http://player.vimeo.com/video/41940828" width="487" height="274" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p>&nbsp;  &nbsp;  <br />
And remember, we have a variety of “How-To” videos covering other aspects of ExpressionEngine on our <a href="https://vimeo.com/tag:ellislabhowto">Vimeo page</a>.</p>

<h3>End Notes</h3>

<p><a name="footnote-1"></a>[1] Third parties may wish to store information on the equipment of a user, or gain access to information already stored, for a number of purposes, ranging from the legitimate (such as certain types of cookies) to those involving unwarranted intrusion into the private sphere (such as spyware or viruses). It is therefore of paramount importance that users be provided with clear and comprehensive information when engaging in any activity which could result in such storage or gaining of access. The methods of providing information and offering the right to refuse should be as user-friendly as possible. Exceptions to the obligation to provide information and offer the right to refuse should be limited to those situations where the technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user. Where it is technically possible and effective, in accordance with the relevant provisions of Directive 95/46/EC, the user’s consent to processing may be expressed by using the appropriate settings of a browser or other application. The enforcement of these requirements should be made more effective by way of enhanced powers granted to the relevant national authorities.<br />
(<a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2009:337:0011:01:EN:HTML">EU Directive 2009/136/EC</a>)<br />
<a href="#footnote-1-ref">[Return]</a></p>

<p><a name="footnote-2"></a>[2] Recommended browser based tools for identifying cookies set on your site:<br />
- Firefox Web Developer (https://addons.mozilla.org/en-US/firefox/addon/web-developer/)<br />
- Firefox Firecookie  (https://addons.mozilla.org/en-US/firefox/addon/firecookie/), extension for Firebug (https://addons.mozilla.org/en-US/firefox/addon/firebug/)<br />
<a href="#footnote-2-ref">[Return]</a></p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[Making Sites Fly with Varnish]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/making_sites_fly_with_varnish" />
      <id>tag:expressionengine.com,2012:blog/12.17917</id>
      <published>2012-05-16T20:10:03Z</published>
      <updated>2012-05-16T16:29:05Z</updated>
      <author>
            <name>Kevin Cupp</name>
            <uri>http://www.kevincupp.com</uri>      </author>

      <content type="html"><![CDATA[
        <p>There comes a time in an ExpressionEngine site&#8217;s life when it needs to scale. The demand for it&#8217;s dynamically-generated pages becomes too much; you can throw more servers at the problem or tweak the ones you&#8217;ve got, but that has its own scaling issues.</p>

<p>Or, there&#8217;s <a href="http://varnish-cache.org/">Varnish Cache</a>.</p>

<p>The idea of caching is familiar: why waste resources regenerating the same content from scratch on each page view? But Varnish takes it a bit further by stepping in before the request even makes it to ExpressionEngine or Apache (or your favorite HTTP server). Even better, it can intercept a request before it hits the disk!</p>

<p>To illustrate this impact, let&#8217;s send 1000 requests with 100 concurrent to EE&#8217;s default Agile Records theme, hosted on a quad-core Mac with 8GB of RAM, accessed via a local network over 802.11n:</p>

<p align="center">
<b>No Caching</b><br>13.67 hits/sec<br>
<img src="http://expressionengine.com/files/blog/varnish-no-cache.png" />
</p>

<p align="center">
<b>EE&rsquo;s Template Caching</b><br>36.01 hits/sec<br>
<img src="http://expressionengine.com/files/blog/varnish-template-caching.png" />
</p>

<p align="center">
<b>Varnish</b><br>276.55 hits/sec<br>
<img src="http://expressionengine.com/files/blog/varnish-caching.png" />
</p>

<p>With little or no caching, the CPU just cannot keep up. With Varnish, however, the only bottleneck becomes the network.</p>

<p>On that bombshell, if you&#8217;re wondering where to sign up, let me walk you though setting up Varnish from scratch and then configuring both Varnish and EE to set up the ideal caching for your site.</p>

<h2>Wait, what&#8217;s going on, here?</h2>

<p>Varnish is a proxy that sits between your HTTP server and the world. For example, when a request comes to your server for &#8220;example.com/index.php&#8221;, it first goes through Varnish who then checks to see if it has cached output for the requested URL. If it has cached the output of that specific request before, and it has not expired yet, Varnish will serve up the all ready, fully-generated output for that request from its cache stored in the RAM.</p>

<p>With that conceptual illustration, you can see the request doesn&#8217;t even make it to Apache, PHP or MySQL, which is great for our server&#8217;s health, no matter how optimized those processes may be. Since Varnish, it&#8217;s configuration, and cache can all live in the server&#8217;s RAM, this allows for lightning-fast responses and high hitrates.</p>

<h2>Who is Varnish best for?</h2>

<p>Sites who have minimal user interaction, therefore mostly static (mainly driven by channels, pages, etc.), are best for Varnish. Since the caching proxy&#8217;s job is to serve up the same pre-generated content to everyone, it won&#8217;t be able to show user-specific content (login-driven sites) and be as effective since that specific content will need to be regenerated on each page view. But that&#8217;s not to say it&#8217;s not possible or that it won&#8217;t help in those situations. Later, we&#8217;ll get into ways of serving dynamic content while still using Varnish to cache the static bits.</p>

<h2>Installing Varnish</h2>

<p>Now, it&#8217;s time to play. Varnish is one of those daemons that runs in the background on your server, much like Apache or MySQL. Your favorite flavor of Linux should provide a Varnish package which you can install with a one-liner, or you can <a href="https://www.varnish-cache.org/docs/3.0/installation/install.html#configuring-and-compiling">compile from source</a>. A <a href="https://github.com/mxcl/homebrew/blob/master/Library/Formula/varnish.rb">Homebrew package</a> is also available for OSX.</p>

<p>Like Apache, Varnish listens on a port. Since we want Varnish to listen to all HTTP requests coming to our web server, it needs to listen on port 80. This means Apache has to listen on another port; we&#8217;ll choose 8080. Or if you&#8217;re not ready to put Varnish in production, we can choose to have Varnish listen on 8080 and keep Apache on port 80 while we mess around.</p>

<p>You can tell Varnish which port to listen on when <a href="https://www.varnish-cache.org/docs/3.0/tutorial/starting_varnish.html">starting the daemon</a>, as well as specify storage for the cache. These flags may also be set in your DAEMONOPTS configuration, depending on your OS-specific installation.</p>

<h2>Configuring Varnish: The VCL</h2>

<p>We need to tell Varnish when to cache, when not to cache, and how long to cache for. To do that, we write in the <a href="https://www.varnish-cache.org/docs/3.0/reference/vcl.html">Varnish Configuration Language (VCL)</a>. Fun, geeky fact: Varnish translates this VCL code to C and compiles it into a small program kept in memory, for even more uber-fast request processing.</p>

<p>When you installed Varnish, a default VCL file was likely supplied at <code>/etc/varnish/default.vcl</code> if you&#8217;re on Linux. I recommend creating your own file instead of editing the default, because upgrades tend to overwrite that file, don&#8217;t learn the hard way.</p>

<p>Go ahead and paste this in your new VCL file:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">backend&nbsp;</span><span style="color: #007700">default&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;IP&nbsp;address&nbsp;of&nbsp;your&nbsp;backend&nbsp;(Apache,&nbsp;nginx,&nbsp;etc.)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'8080'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Port&nbsp;your&nbsp;backend&nbsp;is&nbsp;listening&nbsp;on<br /></span><span style="color: #0000BB">&#125;<br /><br />sub&nbsp;vcl_recv&nbsp;&#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Set&nbsp;the&nbsp;URI&nbsp;of&nbsp;your&nbsp;system&nbsp;directory<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'^/system/'&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'ACT='&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">request&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'POST'</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">pass</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">unset&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">Cookie</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(</span><span style="color: #0000BB">lookup</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;<br /><br />sub&nbsp;vcl_fetch&nbsp;&#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Our&nbsp;cache&nbsp;TTL<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">ttl&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1m</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(</span><span style="color: #0000BB">deliver</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p>That is the bare minimum we need to get EE caching, but let&#8217;s first understand what Varnish is being told to do. Notice the backend declaration at the top:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">backend&nbsp;</span><span style="color: #007700">default&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;IP&nbsp;address&nbsp;of&nbsp;your&nbsp;backend&nbsp;(Apache,&nbsp;nginx,&nbsp;etc.)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'8080'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Port&nbsp;your&nbsp;backend&nbsp;is&nbsp;listening&nbsp;on<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p>Your backend is the source for which Varnish will pass requests to. If Varnish does not have a request cached, it forwards it to the backend to be generated. You can do some neat things with backend configuration, such as load balancing and health-checking, which we&#8217;ll touch on later. Since Apache is running on the same machine as our Varnish service, the host is a localhost IP address, and the port is 8080 since that&#8217;s what we&#8217;ve set Apache to listen on.</p>

<p>Next, notice the <code>vcl_recv</code> subroutine. This is called at the beginning of each request, before the backend is called. We need to make sure our control panel isn&#8217;t cached, otherwise we couldn&#8217;t interact with it and change content. To do this, we check <code>req.url</code> to see if it starts with <code>/system/</code>, our default system folder name. If that&#8217;s true, we return <code>pass</code> which tells Varnish to pull directly from the backend and not its cache. We also are choosing not to cache ACT or POST requests, since those likely need to hit the backend:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'^/system/'&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'ACT='&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">request&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'POST'</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">pass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p>This is also a good place to specify sites you don&#8217;t want served out of Varnish at all. If your server runs multiple sites, but only need Varnish for some of them, exclude the site by checking for <code>req.http.host ~ 'example.com'</code>.</p>

<p>Next, we need to make sure user-specific content isn&#8217;t cached, so we unset cookies:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF8000">#&nbsp;Try&nbsp;a&nbsp;lowercase&nbsp;'cookie'&nbsp;if&nbsp;this&nbsp;gives&nbsp;you&nbsp;config&nbsp;errors<br /></span><span style="color: #007700">unset&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">Cookie</span><span style="color: #007700">;&nbsp;</span>
</span>
</code></div>

<p>For example, if you&#8217;re logged into EE, and have a message on the front end of your site that says, &#8220;Hello, Admin!&#8221;, that will be cached in Varnish and then appear for all users who come to the site. So we anonymize the visit by unsetting those cookies when retrieving from the backend.</p>

<p>Finally, we&#8217;ll look at the <code>vcl_fetch</code> subroutine, which is called <em>after</em> a request has been retrieved from the backend. Here, we&#8217;ll just use this function to set the time-to-live (TTL) of our cache:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">sub&nbsp;vcl_fetch&nbsp;&#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Our&nbsp;cache&nbsp;TTL<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">ttl&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1m</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(</span><span style="color: #0000BB">deliver</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p><code>1m</code> means one minute. This means that any single page won&#8217;t have to be regenerated more than once per minute, which should greatly ease the load on the server while making sure the content on your site is no longer than a minute old.</p>

<p>Now we&#8217;re ready to start Varnish. Once you find out where your varnish daemon is, start it like so:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">varnishd&nbsp;</span><span style="color: #007700">-</span><span style="color: #0000BB">f&nbsp;</span><span style="color: #007700">/</span><span style="color: #0000BB">etc</span><span style="color: #007700">/</span><span style="color: #0000BB">varnish</span><span style="color: #007700">/</span><span style="color: #0000BB">main</span><span style="color: #007700">.</span><span style="color: #0000BB">vcl&nbsp;</span><span style="color: #007700">-</span><span style="color: #0000BB">s&nbsp;malloc</span><span style="color: #007700">,</span><span style="color: #0000BB">200M&nbsp;</span>
</span>
</code></div>

<p><code>-f</code> specifies the path to your VCL file, and <code>-s</code> sets the cache storage type. I choose to store the cache in the RAM for extra speed by specifying <code>malloc</code>, but you can also choose to store the cache on the disk.</p>

<p>If all goes well, you should be able to go to your existing site like usual. To make sure caching is working, refresh a few times, then check the request headers in your browser and confirm your site&#8217;s Age is incrementing:</p>

<figure>
<img src="http://expressionengine.com/files/blog/varnish-headers.png" alt="" /></figure>



<p>The Age shows how old the object is you are viewing, and if you keep refreshing, you&#8217;ll see the Age go back down to zero once the document becomes older than a minute. That means caching is working correctly, and you should notice a nice speed boost as well!</p>

<p>Now that we&#8217;ve got our site caching, let&#8217;s learn how to tune Varnish to work even better with ExpressionEngine.</p>

<h2>Manual Purging</h2>

<p>On some of my sites, I like to go the extreme route and set a TTL of <code>24h</code> to always give the site that extra speed boost provided by Varnish. The problem with that is it may take an entire day for new changes to show up on the site, and you can imagine what clients think of that.</p>

<p>To fix this, we need to <em>purge</em> the cache when content is updated. I wrote an add-on called <a href="https://github.com/kevincupp/purge.ee2_addon">Purge</a> to do just this task. It works by taking advantage of EE&#8217;s <code>entry_submission_end</code> and <code>delete_entries_end</code> hooks to know when content is updated, then it sends a special header to Varnish which we then check in the VCL, and then purge the cache if the header exists, like so:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">request&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'EE_PURGE'</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;ban</span><span style="color: #007700">(</span><span style="color: #DD0000">'req.http.host&nbsp;~&nbsp;example.com&nbsp;&amp;&amp;;&nbsp;req.url&nbsp;~&nbsp;^/.*$'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">error&nbsp;200&nbsp;</span><span style="color: #DD0000">'Purged'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>

<p>The Purge add-on could use some improvement, such as purging on comment submission (if you&#8217;re not pulling those in dynamically, as we&#8217;ll discuss below) and better integration with the Multiple Site Manager, so pull requests are welcome.</p>

<h2>Showing Dynamic/User-Specific Content</h2>

<p>Earlier I mentioned a block on our site that greets the user if they&#8217;re logged in, but we intentionally broke it to make sure the wrong name wouldn&#8217;t appear for other users.</p>

<figure>
<img src="http://expressionengine.com/files/blog/varnish-welcome-box.png" alt="" /></figure>



<p>We want to get this working again to greet the user and hide the &#8220;Log in&#8221; and &#8220;Register&#8221; links. To do that, we take advantage of Varnish&#8217;s <a href="https://www.varnish-cache.org/docs/trunk/tutorial/esi.html">Edge Side Includes</a> feature. In a nutshell, ESI allows you to serve bits of content from from the backend without having to serve the whole document from the backend. That&#8217;s what we&#8217;ll do for our greeting box.</p>

<p>First, we need to make the greeting box its own template so that Varnish has something to request without loading the rest of the page. Now we&#8217;ll embed the template on our page, but we won&#8217;t use EE&#8217;s <code>embed</code> tag, we&#8217;ll use Varnish&#8217;s ESI tag:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">&lt;</span><span style="color: #0000BB">esi</span><span style="color: #007700">:include&nbsp;</span><span style="color: #0000BB">src</span><span style="color: #007700">=</span><span style="color: #DD0000">'/index.php/global_embeds/member_box'</span><span style="color: #007700">/&gt;&nbsp;</span>
</span>
</code></div>

<p>We&#8217;re not quite finished yet. We need to tell Varnish to process ESI tags, and NOT to cache that template request. We do this by adding <code>req.url ~ 'member_box'</code> to the check in <code>vcl_recv</code>, and by adding <code>set beresp.do_esi = true;</code> to <code>vcl_fetch</code>.</p>

<p>Now we&#8217;ll restart Varnish, and go to our homepage. If we&#8217;re logged into EE, we should see this on the homepage:</p>

<figure>
<img src="http://expressionengine.com/files/blog/varnish-welcome-box-logged-in.png" alt="" /></figure>



<p>Great! But a problem with this is it <strong>really</strong> lowered our hitrate. We still have the benefits of caching the rest of the page, but hitting the backend on each request creates a bottleneck. Since we don&#8217;t need to have our greeting box hit the backend for anonymous users since it always appears the same for guests, let&#8217;s continue to cache everything for anonymous users, and only have our greeting box hit the backend for logged-in users.</p>

<p>To do that, modify your check for <code>req.url ~ 'member_box'</code> to read as <code>(req.url ~ 'member_box' &&; req.http.Cookie ~ 'exp_sessionid')</code>. Varnish lets us check for individual cookies so we can decide how to best handle the request. With this change, requests for our <code>member_box</code> template will only hit the backend if a <code>sessionid</code> cookie is set. You can also alter the if-statement to allow ALL requests to hit the backend if that cookie is set, that way if you&#8217;re logged into your site to make changes, you can see the changes live without having to purge the cache or wait for it to expire.</p>

<p>There&#8217;s certainly more you can do to handle logged-in users, and Varnish has <a href="https://www.varnish-cache.org/trac/wiki/VCLExampleCachingLoggedInUsers">more documentation</a> about that.</p>

<h2>Get IP Logging Working Again</h2>

<p>Since running Varnish, you may notice in your server and EE logs that everyone&#8217;s IP address appears as 127.0.0.1 or the IP address of your Varnish server. That&#8217;s because, technically, Varnish is the one making the request to the backend. Luckily we can tell Varnish to forward along the user&#8217;s actual IP address to us.</p>

<p>In your <code>vcl_recv</code> subroutine, add these lines:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">remove&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">X</span><span style="color: #007700">-</span><span style="color: #0000BB">Forwarded</span><span style="color: #007700">-For;<br /></span><span style="color: #0000BB">set&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">X</span><span style="color: #007700">-</span><span style="color: #0000BB">Forwarded</span><span style="color: #007700">-For&nbsp;=&nbsp;</span><span style="color: #0000BB">client</span><span style="color: #007700">.</span><span style="color: #0000BB">ip</span><span style="color: #007700">;&nbsp;</span>
</span>
</code></div>

<p>Now open your EE install&#8217;s <code>config.php</code> and add your Varnish server&#8217;s IP address to the <code>proxy_ips</code> setting:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$config&#91;</span><span style="color: #DD0000">'proxy_ips'</span><span style="color: #0000BB">&#93;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;&nbsp;</span>
</span>
</code></div>

<p>This should get ExpressionEngine seeing the correct IP address. Apache, however, requires further tweaking. In your <code>httpd.conf</code>, modify your <code>LogFormat</code> to read <code>%{X-Forwarded-for}</code> in the IP address portion of the log line. Other HTTP servers should provide a similar way of showing our special header in log files.</p>

<h2>By the Grace of Varnish</h2>

<p>We&#8217;ve all lost precious uptime when our HTTP service decides to crash. Varnish has some nifty tools in place to cover your tail in such an event, and it&#8217;s called <a href="https://www.varnish-cache.org/trac/wiki/BackendPolling">backend polling</a>. The concept is simple: Varnish will poll your backend at an interval you specify, and if it detects the backend is unreachable, it will continue to serve out of the cache for a specified period of time, called <em>grace time</em>.</p>

<p>Setting up polling is easy, we do it by adding a <code>probe</code> section to our backend declaration:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">backend&nbsp;</span><span style="color: #007700">default&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'8080'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">probe&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#123;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'/'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">timeout&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">34ms</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">interval&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1s</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">window&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">threshold&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&#125;&nbsp;</span>
</span>
</code></div>

<p>These are the default settings from Varnish&#8217;s docs, but you may want to tweak them further for your server. This basically says, &#8220;Go to http://127.0.0.1:8080/ every second, and if it takes less than 34ms to respond for at least 8 of the last 10 polls, the backend is considered healthy.&#8221;</p>

<p>If the backend fails the test, objects are served out of the cache in accordance to their <a href="https://www.varnish-cache.org/trac/wiki/VCLExampleGrace">grace time setting</a>. To set this, we need to set the grace time both for the request and for the fetched object. To set grace time for the request, add this line to <code>vcl_recv</code>:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">set&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">grace&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1h</span><span style="color: #007700">;&nbsp;</span>
</span>
</code></div>

<p>And to set grace time on the object, add this line to <code>vcl_fetch</code>:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">grace&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1h</span><span style="color: #007700">;&nbsp;</span>
</span>
</code></div>

<p>This allows our backend to be down for a whole hour before we get it fixed without website visitors ever noticing.</p>

<h2>Go Forth</h2>

<p>I hope by now that I&#8217;ve given you an arsenal of tips and tricks necessary to set up the ideal caching for your ExpressionEngine site, and that traffic spikes are no longer a cause of anxiety. If you need Varnish to do something I didn&#8217;t cover here, it&#8217;s likely outlined in the <a href="https://www.varnish-cache.org/docs">Varnish docs</a>, along with more detailed descriptions of everything I mentioned here. This was just the tip of the Varnish iceberg.</p>

<p>For reference, you&#8217;ll find the final VCL file with all the modifications we made below.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">backend&nbsp;</span><span style="color: #007700">default&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;IP&nbsp;address&nbsp;of&nbsp;your&nbsp;backend&nbsp;(Apache,&nbsp;nginx,&nbsp;etc.)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'8080'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Port&nbsp;your&nbsp;backend&nbsp;is&nbsp;listening&nbsp;on<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">probe&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#123;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'/'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">timeout&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">34ms</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">interval&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1s</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">window&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #0000BB">threshold&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br />&#125;<br /><br />sub&nbsp;vcl_recv&nbsp;&#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Forward&nbsp;client's&nbsp;IP&nbsp;to&nbsp;backend<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">remove&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">X</span><span style="color: #007700">-</span><span style="color: #0000BB">Forwarded</span><span style="color: #007700">-For;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">X</span><span style="color: #007700">-</span><span style="color: #0000BB">Forwarded</span><span style="color: #007700">-For&nbsp;=&nbsp;</span><span style="color: #0000BB">client</span><span style="color: #007700">.</span><span style="color: #0000BB">ip</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Set&nbsp;the&nbsp;URI&nbsp;of&nbsp;your&nbsp;system&nbsp;directory<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'^/system/'&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'ACT='&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">request&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'POST'&nbsp;</span><span style="color: #007700">||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">url&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'member_box'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">Cookie&nbsp;</span><span style="color: #007700">~&nbsp;</span><span style="color: #DD0000">'exp_sessionid'</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">pass</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#125;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">unset&nbsp;</span><span style="color: #0000BB">req</span><span style="color: #007700">.</span><span style="color: #0000BB">http</span><span style="color: #007700">.</span><span style="color: #0000BB">Cookie</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;req</span><span style="color: #007700">.</span><span style="color: #0000BB">grace&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1h</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(</span><span style="color: #0000BB">lookup</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;<br /><br />sub&nbsp;vcl_fetch&nbsp;&#123;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Enable&nbsp;ESI&nbsp;includes<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">do_esi&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Our&nbsp;cache&nbsp;TTL<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">ttl&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1m</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">set&nbsp;beresp</span><span style="color: #007700">.</span><span style="color: #0000BB">grace&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1h</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return(</span><span style="color: #0000BB">deliver</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#125;&nbsp;</span>
</span>
</code></div>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[#FRUP 2.5. May 11 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/frup_25_may_11_edition" />
      <id>tag:expressionengine.com,2012:blog/12.17899</id>
      <published>2012-05-11T19:02:02Z</published>
      <updated>2012-05-14T11:21:03Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>Here&rsquo;s this week&#8217;s round up post. Remember to add your news via <a href="http://twitter.com/#!/search/%23FRUP">#FRUP</a> on Twitter, or this <a href="http://expressionengine.com/forums/viewthread/217087/">forum thread</a>.</p>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://michaelrog.com/">Michael Rog</a> updated <a href="http://devot-ee.com/add-ons/show-me-my-assets">Show Me My Assets!</a> to 1.1.1, which now expands subfolders in the Assets file manager and Assets file field.</p>
</li>
<li><p><a href="http://ninefour.co.uk/">Nine Four</a> wrote an add-on to return and entry ID based off a given letter. Say for instance you wanted to show all entries that start with the letters &ldquo;A, B, or C&rdquo;, this add-on will return the relevant entry IDs for passing into a channel entires loop. You can <a href="https://github.com/ninefour/entries_by_letter.pi.ee_addon">find it on Github</a>.</p>
</li>
<li><p><a href="http://getbunch.com/">Jesse Bunch</a> released a <a href="https://github.com/paramoreagency/EE-YQL-Plugin">YQL plugin</a> for ExpressionEngine. This plugin will make it easy to consume and cache your YQL queries directly from your ExpressionEngine templates.</p>
</li>
<li><p><a href="http://www.causingeffect.com/">Causing Effect</a> launched <a href="http://www.causingeffect.com/software/expressionengine/ce-tweet">CE Tweet</a> <strong>($)</strong>, a very customizable Twitter add-on for ExpressionEngine.</p>
</li>
<li><p><a href="http://www.eec.ms/">Max Lazar</a> released <a href="http://devot-ee.com/add-ons/mx-select">MX Select Plus</a> <strong>($)</strong>, a fieldtype that brings a much cleaner UI when dealing with select boxes.</p>
</li>
<li><p><a href="http://www.eec.ms/">Max Lazar</a> released <a href="http://devot-ee.com/add-ons/mx-getid3">MX GetID3</a>, a plugin that extracts useful information form MP3s and other multimedia files.</p>
</li>
<li><p><a href="http://www.eec.ms/">Max Lazar</a> released <a href="http://devot-ee.com/add-ons/mx-lone-star">MX Lone Star</a>, a fieldtype that can replace the standard checkbox fieldtype, but allows for fine tuned control over how many items people can check. <a href="https://vimeo.com/41791557">This video</a> shows the power of this fieldtype.</p>
</li>
<li><p><a href="http://www.eec.ms/">Max Lazar</a> updated <a href="http://devot-ee.com/add-ons/mx-notify-control">MX Notify Control</a> to 2.3.0.</p>
</li>
<li><p>Finally, <a href="http://www.eec.ms/">Max Lazar</a> updated <a href="http://www.eec.ms/add-ons/mx-title-control">MX *Title Control</a> to 2.8.0, now with custom status support and bug fixes.</p>
</li>
<li><p><a href="http://www.devdemon.com/">DevDemon</a> updated <a href="http://www.devdemon.com/channel_files/">Channel Files</a> <strong>($)</strong> to  5.0.4. They added Amazon S3 Subdirectory support &amp; Rackspace CloudFiles CDN URI Override and an optional Download button in the fieldtype.</p>
</li>
<li><p><a href="http://www.devdemon.com/">DevDemon</a> updated <a href="http://www.devdemon.com/channel_images/">Channel Images</a> <strong>($)</strong> to 5.2.1. This adds the ability to import images from the local server.</p>
</li>
<li><p><a href="http://www.devdemon.com/">DevDemon</a> updated <a href="http://www.devdemon.com/forms/">Forms</a> <strong>($)</strong> to 2.0.7, which adds a Forms Entries tag, and allows you to delete entries straight from the CP.</p>
</li>
<li><p>Finally, <a href="http://www.devdemon.com/">DevDemon</a> updated <a href="http://www.devdemon.com/channel_ratings/">Channel Ratings</a> <strong>($)</strong> to 4.0.1, which adds a My Likes tag and the ability for a user to delete it’s “like” vote using a special URL.</p>
</li>
<li><p><a href="http://nicolasbottari.com/">Nicolas Bottari</a> released <a href="http://devot-ee.com/add-ons/zenbu-tag-formatting">Zenbu Tag Formatting</a>, an extension for the <a href="http://devot-ee.com/add-ons/zenbu">Zenbu</a> <b>($)</b> add-on that modifies how tags from the Solspace <a href="http://www.solspace.com/docs/addon/c/Tag">Tag</a> <b>($)</b> module are displayed in Zenbu columns.</p>
</li>
<li><p><a href="http://boldminded.com/">Brian Litzinger</a> released <a href="http://devot-ee.com/add-ons/wyvern-video">Wyvern Video</a> <b>($)</b>. Wyvern Video is a robust YouTube and Vimeo add-on that integrates with all the popular WYSIWYG editors, including the new Rich Text Editor, and acts as a stand-alone field.</p>
</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><p><a href="http://creativearc.com/">Creative Arc</a> launched a site for <a href="http://aulikdesignbuild.com/">Aulik</a>.</p>
</li>
<li><p><a href="http://www.tyssendesign.com.au/">Tyssen Design</a> redesigned and upgraded <a href="http://www.clippermotoryachts.com/">Clipper Motoryachts</a> from ExpressionEngine 1.6 to 2.4.</p>
</li>
<li><p><a href="http://www.55bits.com/">55bits</a> launched a new company site.</p>
</li>
<li><p><a href="http://www.lealea.net/">Lealea design</a> launched a site for <a href="http://strathconaschool.ca/">Strathcona High School</a>.</p>
</li>
<li><p><a href="http://twitter.com/#!/CarloLaitano">Carlo Laitano</a> launched a site for the <a href="http://amschool.org/">American School</a>.</p>
</li>
<li><p><a href="http://eecoder.com/">eecoder</a> along with <a href="http://www.antistaticdesign.com/">Antistatic Design</a> launched <a href="http://wilmingtonfavs.com/">WilmingtonFAVS</a>, which is the third site in a series of sites for <a href="http://www.religionnews.com/">Religion News Service</a>.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><p><a href="http://hambodevelopment.com/">Hambo Development</a> launched a new responsive company site running ExpressionEngine 2.5.</p>
</li>
<li><p>You can help shape the future of Exp:resso&rsquo;s <a href="http://exp-resso.com/store/">Store add-on</a> by casting your vote on their <a href="http://exp-resso.com/store/support">new feature requests page</a>.</p>
</li>
<li><p><a href="http://www.am-impact.nl">a&amp;m impact</a> was added to our pro network, and they <a href="http://twitter.com/#!/tomsuter/status/200231889909460992/photo/1">celebrated this accomplishment rather nicely</a>.</p>
</li>
<li><p>EE Pro Net member <a href="http://boyink.com/">Boyink Interactive</a> celebrated their ten year anniversary!</p>
</li>
<li><p>The EE Podcast has a new episode on <a href="http://ee-podcast.com/episodes/dry-techniques-with-ee">DRY Techniques</a> out, and next episode they&rsquo;ll have us, EllisLab, on to talk about the new release.</p>
</li>
</ul>

<h4>Must Read</h4>

<ul>
<li><a href="http://jamiepittock.com/">Jamie Pittock</a> blogged on &ldquo;<a href="http://jamiepittock.com/words/2012/may/01/selling-tickets-cartthrob/">Selling tickets with CartThrob</a>&rdquo;.</li>
</ul>

<h4>From EllisLab</h4>

<ul>
<li><p><a href="http://expressionengine.com/blog/entry/expressionengine_2.5.0_released">ExpressionEngine 2.5</a> was released!</p>
</li>
<li><p>We have a new &ldquo;How-to&rdquo; video on <a href="https://vimeo.com/41789424">Getting Started with ExpressionEngine</a>.</p>
</li>
<li><p>A new showcase on <a href="http://expressionengine.com/showcase/interview/next_american_city">Next American City</a> was posted.</p>
</li>
<li><p>A new showcase on <a href="http://expressionengine.com/showcase/interview/viget">Viget Labs</a> was posted.</p>
</li>
<li><p>A new showcase on <a href="http://expressionengine.com/showcase/interview/frieze_art_fair_new_york">Frieze Art Fair New York</a> was posted.</p>
</li>
</ul>

<p>Have a good weekend!</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[New How-To Video: Getting Started with ExpressionEngine]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/new_how_to_video_getting_started_with_expressionengine" />
      <id>tag:expressionengine.com,2012:blog/12.17883</id>
      <published>2012-05-08T21:33:03Z</published>
      <updated>2012-05-08T16:35:06Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Education & Training"
        scheme="http://expressionengine.com/blog/entry/category/education_training"
        label="Education & Training" />
      <content type="html"><![CDATA[
        <p>We have a new &ldquo;How-To&rdquo; video for your viewing! For those of you just getting started with ExpressionEngine, or those who&rsquo;d like a refresher on the basic concepts of ExpressionEngine, this is the video for you.</p>
<p>It brings the <a href="http://expressionengine.com/user_guide/getting_started/index.html">Getting Started with ExpressionEngine 2</a> page from our documentation to life. Enjoy!</p>
<iframe src="http://player.vimeo.com/video/41789424?title=0&amp;byline=0&amp;portrait=0&amp;loop=1" width="487" height="274" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><br /></p><p>Remember, we have a variety of “How-To” videos covering other aspects of ExpressionEngine on our <a href="https://vimeo.com/tag:ellislabhowto">Vimeo page</a>.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[ExpressionEngine 2.5.0 Released]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/expressionengine_2.5.0_released" />
      <id>tag:expressionengine.com,2012:blog/12.17867</id>
      <published>2012-05-07T20:58:14Z</published>
      <updated>2012-05-07T17:02:15Z</updated>
      <author>
            <name>Robin Sowell</name>
            <uri>http://media-cow.com/</uri>      </author>

      <category term="News"
        scheme="http://expressionengine.com/blog/entry/category/news"
        label="News" />
      <content type="html"><![CDATA[
        <p>ExpressionEngine 2.5.0 is a feature and security release.&nbsp; It features a new Rich Text Editor field type, a Rich Text Editor Module to allow use of the editor on the front end, and a Cookie Consent Module designed to help European Union (EU) users comply with privacy laws impacting cookie use.&nbsp; In addition to a number of new features, this release improves XSS filtering and redirect behavior.&nbsp; For developers there are a number of new hooks and improvements, and everyone will benefit from the stability improvements provided by over 50 bug fixes.</p>

<p>The new Rich Text Editor provides a native way to add very lightweight &#8216;what you see is what you get&#8217; (WYSIWYG) fields to the publish page. This allows content editors to work directly with rich text elements in their written content— elements like bold and italicized text, block quotes, and links— without being subjected to the HTML markup underneath.&nbsp; Toolsets, which consist of the various buttons that can be included in the editor, are customizable and may be saved on a per member basis.&nbsp; The editor can also be added to textarea fields on the frontend by using the RTE Module, which allows WYSIWYG capabilities in SafeCracker and Comments.&nbsp; The new editor is also developer friendly, and new buttons may be easily created using the <a href="http://expressionengine.com/user_guide/development/cp_javascript/rte/index.html">Button API</a>.</p>

<p>The other new module in this release is the Cookie Consent Module, specifically designed to help EU users meet the demands of privacy laws that prohibit setting cookies without prior consent from end users.&nbsp; The module prevents setting cookies using ExpressionEngine&#8217;s native cookie setting function unless consent has been granted.&nbsp; The module also provides means of conditionally display data based on consent status, and mechanisms for gaining such consent.&nbsp; See the <a href="http://expressionengine.com/user_guide/modules/cookie_consent/index.html">documentation</a> for more details.&nbsp; </p>

<p>Developers will benefit from a number of additions in this release.&nbsp; In addition to the developer friendly new editor, several new hooks have been added.&nbsp; The <a href="http://expressionengine.com/user_guide/development/extension_hooks/cp/myaccount/index.html">myaccount_nav_setup</a> allows manipulation of the &#8216;My Account&#8217; page, <a href="http://expressionengine.com/user_guide/development/extension_hooks/global/email/index.html">email_send</a> allows modification of emails, and the <a href="http://expressionengine.com/user_guide/development/extension_hooks/global/functions/index.html">set_cookie_end</a> hook enables taking over cookie setting, to name a few.&nbsp; And thanks to the Reactor crew, you can now take advantage of __call() in your plugins and modules (see the <a href="http://expressionengine.com/forums/viewthread/174319/">Feature Request</a>).</p>

<p>We hope you all find something new to enjoy in the 2.5.0 release.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[Jar Jar #FRUP. May 4 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/jar_jar_frup_may_4_edition" />
      <id>tag:expressionengine.com,2012:blog/12.17854</id>
      <published>2012-05-04T16:54:56Z</published>
      <updated>2012-05-04T11:57:58Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>Happy Star Wars day! Considering I already used &ldquo;May the #FRUP be with You&rdquo; and &ldquo;A New #FRUP&rdquo; as previous titles, I figured I&rsquo;d give tribute to the greatest Star Wars character around. And, taking into account that <a href="http://www.youtube.com/watch?v=pPb2lIap6Es&amp;feature=youtube_gdata_player">the entire saga surrounds Jar Jar Binks</a>, what better way to acknowledge that, than naming the #FRUP after him.</p>

<p>Remember to submit your news by means of the <a href="http://twitter.com/#!/search/realtime/%23FRUP">#FRUP</a> hashtag on Twitter, or the <a href="http://expressionengine.com/forums/viewthread/216643">related forum thread</a>, and we&rsquo;ll be sure to include it in our weekly round ups.</p>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://blendimc.com/dev/">Blend Dev</a> updated <a href="http://devot-ee.com/add-ons/title-master">Title Master</a> to allow you to manage Structure URLs as well as change the field length of the Title and URL fields.</p>
</li>
<li><p><a href="http://exp-resso.com/">Exp:resso</a> released <a href="http://exp-resso.com/store/release-notes">Store 1.5.2</a>, which contains a number of feature additions and bug fixes.</p>
</li>
<li><p><a href="http://curtisblackwell.com/">Curtis Blackwell</a> released <a href="http://curtisblackwell.github.com/cpb_steak_sauce/">cpb Steak Sauce 2.0</a>, a plugin which converts integers to their corresponding letters and vice versa. This updated now supports numbers higher than 26, and letter combinations, such as 27 being converted to &ldquo;AA&rdquo;.</p>
</li>
<li><p><a href="http://gotolow.com/">Low</a> launched <a href="http://gotolow.com/blog/low-reorder-20">Low Reorder 2.0</a>, an add-on for reordering your channel entires. Multiple channel and multiple category support, along worth a wealth of hooks are just some of the reasons why Low Reorder is even better than before.</p>
</li>
<li><p><a href="http://elivz.com/">Eli Van Zoeren</a> released <a href="http://devot-ee.com/add-ons/vz-regulator">VZ Regulator</a>, a fieldtype for validating text inputs by means of a regular expression. You can also display an optional tooltip when the input does not match the pattern.</p>
</li>
<li><p><a href="http://www.devdemon.com/">DevDemon</a> released <a href="http://www.devdemon.com/channel_images/">Channel Images 5.2</a>, which adds HTML5 upload, EE 2.5 Rich Text Editor support, Better Workflow integration, multiple fields and more.</p>
</li>
<li><p><a href="http://jamieonsoftware.com/">Jamie Rumbelow</a> has open sourced his tagging module, <a href="https://github.com/jamierumbelow/taggable">Taggable</a>, and his MojoMotor blogging platform, <a href="https://github.com/jamierumbelow/mojoblog">MojoBlog</a>. They now live happily on GitHub, where you can use them on your projects, or contribute to making them better.</p>
</li>
<li><p><a href="http://www.vayadesign.net/">VayaDesign</a> released version 2.0 of their productivity and search tool for the ExpressionEngine control panel, <a href="http://www.vayadesign.net/software/switchboard">Switchboard</a>. This new release features a new UI, full keyboard navigation support, and <a href="http://www.vayadesign.net/software/switchboard/release-notes">more</a>.</p>
</li>
<li><p><a href="http://devot-ee.com/developers/rein-de-vries">Rein de Vries</a> released <a href="http://devot-ee.com/add-ons/entry-api">Entry API</a>, a module that creates an XMLRPC/SOAP server under the hood of ExpressionEngine. With this module you are capable to insert, update and delete entries with a SOAP or XMLRPC call. So, for example you can insert entries from within another application such as an iPhone app or another web app.</p>
</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><p><a href="http://creativearc.com/">Creative Arc</a> launched <a href="http://sputteringcomponents.com/">Sputtering Components</a>.</p>
</li>
<li><p><a href="http://www.mediasurgery.co.uk/">Media Surgery</a> launched their new responsive company site.</p>
</li>
<li><p><a href="http://www.orionesque.com/">Orionesque</a> launched <a href="http://www.hardyamies.com/">Hardy Amies</a>.</p>
</li>
<li><p><a href="http://www.antistaticdesign.com/">Antistatic Design</a> launched <a href="http://www.sitegrouplandscaping.com/">The Site Group</a>.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><p>Congrats to the folks over at <a href="http://newism.com.au/">Newism</a> on their <a href="http://newism.com.au/news/details/huawei-wins-a-webby">winning a Webby Award</a> for their work on the <a href="http://huaweimobile.com.au/">Huawei Mobile website</a>!</p>
</li>
<li><p><a href="http://blendimc.com/dev/">Blend Dev</a> is giving away a copy of <a href="http://devot-ee.com/add-ons/title-master">Title Master</a>, and you could be the recipient! All you have to do is explain how Title Master helps makes clients&#8217; and developers&#8217; lives easier. For full contest requirements, <a href="http://blendimc.com/dev/2012/04/title-master-competition-win-a-title-master-dev-license/">check out their blog post</a>.</p>
</li>
</ul>

<h4>Must Read</h4>

<ul>
<li><a href="http://timohakkinen.com/">Timo Häkkinen</a> wrote an article about <a href="http://timohakkinen.com/blog/where-are-volume-discounts-for-expressionengine-add-ons/">volume discounts for ExpressionEngine add-ons</a>. This article goes on to explain why offering volume discounts with your add-ons is something you should consider doing.</li>
</ul>

<h4>From EllisLab</h4>

<ul>
<li><p>A new showcase on the <a href="http://expressionengine.com/showcase/interview/sacramento_county_airport_system">Sacramento County Airport System</a> was published.</p>
</li>
<li><p>A new showcase on <a href="http://expressionengine.com/showcase/interview/tmod">TMOD</a> was also published.</p>
</li>
<li><p>Finally, a showcase on <a href="http://expressionengine.com/showcase/interview/revolution_brewing">Revolution Brewing</a> was published.</p>
</li>
<li><p>The <a href="http://ellislabinc.cmail5.com/t/ViewEmail/r/46351E66FFBB0ED5/98AD4045F6D4EC940367819F23434F99">April Edition of PixelBuzz</a> was sent out. Make sure you&rsquo;re <a href="http://ellislab.com/connect">signed up</a> to receive our newsletter!</p>
</li>
</ul>

<p>Thanks for a great week!</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[#FRUP it. Tweet it. Tag it. Like it. Pin it. Plus it. Go Bookmark it. April 27 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/frup_it_april_27_edition" />
      <id>tag:expressionengine.com,2012:blog/12.17833</id>
      <published>2012-04-27T17:21:29Z</published>
      <updated>2012-04-27T12:24:30Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>Welcome to another Friday Round Up Post! It&rsquo;s been a <a href="http://www.youtube.com/watch?v=YtdWHFwmd2o">Daft Punk</a> kind of week in case you hadn&rsquo;t noticed. Thanks for all your great submissions! Remember, if you want us to feature something you have done, add it to the <a href="http://expressionengine.com/forums/viewthread/216219/">related forum thread</a>, or tag it with <a href="http://twitter.com/#!/search/%23FRUP">#FRUP</a> on Twitter.</p>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://www.krea.com/">Krea</a> updated <a href="http://www.krea.com/docs/helpdesk/changelog/">Helpdesk</a>, their customer support add-on.</p>
</li>
<li><p><a href="http://experienceinternet.co.uk/">Experience Internet</a> released <a href="http://experienceinternet.co.uk/software/campaigner/changelog/">Campaigner 4.4.0</a>, introducing support for CartThrob, full compatibility with Zoo Visitor custom fields, and a lot more.</p>
</li>
<li><p><a href="http://www.devdemon.com/">DevDemon</a> released <a href="http://www.devdemon.com/channel_ratings/">Channel Ratings 4.0</a>, featuring a revamped control panel which allows for easier management of ratings.</p>
</li>
<li><p><a href="http://www.causingeffect.com/">Causing Effect</a> released an updated version of <a href="http://www.causingeffect.com/software/expressionengine/ce-cache/change-log">CE Cache</a>, now with more cow examples! Just kidding. This new version now prevents 404 and bot requested pages from being cached.</p>
</li>
<li><p><a href="http://gotolow.com/">Low</a>, you know, the one with the variables, updated Low NoSpam to <a href="http://gotolow.com/addons/low-nospam/changelog">version 2.2.2</a>, which adds support to Solspace&rsquo;s Freeform and User modules.</p>
</li>
<li><p><a href="http://devot-ee.com/developers/pv-ledoux">Pv Ledoux</a> released <a href="http://devot-ee.com/add-ons/nic">Nice Time</a>, an add-on that converts dates into relative time. It will output &ldquo;now&rdquo; if the date given is less then five seconds ago, &ldquo;xx [unit] ago&rdquo; will be outputted for longer intervals (where unit will be seconds, minutes, hours, days or weeks). If the date is greater than four weeks, it will return the full date formatted based on the parameters set.</p>
</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><p><a href="http://www.venveo.com/">Venveo</a> released a new responsive site for their company.</p>
</li>
<li><p><a href="http://www.dentsu-razorfish.com/">Dentsu Razorfish Inc.</a> launched a new company website.</p>
</li>
<li><p><a href="http://eecoder.com/">eecoder</a>, along with <a href="http://www.antistaticdesign.com/">Antistatic Design</a> and Edelman Digital, launched <a href="http://www.ird.org/">International Relief &amp; Development</a>.</p>
</li>
<li><p><a href="https://twitter.com/#!/cs_sean">Sean Smith</a> launched <a href="http://thehazeltonhotel.com/">The Hazelton Hotel</a>.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><a href="http://www.venveo.com/">Venveo</a> is starting an <a href="http://www.vienna-ee.com/">ExpressionEngine meetup</a> in Vienna Austria!</li>
</ul>

<h4>Must Read</h4>

<ul>
<li><p><a href="http://www.venveo.com/">Venveo</a> developer <a href="http://www.venveo.com/team#ryan-white">Ryan White</a> wrote on &ldquo;<a href="http://www.venveo.com/articles/view/optimizing-load-time-with-the-disable-parameter">Optimizing load time with the Disable Parameter</a>.&rdquo;</p>
</li>
<li><p><a href="http://metasushi.com/">Isaac Raway</a> wrote a review and overview article of <a href="http://www.krea.com/">Krea&rsquo;s</a> <a href="http://www.krea.com/docs/helpdesk/changelog/">Helpdesk</a> add-on on <a href="http://eeinsider.com/">EE Insider</a>.</p>
</li>
</ul>

<h4>From EllisLab</h4>

<ul>
<li><p>Customer Advocate, <a href="http://ellislab.com/company/team/dan_decker">Dan Decker</a>, blogged on how important documentation is during a project. Specifically, he goes in to how to use <a href="http://focuslabllc.com/">Focus Lab&rsquo;s</a> <a href="https://github.com/focuslabllc/dev_docs.ee_addon/tree/dev">Dev Docs</a> add-on.</p>
</li>
<li><p>A new showcase interview with <a href="http://bv02.com/">BV02</a> for their work on <a href="http://arcticwatch.ca/">Arctic Watch</a> <a href="http://expressionengine.com/showcase/interview/arctic_watch">was published this week</a>.</p>
</li>
</ul>

<p>It&rsquo;s been another great week! Enjoy your weekend. I mean it. No working day and night over the weekend. Take a break.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[ExpressionEngine Site Strategy with Dev Docs]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/expressionengine_site_strategy_with_dev_docs" />
      <id>tag:expressionengine.com,2012:blog/12.17827</id>
      <published>2012-04-25T14:17:38Z</published>
      <updated>2012-04-25T10:45:43Z</updated>
      <author>
            <name>Dan Decker</name>
            <uri>http://danfi.net/</uri>      </author>

      <category term="Education & Training"
        scheme="http://expressionengine.com/blog/entry/category/education_training"
        label="Education & Training" />
      <category term="Developer Blog"
        scheme="http://expressionengine.com/blog/entry/category/developer_blog"
        label="Developer Blog" />
      <category term="EE Tips &amp; Resources"
        scheme="http://expressionengine.com/blog/entry/category/ee_tips_resources"
        label="EE Tips &amp; Resources" />
      <content type="html"><![CDATA[
        <h4>Documentation First! Wait, Documentation First?</h4>

<p>You hear it often enough - &ldquo;Documentation First!&rdquo;, but for an ExpressionEngine project?</p>

<p>As the Community continues to amaze with the quality, depth and breadth of sites developed in ExpressionEngine, the need for a centralized dev doc repo becomes more important. The nature of projects being built with EE edge ever closer to web apps, with incredible add-ons that are almost apps in their own right!</p>

<p>Documentation may be the least interesting part of any development project, but you and your users will benefit by having high-quality documentation available.</p>

<h4>Ok Dan, We Get It! Documentation is Awesome!</h4>

<p>The ExpressionEngine developer of today needs a way to keep all this straight, and yes, Document First! Thankfully, <a href="http://focuslabllc.com/erik-reagan">Erik Reagan</a> at Focus Lab (who is one of our EE Reactor team members) has recognized this need and is working on <a href="https://github.com/focuslabllc/dev_docs.ee_addon/tree/dev">Dev Docs</a> (still a beta). Why don&rsquo;t you go grab that now, I&rsquo;ll wait…</p>

<p>Excellent. Now that you have Dev Docs in your hands, take a moment to read the excellent readme.textile that&rsquo;s included. Raise your hand if you have any questions.</p>

<p>Dev Docs is installed like other third-party add-ons for ExpressionEngine. Once you have the files in the proper places, we need to set the path for our doc files. This is currently done in your config file, but for the official 1.0 release it will be manageable from within the control panel. For now, you will need to add a new value to your ExpressionEngine config array. To do that, open <code>/system/expressionengine/config/config.php</code> and add <code>$config['dd:docs_path'] = '/path/to/dev_docs/';</code></p>

<p>Your Dev Document files can live anywhere on the server you like, even above web-root. And since they are files, they can be version-controlled. Yay!</p>

<p>With the config set, navigate to Add-ons &rarr; Modules &rarr; Dev Docs and click &ldquo;Install&rdquo; to install Dev Docs. At this point, if you try to access the Dev Docs CP, you&rsquo;ll be greeted with an error, which is seriously no fun. We are here to have fun, so let&rsquo;s write some documentation!</p>

<h4>Choose Your Poison</h4>

<p>Dev Docs is intended to make writing your project documentation easy (easy enough that you will actually DO it). To make that frictionless, DD supports Textile, Markdown and vanilla HTML. You can create one monolithic document, or breakdown your docs into sections that make sense for your needs.</p>

<p>Now that you have your text editor and format of choice, let&rsquo;s go over the basics.</p>

<p>I like to keep things separated, so I create a markdown file for each section of my project&rsquo;s documents.</p>

<ul>
<li>01-overview.md: the project from 30,000 feet.

<ul>
<li>Project goals and principals involved.</li>
</ul>
</li>
<li>02-addons.md: First-party, Third-party and custom add-ons.

<ul>
<li>Where to obtain them, how they will be used.</li>
</ul>
</li>
<li>03-content.md: Define channels, field groups and field settings for your content.</li>
<li>04-url_structure.md: template-groups/templates and URL behavior.

<ul>
<li>The Map to your sitemap. The group/template that each URL accesses and what happens when you land there.</li>
</ul>
</li>
<li>05-environments.md: Particularly useful in version-controlled and staged server environments.

<ul>
<li>Have you seen the <a href="https://github.com/focuslabllc/ee-master-config">Focus Lab Master Config</a>?</li>
</ul>
</li>
</ul>


<p><strong>Your friend, H1</strong><br/>
The Control Panel sections of DD are created using Heading 1. Any h1 that DD encounters will become a pill tab in the navigation. Use h1 to define your document sections, even if you have them broken down into separate file.</p>

<p><strong>01-overview.md</strong><br/>
To give you an idea of how this translates:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF8000">#&nbsp;Notes&nbsp;for&nbsp;Awesome,&nbsp;Inc.&nbsp;Project<br /><br /></span><span style="color: #0000BB">These&nbsp;notes&nbsp;are&nbsp;intended&nbsp;to&nbsp;be&nbsp;only&nbsp;</span><span style="color: #007700">for&nbsp;</span><span style="color: #0000BB">the&nbsp;developer</span><span style="color: #007700">(</span><span style="color: #0000BB">s</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">on&nbsp;the&nbsp;project</span><span style="color: #007700">.<br /><br />::</span><span style="color: #0000BB">start</span><span style="color: #007700">::<br /><br /><br /></span><span style="color: #FF8000">#&nbsp;Site&nbsp;Overview<br /><br /></span><span style="color: #0000BB">Awesome</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Inc</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">has&nbsp;hired&nbsp;us&nbsp;to&nbsp;develop&nbsp;their&nbsp;</span><span style="color: #007700">new&nbsp;</span><span style="color: #0000BB">website</span><span style="color: #007700">.<br /><br /></span><span style="color: #0000BB">They&nbsp;are&nbsp;a&nbsp;creative&nbsp;company&nbsp;with&nbsp;some&nbsp;interesting&nbsp;requirements</span><span style="color: #007700">!<br /><br /></span><span style="color: #FF8000">##&nbsp;Team<br /><br /></span><span style="color: #0000BB">This&nbsp;project&nbsp;is&nbsp;a&nbsp;joint&nbsp;effort&nbsp;of&nbsp;you&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">me</span><span style="color: #007700">:<br /><br />-&nbsp;</span><span style="color: #0000BB">&#91;Dan&nbsp;Decker&#93;</span><span style="color: #007700">(</span><span style="color: #0000BB">dan</span><span style="color: #007700">.</span><span style="color: #0000BB">decker</span><span style="color: #007700">@</span><span style="color: #0000BB">ellislab</span><span style="color: #007700">.</span><span style="color: #0000BB">com</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">Project&nbsp;Lead<br /></span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">&#91;You&#93;</span><span style="color: #007700">(</span><span style="color: #0000BB">you</span><span style="color: #007700">@</span><span style="color: #0000BB">rawk</span><span style="color: #007700">.</span><span style="color: #0000BB">dev</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">Project&nbsp;Developer&nbsp;</span>
</span>
</code></div>


<p>Note: anything above <code>::start::</code> will not be parsed by DD. It&rsquo;s like documentation for your documentation!</p>

<p>In this tiny example, using Markdown, the text following the &ldquo;#&rdquo; will show in the Control Panel as a navigation item. Cool!</p>

<h4>It Slices! It Dices!</h4>

<p>You have your project. You&rsquo;ve chosen your markup syntax. You&rsquo;ve outlined your Dev Docs. Now what?</p>

<p>The meat and potatoes of any site is the content. You&rsquo;ve been in meetings with our client, and we have the static mock-ups from the designers. As developers, we need to mesh those 2 things together into Awesome, Inc.&rsquo;s awesome new ExpressionEngine powered web revolution!</p>

<p>Out of all this, several content areas and types have been identified:</p>

<ul>
<li>The Homepage - A mix of Static and Dynamic content</li>
<li>Communication and Engagement (&ldquo;blog&rdquo; is so passé)</li>
<li>Static Pages - About, Contact/Thank you, Privacy</li>
<li>Portfolio</li>
<li>Staff Pages</li>
</ul>


<p>Each of these channels has different content-types that have been identified and which determine the field types we will use in the channel&rsquo;s field group.</p>

<p><strong>A Note on Consistency - Naming Conventions and Defaults</strong><br/>
It is good practice, especially working in a team, to establish and adhere to a naming convention and coding style. It keeps the team agile and fluid by letting any team member jump right in where another has left off.</p>

<p>Establishing defaults lets us maintain a general expectation and allows for the differences to stand out.</p>

<p>For example:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">Across&nbsp;Channels</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Custom&nbsp;Fields&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">Upload&nbsp;Directories&nbsp;we&nbsp;</span><span style="color: #007700">use&nbsp;</span><span style="color: #0000BB">the&nbsp;same&nbsp;naming&nbsp;convention</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">It</span><span style="color: #DD0000">'s&nbsp;used&nbsp;to&nbsp;keep&nbsp;things&nbsp;organized&nbsp;and&nbsp;predictable.&nbsp;The&nbsp;convention&nbsp;uses&nbsp;a&nbsp;“prefix”&nbsp;of&nbsp;the&nbsp;Channel&nbsp;short&nbsp;name&nbsp;in&nbsp;front&nbsp;of&nbsp;any&nbsp;other&nbsp;words.&nbsp;For&nbsp;example:<br /><br />-&nbsp;Channel&nbsp;name&nbsp;is&nbsp;“Pages”<br />-&nbsp;3&nbsp;custom&nbsp;fields&nbsp;for&nbsp;Meta&nbsp;Description,&nbsp;Primary&nbsp;Image&nbsp;&amp;&nbsp;Body&nbsp;Content<br />-&nbsp;1&nbsp;Upload&nbsp;directory&nbsp;for&nbsp;the&nbsp;images<br />-&nbsp;The&nbsp;names&nbsp;would&nbsp;look&nbsp;something&nbsp;like:<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Channel&nbsp;short&nbsp;name:&nbsp;`pages`<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Custom&nbsp;fields:&nbsp;`pages_meta_description`,&nbsp;`pages_primary_image`,&nbsp;&amp;&nbsp;`pages_body_content`<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Upload&nbsp;Directory:&nbsp;“Pages&nbsp;Image&nbsp;Uploads”<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;This&nbsp;convention&nbsp;is&nbsp;used&nbsp;when&nbsp;applicable&nbsp;in&nbsp;Status&nbsp;Groups,&nbsp;Categories&nbsp;&amp;&nbsp;closely&nbsp;related&nbsp;Channels&nbsp;as&nbsp;well.<br /><br />**Unless&nbsp;otherwise&nbsp;noted:**<br /><br />-&nbsp;Each&nbsp;Channel&nbsp;does&nbsp;not&nbsp;have&nbsp;custom&nbsp;category&nbsp;requirements<br />-&nbsp;Each&nbsp;Channel&nbsp;should&nbsp;use&nbsp;the&nbsp;default&nbsp;status&nbsp;group<br />-&nbsp;Field&nbsp;formatting&nbsp;should&nbsp;be&nbsp;"none"&nbsp;(rarely&nbsp;using&nbsp;XHTML&nbsp;etc)<br />-&nbsp;Leave&nbsp;field&nbsp;instructions&nbsp;blank<br />-&nbsp;Default&nbsp;Channel&nbsp;settings:<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Default&nbsp;status:&nbsp;Open<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Select&nbsp;'</span><span style="color: #0000BB">Allow&nbsp;Comments</span><span style="color: #DD0000">'&nbsp;button&nbsp;in&nbsp;Publish&nbsp;page&nbsp;by&nbsp;default?:&nbsp;**No**<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Automatically&nbsp;turn&nbsp;URLs&nbsp;and&nbsp;email&nbsp;addresses&nbsp;into&nbsp;links?:&nbsp;**No**<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Enable&nbsp;Entry&nbsp;Versioning:&nbsp;**No**<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Allow&nbsp;comments&nbsp;in&nbsp;this&nbsp;channel?:&nbsp;**No**<br />&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Display&nbsp;Rich&nbsp;Formatting&nbsp;Buttons:&nbsp;**No**<br />-&nbsp;File&nbsp;/&nbsp;Assets&nbsp;fields&nbsp;&lt;strong&nbsp;class="upper"&gt;should&nbsp;not&lt;/strong&gt;&nbsp;display&nbsp;"All"&nbsp;upload&nbsp;directories.&nbsp;They&nbsp;should&nbsp;only&nbsp;display&nbsp;the&nbsp;relevant&nbsp;ones<br />-&nbsp;Upload&nbsp;directory&nbsp;server&nbsp;path&nbsp;should&nbsp;be&nbsp;`&#123;YOUR_DOCUMENT_ROOT&#125;/uploads/&#123;channel_short_name&#125;`<br />-&nbsp;Upload&nbsp;directory&nbsp;URL&nbsp;should&nbsp;be&nbsp;`/uploads/&#123;channel_short_name&#125;/`&nbsp;</span>
</span>
</code></div>


<p><strong>Channel Your Inner Documentarian</strong><br/>
That&rsquo;s an awful lot of groundwork!</p>

<p>Let&rsquo;s make an example using one of our identified content areas. Using our notes from the client as well as the mock-ups from the designers, we have a really good idea of what needs to be on the homepage. However, our co-developer, Joe, has been on vacation (slacker) and this is the first he&rsquo;s heard of Awesome, Inc.</p>

<p>Just because Joe has sand in his toes is no excuse for him to be unproductive when he returns. Lucky for Joe, we&rsquo;ve been hard at work in Dev Docs. As soon as he gets back on Monday, Joe can dig right in on the homepage:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF8000">###&nbsp;Homepage<br /><br /></span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Short&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Required</span><span style="color: #007700">?&nbsp;&nbsp;|&nbsp;</span><span style="color: #0000BB">Searchable</span><span style="color: #007700">?&nbsp;&nbsp;|<br />|&nbsp;--------------------&nbsp;|&nbsp;------------------&nbsp;|&nbsp;-------------|&nbsp;----------&nbsp;|&nbsp;------------&nbsp;|<br />|&nbsp;</span><span style="color: #0000BB">Homepage&nbsp;Welcome&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">homepage_welome&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">textarea</span><span style="color: #007700">/</span><span style="color: #0000BB">RTE&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br />|&nbsp;</span><span style="color: #0000BB">Homepage&nbsp;Action&nbsp;Call&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">homepage_action&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">textarea</span><span style="color: #007700">/</span><span style="color: #0000BB">RTE&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br />|&nbsp;</span><span style="color: #0000BB">Homepage&nbsp;Marketing&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">homepage_marketing&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">textarea</span><span style="color: #007700">/</span><span style="color: #0000BB">RTE&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br /><br /></span><span style="color: #FF8000">#####&nbsp;Channel&nbsp;Notes<br /></span><span style="color: #0000BB">The&nbsp;Homepage&nbsp;will&nbsp;pull&nbsp;content&nbsp;from&nbsp;other&nbsp;channels&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">have&nbsp;content&nbsp;of&nbsp;its&nbsp;own</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">This&nbsp;makes&nbsp;it&nbsp;a&nbsp;bit&nbsp;unique</span><span style="color: #007700">.<br /><br />-&nbsp;</span><span style="color: #0000BB">An&nbsp;image&nbsp;slider&nbsp;will&nbsp;be&nbsp;pulled&nbsp;from&nbsp;the&nbsp;Portfolio&nbsp;Channel<br /></span><span style="color: #007700">-&nbsp;</span><span style="color: #DD0000">"Tabs"&nbsp;</span><span style="color: #0000BB">with&nbsp;marketing&nbsp;copy<br /></span><span style="color: #007700">-&nbsp;</span><span style="color: #DD0000">"What's&nbsp;Awesome&nbsp;today!?"&nbsp;</span><span style="color: #0000BB">pulled&nbsp;from&nbsp;the&nbsp;Engagement&nbsp;Channel<br /><br />The&nbsp;</span><span style="color: #007700">`</span><span style="color: #DD0000">textarea</span><span style="color: #007700">`</span><span style="color: #0000BB">s&nbsp;will&nbsp;</span><span style="color: #007700">use&nbsp;</span><span style="color: #0000BB">ExpressionEngine</span><span style="color: #DD0000">'s&nbsp;native&nbsp;Rich&nbsp;Text&nbsp;Editor&nbsp;to&nbsp;allow&nbsp;the&nbsp;client&nbsp;to&nbsp;easily&nbsp;enter,&nbsp;edit&nbsp;and&nbsp;style&nbsp;content.&nbsp;</span>
</span>
</code></div>


<p>Which looks GREAT when you see it in the Control Panel!</p>

<p><a href="http://expressionengine.com/files/blog/homepage_channel.jpg"><img src="http://expressionengine.com/files/blog/_thumbs/homepage_channel.jpg" /></a></p>

<p>With that, Joe knows exactly what we need for the homepage channel. He has a map for field types, their settings and a good idea of how those fields will be used in the homepage template. With very little friction, Joe can be productive after his fun in the sun.</p>

<p>That&rsquo;s an example of a really simple channel, let&rsquo;s tackle something with a bit more substance.</p>

<p>The Portfolio Channel looks tasty, and will require a bit more thought about the fields it needs.</p>

<p>The Portfolio is going to be used in at least 3 areas:</p>

<ul>
<li>The homepage image slider</li>
<li>The Portfolio landing page - gallery</li>
<li>The individual highlight single-entry templates</li>
</ul>


<div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF8000">###&nbsp;Portfolio<br /><br /></span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Short&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">Required</span><span style="color: #007700">?&nbsp;&nbsp;|&nbsp;</span><span style="color: #0000BB">Searchable</span><span style="color: #007700">?&nbsp;&nbsp;|<br />|&nbsp;--------------------&nbsp;|&nbsp;------------------&nbsp;|&nbsp;-------------|&nbsp;----------&nbsp;|&nbsp;------------&nbsp;|<br />|&nbsp;</span><span style="color: #0000BB">Portfolio&nbsp;Hero&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">portfolio_hero&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br />|&nbsp;</span><span style="color: #0000BB">Portfolio&nbsp;Excerpt&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">portfolio_excerpt&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">textarea</span><span style="color: #007700">/</span><span style="color: #0000BB">RTE&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br />|&nbsp;</span><span style="color: #0000BB">Portfolio&nbsp;Detail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">portfolio_detail&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">textarea</span><span style="color: #007700">/</span><span style="color: #0000BB">RTE&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|&nbsp;</span><span style="color: #0000BB">y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">|<br /><br /></span><span style="color: #FF8000">#####&nbsp;Channel&nbsp;Notes<br /></span><span style="color: #0000BB">The&nbsp;Portfolio&nbsp;is&nbsp;Awesome</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Inc</span><span style="color: #007700">.</span><span style="color: #DD0000">'s&nbsp;showcase&nbsp;of&nbsp;previous&nbsp;work.&nbsp;As&nbsp;one&nbsp;of&nbsp;the&nbsp;most&nbsp;important&nbsp;aspects&nbsp;of&nbsp;Awesome'</span><span style="color: #0000BB">s&nbsp;business</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">it&nbsp;will&nbsp;feature&nbsp;in&nbsp;3&nbsp;prominent&nbsp;areas&nbsp;of&nbsp;the&nbsp;site</span><span style="color: #007700">.<br /><br />-&nbsp;</span><span style="color: #0000BB">The&nbsp;homepage&nbsp;image&nbsp;slider<br /></span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">The&nbsp;Portfolio&nbsp;landing&nbsp;page<br /></span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">The&nbsp;item</span><span style="color: #DD0000">'s&nbsp;detail&nbsp;single-entry&nbsp;template<br /><br />The&nbsp;`file`&nbsp;field&nbsp;will&nbsp;direct&nbsp;uploads&nbsp;to&nbsp;the&nbsp;appropriate&nbsp;upload&nbsp;destination:&nbsp;`/assets/portfolio/`<br /><br />`/assets/portfolio/`&nbsp;should&nbsp;be&nbsp;configured&nbsp;with&nbsp;image&nbsp;manipulations&nbsp;to&nbsp;create&nbsp;a&nbsp;`150px&nbsp;x&nbsp;150px`&nbsp;variant&nbsp;for&nbsp;use&nbsp;on&nbsp;the&nbsp;Portfolio&nbsp;gallery&nbsp;landing&nbsp;page.<br /><br />The&nbsp;`textarea`s&nbsp;will&nbsp;use&nbsp;ExpressionEngine'</span><span style="color: #0000BB">s&nbsp;native&nbsp;Rich&nbsp;Text&nbsp;Editor&nbsp;to&nbsp;allow&nbsp;the&nbsp;client&nbsp;to&nbsp;easily&nbsp;enter</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">edit&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">style&nbsp;content</span><span style="color: #007700">.<br /><br /></span><span style="color: #0000BB">The&nbsp;Hero&nbsp;field&nbsp;will&nbsp;be&nbsp;used&nbsp;on&nbsp;the&nbsp;homepage&nbsp;image&nbsp;slider&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">the&nbsp;detail&nbsp;single</span><span style="color: #007700">-</span><span style="color: #0000BB">entry&nbsp;page</span><span style="color: #007700">.<br /><br /></span><span style="color: #0000BB">The&nbsp;Excerpt&nbsp;will&nbsp;be&nbsp;used&nbsp;on&nbsp;rollover&nbsp;on&nbsp;the&nbsp;Portfolio&nbsp;gallery&nbsp;landing&nbsp;page&nbsp;</span><span style="color: #007700">and&nbsp;</span><span style="color: #0000BB">the&nbsp;homepage&nbsp;image&nbsp;slider&nbsp;callout</span><span style="color: #007700">.&nbsp;</span>
</span>
</code></div>


<p><a href="http://expressionengine.com/files/blog/portfolio_channel.jpg"><img src="http://expressionengine.com/files/blog/_thumbs/portfolio_channel.jpg" /></a></p>

<p>Even with more complex requirements, our teammates can dig right in, building this channel and supporting elements like an upload destination with image manipulations. Isn&rsquo;t that great!</p>

<h4>Get Cracking!</h4>

<p>I would love to take you through every aspect of site planning with Dev Docs, but you likely have a method to your madness.</p>

<p>I hope these 2 examples show the benefit to starting your project with documentation. With Dev Docs in hand, you will always have a reference to fall back on when you have to come back to a project months later to track down a bug, or get a sense for how implementing a new feature can impact the overall site.</p>

<p><strong>Bonus!</strong><br/>
Dev Docs also makes a great way to provide client documentation. You can include step-by-step directions, screenshots, notes - you get the idea!</p>

<p>To hear about the official release of Dev Docs 1.0 follow <a href="http://twitter.com/erikreagan">Erik Reagan on Twitter</a> and/or <a href="https://github.com/focuslabllc/dev_docs.ee_addon">the repository on GitHub.</a></p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[It&#8217;s gonna be #FRUPen&#8230;wait for it&#8230;dary! April 20 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/its_gonna_be_frupen_wait_for_it_dary" />
      <id>tag:expressionengine.com,2012:blog/12.17816</id>
      <published>2012-04-20T20:09:19Z</published>
      <updated>2012-04-23T14:09:20Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>This community rocks! Since the inception of the #FRUP, never have I seen the #FRUP hashtag used so much as I have this week. So many great things have happened, so let&rsquo;s round them up.</p>

<p>Remember, if you want us to showcase your news, be sure to tweet out your news with the <a href="http://twitter.com/#!/search/%23FRUP">#FRUP</a> hashtag, or add it to the <a href="http://expressionengine.com/forums/viewthread/215597">corresponding thread</a> for the week.</p>

<h4>From EllisLab</h4>

<ul>
<li><p>We&rsquo;re proud to announce that <a href="http://twitter.com/#!/dpdexter">David Dexter</a>, of the popular e-commerce add-on <a href="http://www.brilliantretail.com/">BrilliantRetail</a>, is joining the EE Reactor team!</p>
</li>
<li><p>Ever wonder what real time communication tools EllisLab uses? Well, our VP of Operations, Lisa Wess, <a href="http://ellislab.com/blog/comments/communication_tools_for_distributed_companies">talks on the tools we use</a>.</p>
</li>
<li><p>While Robert Eerhart did <a href="https://twitter.com/roberteerhart/status/193326232564273152">bake a cake</a>, he also does a great job with the EECI conference. Product Evangelist, Marcus Neto, talks about why you need to <a href="http://expressionengine.com/blog/entry/eeci_eu_2012">attend this year&rsquo;s conference</a>.</p>
</li>
</ul>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://rog.ee/">Michael Rog</a> updated <a href="http://rog.ee/show_me_my_assets">Show Me My Assets</a>, an add-on that replaces the &ldquo;File Manager&rdquo; CP link with a link to the Assets file browser.</p>
</li>
<li><p>Ben Croker of <a href="http://www.putyourlightson.net/">PutYourLightsOn</a> updated <a href="http://www.putyourlightson.net/expresso">Expresso</a> <strong>($)</strong> to version 2.1, adding an HTML5 video icon and dialog, as well as making the editor resizable.</p>
</li>
<li><p><a href="http://www.electricputty.co.uk">Electric Putty</a> updated <a href="http://betterworkflow.electricputty.co.uk/">Better Workflow</a> <strong>($)</strong> to 1.2.1, which offers a new extension hook ‘bwf_notify_users’. This can be used to create custom notification rules so that approval emails can be sent to specific people/groups. Also, they&rsquo;ve radically upgraded the preview/draft features to make them even more solid.</p>
</li>
<li><p><a href="http://viget.com/">Viget Labs</a> released <a href="http://devot-ee.com/add-ons/single-entry">Single Entry</a> <strong>($)</strong>, an add-on for those cases where you only need one entry for a given channel.</p>
</li>
<li><p><a href="http://masugadesign.com/">Masuga Design</a> released <a href="http://devot-ee.com/add-ons/link-vault">Link Vault</a> <strong>($)</strong>, for protecting downloads and tracking links. It’s used on devot-ee.com for all the commercial file downloads and to track free downloads.</p>
</li>
<li><p><a href="http://masugadesign.com/">Masuga Design</a> also released the <a href="http://devot-ee.com/add-ons/devotee-monitor">Devot:ee Monitor</a>, to help keep track of outdated add-ons in your EE installs.</p>
</li>
<li><p><a href="http://gotolow.com/">Low</a> released <a href="http://gotolow.com/addons/low-variables/changelog">Low Variables 2.2.0</a> <strong>($)</strong>, which includes a couple new API methods.</p>
</li>
<li><p><a href="http://pixelandtonic.com/">Pixel and Tonic</a> <a href="http://pixelandtonic.com/blog/low-variables">announced</a> that <a href="http://pixelandtonic.com/matrix">Matrix</a> <strong>($)</strong> and <a href="http://pixelandtonic.com/playa">Playa</a> <strong>($)</strong> are now fully compatible with <a href="http://gotolow.com/addons/low-variables/">Low Variables</a> <strong>($)</strong>!</p>
</li>
<li><p><a href="http://pixelandtonic.com/">Pixel and Tonic</a> also announced that <a href="http://pixelandtonic.com/assets">Assets</a> <strong>($)</strong> has been updated to support Matrix fields within Low Variables.</p>
</li>
<li><p>And finally, <a href="http://pixelandtonic.com/">Pixel and Tonic</a> released <a href="http://pixelandtonic.com/wygwam/releasenotes">Wygwam 2.5</a> <strong>($)</strong>, which adds a new &ldquo;<a href="http://pixelandtonic.com/wygwam/docs/templates#text_only">Text Only</a>&rdquo; tag mode.</p>
</li>
<li><p><a href="http://elivz.com/">Eli Van Zoeren</a> released <a href="http://devot-ee.com/add-ons/vz-average">VZ Average</a>, a flexible and minimal framework for rating or tallying anything in EE that you can identify with an ID.</p>
</li>
<li><p><a href="http://www.republic.se/en/">Republic Factory</a> updated <a href="http://devot-ee.com/add-ons/republic-analytics">Republic Analytics</a>, a Google Analytics add-on for your ExpressionEngine control panel.</p>
</li>
<li><p><a href="http://www.republic.se/en/">Republic Factory</a> also updated <a href="http://devot-ee.com/add-ons/republic-variables">Republic Variables</a>, an add-on to view, organize, and edit your global variables.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><p><a href="http://ee-podcast.com/episodes/remote-teams">Episode 67</a> of the EE Podcast is out, where our fearless leader Leslie Camacho talks on remote teams.</p>
</li>
<li><p>Low talks about his <a href="http://gotolow.com/blog/gee-up-expressionengine-training">upcoming ExpressionEngine training ventures</a>.</p>
</li>
<li><p>The folks over at <a href="http://madebyhippo.com/">Made By Hippo</a> are looking for a freelance developer with CodeIgniter and add-on development experience.</p>
</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><p><a href="http://www.garrant.com/">Garrant Consulting LLC</a> launched a new website for the <a href="http://ubuale.com/">Lake Placid Pub &amp; Brewery</a>.</p>
</li>
<li><p><a href="http://www.sixponyhitch.com/">Six Pony Hitch</a> launched a new responsive site for their company.</p>
</li>
<li><p><a href="http://www.sixponyhitch.com/">Six Pony Hitch</a> also launched a new responsive site for <a href="http://northwillamettevintners.org/">North Willamette Vintners</a>.</p>
</li>
<li><p><a href="http://flexispowered.nl/">Rommel</a> launched <a href="http://animage1day.com/">AnImage1Day</a>.</p>
</li>
<li><p><a href="http://www.jumpingjackrabbit.com/">Jackrabbit</a> launched <a href="https://greenstreamline.com/">GreenStreamline</a>.</p>
</li>
<li><p><a href="http://thisisstatic.com/">Static Interactive</a> launched <a href="http://revbrew.com/">Revolution Brewing</a>.</p>
</li>
<li><p><a href="http://sja.co.uk/">Steve Abraham</a> launched <a href="http://www.tulloch-homes.com/">Tulloch Homes</a>.</p>
</li>
<li><p><a href="http://mod-lab.com/">Minds On Design Lab</a> launched <a href="http://pact360.org/">Pact360</a>.</p>
</li>
<li><p><a href="http://mod-lab.com/">Minds On Design Lab</a> also launched <a href="http://autismacceptance.org/">Autism Acceptance Walk Virginia</a>.</p>
</li>
<li><p><a href="http://www.optimadesign.co.uk/">Optima Design</a> launched <a href="http://www.thecollectionmuseum.com/">The Collection</a>.</p>
</li>
<li><p><a href="http://www.madebyspark.com/">Spark Creative</a> launched <a href="http://esrgtech.com/">ESRG Tech</a>.</p>
</li>
<li><p><a href="http://www.madebyspark.com/">Spark Creative</a> also launched <a href="http://www.flex-admin.com/">Flexible Benefit Administrators</a></p>
</li>
</ul>

<p>I <strong>think</strong> I hit everything. It was a a <strong>lot</strong> of news. Which is totally awesome! Thanks everyone, have a great weekend.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[EECI EU 2012]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/eeci_eu_2012" />
      <id>tag:expressionengine.com,2012:blog/12.17810</id>
      <published>2012-04-19T13:41:17Z</published>
      <updated>2012-04-19T09:00:19Z</updated>
      <author>
            <name>Marcus Neto</name>
            <uri>http://marcusneto.com</uri>      </author>

      <category term="News"
        scheme="http://expressionengine.com/blog/entry/category/news"
        label="News" />
      <content type="html"><![CDATA[
        <p>Every year Robert Eerhart does a great job of making sure that our community in Europe is not left out of the <a href="http://eeciconf.com/">EECI goodness by hosting a conference</a> in his home town of Leiden, Netherlands. This year’s line up of speakers is going to be awesome. The roster reads like a who’s who from our development community. With folks like <a href="http://ee-zoo.com/">Filip Vanderstappen</a>, <a href="http://experienceinternet.co.uk/">Stephen Lewis</a>, <a href="http://ee-garage.com/">Leevi Graham</a> and <a href="http://digitalevangelist.net/">Steven Grant</a> (to name a few) speaking, you will definitely not want to miss this conference.</p>

<p>EECI is also a time of friendship building. If there is one thing we pride ourselves on at EllisLab, it is our focus on helping others. We may not toot our own horn often enough about this, but this caring attitude is contagious and is evident in the community that surrounds ExpressionEngine. At EECI you will find some very genuine folks that will raise a beer (or beverage of your choice) with you, talk you through your latest issue with an add-on, or talk to you about how to grow or protect your business. I’ve even known a <a href="http://iain.co.nz/">chap from New Zealand</a> who just won’t let you pass by him without giving you a hug <img src="http://ellislab.com/images/smileys/smile.gif" width="19" height="19" alt="smile" style="border:0;" /></p>

<p>So watch this video, and come to <a href="http://eeciconf.com/">EECI EU</a>.</p>

<iframe src="http://player.vimeo.com/video/40614399?title=0&amp;byline=0&amp;portrait=0" width="450" height="253" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><p><a href="http://vimeo.com/40614399">EECI EU</a> from <a href="http://vimeo.com/ellislab">EllisLab, Inc.</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

<p>&nbsp;</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[To In#FRUPity and Beyond. April 13 Edition.]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/to_infrupity_and_beyond_april_13_edition" />
      <id>tag:expressionengine.com,2012:blog/12.17786</id>
      <published>2012-04-13T17:30:39Z</published>
      <updated>2012-04-13T12:31:41Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Round Up Posts"
        scheme="http://expressionengine.com/blog/entry/category/round_up_posts"
        label="Round Up Posts" />
      <content type="html"><![CDATA[
        <p>It&rsquo;s time for another Friday Round Up Post! Remember to submit your news via <a href="http://twitter.com/#!/search/%23FRUP">#FRUP</a> on Twitter, or by means of <a href="http://expressionengine.com/forums/viewthread/215127">this thread</a>.</p>

<h4>Must Read</h4>

<ul>
<li><p>The new <a href="http://viget.com/">Viget</a> website is a thing of beauty. And the fact it is powered by ExpressionEngine only makes it all the more special. ExpressionEngine mastermind <a href="http://trevordavis.net/">Trevor Davis</a> gave us an inside look at the plan and channel structure of the new site in <a href="http://viget.com/extend/ee-side-of-the-new-viget-part-1">Part 1</a> of &ldquo;The ExpressionEngine Side of the New Viget.com&rdquo;. Well, he&rsquo;s back with <a href="http://viget.com/extend/ee-side-of-the-new-viget-part-2">Part 2</a>, where he goes even deeper in how the site functions. This time he focuses on code, templates, and custom add-ons. It&rsquo;s <strong>incredibly</strong> in depth, and personally, I love these kinds of posts. Great work Trevor!</p>
</li>
<li><p>Sometimes the parse order can trip you up. <a href="http://jamiepittock.com/">Jamie Pittock</a> talks about a scenario <a href="http://jamiepittock.com/words/2012/apr/11/expressionengine-snippets-low-variables/">when using snippets does such</a>. He then goes on to explain how to get around the parse order with <a href="http://gotolow.com/addons/low-variables">Low Variables</a>. Aside from the tutorial, Jamie also lists several other advantages to Low Variables. It&rsquo;s a <a href="http://jamiepittock.com/words/2012/apr/11/expressionengine-snippets-low-variables/">great read</a>.</p>
</li>
</ul>

<h4>Add-ons</h4>

<ul>
<li><p><a href="http://devot-ee.com/add-ons/proform-drag-and-drop-form-builder">ProForm</a> <strong>($)</strong> reaches a new milestone with the final release of version 1.0. This new release features an improved UI, multistep form support, a single template tag to render forms automatically, and even better support for 100% custom form markup. Check it out on <a href="http://devot-ee.com/add-ons/proform-drag-and-drop-form-builder">Devot:ee</a>, and be sure to read up on the <a href="http://metasushi.com/documentation/proform/">new features</a>. <a href="http://metasushi.com/">Isaac Raway</a> has put a lot of work into this, and if you have any suggestions or questions, <a href="http://devot-ee.com/add-ons/support/proform-drag-and-drop-form-builder/viewforum/1840">let him know</a>.</p>
</li>
<li><p><a href="http://nicolasbottari.com/">Nicolas Bottari&rsquo;s</a> control panel entry manager, <a href="http://devot-ee.com/add-ons/zenbu">Zenbu</a> <strong>($)</strong>, has been updated to <a href="http://nicolasbottari.com/expressionengine_cms/changelog/zenbu#1.5.4">1.5.4</a>, which contains mostly bug fixes.</p>
</li>
<li><p><a href="http://devot-ee.com/developers/laisvunas">Laisvunas</a> converted <a href="http://devot-ee.com/add-ons/guest-commenters">Guest Commenters</a> <strong>($)</strong> to work with ExpressionEngine 2. This extension validates server-side names and emails submitted by a non-logged in user against a regex, checks if they are used by a registered member, and outputs an error message if so.</p>
</li>
<li><p><a href="http://devot-ee.com/developers/laisvunas">Laisvunas</a> also converted <a href="http://devot-ee.com/add-ons/non-unique-url-titles">Non-unique URL titles</a> <strong>($)</strong> to work with ExpressionEngine 2. This extension allows you to customize how unique URLs are generated.</p>
</li>
<li><p><a href="http://devot-ee.com/developers/laisvunas">Laisvunas</a> has been busy! Also converted to EE 2 is  <a href="http://devot-ee.com/add-ons/value-trimmer">Value Trimmer</a> <strong>($)</strong>, an add-on that trims the values of entry, forum posts, and comment fields before saving them in the database.</p>
</li>
<li><p>And finally, <a href="http://devot-ee.com/developers/laisvunas">Laisvunas</a> has updated <a href="http://devot-ee.com/add-ons/unicode-normalizer">Unicode Normalizer</a> <strong>($)</strong>, an add-on which converts user&rsquo;s input into unicode&rsquo;s normalization form C.</p>
</li>
<li><p><a href="http://codetrio.com/">codeTrio</a> released <a href="http://devot-ee.com/add-ons/text-captcha">Text Captcha</a>, a CAPTCHA add-on that utilizes the services of <a href="http://textcaptcha.com/">textcaptcha.com</a></p>
</li>
<li><p><a href="http://codetrio.com/">codeTrio</a> also released <a href="http://devot-ee.com/add-ons/clean-html">Clean HTML</a>. This plugin cleans dirty HTML code, and allows you to truncate text to a certain length.</p>
</li>
<li><p><a href="http://gotolow.com/blog/low-search-20">Low Search 2.0</a> <strong>($)</strong> has been released! Just some of the many new features include Find &amp; Replace, new &ldquo;popular&rdquo; and &ldquo;url&rdquo; tags, a rebuild trigger, and search permissions. Be sure to check out a <a href="http://gotolow.com/addons/low-search">complete list of changes</a>.</p>
</li>
</ul>

<h4>Community News</h4>

<ul>
<li><a href="http://www.ryandownie.com/">Ryan Downie</a> and <a href="http://digitalevangelist.net/">Steven Grant</a> have launched the initial signup for <a href="http://eethem.es/">EEThem.es</a>, a site with premium ExpressionEngine themes for everyone&rsquo;s favorite publishing system.</li>
</ul>

<h4>Site Launches</h4>

<ul>
<li><a href="http://www.graftechnology.com/">Graf Technology</a> launched <a href="http://www.bconnectedllc.com/">BConnected</a>.</li>
</ul>

<h4>From EllisLab</h4>

<ul>
<li><p>You knew it was coming! Director of Services, Kevin Smith, reminds us that <a href="http://expressionengine.com/blog/entry/reminder_ee_1_public_support_ending_soon">ExpressionEngine 1 public support is ending soon</a>.</p>
</li>
<li><p>A new &ldquo;EllisLab How-To&rdquo; video on &ldquo;<a href="http://expressionengine.com/blog/entry/new_how_to_video_removing_index.php">Removing index.php</a>&rdquo; was published.</p>
</li>
<li><p>A showcase with the <a href="http://expressionengine.com/showcase/interview/university_of_florida_student_affairs">University of Florida Student Affairs</a> was published.</p>
</li>
<li><p>Remember, if you have an event you&rsquo;d like us to promote, <a href="http://expressionengine.com/events/add">let us know</a>!</p>
</li>
</ul>

<p>Thanks for the fun week everyone! Look forward to next week!</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[Reminder: EE 1 Public Support Ending Soon]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/reminder_ee_1_public_support_ending_soon" />
      <id>tag:expressionengine.com,2012:blog/12.17780</id>
      <published>2012-04-12T20:47:10Z</published>
      <updated>2012-04-12T16:00:12Z</updated>
      <author>
            <name>Kevin Smith</name>
                  </author>

      <category term="News"
        scheme="http://expressionengine.com/blog/entry/category/news"
        label="News" />
      <content type="html"><![CDATA[
        <p>As you may recall, we <a href="http://expressionengine.com/blog/entry/expressionengine_1.x_end_of_public_support_announcement">announced here</a> back in November a few big steps that we&#8217;re taking in transitioning EE 1 toward its status as a legacy product. The first was that new purchases of EE 2 made on or after December 5th, 2011 would no longer include EE 1. The second step that we announced was the upcoming end of public support for EE 1. Since that date is coming up soon, I wanted to update you on what to expect.</p>

<p>The support team and I have been hard at work over the last several months putting the finishing touches on the new private support plans we&#8217;ll be unveiling soon. Given that the announcement of the new plans and the end of public support for EE 1 are both close at hand, however, we&#8217;re going to make a bit of an adjustment to the previously announced deadline of April 23rd and bring the two changes in line with each other. Public support for EE 1 will continue until the new private support plans are available. The new plans will launch with an option for continued support for legacy products like EE 1. If you need to stay on EE 1 for whatever reason, we&#8217;ve got your back. Keep your eyes on this blog for more announcements in the near future.</p>

<p>While new private support plans will be announced soon, don&#8217;t forget that Enterprise support is already available. If your project or team needs a super quick, private, dedicated level of support, contact <a href="mailto:marcus.neto@ellislab.com">Marcus Neto</a> to get started.</p>      ]]></content>
    </entry>

    <entry>
      <title><![CDATA[New How-To Video: Removing index.php]]></title>
      <link rel="alternate" type="text/html" href="http://expressionengine.com/blog/entry/new_how_to_video_removing_index.php" />
      <id>tag:expressionengine.com,2012:blog/12.17764</id>
      <published>2012-04-10T21:18:29Z</published>
      <updated>2012-04-10T16:22:31Z</updated>
      <author>
            <name>Kyle Cotter</name>
            <uri>http://ellislab.com</uri>      </author>

      <category term="Education & Training"
        scheme="http://expressionengine.com/blog/entry/category/education_training"
        label="Education & Training" />
      <content type="html"><![CDATA[
        <p>Hello, you look nice today! We have a new &ldquo;How-To&rdquo; video just for you!</p>
<p>This one walks through the common task of removing index.php with the .htaccess file referenced in the <a href="http://expressionengine.com/user_guide/general/remove_index.php.html">user guide</a>. Enjoy!</p>
<iframe src="http://player.vimeo.com/video/39715858?title=0&amp;byline=0&amp;portrait=0&amp;loop=1" width="487" height="274" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><br /></p><p>Remember, we have a variety of other &ldquo;How-To&rdquo; videos ranging from installing ExpressionEngine, to finding your server path. Check them all out on our <a href="https://vimeo.com/tag:ellislabhowto">Vimeo page</a>.</p>      ]]></content>
    </entry>


</feed>
