<?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'><id>tag:blogger.com,1999:blog-13500881</id><updated>2009-09-22T20:20:04.074-05:00</updated><title type='text'>A Ship at Port</title><subtitle type='html'>Reports from sea: programming, artificial intelligence, mathematics, and other things</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13500881.post-112423117175758976</id><published>2005-08-16T17:08:00.004-05:00</published><updated>2008-04-28T16:58:57.912-05:00</updated><title type='text'>Closures in Ruby and Python</title><content type='html'>&lt;b&gt;&lt;i&gt;Edit:&lt;/i&gt;&lt;/b&gt; This post has come up in a recent (2008-04-27) post on reddit.  For an account of where the term, closure, came from &lt;a href="http://mrevelle.blogspot.com/2006/10/closure-on-closures.html"&gt;look here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While reading the the &lt;a href="http://www.magpiebrain.com/archives/2005/08/14/rails_and_django"&gt;Django/RoR comparison&lt;/a&gt; by Sam over at magpiebrain the "Ruby has closures, Python doesn't" argument was mentioned.  I admit to not being really familiar with the concept, but I believe I understand what it is.  The thing is, I don't see what's important about it.&lt;br /&gt;&lt;br /&gt;A link was given in the post to &lt;a href="http://www.artima.com/intv/closures.html"&gt;an interview with Yukihiro Matsumoto&lt;/a&gt; where "Matz" is asked about what a closure is and how it's beneficial.  Here's the most relevant portion of the interview:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Bill Venners: OK, but what is the benefit of having the context? The distinction that makes Ruby's closure a real closure is that it captures the context, the local variables and so on. What benefit do I get from having the context in addition to the code that I don't get by just being able to pass a chunk of code around as an object?&lt;br /&gt;&lt;br /&gt;Yukihiro Matsumoto: Actually, to tell the truth, the first reason is to respect the history of Lisp. Lisp provided real closures, and I wanted to follow that.&lt;br /&gt;&lt;br /&gt;Bill Venners: One difference I can see is that data is actually shared between the closure objects and the method. I imagine I could always pass any needed context data into a regular, non-closure, block as parameters, but then the block would just have a copy of the context, not the real thing. It's not sharing the context. Sharing is what's going on in a closure that's different from a plain old function object.&lt;br /&gt;&lt;br /&gt;Yukihiro Matsumoto: Yes, and that sharing allows you to do some interesting code demos, but I think it's not that useful in the daily lives of programmers. It doesn't matter that much. The plain copy, like it's done in Java's inner classes for example, works in most cases. But in Ruby closures, I wanted to respect the Lisp culture.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I respect cool implementations of higher-order concepts as much as the next guy, but I can't help but feel cheated by that response.  I've seen some bickering between Python and Ruby clerics that try to demonstrate why closures are important and how Python doesn't have them; nothing I saw gave a practical example.&lt;br /&gt;&lt;br /&gt;Anyone have any?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Edit:&lt;/i&gt;&lt;/b&gt; I may have found a practical example, but I'm not sure what's so special about it.&lt;br /&gt;&lt;br /&gt;Here's a wiki entry about the &lt;a href="http://martinfowler.com/bliki/Closure.html"&gt;benefits of closures in Ruby&lt;/a&gt; and here are the &lt;a href="http://ivan.truemesh.com/archives/000392.html"&gt;Pythonized versions&lt;/a&gt; that work the same way.  This is just a special case of closures, I'm still looking for something completely different.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112423117175758976?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112423117175758976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112423117175758976' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112423117175758976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112423117175758976'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/closures-in-ruby-and-python.html' title='Closures in Ruby and Python'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-117621407444690160</id><published>2007-04-10T08:57:00.000-05:00</published><updated>2007-04-10T12:38:55.096-05:00</updated><title type='text'>Too sexy</title><content type='html'>&lt;i&gt;In response to &lt;a href="http://suniltanna.com/random/2007/04/10/competing-with-microsoft-is-dead-to-paul-graham/"&gt;this post&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;From the post:&lt;/b&gt;&lt;br /&gt;&lt;i&gt;"That’s a pity really, because even though [Paul Graham] says eventually Microsoft may encounter problems (who would have thunk?), [he] effectively concedes that Microsoft is going to make a lot more money in future. And some people are going to get rich competing with, and taking a chunk out of Microsoft’s revenues - although apparently not Graham’s start-ups because it’s unfashionable to even try."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;M&lt;/b&gt;icrosoft's flagship product is the Windows OS, but supposedly they don't profit from its sales &lt;i&gt;[&lt;b&gt;Edit:&lt;/b&gt; this is incorrect, it's actually Windows and Office that keep MS from major losses]&lt;/i&gt;.  They keep developing new versions of Windows in order to maintain their share of the market - those customers will then pay exorbitant prices for other products (e.g., MS Office) which sustain the company.&lt;br /&gt;&lt;br /&gt;The problem is that the OS market has been commoditized and Microsoft Windows is an inferior product.  Sun open sourcing Solaris is an indicator of OS commoditization and is Windows OS objectively better than other OSes?  Assuming Microsoft continues down the path of producing OSes that barely meet status quo, it's only a matter of time before they lose their grip on the desktop market.  Of course, maybe they'll surprise us all and build an awesome Minix-based OS.&lt;br /&gt;&lt;br /&gt;If MS loses the desktop wars, they will end up where they started, writing third-party applications for Apple.  And there's always web application development.&lt;br /&gt;&lt;br /&gt;It's not only that web applications are sexy, it's that the OS wars require a large amount of resources (people and/or money) to win.  How many Windows users choose Wordperfect over Word?  How many Apple users choose Powerpoint over Keynote?  It seems pretty futile for a third-party developer, especially a startup, to attempt to beat first-party applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-117621407444690160?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/117621407444690160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=117621407444690160' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/117621407444690160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/117621407444690160'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2007/04/too-sexy.html' title='Too sexy'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-115972115135138608</id><published>2006-10-01T10:59:00.000-05:00</published><updated>2006-10-02T08:32:04.410-05:00</updated><title type='text'>Closure on closures</title><content type='html'>In a &lt;a href="http://mrevelle.blogspot.com/2005/08/closures-in-ruby-and-python.html"&gt;previous post&lt;/a&gt;, closures were discussed without much being said.  That was over a year ago, since then I've come across a few posts that clarify.&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Here's a description of the concept by comparison to objects:&lt;br /&gt;&lt;blockquote&gt;Objects are data with methods attached, closures are functions with data attached.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(Sorry, I couldn't find the source for this quote, so this is a paraphrase from memory.)&lt;/span&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;An explanation of where the term closure comes from by Max Hailpern, co-author of &lt;span style="font-style: italic;"&gt;Concrete Abstractions&lt;/span&gt; - and why they didn't use it in their book:&lt;br /&gt;&lt;blockquote&gt;The reason [it wasn't included] is that "closure" only makes sense in a particular historical context, where procedures had previously been left "open", that is with free variables not associated with any particular binding.  This was the case in various pre-Scheme Lisps, and lead to what was known as the "funarg problem," short for "functional argument", though it also was manifested when procedures were used in other first-class ways than as arguments, for example, as return values, where it was confusingly called the "upward funarg problem" (by contrast to the "downward funarg problem," where the arg was genuinely an arg).  The "funarg problem" is what logicians had been calling "capture of free variables," which occurs in the lambda calculus if you do plain substitution, without renaming, in place of proper beta-reduction.&lt;br /&gt;&lt;br /&gt;So anyhow, an evolutionary milestone in the development of the Lisp family of languages was the realizations that procedures should be "closed", that is, converted into a form where all the variables are bound rather than free.  (The way this is normally done, as others have written in this thread, is by associating the procedure text, which still has free variables, with a binding environment that provides the bindings.)&lt;br /&gt;&lt;br /&gt;Because this was such a big deal in terms of the languages' evolution, Lisp hackers took to using the word "closure" rather than just "procedure" to emphasize that they were talking about this great new lexically scoped kind of procedure.&lt;br /&gt;&lt;br /&gt;As with so many words, it stuck, and people continued using it long after the distinction it was making ceased to be relevant.  (When was the last time you saw a procedure that hadn't been closed?)&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(&lt;a href="http://www.cs.utah.edu/plt/mailarch/plt-scheme-2001/msg00226.html"&gt;Link to source.&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;For a mathematical perspective see &lt;a href="http://epsilondelta.net/2006/01/29/programming-like-a-mathematician-i-closures/"&gt;Ted Dziuba's post on closures as a recurrence relation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-115972115135138608?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/115972115135138608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=115972115135138608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/115972115135138608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/115972115135138608'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2006/10/closure-on-closures.html' title='Closure on closures'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-114373175847674341</id><published>2006-03-30T09:45:00.000-05:00</published><updated>2006-03-30T10:15:58.593-05:00</updated><title type='text'>Return of the White Spots</title><content type='html'>Having purchased my first Mac two years ago, I was enticed by processor speed improvements to become a member of Apple's public beta program by purchasing one of the first MacBook Pros.&lt;br /&gt;&lt;br /&gt;There have been &lt;a href="http://www.engadget.com/2006/03/14/whining-macbook-pro-youre-not-alone/"&gt;various&lt;/a&gt; &lt;a href="http://www.macintouch.com/readerreports/macbookpro/topic4057.html"&gt;posts&lt;/a&gt; about MacBook Pro noise problems.  My machine has exhibited this problem, but I've worked around it by fiddling with the lid.  Annoying and occasionally headache inducing, but at least I can pretend all is well if I play loud music.&lt;br /&gt;&lt;br /&gt;Or so I thought...  My last Mac, a Powerbook (Al), was unlucky enough to be afflicted with the notorious &lt;a href="http://www.apple.com/support/powerbook/displayprogram/"&gt;white spots&lt;/a&gt;.  This morning I noticed a little spot on my screen - "no big deal, just some dirt or something," I thought.  Nope, it is a little tiny white spot.  It's located on the right hand side, about 0.75 inches from the end and a little under halfway up the screen.  &lt;br /&gt;&lt;br /&gt;Oh Apple, why do you raise our expectations only to disappoint?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-114373175847674341?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/114373175847674341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=114373175847674341' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/114373175847674341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/114373175847674341'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2006/03/return-of-white-spots.html' title='Return of the White Spots'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-113310773755029656</id><published>2005-11-27T10:58:00.000-05:00</published><updated>2005-11-27T11:08:57.600-05:00</updated><title type='text'>Decision tree building and graphing in Python</title><content type='html'>Spent part of yesterday throwing together an implementation of the &lt;a href="http://en.wikipedia.org/wiki/ID3_algorithm"&gt;ID3 algorithm&lt;/a&gt; for building decision trees.  It uses &lt;a href="http://dkbza.org/pydot.html"&gt;pydot&lt;/a&gt; for creating graphs, so the trees can be outputted in dot format (ascii, for display in &lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt;) or as an image.&lt;br /&gt;&lt;br /&gt;The id3 module can be &lt;a href="http://dynamictyping.org/projects/id3.html"&gt;downloaded here&lt;/a&gt;.  The implementation isn't bullet-proof, but should work fine with good data sets.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example usage and output:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; from id3 import *&lt;br /&gt;&gt;&gt;&gt; dtree = DecisionTree('recycling_bin',&lt;br /&gt;...     [{'dept':'EE', 'size':'large', 'recycling_bin':'no'},&lt;br /&gt;...     {'dept':'CS', 'size':'medium', 'recycling_bin':'yes'},&lt;br /&gt;...     {'dept':'EE', 'size':'small', 'recycling_bin':'yes'},&lt;br /&gt;...     {'dept':'CS', 'size':'large', 'recycling_bin':'no'},&lt;br /&gt;...     {'dept':'EE', 'size':'small', 'recycling_bin':'yes'},&lt;br /&gt;...     {'dept':'CS', 'size':'medium', 'recycling_bin':'yes'}])&lt;br /&gt;&gt;&gt;&gt; &lt;br /&gt;&gt;&gt;&gt; dtree.graph.to_string()&lt;br /&gt;'digraph G {\n"no";\n"yes";\n"yes";\n"size";\n"size" -&gt; "no" [label=large];\n"size" -&gt; "yes" [label=small];\n"size" -&gt; "yes" [label=medium];\n}\n'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-113310773755029656?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/113310773755029656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=113310773755029656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/113310773755029656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/113310773755029656'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/11/decision-tree-building-and-graphing-in.html' title='Decision tree building and graphing in Python'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112968293298465398</id><published>2005-10-18T19:35:00.000-05:00</published><updated>2005-10-18T19:48:52.993-05:00</updated><title type='text'>Semantic analysis with Python</title><content type='html'>I came across &lt;a href="http://divmod.org/projects/reverend"&gt;Reverend&lt;/a&gt; ("a general purpose Bayesian classifier") today after reading &lt;a href="http://www.peterbe.com/plog/playing-with-reverend-bayesian"&gt;Peter Bengtsson's post about it&lt;/a&gt;.  Haven't tried it yet, but it looks great.  &lt;br /&gt;&lt;br /&gt;Still looking for a good &lt;a href="http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis"&gt;PLSA&lt;/a&gt;, or even &lt;a href="http://en.wikipedia.org/wiki/Latent_semantic_analysis"&gt;LSA&lt;/a&gt; implementation, preferrably with Python support.  &lt;br /&gt;&lt;br /&gt;Anyone know of one?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112968293298465398?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112968293298465398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112968293298465398' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112968293298465398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112968293298465398'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/10/semantic-analysis-with-python.html' title='Semantic analysis with Python'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112847464248693650</id><published>2005-10-04T18:35:00.000-05:00</published><updated>2005-10-04T20:10:42.516-05:00</updated><title type='text'>"Java, my hero"</title><content type='html'>I now understand why so many developers on MS Windows cling to Java so tightly, it's their saviour from the hellish experience that is Microsoft Visual C++.&lt;br /&gt;&lt;br /&gt;Developing cross-platform applications on a Mac or a Linux machine is not that difficult.  Getting those same applications to build on a MS Windows platform is not that difficult.  The problem is, what if someone needs to do development work of cross-platform software in the MSVC++ environment?  It is possible, but the amount of work required is immense.  The quasi-solution of switching to a different compiler/IDE is an option now, but what about 5+ years ago?&lt;br /&gt;&lt;br /&gt;Java to the rescue!  Well, sorta, application development in Java has many of its own gotchas and "write once, run anywhere" is malarky; but, for developers using MS Windows, Java development frees them from MSVC++ and (this is just a bonus) lets them build applications that are multi-platform.  To sweeten the deal, Java has development tools and build processes that are standard on all major platforms.  With more marketing than necessary, Sun was able to transform the animosity towards MSVC++ and MFC into migration to Java and AWT/Swing.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://www.trolltech.com/products/qt/index.html"&gt;Qt&lt;/a&gt; and &lt;a href="http://www.mingw.org/"&gt;GCC on Windows&lt;/a&gt; gain visibility, I wonder if we'll see some Java application developers downgrading (or is that upgrading?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112847464248693650?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112847464248693650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112847464248693650' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112847464248693650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112847464248693650'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/10/java-my-hero.html' title='&quot;Java, my hero&quot;'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112586284822146370</id><published>2005-09-04T14:08:00.000-05:00</published><updated>2005-09-04T14:40:48.263-05:00</updated><title type='text'>Copyright laws and fair business transactions</title><content type='html'>Yesterday I bought a few CDs from Best Buy, but once I arrived home I realized that I was missing something.  One of the CDs I purchased (or should I say decorative jewel case) was missing its, er, CD.  The CD in question was No Doubt's &lt;i&gt;Rocksteady&lt;/i&gt;, the jewel case was completely wrapped and the little sticky thing on top of the case was intact, but the case was empty.  &lt;br /&gt;&lt;br /&gt;I returned to Best Buy to get the CD I paid for and discover that they don't have any other copies.  "OK," I thought, "not a big deal.  Just give me my money back and I'll run down to Borders and get my CD there."  I was expecting the Best Buy associate would have a problem with my proposed solution and I was right.  At first they weren't sure what to do, but ended up offering me store credit.  According to the Best Buy employee, the store is unable to provide me with a refund because it's a violation of copyright law.  IANAL, but I have a good feeling that's probably not true.  Hesitantly, I accepted their offer, only because I was already running late to a friend's house.&lt;br /&gt;&lt;br /&gt;I can understand the reasoning behind a no refunds policy, but I still think it's unfair to an unlucky customer.  All I did was give them money for a CD, and they didn't fulfill their side of the deal.  I'm not in the loan business; I bought a CD, not a gift card.  &lt;br /&gt;&lt;br /&gt;No CD?  OK, then give me my money back.  &lt;br /&gt;Guess I'll just have to start opening any merchandise I purchase before leaving the store...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112586284822146370?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112586284822146370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112586284822146370' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112586284822146370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112586284822146370'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/09/copyright-laws-and-fair-business.html' title='Copyright laws and fair business transactions'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112484338225295700</id><published>2005-08-23T19:25:00.000-05:00</published><updated>2005-08-23T19:31:37.030-05:00</updated><title type='text'>Google Talk is Live</title><content type='html'>Google has launched &lt;a href="http://it.slashdot.org/article.pl?sid=05/08/23/2316223&amp;tid=217&amp;tid=218"&gt;Google Talk&lt;/a&gt;.&lt;br /&gt;It's a &lt;a href="http://www.jabber.org/"&gt;Jabber&lt;/a&gt; service, and gmail users can use their email address and password to login to talk.google.com.&lt;br /&gt;&lt;br /&gt;What's next?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112484338225295700?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112484338225295700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112484338225295700' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112484338225295700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112484338225295700'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/google-talk-is-live.html' title='Google Talk is Live'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112363951444844364</id><published>2005-08-09T20:50:00.000-05:00</published><updated>2005-08-09T21:05:14.450-05:00</updated><title type='text'>Pythonic file I/O?</title><content type='html'>A coworker of mine has recently been using Python on and off for basic administrative tasks and ran into a problem this week with modifying the contents of a file without rewriting the entire file.  He wasn't trying to modify the file size, just change a number of bytes that were somewhere in the file.  I had forgotten about &lt;a href="http://docs.python.org/lib/module-mmap.html"&gt;mmap&lt;/a&gt;, but is that the best Python module for file modification?  &lt;br /&gt;&lt;br /&gt;It has two main limitations: 1) No way to insert into or delete from a random location in the file.  2) A mmap object maps a file in part or in total, but the mapping must start at the beginning of the file.  This is a problem when modifying large files which can't be loaded entirely into memory, a solution would be to allow the mmap to begin a file mapping at an arbitrary position.&lt;br /&gt;&lt;br /&gt;I understand there are some technical details to make this work.  Completely rewriting a file out may still be needed in some cases; but, all of this should be implemented in a slick module and hidden from the developer.  It's just not very &lt;a href="http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0"&gt;pythonic&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112363951444844364?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112363951444844364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112363951444844364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112363951444844364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112363951444844364'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/pythonic-file-io_09.html' title='Pythonic file I/O?'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112330004567632670</id><published>2005-08-05T22:37:00.000-05:00</published><updated>2005-08-07T08:23:06.333-05:00</updated><title type='text'>Python Rocks</title><content type='html'>I was thinking of just getting to sleep after my last post, but started fiddling with a little Python module to handle parsing words from a source into a vocabulary.  Well, from the time from my last post, minus a quick browsing of &lt;a href="http://www.planetpython.org"&gt;Planet Python&lt;/a&gt; and email checking, I have a basic module written that will accept text input, trash all special characters (e.g., (){}!?), use the stemmer, and drop the output in a list.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.python.org/peps/pep-0202.html"&gt;List comprehensions&lt;/a&gt; are great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112330004567632670?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112330004567632670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112330004567632670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112330004567632670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112330004567632670'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/python-rocks.html' title='Python Rocks'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112329624260281611</id><published>2005-08-05T21:31:00.000-05:00</published><updated>2005-08-05T21:44:02.610-05:00</updated><title type='text'>Stemming, information filtering</title><content type='html'>I've started work on an information filtering system to assist in returning only relevant documents.  I'll be using my own implementation of &lt;a href="http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis"&gt;probabilistic latent semantic analysis (PLSA)&lt;/a&gt; at first.  A couple ideas of how to extend it have already entered my head, and a buddy of mine has started playing around with a probabilistic model based off &lt;a href="http://mathworld.wolfram.com/LeastSquaresFitting.html"&gt;least squares&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;I'm doing all of this in Python and already found a &lt;a href="http://www.tartarus.org/~martin/PorterStemmer/"&gt;decent word stemmer algorithm&lt;/a&gt; that's been written in Python.  Not much to it, but it seems to work well.  The next step is building a vocabulary; I've found a few with some Google searches, but I'm going to go ahead and write a Python module to ingest text files, clean out punctuation and digits, stem the remaining words, and write the result to a master vocabulary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112329624260281611?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112329624260281611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112329624260281611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112329624260281611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112329624260281611'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/stemming-information-filtering.html' title='Stemming, information filtering'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112310298090432215</id><published>2005-08-03T15:57:00.000-05:00</published><updated>2005-08-03T16:03:00.910-05:00</updated><title type='text'>For your browsing pleasure</title><content type='html'>I came across these two posts recently: &lt;a href="http://dirtsimple.org/2005/08/multiple-self.html"&gt;The Multiple Self&lt;/a&gt; and &lt;a href="http://dirtsimple.org/2005/08/spooky-mind-hack.html"&gt;A Spooky Mind Hack&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;They're good reading.  If you start &lt;i&gt;The Multiple Self&lt;/i&gt; and get tired of it before finishing, go read the second post.&lt;br /&gt;&lt;br /&gt;Overall, very good stuff, though I do think there are a few inaccuracies in the definition of the "emotional net".  The gist of it is right on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112310298090432215?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112310298090432215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112310298090432215' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112310298090432215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112310298090432215'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/for-your-browsing-pleasure.html' title='For your browsing pleasure'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112291268497692379</id><published>2005-08-01T10:42:00.000-05:00</published><updated>2005-08-01T11:11:25.010-05:00</updated><title type='text'>Ahhh, Django...</title><content type='html'>I've been testing out &lt;a href="http://www.djangoproject.com"&gt;Django&lt;/a&gt; this past week, mostly finished the the first two tutorials.  There's a lot to become familiar with, but I'm amazed at how powerful the framework is.  Though I haven't done much with &lt;a "http://www.rubyonrails.org"&gt;Rails&lt;/a&gt; other than research it, I'm glad that the community is shaping up to allow for &lt;a href="http://www.lonelylion.com/pipermail/chipy/2005-July/001504.html"&gt;exchange of ideas&lt;/a&gt; and friendly competition.  &lt;br /&gt;&lt;br /&gt;This is also a good thing for Python, as I think there were a decent number of Pythoners wishing to do some web application work in Python but ended up using Java (*shudder*) or Rails.  Not to discount the work that many put in on templating engines and basic frameworks for Python, but it's nice to use one framework that's a complete package.&lt;br /&gt;&lt;br /&gt;dynamictyping.com is coming along, I've just been sidetracked of late, getting into AI solutions for information retrieval. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis"&gt;Probabilistic latent semantic analysis&lt;/a&gt; is the topic of the day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112291268497692379?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112291268497692379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112291268497692379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112291268497692379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112291268497692379'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/08/ahhh-django.html' title='Ahhh, Django...'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-112241875960494675</id><published>2005-07-26T17:53:00.000-05:00</published><updated>2005-07-26T17:59:19.606-05:00</updated><title type='text'>The end is near...</title><content type='html'>Not the end of the world, but of this weblog.  I'm going to be moving over to a new site, dynamictyping.com, as soon as I find a good host.  I'm going to test out &lt;a href="http://www.djangoproject.com"&gt;Django&lt;/a&gt; and have a proper setup.  Feel free to send in recommendations for a good hosting company in the Northern VA area.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-112241875960494675?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/112241875960494675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=112241875960494675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112241875960494675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/112241875960494675'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/07/end-is-near.html' title='The end is near...'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111970505761079105</id><published>2005-06-25T07:56:00.000-05:00</published><updated>2005-06-25T08:21:36.593-05:00</updated><title type='text'>Planet Intelligence</title><content type='html'>I'd like to see if there's any interest in a &lt;a href="http://www.planetplanet.org/"&gt;planet&lt;/a&gt; site for weblogs that are geared towards machine intelligence, AI, neuroscience, etc.  A site like this would provide a way to keep updated about what other's are doing and encourage the exchange of ideas.  &lt;br /&gt;&lt;br /&gt;In the mean time, check out &lt;a href="http://yaroslavvb.blogspot.com/"&gt;Yaroslav's site&lt;/a&gt; for links to other related weblogs.&lt;br /&gt;&lt;br /&gt;EDIT: Found a group weblog, &lt;a href="http://www.neurodudes.com/"&gt;neurodudes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111970505761079105?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111970505761079105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111970505761079105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111970505761079105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111970505761079105'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/planet-intelligence.html' title='Planet Intelligence'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111884346289455377</id><published>2005-06-15T08:13:00.000-05:00</published><updated>2005-06-15T11:58:34.533-05:00</updated><title type='text'>The BBS</title><content type='html'>Looking forward to watching &lt;a href="http://www.bbsdocumentary.com"&gt;BBS: The Documentary&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Though I was only a whelp during the end times of the BBS, I have fond memories of playing Barren Realms Elite, downloading shareware games, and chatting with sysops.  If anyone from the BizZ BuzZ, R/C Connection, or other boards that ran during those years in northern VA reads this, please post a comment or shoot me an email.  &lt;br /&gt;&lt;br /&gt;The &lt;a href="http://bbslist.textfiles.com/703/"&gt;703 BBS List&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111884346289455377?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111884346289455377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111884346289455377' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111884346289455377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111884346289455377'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/bbs.html' title='The BBS'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111880068180898460</id><published>2005-06-14T20:52:00.000-05:00</published><updated>2005-06-14T21:01:33.000-05:00</updated><title type='text'>Technorati</title><content type='html'>I have delved even further into the world of weblogging with my new &lt;a href="http://www.technorati.com/profile/mrevelle"&gt;technorati profile&lt;/a&gt;.  I'm interested to see how long and how much effort it takes for an individual blog to get linked into the saturated blogosphere.&lt;br /&gt;&lt;a rel="tag" href="http://www.technorati.com/tag/Weblog"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111880068180898460?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111880068180898460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111880068180898460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111880068180898460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111880068180898460'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/technorati.html' title='Technorati'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111844646888865863</id><published>2005-06-10T17:40:00.000-05:00</published><updated>2005-06-10T22:37:16.560-05:00</updated><title type='text'>More on Intel processors, Macs, and the future of Linux</title><content type='html'>This post is in response to an &lt;a href="http://www.eweek.com/article2/0,1759,1825858,00.asp"&gt;opinion piece&lt;/a&gt; by Steven J. Vaughan-Nichols in eWeek.  This is Vaughan-Nichols second editorial on the topic and he's trying to defend his position that the Linux desktop is in danger from Macs with Intel inside.&lt;br /&gt;&lt;br /&gt;Some quotes from the piece, followed by a response:&lt;br /&gt;_&lt;br /&gt;&lt;i&gt;"One of the most common themes I've been hearing is that Apple will not—will not, I tell you!—be letting its precious operating system ship on anything except its own branded hardware.&lt;br /&gt;&lt;br /&gt;Yes, that appears to be what Apple is planning, but I don't think it'll be able to pull it off.&lt;br /&gt;&lt;br /&gt;The Intel-based PC architecture is an open one. How is Apple going to keep people from installing Mac OS on non-Mac PCs? Proprietary firmware? A BIOS, a la Phoenix Technologies' TrustedCore, which can enforce DRM (digital rights management)? Pick a method and I foresee hackers cheerfully breaking it."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Whatever mechanism Apple uses to require Apple hardware can be reverse engineered.  This is a fairly obvious concern to Apple, I think they just might have a solution ready to go.  One method that would be hard to emulate could use a small chip embedded on all Apple motherboards that the Mac OS would query during boot up.  No response from the chip, no Mac OS.  And in case someone patched the query checker, run md5sum on the binary to verify it's unmodified.  &lt;br /&gt;&lt;br /&gt;It's entirely possible Steve Jobs has decided that it's time for the Macintosh to become an OS and Apple chooses a weaker method of hardware authentication.  I hope not, a principle of the Macintosh design is tight hardware and software integration - that's part of what makes it such a great user experience.&lt;br /&gt;_&lt;br /&gt;&lt;i&gt;"I've also had people tell me that they don't think Apple will have as much trouble with device drivers as Linux has, either because Apple will use only a small subset of all the possible equipment you can stick on a PC, or because Apple will be able to get better deals from hardware vendors.&lt;br /&gt;&lt;br /&gt;There's no question that Linux still has a long, long way to go with device drivers. It's just that Macs have even farther. Macs support only a very limited range of hardware.&lt;br /&gt;&lt;br /&gt;In the past, if the equipment wasn't built by Apple, or had its making overseen by Apple, the odds were the device wouldn't work on a Mac. Linux still has big driver problems. Mac OS on Intel will have enormous, but conquerable, driver problems.&lt;br /&gt;&lt;br /&gt;On Intel designs, Apple will have to contend with a much wider variety of external equipment. From Webcams to scanners to, heck, even mice, Apple will have to deal with tens of thousands of new devices. Even if "Mactels" turn out to be hermetically sealed boxes, Apple and friends are going to be spending a lot of time working on device drivers. And, lest we forget, historically, Apple hasn't gotten along well with equipment vendors."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;First off, since when is Linux device driver support poor?  I can plug any old mouse into a machine running a desktop Linux OS, and it works just fine.  For that matter, I can connect many digital cameras, printers, &lt;br /&gt;mobile phones, PDAs, video cards, sound cards, monitors, digital I/O boards and they all work.  Oh, and in all but the obvious cases (video cards, sound cards) Mac OS has the same level of support.  Obviously, MS Windows has the best device driver support since most hardware manufacturers consider it to be the most important platform due to the install base.&lt;br /&gt;&lt;br /&gt;On Intel designs, Apple will have to contend with the same variety of external equipment as they do now.&lt;br /&gt;Using Intel processors and chipsets has nothing to do with, for example, Apple choosing to only provide drivers for iSight and no other webcams.  It's technically possible to use third party webcams on a Mac, but Apple doesn't provide it.  &lt;br /&gt;_&lt;br /&gt;&lt;i&gt;"I've also been hearing from a lot of people who insist that it doesn't matter what Apple does, since Linux will survive no matter what the companies do. Would someone please send these people in their basements the memo from a few years ago that Linux is a business operating system and not just a hobby?"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Linux has support from commercial interests, but it didn't start out that way.  The term Linux, as it used in your piece, refers to Linux-based operating systems.  There are both commercial and non-commercial Linux distributions, therefore Linux is not a business operating system.  On top of that, some contributions to Linux and related software are made from hobbyists and many are from developers that started out as hobbyists.&lt;br /&gt;_&lt;br /&gt;&lt;i&gt;"So, to get back to the original point of my column, if you want Linux to play a serious role on the desktop in the years to come, the time is now to get serious about creating an outstanding Linux desktop operating system. Mac OS X is coming to Intel and, unless things change, it's likely to be unchallenged as the best Intel-based desktop operating system around."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I don't understand the importance of Linux dominating the desktop world.  Users will choose the best (that they know of) tool for the job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111844646888865863?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111844646888865863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111844646888865863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111844646888865863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111844646888865863'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/more-on-intel-processors-macs-and.html' title='More on Intel processors, Macs, and the future of Linux'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111833440651200235</id><published>2005-06-09T07:32:00.000-05:00</published><updated>2005-06-09T20:39:05.523-05:00</updated><title type='text'>Future of AI</title><content type='html'>Starting grad school this fall for computer science.  There are several concentrations available and I was looking at artificial intelligence.  It appears to be frustatingly needing innovation, and I think it will be coming soon with the &lt;a href="http://en.wikipedia.org/wiki/Memory-prediction_framework"&gt;memory-prediction framework&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Is it worthwhile to study traditional AI concepts if we're finally realizing that they're useless for machine intelligence?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111833440651200235?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111833440651200235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111833440651200235' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111833440651200235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111833440651200235'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/future-of-ai.html' title='Future of AI'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13500881.post-111819141298345102</id><published>2005-06-07T19:33:00.000-05:00</published><updated>2005-06-07T21:46:10.660-05:00</updated><title type='text'>Apple Macintosh and Intel</title><content type='html'>Plenty of people have weighed in on the implications of Apple switching to Intel processors for their Macintosh computers.  I figure I'll add my two cents...&lt;br /&gt;&lt;br /&gt;I think there has been some inaccurate prophesizing over what this change means to Linux and other alternative operating systems.  Some editorials on osnews.com (&lt;a href="http://www.osnews.com/story.php?news_id=10768"&gt;here&lt;/a&gt;, and &lt;a href="http://www.osnews.com/story.php?news_id=10770"&gt;here&lt;/a&gt;) along with Dvorak's &lt;a href="http://www.marketwatch.com/news/story.asp?guid=%7BD0E8469A-28FC-415D-9281-C97B5FA2CA3D%7D&amp;siteid=mktw&amp;dist="&gt;recent post&lt;/a&gt; and an eWeek &lt;a href="http://www.eweek.com/article2/0,1759,1825058,00.asp"&gt;opinion piece&lt;/a&gt; all seem to believe that Linux is in trouble.&lt;br /&gt;&lt;br /&gt;This is what they're missing, the Mac is not computer hardware and it's not an operating system, it's a complete computer system.  Why do you think Microsoft is still developing their "standard" products like MS Office for the Intel-powered Macs?  Because they understand that Apple is selling a different product.&lt;br /&gt;&lt;br /&gt;To understand why Linux isn't in trouble, we have to do some stereotyping.  Who uses Linux anyways?&lt;br /&gt;Anyone that is going to actually use Linux as a desktop OS is either a geek, or has been convinced by a geek that it's the way to go (and said geek provides tech support).  This means that Linux users have the ability to manage their OS, directly or indirectly.  &lt;br /&gt;&lt;br /&gt;Now, what sort of machines does Linux usually run on?  Intel/AMD x86 is the most popular, and almost any hodpodge arrangement of a computer will be supported by Linux.  So, along comes Apple with their new Intel-based Macs - why would current or future Linux users care?  A Macintosh is still a Macintosh, it's a marriage of hardware and software.  If you want a Mac, you buy a Mac computer and it comes with the Mac OS.  Sure, you will likely be able to install MS Windows or Linux, but again, so what?&lt;br /&gt;&lt;br /&gt;The two most important things that Linux has going for it are its price (free as in beer) and killer hardware support.&lt;br /&gt;Mac OS is completely opposite: it ain't free, and it's hardware support sucks.  The Mac OS is meant to run on Mac hardware, and that's that.  MS Windows emulates being free by being the default OS installed on most mainstream computers and it also has killer hardware support.  For those that aren't interested in purchasing an integrated computing solution, the best known choice is MS Windows, the second is Linux.  &lt;br /&gt;&lt;br /&gt;Many of those editorials did get one thing right, Microsoft is vulnerable until Longhorn is released, now is the time for Linux to gain some users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13500881-111819141298345102?l=mrevelle.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrevelle.blogspot.com/feeds/111819141298345102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13500881&amp;postID=111819141298345102' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111819141298345102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13500881/posts/default/111819141298345102'/><link rel='alternate' type='text/html' href='http://mrevelle.blogspot.com/2005/06/apple-macintosh-and-intel.html' title='Apple Macintosh and Intel'/><author><name>Matt</name><uri>http://www.blogger.com/profile/00294597858824231202</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11471771422051630164'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>