<?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>vrypan&#124;net&#124;log &#187; urlborg</title>
	<atom:link href="http://vrypan.net/log/archives/category/urlborg/feed/" rel="self" type="application/rss+xml" />
	<link>http://vrypan.net/log</link>
	<description>panayotis&#039; notes about the web and everything else.</description>
	<lastBuildDate>Fri, 24 Feb 2012 12:06:09 +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>data portability for URL shorteners</title>
		<link>http://vrypan.net/log/2009/data-portability-for-url-shorteners/</link>
		<comments>http://vrypan.net/log/2009/data-portability-for-url-shorteners/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 15:24:46 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=473</guid>
		<description><![CDATA[Yesterday, Dave Winer wrote: One easy way to lower the cost of URL-shortening is to use our own domain names in place of tinyurl.xom, bit.ly, tr.im, et al. Any one of those services could take the lead here by allowing &#8230; <a href="http://vrypan.net/log/2009/data-portability-for-url-shorteners/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday, <a href="http://www.scripting.com/stories/2009/04/03/joshIsRightUrlShortenersAr.html#p5">Dave Winer wrote</a>:</p>
<blockquote><p><em>One easy way to lower the cost of URL-shortening is to use our own domain names in place of tinyurl.xom, bit.ly, tr.im, et al. Any one of those services could take the lead here by allowing for that. Let me map my own domain onto theirs, easily back up all my data, and give me the ability to switch services when I want, or when I need to.</em></p></blockquote>
<p>I would call it &#8220;data protability for URL shorteners&#8221;. It&#8217;s what I&#8217;ve been trying to push for more than a year by <a href="http://urlborg.com/a/urlborg_xml/about/">urlborg.xml</a> (and was actually inspired by an older post of Dave Winer) . </p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2009/data-portability-for-url-shorteners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>from now on, urlBorg requires authentication to create short URLs</title>
		<link>http://vrypan.net/log/2008/from-now-on-urlborg-requires-authentication-to-create-short-urls/</link>
		<comments>http://vrypan.net/log/2008/from-now-on-urlborg-requires-authentication-to-create-short-urls/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 14:13:43 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[godaddy]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=461</guid>
		<description><![CDATA[I don&#8217;t like it, but I had to do it. From now on urlBorg will ask you to login if you want to create a short URL. The reason is that spammers took advantage of the URL shortening service to &#8230; <a href="http://vrypan.net/log/2008/from-now-on-urlborg-requires-authentication-to-create-short-urls/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t like it, but I had to do it. </p>
<p>From now on <a href="http://urlborg.com/">urlBorg</a> will ask you to login if you want to create a short URL. The reason is that spammers took advantage of the URL shortening service to create short URLs they included in spam emails. As a result I got many complaints, I even have to pay $199 to GoDaddy (where the domain is registered) to </p>
<blockquote><p>[...] cover the costs of responding to or &#8220;cleaning up&#8221; the outstanding spam complaints Go Daddy has received against your domain name so far. This fee is also used to cover the costs of processing future complaints, forwarding these complaints to you, and ensuring that the offending affiliates have been deleted. [...]</p></blockquote>
<p>I still think GoDaddy is wrong to consider urlBorg part of the problem, but the truth is that even free on-line services should try to make the web a better and safer place. Authentication should make urlBorg spammer-unfriendly, or at least make it easier for me to fight them by disabling spam accounts and all their short URLs if necessary. </p>
<p>Requiring an account might be annoying to some, I understand. On the other hand, you can be sure all your short URLs are tracked and added to your profile (a feature that most urlBorg users like and depend on). Plus it will add some more &#8220;credibility&#8221; to any links starting with &#8220;ub0.cc&#8221;.</p>
<p>Obviously, users just clicking on short URLs are not affected, this is for people using urlBorg to <strong>create</strong> short URLs.</p>
<p>API usage is not affected, either.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/from-now-on-urlborg-requires-authentication-to-create-short-urls/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>drupal + urlBorg</title>
		<link>http://vrypan.net/log/2008/drupal-urlborg/</link>
		<comments>http://vrypan.net/log/2008/drupal-urlborg/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 09:22:04 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=431</guid>
		<description><![CDATA[nsyll just released the drupal urlBorg module!]]></description>
			<content:encoded><![CDATA[<p><a href="http://nsyll.net/">nsyll</a> just released the <a href="http://drupal.org/project/urlborg">drupal urlBorg module</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/drupal-urlborg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TwitVim support for urlBorg</title>
		<link>http://vrypan.net/log/2008/twitvim-support-for-urlborg/</link>
		<comments>http://vrypan.net/log/2008/twitvim-support-for-urlborg/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 17:02:50 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[twitvim]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=428</guid>
		<description><![CDATA[TwitVim, a Vim plugin that allows you to post to Twitter and view Twitter timelines, has now support for urlBorg. Cool! Details at mortonfox.livejournal.com.]]></description>
			<content:encoded><![CDATA[<p><a href="http://vim.sourceforge.net/scripts/script.php?script_id=2204">TwitVim</a>, a Vim plugin that allows you to post to Twitter and view Twitter timelines, has now support for <a href="http://urlborg.com">urlBorg</a>. Cool! Details at <a href="http://mortonfox.livejournal.com/603414.html">mortonfox.livejournal.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/twitvim-support-for-urlborg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>short URLs are gestures of attention</title>
		<link>http://vrypan.net/log/2008/short-urls-are-gestures-of-attention/</link>
		<comments>http://vrypan.net/log/2008/short-urls-are-gestures-of-attention/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 23:16:06 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[attention]]></category>
		<category><![CDATA[gestures]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=426</guid>
		<description><![CDATA[Nektarios is developing a drupal plugin that will make use of urlBorg. He asked me why, urlBorg creates a new short URL every time he makes an API call, even if the target URL is the same. Wouldn&#8217;t it be &#8230; <a href="http://vrypan.net/log/2008/short-urls-are-gestures-of-attention/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://nsyll.net/">Nektarios</a> is developing a drupal plugin that will make use of <a href="http://urlborg.com/">urlBorg</a>. He asked me why, urlBorg creates a new short URL every time he makes an API call, even if the target URL is the same. Wouldn&#8217;t it be reasonable to get the same short URL? Isn&#8217;t it a waste of resources (i.e. storage space) to create and store a new short URL every time?</p>
<p>This is one of the main design decisions I had to do when I started developnig urlBorg. And I&#8217;ve changed my mind a couple of times. But I think that creating a new short URL is the right way to go. Here is why.</p>
<p>The creation of a short URL is a &#8220;gesture of attention&#8221; (if you are not familiar with the term, read <a href="http://blogs.zdnet.com/BTL/?p=2280">Geting a piece of the action: The attention economy</a>). An if a URL shortener is worth something, this is because it is a good database of two kind of &#8220;gestures&#8221;:<br />
- the one is when someone manifests his interest on a specific URL, by creating a short URL for it.<br />
- the other is when someone clicks on the short URL.</p>
<p><a href="http://urlborg.com/">urlBorg</a> keeps track of both. The click stats are visible to anyone, the just have to add /i at the end of a urlBorg short URL, like this <a href="http://ub0.cc/08/J/i'>ub0.cc/08/J/i</a>. The personal stream of clicks to &#8220;ub0.cc&#8221; links is also available to all users that are logged in.</p>
<p>This is also why a new short URL is created whenever this is asked, even if one exists for the target URL. You should consider the &#8220;short ID&#8221; (ex. &#8220;08/J&#8221; in the example above), not the equivalent of the target URL, but the equivalent of the &#8220;attention gesture&#8221; translated as &#8220;right now, I am interested in this target URL&#8221;. Whenever one of the three parameters change, timestamp, user or target URL, you get a new shortcut.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/short-urls-are-gestures-of-attention/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>urlBorg + summize.com</title>
		<link>http://vrypan.net/log/2008/urlborg-summizecom/</link>
		<comments>http://vrypan.net/log/2008/urlborg-summizecom/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 20:33:11 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[summize]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/?p=420</guid>
		<description><![CDATA[summize.com is a search engine for twitter -and a great one! urlBorg now queries summize.com for each short URL and displays the results in the preview page. This way it is easier to guess or understand what the link is &#8230; <a href="http://vrypan.net/log/2008/urlborg-summizecom/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://summize.com/">summize.com</a> is a search engine for twitter -and a great one!</p>
<p><a href="http://urlborg.com/">urlBorg</a> now queries summize.com for each short URL and displays the results in the preview page. This way it is easier to guess or understand what the link is about, before going to the actual page.</p>
<p><a href="http://www.flickr.com/photos/vrypan/2562392904/" title="urlBorg with summize by vrypan, on Flickr"><img src="http://farm4.static.flickr.com/3059/2562392904_c5a3a4c8c8_m.jpg" width="240" height="155" alt="urlBorg with summize" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-summizecom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>better stats for urlBorg</title>
		<link>http://vrypan.net/log/2008/better-stats-for-urlborg/</link>
		<comments>http://vrypan.net/log/2008/better-stats-for-urlborg/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 10:13:27 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/06/07/better-stats-for-urlborg/</guid>
		<description><![CDATA[urlBorg lets users see more detailed stats now. There are many ways to access the click stats: Click the &#8220;more info&#8221; link at the bottom of any &#8220;preview page&#8221; Login to your account and click the short URL on any &#8230; <a href="http://vrypan.net/log/2008/better-stats-for-urlborg/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vrypan/2557440641/" title="urlBorg stats page by vrypan, on Flickr"><img src="http://farm4.static.flickr.com/3163/2557440641_4221bc5f7c_m.jpg" width="233" height="240" alt="urlBorg stats page" /></a></p>
<p><a href="http://urlborg.com/">urlBorg</a> lets users see more detailed stats now.</p>
<p>There are many ways to access the click stats:</p>
<ol>
<li>Click the &#8220;more info&#8221; link at the bottom of any &#8220;preview page&#8221;</li>
<li>Login to your account and click the short URL on any of the &#8220;created&#8221; or &#8220;clicked&#8221; links.</li>
<li>append /i at the end of a short url. ex <a href="http://ub0.cc/6/0h/i">ub0.cc/6/0h/i</a></li>
</ol>
<p>The graphs are created using the <a href="http://code.google.com/apis/chart/">Google Chart API</a> and IMHO the look quite nice <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/better-stats-for-urlborg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>some great comments -thanks!</title>
		<link>http://vrypan.net/log/2008/some-great-comments-thanks/</link>
		<comments>http://vrypan.net/log/2008/some-great-comments-thanks/#comments</comments>
		<pubDate>Sun, 25 May 2008 00:40:00 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/05/25/some-great-comments-thanks/</guid>
		<description><![CDATA[I asked urlBorg users to rate the app in the AppEngine application gallery and got some enthusiastic comments: One of the best url shortening tools &#8211; jim.hellas &#8211; May 24, 2008 UrlBorg has a very simple interface, provides personal account &#8230; <a href="http://vrypan.net/log/2008/some-great-comments-thanks/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I asked urlBorg users to <a href="http://appgallery.appspot.com/about_app?app_id=agphcHBnYWxsZXJ5chMLEgxBcHBsaWNhdGlvbnMYpwsM">rate the app in the AppEngine application gallery</a> and got some enthusiastic comments:</p>
<blockquote><p><strong>One of the best url shortening tools    &#8211;  jim.hellas &#8211; May 24, 2008</strong><br />
UrlBorg has a very simple interface, provides personal account and helps you keep track of your urls. Simply the best <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<blockquote><p><strong>The best out there!    &#8211;  kostis_at_quatzacoalt.com &#8211; May 24, 2008</strong><br />
My choice for URL shortening! Useful features! I&#8217;m sure more are on the way! <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<blockquote><p><strong>Great stuff    &#8211;  stefanos.kofopoulos &#8211; May 24, 2008</strong><br />
&#8230;now running on scalable environment.</p></blockquote>
<blockquote><p><strong>urlBorg rules!     &#8211;  niels.vaneck &#8211; May 24, 2008</strong><br />
Scalable url shortening in combination with user accounts makes for a very useful service.
</p></blockquote>
<p>Wow! Thank you!</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/some-great-comments-thanks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>urlBorg: making your life easier</title>
		<link>http://vrypan.net/log/2008/urlborg-making-your-life-easier/</link>
		<comments>http://vrypan.net/log/2008/urlborg-making-your-life-easier/#comments</comments>
		<pubDate>Sun, 18 May 2008 01:20:37 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[attention]]></category>
		<category><![CDATA[features]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/05/18/urlborg-making-your-life-easier/</guid>
		<description><![CDATA[urlBorg has two new features: 1. It will keep a record of all the &#8220;short URLs&#8221; you&#8217;ve created, with stats (number of clicks). This is a nice way to keep track of the URLs you&#8217;ve created but also to see &#8230; <a href="http://vrypan.net/log/2008/urlborg-making-your-life-easier/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://urlborg.com/">urlBorg</a> has two new features:</p>
<p>1. It will keep a record of all the &#8220;short URLs&#8221; you&#8217;ve created, with stats (number of clicks). This is a nice way to keep track of the URLs you&#8217;ve created but also to see how many clicks each one of them had.</p>
<p>2. It will keep a record of all urlBorg short URLs you&#8217;ve clicked on. This is an optional feature, you have to enable it explicitly. I often find myself looking for &#8220;that link to a funny video someone posted on twitter yesterday&#8221;. Well if this someone used urlBorg to create short links, now I will find it in my history.</p>
<p>To use both of them, you have to login of course. But I took advantage of <a href="http://code.google.com/appengine/docs/users/">AppEngine&#8217;s Users API</a> which means that if you already have a GMail account you login using it -no registration, etc. (I know I should have used OpenID, but for now it was so much simpler to use Google&#8217;s authentication -but OpenID is on the ToDo list).</p>
<p>Now, if someone could advice me on what is the right format to export the attention data gathered, so that users are able to reuse them and move them around, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-making-your-life-easier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>urlBorg previews (mp3, maps)</title>
		<link>http://vrypan.net/log/2008/urlborg-previews-mp3-maps/</link>
		<comments>http://vrypan.net/log/2008/urlborg-previews-mp3-maps/#comments</comments>
		<pubDate>Tue, 13 May 2008 23:32:09 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/05/14/urlborg-previews-mp3-maps/</guid>
		<description><![CDATA[At the top of each page on urlBorg you will se a link named &#8220;account&#8221;. Click on it and login using your GMail account. You will be redirected to your urlBorg account page, where you will se the option &#8220;enable &#8230; <a href="http://vrypan.net/log/2008/urlborg-previews-mp3-maps/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>At the top of each page on <a href ="http://urlborg.com/">urlBorg</a> you will se a link named &#8220;account&#8221;. Click on it and login using your GMail account.</p>
<p>You will be redirected to your urlBorg account page, where you will se the option &#8220;enable previews&#8221;. Previews are simple pages that look like <a href="http://ub0.cc/3/4/p">this</a> (here, I take advantage of a hidden urlBorg feature: if you add /p at the end of a short URL you &#8220;force&#8221; the preview to show up). Their obvious value is to protect you from going to pages you wouldn&#8217;t like to visit, but their URL is hidden by urlBorg.</p>
<p>I think &#8220;previews&#8221; can be much more. Here are a couple of features I already implemented.</p>
<p><strong>MP3 files</strong><br />
If a URL goes to an MP3 file (determined by the MIME type reported by the hosting server), the preview will also show you flash mp3 player that allow you to listen to it. Here <a href="http://ub0.cc/l/0/p">is an example</a>.</p>
<p><strong>maps</strong><br />
For this one, I have to thank <a href="http://lounge.u-lik.com/leafar">Raphael</a> from <a href="http://www.u-lik.com/">U.[lik]</a>. Raphael is has been using urlBorg to share links to Google Maps (those links can be long and ugly). Now, if you link to a page in Google Maps or Yahoo! Maps, the preview will also display a link to the other service, where you will se the same map.</p>
<p>Here is a Google Maps <a href="http://ub0.cc/0/2F/p">expample</a> (again, note the /p at the end of the URL) and a Yahoo! Maps <a href="http://ub0.cc/0/2G/p">example</a>. You don&#8217;t have to do something special. urlBorg will examine the structure of the link and display automagicaly the &#8220;extra info&#8221;.</p>
<p>So, what do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-previews-mp3-maps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>urlBorg: why build yet another URL shortening service?</title>
		<link>http://vrypan.net/log/2008/urlborg-why-build-yet-another-url-shortening-service/</link>
		<comments>http://vrypan.net/log/2008/urlborg-why-build-yet-another-url-shortening-service/#comments</comments>
		<pubDate>Tue, 13 May 2008 16:40:35 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/05/13/urlborg-why-build-yet-another-url-shortening-service/</guid>
		<description><![CDATA[So, urlBorg has been rewritten in Python and is now hosted on Google AppEngine (make a note, the new address is urlborg.com). But why build &#8220;yet another URL shortening service&#8221;, when it&#8217;s so easy to build one? Any web developer &#8230; <a href="http://vrypan.net/log/2008/urlborg-why-build-yet-another-url-shortening-service/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So, <a href="http://urlborg.com/">urlBorg</a> has been rewritten in Python and is now hosted on Google AppEngine (make a note, the new address is urlborg.com).</p>
<p>But why build &#8220;yet another URL shortening service&#8221;, when it&#8217;s so easy to build one? Any web developer could build one in less than an hour, couldn&#8217;t they?</p>
<p>The truth is that building a URL shortening service is a trivial task. Building one that could scale is not. I designed urlBorg having in mind &#8220;will it work if it made it to TechCrunch or if CNN.com made extensive use of it?&#8221; Building such a service is not trivial, believe me. (And I won&#8217;t know if urlBorg will make it either, but I think it will.)</p>
<p>But scale wasn&#8217;t my only motivation. I believe there&#8217;s a lot of space to add value to such a simple service. A quick look at the <a href="http://urlborg.com/api">API</a> will reveal some of my ideas -urlBorg goes beyond returning a short URL.</p>
<p>More details to come soon <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-why-build-yet-another-url-shortening-service/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>a suggestion for efficient and scalable counters in Datastore</title>
		<link>http://vrypan.net/log/2008/a-suggestion-for-efficient-and-scalable-counters-in-datastore/</link>
		<comments>http://vrypan.net/log/2008/a-suggestion-for-efficient-and-scalable-counters-in-datastore/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 10:30:27 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[code samples]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/04/30/a-suggestion-for-efficient-and-scalable-counters-in-datastore/</guid>
		<description><![CDATA[As I&#8217;ve mentioned before, I&#8217;m trying to migrate urlBorg to Google AppEngine. urlBorg needs to count many things, like clicks on a short URL, etc, so I really need a scalable and efficient way to implement counters. This is not &#8230; <a href="http://vrypan.net/log/2008/a-suggestion-for-efficient-and-scalable-counters-in-datastore/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve mentioned before, I&#8217;m trying to migrate <a href="http://www.urlb.org">urlBorg</a> to Google AppEngine. urlBorg needs to count many things, like clicks on a short URL, etc, so I really need a scalable and efficient way to implement counters. This is not as trivial as it sounds in the Google AppEngine environment.</p>
<p>This post is actually the result of a good discussion done <a href="http://groups.google.com/group/google-appengine/browse_thread/thread/007dedb7d65bdf4f">here</a></p>
<p>Here is the code I&#8217;ve come up with.<br />
An example usage would be as simple as adding a line like (where page_id is a unique string identifying each page)</p>
<pre>Acc(page_id).acc()</pre>
<p>in each one of your pages. Getting the total coun is as simple as
<pre>Acc(page_id).val()</pre>
<p>(Due to the way the total count is calculated, this may not give accurate results if you are in the middle of a traffic spike, but it&#8217;s good enough for web analytics usage)</p>
<p><small>
<pre>
class AccVals(db.Model):
       cluster = db.StringProperty(required=True)
       count = db.IntegerProperty(required=True)
       updated = db.DateTimeProperty(auto_now=True)
       rand = db.FloatProperty()

class Acc():
       def __init__(self, name,init=0):
               self.__sec = 0.1
               self.__name = name
               self.__init = init

       def inc(self):
               def trans(key):
                       obj = AccVals.get(key)
                       obj.count += 1
                       obj.put()
                       self.__val = obj.count

               q = db.Query(AccVals).filter('cluster =',self.__name).filter('rand &gt;', random.random()).get()
               if (q):
                       if (datetime.datetime.now() - q.updated &lt; datetime .timedelta(0,self.__sec)):
                               obj = AccVals(cluster=self.__name,count=self.__init, rand=random.random() )
                               key = obj.put()
                       else:
                               key = q.key()
               else:
                       obj = AccVals(cluster=self.__name,count=self.__init, rand=1.0 )
                       key = obj.put()

               db.run_in_transaction(trans,key)
               return self.__val

       def val(self):
               total = 0
               q = AccVals.all()
               q.filter('cluster =',self.__name)
               for r in q:
                       total += r.count
               return total
</pre>
<p></small></p>
<p>It behaves relatively good and looks like it can scale no matter how<br />
much traffic or traffic spikes you have.</p>
<p>If you look into it, you will see that a &#8220;counter instance&#8221; is chosen<br />
in random. You may be tempted to use the &#8220;instance&#8221; that was updated<br />
longer in the past ( order(&#8216;-updated&#8217;).get() ), but it turns out that<br />
when you have a traffic spike (or whatever it is your counters count)<br />
the indexes are not updated soon enough and this will return the last<br />
records that were updated <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  It looks like selecting a random<br />
instance is no big deal in low traffic and works much better in high<br />
traffic. I&#8217;ve also seen that after a while, you end up with the number<br />
of counter instances that are required to handle the traffic of the<br />
specific counter with few transaction collisions.</p>
<p>There is one interesting point: the value of self.__sec. I set it to<br />
0.1 seconds, but this is just a value that looked good after some<br />
tests. I have the impression that this value is *related* to some kind<br />
of &#8220;global AppEngine constant&#8221;, measuring the time it takes for a<br />
transaction to complete and safely propagate to the rest of the<br />
infrastructure. I guess this varies, depending on the resource<br />
allocation done for a specific app. Could someone from the AppEngine<br />
development team give us some insight on this?</p>
<p>As I&#8217;ve mentioned before, I&#8217;m a Python newbie, so use the code above<br />
at your risk <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Please post your comments <a href="http://groups.google.com/group/google-appengine/browse_thread/thread/f2ce195dc989aa2d">here</a>, so that they are all in one place.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/a-suggestion-for-efficient-and-scalable-counters-in-datastore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppEngine Datastore limitations</title>
		<link>http://vrypan.net/log/2008/appengine-datastore-limitations/</link>
		<comments>http://vrypan.net/log/2008/appengine-datastore-limitations/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 21:48:12 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/04/26/appengine-datastore-limitations/</guid>
		<description><![CDATA[I&#8217;ve been trying to decide if moving urlBorg to Google App Engine is a good idea. The pros are obvious: scalability. There are many features I&#8217;ve wanted to implement for urlBorg but never did because I&#8217;m afraid that if it &#8230; <a href="http://vrypan.net/log/2008/appengine-datastore-limitations/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to decide if moving <a href="http://www.urlb.org">urlBorg</a> to <a href="http://code.google.com/appengine">Google App Engine</a> is a good idea. The pros are obvious: scalability. There are many features I&#8217;ve wanted to implement for <a href="http://www.urlb.org">urlBorg</a> but never did because I&#8217;m afraid that if it turns into a hit, my server will go down.</p>
<p>I mean, creating short URLs is a trivial thing. If you want to make a service that stands out, it has to be that it takes care of the little details in a much better way than the rest. And you have to be sure that your service will be able to scale.</p>
<p>So, moving urlBorg to Google App Engine should be a no brainer, right? Wrong.</p>
<p>My main issue is AppEngine Datastore.<br />
<blockquote>The App Engine datastore is not a relational database. While the datastore interface has many of the same features of traditional databases, the datastore&#8217;s unique characteristics imply a different way of designing and managing data to take advantage of the ability to scale automatically.
</p></blockquote>
<p> So, forget about queries involving group functions like count(*), min(), max()&#8230; <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>I wish they had some good examples on how to use the AppEngine Datastore to do data mining. How should/would a &#8220;web analytics&#8221; application be implemented using AppEngine for example?</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/appengine-datastore-limitations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>urlborg.xml (video)</title>
		<link>http://vrypan.net/log/2008/urlborgxml-video/</link>
		<comments>http://vrypan.net/log/2008/urlborgxml-video/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 11:25:04 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/21/urlborgxml-video/</guid>
		<description><![CDATA[On the urlborg.xml front, a lot has been going on during the last days. A new interface, documentation, etc. Check out urlBorg developers blog for more.]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/RXxfLWKg8WQ&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/RXxfLWKg8WQ&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>On the urlborg.xml front, a lot has been going on during the last days. A new interface, documentation, etc. Check out <a href="http://blog.urlborg.com/">urlBorg developers blog</a> for more.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborgxml-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>urlBorg developers blog, prologue theme and twitter</title>
		<link>http://vrypan.net/log/2008/urlborg-developers-blog-prologue-theme-and-twitter/</link>
		<comments>http://vrypan.net/log/2008/urlborg-developers-blog-prologue-theme-and-twitter/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 18:21:39 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[prologue]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress themes]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/17/urlborg-developers-blog-prologue-theme-and-twitter/</guid>
		<description><![CDATA[I set up a separate blog, blog.urlborg.com where I will post news about urlBorg. I chose the Prologue wordpress theme that resembles twitter a lot in look and feel. I also installed Twitter Tools and set it up to update &#8230; <a href="http://vrypan.net/log/2008/urlborg-developers-blog-prologue-theme-and-twitter/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I set up a separate blog, <a href="http://blog.urlborg.com/">blog.urlborg.com</a> where I will post news about <a href="http://www.urlb.org/">urlBorg</a>.</p>
<p>I chose the <a href="http://wordpress.com/blog/2008/01/28/introducing-prologue/">Prologue</a> wordpress theme that resembles twitter a lot in look and feel. I also installed <a href="http://wordpress.org/extend/plugins/twitter-tools/">Twitter Tools</a> and set it up to update <a href="http://www.twitter.com/urlborg">twitter.com/urlborg</a>. I like the way those too integrate together.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-developers-blog-prologue-theme-and-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>checking your web server logs for urlB.org links</title>
		<link>http://vrypan.net/log/2008/checking-your-web-server-logs-for-urlborg-links/</link>
		<comments>http://vrypan.net/log/2008/checking-your-web-server-logs-for-urlborg-links/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 12:59:59 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/17/checking-your-web-server-logs-for-urlborg-links/</guid>
		<description><![CDATA[If you are a site owner, you probably like knowing how your content is used, even if this is just an incoming link. One of the nice features of urlB.org is that you can easily tell which urls of your &#8230; <a href="http://vrypan.net/log/2008/checking-your-web-server-logs-for-urlborg-links/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you are a site owner, you probably like knowing how your content is used, even if this is just an incoming link. One of the nice features of urlB.org is that you can easily tell which urls of your site have been &#8220;shortened&#8221; by it, just by looking at your server logs!</p>
<p>Here are a couple of entries from my logs: </p>
<pre>grep "urlBorg/1.0" &lt; access_log | grep -v HEAD </pre>
<p><code>69.73.152.127 - - [14/Feb/2008:16:48:03 +0200] "GET /weblog/ HTTP/1.1" 200 26385 "-" "urlBorg/1.0 (+http://www.urlb.org/) [lgfy]"<br />
69.73.152.127 - - [14/Feb/2008:16:48:20 +0200] "GET /weblog/2007/12/08/3214/ HTTP/1.1" 200 19345 "-" "urlBorg/1.0 (+http://www.urlb.org/) [lggw]"</code></p>
<p>Not only I am able to see when a shortcut was created to one of my pages, but I can also see the &#8220;URL key&#8221; (ex. &#8220;lgfy&#8221;) -using the <a href="http://www.urlb.org/developers/">API</a> I could get extra info about the short URL, like stats, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/checking-your-web-server-logs-for-urlborg-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>urlBorg as OS X system-wide service</title>
		<link>http://vrypan.net/log/2008/urlborg-as-os-x-system-wide-service/</link>
		<comments>http://vrypan.net/log/2008/urlborg-as-os-x-system-wide-service/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 11:10:00 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/15/urlborg-as-os-x-system-wide-service/</guid>
		<description><![CDATA[Download]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/O8GuoEXjvU4&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/O8GuoEXjvU4&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p><a href="http://www.urlb.org/tools/">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-as-os-x-system-wide-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>using urlB.org API from PHP</title>
		<link>http://vrypan.net/log/2008/using-urlborg-api-from-php/</link>
		<comments>http://vrypan.net/log/2008/using-urlborg-api-from-php/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 13:37:20 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/13/using-urlborg-api-from-php/</guid>
		<description><![CDATA[If you are interested to use the urlB.org API from within PHP, here is a simple wrapper. First download urlborg.php (and, of course, make sure you have your API key). Now, creating short URLs and getting info about them is &#8230; <a href="http://vrypan.net/log/2008/using-urlborg-api-from-php/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you are interested to use the <a href="http://www.urlb.org/developers/">urlB.org API</a> from within PHP, here is a simple wrapper.</p>
<p>First download <a href="http://urlborg.s3.amazonaws.com/urlborg.php">urlborg.php</a> (and, of course, make sure you have your <a href="http://www.urlb.org/developers/register.php">API key</a>).</p>
<p>Now, creating short URLs and getting info about them is easy. Here is an example:</p>
<pre>
require_once 'urlborg.php' ;
$ub = new urlBorg('use your API key here') ;
$info = $ub->get_info('lgfy') ;
if ($ub->get_error()) {
   echo 'ERROR! Code:' . $ub->get_error('n') .
   ' desc:' . $ub->get_error('s') ;
} else {
   print_r($info) ;
}
$short = $ub->create_new('http://vrypan.net/') ;
if ($ub->get_error()) {
    echo 'ERROR! Code:' . $ub->get_error('n') .
    ' desc:' . $ub->get_error('s') ;
} else {
    print_r($short) ;
}
</pre>
<p>(the example is included in the class headers. Don&#8217;t copy-paste it from this post since WordPress seems to change the quotes in ways that PHP doesn&#8217;t like <img src='http://vrypan.net/log/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/using-urlborg-api-from-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>urlB.org updates (API, etc)</title>
		<link>http://vrypan.net/log/2008/urlborg-updates-api-etc/</link>
		<comments>http://vrypan.net/log/2008/urlborg-updates-api-etc/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 16:36:53 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2008/02/01/urlborg-updates-api-etc/</guid>
		<description><![CDATA[urlB.org updates for 2008-02-01: API calls &#8220;create&#8221;, &#8220;info&#8221; will return target url mime type and size urlkeys are unique for each url (and API key). If you are using the web interface, this means that next time someone submits the &#8230; <a href="http://vrypan.net/log/2008/urlborg-updates-api-etc/">read more <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.urlb.org/">urlB.org</a> updates for 2008-02-01:</p>
<ul>
<li>API calls &#8220;create&#8221;, &#8220;info&#8221; will return target url mime type and size</li>
<li>urlkeys are unique for each url (and API key). If you are using the web interface, this means that next time someone submits the same URL they will get the same short URL. If you are using the API, you will get a unique short URL for each pair of (url,apikey)</li>
<li>the &#8220;send SMS&#8221; option has been removed since it was inactive anyway</li>
</ul>
<p>More info on the API can be found <a href="http://www.urlb.org/developers/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2008/urlborg-updates-api-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>urlB.org: subsrcibe to search results</title>
		<link>http://vrypan.net/log/2007/urlborg-subsrcibe-to-search-results/</link>
		<comments>http://vrypan.net/log/2007/urlborg-subsrcibe-to-search-results/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 00:26:53 +0000</pubDate>
		<dc:creator>Panayotis</dc:creator>
				<category><![CDATA[urlborg]]></category>
		<category><![CDATA[opensearch]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://vrypan.net/log/2007/12/18/urlborg-subsrcibe-to-search-results/</guid>
		<description><![CDATA[urlB.org&#8217;s search is a great tool for site owners that want to keep an eye on shortcuts going to their site. Now, you can subscribe to search results (RSS feed)!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.urlb.org/search/">urlB.org&#8217;s search</a> is a great tool for site owners that want to keep an eye on shortcuts going to their site.</p>
<p>Now, you can subscribe to search results (RSS feed)!</p>
<p><img src='http://vrypan.net/log/wp-content/uploads/2007/12/picture-1.png' alt='picture-1.png' /></p>
<p><img src='http://vrypan.net/log/wp-content/uploads/2007/12/picture-2.png' alt='picture-2.png' /></p>
]]></content:encoded>
			<wfw:commentRss>http://vrypan.net/log/2007/urlborg-subsrcibe-to-search-results/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

