<?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>An Experiment in Bloggery &#187; trac</title>
	<atom:link href="http://kevin.sb.org/tag/trac/feed/" rel="self" type="application/rss+xml" />
	<link>http://kevin.sb.org</link>
	<description>The occasional view into my life</description>
	<lastBuildDate>Fri, 09 Sep 2011 00:19:38 +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>The Resurrection of Typosphere</title>
		<link>http://kevin.sb.org/2007/01/22/the-resurrection-of-typosphere/</link>
		<comments>http://kevin.sb.org/2007/01/22/the-resurrection-of-typosphere/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 19:34:00 +0000</pubDate>
		<dc:creator>Kevin Ballard</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[Planet Argon]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[typo]]></category>
		<category><![CDATA[Typosphere]]></category>

		<guid isPermaLink="false">http://54f021aa-61c3-4e07-82f3-51e46c740bca</guid>
		<description><![CDATA[After months of absence, Typosphere has returned from the dead! We migrated off of Planet Argon and onto DreamHost, where we should have more control. We also upgraded to Trac 0.10.3 and turned off anonymous editing (users now have to register to file a ticket). This should (hopefully) prevent the issue that lead to Typosphere [...]]]></description>
			<content:encoded><![CDATA[<p>After months of absence, <a href="http://www.typosphere.org">Typosphere</a> has returned from the dead!</p>

<p>We migrated off of <a href="http://www.planetargon.com">Planet Argon</a> and onto <a href="http://www.dreamhost.com">DreamHost</a>, where we should have more control.
We also upgraded to <a href="http://trac.edgewall.org">Trac</a> 0.10.3 and turned off anonymous editing (users now have to register to file a ticket).
This should (hopefully) prevent the issue that lead to Typosphere dying in the first place.</p>

<div class="highlight">
<p>One important thing to note is that as part of this process, we also moved the subversion repository.
Unfortunately, the old repository was hosted as an svn:// URI using the typosphere.org domain, which meant
there was no way to preserve this URI (since we can&#8217;t run long-lived background daemons on DreamHost). The
new URI uses http and a new subdomain, so if necessary we can move the repository without moving the website.</p>

<p style="text-align: left">The new repository URL is <a href="http://svn.typosphere.org/typo/trunk">http://svn.typosphere.org/typo/trunk</a>.</p>
</div>

<p><span id="more-136"></span></p>

<p>The issue, as near as I can tell, is Typosphere started getting spammed massively. At this time none of the
developers (and that includes me) was really paying attention to Typo, as we were busy with other things. So
for about a month Typosphere Trac got so full of spam that, well, it was more spam in one location than
I&#8217;ve ever seen in the rest of my life. This managed to trip a bug in Trac that caused it to start sucking
CPU and RAM, and so Planet Argon turned off Trac for our account.</p>

<p>Some time later, the other developers and I started trying to resurrect Typosphere. Unfortunately, at about
this time the systems administrator for Planet Argon was preparing to leave the company, so any attempts at
contacting him to resolve the issue went unanswered. I eventually called Planet Argon (which is how I learned
that the systems administrator had, in fact, left that very day) and spoke to the new systems administrator. He
agreed to try and fix Trac for us, but after hearing nothing for a few days, I decided it would be better to seek
hosting elsewhere.</p>

<p>Luckily, I had access to a <a href="http://www.dreamhost.com">DreamHost</a> account with plenty of spare bandwidth and disk space,
so we decided to move there. For the most part the migration went smoothly, until I started up Trac and discovered
exactly how much spam was in there.</p>

<p>This problem stumped me for about 2 weeks. I spent several hours trying to clean it by hand one day, and after those
several hours I couldn&#8217;t tell the difference. So, yesterday, I finally sat down to try and solve the problem.</p>

<p>With the help of the fine folks on the <a href="irc://chat.freenode.net/#trac">#trac</a> IRC channel, especially coderanger, I wrote a script which deleted
every single ticket change after a certain timestamp (corresponding to the first spam comment). Unfortunately, there
were probably a handful of legitimate changes lost, but there really was no other alternative. In any case, this script
worked flawlessly, and Trac was de-spammed. To prevent this from happening in the future, I turned off anonymous
editing and installed a plugin which allows users to register for an account. Hopefully the requirement of registration
will block most spam.</p>

<p>There was one interesting aspect to this that puzzled me until yesterday. The vast majority of the spam I saw contained
words that I had placed into the blacklist ages ago. I couldn&#8217;t figure out why the spam protection wasn&#8217;t working.
And then yesterday I discovered the reason. The blacklist is kept on a page called BadContent. The first code block
on that page consists of regular expressions, one per line, that each match a blacklisted expression. Unfortunately,
I forgot to mark this page read-only. So what happened was one of the random spam attempts happened to target this
page. The spammer replaced the content with his own code block containing a vast number of <code>&lt;a href&gt;</code> tags linking
to spammy websites. This had the effect of replacing the entire blacklist with a bunch of regular expressions matching
<code>&lt;a href&gt;</code> tags. This meant that all of the stuff that was previously blacklisted was no longer being blocked, opening
the floodgates for all sorts of spam.</p>
]]></content:encoded>
			<wfw:commentRss>http://kevin.sb.org/2007/01/22/the-resurrection-of-typosphere/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>TracLinks and the power of F-Script</title>
		<link>http://kevin.sb.org/2005/03/16/traclinks-and-the-power-of-f-script/</link>
		<comments>http://kevin.sb.org/2005/03/16/traclinks-and-the-power-of-f-script/#comments</comments>
		<pubDate>Wed, 16 Mar 2005 07:58:00 +0000</pubDate>
		<dc:creator>Kevin Ballard</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Colloquy]]></category>
		<category><![CDATA[fscript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[traclinks]]></category>

		<guid isPermaLink="false">http://73e11b6f593c3920e63be0daf6f50f2a</guid>
		<description><![CDATA[An overview of Colloquy's F-Script support, Trac, TracLinks, and my new TracLinks fscript plugin for Colloquy]]></description>
			<content:encoded><![CDATA[<p>So, for a while now <a href="http://www.colloquy.info" title="Colloquy: IRC &#38; SILC Client">Colloquy</a> has had 2 nice new things going for it:</p>

<ol>
<li>The ability to write plugins in <a href="http://www.fscript.org" title="F-Script">F-Script</a></li>
<li>An installation of <a href="http://www.edgewall.com/trac/" title="Edgewall Software: Trac">Trac</a> on the <a href="http://project.colloquy.info/trac/" title="Colloquy: Trac">website</a></li>
</ol>

<h3>F-Script</h3>

<p><a href="http://www.fscript.org" title="F-Script">F-Script</a> is pretty neat. It&#8217;s a Smalltalk-based language that lets you use the Cocoa frameworks to do some pretty nifty stuff. One of the best things about it is it lets me write <a href="http://www.colloquy.info" title="Colloquy: IRC &#38; SILC Client">Colloquy</a> plugins that use the Cocoa frameworks without having to compile anything or relaunch Colloquy each time I want to test a new iteration of the plugin. It also lets me open up an F-Script console in Colloquy and play with it interactively.</p>

<p><span id="more-72"></span></p>

<h3>Trac</h3>

<p><a href="http://www.edgewall.com/trac/" title="Edgewall Software: Trac">Trac</a> is a pretty nifty Python project managing tool. It ties directly into <a href="http://subversion.tigris.org" title="Subversion">Subversion</a> and lets me look at all the changesets for the project, view svn logs, browse the repository (for any revision), keep track of tickets, and it has a wiki. And any part of this can hyperlink to any other part for quick navigation and cross-referencing. This is achieved via something called <a href="http://projects.edgewall.com/trac/wiki/TracLinks" title="TracLinks">TracLinks</a>. TracLinks is a format of writing references to tickets, reports (basically smart collections of tickets), milestones, changesets, source files, and wiki pages and it&#8217;s pretty simple. #42 and ticket:42 are both links to ticket number 42, [42] and changeset:42 are links to changeset number 42, and so on. This is all well and good if you&#8217;re inside Trac, but outside Trac, say, in an IRC channel where you get commit messages via <a href="http://cia.navi.cx" title="CIA Open Source Notification System">CIA</a>, it doesn&#8217;t help. Here&#8217;s where F-Script comes in.</p>

<h3>F-Script and TracLinks</h3>

<p>With the power of F-Script and Colloquy, I&#8217;ve written a plugin to Colloquy that parses all incoming chat and, on channels that you specify, it will hyperlink all TracLinks (except <a href="http://projects.edgewall.com/trac/wiki/CamelCase" title="CamelCase">CamelCase</a> words, since that would be annoying) to the Trac installation you specify for the channel. What this means is, basically, I can have TracLink-formatted text in irc://irc.freenode.net/#colloquy be hyperlinked to the proper Trac page for the Colloquy <a href="http://project.colloquy.info/trac/" title="Colloquy: Trac">Trac installation</a>. I think this is a great help not only because <a href="http://cia.navi.cx" title="CIA Open Source Notification System">CIA</a> commit messages will now be hyperlinked properly, but because you can now pass around references to tickets and wiki pages and such when chatting with your fellow software developers and everybody can jump right to the referenced page.</p>

<h3>Installing TracLinks</h3>

<p>Installing TracLinks has 2 prerequisites:</p>

<ol>
<li>An installation of <a href="http://www.colloquy.info" title="Colloquy: IRC &#38; SILC Client">Colloquy</a>, either the 3/10/05 <a href="http://colloquy.info?nightly">nightly</a> or later, or a build from the repository (again, at least 3/10/05 or more recent)</li>
<li>The <a href="http://www.fscript.org" title="F-Script">F-Script</a> framework (which can be downloaded from the home page)</li>
</ol>

<p>Once you meet these requirements, simply download <a href="http://www.colloquy.info/extras/details.php?file=18" title="TracLinks plugin">TracLinks.fscript</a> from the Colloquy <a href="http://www.colloquy.info/extras/" title="Colloquy: Extras">extras site</a> (direct download <a href="http://www.colloquy.info/extras/download.php?file=41" title="TracLinks download link">link</a>) and place it in <code>~/Library/Application Support/Colloquy/PlugIns</code>. Once it&#8217;s there, go back to Colloquy and either restart it or type <code>/reload plugins</code> into the input pane.</p>

<h3>Using TracLinks</h3>

<p>To actually start using TracLinks.fscript, simply right-click on a room (the tab or drawer item, not the output pane) and select Add Trac Links. A sheet will drop down and you can enter the base Trac URL there (a sample base URL: <a href="http://projects.edgewall.com/trac/">http://projects.edgewall.com/trac/</a>). Hit OK and the room will start hyperlinking all TracLinks. This URL is saved in a preferences file (with the domain <code>cc.javelin.colloquy.traclinks</code>) so you can modify it if you wish.</p>

<p>An alternative way to use this is to type <code>/traclinks add base-url</code> into the input pane of the room you wish to add TracLinks to (the <code>base-url</code> argument being the same as what you&#8217;d type into the sheet).</p>

<p>To remove TracLinks linking from a room, either right-click on the room again and select Remove Trac Links or type <code>/traclinks remove</code> into the input field for the room.</p>

<h3>Feedback</h3>

<p>If you have any feedback on this plugin or on any other plugins you&#8217;d like to see written for Colloquy, feel free to leave it as a comment on this entry, or simply <a href="mailto:kevin@sb.org" title="kevin@sb.org">email me</a>.</p>

<h3>Quick Links</h3>

<ul>
<li><a href="http://www.colloquy.info" title="Colloquy: IRC &#38; SILC Client">Colloquy</a></li>
<li><a href="http://www.fscript.org" title="F-Script">F-Script</a></li>
<li><a href="http://www.edgewall.com/trac/" title="Edgewall Software: Trac">Trac</a></li>
<li><a href="http://subversion.tigris.org" title="Subversion">Subversion</a></li>
<li><a href="http://cia.navi.cx" title="CIA Open Source Notification System">CIA</a></li>
<li><a href="http://projects.edgewall.com/trac/wiki/TracLinks" title="TracLinks">TracLinks</a></li>
<li><a href="http://www.colloquy.info/extras/details.php?file=18" title="TracLinks plugin">TracLinks.fscript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://kevin.sb.org/2005/03/16/traclinks-and-the-power-of-f-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
