<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6371440541747128063</id><updated>2012-02-16T00:02:49.894-08:00</updated><category term='Python'/><category term='games'/><category term='RSS'/><category term='Wikipedia'/><category term='Microsoft'/><category term='IMDB'/><category term='web'/><category term='Google'/><category term='programming'/><title type='text'>The Geeks Shall Inherit the Earth</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-8834737211278727260</id><published>2007-09-23T13:25:00.000-07:00</published><updated>2008-11-03T19:58:15.137-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Rebooting the Web</title><content type='html'>&lt;p&gt;For the last few years, the thing all the cool software developers have been talking about is Web Services. Unfortunately, what they’re usually talking about is SOAP and the rest of the W3C &lt;a href="http://www.w3.org/TR/2002/WD-ws-arch-20021114/"&gt;web services stack&lt;/a&gt;.  My experience with SOAP suggests to me that it is not particularly well designed, an opinion &lt;a href="http://wanderingbarque.com/nonintersecting/2006/11/15/the-s-stands-for-simple/"&gt;others seem to share&lt;/a&gt;.  But the real issue I have with it is calling the whole business “&lt;em&gt;web &lt;/em&gt;services”. I’m all for an open protocol for remote method invocation based on HTTP and XML, but don’t assume that just because you’re using HTTP that means that what you’re doing is “web-like”.&lt;/p&gt; &lt;p&gt;What has made the web so successful is two things: openness and architecture. Openness is really important if you want your technology to gain widespread acceptance, but hyperlinking is what makes the web special. It’s, you know, the “web” part. Hyperlinking is what lets the users of the system generate not only all the content, but the distributed structure as well. And then it lets you do all sorts of other cool things, like have two guys from Stanford write an algorithm to analyze all that user-generated structure and build a great new &lt;a href="http://www.google.com/"&gt;search engine&lt;/a&gt;.  When the history of the web is written, I predict that SOAP will be a footnote but that &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; will play a key role. SOAP (or some improved version thereof) will have proven to be a useful technology. But if true web services are to be successful at all, REST, with its approach to exposing all of the objects of a system so that third parties can exploit that access in flexible and unpredictable ways, is how it will happen.&lt;/p&gt; &lt;p&gt;&lt;span id="more-12"&gt;&lt;/span&gt;Another thing that people seem to overlook is that “web applications” are rarely very web-like.  They’re &lt;em&gt;deployed &lt;/em&gt;via the web, but not they’re not really part of the web at all.  I love the travel site &lt;a href="http://www.sidestep.com/"&gt;SideStep&lt;/a&gt;. It lets me build and manipulate a view of a huge number of airline fares in a way that lets me find exactly what I need. But I can’t link to an individual view of available fares that meet certain criteria and then send that link to a friend.&lt;/p&gt; &lt;p&gt;Wikipedia, on the other hand, lets you link to any topic, any version of a topic, any conversation about that topic, and the list of all edits by any user who has edited that topic. That kind of access to all the information in Wikipedia is what lets clever people create things like the &lt;a href="http://wikiscanner.virgil.gr/"&gt;WikiScanner&lt;/a&gt; that’s caused such a stir lately. Google Maps is another great example of a web-like web application. Its “Link to this page” offers a link to the current view that you can paste into an email or embed in your own web page. Which is not even to mention its support for an endless variety of mashups that display everything from US Census Bureau &lt;a href="http://maps.webfoot.com/"&gt;statistics&lt;/a&gt; to stores where Nintendo Wiis are &lt;a href="http://wii.findnearby.net/"&gt;in stock&lt;/a&gt;. Any time you give users a way to exploit your technology and remove the limits on how they can use it, good and surprising things will happen.&lt;/p&gt; &lt;p&gt;Which brings me to my point.  I was highly amused to hear that Microsoft had &lt;a href="http://scobleizer.com/2007/05/01/microsoft-rebooted-the-web-yesterday/"&gt;rebooted the web&lt;/a&gt; a few months ago. Now if anybody knows something about rebooting, it’s Microsoft, but this was still pretty big news. If you haven’t heard about &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;, the new technology that spurred this surprising announcement, perhaps it’s because the rest of the web has continued doing its thing. You’d be forgiven for not noticing the reboot.&lt;/p&gt; &lt;p&gt;Silverlight looks like a really cool technology.  But it didn’t, nor will it ever, reboot the web, because it &lt;em&gt;isn’t&lt;/em&gt; the web. It lets you deploy applications via the web and it probably “plays well” with the web. But unless Microsoft builds in all sorts of clever ways for people to assemble and exploit this technology in unplanned ways, it will never be a part of the web. And for a company known for trying to strictly control how people use its software, that seems unlikely.&lt;/p&gt; &lt;p&gt;Update (July 4, 2008): Apparently Google &lt;a href="http://googlesystem.blogspot.com/2008/04/google-search-rest-api.html"&gt;agrees about REST&lt;/a&gt;. The true mark of REST’s success is that it’s starting to become the default. HTTP APIs are just made that way, without anyone necessarily even calling them “REST”.&lt;/p&gt;&lt;p&gt;Update (November 3, 2008): ProgrammableWeb adds its 1000th entry into its web API directory.  Guess which type of API &lt;a href="http://blog.programmableweb.com/2008/11/03/1000-web-apis/"&gt;accounts for 63% of the entries?&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-8834737211278727260?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/8834737211278727260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=8834737211278727260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/8834737211278727260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/8834737211278727260'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2007/09/rebooting-web.html' title='Rebooting the Web'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-5683005570015229687</id><published>2007-09-09T11:57:00.000-07:00</published><updated>2008-08-30T11:01:22.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IMDB'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Favorite Web Apps</title><content type='html'>&lt;p&gt;I got involved in a conversation the other day about favorite web apps.  Here’s my Top Five:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;IMDB - Wikipedia is starting to contend with IMDB as the first place I go to look up information on movies, but IMDB holds a special place in my heart. I’ll never forget discovering it about ten years ago. That was the first time I was certain that the web was going to totally change how we organize and access information. The complete freedom to follow the highly interconnected relationships between movies, actors, and directors was thrilling. Before then, the web was a faster and more convenient way to get at information that could be had via other channels. Tremendously useful, for sure, but not quite revolutionary. There may be examples that pre-date it, but IMDB was the site that really brought it home for me.&lt;/li&gt;&lt;li&gt;Wikipedia - Opinions seem to range from WIkipedia being more accurate than Encyclopedia Brittanica to it being so inaccurate as to be a joke. But for my money, it is the best thing created since the web itself. Paul Graham &lt;a href="http://www.paulgraham.com/web20.html"&gt;put it better than I could&lt;/a&gt;: “Experts have given Wikipedia middling reviews, but they miss the critical point: it’s good enough. And it’s free, which means people actually read it. On the web, articles you have to pay for might as well not exist. Even if you were willing to pay to read them yourself, you can’t link to them. They’re not part of the conversation.”&lt;/li&gt;&lt;li&gt;Gmail - Not so much because of its AJAX implementation, although that’s very cool, but because of how Google re-thought the user interface of a mail reader. For example, moving entire threads back into the Inbox when someone replies to an archived message. And, of course, the ability to rapidly search all messages with a single keystroke is invaluable. Not only is it highly effective in discovering what I’m looking for, but it has freed me from my compulsion to create large hierarchies of mail folders. Filing messages in these folders consumes a lot of time and energy and often makes finding messages more difficult rather than easier.&lt;/li&gt;&lt;li&gt;Google Maps - I love maps, and I’m not aware of a better site for easily navigating maps and satellite imagery. Google Earth/Maps* is one of my favorite ways to waste time.&lt;/li&gt;&lt;li&gt;RSS - Sort of an application framework as opposed to a specific application, of course, but transformative however you categorize it. As &lt;a href="http://www.netvibes.com/"&gt;Netvibes &lt;/a&gt;puts it, RSS lets you “remix” the web.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The key to most of these examples (and the web itself) is having a simple but effective model (e.g. information feeds, encyclopedia topics, email messages), defining an accessible set of operators on that model (e.g. publication/subscription/aggregation, create/edit/diff/rollback, labeling/archiving), and then removing as many restrictions from users’ ability to exploit the operators as possible.&lt;/p&gt; &lt;p&gt;* Update (2007-09-13): Make that Google &lt;a href="http://earth.google.com/"&gt;Earth&lt;/a&gt;/&lt;a href="http://maps.google.com/"&gt;Maps&lt;/a&gt;/&lt;a href="http://earth.google.com/sky/"&gt;Sky&lt;/a&gt;/&lt;a href="http://moon.google.com/"&gt;Moon&lt;/a&gt;! **&lt;/p&gt; &lt;p&gt;** Update (2007-09-19): I missed &lt;a href="http://www.google.com/mars/"&gt;Google Mars&lt;/a&gt;.  I think Google’s producing map applications faster than I can keep track of them.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-5683005570015229687?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/5683005570015229687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=5683005570015229687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/5683005570015229687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/5683005570015229687'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2007/09/for-last-few-years-thing-all-cool.html' title='Favorite Web Apps'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-4995006569170818463</id><published>2007-09-01T18:37:00.000-07:00</published><updated>2008-08-30T10:41:17.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Realistic Space Combat Game?</title><content type='html'>&lt;p&gt;Here’s a random thought I had today.  Why has there not been a single space combat game with realistic physics since &lt;a href="http://en.wikipedia.org/wiki/Asteroids_%28arcade_game%29"&gt;Asteroids&lt;/a&gt;?  A game where you pilot a space fighter that doesn’t behave as if it’s in an atmosphere?&lt;/p&gt; &lt;p&gt;Well, I don’t think there’s anything that doesn’t exist somewhere on the internet (consider &lt;a href="http://xkcd.com/305/"&gt;Rule 34&lt;/a&gt;).  It turns out that someone asked themselves the same question and then actually created such a game, &lt;a href="http://www.voidwar.com/"&gt;Void War&lt;/a&gt;. An independent game that received pretty weak reviews even from the backwater game sites I’ve never heard of that reviewed it, though. The game may not be much, but the designer’s story behind the creation of the game is &lt;a href="http://www.voidwar.com/designer1.html"&gt;pretty interesting&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I think there could be a market for a mainstream game of this nature. It would be difficult to learn to control a space fighter with realistic physics, so maybe the lack of arcadiness would doom such a game to failure. But I think positioning it as more of a simulation would help. Consider all the hyper realistic flight simulators out there. They couldn’t be less arcadey, but they have a small but loyal market. Better yet, why not a “Battlestar Galactica” game? One of that show’s hallmarks is the (mostly) realistic physics of its space combat. Duplicate that in a video game, offer the option for true realism or physics-lite combat and I think you’d have a solid hit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-4995006569170818463?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/4995006569170818463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=4995006569170818463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/4995006569170818463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/4995006569170818463'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2007/09/realistic-space-combat-game.html' title='Realistic Space Combat Game?'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-3512448653578361984</id><published>2007-08-29T18:20:00.000-07:00</published><updated>2008-08-30T11:03:37.012-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Spelling Corrector in 21 Lines of Python</title><content type='html'>&lt;p&gt;A friend recently pointed out a very interesting article from Peter Norvig, the Director of Research at Google: &lt;a href="http://www.norvig.com/spell-correct.html"&gt;How to Write a Spelling Corrector&lt;/a&gt;. The point of the article was to illustrate some spell-correction theory, but of course what I took away from it was that he had written a working spelling corrector in just 21 lines of Python code. Ammo for the language wars!&lt;/p&gt; &lt;p&gt;My friend also mentioned that he often mistypes things because his hands are offset one position on the keyboard. So he’ll type “je;;p” instead of “hello”. Since spelling correction is so easy, why do none of them offer a way to correct offset typing, he wondered? I told him he was probably just in a very small minority. I doubt that many web users touch type at all, let alone have the offset typing problem. But more importantly, here was an opportunity to ram home the point that so much is possible in so very few lines of Python.&lt;/p&gt; &lt;p&gt;So I took a swing at a solution, and five lines of code is what it took me to add offset-typing correction to Norvig’s spelling corrector:&lt;/p&gt; &lt;p&gt;&lt;span id="more-9"&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;offsets_right = {'j' : 'h', 'i' : 'u', ';' : 'l', 'p' : 'o'}&lt;br /&gt;offsets_left  = {'g' : 'h', 'y' : 'u', 'k' : 'l', 'i' : 'o'}&lt;br /&gt;def offsets(word):&lt;br /&gt;  return set([''.join(map(lambda x: offsets_right.get(x, 'a'), word)),&lt;br /&gt;              ''.join(map(lambda x: offsets_left.get(x, 'a'), word))])&lt;/pre&gt; &lt;p&gt;And then you just have to tweak the final function:&lt;/p&gt; &lt;pre&gt;def correct(word):&lt;br /&gt;  return max(known([word]) or known(edits1(word)) or known_edits2(word)&lt;br /&gt;             or known(offsets(word)) or [word],&lt;br /&gt;             key=lambda w: NWORDS[w])&lt;/pre&gt; &lt;p&gt;This solution checks for words typed with a left or right offset. For example:&lt;/p&gt; &lt;pre&gt;&gt;&gt;&gt; correct('hillo')&lt;br /&gt;'hullo'&lt;br /&gt;&gt;&gt;&gt; correct('ji;;p')&lt;br /&gt;'hullo'&lt;br /&gt;&gt;&gt;&gt; correct('gykki')&lt;br /&gt;'hullo'&lt;/pre&gt; &lt;p&gt;Notes:&lt;br /&gt;1. I use ‘hullo’ instead of ‘hello’ since the latter never appears in the Sherlock Holmes stories used as a training corpus.&lt;br /&gt;2. The offset dictionaries only have 4 entries, to cover the four letters in the example. The complete solution would need to have entries for every non-meta key on the keyboard (except for the ones on the left or right edge).&lt;br /&gt;3. My solution is a bit more complicated than I’d like.  What I wanted to write was:&lt;br /&gt;&lt;code&gt;map(offsets_right.get, word)&lt;/code&gt;&lt;br /&gt;Which is nice and clear but for various reasons I had to use:&lt;br /&gt;&lt;code&gt;''.join(map(lambda x: offsets_right.get(x, 'a'), word))&lt;/code&gt;&lt;br /&gt;There’s probably a nice Python solution that would be as terse but more readable.&lt;/p&gt; &lt;p&gt;Here’s the complete solution:&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:85%;"&gt;import re, string, collections&lt;br /&gt;&lt;br /&gt;def words(text): return re.findall('[a-z]+', text.lower())&lt;br /&gt;&lt;br /&gt;def train(features):&lt;br /&gt;  model = collections.defaultdict(lambda: 1)&lt;br /&gt;  for f in features:&lt;br /&gt;      model[f] += 1&lt;br /&gt;  return model&lt;br /&gt;&lt;br /&gt;NWORDS = train(words(file('holmes.txt').read()))&lt;br /&gt;&lt;br /&gt;def edits1(word):&lt;br /&gt;  n = len(word)&lt;br /&gt;  return set([word[0:i]+word[i+1:] for i in range(n)] + ## deletion&lt;br /&gt;             [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + ## transposition&lt;br /&gt;             [word[0:i]+c+word[i+1:] for i in range(n) for c in string.lowercase] + ## alteration&lt;br /&gt;             [word[0:i]+c+word[i:] for i in range(n+1) for c in string.lowercase]) ## insertion&lt;br /&gt;&lt;br /&gt;def known_edits2(word):&lt;br /&gt;  return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)&lt;br /&gt;&lt;br /&gt;def known(words): return set(w for w in words if w in NWORDS)&lt;br /&gt;&lt;br /&gt;offsets_right = {'j' : 'h', 'i' : 'u', ';' : 'l', 'p' : 'o'}&lt;br /&gt;offsets_left  = {'g' : 'h', 'y' : 'u', 'k' : 'l', 'i' : 'o'}&lt;br /&gt;&lt;br /&gt;def offsets(word):&lt;br /&gt;  return set([''.join(map(lambda x: offsets_right.get(x, 'a'), word)),&lt;br /&gt;              ''.join(map(lambda x: offsets_left.get(x, 'a'), word))])&lt;br /&gt;&lt;br /&gt;def correct(word):&lt;br /&gt;  return max(known([word]) or known(edits1(word)) or known_edits2(word)&lt;br /&gt;             or known(offsets(word)) or [word],&lt;br /&gt;             key=lambda w: NWORDS[w])&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-3512448653578361984?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/3512448653578361984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=3512448653578361984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/3512448653578361984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/3512448653578361984'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2007/08/spelling-corrector-in-21-lines-of.html' title='Spelling Corrector in 21 Lines of Python'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-2705035424408754300</id><published>2007-01-13T13:34:00.000-08:00</published><updated>2008-08-30T10:39:22.114-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python</title><content type='html'>&lt;p&gt;If you love Python, this post is not for you. If you hate Python, this post is not for you. If you were thinking about trying Python, or you’ve tried it and you’re just not sure, read on.&lt;/p&gt; &lt;p&gt;Here’s my favorite entries in the world of Why Python is Great:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.python.org/about/quotes/"&gt;Quotes about Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linuxjournal.com/article/3882"&gt;Why Python?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.prescod.net/python/why.html"&gt;Why I Promote Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;Can Your Programming Language Do This?&lt;/a&gt;  (More of a dig on Java, and doesn’t even mention Python, but a very entertaining read.)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you want to do web-based stuff, then try &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt;.  Seriously, try it.  You’ll thank me.&lt;/p&gt; &lt;p&gt;Now, if you’re really looking to spend some time thinking about languages, the following discussion is very interesting if a bit esoteric and paints Python in a more nuanced light:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.paulgraham.com/icad.html"&gt;Revenge of the Nerds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.paulgraham.com/icadmore.html"&gt;Re: Revenge of the Nerds&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.prescod.net/python/IsPythonLisp.html"&gt;On the Relationship Between Python and Lisp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Enthusiasts of other languages could put together similar lists for their own languages. So if you don’t like Python for whatever reason, but you’ve always wondered about Ruby or Scheme, go seek out more information. The most important thing is that we as programmers continually seek to expand our language horizons. But whatever you do, please, I’m begging you, don’t use Perl. &lt;img src="http://blog.cochese.com/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-2705035424408754300?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/2705035424408754300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=2705035424408754300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/2705035424408754300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/2705035424408754300'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2007/01/python.html' title='Python'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6371440541747128063.post-7952642948592865319</id><published>2006-08-12T09:21:00.000-07:00</published><updated>2008-08-30T10:40:06.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web 2.0</title><content type='html'>&lt;p&gt;I just read a great essay by Paul Graham on the definition of &lt;a href="http://www.paulgraham.com/web20.html"&gt;"Web 2.0"&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;“Experts have given Wikipedia middling reviews, but they miss the critical point: it’s good enough. And it’s free, which means people actually read it. On the web, articles you have to pay for might as well not exist. Even if you were willing to pay to read them yourself, you can’t link to them. They’re not part of the conversation.”&lt;/p&gt; &lt;p&gt;With this and other comments, Graham really sums up nicely the fundamental reason why many organizations don’t “get” the web. They think of it as simply a new distribution channel for their existing products (magazines, tv shows, encyclopedias, etc.). They think they get it, because they recognize the increased power of this new channel, but they don’t understand that entirely new forms of existing products and new products that never existed before are now possible, and that their non-web products can’t compete.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6371440541747128063-7952642948592865319?l=tgsite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgsite.blogspot.com/feeds/7952642948592865319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6371440541747128063&amp;postID=7952642948592865319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/7952642948592865319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6371440541747128063/posts/default/7952642948592865319'/><link rel='alternate' type='text/html' href='http://tgsite.blogspot.com/2006/08/web-20.html' title='Web 2.0'/><author><name>Justin</name><uri>http://www.blogger.com/profile/10726206051876626242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_zOr4dApjxSo/R9yOuudRDuI/AAAAAAAAAJs/mm5Ho6bkmVw/S220/Kauai+-+October+2005+040+(Levels).jpg'/></author><thr:total>0</thr:total></entry></feed>
