<?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>TightURL Development Blog</title>
	<atom:link href="http://tighturl.com/project/devblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://tighturl.com/project/devblog</link>
	<description>This is where the sausage gets made</description>
	<lastBuildDate>Tue, 08 May 2012 01:09:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Status</title>
		<link>http://tighturl.com/project/devblog/2012/05/02/status/</link>
		<comments>http://tighturl.com/project/devblog/2012/05/02/status/#comments</comments>
		<pubDate>Wed, 02 May 2012 22:27:00 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=81</guid>
		<description><![CDATA[Still a bit disrupted by the move.  More work has gone into the new database-based black/white listings.  From now on, I&#8217;m going to refer to that as the Policy System, since that&#8217;s what I think of it as, and that&#8217;s &#8230; <a href="http://tighturl.com/project/devblog/2012/05/02/status/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Still a bit disrupted by the move.  More work has gone into the new database-based black/white listings.  From now on, I&#8217;m going to refer to that as the <em>Policy System</em>, since that&#8217;s what I think of it as, and that&#8217;s what it really <em>is</em>.</p>
<p>The enhancements I&#8217;ve mentioned previously have worked so well, I was unaware of the latest abuse attack for several days.  The system at present is too crude and incomplete to share yet, but I hope to share it as a continuation of the release version of TightURL.  I don&#8217;t know if I&#8217;ve got a PHP 5.x dependency yet.   I hope everyone&#8217;s running on PHP 5 by now&#8230;</p>
<p>After 78 days (<em>seventy eight days!</em>), dozens of inquiries and no response from them whatsoever, Spamhaus took tighturl.com off their DBL.   You really don&#8217;t want to expose your mail to the mercy of Spamhaus.  I recommend anyone running a public URL shortener to get a domain you only use for the URL shortener.  The Spamhaus listing only made my users suffer since the only mail I send from tighturl.com is abuse@tighturl.com and the support and developers mailing lists.   I don&#8217;t think Spamhaus cares about the irony.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/05/02/status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Effective</title>
		<link>http://tighturl.com/project/devblog/2012/04/10/too-effective/</link>
		<comments>http://tighturl.com/project/devblog/2012/04/10/too-effective/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 19:22:39 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=98</guid>
		<description><![CDATA[The enhanced (database-based) blocklisting functionality I installed prior to my move and short trip out of town turns out to have pretty much blocked all of my regular users.  Or so I think.  Maybe. So now I&#8217;m adding an audit &#8230; <a href="http://tighturl.com/project/devblog/2012/04/10/too-effective/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The enhanced (database-based) blocklisting functionality I installed prior to my move and short trip out of town turns out to have pretty much blocked all of my regular users.  Or so I think.  Maybe.</p>
<p>So now I&#8217;m adding an audit log.   The need for this became apparent during initial development, but again, necessity forced it into being.</p>
<p>It&#8217;s apparent that the blocklisting is going to take up my next available block of time, but it&#8217;s important to get that done, and done correctly.</p>
<p>It&#8217;s also important to stress again, that running a public URL shortener <em>requires</em> constant monitoring.  I&#8217;m trying to make it so that it&#8217;s as small a time commitment as possible, but if you want to run a URL shortener that accepts new URLs from the public you have to be reachable by e-mail most of the day, every single day, in case your URL shortener or your abuse address or your upstream provider needs to tell you something.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/04/10/too-effective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>News</title>
		<link>http://tighturl.com/project/devblog/2012/04/02/news/</link>
		<comments>http://tighturl.com/project/devblog/2012/04/02/news/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 21:18:53 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bad Behavior]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=95</guid>
		<description><![CDATA[General I have moved (again).  This is very disruptive, and thus I haven&#8217;t done a lick of work on TightURL since. That doesn&#8217;t mean I didn&#8217;t do anything before I moved though.  I have finally gotten into the thick of &#8230; <a href="http://tighturl.com/project/devblog/2012/04/02/news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>General</h3>
<p>I have moved (again).  This is very disruptive, and thus I haven&#8217;t done a lick of work on TightURL since.</p>
<p>That doesn&#8217;t mean I didn&#8217;t do anything <em>before</em> I moved though.  I have finally gotten into the thick of things as far as moving the blocklist data out of PHP and into MySQL is concerned.  As is so often the case with TightURL, abuse taking place over at tighturl.com required immediate action, and thus the beginnings of the new, much more sophisticated blocklisting system were laid down in the production version.  Unfortunately that also means replicating that code in the &#8220;new&#8221; version and the &#8220;next&#8221; (based on the production code) version.  I&#8217;ve got it into the &#8220;new&#8221; version, but not yet into &#8220;next&#8221;.</p>
<p>At this time, I have no UI for the black and white listing functionality.  I will get that into the &#8220;new&#8221; version.  Whether or not it gets into the &#8220;next&#8221; version is an open question right now.</p>
<h3>Bad Behavior 2.2.3</h3>
<p><span style="text-decoration: line-through;">Anyone who upgraded their <em>Bad Behavior</em> using the updated <em>Bad Behavior for TightURL</em> connector should *NOT* upgrade to Bad Behavior 2.2.3 .  Unfortunately 2.2.3 contains a very rare API change that I will have to make in the connector before you can upgrade.  I&#8217;ll announce it when this is ready.</span></p>
<p><strong>UPDATE: </strong>I read the update notice for Bad Behavior a little too quickly.  You can continue upgrading Bad Behavior.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/04/02/news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>API news</title>
		<link>http://tighturl.com/project/devblog/2012/03/13/api-news/</link>
		<comments>http://tighturl.com/project/devblog/2012/03/13/api-news/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 19:53:04 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[F3]]></category>
		<category><![CDATA[Fat Free Framework]]></category>
		<category><![CDATA[Restler]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=78</guid>
		<description><![CDATA[For those interested in an API, these are the latest hopes: http://luracast.com/products/restler/ and http://fatfree.sourceforge.net/page/routing-engine/representational-state-transfer-rest-and-classes-objects I only just discovered both of these, but either looks promising. Since Fat Free Framework shows me procedural PHP examples, that&#8217;s a plus in its favor. However, &#8230; <a href="http://tighturl.com/project/devblog/2012/03/13/api-news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For those interested in an API, these are the latest hopes: <a href="http://luracast.com/products/restler/">http://luracast.com/products/restler/</a></p>
<p>and <a href="http://fatfree.sourceforge.net/page/routing-engine/representational-state-transfer-rest-and-classes-objects">http://fatfree.sourceforge.net/page/routing-engine/representational-state-transfer-rest-and-classes-objects</a></p>
<p>I only just discovered both of these, but either looks promising.</p>
<p>Since Fat Free Framework shows me procedural PHP examples, that&#8217;s a plus in its favor.</p>
<p>However, since we&#8217;re probably going to need an API-key based system, I&#8217;m going to need to get an Admin section up that includes user accounts and user profiles.  That also ties into the question of templates.  I really want to make a final decision about a new template system (or not, and which to use if so) before then so the admin section can be templated also.</p>
<p>Fat Free Framework as it happens, has a template system.  That said, I don&#8217;t want to make TightURL itself dependent on any framework, even if it&#8217;s tiny.</p>
<p>Which brings up another matter&#8230; I haven&#8217;t decided how to connect the API to TightURL.  My original thought was to keep everything in the same namespace, such that you would have something like:</p>
<p>http://example.com/api</p>
<p>vs.:</p>
<p>http://api.example.com</p>
<p>One of the original intents behind TightURL was for people to run small-scale and/or private URL shorteners.  The first approach probably works best for those people since they may not be able to add subdomains.  The second approach allows you to split API traffic off from the main web site.</p>
<p>Although I like the &#8220;cleanness&#8221; of the first approach (and that&#8217;s an entirely subjective opinion), TightURL can no longer be run on the simplest hosting setups.   It&#8217;s going to require PHP 5.3 or newer, and it already needs to be able to do DNS lookups and open network connections to fetch the contents of URLs.  This precludes really low end or free hosting.  I&#8217;m not exactly bothered that you can&#8217;t run TightURL on free hosting, given that virtually all the URLs submitted to tighturl.com from free hosting services are abusive links.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/03/13/api-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bad Behavior 2.2</title>
		<link>http://tighturl.com/project/devblog/2012/03/02/bad-behavior-2-2/</link>
		<comments>http://tighturl.com/project/devblog/2012/03/02/bad-behavior-2-2/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 15:57:23 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bad Behavior]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=73</guid>
		<description><![CDATA[Work slowed a bit due to illness.  It&#8217;s going to slow again as I am moving yet again to a new home. In the meantime, I am going to be porting the TightURL interface for Bad Behavior to the Bad &#8230; <a href="http://tighturl.com/project/devblog/2012/03/02/bad-behavior-2-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Work slowed a bit due to illness.  It&#8217;s going to slow again as I am moving yet again to a new home.</p>
<p>In the meantime, I am going to be porting the TightURL interface for Bad Behavior to the Bad Behavior 2.2 series.  This will be made available to all TightURL users (current version and &#8220;next major version&#8221;).</p>
<p><strong>EDIT (2012-03-02 21:58 EST):</strong> <a title="Bad Behavior 2,2 for TightURL" href="http://tighturl.com/bad-behavior2.2.zip">Now available!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/03/02/bad-behavior-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squisher Engines</title>
		<link>http://tighturl.com/project/devblog/2012/02/13/squisher-engines/</link>
		<comments>http://tighturl.com/project/devblog/2012/02/13/squisher-engines/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 22:40:19 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=68</guid>
		<description><![CDATA[The coming plugin system will finally allow for a long-planned feature.  Custom URL &#8220;shorteners&#8221;, which I&#8217;ve been calling squisher engines, or just squishers. For example, one user requested the ability to generate easily remembered URLs based on common words.  This &#8230; <a href="http://tighturl.com/project/devblog/2012/02/13/squisher-engines/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The coming plugin system will finally allow for a long-planned feature.  Custom URL &#8220;shorteners&#8221;, which I&#8217;ve been calling <em>squisher engines</em>, or just <em>squishers</em>.</p>
<p>For example, one user requested the ability to generate easily remembered URLs based on common words.  This will be able to be implemented as a <em>squisher engine plugin</em>, and installed into your TightURL installation.</p>
<p>As a result of this new feature, TightURL will also support allowing the user to choose the <em>squisher</em> to be used.  Site administrators will be able to choose one or more <em>squishers</em> to allow users to choose from.</p>
<p>Site admins who know some PHP (or hire someone who does) can easily create new <em>squisher engines</em> without extensive study or modification of the TightURL code.  Squisher engines receive the URL, submitter&#8217;s IP and submitter&#8217;s User-Agent, and they return either a shortened URL or an error code.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/02/13/squisher-engines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hooks (future version)</title>
		<link>http://tighturl.com/project/devblog/2012/02/13/hooks-future-version/</link>
		<comments>http://tighturl.com/project/devblog/2012/02/13/hooks-future-version/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 14:23:08 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=63</guid>
		<description><![CDATA[Been sick, nothing much happened for a couple of weeks. Then I picked up some code I had stashed in the &#8220;next version&#8221; folder, which like most of the code I find, had some problems. After the cron debacle I &#8230; <a href="http://tighturl.com/project/devblog/2012/02/13/hooks-future-version/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Been sick, nothing much happened for a couple of weeks. Then I picked up some code I had stashed in the &#8220;next version&#8221; folder, which like most of the code I find, had some problems. After the cron debacle I wasn&#8217;t sure I wanted to put much time into it, but it turned out there were two lines of code I had to change and now I have a working implementation of hooks and filters and I only spent a few hours on it.</p>
<p>Hooks and filters? I don&#8217;t know if they were the first, but it&#8217;s basically the same system used by WordPress to allow extensibility since about version 1.5. Hooks are places in the code where plugins can interact with TightURL. Filters are pretty much the same thing, except specifically intended to allow plugins to alter something, usually output displayed to the user.</p>
<p>What exactly does this mean?<br />
Initially, I plan on adding three hooks to TightURL. &#8216;Squish&#8217;, &#8216;Squisher&#8217;, and &#8216;Squished&#8217;. <em>Squish </em>will run prior to shortening a URL and will be passed the URL to shorten, the IP of the submitter, and the User-Agent from the browser.   The <em>Squish</em> hook allows for the creation of anti-abuse/policy plugins.</p>
<p><em>Squisher</em> will run instead of the &#8220;native&#8221; URL shortener.  It receives the URL to shorten, IP, and User-Agent.  The <em>Squisher</em> hook allows for the creation of new URL shortening engines.  <em>Squishers</em> will return the shortened URL.</p>
<p><em>Squished</em>  will run immediately following URL shortening.   It receives the URL, the output from whatever squisher ran, the IP, and the User-Agent. The <em>Squished</em> hook allows for the creation of post-shortening tasks.</p>
<p>Developers should take care, as all three hooks lengthen the amount of time it takes for your TightURL installation to return a shortened URL.  I have found even slight delays generate complaints.  In particular, resist the temptation to create complex <em>Squish</em> plugins, or <em>Squished </em>plugins that perform maintenance tasks.  Maintenance tasks should be run by the the internal job scheduling system, and complex, involved, pre-shortening processing simply is not viable.  You may be able to convert this instead into a small bit of code that runs with the <em>Squish</em> hook, and the rest runs as a scheduled job.  And finally, <em>Squishers</em> as well, need to run quickly and return a result to the user.  As with the <em>Squish</em> and <em>Squished</em> hooks, you should use the job scheduler for processing that takes more than a fraction of a second to run.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/02/13/hooks-future-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progress Report</title>
		<link>http://tighturl.com/project/devblog/2012/01/22/progress-report/</link>
		<comments>http://tighturl.com/project/devblog/2012/01/22/progress-report/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 19:47:54 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=57</guid>
		<description><![CDATA[I&#8217;ve done some work in both the future major release, and in the production version. The next version released will be known as 0.1.3.6, it will be based on the version that runs at tighturl.com, and I am going to &#8230; <a href="http://tighturl.com/project/devblog/2012/01/22/progress-report/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve done some work in both the future major release, and in the production version.  The next version released will be known as 0.1.3.6, it will be based on the version that runs at tighturl.com, and I am going to add some new functionality before release.  I don&#8217;t think it will take me too long.</p>
<p>The problem I want to solve, is that right now you have to edit one of the config files full of regexes to blacklist a site.  From time to time I make an error there that ends up disabling the service, and users disappear.  There are some other concerns, but the main thing is, you shouldn&#8217;t be editing files all the time.  I need to validate the regexes, but most importantly, I need to store that data in the database, and once I&#8217;m doing that, the &#8220;killbot&#8221; will also be able to blacklist the domains hosting the links it disables.  I&#8217;ll have to give you a way to enter and remove things from a password-protected web page too.</p>
<p>I think this is important enough to hold the release for.  I&#8217;m trying to work on TightURL at least an hour every day for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/01/22/progress-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Investigating an Interim Release</title>
		<link>http://tighturl.com/project/devblog/2012/01/20/investigating-an-interim-release/</link>
		<comments>http://tighturl.com/project/devblog/2012/01/20/investigating-an-interim-release/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 22:01:41 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=55</guid>
		<description><![CDATA[As promised earlier, I&#8217;m investigating an interim release of TightURL so I can continue work on the major release, which I need to spend a bit more time with before I can even run it myself anywhere. It&#8217;s really still &#8230; <a href="http://tighturl.com/project/devblog/2012/01/20/investigating-an-interim-release/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As promised earlier, I&#8217;m investigating an interim release of TightURL so I can continue work on the major release, which I need to spend a bit more time with before I can even run it myself anywhere.  It&#8217;s really still development code.</p>
<p>I don&#8217;t think it will be too difficult to get the interim release out, but it also doesn&#8217;t really do much the available version doesn&#8217;t do, with the exception of bundling the &#8220;killbot&#8221; for those who have cron access.  Nobody should run a public URL shortener without it.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/01/20/investigating-an-interim-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Additions Report</title>
		<link>http://tighturl.com/project/devblog/2012/01/20/additions-report/</link>
		<comments>http://tighturl.com/project/devblog/2012/01/20/additions-report/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 21:45:33 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tighturl.com/project/devblog/?p=53</guid>
		<description><![CDATA[I&#8217;ve done a little work on the new additions report I get every hour to include some statistics. It now shows the total records added on today&#8217;s date along with the total records added today that have been disabled. The &#8230; <a href="http://tighturl.com/project/devblog/2012/01/20/additions-report/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve done a little work on the new additions report I get every hour to include some statistics.  It now shows the total records added on today&#8217;s date along with the total records added today that have been disabled.  The midnight (00:00) report includes totals for yesterday.</p>
<p>I need to convert the hardcoded domain filter I have now into something user-configurable.  </p>
<p>The additions report will be part of the next major version of TightURL as a task run by the job scheduler.  It&#8217;s (been) available on request to those who can run cron jobs.</p>
]]></content:encoded>
			<wfw:commentRss>http://tighturl.com/project/devblog/2012/01/20/additions-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

