{ |one, step, back| } http://onestepback.org/index.cgi Jim Weirich's Blog en-us { |one, step, back| } http://onestepback.org http://onestepback.org/images/jwface.gif Articles are Back! http://onestepback.org/index.cgi/General/ArticlesAreBack.red <p style="padding-left:3em;"><em>I&#8217;ve received a lot of requests for my old articles &#8230;</em></p> <h2>The Article Section has been Restored</h2> <p>When I changed to my new hosting machine, I moved all my blog posts but didn&#8217;t move any of the articles. Of course I <em>intended</em> to move them eventually but never got around to it.</p> <p>A lot of people have been asking for this article or that presentation, or pointing out that a number of old bookmarked links are no longer any good. So due to popular demand the <b>Articles and Presentations</b> section of onestepback.org is now restored.</p> <p>Enjoy</p> Comments Are Now Enabled http://onestepback.org/index.cgi/General/DiscusComments.red <p style="padding-left:3em;"><em>I&#8217;ve gone without comments on this blog for a long time &#8230;</em></p> <h2>Comments via Disqus</h2> <p>I&#8217;ve gone through several commenting systems for this blog over time. First was the really cool <a href="http://onestepback.org/index.cgi/Tech/Web/MoreWebApps.rdoc">TagSurf</a> application that allowed commenting on about any web page on the internet arbitrary tags. Unfortunately, TagSurf died a (in the words of its creator) &#8220;well deserved&#8221; death.</p> <p>Then I tried a wiki for comments. That worked pretty good (aside from spam issues), but setting up a new page for comments for each new post was just too much hassle.</p> <p>Now I&#8217;m trying <a href="http://disqus.com/docs/about/">Disqus</a> for comments. It only took an hour or so to integrate Disqus with my ancient blogging engine (anyone else still using Rublog?).</p> <p>Kick the tires and see how it works. If you have feedback &#8230; well, just leave a comment.</p> <p>I guess this means I&#8217;ll have to start writing some <em>real</em> content here so there will be something worth commenting on &#8230; let&#8217;s see if there is anything I feel like ranting about &#8230;</p> <p>(Oh, and a hat tip to <a href="http://brionesandco.com/ryanbriones/">Ryan Briones</a> for pointing out Disqus when I was ready to go out and implement something from scratch.)</p> Moving Blog Host http://onestepback.org/index.cgi/General/MovingBlogHost.red <p style="padding-left:3em;"><em>I am changing host for the One Step Back blog.</em></p> <h2>It&#8217;s Time to Move</h2> <p>This is just a quick little post to let you know that the One Step Back blog is moving. In fact, it has already moved. But don&#8217;t worry, we aren&#8217;t going far.</p> <p>Originally this blog was hosted on a shared co-op system run by <a href="http://www.n2net.net/">N2Net</a>. It was dirt cheap and easy to maintain. The down side was that support was sporadic. As the hardware has aged, the Co-op has decided to let the current system run until the hardware dies, and then disolve the co-op.</p> <p>Today there are tons more hosting opportunities available than there were when the co-op was first formed. I&#8217;m now leasing a Linode <a href="http://www.linode.com/">node</a> and running the blog and other associated software from there. Its almost as inexpensive and the co-op and uptime <em>should</em> be better.</p> <p>Write now the blog has been moved. As time passes I&#8217;ll move the article archive as well. Let me know if anything looks amiss.</p> <p>&#8212;Jim Weirich</p> Presenting Code ... An Update http://onestepback.org/index.cgi/General/PresentingCodeUpdate.red <p style="padding-left:3em;"><em>I received some feedback on the &#8216;Presenting Code&#8217; post from yesterday.</em></p> <h2>Presenting Code &#8230; An Update</h2> <p>I got lots of feedback on the &#8220;Presenting Code&#8221; post. In addition to <a href="http://beust.com/weblog">Cédric Beust&#8217;s</a> initial comments, the following people had something to say on the topic:</p> <p><a href="http://johnwilger.com/">John Wilger</a> asked on Twitter why I didn&#8217;t use &#8220;file:&#8221; (rather than &#8220;http:&#8221; and a local web server). Unfortunately, Keynote will not do a web view from a &#8220;file:&#8221; style <span class="caps">URL</span>.</p> <p><a href="http://www.madstop.com/">Luke Kanies</a> reports that he does something similar. He uses Vim (rather than Ruby + the Syntax gem) to generate the highlighted <span class="caps">HTML</span>. He also adds:</p> <blockquote> <p><em>In general, this method works out great, but the one thing I would say is that you should <strong>always</strong> uncheck &#8220;automatic update&#8221;. Otherwise, you&#8217;ll find that it tries to update 10 seconds before your presentation starts and your web server isn&#8217;t available.</em></p> </blockquote> <p>Ok, that&#8217;s good advice. <span class="caps">BTW</span>, I would be very interested in a script (AppleScript or Ruby+OSA) that would iterate over the pages in a Keynote presentation and refresh all the WebViews. Any takers?</p> <p><a href="http://blog.grayproductions.net/">James Edward Gray II</a> and <a href="http://www.clarkware.com">Mike Clark</a> mentioned the <span class="caps">HTML</span> output bundle. James gives the following details:</p> <ul> <li>Select Bundles → TextMate → Create <span class="caps">HTML</span> From Document (or Create <span class="caps">HTML</span> From Document With Line Numbers, if you prefer)</li> <li>Preview the document in TextMate with Window ⇢ Show Web Preview</li> <li>Highlight and Edit → Copy the content you want from the <span class="caps">HTML</span> window</li> <li>Switch to Keynote and Edit → Paste</li> </ul> <p>Mike (who credits <a href="http://codefluency.com">Bruce Williams</a> as his source for this tip) also provided a <a href="http://s3.amazonaws.com/pragmaticstudio/textmate-keynote.mov">video</a>.</p> <p>Couple of items on the above:</p> <ol> <li>When creating the <span class="caps">HTML</span> from the document, convert the whole document. Once in Web Preview mode you can cut and paste only what you want.</li> <li>Choose a TextMate theme with a background that matches the background in your presenetation to get the best effect for your colors.</li> </ol> <p><a href="http://drnicwilliams.com/">Dr. Nic</a> also mentions a &#8220;Copy as <span class="caps">RTF</span>&#8221; TextMate bundle. (I&#8217;m not sure if this is the same as James and Mike&#8217;s hint above or something different).</p> <p>Finally, <a href="http://mysterycoder.blogspot.com/">Chris Nelson</a> confirms (via Twitter): &#8220;AFAIK there is no equivalent of web views in OpenOffice :(&#8220;</p> Presenting Code http://onestepback.org/index.cgi/General/PresentingCode.red <p style="padding-left:3em;"><em>This exchange on twitter got me thinking&#8230;</em></p> <h2>Twittering &#8230;</h2> <p>I noticed the following twitter conversation this evening between <a href="http://twitter.com/objo" title="Joe O'Brien">objo</a> and <a href="http://twitter.com/superchris" title="Chris Nelson">superchris</a>:</p> <blockquote> <p><strong><span style="color:blue;">superchris:</span></strong> any good recommendations on showing code samples in OpenOffice Impress?</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">objo:</span></strong> @superchris yeah, get a mac and use Keynote</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">objo:</span></strong> otherwise, I would screenshot emacs</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">superchris:</span></strong> @objo.. ya know, i almost added &#8220;And I&#8217;ll smack anyone who says get a Mac&#8221; but ran out of space</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">superchris:</span></strong> @objo&#8230; but actually your idea of using NetBeans screenshots is pretty good</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">objo:</span></strong> @superchris you never listen &#8230;. <span class="caps">EMACS</span> not netbeans. Come on man.</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">superchris:</span></strong> @objo just being helpful by translating for you.. :)</p> </blockquote> <blockquote> <p><strong><span style="color:blue;">superchris:</span></strong> planning to code with NetBeans on linux forever for no other reason but to annoy @objo</p> </blockquote> <h2>ScreenShots &#8230; Yuck!</h2> <p>The problem Chris is trying to solve is putting code snippets into a presentation. There just isn&#8217;t a good way to do this in modern presentation programs.</p> <p>In the old days, I would generate my presentation completely in <span class="caps">HTML</span> from a simple text markup file. The generation process was controlled by rake. This allowed me to changed the code, run the unit tests and rebuild the presentation all with a simple rake command. Eventually, I got up to speed with <span class="caps">CSS</span> and could make some really nice looking presentations, all from <span class="caps">HTML</span>.</p> <p>Although I could get nice looking slides with <span class="caps">CSS</span>, it was a lot of work getting it to work just so. Eventually, I abandoned that approach and swithed to a modern slide presentation program (Keynote in my case).</p> <p>Although generating the slides is a bit easier in Keynote (or PowerPoint, or Open Office Impress), reproducing code for technical talks is much harder. You generally have two choices:</p> <ol> <li>Cut and paste the code text into Keynote losing any syntax highlighting you might have had, or</li> <li>Take a screen shot of the code in your fancy editor, preserving the syntax highlighting but losing the &#8220;text&#8221; nature of the code.</li> </ol> <p>Neither option is pleasant. The former punishes the audience by making the code harder to read, the latter punishes you making the presentation hard to change. (I once saw Dave Thomas giving a Ruby talk and he noticed that he had a minor typo in the code. He switched to edit mode in Keynote with the intent of fixing it on the spot, then he realized that the code was in a graphic image and was uneditable).</p> <p>Of the two options, I&#8217;ve been using the text cut&#8217;n&#8217;paste technique for most things. In the twitter conversation above, Chris is considering the edit snapshot technique.</p> <h2>Other Options?</h2> <p>I&#8217;ve heard rumors of someone working on a script that will insert code snippets into the Keynote data file directly. Unfortunately, as far as I know, they are still rumors at this time.</p> <p>But here&#8217;s another idea. I&#8217;ve prototyped this, and think it will work. But be warned I haven&#8217;t tried this on a really presentation yet.</p> <h2>Presenting Code &#8230; A Proof of Concept</h2> <p>While perusing the options in Keynote, I noticed an insert option called &#8220;Web View&#8221;</p> <p><img src="http://onestepback.org/images/rublog/present_code/present_code_web_view.jpg" alt="" /></p> <p>It turns out that this option allows you to include a web page in your presentation. For example, here is my blog inserted directly into the presentation. Clicking on the &#8220;web view&#8221; object will show an &#8220;update&#8221; button that will refresh that page from the web.</p> <p><img src="http://onestepback.org/images/rublog/present_code/present_code_blog.jpg" alt="" /></p> <p>So, all I have to do is get the code onto a web page, formatted nicely with syntax highlighting, and Keynote will suck it into the presentation, more or less automatically for me. Cool.</p> <p>Getting it formatted is easy. That&#8217;s just a small little Rake task with a good syntax highlighting library. I used <code>Syntax</code> (its a gem, docs on Rubyforge), but there are other options out there.</p> <p>Here&#8217;s the rakefile:</p> <pre class="ruby"> #!/usr/bin/env ruby require "rake/clean" CLOBBER.include('*.html') task :default =&gt; :extract task :extract =&gt; "hello.html" file "hello.html" =&gt; "hello.rb" do extract "hello.html", "hello.rb" end </pre> <p>and here is the <code>rakelib/extract.rake</code> library:</p> <pre class="ruby"> #!/usr/bin/env ruby require 'syntax/convertors/html' def extract(outfile, infile) open(outfile, "w") do |out| out.puts "&lt;html&gt;" out.puts " &lt;head&gt;" out.puts " &lt;style type=\"text/css\"&gt;" out.puts %( .ruby { font-size: 24pt; font-weight: bold; } .ruby .normal {} .ruby .comment { color: #888; font-style: italic; } .ruby .keyword { color: #A00; font-weight: bold; } .ruby .method { color: #077; } .ruby .class { color: #074; } .ruby .module { color: #050; } .ruby .punct { color: #447; font-weight: bold; } .ruby .symbol { color: #099; } .ruby .string { color: #944; } .ruby .char { color: #F07; } .ruby .ident { color: #004; } .ruby .constant { color: #07F; } .ruby .regex { color: #B66; } .ruby .number { color: #D55; } .ruby .attribute { color: #377; } .ruby .global { color: #3B7; } .ruby .expr { color: #227; }) out.puts " &lt;/style&gt;" out.puts " &lt;/head&gt;" out.puts " &lt;body&gt;" out.puts " &lt;pre class=\"ruby\"&gt;" code = open(infile) { |f| f.read } convertor = Syntax::Convertors::HTML.for_syntax("ruby") html = convertor.convert(code) out.puts html out.puts " &lt;/pre&gt;" out.puts " &lt;/body&gt;" out.puts "&lt;/html&gt;" end end </pre> <p>Edit the <span class="caps">CSS</span> styles above to tweek the output to exactly the colors you want. I&#8217;ve added a large font-size line to make the code big enough for teh presentation (I hate small code fonts in presentations, you can ask <a href="http://twitter.com/objo">objo</a> about my rants on <em>that</em> topic.)</p> <p>Now we need to get the code on a web page. No need to get fancy here. I have a script called <code>servefiles</code> that will start a webrick process that serves files from the current directory. Just start it up with &#8220;servefiles 3333&#8221; (the 3333 is the port to use). Servefiles will display its <span class="caps">URL</span> in its startup message, like so:</p> <pre class="shell"> $ servefiles 3333 URL: http://tardis.local:3333 [2008-03-23 00:47:37] INFO WEBrick 1.3.1 [2008-03-23 00:47:37] INFO ruby 1.8.6 (2008-03-03) [i686-darwin9.2.0] [2008-03-23 00:47:37] INFO WEBrick::HTTPServer#start: pid=874 port=3333 </pre> <p>Here&#8217;s the code for <code>servefiles</code>:</p> <pre class="ruby"> #!/usr/bin/env ruby require 'webrick' include WEBrick dir = Dir::pwd port = (ARGV.first || (12000 + (dir.hash % 1000))).to_i puts "URL: http://#{Socket.gethostname}:#{port}" s = HTTPServer.new( :Port =&gt; port, :DocumentRoot =&gt; dir ) trap("INT"){ s.shutdown } s.start </pre> <p>Now all we have to do is cut and paste the <span class="caps">URL</span> given by <code>servefiles</code> into keynote and append the <span class="caps">HTML</span> file name we wish to add to our presentation:</p> <p><img src="http://onestepback.org/images/rublog/present_code/present_code_hello.jpg" alt="" /></p> <p>Now, to update the code in the presentation, I need to:</p> <ol> <li>Edit the original code base (and run unit tests against it).</li> <li>Run rake</li> <li>Press the &#8220;Update Now&#8221; button in Keynote.</li> </ol> <p>Not bad.</p> <h2>It&#8217;s Just a Proof of Concept</h2> <p>Just be warned, I haven&#8217;t tried this in a real presentation yet. I&#8217;ve just spent an hour or so seeing if all the pieces would work together. There are some obvious things to explore.</p> <ul> <li>The extraction code could be enhanced to pull snippets from files based on tags. Or even better, being able to say &#8220;Extract Method m from Class C&#8221;.</li> </ul> <ul> <li>I&#8217;m using a fixed font size, but extract could easily take the font size as an argument or even calculate the proper font size given the amount of text found in the snippet.</li> </ul> <ul> <li>I&#8217;ve not played with the &#8220;Update automatically&#8221; checkbox in the Keynote dialog. I&#8217;m not sure <em>when</em> it automatically updates, but it is possible that using it might mean you don&#8217;t even need step three above.</li> </ul> <p>I will probably experiment some more with then in my next code heavy presentation. Let me know if you try this and how it work for you.</p> <h2><span class="caps">UPDATE</span></h2> <p><a href="http://beust.com/weblog/">Cédric Beust</a> points out that cutting and pasting from Eclipse to PowerPoint does preserve syntax highlighting. I verified the same is true for Eclipse and Keynote. However all the other IDEs and editors I tried (NetBeans, Coda, TextMate, Emacs) will paste as plain, uncolored text in Keynote. So, if you are going the cut and paste route, you might want to consider using Eclipse for the cut source.</p> <p>Just for kicks I tried the presentation software in OpenOffice with the same result. Eclipse copies will preserve highlighting, none of the others will.</p> <p>So, there you have it.</p> Joining EdgeCase http://onestepback.org/index.cgi/General/JoiningEdgeCase.red <p style="padding-left:3em;"><em>Hello EdgeCase!</em></p> <p style="float: right; padding: 0.5em;"><a href="http://theedgecase.com"><img src="http://onestepback.org/images/rublog/edgecase.gif" border="0"/></a></p> <p>This is exciting news &#8230; well, exiting for <em>me</em> at least.</p> <p>I have just accepted a position with <a href="http://theedgecase.com">EdgeCase</a>, an agile software firm started by Joe O&#8217;Brien, Chad Humphries and Ken Barker located in Columbus Ohio. EdgeCase is focussed on agile software development and delivering Ruby on Rails solutions, a perfect match for my passions, skills and abilities.</p> <p>I have known Joe for a long time, and we have a deep, mutual respect for each other. I am extremely excited to be a part of his team.</p> <p>I still have a few remaining responsibilities with <a href="http://compuware.com">Compuware</a> that will be discharged over the next few weeks before starting full time with EdgeCase. I&#8217;ve been at Compuware for nearly 12 years and I&#8217;ve had some great assignments and really wonderful learning opportunities while working for them. But this chance to work with Joe and the gang is a golden opportunity that I am not willing to pass up.</p> Fireworks on the Fourth of July http://onestepback.org/index.cgi/General/FourhOfJulyFireworks.red <p style="padding-left:3em;"><em>We had some fireworks on the 4th of July &#8230; Unfortunately they weren&#8217;t the usual kind.</em></p> <h2>Fireworks on the 4th</h2> <p>It is a tradition in the US to fire off fireworks on the 4th of July in celebration of Independence day. Well, the Weirich household had some fireworks, but it&#8217;s not what you would expect.</p> <p>What we thought at the time was a really loud firecracker from the neighbors turned out to be a close lightening strike, probably hitting the phone line. I discovered later that my <span class="caps">DSL</span> router (attached to the phone line) was dead (as in no lights, no power).</p> <p>After a picking up a new <span class="caps">DSL</span> router on Wednesday from the phone company, it still didn&#8217;t connect and the phone company promised to send a technician out one Friday. Arrgh! Three days with no internect! Sigh.</p> <p>The technician arrives Friday, checks out the wiring and decides to upgrade the &#8220;system&#8221;. Part of the upgrade is another new <span class="caps">DSL</span> router (different model from the replacement unit I picked up Wednesday). We connect up the laptop to the <span class="caps">DSL</span> router and everything looks great.</p> <p>So once the phone guy leaves, I start hooking up the rest of the network: firewall router, network hub, wireless base station, and the other computers in the house.</p> <p>And nothing works.</p> <p>It looks like the lightening not only took out my <span class="caps">DSL</span> router, but it also got the firewall, network hub and wireless base station. Fortunately, I have another firewall and hub in my spare parts box.</p> <h3>Bad Cables?</h3> <p>I&#8217;m not certain of the total extent of the damage yet. The cables running to the other computers in the basement seem to be bad now (tested by against my working laptop). Since I don&#8217;t have long enough replacement cables, I haven&#8217;t checked out the network cards in two of the computers yet.</p> <p>I am a bit surprised by the cables going bad. I understand delicate electronic equipment fried by lightening, but the cables are just wires and connectors. For them to be bad must mean the strike was strong enough to short them out somehow. And that doesn&#8217;t sound good for the network cards at the other end of the cable. Sigh.</p> <p>On the good side, the my desktop computer that sits right next to the network equipment is up and running on the network. So one would that the network card in it is ok. However, it does seem to be a bit slow when browsing web pages. I mean <strong>really</strong> slow. I timed it against my laptop. What loads two seconds on my laptop takes over 20 seconds on the desktop. But that sounds more like a network configuration error than a hardware issue. Sigh, more work to do.</p> <p>At any rate, it looks like there will be a run to the local computer store soon.</p> Breedlove Tour http://onestepback.org/index.cgi/General/BreedloveTour.red <p style="padding-left:3em;"><em>Extra-Curicular Activities during <span class="caps">OSCON</span> Week.</em></p> <h2>The Breedlove Guitar Company</h2> <p>During the week of <span class="caps">OSCON</span>, I took Monday off to drive down to Tumalo Oregon and take a tour of the Breedlove Guitar factory. I&#8217;ve owned a Breedlove guitar for 6 years and really love it. This was a fanstastic chance to see the place where it was made. I&#8217;ve posted some <a href="http://onestepback.org/gallery/Breedlove-Guitar-Tour">pictures from the tour</a> if you would like to see them.</p> War at the Movie Theater http://onestepback.org/index.cgi/General/Movies/StarWarsIII.red <p style="padding-left:3em;"><em>Yes, I saw Star Wars, Episode <span class="caps">III</span>. But that&#8217;s not the war I&#8217;m talking about.</em></p> <h2>Episode <span class="caps">III</span></h2> <p>My daughter and I went to the midnight showing of &#8220;Revenge of the Sith&#8221;. (Quick review: Yes, worth seeing; no, Lucas still can&#8217;t write a love scene.) But this blog is not about the movie, it&#8217;s about the <em>event</em>.</p> <p>Imagine this picture&#8230; You are in a room full of Star Wars geeks, many of whom are dressed in elaborate costumes with expensive (as in over $200) light sabers. You have been waiting for hours for the show to start, and have suffered through the trailers. The obligatory &#8220;Please turn off all cell phones&#8221; and &#8220;Remember our concession stand&#8221; message are now playing and the movie event of the year is just seconds away from starting.</p> <p>Pause now with this picture in your mind and think about how the Star Wars movies always start. I know you&#8217;ve seen them. The big <span class="caps">STAR WARS</span> logo flashes on screen, the brass fanfare sounds and the words &#8220;In a galaxy far, far away&#8221; start scrolling on the screen.</p> <p>Also remember that if you are at the midnight showing, then you are there not only for the movie (which you will probably see several times over the next few weeks), but for the <em>experience</em>, the <em>event</em>! The final movie is showing and you just want to drink in the experience and feel the mood.</p> <p>And then seconds before the movie starts&#8230; the projector skips a beat and the frame gets out of synchronization with the projector. The top half of the screen is now showing at the bottom, and the bottom of the screen is at the top. The logo was split across the screen so that it read:</p> <pre> WARS ----- STARS </pre> <p>The room was in an uproar! Chants of &#8220;FIX IT&#8221; and &#8220;RESTART&#8221; echoed throughout the theater. The crowd reacted as if the projector malfunction was <em>ruining</em> the whole experience. Someone in the back of the room stood up and blocked the projection beam so that the picture could not be seen &#8230; and the crowd <em>cheered</em> because they did not want to see a flawed first performance (why shutting one&#8217;s eyes was not sufficient was never clear to me).</p> <p>The theater staff was not exactly helpful. At first someone came out and said that they would get it fixed shortly and would restart the film. And they did get it fixed within a few minutes, but didn&#8217;t restart it. It didn&#8217;t matter, the crowd was so upset that they kept chanting &#8220;RESTART&#8221; after the picture was fixed. Finally the staff came out and said that weren&#8217;t able to restart it (never sure just why), and that the problem was in all the theaters (Really? In all 20 theaters in the movieplex? In what way are the theaters linked so that the same problem happens in all them at the same time?)</p> <p>Finally it was obvious that they weren&#8217;t restarting it, and the crowd settled down and we could begin to watch the show. At that point, we were in the middle of a space battle (I&#8217;m not quite sure who was fighting who), and there were little drilling droids on Obi wan&#8217;s fighter. Oh well, it was Star Wars and we settled in to enjoy it.</p> <p style="padding-left:3em;"> An aside: You got to believe that a significant portion of that midnight showing crowd was planning on multiple viewings of the movie. Lets say two-thirds were planning on seeing it more than once. With 20 sold out theaters with 200 to 300 people per theater makes (around) 5000 people there that night. Now if two-thirds of 5000 were going to <em>pay</em> to see the movie twice, but now have a free pass, that right around $30,000 that was lost that night. Wow. That&#8217;s an expensive mistake.</p> <p>Oh, and I have one other piece of advice to those going to midnight Star Wars showings. If you are going to go in costume, go all out and do it right. If you show up with a Darth Vadar helmet that looks like it came from a K-Mart Halloween costume rack, and the Darth Vadar standing next to you looks as if he just stepped off the movie set ... well, you look pretty silly.</p> <p>Just go see the movie and enjoy it.</p> Cautiously Optimistic http://onestepback.org/index.cgi/General/CautiouslyOptimistic.rdoc I am cautiously optimistic that a minor change in UseMod wiki code that I am using for feedback may have slowed down the wiki spam bots a bit. The fix is <em>very</em> simple. I just require that any links on the wiki page spell the protocol portion of their link URL in upper case. <p> For example, if I wish to link to <a href="http://onestepback.org">http://onestepback.org</a> on a wiki page, then I must spell the link as <a href="http://onestepback.org">HTTP://onestepback.org</a>. Otherwise the updated page will be rejected. </p> <p> Since the wiki spammers currently use lower case for &quot;http&quot;, their page updates are rejected. Now this will only work until the spammer catch on and start uppercasing the HTTP. As long as the number of sites that enforce this rule is small, it should be a while before they catch on (one hopes). </p> <p> Since I have implemented this patch a week ago, I have had only one instance of spamming. Yes, the spammer used an upper case HTTP. I don&#8217;t know if that particular spammer always uses upper case, or just responded intelligently to my error message. But that hasn&#8217;t been repeated. Like I say, I&#8217;m cautiosly optimistic. </p> <p> You can find the patch here: </p> <ul> <li><a href="http://onestepback.org/packages/usemod_antispam.patch">http://onestepback.org/packages/usemod_antispam.patch</a> </li> </ul> <p> The patch was created against version 1.0 of UseMod wiki. </p> <p> By posting this, I&#8217;ve (probably) increased the number of sites using this anti-spam technique and have brought the day closer to when the spammers figure it out. Oh, well. We will worry about that when it happens. </p> <hr size="2"></hr><ul> <li><a href="http://onestepback.org/cgi-bin/osbwiki.pl?FeedBack/CautiouslyOptimistic">Feedback</a> </li> </ul>