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

<channel>
	<title>PCR&#039;s notepad &#187; web development</title>
	<atom:link href="http://notepad.patheticcockroach.com/category/internet/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://notepad.patheticcockroach.com</link>
	<description>The area in patheticcockroach.com where the EEG isn&#039;t isoelectric</description>
	<lastBuildDate>Sun, 05 Feb 2012 12:11:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Enriching Notepad++&#8217;s lang.xml to add better MySQL support</title>
		<link>http://notepad.patheticcockroach.com/2704/enriching-notepads-lang-xml-to-add-better-mysql-support/</link>
		<comments>http://notepad.patheticcockroach.com/2704/enriching-notepads-lang-xml-to-add-better-mysql-support/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 16:17:55 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=2704</guid>
		<description><![CDATA[For the moment, Notepad++ is my editor of choice to edit MySQL stuff. Its syntax highlighting works nice, however for some reason it lacks quite a few keywords, such as DATETIME and UNSIGNED. I don&#8217;t know the reason for this, maybe those types are MySQL-specific and not generic SQL types, but anyway I don&#8217;t really [...]]]></description>
			<content:encoded><![CDATA[<p>For the moment, <a href="http://notepad-plus-plus.org/">Notepad++</a> is my editor of choice to edit MySQL stuff. Its syntax highlighting works nice, however for some reason it lacks quite a few keywords, such as DATETIME and UNSIGNED. I don&#8217;t know the reason for this, maybe those types are MySQL-specific and not generic SQL types, but anyway I don&#8217;t really care about generic SQL, I just want a more comprehensive highlighting for the SQL I use &#8211; MySQL.<br />
Fortunately, it&#8217;s very easy to add language elements: you just need to edit langs.xml (+/- langs.model.xml, I&#8217;m not really sure if you need to edit both, but that&#8217;s what I did), find the SQL section (starts with something like <code>&lt;Language name="sql" ext="sql" commentStart="/*" commentEnd="*/"&gt;</code>), and add the tags. Without further ado, here&#8217;s my edited SQL section. Note that for the moment I didn&#8217;t really add many tags (just the *cough* 5 at the very bottom&#8230;), but more <del>will</del> should come as I stumble upon them&#8230;</p>
<p><code>&lt;Language name="sql" ext="sql" commentStart="/*" commentEnd="*/"&gt;<br />
	&lt;Keywords name="instre1"&gt;abs absolute access acos add add_months adddate admin after aggregate all allocate alter and any app_name are array as asc ascii asin assertion at atan atn2 audit authid authorization autonomous_transaction avg before begin benchmark between bfilename bin binary binary_checksum binary_integer bit bit_count bit_and bit_or blob body boolean both breadth bulk by call cascade cascaded case cast catalog ceil ceiling char char_base character charindex chartorowid check checksum checksum_agg chr class clob close cluster coalesce col_length col_name collate collation collect column comment commit completion compress concat concat_ws connect connection constant constraint constraints constructorcreate contains containsable continue conv convert corr corresponding cos cot count count_big covar_pop covar_samp create cross cube cume_dist current current_date current_path current_role current_time current_timestamp current_user currval cursor cycle data datalength databasepropertyex date date_add date_format date_sub dateadd datediff datename datepart day db_id db_name deallocate dec declare decimal decode default deferrable deferred degrees delete dense_rank depth deref desc describe descriptor destroy destructor deterministic diagnostics dictionary disconnect difference distinct do domain double drop dump dynamic each else elsif empth encode encrypt end end-exec equals escape every except exception exclusive exec execute exists exit exp export_set extends external extract false fetch first first_value file float floor file_id file_name filegroup_id filegroup_name filegroupproperty fileproperty for forall foreign format formatmessage found freetexttable from from_days fulltextcatalog fulltextservice function general get get_lock getdate getansinull getutcdate global go goto grant greatest group grouping having heap hex hextoraw host host_id host_name hour ident_incr ident_seed ident_current identified identity if ifnull ignore immediate in increment index index_col indexproperty indicator initcap initial initialize initially inner inout input insert instr instrb int integer interface intersect interval into is is_member is_srvrolemember is_null is_numeric isdate isnull isolation iterate java join key lag language large last last_day last_value lateral lcase lead leading least left len length lengthb less level like limit limited ln lpad local localtime localtimestamp locator lock log log10 long loop lower ltrim make_ref map match max maxextents mid min minus minute mlslabel mod mode modifies modify module month months_between names national natural naturaln nchar nclob new new_time newid next next_day nextval no noaudit nocompress nocopy none not nowait null nullif number number_base numeric nvl nvl2 object object_id object_name object_property ocirowid oct of off offline old on online only opaque open operator operation option or ord order ordinalityorganization others out outer output package pad parameter parameters partial partition path pctfree percent_rank pi pls_integer positive positiven postfix pow power pragma precision prefix preorder prepare preserve primary prior private privileges procedure public radians raise rand range rank ratio_to_export raw rawtohex read reads real record recursive ref references referencing reftohex relative release release_lock rename repeat replace resource restrict result return returns reverse revoke right rollback rollup round routine row row_number rowid rowidtochar rowlabel rownum rows rowtype rpad rtrim savepoint schema scroll scope search second section seddev_samp select separate sequence session session_user set sets share sign sin sinh size smallint some soundex space specific specifictype sql sqlcode sqlerrm sqlexception sqlstate sqlwarning sqrt start state statement static std stddev stdev_pop strcmp structure subdate substr substrb substring substring_index subtype successful sum synonym sys_context sys_guid sysdate system_user table tan tanh temporary terminate than then time timestamp timezone_abbr timezone_minute timezone_hour timezone_region to to_char to_date to_days to_number to_single_byte trailing transaction translate translation treat trigger trim true trunc truncate type ucase uid under union unique unknown unnest update upper usage use user userenv using validate value values var_pop var_samp varchar varchar2 variable variance varying view vsize when whenever where with without while with work write year zone<br />
	mediumint datetime tinyint text unsigned&lt;/Keywords&gt;<br />
&lt;/Language&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/2704/enriching-notepads-lang-xml-to-add-better-mysql-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lists of Tor nodes</title>
		<link>http://notepad.patheticcockroach.com/2500/lists-of-tor-nodes/</link>
		<comments>http://notepad.patheticcockroach.com/2500/lists-of-tor-nodes/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 18:02:52 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=2500</guid>
		<description><![CDATA[Having a list of Tor nodes can always be a useful resource for spam-fighting, even though unfortunately most of those lists most often don&#8217;t make the difference between nodes which are just a relay and nodes which are also exit points. So, here are a few listings that seems to be regularly updated (as of [...]]]></description>
			<content:encoded><![CDATA[<p>Having a list of Tor nodes can always be a useful resource for spam-fighting, even though unfortunately most of those lists most often don&#8217;t make the difference between nodes which are just a relay and nodes which are also exit points.</p>
<p>So, here are a few listings that seems to be regularly updated (as of today, at least):</p>
<ul>
<li><a href="http://torstatus.all.de/index.php?SR=Bandwidth&#038;SO=Desc">http://torstatus.all.de/index.php?SR=Bandwidth&#038;SO=Desc</a>: has lots of details (notably, they do make the difference between exit nodes and simple relays), but is probably not trivial to parse automatically. NB: if you&#8217;re on Firefox, beware that it will slow down the browser massively for a few seconds. It&#8217;s fine on Iron, though.</li>
<li><a href="http://torstatus.blutmagie.de/index.php?SR=Bandwidth&#038;SO=Desc">http://torstatus.blutmagie.de/index.php?SR=Bandwidth&#038;SO=Desc</a>: pretty much the same as the previous one (still a Fx killer, notably!), but hosted elsewhere.</li>
<li><a href="http://torstatus.rueckgr.at/index.php">http://torstatus.rueckgr.at/index.php</a>: and the same again, somewhere else.</li>
<li><a href="http://www.ircproxy.net/torlist/">http://www.ircproxy.net/torlist/</a>: just a list of IPs, probably great to parse. Also mention the update date, even though I guess it&#8217;s not a guarantee.</li>
<li><a href="http://files.sabmx.net/pg2/tor_block.txt">http://files.sabmx.net/pg2/tor_block.txt</a>: also just a list of IP, indicated as IP ranges.</li>
<li><a href="http://teksimple.com/tornodes.txt">http://teksimple.com/tornodes.txt</a>: that&#8217;s probably the easiest one to parse: just a text list, one IP per line, update date and time on first line.</li>
</ul>
<p>Note however that it seems pretty much impossible to perform a DDoS attack from the Tor network (limitation #1 being it doesn&#8217;t really have that much bandwidth available), so there&#8217;s no reason to be a jackass like <a href="https://www.dan.me.uk/tornodes" rel="nofollow">Daniel Austin MBCS</a> and ban all traffic from Tor nodes. Particularly, blocking traffic from non-exit nodes altogether is seriously retarded. Purely banning all traffic from Tor also means you&#8217;d simply play along <a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act">SOPA</a> and alike. You might want instead to maybe just make the spam filter harsher, or systematically manual, on contents coming from Tor.<br />
Well, anyway, you got the list now act smart with it. <img src='http://notepad.patheticcockroach.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/2500/lists-of-tor-nodes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL stored procedures: #1172 &#8211; Result consisted of more than one row</title>
		<link>http://notepad.patheticcockroach.com/2460/mysql-stored-procedures-1172-result-consisted-of-more-than-one-row/</link>
		<comments>http://notepad.patheticcockroach.com/2460/mysql-stored-procedures-1172-result-consisted-of-more-than-one-row/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 19:21:12 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=2460</guid>
		<description><![CDATA[I&#8217;ve been playing with MySQL&#8217;s stored procedures for a few months now. I like how they let me reduce the traffic between the web server and the database server, and how they help make the PHP code more readable. I&#8217;m not a big fan of OOP (I do use it when it&#8217;s really helpful, though, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing with MySQL&#8217;s stored procedures for a few months now. I like how they let me reduce the traffic between the web server and the database server, and how they help make the PHP code more readable. I&#8217;m not a big fan of OOP (I do use it when it&#8217;s really helpful, though, but I try to limit it) so it&#8217;s always good to have other neat ways to clean the code. However, stored procedures still have a few shortcomings. Notably the fact that unlike some urban myth says, it seems that MySQL doesn&#8217;t precompile its procedures (I don&#8217;t remember where I read that, sorry), for the moment at least (I guess it&#8217;s somewhere in the to-do list for far-far-away future development). But also the fact that you can&#8217;t replace everything with them.</p>
<p>For instance, say you want to use a query like SELECT * FROM some_table WHERE some_filed IN(&#8220;a value&#8221;,&#8221;another value&#8221;,&#8230;,&#8221;and another value&#8221;). Well, unless you know from the beginning how many values you&#8217;ll have in the IN(&#8230;), and create one input variable for each of them (dirty, dirty!), you can&#8217;t feed them to your procedure: it doesn&#8217;t take arrays. I forgot all the things I found, as what I retained for my use is that I&#8217;ll keep building the queries in PHP when such cases arise, but for the bravest here are <a href="http://stackoverflow.com/questions/7194658/sending-a-list-of-values-of-the-same-field-to-mysql-stored-procedure">some dirty hacks</a> you can do to bypass this limitation.</p>
<p>Another problem is that it can&#8217;t deal with queries returning more than one row (except for the case when that query is actually the end of the procedure). So if you want to do something like this:<br />
<code>SELECT id_thread <strong>INTO tmpDiscID</strong> FROM pm_threads WHERE id_member_started=id_auteurIn AND id_thread>minimalDiscID AND date_heure_creation=date_heureIn AND titre=titreIn AND member_count=member_countIN;</code>, you&#8217;d better be damn sure it will return only one row, or add LIMIT 1 (but the latest only works if you know you want the first resulting row). About this, you can check out <a href="http://stackoverflow.com/questions/7194658/sending-a-list-of-values-of-the-same-field-to-mysql-stored-procedure">Stackoverflow &#8211; Sending a list of values of the same field to MySQL stored procedure</a>, <a href="http://stackoverflow.com/questions/8307939/how-to-retreive-multiple-rows-from-stored-procedure-in-mysql">Stackoverflow &#8211; How to retreive multiple rows from stored procedure in mysql?</a> and <a href="http://forums.mysql.com/read.php?98,57399,57457">MySQL forums &#8211; Re: New to sp, ERROR 1172 (42000): Result consisted of more than one row</a>.</p>
<p>Well, that&#8217;s it for this post. Sorry only issues no real solution, apart from: just don&#8217;t make it a point to do everything in stored procedures. Some things just can&#8217;t be done this way, or at least not in an efficient (so, not in a worthy) way.</p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/2460/mysql-stored-procedures-1172-result-consisted-of-more-than-one-row/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Banning an IP in WordPress</title>
		<link>http://notepad.patheticcockroach.com/2199/banning-an-ip-in-wordpress/</link>
		<comments>http://notepad.patheticcockroach.com/2199/banning-an-ip-in-wordpress/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 07:32:22 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[web development]]></category>
		<category><![CDATA[web filtering]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=2199</guid>
		<description><![CDATA[This time I&#8217;ve had it with that spammer from IP 193.105.210.41 (on SFS &#8211; on HoneyPot). I first installed some Stop Spammer Registrations Plugin, which made it much easier to report spammers to SFS, but which for some reason fails to block that ****** spammer from IP 193.105.210.41. That one is a very imaginative spammer [...]]]></description>
			<content:encoded><![CDATA[<p>This time I&#8217;ve had it with that spammer from IP 193.105.210.41 (<a href="http://www.stopforumspam.com/search.php?q=193.105.210.41">on SFS</a> &#8211; <a href="http://www.projecthoneypot.org/ip_193.105.210.41">on HoneyPot</a>). I first installed some <a href="http://www.blogseye.com/i-make-plugins/stop-spammer-registrations-plugin/">Stop Spammer Registrations Plugin</a>, which made it much easier to report spammers to SFS, but which for some reason fails to block that ****** spammer from IP 193.105.210.41. That one is a very imaginative spammer who almost always uses an e-mail @mail15.com, and spam links to the non-resolving domain bestfinance-blog dot com. The plugin claims it blocked 298 spammers, and actually it seems it does block like 10 daily spams, but for some reason that 193.105.210.41 always passes through. Anyway, time to take some more drastic action: a real IP ban.</p>
<p>First I found the standard way of banning an IP in WordPress: it&#8217;s in <em>Settings => Discussion</em>, then scroll to <em>Comment Blacklist</em>, where you can enter banned IP, but also banned words, URLs, etc. The problem with that is that according to the description, the comment isn&#8217;t refused, it&#8217;s just placed in the spam queue. Which doesn&#8217;t solve my problem at all, all comments already fall into the moderation queue anyway&#8230;</p>
<p>I could try to find a specific banning plugin, but I don&#8217;t want to have too many plugins, particularly if it&#8217;s only to block one single moron. So, I&#8217;m left with the server-ban solution. I first thought about banning the IP with iptables, but that&#8217;s a bit too drastic IMO. I finally thought I could just ban it with .htaccess. Easy to do, light on the server, the perfect solution. You just need to add the following in the WordPress .htaccess file (check out <a href="http://httpd.apache.org/docs/2.2/howto/access.html">the doc</a> if you need more details):<br />
<code>Order allow,deny<br />
Allow from all<br />
deny from 193.105.210.41</code><br />
There&#8217;s just a little trick to prevent WordPress from overwriting your changes: <a href="http://www.redcardinal.ie/blogs/11-06-2007/stop-wordpress-overwriting-htaccess/">do NOT</a> place them inside the WordPress block, ie place them before <code># BEGIN WordPress</code> or after <code># END WordPress</code>.</p>
<p>That&#8217;s all, the spammer is banned now, and they won&#8217;t even flood your spam comments queue anymore&#8230; until they get a new IP, of course, but then you&#8217;ll have new data to submit to your favorite blacklist <img src='http://notepad.patheticcockroach.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Edit a week later: looks like the guy got a new IP pretty quickly after that .htaccess ban. He started spamming from IP <a href="http://www.stopforumspam.com/search.php?q=91.212.226.143">91.212.226.143</a> just the day after, and after a week he hit us again from that new IP&#8230; on more line in my .htaccess lol.</p>
<p>Update (2011-12-29): That bloody spammer keeps coming with different IPs, always successfully bypassing the SFS plugin while being reported hundreds of times at SFS&#8230; Since his IPs are from the same range, I searched a bit more and I just stumbled upon <a href="http://wordpress.org/support/topic/blocking-ips-with-htaccess">this 5 year old thread about banning IPs by wildcard</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/2199/banning-an-ip-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to add Google Adsense code to Gallery 3</title>
		<link>http://notepad.patheticcockroach.com/2027/how-to-add-google-adsense-code-to-gallery-3/</link>
		<comments>http://notepad.patheticcockroach.com/2027/how-to-add-google-adsense-code-to-gallery-3/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 20:23:39 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=2027</guid>
		<description><![CDATA[I already presented Gallery 3 in a previous post. I just upgraded gal.patheticcockroach.com to Gallery 3.0.2, so I had to place the stat tracking code again, as well as to replace the .htaccess with my modified version for pretty URLs. And in the process I decided to add some Adsense ads, too. After some thinking [...]]]></description>
			<content:encoded><![CDATA[<p>I already presented Gallery 3 in a <a href="http://notepad.patheticcockroach.com/1355/how-to-add-stat-tracking-code-to-gallery-3/">previous post</a>. I just upgraded gal.patheticcockroach.com to Gallery 3.0.2, so I had to place the stat tracking code again, as well as to replace the .htaccess with my modified version for pretty URLs. And in the process I decided to add some Adsense ads, too. After some thinking I figured that a good place to put them would be at the top, just below the menu and above the gallery titles.</p>
<p>More precisely, the place we want to reach is just between <code>&lt;div id="yui-main"&gt;</code> and <code>&lt;div class="yui-b"&gt;</code>. First problem: there&#8217;s not Adsense ad that matches the available space: the 768&#215;90 leaderboard is just a bit too wide. I picked a simple solution: I placed 2 ads side by side: a 468&#215;60 banner plus a 234&#215;60 half-banner. It just fits the available width (in the default theme, Wind, at least) and compared to the big leaderboard it also uses 33% less height (I&#8217;ve always thought that 90 pixels is starting to get a bit too big).</p>
<p>Let&#8217;s get started then; once again the file to edit is <code>/themes/wind/views/page.html.php</code>.<br />
Find:<br />
<code>&lt;div id="yui-main"&gt;<br />
&lt;div class="yui-b"&gt;</code><br />
&#8230;and between those two add your Adsense units. You need to place them in a few divs so that they lay side by side instead of stacking on each other. Here&#8217;s a full code sample (NB: I wrote the divs added for layout in bold):</p>
<blockquote><p>&lt;div id=&#8221;yui-main&#8221;&gt;<br />
<strong>&lt;div style=&#8221;width:702px;height:60px;border:1px solid #bbb;margin-left:10px;&#8221;&gt;<br />
	&lt;div style=&#8221;float:left;&#8221;&gt;</strong>&lt;script type=&#8221;text/javascript&#8221;&gt;&lt;!&#8211;<br />
	google_ad_client = &#8220;ca-pub-9471398824076666&#8243;;<br />
	/* 468&#215;60 for pcr gallery */<br />
	google_ad_slot = &#8220;8724036694&#8243;;<br />
	google_ad_width = 468;<br />
	google_ad_height = 60;<br />
	//&#8211;&gt;<br />
	&lt;/script&gt;<br />
	&lt;script type=&#8221;text/javascript&#8221;<br />
	src=&#8221;http://pagead2.googlesyndication.com/pagead/show_ads.js&#8221;&gt;<br />
	&lt;/script&gt;<br />
	<strong>&lt;/div&gt;<br />
	&lt;div style=&#8221;float:left;&#8221;&gt;</strong>&lt;script type=&#8221;text/javascript&#8221;&gt;&lt;!&#8211;<br />
	google_ad_client = &#8220;ca-pub-9471398824076666&#8243;;<br />
	/* 234&#215;60 for pcr gallery */<br />
	google_ad_slot = &#8220;2196553125&#8243;;<br />
	google_ad_width = 234;<br />
	google_ad_height = 60;<br />
	//&#8211;&gt;<br />
	&lt;/script&gt;<br />
	&lt;script type=&#8221;text/javascript&#8221;<br />
	src=&#8221;http://pagead2.googlesyndication.com/pagead/show_ads.js&#8221;&gt;<br />
	&lt;/script&gt;<br />
	<strong>&lt;/div&gt;<br />
&lt;/div&gt;</strong><br />
&lt;div class=&#8221;yui-b&#8221;&gt;</p></blockquote>
<p>That&#8217;s all <img src='http://notepad.patheticcockroach.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  You can see the result <a href="http://gal.patheticcockroach.com/">there</a>.<br />
Note that the reason why there&#8217;s a border here is because I used it to find the proper dimensions. It actually looks nice too IMO, however it will spoil the layout a bit for people with ad-blocking software&#8230; so you may want to remove the height as well as the border for the div containing the ads. That&#8217;s what I did on my gallery indeed.</p>
<p>NB: if you&#8217;re not the I-modify-files-by-hand type, you can use a plugin/module such as <a href="http://codex.gallery2.org/Gallery3:Modules:adsense">this one</a>, too. Personally I&#8217;m always a bit afraid of those Gallery modules, they don&#8217;t seem to be regularly maintained yet&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/2027/how-to-add-google-adsense-code-to-gallery-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A &#8220;Valid HTML 5&#8243; button (plus a &#8220;Valid CSS&#8221; one)</title>
		<link>http://notepad.patheticcockroach.com/1733/a-valid-html-5-button-plus-a-valid-css-one/</link>
		<comments>http://notepad.patheticcockroach.com/1733/a-valid-html-5-button-plus-a-valid-css-one/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 09:08:15 +0000</pubDate>
		<dc:creator>David Dernoncourt</dc:creator>
				<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://notepad.patheticcockroach.com/?p=1733</guid>
		<description><![CDATA[I don&#8217;t really do a lot of &#8220;hand-coded&#8221; pages now, but still when I do I&#8217;ve always liked to emphasize the fact that it&#8217;s fully compliant with current standards. After all, with all the defects in current browsers (mainly MSIE, even though MSIE 9 fixed quite a lot of issues), it&#8217;s pretty time-consuming to figure [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t really do a lot of &#8220;hand-coded&#8221; pages now, but still when I do I&#8217;ve always liked to emphasize the fact that it&#8217;s fully compliant with current standards. After all, with all the defects in current browsers (mainly MSIE, even though MSIE 9 fixed quite a lot of issues), it&#8217;s pretty time-consuming to figure out how to both be standard compliant and work well in all browsers. And, what&#8217;s better than some nice looking &#8220;valid HTML 5&#8243; and &#8220;valid CSS&#8221; buttons pointing to a validator to show off that work? The problem is, the W3C is always late on their &#8220;valid X&#8221; buttons (and even those outdated ones are hard to find, actually &#8211; I just spent 5 minutes searching for the official page listing them with no success) (edit: 2 months later I managed to <a href="http://www.w3.org/QA/Tools/Icons">find them</a>, woohoo! <img src='http://notepad.patheticcockroach.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).<br />
So&#8230; I decided I&#8217;d just go ahead and do the job myself. The W3C made a whole page about a <a href="http://www.w3.org/html/logo/">proposed new HTML 5 logo</a>, so I took it as a starting point. I also found <a href="http://www.w3.org/Consortium/Legal/logo-usage-20000308">some W3C logos there</a>. Finally I got a <a href="http://en.wikipedia.org/wiki/File:Checkbox.svg">green checkbox picture there</a> (NB: <a href="http://en.wikipedia.org/wiki/File:Checkbox-red.svg">red version there</a>). Put those altogether with Inkscape, using the same color as in the good old XHTML valid buttons, and here is the result:</p>
<div style="text-align:center;margin-bottom:2em;"><img src="http://img.patheticcockroach.com/01/valid-html5-button.png" alt="Valid CSS button" width="87" height="31"/></div>
<p>Since this doesn&#8217;t really match the design of current valid buttons, I also made a valid CSS one (no version specified since that thing seems to be an eternal draft :s). Here it is:</p>
<div style="text-align:center;margin-bottom:2em;"><img src="http://img.patheticcockroach.com/01/valid-css-button.png" alt="Valid CSS button" width="87" height="31"/></div>
<p>Hope you like them and will use it to point to validators on your valid HTML 5 and CSS pages <img src='http://notepad.patheticcockroach.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://notepad.patheticcockroach.com/1733/a-valid-html-5-button-plus-a-valid-css-one/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

