<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3010982230869903808</id><updated>2011-07-30T21:48:46.620-07:00</updated><category term='CI'/><category term='Expression Engine'/><category term='blog spam'/><category term='Performance'/><category term='conference'/><category term='extension'/><category term='EE'/><title type='text'>Matt Perry -- Web Dev Notebook</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-2992148872865540066</id><published>2010-02-17T16:38:00.000-08:00</published><updated>2010-02-17T16:40:09.672-08:00</updated><title type='text'>Yo -- I has moved</title><content type='html'>Hey this blog has moved to &lt;a href="http://webdevnotebook.com"&gt;WebDevNotebook.com&lt;/a&gt; -- I even bought a domain for it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-2992148872865540066?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/2992148872865540066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2010/02/yo-i-has-moved.html#comment-form' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2992148872865540066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2992148872865540066'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2010/02/yo-i-has-moved.html' title='Yo -- I has moved'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-2681932435354640981</id><published>2009-10-26T09:00:00.000-07:00</published><updated>2009-10-26T09:39:24.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='EE'/><title type='text'>EECI2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3528/4039668564_2ee30788f3.jpg"&gt;&lt;img style="cursor: pointer; width: 500px; height: 333px;" src="http://farm4.static.flickr.com/3528/4039668564_2ee30788f3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Image:  Leslie Camacho of Ellis Labs announces the upcoming release of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;EE&lt;/span&gt; 2.0.&lt;br /&gt;&lt;br /&gt;I was lucky enough to attend &lt;a href="http://www.eeci2009.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;EECI&lt;/span&gt;2009&lt;/a&gt; in the Netherlands last week.  Overall, the strongest &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;EE&lt;/span&gt;/CI conference I've attended so far, which is perhaps a good sign for the growing community around these products.  It was an interesting thing to have both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;EE&lt;/span&gt; and CI people in the same building.  I hadn't thought about it all that much, but these two communities are very different, and it was sort of amusing to see all of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;EE&lt;/span&gt; people (designer-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ish&lt;/span&gt;, stylish, expensive bags) mix with the CI people (nerdy, large brains, beer, blunt.)&lt;br /&gt;&lt;br /&gt;There are also a growing number of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;EE&lt;/span&gt; &lt;span style="font-style: italic;"&gt;developers&lt;/span&gt; who extend and modify that platform.  Chief of this tribe is no doubt &lt;a href="http://www.spolsace.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Solspace&lt;/span&gt;&lt;/a&gt;'s Paul &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Burdick&lt;/span&gt;.  He gave an excellent presentation on add-on development which clarified a number of issues about the future of this important activity for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;EE&lt;/span&gt;.  Here, in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;PDF&lt;/span&gt; form, are the &lt;a href="http://bit.ly/addons_eeci2009"&gt;slides&lt;/a&gt;.  Paul is responsible for a number of major add-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;ons&lt;/span&gt;, including the tag module.  He is one of the original developers of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;EE&lt;/span&gt; itself, having been the main &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;dev&lt;/span&gt; at Ellis Labs for quite a while.  The other major emerging &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;EE&lt;/span&gt; add-on developers were at the conference as well.  These folks include &lt;a href="http://brandon-kelly.com/"&gt;Brandon Kelly&lt;/a&gt; and &lt;a href="http://leevigraham.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Leevi&lt;/span&gt; Graham&lt;/a&gt;.  In true Australian form, Levy wore a outback-looking hat for the duration of the conference.  (My apologies Leevi if it was in fact some other sort of hat.)&lt;br /&gt;&lt;br /&gt;The big news at the conference was that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;EE&lt;/span&gt; 2.0, the new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;codeigniter&lt;/span&gt;-based version of the product will be released on December 1, 2009.  There was much rejoicing when this long-delayed announcement was made.  Now, after the rejoicing, I'm sure that there's quite a bit of hand-wringing/scrambling going on across the community.  Many people who rely on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;EE&lt;/span&gt; for their business (&lt;a href="http://www.grist.org/"&gt;Grist&lt;/a&gt; included) are now trying to figure out if/when/how to integrate this new development into our work.  Part of what I heard from the likes of Paul made this easier to think about -- it's now clear that a)  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;EE&lt;/span&gt;1.6 will continue to be supported for quite a while yet and b) many important add-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;ons&lt;/span&gt; for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;EE&lt;/span&gt; may not be ready for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;EE&lt;/span&gt;2 any time very soon.  So there's certainly no pressure to upgrade, and plenty of reason to wait, play with the new product and see what happens.  We also heard about a planned EE 2.1 release, which sounds like a more stable basis for an enterprise-upgrade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-2681932435354640981?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/2681932435354640981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/eeci2009.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2681932435354640981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2681932435354640981'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/eeci2009.html' title='EECI2009'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3528/4039668564_2ee30788f3_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-5088556559967914453</id><published>2009-10-02T16:39:00.000-07:00</published><updated>2009-10-02T16:44:51.101-07:00</updated><title type='text'>Rogues' Gallery of EE Developers</title><content type='html'>A lineup of EE developers @ EERoadshow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqBm-pFuRKA/SsaP4VKuTrI/AAAAAAAAAWY/FrVW2HU-8W8/s1600-h/IMG_0155.JPG"&gt;&lt;img style="cursor: pointer; width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_QqBm-pFuRKA/SsaP4VKuTrI/AAAAAAAAAWY/FrVW2HU-8W8/s320/IMG_0155.JPG" alt="" id="BLOGGER_PHOTO_ID_5388152202112945842" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-5088556559967914453?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/5088556559967914453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/rogues-gallery-of-ee-developers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/5088556559967914453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/5088556559967914453'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/rogues-gallery-of-ee-developers.html' title='Rogues&apos; Gallery of EE Developers'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqBm-pFuRKA/SsaP4VKuTrI/AAAAAAAAAWY/FrVW2HU-8W8/s72-c/IMG_0155.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-2157153879095577152</id><published>2009-10-02T15:17:00.000-07:00</published><updated>2009-10-02T15:32:07.296-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>EE Performance Guidelines from Paul Burdick at Solspace</title><content type='html'>Paul Burdick at &lt;a href="http://www.solspace.com/"&gt;Solspace&lt;/a&gt; has written a totally awesome document about &lt;a href="http://www2.grist.org/misc/Performance_Guidelines.pdf"&gt;EE Performance Guidelines&lt;/a&gt;.  With his permission, I'm sharing it.  Please contact Paul or Solspace directly for updates or a site evaluation.&lt;br /&gt;&lt;br /&gt;While I'm on the subject, here's the two add-ons currently in Solspace's new &lt;a href="http://www.solspace.com/software/tags/tag/performance"&gt;performance suite&lt;/a&gt;.  This includes Morsels -- a new DB-based acceleration method, and Page Caching, a method to cache entire pages as flat files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-2157153879095577152?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/2157153879095577152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/ee-performance-guidelines-from-paul.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2157153879095577152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2157153879095577152'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/ee-performance-guidelines-from-paul.html' title='EE Performance Guidelines from Paul Burdick at Solspace'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-2436162557192993148</id><published>2009-10-01T23:29:00.000-07:00</published><updated>2009-10-07T16:31:06.563-07:00</updated><title type='text'>Expression Engine and Performance</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqBm-pFuRKA/SsWe9JrmM-I/AAAAAAAAAWQ/YcfR0xLrz0Y/s1600-h/eeroadshow-blip-70.png"&gt;&lt;img style="cursor: pointer; width: 75px; height: 75px;" src="http://2.bp.blogspot.com/_QqBm-pFuRKA/SsWe9JrmM-I/AAAAAAAAAWQ/YcfR0xLrz0Y/s320/eeroadshow-blip-70.png" alt="" id="BLOGGER_PHOTO_ID_5387887302626653154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tomorrow I'm leading a session at the &lt;a href="http://www.eeroadshow.com/"&gt;Expression Engine Road Show&lt;/a&gt; here in Seattle about EE and high traffic sites.  Here's a link to the slides from that presentation for those who are interested.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www2.grist.org/misc/EEandPerformance.ppt"&gt;EEandPerformance.ppt&lt;/a&gt; (large &gt; 2M)&lt;br /&gt;&lt;br /&gt;This covers topics like:  general site performance best practices, EE caching methods, applying EE caching and then gives sort of a miscellany of considerations one needs to think about when using EE in a high traffic environment.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-2436162557192993148?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/2436162557192993148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/expression-engine-and-performance.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2436162557192993148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/2436162557192993148'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/10/expression-engine-and-performance.html' title='Expression Engine and Performance'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QqBm-pFuRKA/SsWe9JrmM-I/AAAAAAAAAWQ/YcfR0xLrz0Y/s72-c/eeroadshow-blip-70.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-3520455394512669075</id><published>2009-08-13T10:35:00.000-07:00</published><updated>2009-10-07T16:12:55.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='blog spam'/><title type='text'>Recapthca for Expression Engine Member Registration</title><content type='html'>&lt;span style="font-size:100%;"&gt;Well, due to some recent drama involving blog spam at &lt;a href="http://www.grist.org/"&gt;Grist&lt;/a&gt;, I had the opportunity to cook up an ExpressionEngine extension that implements reCaptcha for EE signup.&lt;br /&gt;&lt;br /&gt;EE provides a convenient hook for overriding the (rather weak) native EE captcha, so getting the captcha to appear on the signup form is  simply an exercise in taking the convenient &lt;a href="http://recaptcha.net/plugins/php/"&gt;reCaptcha PHP library&lt;/a&gt; and invoking its get_html method at the appropriate time.  The resulting HTML simply overrides the result of the usual captcha method from EE.  Here are the relevant lines from the extension:&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;require_once($PREFS-&gt;ini('system_folder_path').'extensions&lt;br /&gt;/mp_recaptcharecaptchalib.php');&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$EXT-&gt;end_script = TRUE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;return recaptcha_get_html($PREFS-&gt;ini('recaptcha_public_key'));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now the captcha appears on ths signup form, and it's time to turn our attention to processing. There are three requirements: 1) we need to invoke a check of the reCaptcha at the appropriate moment 2) we need to cleanly pass an error back to the signup process on failure and 3) we need to override or at least mask the native captcha check.  Here's my approach:&lt;br /&gt;&lt;br /&gt;EE provides the &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;member_member_register_start&lt;/span&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;hook at the beginning of the registration routine.  At that point it's quite easy to do the reCaptcha check:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;require_once($PREFS-&gt;ini('system_folder_path').'extensions/mp_recaptcha/recaptchalib.php');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$resp = recaptcha_check_answer ($reCaptchaPrivateKey,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                $IN-&gt;IP,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                $_POST["recaptcha_challenge_field"],&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                $_POST["recaptcha_response_field"]);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;But how to handle the response?   &lt;span style="font-family:courier new;"&gt;member_member_register_start&lt;/span&gt; only allows injection of logic into the registration process (ie -- you can't affect the return value of the method in which it appears.)  You can, however, affect the session and any globals.  So here's the trick I used.&lt;br /&gt;&lt;br /&gt;In the registration form, I added:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;input type="hidden" name="captcha" value="1"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;And in the method involked when the captcha is created, I did the following:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$DB-&gt;query("INSERT INTO exp_captcha (date, ip_address, word) VALUES (UNIX_TIMESTAMP(), '".$IN-&gt;IP."', '1')");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This means that EE will always be expecting a captcha response of "1", and will always get it UNLESS some outside force intervenes.  This is where the result of the reCaptcha web service check comes in.  If the result is successfull, we do nothing, and allow EE to think its native captcha check went perfectly.  If the result indicates failure, then I do the following in the method invoked at &lt;span style="font-family:courier new;"&gt;member_member_register_start&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$_POST['captcha'] = '';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This little change will cause EE's native captcha check to think that it has failed, and produce its normal errors upon a captcha failure.&lt;br /&gt;&lt;br /&gt;I'd be happy to provide the entire extension to anyone who is interested, but I feel like it needs a little cleaning, documenting and generalization in order to stand on its own two feet.  Perhaps I'll post it here soon.  Until then, let me know if you'd like a copy.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-3520455394512669075?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/3520455394512669075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/08/recapthca-for-expression-engine-member.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/3520455394512669075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/3520455394512669075'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/08/recapthca-for-expression-engine-member.html' title='Recapthca for Expression Engine Member Registration'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3010982230869903808.post-5830766905770430642</id><published>2009-07-16T09:52:00.000-07:00</published><updated>2009-07-16T09:53:40.867-07:00</updated><title type='text'>First Post</title><content type='html'>This is my new place to stash information, techniques and other discoveries I make while developing and designing products for the web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3010982230869903808-5830766905770430642?l=webdevnotebook.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://webdevnotebook.blogspot.com/feeds/5830766905770430642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://webdevnotebook.blogspot.com/2009/07/first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/5830766905770430642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3010982230869903808/posts/default/5830766905770430642'/><link rel='alternate' type='text/html' href='http://webdevnotebook.blogspot.com/2009/07/first-post.html' title='First Post'/><author><name>Matt Perry</name><uri>http://www.blogger.com/profile/07550973407161283019</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_QqBm-pFuRKA/Sl9blZrLEtI/AAAAAAAAAVs/QEnvg9bRPK0/S220/soccer3.jpg'/></author><thr:total>0</thr:total></entry></feed>
