<?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-27706022</id><updated>2012-01-31T03:49:56.845-08:00</updated><category term='Slackware'/><category term='Clojure'/><category term='Firefox'/><category term='64-bit'/><category term='Notes for self'/><category term='Linux'/><category term='GNOME'/><title type='text'>My Corner of the World</title><subtitle type='html'>Observations, solutions to problems, and even a few rants about Linux, free software, and computing in general</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default?start-index=101&amp;max-results=100'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>144</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27706022.post-6303790788092857466</id><published>2012-01-26T05:00:00.000-08:00</published><updated>2012-01-26T05:00:01.292-08:00</updated><title type='text'>Udacity represents the evolution of the textbook, not the university</title><content type='html'>Let me immediately say that I hope Udacity succeeds. I hope it is a resource that many people throughout the world use.&lt;br /&gt;&lt;br /&gt;It would be nice if it did. I'll soon be paying tuition for a child. I'd&lt;i&gt; really, really&lt;/i&gt; like to write a check for $20 and the semester's tuition bill would be paid in full.&lt;br /&gt;&lt;br /&gt;Now let me rain on the parade. Udacity is not a university. The claim is that they have a model that is much more efficient than the traditional university. There's no sense paying for the name value of a university when you can get the same education for just a few dollars. They've found the hundred dollar bill laying on the sidewalk, so to speak.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's the opposite of my experience, and pretty much everyone I've ever talked to, that class size doesn't matter. Existing universities, especially Big 10 universities, could put tens of thousands of students in a football stadium, if the only goal is to provide as many students as possible with access to a lecture. The University of Michigan could put 100,000 students into a class, charge them each $5, and be extremely profitable. Too bad it's not that easy.&lt;br /&gt;&lt;br /&gt;The large classroom is possible because they have cut out things that most of us who have a college degree found to be important. You have no access to the instructor. No questions. No requests for further information about a particular topic. Nothing. Instead, you get an internet forum, where others can choose to donate their time, and the answer may or may not be correct, and may or may not make sense.&lt;br /&gt;&lt;br /&gt;There is no grading beyond what can be automated. For some things that's okay, but clearly that limits on what can be tested. This format would not work for essay questions, of course, or for that matter, anything but multiple choice questions, which in my experience are only useful for measuring your ability to memorize.&lt;br /&gt;&lt;br /&gt;There's no possibility to interact with the instructor during the lecture. You watch a lecture on the computer. There are no discussions (except perhaps in an internet forum).&lt;br /&gt;&lt;br /&gt;The instructor cannot make adjustments depending on the background of the students. That's because with tens of thousands of students, you have many backgrounds, and there doesn't exist a sensible adjustment that would help the students.&lt;br /&gt;&lt;br /&gt;There is no library, no computer lab, none of the resources that you get with a traditional university. There are no opportunities to get a letter of recommendation from a professor. There are no opportunities to work on research with a professor. The whole point is to eliminate anything that is personal from the equation. If a professor teaches 40,000 students and has to write recommendation letters for the top 1% of the class, that's still 400 letters, assuming there were something to write about.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;To top it off, there is currently no verification that students are actually doing the work themselves. There would have to be a way to monitor students during the exams and projects. Of course some cheating occurs in a regular classroom. The Udacity model doesn't even require that you verify that someone is who they claim to be. You could register as three individuals, take the exam twice for practice, then take it a third time for your "grade". Or better, just pay someone $100 to take the exam for you. &lt;br /&gt;&lt;br /&gt;It sounds good to claim they have found the silver bullet that will lower the cost of a college education. As I said above, I will save tens of thousands of dollars if they have. Yet when I look at it, what I see is some video lectures, homework and exams, and an internet forum. In other words, a textbook built with modern technology. You could go a step further. Post a reading list online for free. Then students could work through your "university course" and get the equivalent of an expensive university education.&lt;br /&gt;&lt;br /&gt;Sorry, it's just not that easy. It's not like there's anything here that hasn't been tried before. What they're doing is not that different from claiming to have found a silver bullet to lower the cost of developing software by eliminating all testing. If the program compiles and runs, that's good enough. True, that would lower costs, but then you'd no longer be developing the software you claim to be developing. Self study and formal education are not the same thing. It's the 15% difference between the two that is so expensive, yet so critical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6303790788092857466?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6303790788092857466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6303790788092857466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6303790788092857466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6303790788092857466'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/udacity-represents-evolution-of.html' title='Udacity represents the evolution of the textbook, not the university'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5434840650649154269</id><published>2012-01-20T10:02:00.000-08:00</published><updated>2012-01-20T10:02:02.726-08:00</updated><title type='text'>stackoverflow needs tweaking</title><content type='html'>stackoverflow is a wonderful site. It's the first place I go when I have a question related to programming.&lt;br /&gt;&lt;br /&gt;Unfortunately, I think it needs a few tweaks. My sample may be small, but lately (the last few months) I've been seeing too many cases where there was a cry of "Duplicate! Duplicate! Duplicate!" or even closing the question. That wouldn't be a bad thing if Question A was, 'What does "Error: Variable not defined" mean?" and Question B was, 'I got this error "Error: Variable not defined". What does it mean?"&lt;br /&gt;&lt;br /&gt;The problem is that in many cases those voting to close are trolling rather than looking out for the site. In some cases it is probably just trolling by the immature, with too much time on their hands and too little common sense, but in others it is regular users having fun with power.&lt;br /&gt;&lt;br /&gt;Here is &lt;a href="http://stackoverflow.com/questions/1882734/what-is-your-favorite-r-debugging-trick"&gt;one good example&lt;/a&gt;. The OP lists a couple of things he's been doing to debug his programs and asks for other suggestions. If that's not a perfect question for stackoverflow, nothing is.&lt;br /&gt;&lt;br /&gt;Yet it was closed on the grounds that "We expect answers to generally involve facts, references, or specific expertise; this question will likely solicit opinion, debate, arguments, polling, or extended discussion." Good chance that the trolls voting to close have never written a line of R code.&lt;br /&gt;&lt;br /&gt;Here is &lt;a href="http://stackoverflow.com/questions/8608035/how-do-you-pronounce-scala"&gt;another example&lt;/a&gt;. It was reopened, but as user Dan Burton wrote in his comment, "&lt;span class="comment-copy"&gt;I checked the profiles of the 5 people that closed this, I'm rather appaled that &lt;b&gt;none of them have made a single contribution to the scala tag."&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment-copy"&gt;By the standard that seems to be in place right now, even the question I started with, where the user gives an error message, should be closed. There are multiple reasons you might get a certain error message. That leads to opinions rather than facts, because you'd have to make a judgement about the most likely reasons for a certain error to occur in a given language. It might also be interpreted as a question not about a programming language, but rather what is wrong with the programmer's training that would make him arrive at that error message. (If you think I'm stretching things, dig around on stackoverflow and look at the closed questions.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment-copy"&gt;My goal, though, is not to talk about these specific cases. Maybe they are terrible examples - whatever. My point is that the same thing happens again and again, and it is creating a hostile environment, particularly for new programmers. It used to be that I could recommend stackoverflow for someone learning a language, but I've stopped. It is very discouraging to ask what you think is a reasonable question and then be subjected to a public flogging. (Even when the question is not closed, the answers are more harsh than a couple of years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment-copy"&gt;Traditional trolling is bad enough, but at least you can delete or ignore those comments and get on with your business. This new-fangled trolling puts your own posts on the line, and the "closed" message is an official "you don't belong here" message, sent by stackoverflow.com, that the whole world can see. That's kind of hard to ignore, particularly if you used your real name.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment-copy"&gt;Maybe one solution would be banning the close trolls for a week if they vote to close two questions in a 30-day period that are then reopened.&lt;b&gt; &lt;/b&gt;Cries of duplication are not as easy to monitor, but they're more in line with traditional trolling, so I don't know that it is as much of a concern. Whatever the solution is, something has to be done to make the site friendly again.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5434840650649154269?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5434840650649154269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5434840650649154269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5434840650649154269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5434840650649154269'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/stackoverflow-needs-tweaking.html' title='stackoverflow needs tweaking'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4942697391121940124</id><published>2012-01-14T10:04:00.000-08:00</published><updated>2012-01-14T10:04:23.599-08:00</updated><title type='text'>Use Counterclockwise or Clooj if you want to start with Clojure</title><content type='html'>It appears that I didn't do a good job of writing my previous post about Emacs and Clojure. I was trying to give a flavor of what someone new to Clojure would think when encountering "Emacs + Clojure is the best development environment". Seriously, getting it set up&lt;i&gt; sucks&lt;/i&gt;. Really bad. I speak from experience, having tried to get someone set up using Clojure and Emacs recently.&lt;br /&gt;&lt;br /&gt;What you should do is use Counterclockwise. It's wonderful. It's easy to set up. It has lots of features. It's a joy to program in Clojure when using Counterclockwise. That's what my friend is now using.&lt;br /&gt;&lt;br /&gt;The other alternative is Clooj. That is truly the easiest way to get going. Just download and run. The disadvantage is that Swing apps don't look that great on Linux. I've gone through all the guides but the fonts still aren't what I want. To my knowledge it doesn't work with dual monitors. &lt;i&gt;But if you want to get started quickly, you cannot possibly do better than Clooj.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Note: I'm not saying you shouldn't use anything else, just that these are awesome for beginners, and others may or may not be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4942697391121940124?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4942697391121940124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4942697391121940124' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4942697391121940124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4942697391121940124'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/use-counterclockwise-or-clooj-if-you.html' title='Use Counterclockwise or Clooj if you want to start with Clojure'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7227678523220205525</id><published>2012-01-13T13:01:00.000-08:00</published><updated>2012-01-14T09:49:20.149-08:00</updated><title type='text'>Is this a good introduction to Clojure?</title><content type='html'>&lt;br /&gt;So I wanted to help someone get started with Clojure today. For those who haven't done much with Java before, the incredible overhead associated with doing the most trivial tasks leads to a bad impression.&lt;br /&gt;&lt;br /&gt;To make matters worse, I was trying to set up Emacs for use with Clojure. I'm not an Emacs noob. I used ESS as my main development environment several years ago, but was not impressed, and moved on.&lt;br /&gt;&lt;br /&gt;[Edit: Used bold font to emphasize that I'm writing from the perspective of someone who decided he'd try Clojure using Emacs. My &lt;i&gt;personal recommendation&lt;/i&gt; is to use Counterclockwise or Clooj.]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;This is what someone new to Clojure would experience.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Go to the main Clojure page &lt;a href="http://dev.clojure.org/display/doc/Getting+Started+with+Emacs"&gt;instructions&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;"Install &lt;a class="external-link" href="https://github.com/technomancy/clojure-mode/blob/master/README.md" rel="nofollow"&gt;clojure-mode&lt;/a&gt;."&lt;br /&gt;&lt;br /&gt;Don't know what that means, but I'll click the link.&lt;br /&gt;&lt;br /&gt;"If you use &lt;a href="http://bit.ly/pkg-el23"&gt;package.el&lt;/a&gt;, you can install with&lt;code&gt;M-x package-install clojure-mode&lt;/code&gt;. Otherwise you can do a manualinstall by downloading &lt;code&gt;clojure-mode.el&lt;/code&gt; and placing it in the&lt;code&gt;~/.emacs.d/&lt;/code&gt; directory, creating it if it doesn't exist. Then addthis to the file &lt;code&gt;~/.emacs.d/init.el&lt;/code&gt;:"&lt;br /&gt;&lt;br /&gt;Well, not being a total Emacs noob, I tried M-x package-install clojure mode.&amp;nbsp; I got [No Match] in return.&lt;br /&gt;&lt;br /&gt;What is clojure-mode.el? Where do I download it? Google found it for me. I downloaded it to the ~/.emacs.d directory. I added the lines to init.el (though I had to create that file, something the instructions didn't mention).&lt;br /&gt;&lt;br /&gt;The vast majority of new Clojure users would have given up by now. Users should not have to figure things out for themselves - that is the purpose of documentation.&lt;br /&gt;&lt;br /&gt;So let's move on. There's a discussion of how to set up package.el. Okay, that doesn't apply to me.&lt;br /&gt;&lt;br /&gt;Then there's a discussion of clojure-test-mode. It says "This source repository also includes &lt;code&gt;clojure-test-mode.el&lt;/code&gt;, whichprovides support for running Clojure tests (using the clojure.testframework) via SLIME and seeing feedback in the test buffer aboutwhich tests failed or errored. The installation instructions aboveshould work for clojure-test-mode as well."&lt;br /&gt;&lt;br /&gt;So do I need it? Is it something that most users install? I'm going to skip it. I can do tests when I get to that point.&lt;br /&gt;&lt;br /&gt;Then there's something about paredit, which I hate, but it's recommended for all users.&lt;br /&gt;&lt;br /&gt;Following that, there's a section titled "Basic REPL", which says, "&lt;br /&gt;Use &lt;kbd&gt;M-x run-lisp&lt;/kbd&gt; to open a simple REPL subprocess using&lt;a href="http://github.com/technomancy/leiningen"&gt;Leiningen&lt;/a&gt;. Once that hasopened, you can use &lt;kbd&gt;C-c C-r&lt;/kbd&gt; to evaluate the region or&lt;kbd&gt;C-c C-l&lt;/kbd&gt; to load the whole file.&lt;br /&gt;If you don't use Leiningen, you can set &lt;code&gt;inferior-lisp-program&lt;/code&gt; toa different REPL command"&lt;br /&gt;&lt;br /&gt;The only way you'd have any idea what that means is if you knew beforehand. That may have set a record for the least informative paragraph ever written. I get tired when I read something like that. What is meant by "different REPL command"? Heck with it, I'm returning to the main page. {Note: this is explained on the main page, but the reader isn't told that.}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I created a new clojure file in Emacs (ending with .clj). There's no automatic indentation! How on earth do you write Lisp code without automatic indentation?&lt;br /&gt;&lt;br /&gt;Eventually I got it sort of working, though I never got Clojure 1.3.0 to work. This is not a pretty introduction to Clojure. {I'm not saying it's &lt;i&gt;my&lt;/i&gt; introduction to Clojure. It is the introduction to Clojure for anyone who reads Emacs + Clojure is the best alternative.} There's a lot of room for improvement.&lt;br /&gt;&lt;br /&gt;I recommend immediately eliminating all references to Emacs when talking about Clojure, with an exception for "Don't waste your time with Emacs if you want to learn Clojure."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7227678523220205525?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7227678523220205525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7227678523220205525' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7227678523220205525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7227678523220205525'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/is-this-good-introduction-to-clojure.html' title='Is this a good introduction to Clojure?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3411277206801350896</id><published>2012-01-10T08:18:00.000-08:00</published><updated>2012-01-10T08:18:38.661-08:00</updated><title type='text'>Not sure I agree with this...</title><content type='html'>&lt;a href="http://scripting.com/stories/2012/01/09/theBossesDoEverythingBette.html"&gt;The bosses do everything better&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not a lot of details are given about the software, but this quote at the end is problematic:&lt;br /&gt;&lt;br /&gt;"Now, I have to say that sometimes it's a good thing to give users source code, because very rarely you find a user who is so motivated to get a feature that he'll hack it in there, in an egregious fashion, but well enough so you get the idea."&lt;br /&gt;&lt;br /&gt;The post describes 1980's software. Just slap something together with little documentation, written in an imperative style where pretty much everything is global. Coupling was viewed as part of life, with the quality of a developer being determined by the amount of coupling he could handle.&lt;br /&gt;&lt;br /&gt;Variable names were supposed to be uninformative. Developers were expected to remember 75 pieces of information to read a 25-line piece of code. Small, pure functions were only to be used if there was no way to write a long, impure function to do the same thing.&lt;br /&gt;&lt;br /&gt;It's one thing to provide a piece of functionality, another to integrate that functionality into the rest of the program.&lt;br /&gt;&lt;br /&gt;"very rarely you find a user who is so motivated to get a feature that he'll hack it in there"&lt;br /&gt;&lt;br /&gt;Things have changed. These days, we have FOSS, and it is now very common for users to work on the software themselves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3411277206801350896?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3411277206801350896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3411277206801350896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3411277206801350896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3411277206801350896'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/not-sure-i-agree-with-this.html' title='Not sure I agree with this...'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8091430920241989476</id><published>2012-01-09T19:31:00.000-08:00</published><updated>2012-01-09T19:31:37.216-08:00</updated><title type='text'>Gonna have to try Scala</title><content type='html'>I've been reading about Scala (there are some really remarkable resources available on the web). I haven't done a whole lot with it though, so I really don't know much about it.&lt;br /&gt;&lt;br /&gt;A couple of things are becoming clear. First, Scala is popular. Not C++ or Java popular, but it's definitely not a niche language, either. It's not going away any time soon.&lt;br /&gt;&lt;br /&gt;There are a lot of "Scala is complex" blog posts lately. Yet when I read the posts, either they are not written by developers with extensive Scala experience, or they are trying to do something on the edge that I'd never try to do. What I want to know is how complex it is for basic numerical programming.&lt;br /&gt;&lt;br /&gt;I'm not a big fan of C++, but I am a big fan of Bjarne Stroustrup. As he once said, there are languages people complain about and languages nobody uses. I get the impression that a whole lot of users have used Scala long enough that they've reached the edges of a very deep language. Then they (some of them anyway) start writing blog posts.&lt;br /&gt;&lt;br /&gt;So 2012 is the year I need to do something real with Scala.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8091430920241989476?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8091430920241989476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8091430920241989476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8091430920241989476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8091430920241989476'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/gonna-have-to-try-scala.html' title='Gonna have to try Scala'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8412848967359789605</id><published>2012-01-08T19:56:00.000-08:00</published><updated>2012-01-08T20:05:26.506-08:00</updated><title type='text'>Which variable did you send to that R function?</title><content type='html'>Most R users do not use the metaprogramming features of R, but it nonetheless does have these Lispy features. (R actually began as a Scheme dialect.)&lt;br /&gt;&lt;br /&gt;R has macros, though you'll have to install gtools to get it. defmacro and strmacro provide basic Lisp-inspired macros (note that I said "basic" - I know that a Common Lisper will chuckle at this sentence, but Common Lispers chuckle at the inferiority of all other languages, so it's not a big deal). The documentation for defmacro includes the reference to the original R News article by Thomas Lumley.&lt;br /&gt;&lt;br /&gt;Every once in a while you get the urge to do some macro-related stuff because it makes your life much easier, as it is the only way to do something without requiring an extremely awkward function call.&lt;br /&gt;&lt;br /&gt;First, consider the following function:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f &amp;lt;- function(x,y) {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;z &amp;lt;- x+y&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;br /&gt;In the vast majority of cases, you would have no need to know which variable was passed as an argument in the function call. That's one reason for using a function, because you don't have to worry about a conflict with an existing variable name. But suppose you wanted to know the name of the variable that was passed in. How would you do that?&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f &amp;lt;- function(x,y) {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;print(deparse(substitute(x)))&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;print(deparse(substitute(y)))&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;gt; f(w1,w2)&lt;br /&gt;[1] "w1"&lt;br /&gt;[1] "w2"&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;gt; f(xrz,three333)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[1] "xrz"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[1] "three333"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What if you want to know the name of arguments passed with ...? We can pull code directly from Lumley's R News article:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f &amp;lt;- function(...) {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;print(substitute(list(...)))&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;gt; f(x,y,z) &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;list(x, y, z)&lt;/div&gt;&lt;br /&gt;That doesn't give the names of the variables, but if you want that, you can make a simple modification to Lumley's code:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f &amp;lt;- function(...) {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;print(as.character(substitute(list(...)))[-1])&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;gt; f(x,y,z) &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[1] "x" "y" "z"&lt;/div&gt;&lt;br /&gt;A situation in which I've done this is plotting. You have a function named regressPlot that takes a variable number of arguments: regressPlot &amp;lt;- function(...). You want to run a regression using the arguments you passed and then plot the results. You want to add a caption that uses the names of the variables in the regression. This can be done easily using code similar to that given above.&lt;br /&gt;&lt;br /&gt;A second example of its use can be seen in the help for the attach function. &lt;br /&gt;&lt;br /&gt;Finally, in &lt;a href="http://tolstoy.newcastle.edu.au/R/help/06/07/31729.html"&gt;this thread&lt;/a&gt;, it is pointed out that an alternative way to get the same result is&lt;br /&gt;&lt;br /&gt;foo &amp;lt;- function(...) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;sapply(match.call()[-1], deparse)&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8412848967359789605?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8412848967359789605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8412848967359789605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8412848967359789605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8412848967359789605'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/which-variable-did-you-send-to-that-r.html' title='Which variable did you send to that R function?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8960894160399740738</id><published>2012-01-06T06:42:00.000-08:00</published><updated>2012-01-06T06:42:53.003-08:00</updated><title type='text'>The book the world needs</title><content type='html'>The world needs "Introduction to Functional Programming Using Clojure".&lt;br /&gt;&lt;br /&gt;This is needed for at least two reasons. First, the existing books on Clojure require an understanding of basic functional programming. All of the currently available books do a good job of explaining the language. For the average Java or Python programmer, though, it would be tough to learn Clojure if the only resource were one of those books (or all of them, for that matter).&lt;br /&gt;&lt;br /&gt;Second, "introductions" to functional programming are usually too academic. SICP, for as much as I love that book, is a book about computer science, not software development. Scheme will never, ever be a programming language embraced by industry. That doesn't mean there's anything wrong with Scheme, but it does mean that if you use Scheme, the perception will be that functional programming is not something you'd do with a "real" language, so I guess that is something wrong with Scheme.&lt;br /&gt;&lt;br /&gt;I've been reading about Standard ML recently, and while I have learned a lot, I can't imagine anyone taking ML (SML or OCaml) seriously. I mean, in the sense that the perception would be any better than the perception of Scheme. Moreover, I've tried to read about Haskell, but it's hard to go more than about five minutes without falling asleep. There's just too much religion about pure functional programming. I can see why it appeals to mathematicians, and I can see the point of &lt;a href="http://steve-yegge.blogspot.com/2010/12/haskell-researchers-announce-discovery.html"&gt;Steve Yegge's post on Haskell&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Even worse, there's discussion of type systems, which is an advanced topic. It's my belief that dynamic typing is better for beginners. Don't get me wrong: on technical grounds, the ML and Haskell crowds might be right. I'm not sufficiently informed to take sides in the debate. It's just a matter of perception, and ML and Haskell are non-starters IMO.&lt;br /&gt;&lt;br /&gt;Clojure's not-so-secret weapon is the JVM. It can run any Java libraries, and thus it has instant credibility. Unlike Scala, it has dynamic typing. It has the coolness factor, too, because of all the concurrency-related stuff that makes it appear to be cutting edge. The language has an outstanding community with members that have - get this - people skills. The creator gives interesting talks. He is happy to incorporate academic ideas, yet comes at everything from a practical perspective, based on years of real world software development.&lt;br /&gt;&lt;br /&gt;Perception matters. Clojure may be what those of us who believe in functional programming have been waiting for, in terms of acceptance. The fans of Scheme, Common Lisp, Haskell, ML, and all other functional languages should be happy about this. Clojure is the first functional programming language that doesn't have to worry about the perception problem. Once a functional programming language, as opposed to functional features in non-functional languages, gains acceptance, developers will ask "Which functional language should I use?" Then the door is open for all the other languages.&lt;br /&gt;&lt;br /&gt;So back to the book. I promise I'll preorder it when it becomes available. You can even use my title.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8960894160399740738?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8960894160399740738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8960894160399740738' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8960894160399740738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8960894160399740738'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/book-world-needs.html' title='The book the world needs'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6661824855046211632</id><published>2012-01-04T07:21:00.000-08:00</published><updated>2012-01-04T07:21:56.539-08:00</updated><title type='text'>Links to good reading: Jan 4, 2012</title><content type='html'>As a way of keeping track of good reading material I encounter, I'm going to start making blog posts. I've returned to my post on &lt;a href="http://lmf-ramblings.blogspot.com/2011/10/some-additional-perspectives-on-oop.html"&gt;additional perspectives on OOP &lt;/a&gt;several times, and that works pretty well.&lt;br /&gt;&lt;br /&gt;Fogus: &lt;a href="http://blog.fogus.me/2011/12/31/the-best-things-and-stuff-of-2011/"&gt;The best things and stuff of 2011&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Introduction to Functional Programming&lt;/i&gt; is an excellent book.&lt;br /&gt;&lt;br /&gt;Debasish Ghosh:&amp;nbsp; &lt;a href="http://debasishg.blogspot.com/2012/01/2011-year-that-was.html"&gt;2011 - The year that was&lt;/a&gt;&lt;br /&gt;Some great reading material in there&lt;br /&gt;&lt;br /&gt;InfoQ: &lt;a href="http://www.infoq.com/presentations/Understanding-Java-Garbage-Collection"&gt;Understanding Java Garbage Collection and What You Can Do about It&lt;/a&gt;&lt;br /&gt;I haven't seen it all and didn't follow everything I did see. Looking forward to watching the whole thing without distractions.&lt;br /&gt;&lt;br /&gt;Jonathan Sobel: &lt;a href="http://www.cs.indiana.edu/%7Ejsobel/c455-c511.updated.txt"&gt;Is Scheme Faster than C?&lt;/a&gt;&lt;br /&gt;Of course not, most of the time. But I think there are some valuable points in the linked story that someone with nothing more than a typical imperative programming background cannot understand.&lt;br /&gt; &lt;br /&gt;A book by Norm Matloff on &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CC4QFjAB&amp;amp;url=http%3A%2F%2Fheather.cs.ucdavis.edu%2F%7Ematloff%2F158%2FPLN%2FParProcBook.pdf&amp;amp;ei=1GkET7raNvTLsQLUvoyRCg&amp;amp;usg=AFQjCNHJwhbypnQj6OwdCa_76d-NLQdDJA"&gt;parallel programming&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Actual, real paper books that you won't get from the link:&lt;br /&gt;&lt;br /&gt;Peter D. Hoff: &lt;a href="http://www.springer.com/statistics/statistical+theory+and+methods/book/978-0-387-92299-7"&gt;A First Course in Bayesian Statistical Methods&lt;/a&gt;&lt;br /&gt;More than just a first book on Bayesian inference, but it sure is excellent in that role.&lt;br /&gt;&lt;br /&gt;Norm Matloff: &lt;a href="http://nostarch.com/artofr.htm"&gt;Art of R Programming&lt;/a&gt;&lt;br /&gt;I love the presentation of R as a programming language (which it is) rather than a substitute for SPSS or some other "point and click" program (which it is, but is pretty clumsy).&lt;br /&gt;&lt;br /&gt;John M. Chambers: &lt;a href="http://www.springer.com/statistics/computanional+statistics/book/978-0-387-75935-7"&gt;Software for Data Analysis&lt;/a&gt;&lt;br /&gt;Not something I recently found, but in the event that someone else reads this, it is the one true guide to understanding R. Nothing else comes close in my opinion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6661824855046211632?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6661824855046211632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6661824855046211632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6661824855046211632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6661824855046211632'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/links-to-good-reading-jan-4-2012.html' title='Links to good reading: Jan 4, 2012'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5698631912534402221</id><published>2012-01-01T18:50:00.000-08:00</published><updated>2012-01-02T11:32:04.253-08:00</updated><title type='text'>Why I probably won't spend time on Go in 2012</title><content type='html'>Unlike most people, rather than resolving to do things during the New Year's holiday period, I mostly resolve to not do things. This year one of my resolutions is to not learn Go.&lt;br /&gt;&lt;br /&gt;I've been annoyed by a lot of the trolling by the Go fan club (I don't know if they are working on the language or just have an excessive enthusiasm). What I find to be in bad taste is that they will often criticize other languages and then say, "Oh by the way, Go doesn't suffer from the same flaw." I may disagree with some programming language design choices. I'm not afraid to express my disagreements. That does not mean I believe in tearing down other languages as a way of promoting my preferred language (which as anyone who has read this blog knows is Clojure).&lt;br /&gt;&lt;br /&gt;I could live with that. I was disappointed to see &lt;a href="http://commandcenter.blogspot.com/2011/12/esmereldas-imagination.html"&gt;Rob Pike's recent blog post&lt;/a&gt;, to the point that it really killed the limited enthusiasm that I had for the language. There are two reasons it is a problem. (a) In the business of language design, you need a thick skin. The community needs to feel comfortable providing feedback, or the language will suck. In my opinion that is the most important stage for the development of a programming language. (b) He comes across as assuming he knows better than the developers what the developers need. He may know more than me what it takes to put together a modern programming language (as opposed to, say, Fortran IV). He has no idea what I need. If he's not willing to listen to criticism, that means he's not willing to change the language, and that's a very serious problem.&lt;br /&gt;&lt;br /&gt;I wasn't that excited about the language anyway. This has made clear for me that Go isn't for me.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Edit: Removed the last two paragraphs. I don't want to go there. &lt;/i&gt;&lt;i&gt; It read like an attack based on personality and&lt;/i&gt;&lt;i&gt; was not appropriate for this blog.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5698631912534402221?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5698631912534402221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5698631912534402221' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5698631912534402221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5698631912534402221'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2012/01/why-i-probably-wont-spend-time-on-go-in.html' title='Why I probably won&apos;t spend time on Go in 2012'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3628472651511226188</id><published>2011-12-05T05:40:00.001-08:00</published><updated>2011-12-05T06:24:10.070-08:00</updated><title type='text'>Yes, it's still premature optimization</title><content type='html'>"Why did you write that in 250 lines of hard to follow C++?"&lt;br /&gt;&lt;br /&gt;"Because I know it'll be too slow if I write it in language X."&lt;br /&gt;&lt;br /&gt;I had a conversation along these lines recently. Even if you are guaranteed to eventually do a rewrite in ugly C++, rewriting in ugly C++ is a lot faster than writing ugly C++. Throwing away a program does not mean you've wasted your time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is hardly a revolutionary insight. Yet I constantly run into folks who think the primary goal is to get a first draft of the program with the minimum number of keystrokes. If that's the goal, don't bother writing anything, because an empty text file is the minimum number of keystrokes when incorrect output is okay. Your initial goal has to be writing something and being confident - for your own personal definition of that term - that it does what it is supposed to do. The only question that is relevant while writing your program is, "If I gave my program and tests to someone else, would he be confident that my program is doing what I claim?"&lt;br /&gt;&lt;br /&gt;Not only is it faster to rewrite in ugly C++ than to write ugly C++, maintenance and changes are also much less costly when you have an elegant version that does the same thing as the ugly version. Testing amounts to little more than checking that the elegant and the ugly versions both give the same output.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3628472651511226188?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3628472651511226188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3628472651511226188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3628472651511226188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3628472651511226188'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/12/yes-its-still-premature-optimization.html' title='Yes, it&apos;s still premature optimization'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5230310068278966847</id><published>2011-11-25T10:54:00.001-08:00</published><updated>2011-11-25T11:10:17.626-08:00</updated><title type='text'>Getting a USB Printer Working on Linux Mint 12</title><content type='html'>Plugged in my USB LaserJet, and it didn't work. I tried hp-setup and localhost:631, but it kept saying nothing was detected.&lt;br /&gt;&lt;br /&gt;After some searching, I found out this was a big problem in Ubuntu 11.10.&lt;br /&gt;&lt;br /&gt;My solution:&lt;br /&gt;1. Installed the latest available Linux kernel. &lt;br /&gt;2. Added the Ubuntu Precise repo in Synaptic, reloaded the package information, and installed the latest available cups package (also libgnutls and a few other cups-related packages).&lt;br /&gt;3. Disabled the Precise repo. Failure to do so would lead to many tears after I completely messed up my OS.&lt;br /&gt;4. Rebooted and tried hp-setup. Still didn't detect anything.&lt;br /&gt;5. Went to localhost:631 and tried to detect a new printer. Nothing. Experienced an emotion similar to frustration but when you know you are eventually going to get it to work.&lt;br /&gt;6. Entered "nano /var/log/syslog" at the command line after unplugging and replugging the printer. Scrolled to the bottom of the file. It gave me the printer's URI, showed the printer's name, and said it was "re-enabled".&lt;br /&gt;7. Scratched my head.&lt;br /&gt;8. Went back to localhost:631, clicked the "Administration" tab, clicked the "Manage Printers" tab, saw my printer listed. Felt strange emotions, one of which was joy that I had my printer detected, another of which was confusion, as in "is this interface designed optimally?"&lt;br /&gt;9. Printed a test page. It worked.&lt;br /&gt;10. Wrote a blog post in case someone else encounters the same problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5230310068278966847?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5230310068278966847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5230310068278966847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5230310068278966847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5230310068278966847'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/11/getting-usb-printer-working-on-linux.html' title='Getting a USB Printer Working on Linux Mint 12'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3902064596457918884</id><published>2011-11-22T05:56:00.001-08:00</published><updated>2011-11-22T06:28:32.987-08:00</updated><title type='text'>RIP GNOME, 1999-2011</title><content type='html'>After using GNOME in Mint 12 for more than a week, pretty heavily, it's obvious that there is no hope for the GNOME project. You had a good run.&lt;br /&gt;&lt;br /&gt;This is not my first attempt to use the new GNOME. I had hoped it would improve. It hasn't.&lt;br /&gt;&lt;br /&gt;The interface is childish. It's the kind of thing an 11-year old does, and you tell him he did great, because he did a good job relative to his peers.&lt;br /&gt;&lt;br /&gt;It's just soooo ugly. Ugly, ugly, ugly. Hideous.&lt;br /&gt;&lt;br /&gt;Worse, it disrupts your work flow. In GNOME 2, if I regularly use an application, I can right-click and in a fraction of a second I've got a shortcut on the panel. If I want to find an application, that is extremely fast using the menu.&lt;br /&gt;&lt;br /&gt;Why should I have to move to the upper left corner to reveal all applications, then click on a tab, then move all the way to the right side of the screen to choose which application group I'm after. Is there anyone in the world sufficiently stupid to think this is a realistic setup?&lt;br /&gt;&lt;br /&gt;They clearly don't understand the point of having shortcuts. Shortcuts exist so that you have &lt;i&gt;fast access&lt;/i&gt; to them. If you have to &lt;i&gt;take an action&lt;/i&gt; to get to the shortcut, you've defeated the purpose. Someone with a 23" monitor has plenty of screen real estate, so I want shortcuts that do things &lt;i&gt;as quickly as possible&lt;/i&gt;, with &lt;i&gt;as little thought as possible&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I can't find the link right now, but someone in a forum said complaints about the hoops you have to jump through are nonsense. Just hit the Super key, type the name of the application, and hit enter.&lt;br /&gt;&lt;br /&gt;Wow. If I wanted to do that, I'd use Emacs as my desktop. At least Emacs offers an efficient system of keyboard shortcuts.&lt;br /&gt;&lt;br /&gt;It feels good to have written out this rant. Nothing but endless frustration due to clueless design decisions.&lt;br /&gt;&lt;br /&gt;Luckily there are alternatives. KDE has improved a lot, and there is no question in my mind that KDE now offers a better user interface than either Windows or Mac. It took a while, but now they have something impressive to show for all their work. I have the user experience of GNOME 2 plus a whole lot of new stuff that increases my productivity. KDE didn't try to create a new approach to the desktop, they took the desktop experience and made it a whole lot better.&lt;br /&gt;&lt;br /&gt;I'm using Scientific Linux as my main desktop at work, so I'll be happily using GNOME 2 for quite a while in the future, because SL comes with the 4.3 series of KDE. It's great to be a Linux user. Windows and Mac users are stuck with whatever gets shoved in their direction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3902064596457918884?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3902064596457918884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3902064596457918884' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3902064596457918884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3902064596457918884'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/11/rip-gnome-1999-2011.html' title='RIP GNOME, 1999-2011'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8682759550631290483</id><published>2011-11-14T06:01:00.001-08:00</published><updated>2011-11-14T06:27:36.795-08:00</updated><title type='text'>Wireless on Ubuntu 11.10 and Mint 12</title><content type='html'>Ubuntu 11.10 has managed to make the wireless internet on my laptop not work. They're great at introducing bugs that never get fixed: this is the only distro with that problem, and I try a lot of distros. The bug carried through to Mint 12 RC, which is of course built on top of Ubuntu 11.10.&lt;br /&gt;&lt;br /&gt;I had to install wicd and completely remove network-manager. If you don't remove network-manager, you will get a "Connection Failed: Bad Password" error from wicd if you're using WPA2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8682759550631290483?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8682759550631290483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8682759550631290483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8682759550631290483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8682759550631290483'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/11/wireless-on-ubuntu-1110-and-mint-12.html' title='Wireless on Ubuntu 11.10 and Mint 12'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7976757805699622286</id><published>2011-11-14T05:27:00.001-08:00</published><updated>2011-11-14T06:01:10.930-08:00</updated><title type='text'>Cheering for Mint 12</title><content type='html'>I've been trying out Ubuntu 11.10 and Mint 12 (the release candidate, which has been out a couple days). I'm no fan of Ubuntu, but I nevertheless like to test out new technologies. I am particularly interested in Mint's attempt at salvaging GNOME 3.&lt;br /&gt;&lt;br /&gt;Hard as it is to believe, GNOME 3 is even worse than Unity. It's not just the fact that it's ugly, even though that is there. I'll take Windows 7 or Mac OS X over GNOME 3 in a second on the basis of looks. The fonts are hideous, the windows and buttons are worse, and there are few options to change it. Yuck. That's all I can say. GNOME 2 may not be pretty either, but it's not that ugly, and I'm able to change it.&lt;br /&gt;&lt;br /&gt;The truly bad part of GNOME 3 is that the developers want to make choices for the user. For example, you don't have an option to shut down the computer, because the developers decided that suspend is better. You have to click on the Alt key to get an option to suspend. What if you're using a live CD to try Linux and you don't know that? But beyond that, &lt;i&gt;what business is it of the developer if I want to restart my computer?&lt;/i&gt; This is way beyond any of the hoops that Mac users have to jump through.&lt;br /&gt;&lt;br /&gt;Let me say it to you clearly. You're a Linux developer. Your job is to write software. Don't make design decisions for me. Linux developers are not normal. They're the guys that wear Spock ears when they code. If I don't want an applications menu, I'll get rid of the applications menu myself. I don't need some loser in his mom's garage to decide that I can't have an applications menu because he thinks it's cool to not have one.&lt;br /&gt;&lt;br /&gt;If GNOME 3 is the meaning of FOSS, I'll happily run back to Microsoft in a second. The GNOME project is an insult to everyone who has ever contributed to FOSS. "If you don't like it don't use it" doesn't apply. GNOME is a popular project. It's prestigious to be a part of it, and they're giving us all a bad name.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My hope is that Mint will be able to rescue the GNOME project from the developers. So far it's not looking promising (GNOME 3 may be too far gone) but I'll use it at home for at least a month if I can handle it that long.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7976757805699622286?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7976757805699622286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7976757805699622286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7976757805699622286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7976757805699622286'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/11/cheering-for-mint-12.html' title='Cheering for Mint 12'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1348132837243576627</id><published>2011-11-02T12:51:00.000-07:00</published><updated>2011-11-02T12:51:05.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Chainloading GRUB 2 from GRUB</title><content type='html'>I installed PCLinuxOS on my laptop (more on that some other time - I was impressed). Among the other OSes on there is Debian Squeeze. The problem is that Debian Squeeze uses Grub 2, while PCLinuxOS uses Grub.&lt;br /&gt;&lt;br /&gt;After some fruitless searches and guesses as to what to do (Grub knowledge doesn't help much with Grub 2) I decided to check the Arch Wiki. As usual, the answer was there. Add the following entry to /boot/grub/menu.lst in PCLinuxOS:&lt;br /&gt;&lt;br /&gt;title Debian&lt;br /&gt;root (hd0,4)&lt;br /&gt;kernel /boot/grub/core.img&lt;br /&gt;&lt;br /&gt;where root (hd0,4) tells Grub that Debian is installed on /dev/sda5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1348132837243576627?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1348132837243576627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1348132837243576627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1348132837243576627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1348132837243576627'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/11/chainloading-grub-2-from-grub.html' title='Chainloading GRUB 2 from GRUB'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6829023047425011590</id><published>2011-10-31T09:43:00.000-07:00</published><updated>2011-11-01T15:08:06.638-07:00</updated><title type='text'>Some additional perspectives on OOP</title><content type='html'>I did some research this weekend about OOP. I more or less took it for granted that OOP is what it is and didn't think much about it until just recently. Nothing new, but some links that I found interesting. I plan to add more when (if) I find them.&lt;br /&gt;&lt;br /&gt;Paul Graham (the world's only celebrity Lisper)&lt;br /&gt;&lt;a href="http://www.paulgraham.com/noop.html"&gt;Why Arc Isn't Especially Object-Oriented&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.paulgraham.com/hundred.html"&gt;The Hundred-Year Language&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Joe Armstrong (creator of Erlang)&lt;br /&gt;&lt;a href="http://www.infoq.com/interviews/johnson-armstrong-oop"&gt;Ralph Johnson, Joe Armstrong on the State of OOP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://harmful.cat-v.org/software/OO_programming/why_oo_sucks"&gt;Why OO Sucks&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jeff Atwood&lt;br /&gt;&lt;a href="http://www.codinghorror.com/blog/2007/03/your-code-oop-or-poo.html"&gt;Your Code: OOP or POO?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Karsten Wagner&lt;br /&gt;&lt;a href="http://kawagner.blogspot.com/2006/08/oop-is-dead.html"&gt;OOP is Dead&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alan Kay (who coined the term)&lt;br /&gt;&lt;a href="http://userpage.fu-berlin.de/%7Eram/pub/pub_jf47ht81Ht/doc_kay_oop_en"&gt;Dr. Alan Kay&amp;nbsp; on the Meaning of “Object-Oriented Programming”&lt;/a&gt;&lt;br /&gt;&lt;a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html"&gt;prototypes vs classes was: Re: Sun's HotSpot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?ProblemsWithExistingOopEvidence"&gt;Problems With Existing Oop Evidence&lt;/a&gt;&lt;br /&gt;&lt;a href="http://reocities.com/tablizer/oopbad.htm"&gt;OOP Criticism&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/lecture-notes/"&gt;SICP&lt;/a&gt; (the course, not the book)&lt;br /&gt;&lt;a href="http://www.michaelharrison.ws/weblog/?p=58"&gt;OOP in Scheme&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/haskellwiki/OOP_vs_type_classes"&gt;OOP vs type classes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#Haskell_vs_OOP"&gt;Haskell vs OOP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vijaymathew.wordpress.com/2009/05/15/a-fresh-look-at-oop-with-concurrent-objects/"&gt;A fresh look at OOP with concurrent objects &lt;/a&gt;&lt;br /&gt;&lt;a href="http://existentialtype.wordpress.com/2011/03/15/teaching-fp-to-freshmen/"&gt;Teaching FP to Freshmen&lt;/a&gt; (The comments are informative, as it's clear the OOP supporters are not willing to defend Java/C++-style OOP. Yet for&lt;i&gt; all practical purposes&lt;/i&gt; Java/C++-style OOP is OOP.)&lt;br /&gt;&lt;br /&gt;Of course, there are alternatives to what is usually called OOP. As I've learned, it's tough to even get a definition of OOP.&lt;br /&gt;&lt;a href="http://thinkrelevance.com/blog/2009/08/12/rifle-oriented-programming-with-clojure-2.html"&gt;Rifle-Oriented Programming with Clojure&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm not anti-OOP. I just think there are better ways to do what is done in C++ or Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6829023047425011590?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6829023047425011590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6829023047425011590' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6829023047425011590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6829023047425011590'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/some-additional-perspectives-on-oop.html' title='Some additional perspectives on OOP'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6572902927804846773</id><published>2011-10-28T10:35:00.000-07:00</published><updated>2011-11-02T13:52:42.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Restarting sound on Debian Squeeze</title><content type='html'>Finally found something that works. Many thanks to the author of &lt;a href="http://knol.google.com/k/william-wynn/how-to-restart-alsa-sound-driver-in/3fegkfxlkmrqb/10#"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;sudo /etc/init.d/alsa-utils stop&lt;br /&gt;sudo alsa force-reload&lt;br /&gt;sudo /etc/init.d/alsa-utils start&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6572902927804846773?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6572902927804846773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6572902927804846773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6572902927804846773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6572902927804846773'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/restarting-sound-on-debian-squeeze.html' title='Restarting sound on Debian Squeeze'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6037204182926045266</id><published>2011-10-28T07:38:00.000-07:00</published><updated>2011-10-28T07:38:29.912-07:00</updated><title type='text'>Clojure and OOP, part II</title><content type='html'>I gave some thoughts about Clojure and OOP &lt;a href="http://lmf-ramblings.blogspot.com/2011/10/clojure-great-way-to-learn-oop.html"&gt;last week&lt;/a&gt;. Now that I've got a little spare time, I want to finish those thoughts.&lt;br /&gt;&lt;br /&gt;First, I want to link to &lt;a href="http://thinkrelevance.com/blog/2009/08/12/rifle-oriented-programming-with-clojure-2.html"&gt;this post&lt;/a&gt; by Stuart Halloway. It was one of the first posts I read on Clojure (and potentially the first time I had heard of Clojure). Without it I may not have even bothered with Clojure. I'm not a big fan of OOP, and don't use it that much, but I didn't think I could &lt;i&gt;completely&lt;/i&gt; give it up.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Encapsulation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I didn't address the issue of encapsulation at all in my previous post. That's because, to me, encapsulation has never been a big issue.* In C++, you declare the inner workings of your classes to be public, private, friends and probably some others that I don't know. It's similar to running a web service. You can't open everything to anyone who wants it.&lt;br /&gt;&lt;br /&gt;To be honest, I've never been in a situation where it would have been worth the work to set up an elaborate system in which I define who gets access to what. If there is a piece of data that should be accessible to the outside world, why can't I just use getters and setters? If there's no "get" defined, then I shouldn't be accessing the data.&lt;br /&gt;&lt;br /&gt;Maybe to better summarize my experience, I'm not disagreeing with the concept of restricting access to data. What I don't see is how declaring public, private, friends, and whatever, and all the complexity it adds, plus all the work it creates (you have to do it for every class) is better than getter and setter functions combined with common sense and a few simple rules. The C++ approach seems no more reasonable than Haskell's purity requirement. Trying to debug a complicated OOP program is no fun. Maybe I work on smaller projects and don't have ten million lines of code and a hundred programmers of varying quality working with me, so my observations don't carry over to those situations.&lt;br /&gt;&lt;br /&gt;For what it's worth, here is Rich Hickey's answer to &lt;a href="http://www.codequarterly.com/2011/rich-hickey/"&gt;an interview question&lt;/a&gt; by Fogus: "Following that idea—some people are surprised by the fact that Clojure does not engage in data-hiding encapsulation on its types. Why did you decide to forgo data-hiding?"&lt;br /&gt;&lt;br /&gt;(Warning: partial quote) "...And if you have a notion of “private”, you need corresponding notions of privilege and trust. And that adds a whole ton of complexity and little value, creates rigidity in a system, and often forces things to live in places they shouldn’t.... If people don’t have the sensibilities to desire to program to abstractions and to be wary of marrying implementation details, then they are never going to be good programmers."&lt;br /&gt;&lt;br /&gt;I see nothing controversial about that perspective. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clojure and Learning OOP&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I included the word "learning" in the title of my earlier post. I would argue that Clojure is a much easier way to learn about the underlying concepts of objects (but using maps), polymorphism, and inheritance. These are concepts that every programmer should understand and use.&lt;br /&gt;&lt;br /&gt;I would go further, though. Even if you want to use OOP in Java or C++, you're better off to start with Clojure. The advantage of Clojure over Java/C++ is that you can learn one thing at a time. It's very easy for anyone to understand what's going on when you introduce a single concept. With Clojure, the concepts are well-motivated.&lt;br /&gt;&lt;br /&gt;In Java or C++ you get hit with everything at one time. There's a lot of coupling. The degree of difficulty rises &lt;i&gt;very&lt;/i&gt; quickly with lines of code when someone is trying to learn something. Introducing the grouping of related data, methods, and the system of privileges all at once is not only too difficult, there's no motivation. I've been programming for decades, and I don't see a need for C++-style encapsulation. How is a new programmer supposed to understand?&lt;br /&gt;&lt;br /&gt;Only then do you get into polymorphism and inheritance, concepts they have a reason to learn. Give me an hour with a new programmer and I'll have him doing polymorphism and inheritance, and he'll have at least a small understanding of what they are and why he'd want to use them. Then put him in a class on Java or C++ and he'll have no problems. That's why you're better off to start with Clojure even if the goal is to train them in a more "practical" language.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Parenthesis Whining&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As an aside, for those who think the use of parenthesis makes Lisp unsuitable for teaching programming, let me present you with Hello World! in Java:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class HelloWorldApp {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        System.out.println("Hello World!");&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In Clojure, Hello World! is&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(println "Hello World!")&lt;/div&gt;&lt;br /&gt;One set of parenthesis vs two in the Java program. Plus the Java version has two sets of {}, class, public, static, void, System.out, and String[]. If that doesn't make a programming newbie vomit, nothing will.&lt;br /&gt;&lt;br /&gt;As with my other post, I'll conclude by admitting I'm not an OOP expert. I appreciate any comments you might have.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* If it were, I would have to stop programming in R, because I'm not aware that R offers real encapsulation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6037204182926045266?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6037204182926045266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6037204182926045266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6037204182926045266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6037204182926045266'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/clojure-and-oop-part-ii.html' title='Clojure and OOP, part II'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8694699247602853558</id><published>2011-10-25T13:05:00.000-07:00</published><updated>2011-10-25T13:05:07.378-07:00</updated><title type='text'>I've had my complaints about Linux, but...</title><content type='html'>&lt;a href="http://www.zdnet.com/blog/diy-it/why-ive-finally-had-it-with-my-linux-server-and-im-moving-back-to-windows/245"&gt;This guy's story&lt;/a&gt; is not credible, not one bit.&lt;br /&gt;&lt;br /&gt;Never do updates with CentOS? Bullsh**. If you're having trouble with CentOS updates, it's because you're a click troll. If I had to guess, I'd say he made the whole thing up.&lt;br /&gt;&lt;br /&gt;You can trust CentOS updates. Certainly more than you can trust Windows updates. I've had more than one Windows update render a computer useless. One of them happened just a couple months ago, in fact.&lt;br /&gt;&lt;br /&gt;I agree that Gnome 3 is garbage, Unity is garbage, Ubuntu in general is garbage. Distros like Opensuse have way more bugs than they should. The Linux world is on the wrong path because it's letting productivity and quality slip. The Linux world is focused on design and Linux developers really suck at design, so you have to pick and choose these days.&lt;br /&gt;&lt;br /&gt;But CentOS updates? Yeah, right. I'll just come right out and say he's a liar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8694699247602853558?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8694699247602853558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8694699247602853558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8694699247602853558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8694699247602853558'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/ive-had-my-complaints-about-linux-but.html' title='I&apos;ve had my complaints about Linux, but...'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7420987534972275617</id><published>2011-10-21T13:29:00.000-07:00</published><updated>2011-10-31T09:12:13.712-07:00</updated><title type='text'>Clojure, a great way to learn OOP</title><content type='html'>&lt;b&gt;Edit:&lt;/b&gt; There are two parts to this post. You can read the second part &lt;a href="http://lmf-ramblings.blogspot.com/2011/10/clojure-and-oop-part-ii.html"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Clojure is not sold as an OOP language, but it is a great way to learn OOP concepts. I had the (mis)fortune of learning OOP by using C++. I actually tried to learn OOP with Java and Python, but the problem was that the examples were so completely pointless that I was able to learn how to do OOP in those languages, but I never learned what OOP actually is. I had to learn that while using C++ to do things that made sense.&lt;br /&gt;&lt;br /&gt;I will admit that I'm not a big fan of OOP. I always read that it reduces complexity, that it makes it easier to model your problem, but in most cases I didn't see that the benefits outweighed the overhead.&lt;br /&gt;&lt;br /&gt;I've learned something while using Clojure. Nobody really cares about OOP. We care about what OOP does for us, and you can get the benefits of OOP without the BS of C++/Java-style OOP. Objects and polymorphism are convenient. Clojure has made me realize that there are alternative (and IMO far better) ways to get the benefits of OOP.&lt;br /&gt;&lt;br /&gt;Here's a quote from &lt;i&gt;Practical Clojure&lt;/i&gt; by Luke VanderHart and Stuart Sierra (which I highly recommend if you have no knowledge of Clojure): "The most important example is that maps can do 90 percent of what objects do in an object-oriented program. What real difference is there between named properties of an object and a key/value pair in a map? As languages like Javascript (where objects are implemented as maps) demonstrate, very little." It was nice to see in print something that I've been realizing for myself.&lt;br /&gt;&lt;br /&gt;Maps and multimethods are not only very easy to understand, it's tough to learn them without also knowing why you'd want to use them. There's so much formal BS with C++/Java OOP that someone new to the language can't really capture everything. With Clojure you do a lot less and get the same benefits. It's also a natural part of programming in Clojure, even if your program is only 40 lines long, which means it's perfect for introductory programming classes. OOP is sold in the C++/Java world as a way to handle large-scale programs. There's no reason for that to be the case.&lt;br /&gt;&lt;br /&gt;It seems strange to say it, but using Clojure has pushed me in the direction of OOP.&lt;br /&gt;&lt;br /&gt;{I am not claiming to be an expert in OOP. Take my comments as coming from someone who is a little bit more than a beginner when it comes to OOP. I'd love to hear your thoughts if you disagree. I might learn something.}&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7420987534972275617?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7420987534972275617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7420987534972275617' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7420987534972275617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7420987534972275617'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/clojure-great-way-to-learn-oop.html' title='Clojure, a great way to learn OOP'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1350201917380829804</id><published>2011-10-17T17:47:00.000-07:00</published><updated>2011-11-02T13:53:02.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Installing a Network Printer on Scientific Linux 6.1</title><content type='html'>Took me a while to figure this out. Can't use the http://localhost:631 configuration window. Have to go to &amp;gt; System &amp;gt; Administration &amp;gt; Printing. Click on New. Click on Find Network Printer. Enter the IP address in the text box next to "Host...". Click on Find. The rest should be straightforward.&lt;br /&gt;&lt;br /&gt;I had to find the IP address by printing the network configuration page from my HP wireless printer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1350201917380829804?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1350201917380829804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1350201917380829804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1350201917380829804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1350201917380829804'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/installing-network-printer-on.html' title='Installing a Network Printer on Scientific Linux 6.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5327667953149460667</id><published>2011-10-11T12:48:00.000-07:00</published><updated>2011-10-11T12:49:07.642-07:00</updated><title type='text'>I guess others have a different view of blogging</title><content type='html'>I've already stated before my reasons for blogging (I'm too lazy to add a link to the post).&lt;br /&gt;&lt;br /&gt;Looks like others have high expectations for their blogs:&lt;br /&gt;&lt;a href="http://postary.com/twitter/mileslennon/why-are-95-of-blogs-abandoned"&gt;http://postary.com/twitter/mileslennon/why-are-95-of-blogs-abandoned&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Don't blog for hits, don't blog for money, just blog to say what you want to say. If this blog suddenly becomes popular and provides me with a six-figure income, yippee! It won't and I don't expect it to and that's fine.&lt;br /&gt;&lt;br /&gt;Don't write if you have nothing to say. Don't polish your posts. Don't focus on a narrow topic and then look for things to say. Don't be afraid to change the topic of your blog. Don't think about it too hard. Don't be afraid readers will lose interest. F*** the readers, you don't need them, unless you're already making a living blogging, in which case you won't abandon your blog.&lt;br /&gt;&lt;br /&gt;You should listen to my advice not because I get a lot of hits (I don't) or make a lot of money (LOL) but because I enjoy blogging. It makes my life more enjoyable.&lt;br /&gt;&lt;br /&gt;Blogging should be a statement of your views, a way to show the world your personality. It should be low cost. I'll knock out a lengthy blog post in fifteen minutes or less.&lt;br /&gt;&lt;br /&gt;The only mistake I've ever made as a blogger was writing about controversial topics and not hiding my identity. It's too easy to be contacted outside of your blog if you reveal your identity. I strongly encourage anonymous blogging. Not that you can't be found out. It's just that there's a big difference between saying "I'm Joe the Plumber" and pretending nobody can figure out who you are.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5327667953149460667?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5327667953149460667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5327667953149460667' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5327667953149460667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5327667953149460667'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/i-guess-others-have-different-view-of.html' title='I guess others have a different view of blogging'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4507419537193939514</id><published>2011-10-07T13:38:00.000-07:00</published><updated>2011-10-07T14:03:34.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><category scheme='http://www.blogger.com/atom/ns#' term='Clojure'/><title type='text'>Adding existing Clojure files to a project in Counterclockwise</title><content type='html'>I haven't done this in a while, and it took me a while to find out how to do it again. {Insert rant about how things get done in the Java world.}&lt;br /&gt;&lt;br /&gt;Under the project name, right-click on "src". Click on Import.... Under "General" click on "File System". Click next.&lt;br /&gt;&lt;br /&gt;Click on the Browse... button and select the directory (has to be different from the current project directory).&amp;nbsp; Check the boxes beside the names of the files you want to add.&lt;br /&gt;&lt;br /&gt;Not exactly the most intuitive procedure, but par for the course in the Java world.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4507419537193939514?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4507419537193939514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4507419537193939514' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4507419537193939514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4507419537193939514'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/adding-existing-clojure-files-to.html' title='Adding existing Clojure files to a project in Counterclockwise'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1503923171582405518</id><published>2011-10-05T11:04:00.000-07:00</published><updated>2011-10-05T11:15:42.454-07:00</updated><title type='text'>Job Ads Do Not Reflect Programming Language Popularity</title><content type='html'>This was an interesting read:&lt;br /&gt;&lt;a href="http://bloodredsun.com/2011/10/04/scala-groovy-clojure-jython-jruby-java-jobs/"&gt;http://bloodredsun.com/2011/10/04/scala-groovy-clojure-jython-jruby-java-jobs/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While interesting, I'm not sure how informative it is.&lt;br /&gt;&lt;br /&gt;First, I would be very surprised if only 3.5% of programming jobs in "industry" require Java knowledge. That number should be much higher.&lt;br /&gt;&lt;br /&gt;Second, the article leads one to draw the conclusion that Groovy (and possibly Scala) is the only language with any momentum. Maybe there really is no interest in Clojure. I like Clojure so far, but it's possible that even I will never do much with it. Here's the thing. You're unlikely to learn about a language's "momentum" by looking at industry jobs ads.&lt;br /&gt;&lt;br /&gt;In the early stages of a language it gets adopted by guys like me. We work by ourselves or in small teams. Legacy code has only a small impact on our choice of language. We use the language that we like the best and/or that makes us most productive. Through time a community builds up. Books get written. Major open source projects get written in the language. Startups find some of the weak spots in the language. Development tools emerge. It is possible to post an ad for a programmer and get qualified applicants. Then, and only then, is it ready for the enterprise.&lt;br /&gt;&lt;br /&gt;There is a pretty strong community behind Clojure. I can't speak for the other languages, because I haven't used them very much, but I don't think Clojure lacks momentum. There have already been three books published, with more on the way, &lt;i&gt;and the language is four years old&lt;/i&gt;. That may be a record for a language that didn't have the corporate backing of Java. C++ probably didn't even have that much attention from publishers after four years, and that was back before the internet made it hard to sell books, and when there were few competitors.&lt;br /&gt;&lt;br /&gt;Third, it's entirely possible that Java programmers are less interested in programming, and only use Java because there are jobs, making them more likely to quit. It's also possible that the average Java programming job sucks more than the average Scala or Clojure programming job. Job openings reflect demand and turnover. Job openings are unlikely to be proportional to the number of jobs in which a language is used.&lt;br /&gt;&lt;br /&gt;Fourth, where the post really matters is the implication that it may not be worth your time to learn these JVM languages. That would be a huge mistake. Learning more languages will make you a better programmer and make you more employable. All else equal, a job applicant with knowledge of Scala is a better applicant than a job applicant that has never heard of Scala. Some employers even view knowledge of less popular languages as a signal, making them more likely to interview the applicant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I'd like to reiterate that I'm not being critical of the article. To the contrary, it's an excellent article that is worth reading. The reader has to be careful not to draw the wrong conclusions. It's not the best resource if you are deciding which language you should learn next. The last paragraph is just too strong.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1503923171582405518?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1503923171582405518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1503923171582405518' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1503923171582405518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1503923171582405518'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/10/job-ads-do-not-reflect-popularity.html' title='Job Ads Do Not Reflect Programming Language Popularity'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-645451345972017618</id><published>2011-09-29T12:58:00.000-07:00</published><updated>2011-09-29T12:58:59.192-07:00</updated><title type='text'>How do I support Clojure development?</title><content type='html'>I'd really like to support Clojure development financially. It bothers me that there doesn't appear to be any way to make a donation.&lt;br /&gt;&lt;br /&gt;At&amp;nbsp;&lt;a href="http://clojure.org/funding"&gt;http://clojure.org/funding&lt;/a&gt; it says: "Clojure development will continue to be funded primarily, as it has throughout its history, through other commercial endeavors on my part, and, moving forward, on the part of Clojure/core. I am stopping the funding appeal so that it is completely clear that my/our continuing work on Clojure is an ongoing gift."&lt;br /&gt;&lt;br /&gt;I don't really want it to be a gift. Google gave me some background on this decision, but I don't like it one bit.&lt;br /&gt;&lt;br /&gt;My desire to donate is not about the right to demand features. It's not even about showing gratitude.&lt;br /&gt;&lt;br /&gt;I'm learning the language each day, and starting to incorporate it into my work, and the more I use it the more I like it. I want to provide the developers (primarily Rich Hickey) with sufficient financial incentive that they will continue to develop the language in the future, even if they stop liking Clojure.&lt;br /&gt;&lt;br /&gt;If there's a concern about donors demanding things, make the donation process anonymous. It wouldn't even have to be a donation. My employer pays thousands of dollars for other software each year. Sell an official version of Clojure that comes with a CD and manual for $800. Give me something that I can go to my boss and say, "I want to use this software, here's what it costs."&lt;br /&gt;&lt;br /&gt;I'm aware that posting on my blog is hardly the optimal way to make this request. It's not really a request, though, because everything I've said here has been said before. I'm just venting some frustration about the failure of the market to deliver a product that is both open and monetized in a practical fashion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-645451345972017618?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/645451345972017618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=645451345972017618' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/645451345972017618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/645451345972017618'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/how-do-i-support-clojure-development.html' title='How do I support Clojure development?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3877765756225854922</id><published>2011-09-27T13:04:00.000-07:00</published><updated>2011-10-10T08:17:15.099-07:00</updated><title type='text'>Why do I still use newLISP?</title><content type='html'>One of the big* unanswered questions in the world today is why I use newLISP if I am using Clojure. I use R because that's what I've been using for years, I use Fortran because I need speed, and I use Clojure because I want Lisp. So what does newLISP bring to the table when I'm already using Clojure?&lt;br /&gt;&lt;br /&gt;Here are a few thoughts: &lt;br /&gt;&lt;br /&gt;1. Java is heavy. For example, I work with sockets, and Clojure/Java is overkill for that.&lt;br /&gt;&lt;br /&gt;2. You sometimes need an understanding of the Java classpath and all that jazz, and I don't possess that understanding. I can make it work (so far) but I'm not a Java developer and it gets to be a nuisance. The Java build system is a perfectly acceptable reason to avoid Clojure altogether.&lt;br /&gt;&lt;br /&gt;3. Another is here:&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java"&gt;http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/3921744/how-do-i-change-directory-in-command-line-with-clojure"&gt;http://stackoverflow.com/questions/3921744/how-do-i-change-directory-in-command-line-with-clojure&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm sure you can do what you need to do in Clojure, but I don't want the headache. With newLISP, it's straightforward, and I don't have to learn a new approach for no particular reason.&lt;br /&gt;&lt;br /&gt;4. It's easy to call C libraries from newLISP (some of the time anyway). It hasn't been a pleasant experience when I've tried to call C from Java in the past. I'm well aware of SWIG, but SWIG is hardly a fun experience, it's just less painful than the alternatives.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I could add more examples, but the reasoning would be the same. It's partially a matter of scripting language vs full-blown programming language, and partially a matter of JVM vs native platform. I'm probably not going to use newLISP for a big simulation, but there are times that it is the best choice. &lt;br /&gt;&lt;br /&gt;I'm not claiming Clojure or any other Lisp can't do these things. Further, I could use Python, Ruby, or Perl for all of my scripting needs. I just find newLISP to be the &lt;i&gt;best solution&lt;/i&gt; for &lt;i&gt;me&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;* Definitions of big may vary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3877765756225854922?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3877765756225854922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3877765756225854922' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3877765756225854922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3877765756225854922'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/why-do-i-still-use-newlisp.html' title='Why do I still use newLISP?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-408255224855454975</id><published>2011-09-27T09:55:00.000-07:00</published><updated>2011-10-03T05:43:06.311-07:00</updated><title type='text'>Well, that was fast...</title><content type='html'>I just compiled newLISP on a quad-core machine. It took...4 seconds!&lt;br /&gt;&lt;br /&gt;This is a case where it's actually faster to compile than to install from a repo.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Thanks to the comment below, I can do it even faster:&lt;br /&gt;&lt;br /&gt;1. Download the newLISP source:&lt;br /&gt;&lt;a href="http://newlisp.nfshost.com/downloads/"&gt;http://newlisp.nfshost.com/downloads/&lt;/a&gt;&lt;br /&gt;2. Extract the archive.&lt;br /&gt;3. cd into newlisp-x.x.x&lt;br /&gt;4. ./configure-alt &lt;br /&gt;5. make -j 4&lt;br /&gt;6. (As root) make install&lt;br /&gt;&lt;br /&gt;Steps 4-6 took about 10 seconds.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[Deleted previous, now irrelevant steps]&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-408255224855454975?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/408255224855454975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=408255224855454975' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/408255224855454975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/408255224855454975'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/well-that-was-fast.html' title='Well, that was fast...'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3602860428104270774</id><published>2011-09-26T08:13:00.000-07:00</published><updated>2011-09-27T13:04:53.931-07:00</updated><title type='text'>No need to go back to Windows</title><content type='html'>Just a short note that I don't see myself moving back to Windows. I wrote earlier about my frustration trying to upgrade to Slackware 13.37.&lt;br /&gt;&lt;br /&gt;I've been using Scientific Linux 6.1 64-bit for just under a month. I do a lot more than Facebook and email on my computer, so that amount of time will generally reveal any problems I'm going to have.&lt;br /&gt;&lt;br /&gt;Here are some thoughts:&lt;br /&gt;&lt;br /&gt;a. It's probably similar to Slackware in terms of quality. Fedora is not in any way an indicator of the quality of SL. Things just work in SL or Slackware.&lt;br /&gt;&lt;br /&gt;b. You get more packages with SL than with Slackware. As I noted earlier, I was having to compile so much of my own software, and write so many of my own SlackBuilds, that Slackware just wasn't reasonable. I would probably choose Windows 7 over Slackware 13.37 due to the packages problem. It's nice to have repos with lots of packages. That's the only thing I never fully adjusted to as a Slackware user.&lt;br /&gt;&lt;br /&gt;c. I was concerned about old packages with SL, and while I wasn't wrong, it hasn't been a big deal. I &lt;i&gt;really&lt;/i&gt; miss SlackBuilds. I hate having to figure out how to compile software. Nonetheless it works, and I don't have to do it very often.&lt;br /&gt;&lt;br /&gt;For now I remain a very happy Linux user. If the trend of adding features at the expense of quality continues, I'll reconsider. A lot of the recent UI changes, for instance, don't even make sense, and they're not based on research. I'm not going to use software that's the equivalent of a high school student's science fair project. Luckily I won't have to worry about it for a long time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3602860428104270774?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3602860428104270774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3602860428104270774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3602860428104270774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3602860428104270774'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/no-need-to-go-back-to-windows.html' title='No need to go back to Windows'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7630925161583667454</id><published>2011-09-23T06:21:00.000-07:00</published><updated>2011-09-26T08:14:50.525-07:00</updated><title type='text'>I look forward to using the D programming language in the future</title><content type='html'>Unfortunately, I don't know that I'm going to spend a lot of time on it right now. In many ways it's like Racket or Scheme. It's a solid language but it's just not at a point where it's reasonable to try to use it for work.&lt;br /&gt;&lt;br /&gt;It needs a better website and better access to the outside world, i.e., more libraries. It's "sort of" compatible with C - dealing with C header files is a lot of work. If I want to install an extension in R or Python or some other language (in R they're called packages), they're easy to find and easy to install and get working properly. That's not really the case with D. Heck, it's hard to even tell if individual projects (most of which are partially done at best) are still active.&lt;br /&gt;&lt;br /&gt;Hopefully these things will get worked out. I doubt that they will, unless a large corporation decides it has a reason to invest in D development, but I'll give it another try in a year and see if I feel more comfortable with it.&lt;br /&gt;&lt;br /&gt;Yes, D is a better C++, but I'm not sure I'm looking for C++. For now I'm more than happy to push forward with my combination of Clojure, R, Fortran, and newLISP. Lisp is just more compatible with my brain.&lt;br /&gt;&lt;br /&gt;Languages to learn over the next couple of years: Scala, OCaml, and Haskell. Other possibilities: Go, Factor, Forth, Pure. Even if I don't use a language for real tasks, it's never a bad thing to pick up some new approaches to old problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7630925161583667454?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7630925161583667454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7630925161583667454' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7630925161583667454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7630925161583667454'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/i-look-forward-to-using-d-programming.html' title='I look forward to using the D programming language in the future'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4872509485157382212</id><published>2011-09-21T05:53:00.000-07:00</published><updated>2011-09-21T05:54:07.607-07:00</updated><title type='text'>Programmer-in-chief</title><content type='html'>&lt;i&gt;[Random thoughts: Don't read unless your time has very little value.] &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;When I see President Obama's vision of governing playing out, I can't help but think of software developers.&lt;br /&gt;&lt;br /&gt;For the President, the most important thing is the process by which legislation is made. The first priority is that legislation be made according to his beliefs about how the legislative process should work. Legislators should aspire to be reasonable and civil. They should act like grown-ups. They should be willing to compromise in the name of being able to do a photo-op having a beer afterwards.&lt;br /&gt;&lt;br /&gt;For software developers, the most important thing is the process by which the software comes to be. It doesn't matter if it's over budget and behind schedule, the software should be written in the silver bullet language, and it should be written in a purely functional style or whatever. Ask the developer why his product is better, and he'll go into a detailed explanation of how the software was made.&lt;br /&gt;&lt;br /&gt;In either case, nobody gives a sh**. Nobody cares about the process that brought about a web app. Nobody cares about the partisan tone in Washington. They care about what they can do with the web app and what the legislation means for them.&lt;br /&gt;&lt;br /&gt;Maybe it's the case that insiders get wrapped up with process rather than results in any industry. Even so, I think it's interesting that someone in such a high position with teams of well-paid advisors could make such a massive screw-up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4872509485157382212?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4872509485157382212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4872509485157382212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4872509485157382212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4872509485157382212'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/programmer-in-chief.html' title='Programmer-in-chief'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3461899393409596153</id><published>2011-09-19T11:39:00.000-07:00</published><updated>2011-09-19T11:43:08.908-07:00</updated><title type='text'>A simple example of why I like D</title><content type='html'>Language wars are fun - and I've learned a lot from them - but that's not the goal of this post. I'm mostly going to leave comparisons with other languages as an exercise for the reader.&lt;br /&gt;&lt;br /&gt;This is an extremely simple example, but it demonstrates some of what I, as a new D programmer, really like about the language.&lt;br /&gt;&lt;br /&gt;The program defines a function that takes an integer, creates a vector of that length, returns it, fills all elements of the vector with a given value, prints the vector, prints the address of the vector, prints sizeof (not too useful), and the number of elements. It feels like a scripting language, yet it's not a scripting language.&lt;br /&gt;&lt;br /&gt;#!/usr/bin/rdmd&lt;br /&gt;import std.stdio;&lt;br /&gt;&lt;br /&gt;int[] newArray(int N)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto x = new int[](N);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return x;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto y = newArray(3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto z = newArray(7);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y[] = 3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; z[] = 4;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeln(y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeln(z);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeln(y.ptr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeln(y.sizeof);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeln(y.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //writeln(y[3]); // Sometimes we do this&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y[2] = 4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //y[3] = 5; // And this too&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1. The first line allows me to run the program as if it were a script. It does the compilation for me.&lt;br /&gt;&lt;br /&gt;2. I've used the auto keyword in several places. It's nice because it's clean, I don't have to think about what the type should be, and it's less likely to cause a bug. It seems like it shouldn't be a big deal, but it's really nice to have.&lt;br /&gt;&lt;br /&gt;3. Allocation of the vector is done at runtime. There is no need to play around with the allocation of memory myself, use the sizeof operator, and no need to worry about including one (and only one) delete statement.&lt;br /&gt;&lt;br /&gt;4. It's as easy to set all the elements of y and z to a given value as it is in Fortran. No need to set up a loop, or call a function to do it for you. The code is clean, it's hard to make a mistake, and it's intuitive to a beginner or someone who writes code in more than one language.&lt;br /&gt;&lt;br /&gt;5. The excellent writeln function knows what a vector is. Okay, it knows what an array is, but I'm using it like a vector. It prints it the way a beginner would expect. No need to write a bug-attracting loop. It's built into the language.&lt;br /&gt;&lt;br /&gt;6. If you uncomment the two lines I've commented, you will get an error. True, that slows things down, but I like to write in a safe language. I could write unsafe code if I wanted, but I don't want to, and I like having the option of safety built into the language&lt;i&gt; as the default&lt;/i&gt;. A vector knows how long it is and it checks that I'm accessing an element of the vector.&lt;br /&gt;&lt;br /&gt;7. I've avoided idiotic pointer syntax. y.ptr is the way it should be done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3461899393409596153?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3461899393409596153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3461899393409596153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3461899393409596153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3461899393409596153'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/simple-example-of-why-i-like-d.html' title='A simple example of why I like D'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5207728371388290502</id><published>2011-09-19T06:55:00.000-07:00</published><updated>2011-09-19T06:55:10.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='64-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>64-bit Firefox builds for Linux</title><content type='html'>Now that I'm running 64-bit Linux, the one problem I was bumping against was getting updates for Firefox. They've got their new schedule of releasing frequently. Some distros aren't keeping up - and probably for good reason, if they care about stability.&lt;br /&gt;&lt;br /&gt;It was easy to find the nightly builds. That's actually pretty slick, with a new update coming through each day automatically. Well, it's slick unless you use your machine for work, in which case you don't want things to break. Oh, also, many of your extensions won't work. Not really what I'm after.&lt;br /&gt;&lt;br /&gt;For some reason, Mozilla only provides 32-bit Linux builds on their download page. It will show a 32-bit download link even if your OS is 64-bit. After much searching, I found the 64-bit downloads:&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/"&gt;ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;{This is probably something that everyone else already knows. I didn't. This way I can find it in the future.}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5207728371388290502?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5207728371388290502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5207728371388290502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5207728371388290502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5207728371388290502'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/64-bit-firefox-builds-for-linux.html' title='64-bit Firefox builds for Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4517079034876395259</id><published>2011-09-13T14:47:00.000-07:00</published><updated>2011-09-27T10:03:53.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>CUDA 4.0 on Scientific Linux 6.1</title><content type='html'>&lt;b&gt;Edit:&lt;/b&gt; Further experimentation has indicated that you might run into trouble if you have multiple OSes on your machine. You need to boot with "rdblacklist=nouveau" appended to the line starting "kernel". That is done automatically if SL has control over Grub. If you use another OS that controls the boot manager, you will have to figure out how to make the change. I did battle with this on a machine where Mint, using Grub 2, controls booting.&lt;br /&gt;&lt;br /&gt;I don't know much about Grub 2, so I solved the problem by reinstalling Grub from SL. For some reason, in that case, SL assigns a timeout value of 0 seconds, then chainloads the Grub 2 boot menu. It took me a while to figure out what was going on...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-- Original post follows --&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I installed the nvidia driver as described in this post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scientificlinuxforum.org/index.php?showtopic=15"&gt;http://scientificlinuxforum.org/index.php?showtopic=15 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;using the command&lt;br /&gt;&lt;br /&gt;&lt;span class="post-normal"&gt;yum --enablerepo=elrepo install kmod-nvidia&lt;/span&gt;&lt;br /&gt;No problems after a reboot. I then installed the CUDA toolkit and SDK as described in the documentation. I got an error saying -lcuda could not be found when building the code samples. The solution was to make a symbolic link (as root) using&lt;br /&gt;&lt;br /&gt;ln -s /usr/lib64/nvidia/libcuda.so /usr/lib64/libcuda.so&lt;br /&gt;&lt;br /&gt;I then did "make" to build all the samples. I ran about half a dozen of them without any problems.&lt;br /&gt;&lt;br /&gt;I've had my share of problems setting up CUDA. I'm happy it was so easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4517079034876395259?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4517079034876395259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4517079034876395259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4517079034876395259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4517079034876395259'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/cuda-40-on-scientific-linux-61.html' title='CUDA 4.0 on Scientific Linux 6.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8706551431588136299</id><published>2011-09-12T14:01:00.000-07:00</published><updated>2011-09-12T14:01:18.684-07:00</updated><title type='text'>Are pointers important?</title><content type='html'>I've actually been planning to comment on a point made in this blog post for quite a while:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo and behold, it showed up on Hacker News today, so I thought I'd throw out a comment. As I now post all my comments here, to save time, that means another blog post.&lt;br /&gt;&lt;br /&gt;I can see the value of recursion as a way to "weed out" bad programmers. But pointers? At least in my area, pointers have absolutely no value at all. Languages like R and Matlab get by just fine without pointers.&lt;br /&gt;&lt;br /&gt;Pointers in C are one of the worst design decisions in the history of programming languages. I want to elaborate on this point a little more later with some examples - that's why I haven't gotten around to writing up my post yet - but there are two groups who can do well with pointers.&lt;br /&gt;&lt;br /&gt;The first group can memorize syntax without actually being bothered to think about it. If you're in this group, you can read that the multiplication operator is * for integers and + for floats, while the addition operator is + for integers and * for floats, and immediately knock out a thousand lines of code without getting it wrong once.&lt;br /&gt;&lt;br /&gt;A good programmer would say to herself, "That's inconsistent. I must be doing something wrong." She would repeatedly mess things up. * should be multiplication everywhere and + should be addition everywhere. The changes in the meaning of the * and + operators would be something a good programmer could not handle.&lt;br /&gt;&lt;br /&gt;The second group is intent on learning everything there is to know about programming languages, computer hardware, memory, garbage collection, and so on. Everything, that is, except what they're being paid to work on. If you get paid to do simulations, you should spend most of your time thinking about the simulation itself, not a debate on how to properly manage memory. Members of the second group will be writing blog posts about how garbage collectors are for sissies while you're waiting for them to do tests on the new functions they just wrote. The tests may or may not come, but they can write in assembly if you need them to. I mean, assembly is interesting, because nobody else can do it. Tests not so much.&lt;br /&gt;&lt;br /&gt;That's great, and I'm sure that if he got a job working for Intel writing compilers, he'd be good to have around. I'm not working at Intel writing compilers, so his value to me is not so great.&lt;br /&gt;&lt;br /&gt;I think Joel wrote a lot of good stuff when he was blogging, but I disagree on this issue. Java is a bad language for sure, but not because it doesn't require the developer to waste time managing memory. There's no reason to ask an interview question about pointers unless it's part of the job. Naturally I think knowledge of recursion is a very good signal. That demonstrates an ability to solve problems, and will be relevant to any job.&lt;br /&gt;&lt;br /&gt;{Yes, this is related to my opinion on the&amp;nbsp;&lt;a href="http://lmf-ramblings.blogspot.com/2011/09/c-vs-fortran.html"&gt;C++ vs Fortran&lt;/a&gt;&amp;nbsp;debate. You have to know pointers to use C++. If I could go back in time I would not spend even five seconds learning pointers, C or C++. I do regret the time I wasted learning them. I would be no worse off if I hadn't. I'd have been much better off spending my time mastering Fortran, Lisp and D.}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8706551431588136299?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8706551431588136299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8706551431588136299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8706551431588136299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8706551431588136299'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/are-pointers-important.html' title='Are pointers important?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4573740749684620727</id><published>2011-09-10T09:48:00.000-07:00</published><updated>2011-09-19T06:55:40.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Calling a C shared library from D</title><content type='html'>As I said at the end of my post on &lt;a href="http://lmf-ramblings.blogspot.com/2011/09/c-vs-fortran.html"&gt;C++ vs Fortran&lt;/a&gt;, I think D is a better language than C++. My preferred language is Lisp (newLISP for little jobs and Clojure for the heavy stuff). The more I play with D, though, the more I like it.&lt;br /&gt;&lt;br /&gt;As good as the language is, there are some obvious problems - the website needs to be redone by a professional web designer, and the available libraries on dsource should be better organized so it's easier to find what you're looking for, dead projects thrown out or put into their own area, and a clear separation between the D1 and D2 projects. Even better would be to give some guidelines to contributors, and suggestions as to critical projects.&lt;br /&gt;&lt;br /&gt;Until a few days ago I had been slowly learning D by reading &lt;i&gt;&lt;a href="http://erdani.com/index.php/books/tdpl/"&gt;The D Programming Language&lt;/a&gt;&lt;/i&gt; and porting C functions to D. I then decided that D is definitely worth having in my toolbox when I want a compiled language. To be practical I need to be able to link to C shared libraries.&lt;br /&gt;&lt;br /&gt;This is such an important thing that you'd expect there to be a clear, easy-to-follow tutorial hitting you in the face as soon as you go to the website. Not really. It's not difficult at all to do. It's just that the information is scattered all around. I don't see any way that someone who does not have C/C++ experience can figure it out. That's a shame because a very good reason to use D is that you want to use a language that provides you with more than just access to the computer's memory (unlike C) and doesn't require a decade to achieve mediocrity (unlike C++).&lt;br /&gt;&lt;br /&gt;So here's a simple example. &lt;a href="http://www.adp-gmbh.ch/cpp/gcc/create_lib.html"&gt;This site&lt;/a&gt; shows how to make a .so using GCC. That's &amp;nbsp;sufficient for our purposes. I called my shared library libmean.so.&lt;br /&gt;&lt;br /&gt;On the D side, here is a file (dlinktoc.d) that calls the C function "mean":&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import std.stdio;&lt;br /&gt;extern (C) double mean(double a, double b);&lt;br /&gt;&lt;br /&gt;void main() {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;double a = 4.7;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;double b = 7.6;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;auto c = mean(a,b);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;writeln("The mean is: ",c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This is a typical D program except that I have included the extern (C) line to tell D that mean is a C function. I saved dlinktoc.d in the same directory as I created libmean.so.&lt;br /&gt;&lt;br /&gt;The compiling and linking is similar to what you would do with a C program:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;dmd dlinktoc.d -L./libmean.so&lt;br /&gt;&lt;br /&gt;Running:&lt;br /&gt;&lt;br /&gt;./dlinktoc&lt;br /&gt;The mean is: 6.15&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4573740749684620727?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4573740749684620727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4573740749684620727' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4573740749684620727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4573740749684620727'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/calling-c-shared-library-from-d.html' title='Calling a C shared library from D'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2773221420564317317</id><published>2011-09-09T08:26:00.000-07:00</published><updated>2011-09-09T08:26:07.601-07:00</updated><title type='text'>Clever rarely works</title><content type='html'>I was reading about the justification for the weird Unity interface:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jonobacon.org/2011/09/06/menu-discoverability-in-ubuntu-11-10/"&gt;http://www.jonobacon.org/2011/09/06/menu-discoverability-in-ubuntu-11-10/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is what happens when you have someone (not necessarily Jono, I hope, but someone at Canonical) who has to do something to justify his existence.&lt;br /&gt;&lt;br /&gt;Here's what he's missing. Almost all potential Ubuntu users have been using Windows or some other OS for years. If you're going to change the interface, you better have a good reason.&lt;br /&gt;&lt;br /&gt;I've never actually heard anyone complain that the menus on Windows or OS X aren't hidden. This is something we don't want to think about. It imposes a cost on us. The benefits? Apparently people like to discover things.&lt;br /&gt;&lt;br /&gt;I can't see any possible benefit personally. None. The only benefit he claims is that he thinks it looks "far sleeker, less cluttered and pleasant to use". Good for him. You don't go making a change like that for a reason like that.&lt;br /&gt;&lt;br /&gt;My guess is that both Microsoft and Apple have spent tens of millions of dollars on usability tests, and Ubuntu hasn't. I could argue about why I think it's dumb. I don't have to. Two corporations with mega-budgets don't do it that way. They have almost certainly been very careful with their choices. Canonical is saying &lt;i&gt;Steve Jobs&lt;/i&gt; got it wrong. Steve Jobs might be wrong from time to time, but if I have to make a design decision, I'm going with Steve Jobs over a Canonical developer every time.&lt;br /&gt;&lt;br /&gt;It's not like there are no other reasons to use Ubuntu rather than Windows or OS X.&lt;br /&gt; &lt;br /&gt;Unless it's not Windows and OS X Canonical sees as its rivals. Maybe Ubuntu is trying to be different from other Linux distributions. Maybe there will be a kernel fork a few months from now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2773221420564317317?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2773221420564317317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2773221420564317317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2773221420564317317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2773221420564317317'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/clever-rarely-works.html' title='Clever rarely works'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4427381499268640536</id><published>2011-09-07T08:08:00.000-07:00</published><updated>2011-09-09T13:20:18.794-07:00</updated><title type='text'>C++ vs Fortran</title><content type='html'>I've been wanting to put together a blog post about Fortran for a while now, but it never made it to the top of my list of priorities. I'm happy to see that someone named eric_t went ahead and put together a really nice page:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bitbucket.org/eric_t/modern-fortran/wiki/Home"&gt;https://bitbucket.org/eric_t/modern-fortran/wiki/Home&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, predictably, the C++ mob showed up with their pitchforks to argue against the use of Fortran. (Actually, a lot of them were arguing against FORTRAN, demonstrating their ignorance.) &lt;br /&gt;&lt;br /&gt;As someone who has used both C++ and Fortran for numerical programming, it's hard for me to think of a good reason to use C++ for this stuff.&lt;br /&gt;&lt;br /&gt;Let me start out by explaining my perspective, which is what rarely happens in programming language debates. I write numerical programs that do statistical analysis, simulations, and various types of numerical analysis. Most of my programs are less than 5000 lines. &lt;br /&gt;&lt;br /&gt;I don't know or care about comparisons of C++ against Fortran for 50 developers working with a codebase of a million lines. I work together with only a few others. I have no interest at all in software development. I write programs as necessary to feed myself.&lt;br /&gt;&lt;br /&gt;C++ comes with the mother of all learning curves. I'm not talking about the fact that there's no complexity too large to fit into a C++ program (the language is more than happy to accommodate any desired level of complexity). Though of course that is a problem.&lt;br /&gt;&lt;br /&gt;I'm talking about the ability to do basic things like linear algebra or writing functions. A Matlab user can convert to Fortran in about 10 minutes. Obviously you won't know very much, but in the time it takes to get used to the idea of compiling a program and specifying types for your variables, you can define two matrices and do a matrix multiplication in Fortran. The language was written for scientific computations. You can take a look at the &lt;a href="http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gfortran/"&gt;gfortran manual&lt;/a&gt; to see all the built-in goodies that come with a Fortran compiler.&lt;br /&gt;&lt;br /&gt;The bare minimum for doing the same exercise in C++ is that you have to get your hands on a library that does what you want. So you have to know about the existence of Eigen or another libary. Then you have to figure out how to call it. Then you have to figure out how to link to an external library. And the documentation is probably not that helpful. There are friendly C++ users for sure. It's just that you won't have a clue what they're telling you to do. They'll be telling you to set up a makefile. They'll be recommending that you look at Boost and talking about how great it is and you'll be all WTF.&lt;br /&gt;&lt;br /&gt;All this mess because you wanted to try out C++ to do a simple matrix multiplication. In Matlab it was just a few lines. In C++ it's a month-long project.&lt;br /&gt;&lt;br /&gt;And before you use that C++ library, are you really sure you won't end up with a memory leak? Do you even know what a memory leak is? It probably won't matter for your simple matrix multiplication, but it's real comforting to know that you should worry about such things in order to write such a simple program, isn't it?&lt;br /&gt;&lt;br /&gt;Now that the numerical version of "Hello, World!" is out of the way, you can get on to real work. You need to start with a tutorial. Not a complete introduction to the language, of course, just a tutorial that will give you a basic understanding of the language.&lt;br /&gt;&lt;br /&gt;An excellent tutorial (that has taught me a great deal) is &lt;i&gt;C++ Primer Plus&lt;/i&gt;. I just pulled the Fifth Edition off my shelf. It's okay to just read through Chapter 17. You don't even have to read the appendices. The first 1039 pages of the book is enough for now.&lt;br /&gt;&lt;br /&gt;You will have worked through Chapter 4, including the section on "Pointers and the Free Store" and "Pointers, Arrays, and Pointer Arithmetic". You'll have learned about "Dereferencing Pointers". You'll get to work through well-designed syntax like (page 308)&lt;br /&gt;&lt;br /&gt;int sum(int (*ar2)[4], int size);&lt;br /&gt;&lt;br /&gt;or (page 309)&lt;br /&gt;&lt;br /&gt;*(*(ar2 + r) + c)&lt;br /&gt;&lt;br /&gt;You'll learn about "Memory Models and Namespaces" in chapter 9. The topics include material useful to newbies like "Automatic Variables and the Stack".&lt;br /&gt;&lt;br /&gt;Further along (page 677) you'll learn about "Inheritance and Dynamic Memory Allocation".&lt;br /&gt;&lt;br /&gt;Maybe you can just learn the language a little bit at a time. Here's the thing. You really can't. You have to know a lot to read code written by others and to use libraries written by others. Complexity is never hidden behind the scenes with C++. You have to understand memory management before you write your first line of code.&lt;br /&gt;&lt;br /&gt;You might think you'll just call libraries so you'll be okay. That's not programming in C++, but let's pretend it is. An easy library (written in C) to call is the GSL. You want to solve a system of equations. Here's the function call:&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;int (* f) (const gsl_vector * &lt;/code&gt;&lt;var&gt;x&lt;/var&gt;&lt;code&gt;, void * &lt;/code&gt;&lt;var&gt;params&lt;/var&gt;&lt;code&gt;, gsl_vector * &lt;/code&gt;&lt;var&gt;f&lt;/var&gt;&lt;code&gt;)&lt;/code&gt;&lt;/dt&gt;&lt;dt style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;&lt;/dl&gt;This is an example of "easy" in C++.&lt;br /&gt;&lt;br /&gt;Then when you're done with your tutorial, at a minimum, you need to learn about templates and the STL. And, although not strictly necessary, you should pick up some books by Scott Meyers so you can learn about pitfalls of the language.&lt;br /&gt;&lt;br /&gt;If you think I'm just some idiot blogger who doesn't know anything about programming, and don't want to take my word that C++ is too complex to be a reasonable language choice, take a look at this blog post:&lt;br /&gt;&lt;br /&gt;http://gigamonkeys.wordpress.com/2009/10/16/coders-c-plus-plus/&lt;br /&gt;&lt;br /&gt;It was not a group of mediocre developers too lazy to learn a programming language that he interviewed. From my perspective, Ken Thompson's comment is the most relevant:&lt;br /&gt;&lt;br /&gt;"It certainly has its good points. But by and large I think it’s a bad language. It does a lot of things half well and it’s just a garbage heap of ideas that are mutually exclusive. Everybody I know, whether it’s personal or corporate, selects a subset and these subsets are different. So it’s not a good language to transport an algorithm—to say, “I wrote it; here, take it.” It’s way too big, way too complex."&lt;br /&gt;&lt;br /&gt;If you can program in Matlab, you can program in Fortran. The same is not true for C++. The complexity is not optional: you just can't interact with the outside world without bumping into it.&lt;br /&gt;&lt;br /&gt;The advice to use C++ goes something like this:&lt;br /&gt;1. Spend ten years learning to write C++ programs.&lt;br /&gt;2. Start writing all the programs that you could have been writing ten years ago using Fortran. &lt;br /&gt;&lt;br /&gt;I understand what these C++ developers are going through. If I invested ten years of my life learning nearly 1% of the C++ language, I would be upset to find out that those ten years were wasted. I'd be looking for some way to make it feel as though I didn't flush ten years of my working life down the toilet.&lt;br /&gt;&lt;br /&gt;There are better choices. For many things, Fortran is an excellent choice. It even has recursive functions and lets you specify that a function is pure. It's not Lisp but that does offer a bit of comfort to someone like me.&lt;br /&gt;&lt;br /&gt;If you like the object oriented side of things, Java has closed the speed gap a lot (not that I like Java, but being a better choice than C++ is a low standard). There's also D and Objective-C. The more I use D the more I like it. You really should have your head examined if you have the choice between D and C++ and you choose C++ because you think it's a better language. There might be a different reason to use C++ (like, you're too stubborn to admit that your favorite language sucks) but it's definitely not the case that C++ is a better language.&lt;br /&gt;&lt;br /&gt;There are languages like Scala (I've played with it a little but not done any real work, so I can't say much about it) and Clojure that have access to the JVM. You can do the performance critical parts in Java if necessary.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://luajit.org/"&gt;LuaJIT2&lt;/a&gt; is really fast, and the upcoming &lt;a href="http://savannah.nongnu.org/projects/gsl-shell/"&gt;GSL Shell&lt;/a&gt; will be based on LuaJIT2 (at least that's my understanding). Even the current version of GSL Shell does well for speed. &lt;a href="http://pypy.org/"&gt;PyPy &lt;/a&gt;is constantly improving as well. Both are excellent, if somewhat incomplete, choices.&lt;br /&gt;&lt;br /&gt;C++? No way. There might be a few cases in which C++ is the best choice, but given the time investment required to learn C++, that is a very small set. If you factor in the time to learn the language, write/debug your program, revisit the program later to fix bugs/add features, and then compile and run programs, even pure interpreted Ruby is likely to be a better choice.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; I just watched an excellent presentation by Herb Sutter:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C"&gt;http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He definitely makes a strong case for C++. I don't disagree with much of what he said, except that I think he overstates the speed gap for many tasks between C++ and languages like Java, though for the applications he's talking about the difference still matters. Interestingly, for those applications, developer time is almost irrelevant.&lt;br /&gt;&lt;br /&gt;He never says C++ has replaced Fortran. In fact, at the beginning of the talk, he specifies that the three languages that can deliver the needed performance are C, C++, and Fortran. Later at that same conference, they talked about D:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/Scott-Meyers-Andrei-Alexandrescu-and-Herb-Sutter-C-and-Beyond"&gt;http://channel9.msdn.com/posts/Scott-Meyers-Andrei-Alexandrescu-and-Herb-Sutter-C-and-Beyond&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4427381499268640536?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4427381499268640536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4427381499268640536' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4427381499268640536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4427381499268640536'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/c-vs-fortran.html' title='C++ vs Fortran'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4470876057445133220</id><published>2011-09-05T06:59:00.000-07:00</published><updated>2011-09-05T06:59:16.800-07:00</updated><title type='text'>Why I Blog</title><content type='html'>I've seen a lot of blog posts the last six months about "Why I Blog". I get the impression that most of those bloggers are trying to justify spending many hours blogging.&lt;br /&gt;&lt;br /&gt;In my case it's a little different. I don't spend much time blogging. It actually takes more time to respond to comments than it does to blog. When I have something to say, I open my blog, type in everything that's inside my head at the moment, hit "Publish", &amp;nbsp;and that's it. There's not much to justify in terms of spending time. I might fix a grammatical or spelling error, but that's it. My posts are long (in my opinion) but that's because I don't spend time shortening them.&lt;br /&gt;&lt;br /&gt;I certainly don't blog in an attempt to get hits. Not many people read this blog. Most of my posts have been viewed less than 1000 times. I've never submitted a post to a site like reddit.com. I've never tried to monetize my blog. I prefer having a small readership because the readers I've currently got are the ones who are actually interested in the topic of the post. Further, with a small readership, I feel no stress if I don't post anything for six months or if I completely change to a new topic. A blog with no concern for hits leaves me free of obligations.&lt;br /&gt;&lt;br /&gt;If I were to write a post like "Multimedia in Ubuntu 11.04" and then submit to all the Linux news sites, I'd get more hits but the level of discussion would be pretty low. I'd get comments about how Ubuntu is not Linux and other things that make my eyes glaze over. I don't get&amp;nbsp;&lt;i&gt;many&lt;/i&gt; comments, I get&amp;nbsp;&lt;i&gt;meaningful&lt;/i&gt; comments. More or less like Hacker News. In a year HN will be overrun by herds of idiots and I'll have to go somewhere else for news.&lt;br /&gt;&lt;br /&gt;So why does my blog exist?&lt;br /&gt;&lt;br /&gt;1. It serves as future reference. I've not done any counting, but I guess I've posted way more notes about how to solve some technical problem than anything else. Like my recent posts on installing software in Scientific Linux. Some of these posts still get 20 or 30 hits a week, so evidently others are encountering the same problems. I'm glad I could help, but I wrote the post entirely due to the fact that as you get older, your memory disappears.&lt;br /&gt;&lt;br /&gt;It's funny because more than once I've gone to Google for help on a problem and found myself saying, "This was just what I needed, somebody else is doing the same thing, I'll put a link on my blog for future reference. Oh, wait...I'm an idiot!" No point linking to my own blog.&lt;br /&gt;&lt;br /&gt;2. It allows me to clarify my thoughts. When you're writing something out formally, you have to think about everything, including all the rough edges where someone else might read it and point out that you're not very smart.&lt;br /&gt;&lt;br /&gt;When you keep your thoughts in your head, you can focus on the areas where your argument makes sense. When you write something down, you have to focus on everything. When you write something down, you no longer have the option to say, "I'll worry about that counterargument later". When you write something down that others might read, you are no longer willing to accept sloppy or incomplete logic. You know you have to put together a complete argument that doesn't have holes in it, or at least identify all the holes and explain how you can deal with them.&lt;br /&gt;&lt;br /&gt;Business meetings have a lot of drawbacks. Forcing the participants to think through their arguments logically is not one of them. Business meetings are one of the greatest efficiency-inducing mechanisms there are. Blogging is not that different (in this respect, at least).&lt;br /&gt;&lt;br /&gt;{I had another blog in the past that dealt with other issues. This item applies more to a political, sports, news, or business blog than it does to this blog. But it does apply to all blogs. You're constantly playing devil's advocate.}&lt;br /&gt;&lt;br /&gt;3. It allows me to not waste time on other sites. Comments on most sites (Hacker News being a notable exception) are useless. Nobody reads them, or more precisely, nobody thinks about them. Plus they're too short. I like to write down everything in my mind at the time.&lt;br /&gt;&lt;br /&gt;Having a blog has saved me a lot of time. I no longer post comments on other sites. Not for any reason.&lt;br /&gt;&lt;br /&gt;If I want to comment, I do that here. If it's not worth a blog post - and it usually isn't - it's not worth commenting. You could argue that the comment would have more impact if it's made on the original site. Given the signal-to-noise ratio in most comments sections, and the unwillingness of anyone else to think carefully about a comment, that argument is flawed.&lt;br /&gt;&lt;br /&gt;I don't comment very often anymore, and when I do, I'm able to comment in a way I see fit.&lt;br /&gt;&lt;br /&gt;That pretty much sums it up. I blog for my own future reference, because it is a powerful tool for clarifying my thoughts, and to save time. I wish there were a more honorable reason, like saving the world or something like that, but it's pure selfishness!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4470876057445133220?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4470876057445133220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4470876057445133220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4470876057445133220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4470876057445133220'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/why-i-blog.html' title='Why I Blog'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4194760874352437266</id><published>2011-09-02T07:48:00.000-07:00</published><updated>2011-09-02T07:48:24.762-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Gretl on Scientific Linux</title><content type='html'>I don't even use Gretl, but sometimes it needs to be available to others. That's why I created Gretl SlackBuilds, and now I have tried to build it for SL.&lt;br /&gt;&lt;br /&gt;I pulled the following required packages from the Fedora build at&lt;br /&gt;http://pkgs.fedoraproject.org/gitweb/?p=gretl.git;a=blob_plain;f=gretl.spec;hb=fe69e968cb87ca23907ba147a8071420f702a960&lt;br /&gt;&lt;br /&gt;BuildRequires: desktop-file-utils&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; gtk2-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; glib2-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; blas-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; fftw-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; gettext&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; libxml2-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; gtksourceview-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; libgnomeui-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; lapack-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; readline-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; ncurses-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; gmp-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; mpfr-devel&lt;br /&gt;BuildRequires:&amp;nbsp;&amp;nbsp;&amp;nbsp; gnuplot&lt;br /&gt;BuildRequires: gnu-free-sans-fonts&lt;br /&gt;BuildRequires: bitstream-vera-sans-mono-fonts&lt;br /&gt;BuildRequires: bitstream-vera-sans-fonts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I made sure all of that stuff was installed. Then I did&lt;br /&gt;./configure --with-lapack-prefix=/usr&lt;br /&gt;make -j 4&lt;br /&gt;make check&lt;br /&gt;make install (as root)&lt;br /&gt; &lt;br /&gt;Be sure you have &lt;i&gt;everything&lt;/i&gt; in the list above. I thought I did, but missed libgnomeui-devel. It compiled and installed, but I ended up with only gretlcli. It won't necessarily fail if you're missing something.&lt;br /&gt;&lt;br /&gt;There are packages available on the Gretl homepage, but not 64-bit, which is why I did the compilation. Now if only I could figure out how to get ACML to work with Gretl...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4194760874352437266?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4194760874352437266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4194760874352437266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4194760874352437266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4194760874352437266'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/gretl-on-scientific-linux.html' title='Gretl on Scientific Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6538277533085926294</id><published>2011-09-02T06:40:00.000-07:00</published><updated>2011-09-26T07:47:09.325-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Rmpi on Scientific Linux 6.1</title><content type='html'>&lt;b&gt;Update:&lt;/b&gt; No need to read my frustrated rant. Here's what I did to get Rmpi working on Scientific Linux 6.1 64-bit. It should also work on Red Hat Enterprise Linux 6.1 64-bit and CentOS 6.1 64-bit, though I've not tried, and would appreciate feedback if it doesn't work:&lt;br /&gt;&lt;br /&gt;1. yum install openmpi openmpi-devel&lt;br /&gt;2. If you don't have a working R installation: yum install R-core R-devel&lt;br /&gt;3. From within R: install.packages("Rmpi",configure.args=c("--with-Rmpi-include=/usr/include/openmpi-x86_64","--with-Rmpi-libpath=/usr/lib64/openmpi/lib/","--with-Rmpi-type=OPENMPI"))&lt;br /&gt;4. As root (at the command line, not in R) open /etc/ld.so.conf, add /usr/lib64/openmpi/lib, then run ldconfig.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-- Actual post plus rant follows -- &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Continuing on with my Scientific Linux trial, when I've got a few minutes to spare, I tried to install Rmpi. Oy. I guess I've been spoiled by Slackware (likely the best strategy is just to stick with Slackware 13.1).&lt;br /&gt;&lt;br /&gt;First, I installed openmpi and openmpi-devel.&lt;br /&gt;&lt;br /&gt;Then I tried installing Rmpi but got stupid errors about mpi.h not found. Went to Google. Wasted time. Went to Google some more. Wasted some more time. Should not be this dang difficult.&lt;br /&gt;&lt;br /&gt;Finally, based on this:&lt;br /&gt;http://www.cybaea.net/Blogs/Data/R-tips-Installing-Rmpi-on-Fedora-Linux.html&lt;br /&gt;I was able to construct the magic incantation:&lt;br /&gt;&lt;br /&gt;install.packages("Rmpi",configure.args=c("--with-Rmpi-include=/usr/include/openmpi-x86_64","--with-Rmpi-libpath=/usr/lib64/openmpi/lib/","--with-Rmpi-type=OPENMPI"))&lt;br /&gt;&lt;br /&gt;Now hopefully it works. I was going to record here all the stuff that needs to be done to get a working SL 6.1 installation that can be used on other machines. It's turning out to be more work than I anticipated. Can it really be the case that nobody uses Rmpi on RHEL-based distros? Or am I just missing the easy way to do this? I thought Rocks Cluster was based on CentOS. Given the popularity of R, somebody must have done this already.&lt;br /&gt;&lt;br /&gt;Edit: I also had to add /usr/lib64/openmpi/lib to /etc/ld.so.conf, then run ldconfig, all as root.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6538277533085926294?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6538277533085926294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6538277533085926294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6538277533085926294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6538277533085926294'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/rmpi-on-scientific-linux-61.html' title='Rmpi on Scientific Linux 6.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3183348038018532215</id><published>2011-09-01T15:07:00.000-07:00</published><updated>2011-09-01T15:07:32.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>gvim on Scientific Linux</title><content type='html'>Almost got the software I need. gvim is not gvim or vim-gtk, on Scientific Linux it is given in package vim-X11.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3183348038018532215?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3183348038018532215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3183348038018532215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3183348038018532215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3183348038018532215'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/gvim-on-scientific-linux.html' title='gvim on Scientific Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-351144726815065723</id><published>2011-09-01T14:56:00.000-07:00</published><updated>2011-09-26T07:55:12.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>RKWard on Scientific Linux</title><content type='html'>&lt;b&gt;Update:&lt;/b&gt; It's probably a good idea to put the summary up front. I even confused myself when installing on another computer this weekend.&lt;br /&gt;&lt;br /&gt;Summary:&lt;br /&gt;1. Install any of the above listed build dependencies that are not on your system.&lt;br /&gt;2. Download the latest rkward source.&lt;br /&gt;3. Unpack the source, enter the directory.&lt;br /&gt;4. mkdir build; cd build&lt;br /&gt;5. cmake .. -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix`&lt;br /&gt;6. make -j 4 (or however many processors you've got)&lt;br /&gt;7. make install (as root)&lt;br /&gt;8. Start RKWard. Click on &amp;gt;&amp;gt; Settings &amp;gt;&amp;gt; Configure RKWard&lt;br /&gt;9. Add /usr/share/kde4/apps/rkward/all.pluginmap under the section titled "Select .pluginmap file(s)"&lt;br /&gt;&lt;br /&gt;{The last step may not be needed. You'll know if it is when you open RKWard.}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;-- Actual post follows -- &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As with LyX 2.0, I'm going to have to bite the bullet and build RKWard myself. A Google search for "building rkward" leads me to koji.&lt;br /&gt;&lt;br /&gt;The requirements are listed as (omitting rmplibs):&lt;br /&gt;&lt;table class="nested"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;R-devel &amp;gt;= 2.13.1&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;cmake&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;desktop-file-utils&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;gettext&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;giflib-devel&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;kdelibs-devel&lt;/td&gt;          &lt;/tr&gt;&lt;tr&gt;            &lt;td&gt;pcre-devel&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;I'm missing giflib-devel and kdelibs-devel on my system, so I install them. I download the rkward source and unpack it.&lt;br /&gt;&lt;br /&gt;Following the instructions on this page:&lt;br /&gt;http://sourceforge.net/apps/mediawiki/rkward/index.php?title=Building_RKWard_From_Source&lt;br /&gt;I do the following.&lt;br /&gt;&lt;br /&gt;mkdir build; cd build&lt;br /&gt;cmake ..&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {I'm not specifying any options}&lt;br /&gt;make -j 4&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;It works (there's an entry for it under "Education") but not correctly. I get a message "Plugins are needed: you may manage these through "Settings-&amp;gt;Configure RKWard"." Unfortunately no such option exists.&lt;br /&gt;&lt;br /&gt;I look at the documentation again. I try&lt;br /&gt;cmake .. -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix`&lt;br /&gt;make -j 4&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;The plugins message still comes up, but now I've got a full menu and the ability to open files. I open &amp;gt;&amp;gt; Settings &amp;gt;&amp;gt; Configure RKWard and the menu is on Plugins. I added /usr/share/kde4/apps/rkward/all.pluginmap.&lt;br /&gt;&lt;br /&gt;Now when I open RKWard there are no more error messages and everything works properly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-351144726815065723?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/351144726815065723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=351144726815065723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/351144726815065723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/351144726815065723'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/rkward-on-scientific-linux.html' title='RKWard on Scientific Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7251819001270139954</id><published>2011-09-01T14:22:00.000-07:00</published><updated>2011-09-01T14:22:01.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>LyX 2.0 on Scientific Linux</title><content type='html'>I'm giving Scientific Linux a try. While it's a nice looking distro, I'm disappointed that rkward is not available at all, and LyX is still stuck in the 1.6.x series. I'm trying to build LyX 2.0. This is my experience - for my own reference, but if it helps someone else, even better. Google did not provide directions.&lt;br /&gt;&lt;br /&gt;yum-builddep lyx doesn't work. Even though I've got the source repos enabled, and used yumdownloader to download the source rpm, I get the message&lt;br /&gt;&lt;br /&gt;No source RPM found for lyx-1.6.10-1.el6.x86_64&lt;br /&gt;&lt;br /&gt;It would be nice to have (useful) documentation. I am new to the RHEL-based distros so I have no idea what I'm doing.&lt;br /&gt;&lt;br /&gt;My initial ./configure says&lt;br /&gt;&lt;br /&gt;** moc 4 binary not found !&lt;br /&gt;&lt;br /&gt;** uic 4 binary not found !&lt;br /&gt;&lt;br /&gt;** qt 4 library not found !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm installing qt-devel. I don't see a collection for KDE or Qt development in the package manager GUI, so that's my best guess.&lt;br /&gt;&lt;br /&gt;A search for moc turns up automoc, "Automatic moc for Qt 4". Hopefully that's it.&lt;br /&gt;&lt;br /&gt;The top result in a search for uic - which I've never heard of before - is basket. I'm pretty sure that's not what I need. Scrolling through the entire list does not bring up anything helpful. A Google search for "lyx uic" turns up nothing helpful. "qt uic" gives background about the "User Interface Compiler" but not anything that solves my problem. "rhel uic" indicates PyQt4 might do the trick.That's what I try. Doesn't seem like the optimal choice, but if it works, I'll take it.&lt;br /&gt;&lt;br /&gt;"Configuration of LyX was successful." Awesome!&lt;br /&gt;&lt;br /&gt;make - completes with no errors&lt;br /&gt;make install - completes with no errors&lt;br /&gt;&lt;br /&gt;I've got a menu item for LyX. Open it up, it's 2.0, everything works.&lt;br /&gt;&lt;br /&gt;Summary (can probably improve on the choice of build dependencies, but I have no time or interest in digging into it further - what I've got works)&lt;br /&gt;1. Install qt-devel PyQt4 automoc&lt;br /&gt;2. Download the latest LyX source.&lt;br /&gt;3. Unpack the source and enter the new directory.&lt;br /&gt;4. ./configure&lt;br /&gt;5. make&lt;br /&gt;6. make install (as root)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7251819001270139954?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7251819001270139954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7251819001270139954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7251819001270139954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7251819001270139954'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/09/lyx-20-on-scientific-linux.html' title='LyX 2.0 on Scientific Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5763293831364409064</id><published>2011-08-29T07:38:00.000-07:00</published><updated>2011-08-29T07:47:20.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Slackware'/><title type='text'>Time to go back to Windows?</title><content type='html'>I've recently become depressed about the state of Linux. I gave up on Windows back in the days of XP. The security problems were just too great. No matter how many PhD's in computer science you've got, and no matter how many hours in the day, the only way to secure a computer running Windows XP is to keep it off the internet and remove all floppies, USB ports, and any other possible channel of communication with the outside world. That's not practical, so Windows XP is not practical. There are also other things I didn't like about XP, but they aren't really very important compared with the security issues.&lt;br /&gt;&lt;br /&gt;Then along came Vista and I was very happy to be using Linux. Vista isn't even good enough to be called a pile of crap.&lt;br /&gt;&lt;br /&gt;Windows 7 is not nearly as bad as Vista. It's actually possible to do something with it. No matter what anyone tells you, it is more secure than XP. Is it good enough? I don't know, but the competition from Linux is doing a good job of making me want to give it a try.&lt;br /&gt;&lt;br /&gt;I've been a Slackware user for several years. I could go into all the details about why I settled on Slackware (and was happy with my computing experience for the first time in my life) but unfortunately I've decided to give it up for now.&lt;br /&gt;&lt;br /&gt;The problem is not actually Slackware-specific. PV puts out a distribution of astonishing quality every eight months or so. A good strategy for Microsoft would be to put $100 million on a truck and make PV an offer he can't refuse to manage Windows development.&lt;br /&gt;&lt;br /&gt;The problem is what goes on top of Slackware. In the past I've relied on other projects to supply apps and GNOME. The last remaining project to provide GNOME for Slackware 13.37&amp;nbsp;&lt;a href="http://lmf-ramblings.blogspot.com/2011/08/is-gnome-on-slackware-dead.html"&gt;appears to be dead&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I could give up GNOME. I've tried GNOME 3 on other distros and it looks like a joke, nothing but change to keep the current GNOME devs interested. For instance, being able to click on a single button and have access to all applications is a necessity for nearly all computer users. If they're going to take that away, with no suitable alternative, there is no hope. I'm happy XFCE has matured so well in recent years.&lt;br /&gt;&lt;br /&gt;Unfortunately, that's not where my problems end. The slacky.eu repo has a lot less of what I need than it used to. The backup has been to build my own packages with slackbuilds from slackbuilds.org. They've started dropping a lot of the packages I use. Heck, for a while R was even dropped, and that's a bad sign given the size of the user base. I realize that these projects are not obligated to provide me with packages. I realize I can do the work myself. That doesn't change the fact that Slackware now requires too much work on my end for it to meet my needs.&lt;br /&gt;&lt;br /&gt;As for other distributions, I require (a) a low-cost way to get all the apps I use, (b) a large enough user base to have answers when something goes wrong, and (c) an acceptable number of bugs. As I look at the top distros on distrowatch.com (no sense going down the list very far, because after about number 20 most of the distros are not popular) I don't see much that impresses me. Here is what I see when I look at the top distros on distrowatch:&lt;br /&gt;&lt;br /&gt;1. Ubuntu:&amp;nbsp;Weird&amp;nbsp;design decisions, like moving buttons to the left and the Unity desktop. Some strange bugs introduced for who knows what reason, probably just sloppiness. A lot of good things there, but not my cup of tea. I always run into trouble with some critical packages. I've ruled out Ubuntu. I have no interest in being part of a constant experiment.&lt;br /&gt;&lt;br /&gt;2. Mint: What I'm&amp;nbsp;currently&amp;nbsp;using. It's based on Ubuntu and I anticipate running into problems with packages. I do like the extras provided by the developers.&lt;br /&gt;&lt;br /&gt;3. Fedora: Has a habit of breaking. I've not been able to use a Fedora installation on a work machine for more than a few months.&lt;br /&gt;&lt;br /&gt;4. Debian: Old, old software by the time of a new release. Not always possible to even compile the latest versions of software due to the age of the underlying libraries. I have trouble with hardware every time I install Debian. In my latest experiment I have sound mysteriously stopping and requiring that I log out and log in. I can be watching a&amp;nbsp;YouTube&amp;nbsp;video and all of a sudden the sound is gone.&lt;br /&gt;&lt;br /&gt;5. opensuse: A resource hog from the land of a million bugs. I'm not open to trying it again after all the bugs I encountered in the latest release.&lt;br /&gt;&lt;br /&gt;6. Arch: I love some aspects of Arch, but there are two things keeping me away. I'm just not comfortable running a rolling release distro, where everything gets updated, and I might find out about a bug when I'm preparing for a meeting in twenty minutes. It has worked pretty well in the past, but I am always stressed out because of the constant updates.&lt;br /&gt;&lt;br /&gt;The other problem is that there is too much testosterone in the community. Some of what I see on the forums is a little too much like what I saw in the all-male dorm I lived in years ago when I started college. Sure, that is part of the internet, but what is different with Arch is that most of it starts with the developers, who are the ones running the show. And make no mistake, the developers are running the show. There is a hierarchy in the Arch community, with the developers at the top, able to say anything they want to any "mere user" any time they are in the mood. One developer will rip into a "mere user" and then half a dozen others will jump in to offer their support.&lt;br /&gt;&lt;br /&gt;As with Ubuntu, it's just not my cup of tea.&lt;br /&gt;&lt;br /&gt;7. PCLinuxOS: At least when I tried it, the repos were not as complete as I needed them to be. Compiling software on PCLinuxOS means you figure out the dependencies and configuration options and all that. Some of what took place in the forums was inexcusable.&lt;br /&gt;&lt;br /&gt;8. CentOS: Very stable but I need some of my apps to come from this century. I might give Scientific Linux a try.&lt;br /&gt;&lt;br /&gt;9. Puppy: Great distro, but not intended for the things I want to do.&lt;br /&gt;&lt;br /&gt;10. Mandriva: Possibly. I don't know anything about the current company.&lt;br /&gt;&lt;br /&gt;11. Slackware: Problems stated already.&lt;br /&gt;&lt;br /&gt;12. Scientific: I might give it a try. It will depend on how easily I can get the apps I need. I know there is EPEL.&lt;br /&gt;&lt;br /&gt;13. Sabayon: Tried it. There were (very easily fixed) problems with some of the packages. I reported the problems, and the response from two devs was shocking. This is admittedly a small sample, but if they have any devs like that, I can't trust the distro. I'm used to Slackware. It does look good otherwise.&lt;br /&gt;&lt;br /&gt;14. Chakra: I'm not into KDE. I don't understand why they gave up Arch compatibility. I am open to trying it, but am skeptical.&lt;br /&gt;&lt;br /&gt;Another general problem is that suspend used to work well, but gives me trouble with any recent distro. I need it to work more than two times out of three. When you're running a laptop, suspend is something you can't do without.&lt;br /&gt;&lt;br /&gt;So, to summarize, I've got to give up GNOME and Slackware, I can't suspend any distro properly, and I don't really have a good alternative distro to turn to. Windows definitely has its problems. The question is whether the recent regressions of Linux make it worse than Windows. A Mac is not a possibility because I'd have to buy new hardware. I'll seriously consider the Mac when I make my next purchase.&lt;br /&gt;&lt;br /&gt;This is very depressing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5763293831364409064?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5763293831364409064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5763293831364409064' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5763293831364409064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5763293831364409064'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/time-to-go-back-to-windows.html' title='Time to go back to Windows?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8119218892691128745</id><published>2011-08-24T10:06:00.000-07:00</published><updated>2011-08-24T10:06:19.201-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>CUDA 4.0 on Ubuntu 11.04</title><content type='html'>Or more accurately, Linux Mint XFCE.&lt;br /&gt;&lt;br /&gt;There are various guides available to help. I did what they said, but when I tried to make the examples, I got a -lcuda not found error.&lt;br /&gt;&lt;br /&gt;In the end I created a symbolic link and that fixed it:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;sudo ln -s /usr/lib/nvidia-current/libcuda.so /usr/local/cuda/lib64/libcuda.so&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8119218892691128745?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8119218892691128745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8119218892691128745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8119218892691128745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8119218892691128745'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/cuda-40-on-ubuntu-1104.html' title='CUDA 4.0 on Ubuntu 11.04'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2275489988050562601</id><published>2011-08-18T12:04:00.000-07:00</published><updated>2011-08-18T14:37:34.643-07:00</updated><title type='text'>Talk about proving my point...</title><content type='html'>Apparently my long-winded post (you can find it below if you're really interested) made it to Reddit (which I never read, by the way).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It sure brought out the Common Lisp fanbois.&amp;nbsp;Read the comments to see exactly why you should avoid Common Lisp if you want to learn Lisp. "Common Lisp is just perfect. And you're an idiot if you don't see that. I don't even have to elaborate." sums it up pretty well. Friendly as a rattlesnake pit.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Common Lisp turns off 99.9% of potential Lispers. All six current Common Lisp users need to realize that. If someone wants to learn Lisp, newLISP offers what potential Lispers want: low startup costs, good documentation, and none of the unnecessary frustration. It's certainly not like I'm the first person to say these things about Common Lisp.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2275489988050562601?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2275489988050562601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2275489988050562601' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2275489988050562601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2275489988050562601'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/talk-about-proving-my-point.html' title='Talk about proving my point...'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4882857401172027591</id><published>2011-08-17T08:20:00.000-07:00</published><updated>2011-08-17T08:23:19.855-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GNOME'/><category scheme='http://www.blogger.com/atom/ns#' term='Slackware'/><title type='text'>Is GNOME on Slackware dead?</title><content type='html'>It's been quite a while since Slackware 13.37 was released. As far as I can tell, there is only one active project to bring GNOME to Slackware, http://gnomeslackbuild.org/&lt;br /&gt;&lt;br /&gt;The last announcement on that website was four months ago. Looking at the development pages, there doesn't seem to be much activity.&lt;br /&gt;&lt;br /&gt;It might be possible to install the existing files on Slackware 13.37, but with no official documentation, and a statement that it can be used with -current, that would be a dumb thing to do.&lt;br /&gt;&lt;br /&gt;Maybe the new GNOME is just too much work to put together. I don't know what is going on, but it looks like GNOME on Slackware is coming to the end of the road.&lt;br /&gt;&lt;br /&gt;With a little customization, I have grown comfortable with the look and functionality of XFCE. We had some good days together, GNOME, but I'm not giving up Slackware just to get my desktop environment of choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4882857401172027591?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4882857401172027591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4882857401172027591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4882857401172027591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4882857401172027591'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/is-gnome-on-slackware-dead.html' title='Is GNOME on Slackware dead?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7591964192946860899</id><published>2011-08-14T03:55:00.000-07:00</published><updated>2011-08-14T03:55:45.132-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Fonts for KDE/Qt apps in Debian Squeeze</title><content type='html'>I'm using Debian Squeeze with the GNOME desktop. The fonts on KDE and Qt applications look pretty bad.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The solution is to install package "systemsettings". No need to worry - it should not bring any dependencies with it if you've already installed your KDE applications.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Running systemsettings (it's in the menu under &amp;gt; System &amp;gt; Preferences &amp;gt; System Settings) you can click on &amp;gt; Appearance &amp;gt; Fonts. I've found that it works best if you have the "Use anti-aliasing" and "Force fonts DPI" settings the same both in GNOME and KDE, or I get some rather annoying inconsistencies.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7591964192946860899?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7591964192946860899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7591964192946860899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7591964192946860899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7591964192946860899'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/fonts-for-kdeqt-apps-in-debian-squeeze.html' title='Fonts for KDE/Qt apps in Debian Squeeze'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2200165528374863768</id><published>2011-08-12T14:55:00.000-07:00</published><updated>2011-08-12T14:55:24.901-07:00</updated><title type='text'>I am not afraid to admit that I've used Lisp for real work</title><content type='html'>[Really long post, but I don't see how to break it into smaller pieces. I wrote it a few weeks ago. I didn't want to post it at that time because I wrote some negative things about certain Lisp implementations. I took out a few of the negative comments, but most of them are still there. I stand by my opinions. You're free to have your own opinions, just like me, but I don't publish comments with swear words. I also don't publish comments that are uncivil or completely uninformative.] &lt;br /&gt;&lt;br /&gt;As is the case with most programmers, I'd heard of Lisp, but didn't take it seriously because it was always presented as a dead language. Many of those comments came from former Lisp users. Lisp was just not up to the standards of "modern" languages, like Java, C++, Python, Ruby, (add your favorite language). Lots of nostalgia, but they'd made peace with the death of Lisp the way you make peace with the death of a pet dog when you're in middle school.&lt;br /&gt;&lt;br /&gt;As is also the case for many programmers, I came upon the writings of Paul Graham and decided that Lisp might be worthy of further exploration. Then I read that the only app anyone admits having written in Lisp was later rewritten in Python. (That's only a slight exaggeration.)&lt;br /&gt;&lt;br /&gt;It's hard to come upon examples of the use of Lisp the way you can find examples of Ruby, Python, or even Tcl. &lt;br /&gt;&lt;br /&gt;Let me proudly say that I'm not afraid to write programs in Lisp. My situation is different from, say, a web developer for a Fortune 500 corporation. I do numerical programming. I get paid to do simulations, statistical analysis, and a variety of other types of numerical analysis.&lt;br /&gt;&lt;br /&gt;I have one of the best jobs in the world. I am free to choose my programming language. It makes no difference if I'm the only programmer in the world using a particular language. Most of the programs I write are less than a few thousand lines, and most of the time, they are almost independent of all the other programs I write. In other words, what matters is that the program I write for a specific task does its job for that task and that task alone. Yep, I do scripting.&lt;br /&gt;&lt;br /&gt;Which languages do I use? If you have read other posts on this blog (making you part of a very small group) you know R is what I use most often. Yet I love Lisp and plan to do a lot more Lisp programming going forward. I would not be surprised if five years from now Lisp was my main programming language.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lisp is a great language and you too can trust it if you write numerical programs of 5000 lines or less.&lt;/b&gt; You can probably trust it for other tasks as well but I don't have such an experience with Lisp. Please tell the world that Lisp is a great language for numerical/statistical analysis. &lt;b&gt;Those who dismiss it are wrong. There's absolutely no reason to not give it a trial.&lt;/b&gt; See what libraries are available. Look at some code written by others. It never hurts to learn another language, and if you have used only Matlab, you will learn a hell of a lot about programming even if the only thing you do is read &lt;i&gt;The Scheme Programming Language&lt;/i&gt; without writing a single line of Lisp code. You have a lot to gain and nothing to lose. I guarantee it.*&lt;br /&gt;&lt;br /&gt;Now that I've given a little background, I'd like to discuss the question of &lt;i&gt;which&lt;/i&gt; Lisp to use. There are a number of alternatives in the Lisp world. The choice can be confusing to beginners, which would have included me not that long ago. I will briefly discuss four of the available options: Common Lisp, Scheme, Clojure, and newLISP.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Common Lisp:&lt;/i&gt; This one is often described as the "industrial strength" Lisp. In many cases, someone will just say "Lisp" when in fact they are referring to Common Lisp. My assessment of Common Lisp is that it's what you'd have if you start with Java, take out most of the good stuff, add on some Lisp features in the clumsiest possible way, and leave changes to a political process that ensures change will never happen.&lt;br /&gt;&lt;br /&gt;Common Lisp is sort of the Oldsmobile of programming languages. It was good relative to the alternatives in the mid-80's, but then it stagnated, leading to its downfall.&lt;br /&gt;&lt;br /&gt;There are some advantages. It's the only Lisp that's ever been popular in the enterprise. There's a lot of documentation available. There are a lot of libraries available. Some of the compilers have the potential to produce really fast code. There are, possibly surprisingly to the outsider, a lot of programmers who have used Common Lisp. That helps to the extent that you need to interact with other Lisp users, say to ask questions.&lt;br /&gt;&lt;br /&gt;The community is a serious drawback. While most of the community is great, they haven't figured out how to control a vocal few. &lt;br /&gt;&lt;br /&gt;My opinion: Stay away from Common Lisp as a beginner. The user community is stuck in the disco era. You can always try it later if you want. If you try only Common Lisp you will agree with those who say Lisp is not a suitable alternative to today's more popular languages. It had its chance to be popular, it failed spectacularly, and it failed spectacularly for a reason. If you have a beard and 15 years of Unix experience, you will probably feel right at home, so my advice doesn't apply to you.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Scheme:&lt;/i&gt; My first use of Scheme to any degree was going through SICP. Absolutely awesome experience.&lt;br /&gt;&lt;br /&gt;I've written elsewhere about the big problem with Scheme. It's elegant, but the core language is too small to do anything useful, and the extensions are of exceptionally low quality, with some of the worst documentation of any product in the western hemisphere.&lt;br /&gt;&lt;br /&gt;Scheme is an excellent language for teaching programming. The Scheme developers do not have an incentive to put together high-quality, properly documented language extensions. This is what you will encounter if you read the documentation on a Scheme extension:&lt;br /&gt;&lt;br /&gt;foo &lt;i&gt;[option]&lt;/i&gt; name code&lt;br /&gt;&lt;br /&gt;foo transforms name into code. You can set options as desired.&lt;br /&gt;&lt;br /&gt; Section 5 of the Scheme specification prohibits the use of informative examples when documenting functions. The 80th time I had to look at source code to figure out what an extension did was when I gave up on Scheme.&lt;br /&gt;&lt;br /&gt;The developers of Scheme extensions are happy when they can say, "It is possible to do X" for any choice of X. To be useful, they'd need to be able to say, "It is possible to do X in a reasonable amount of time with a reasonable amount of effort." You sure as heck don't want to be relying on a piece of code and then find out that it's not doing what you thought it was, and have no idea how to fix the problem. That's when you start thinking about the reaction of your family if you get fired.&lt;br /&gt;&lt;br /&gt;And no, Racket is not different in that regard, the extensions are a complete mess and the examples, if they exist at all, are unlikely to help much. This is not a criticism of Scheme or Racket. They are intended to be used as tools for teaching and research. I'm fine with that. There are other choices available. If you are learning Lisp do not get frustrated that Scheme/Racket can't do what you need. That does not mean Lisp is a bad choice of language.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Clojure:&lt;/i&gt; This is one awesome language. It's a modern Lisp. Not only is the language awesome, but the creator, Rich Hickey, has a lot of interesting things to say. You can tell that he has been in the trenches for a long time doing real programming, yet he is excited to incorporate ideas from the academic community.&lt;br /&gt;&lt;br /&gt;Oh, Clojure also runs on the JVM, meaning you have access to everything provided by the king of enterprise programming languages. There are several good Clojure books out already, and more are on the way. There is serious upside both in terms of the language and the prospects for a career writing Lisp programs.&lt;br /&gt;&lt;br /&gt;There are at least two downsides. The first is that using Clojure almost guarantees you will be bringing in some Java. That means many of the bad things about Java apply to Clojure as well. With time, Clojure is likely to develop its own libraries, which will minimize the Java drawbacks. The second downside is that the development tools are not mature, as you should expect with such a young language.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;newLISP:&lt;/i&gt; Ultimately, I have come to like newLISP the best. newLISP is unmatched in the Lisp world in terms of documentation. After dealing with Common Lisp and Scheme documentation, I was shocked at the quality and quantity of examples that come with newLISP. You can learn to do everything the language does with little difficulty.&lt;br /&gt;&lt;br /&gt; Another attractive feature of newLISP is that Common Lisp programmers criticize it for failing to meet their definition of being a "real" Lisp. That's a good sign, because Common Lisp has failed, so if you want to put together a language programmers actually want to use you better do some things differently from Common Lisp. newLISP lets you get work done quickly and correctly, and that's the only reason I've ever used a programing language.&lt;br /&gt;&lt;br /&gt;As a scripting language, newLISP is not a competitor to either Common Lisp or Clojure. It is not a speed demon, but if you're using a scripting language, you obviously should not expect the speed of C or Java. It does quite well in terms of speed relative to other scripting languages I've used including Tcl and Python.&lt;br /&gt;&lt;br /&gt;For most Linux distributions you will have to compile it yourself. However, that is easy (almost trivial - just follow the directions) and extremely fast (measured in seconds rather than minutes).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The bottom line:&lt;/i&gt; If you want to get started with Lisp for real world projects and have programming experience, install newLISP and try it out. The documentation on the website will definitely help you to get going quickly.&lt;br /&gt;&lt;br /&gt;If you want to learn to program, install Racket, and use drracket with SICP. Any Scheme will also do.&lt;br /&gt;&lt;br /&gt;If you want something suitable for the enterprise, get one of the Clojure books and give that a try.&lt;br /&gt;&lt;br /&gt;Although I don't have any recommend uses for Common Lisp, there are many resources available if you want to go that route. CLISP is a good choice, but keep in mind that it does not come with a compiler. I will add that &lt;i&gt;Land of Lisp&lt;/i&gt; is a very, very good book (and recent to boot) that will be one of the best purchases you ever make.&lt;br /&gt;&lt;br /&gt;The decision of which Lisp is not as big as it might seem. You can carry a lot of your knowledge from one to the other. The best strategy may well be to study all of them. Whichever you choose you will be happy with your choice - even if that choice turns out to be Common Lisp. &lt;br /&gt;&lt;br /&gt;*I'm an anonymous blogger, so don't expect my guarantee to mean much. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2200165528374863768?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2200165528374863768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2200165528374863768' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2200165528374863768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2200165528374863768'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/i-am-not-afraid-to-admit-that-ive-used.html' title='I am not afraid to admit that I&apos;ve used Lisp for real work'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3542708717755100783</id><published>2011-08-12T13:56:00.000-07:00</published><updated>2011-08-14T03:56:05.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Building LyX 2.0 on Debian Squeeze</title><content type='html'>I was unable to find a package for LyX 2.0 on Debian Squeeze. I decided to compile one for myself based on the LyX wiki.&lt;br /&gt;&lt;br /&gt;The instructions seem a bit out of date. apt-get build-dep lyx failed. Based on the output of ./configure, I installed&lt;br /&gt;&lt;br /&gt;zlib1g-dev and libqt4-dev&lt;br /&gt;&lt;br /&gt;but ./configure still failed. I had no idea what to do. An internet search revealed the need to install&lt;br /&gt;&lt;br /&gt;pkg-config&lt;br /&gt;&lt;br /&gt;as well. I did that and ./configure was satisfied. After I figured out the problem, I read the INSTALL file, and it was in there.&lt;br /&gt;&lt;br /&gt;They might want to update the LyX Wiki which makes no mention of it. That's how it goes - and basically, it was my fault for not reading the source documentation. I guess I've been spoiled by the way SlackBuilds do all the work for you.&lt;br /&gt;&lt;br /&gt;I then did make and sudo make install. The compile went fast (relative to the slow desktop I used the last time I compiled for Debian - it took about 10 minutes).&lt;br /&gt;&lt;br /&gt;Here is a summary of the steps:&lt;br /&gt;1. Download the latest lyx source and extract it.&lt;br /&gt;2. apt-get install zlib1g-dev libqt4-dev pkg-config&lt;br /&gt;3. cd to the lyx source directory.&lt;br /&gt;4. ./configure&lt;br /&gt;5. make&lt;br /&gt;6. make install (as root)&lt;br /&gt;&lt;br /&gt;Something like slackbuilds.org for Debian stable would be pretty handy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3542708717755100783?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3542708717755100783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3542708717755100783' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3542708717755100783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3542708717755100783'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/building-lyx-20-on-debian-squeeze.html' title='Building LyX 2.0 on Debian Squeeze'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7734870091477533080</id><published>2011-08-11T13:11:00.000-07:00</published><updated>2011-08-11T13:11:32.876-07:00</updated><title type='text'>Today's most worthless blog post</title><content type='html'>Sorry, can't resist. The top 5 alternatives to Ubuntu:&lt;br /&gt;&lt;br /&gt;http://news.softpedia.com/news/Top-5-Ubuntu-Alternatives-215953.shtml&lt;br /&gt;&lt;br /&gt;This list is intelligent enough to have been put together by a bipartisan commission.&lt;br /&gt;&lt;br /&gt;Seriously, four of the five are Ubuntu derivatives. That might go down as the laziest bit of click-baiting I've ever seen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7734870091477533080?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7734870091477533080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7734870091477533080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7734870091477533080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7734870091477533080'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/todays-most-worthless-blog-post.html' title='Today&apos;s most worthless blog post'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1823632826704760408</id><published>2011-08-09T06:50:00.000-07:00</published><updated>2011-08-14T03:56:24.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>OpenSUSE 11.4 with a static IP</title><content type='html'>Decided to give OpenSUSE 11.4 a try. My past experiences with this distribution have always been awful, so I don't expect much.&lt;br /&gt;&lt;br /&gt;Extreme bad design #1 was encountered immediately. I wanted to set a static IP address. I'm using the GNOME desktop (I hate KDE) and was surprised that there was no network manager applet in the tray. I couldn't even find a way to get it in there.&lt;br /&gt;&lt;br /&gt;Oh well, it's not necessary for setting up the static IP, though I'll have trouble if I want to use a wireless connection. So I went into the System menu, then Hardware, then Network Connections. I set up the static IP address as on any other distro.&lt;br /&gt;&lt;br /&gt;Guess what. The IP address is not correct. I restarted networking at the command line, and it was still using DHCP. That's odd. Maybe I messed something up. Nope. All the information was the way it is supposed to be, and the way it works on any other distro.&lt;br /&gt;&lt;br /&gt;After searching around a bit on the internet, I opened YaST (gotta love that spelling - yet another design disaster!) I was able to navigate my way through multiple windows and tabs (why, I have no idea) to set up the static IP. That worked.&lt;br /&gt;&lt;br /&gt;A bit of advice. If they don't want you to set static IP addresses through the Network Connections dialog, &lt;b&gt;they shouldn't fricking make the user think he can&lt;/b&gt;!!&lt;br /&gt;&lt;br /&gt;Another bit of advice. Setting up a static IP address is a very common operation. Make it easy to do so. Toss that YaST POS in the garbage.&lt;br /&gt;&lt;br /&gt;A third piece of advice. CaPITAliZe JusT tHE firST LETTeR of words iN THe MenUS. It LooKS StuPID TO RANdoMLY capITALIZE LETterS. I know the "unusual" capitalization appeals to the Star Trek crowd, but most computer users don't speak Klingon, and it sure isn't going to do anything for adoption in the enterprise.&lt;br /&gt;&lt;br /&gt;Welcome to amateur hour.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1823632826704760408?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1823632826704760408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1823632826704760408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1823632826704760408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1823632826704760408'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/08/opensuse-114-with-static-ip.html' title='OpenSUSE 11.4 with a static IP'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7689980446278710948</id><published>2011-07-19T08:28:00.000-07:00</published><updated>2011-07-19T08:37:14.302-07:00</updated><title type='text'>No, Racket is not different</title><content type='html'>My Racket trial is over. There's just no way Racket can be considered to be a real programming language, at least for numerical programming.&lt;br /&gt;&lt;br /&gt;Here are a few things I think they should consider (assuming they care about adoption, which is likely not their goal, but as nobody reads this blog anyway, it doesn't really make any difference does it):&lt;br /&gt;&lt;br /&gt;1. A fundamental issue (the most fundamental for me) is getting data into the program. Don't start the section of the manual on Input and Output with a discussion of "Varieties of Ports". Just show some examples of how to import data from a .csv file.&lt;br /&gt;&lt;br /&gt;2. Racket doesn't even have the ability to import from a .csv file. That's left to the extension on PLaneT. I'll just say that both the documentation and the usage "could use some work" and leave it at that. Compare what's in there with reading a .csv file into R or Matlab or pretty much any language that's used for data analysis/numerical work and you will see what is wrong. The author of the package even tosses in some comments about how .csv is for use with "crusty legacy applications". Yes, shiny web applications are the only "real" programs, aren't they?&lt;br /&gt;&lt;br /&gt;3. What a nightmare trying to navigate the available packages on PLaneT. What does a given package do? How do I choose among the available packages? Is there some underlying organization to the way packages are listed?&lt;br /&gt;&lt;br /&gt;4. It looks like (again, just a guess, based on the mess that is PLaneT) dbi.plt is the main way to attach to a database. Maybe I can avoid the CSV train wreck by using a database. Under "Docs" is the interesting statement that beginners love to see: [None].&lt;br /&gt;&lt;br /&gt;Looking around the page, I noticed a link to "package home page". I clicked the link and it took me to a blog post. A rather unusual way to document something so critical as the database interface, and hardly inspiring confidence, but okay, let's check it out. A grand total of one example. Is it worth my time to go any further with Racket?&lt;br /&gt;&lt;br /&gt;5. Let's assume I do manage to get my data into Racket. What linear algebra is available? Not much. Certainly not enough to do anything serious. What data analysis tools are available? Next to nothing. So...I'd have to write everything from scratch if I were to use Racket? That's not going to happen.&lt;br /&gt;&lt;br /&gt;6. One way around the lack of tools would be to put together an Rserve client. I'm not going to do it, but it would immediately improve the situation. I posted earlier about how easy that is with Clojure.&lt;br /&gt;&lt;br /&gt;7. Another alternative would be to follow the lead of Pure, which I noticed has embedded Octave. &lt;i&gt;That&lt;/i&gt; is impressive.&lt;br /&gt;&lt;br /&gt;8. Scilab also has a C++ API that could be connected with Racket. Scilab is quite an impressive application. Scilab comes with a Java interface that is available to Clojure.&lt;br /&gt;&lt;br /&gt;I could cite other reasons to avoid Racket, but these are sufficient.&lt;br /&gt;&lt;br /&gt;I want to make it clear that I'm not trying to be critical of Racket. Racket is a wonderful teaching tool. My goal is to provide some reasons why it is not suitable for actual work by someone needing data/numerical analysis. Racket is very, very good as a teaching tool.&lt;br /&gt;&lt;br /&gt;Just don't be confused that it is in any way comparable with Clojure for real-world programming tasks. There's a reason Clojure is popular and Racket is not. Sure it's a pain in the ass to get Clojure set up, but it will do what you need it to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7689980446278710948?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7689980446278710948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7689980446278710948' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7689980446278710948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7689980446278710948'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/07/no-racket-is-not-different.html' title='No, Racket is not different'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1604540057573073391</id><published>2011-07-18T13:07:00.000-07:00</published><updated>2011-07-18T13:08:09.193-07:00</updated><title type='text'>Oh, and one more thing...</title><content type='html'>Now I remember why I didn't spend a lot of time with Racket when I was looking for Scheme.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Racket is not Scheme.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;At least that's the way Racket is promoted. It's promoted as something beyond Scheme, and while that may be a good thing, when you're looking for Scheme, it's not what you're looking for. I remember seeing all the good things Racket has to offer, but I didn't want to mess with it at that time, both because it was not Scheme and the lack of extensions for numerical computing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1604540057573073391?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1604540057573073391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1604540057573073391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1604540057573073391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1604540057573073391'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/07/oh-and-one-more-thing.html' title='Oh, and one more thing...'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3502276452830096266</id><published>2011-07-18T11:25:00.000-07:00</published><updated>2011-07-18T11:28:26.130-07:00</updated><title type='text'>Installing Racket on Slackware</title><content type='html'>Based on comments on my last post, I've decided to take another look at &lt;a href="http://racket-lang.org/"&gt;Racket&lt;/a&gt;. I'm skeptical, to say the least, because my previous attempts to use Scheme for practical purposes crashed and burned pretty fast.&lt;br /&gt;&lt;br /&gt;As I explained in that post (rather verbosely upon rereading it) the problem is that the core of the language tends to be well done and well documented, but real-world programming requires high quality language extensions, and Scheme implementations do a horrible job with extensions. Even if the extensions do exist - and a lot of stuff is usually missing - the only thing you can do with the documentation is use it as guidance for how not to write documentation. The team working on the core of the language might not have time to do work on the extensions, but that doesn't help the user of the language.&lt;br /&gt;&lt;br /&gt;A couple of comments on my post claimed Racket is different. Looking at the website, I'm not sure I agree with that assessment. The extensions necessary for the type of programming I do (numerical programming) are very limited. Nonetheless, I'll take a look.&lt;br /&gt;&lt;br /&gt;As a Slackware user, the provided binaries for Ubuntu and Fedora don't do much good. Sometimes you can get them to install, but that is usually more work than compiling for myself, so I don't bother.&lt;br /&gt;&lt;br /&gt;I downloaded the source, and sure enough, the compilation worked out of the box. Documentation is provided in the file /src/README. If you did a full installation of Slackware you already have the three dependencies (gtk, cairo and pango) installed.&lt;br /&gt;&lt;br /&gt;Go to the /src directory of the extracted source code, then execute the commands in the README:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; mkdir build&lt;br /&gt;&amp;nbsp;&amp;nbsp; cd build&lt;br /&gt;&amp;nbsp;&amp;nbsp; ../configure&lt;br /&gt;&amp;nbsp;&amp;nbsp; make&lt;br /&gt;&amp;nbsp;&amp;nbsp; make install&lt;br /&gt;&lt;br /&gt;For me, the make install step took the longest, probably more than an hour, so don't do this if you only have ten minutes to spare. Then I went up to the /bin directory in the source and executed drracket. That's it. It just worked with very little effort on my part - and that's a good sign.&lt;br /&gt;&lt;br /&gt;That's also as far as I've gotten. Let's see how it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3502276452830096266?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3502276452830096266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3502276452830096266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3502276452830096266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3502276452830096266'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/07/installing-racket-on-slackware.html' title='Installing Racket on Slackware'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7617029254934213745</id><published>2011-07-11T06:52:00.000-07:00</published><updated>2011-07-11T06:57:41.060-07:00</updated><title type='text'>Why not use Scheme more?</title><content type='html'>Another observation post, &lt;b&gt;probably not worth your time&lt;/b&gt;, but I want to express my thoughts. You've been warned.&lt;br /&gt;&lt;br /&gt;I really first started using Scheme when I went through &lt;a href="http://mitpress.mit.edu/sicp/"&gt;SICP&lt;/a&gt;. Well, I didn't make it all the way through, but I learned a lot in any event. When you've got masters like that to show you what can be done with Scheme/Lisp you wonder why everyone isn't using it.&lt;br /&gt;&lt;br /&gt;As you can guess, I think I know why not everyone is using it. I primarily do numerical computing, so that is the set of features I consider when evaluating a new programming language. A couple of things stand out when I think about using Scheme rather than R and Fortran.&lt;br /&gt;&lt;br /&gt;1. There is a lack of libraries. This is well known, sometimes called "the island problem".&lt;br /&gt;&lt;br /&gt;2. There is a lack of data structures. If I want to do matrix algebra, I want to use a language that offers a matrix class as part of the language. I want to use a language that does matrix multiplication as part of the language. There are good reasons for that: less hassle, less chance of breakage when the core of the language changes, less chance that you're relying on an extension written by one individual that will stop working when he gets bored and moves on.&lt;br /&gt;&lt;br /&gt;Item 1 is not as true as it used to be. The major Schemes have a lot of libraries available. There are also tools for wrapping C code, so honestly, any lack of libraries more or less reflects the small user base, rather than the other way around. If there were more interest, the libraries would appear quickly. There's just no interest.&lt;br /&gt;&lt;br /&gt;Item 2 is still a problem and likely to remain so forever. I'm just not sure that a minor inconvenience is a major hurdle to adoption. Something like a standard set of libraries being available with each implementation would be a solution.&lt;br /&gt;&lt;br /&gt;I've reconsidered the situation since discovering Clojure, and IMO the real problem with Scheme (any of them) is the sucky documentation. It stinks. It really, really stinks. {Clarification: Upon reading the post, I was not clear that I'm talking about the developers of Scheme extensions, not the developers of the core language itself. There exists very good documentation for the core language if you're doing the usual things.}&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Have the Scheme documentation writers never heard of examples?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I've never seen a community that was so collectively clueless about how to write documentation. And I'm a Slackware user. I don't think anyone has ever complained about the excessive documentation that comes with Slackware.&lt;br /&gt;&lt;br /&gt;I might even consider writing some documentation myself, if not for the fact that &lt;i&gt;I can never get anything in Scheme to work&lt;/i&gt;, because the documentation sucks so bad. My philosophy is to just move on if I have to work too hard to figure something out. I've come to realize that developers that don't document their work very well are usually not good developers. &lt;br /&gt;&lt;br /&gt;Let me elaborate on that point a bit. The software might work as intended, but the underlying code is only part of the project, and &lt;i&gt;by itself has&lt;/i&gt; &lt;i&gt;no value&lt;/i&gt;. A good design means I don't have to think too much to use it. And when I return to the code in a year, I'll be able to easily figure out what I did and how to extend it.&lt;br /&gt;&lt;br /&gt;If I have to work for six hours to figure out how to call a simple function, that's a sign that at some point I'm going to find that my program isn't doing what I thought it was doing. At some point I'm going to say, "WTF? Why was that matrix transposed? It makes no sense." Of course there was no way I could have known that, and there's no way I will ever understand the philosophy driving the development of the library. Then a few seconds later I'll be terrified, "Hold on, if the developer would do something like that, how can I trust the other lines of code that I've been writing for the last two weeks? There's no freaking documentation!" Then I'll move on to a real language, redo everything, and be sure to avoid the mistake of trusting Scheme in the future.&lt;br /&gt;&lt;br /&gt;Go to one of the popular Scheme implementations. Just pick one. They're all equally useless. Pick out an extension that does something you need for numerical computing. If there's documentation at all - and there may very well not be - try to use that documentation to write a program. Use all of the important "things" that the extension does. Use those important things in different ways, like you would actually use them in an actual programming exercise where you are actually trying to feed yourself. Can you even figure out how to call all of the functions properly in less than two weeks?&lt;br /&gt;&lt;br /&gt;Most of the documentation is just a slopped-together list of functions and a short, content-free description that might (though in most cases probably won't) be sufficient to jog the memory of the developer himself as to what the function should do. There's no chance in hell that a programmer writing a program related to his career is going to spend enough time to figure out how to use the extension. Sure, there are hobbyists who will figure it out, but I'm talking about real work in an environment where money is on the line.&lt;br /&gt;&lt;br /&gt;I cannot treat the developers of Scheme as real developers. They're not professionals. Some are, of course, but I'm talking averages here, and the average Scheme developer is of pretty low quality relative to the average Java developer. The average Scheme developer thinks he's much better than the average Java developer because he can use recursion properly and was smart enough to recognize the brilliance of Lisp. Great, but if you measure developer quality in terms of the value of the output in a given amount of programmer time, Scheme developers probably have a negative value, because most of what they do gets in the way of developers interested in making a product that does something of value.&lt;br /&gt;&lt;br /&gt;Do I like Java? Not a chance in hell. If I had to choose between Scheme and Java to do something with money on the line, even assuming all the same libraries are available in Scheme and Java, which would I choose? I'd take Java in a second. Scheme could learn a lot from Java about working with beginners.&lt;br /&gt;&lt;br /&gt;It's a shame that Scheme has been plagued by crappy documentation. There's no reason that Scheme, on technical merit, cannot be Java. The difference is that Java was written for business applications, and that required documentation, and they got it. The Scheme community has decided that working with beginners is not fun and it has caused Scheme to be viewed as a goofy artifact of the past, rather than the language of the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7617029254934213745?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7617029254934213745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7617029254934213745' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7617029254934213745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7617029254934213745'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/07/why-not-use-scheme-more.html' title='Why not use Scheme more?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2153224477517408312</id><published>2011-07-09T05:50:00.000-07:00</published><updated>2011-07-09T05:50:13.161-07:00</updated><title type='text'>What's wrong with Clojure syntax?</title><content type='html'>Short post, not a lot of value.&lt;br /&gt;&lt;br /&gt;I keep reading things about Clojure's syntax being ugly. I don't think that's the case at all. It's extremely consistent and easy to follow. Maybe I'm just weird, but I've always preferred Tcl for short scripts because I like the syntax. Sometimes the critics of Clojure/Lisp syntax are even Java programmers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2153224477517408312?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2153224477517408312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2153224477517408312' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2153224477517408312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2153224477517408312'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/07/whats-wrong-with-clojure-syntax.html' title='What&apos;s wrong with Clojure syntax?'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-807200364801675789</id><published>2011-06-18T09:39:00.000-07:00</published><updated>2011-06-18T09:48:34.860-07:00</updated><title type='text'>Calling R from Clojure</title><content type='html'>From what I've read and based on the time I've played around with it, &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; looks like a very good language. There's no reason to praise it here. Just ask Google if you want to read some praise for Clojure.&lt;br /&gt;&lt;br /&gt;For me, it is promising because it runs on the JVM and has complete access to existing Java code. That means it's both fast and will do most of what you want to do. (Scala fits into the same category. I will be checking out Scala in the future.)&lt;br /&gt;&lt;br /&gt;In addition, it is a dialect of Lisp, which means I'm a huge fan of the syntax as wells as the approach to problem solving. I've enjoyed using Scheme in the past, but given the lack of libraries, Scheme is not suitable for the numerical programming I do. I'm aware of projects like &lt;a href="http://www.call-cc.org/"&gt;Chicken Scheme&lt;/a&gt; and &lt;a href="http://dynamo.iro.umontreal.ca/%7Egambit/wiki/index.php/Main_Page"&gt;Gambit-C&lt;/a&gt;, and I know about &lt;a href="http://swig.org/"&gt;Swig&lt;/a&gt; and their foreign function interfaces and all that, but I'm too busy to do everything my employer wants me to do. There's no way I'm going to spend months of my time extending the language, usually with crappy documentation if it even exists at all.&lt;br /&gt;&lt;br /&gt;I said above that Java will do "most" of what you want to do because one of the few limitations of Java is that it is just not complete in terms of numerics. The situation is better than it was ten years ago, but I've still not worked much with Java, simply because I know it won't do everything I need it to do. Oh, and I hate the syntax with a passion. 8000 lines of GOTO-infested FORTRAN 77 is much more pleasant to me than 200 lines of Java.&lt;br /&gt;&lt;br /&gt;The Clojure community offers a project called &lt;a href="http://incanter.org/"&gt;incanter&lt;/a&gt; that provides access to many of the available Java math libraries. There's also a project called &lt;a href="http://jolby.github.com/rincanter/"&gt;rincanter&lt;/a&gt; that is supposed to bring R functionality to Clojure, building on the Java Rserve client. If it worked I would be happy to use it. Unfortunately rincanter does not work right now.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An Example &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It's easy enough to get it working in Clojure. Here's what I did, along with a short example code.&lt;br /&gt;&lt;br /&gt;First, I installed Eclipse. I then installed &lt;a href="http://dev.clojure.org/display/doc/Getting+Started+with+Eclipse+and+Counterclockwise"&gt;counterclockwise&lt;/a&gt; (no idea why they chose that name). I went through the tutorial instructions to set up a working project. All of my previous Clojure programs were REPL, so I just went through the experience of setting up the Eclipse environment, and can happily say that it is easy to do. I then downloaded Rserve.jar and Rengine.jar from &lt;a href="http://www.rforge.net/Rserve/"&gt;rforge&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After starting my new project, I told Eclipse about Rserve.jar and Rengine.jar by right-clicking on "Referenced Libraries" --&amp;gt; "Build Path" --&amp;gt; "Configure Build Path..." --&amp;gt; "Add External JARs...".&lt;br /&gt;&lt;br /&gt;Here's a sample program to demonstrate the calling syntax. You can convert the other parts of the Rserve Java examples into Clojure using the same ideas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(import '(org.rosuda.REngine))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(import '(org.rosuda.REngine.Rserve RConnection))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(def c (new RConnection))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(def d (. c eval "rnorm(10)"))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(def e (. d asDoubles))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(println (first e))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(println (rest e))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;This was done using Clojure 1.2 and Eclipse 3.5.2 on Linux Mint 11.&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-807200364801675789?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/807200364801675789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=807200364801675789' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/807200364801675789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/807200364801675789'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/06/calling-r-from-clojure.html' title='Calling R from Clojure'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-9020860606042251141</id><published>2011-03-08T09:08:00.000-08:00</published><updated>2011-08-14T03:58:03.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>LyX 2.0 rc1 on Slackware</title><content type='html'>My home laptop is running Fedora 14. The LyX version in Fedora 14 is 2.0. The LyX version on my Slackware 13.1 box was still 1.6.x. That created problems going between the two computers: if you forget to export to 1.6.x, you can't open your file. Unfortunately, the export doesn't work very well, so even when you do export you usually can't make it into a PDF.&lt;br /&gt;&lt;br /&gt;I downloaded the LyX SlackBuild from slackbuilds.org. I downloaded the LyX 2.0 rc1 source. I edited the SlackBuild so that the version was 2.0.0rc1, did ./lyx.SlackBuild, and after a while I had a package. All is working so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-9020860606042251141?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/9020860606042251141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=9020860606042251141' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/9020860606042251141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/9020860606042251141'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/03/lyx-20-rc1-on-slackware.html' title='LyX 2.0 rc1 on Slackware'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4160625211656591804</id><published>2011-01-26T13:12:00.000-08:00</published><updated>2011-08-14T03:58:40.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Fedora 14 on an Inspiron Mini 1012</title><content type='html'>I recently installed Fedora 14 on a Dell Inspiron Mini 1012 netbook. Pretty much everything worked well, with the exception of the wireless. It contains the infamous Broadcom 4312 wireless, an example of several Broadcom wireless cards that are a nightmare for Linux users.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It turns out that it's easy to get it going in Fedora. Add the rpmfusion repositories. Then install kmod-wl-something, with the title "Metapackage which tracks in wl kernel module for latest kernel."&lt;br /&gt;&lt;br /&gt;I did that, rebooted, and wireless worked fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4160625211656591804?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4160625211656591804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4160625211656591804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4160625211656591804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4160625211656591804'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2011/01/fedora-14-on-inspiron-mini-1012.html' title='Fedora 14 on an Inspiron Mini 1012'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6161864210881348337</id><published>2010-12-21T05:00:00.000-08:00</published><updated>2011-08-14T03:58:54.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Starting R to run Rmpi jobs</title><content type='html'>I always forget the proper command to start R to run Rmpi jobs. Here it is:&lt;br /&gt;&lt;br /&gt;mpirun -np 1 --hostfile [name of hosts file] R --no-save&lt;br /&gt;&lt;br /&gt;The thing that always throws me is that I use -np 2 or whatever number of processors. I forget that you need to start one instance of R and then from within that one instance you can access however many processors you have in your hosts file.&lt;br /&gt;&lt;br /&gt;Note: You get the same thing by using "orterun" rather than "mpirun" in the above command, but I like mpirun because it is obvious what it is doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6161864210881348337?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6161864210881348337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6161864210881348337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6161864210881348337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6161864210881348337'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/12/starting-r-to-run-rmpi-jobs.html' title='Starting R to run Rmpi jobs'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4524767879391861108</id><published>2010-10-05T18:38:00.000-07:00</published><updated>2011-08-14T03:59:22.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>CUDA 3.2 on Ubuntu 10.04</title><content type='html'>I went through the steps listed in the Getting Started Guide.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I also had to install the following packages:&lt;br /&gt;libgl1-mesa-dev&lt;br /&gt;libglu1-mesa-dev&lt;br /&gt;libglut3-dev&lt;br /&gt;libxi-dev&lt;br /&gt;libxmu-dev&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I also had to create a symbolic link:&lt;br /&gt;sudo ln -s /usr/lib/nvidia-current/libcuda.so /usr/lib/libcuda.so&lt;br /&gt;&lt;br /&gt;Now it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4524767879391861108?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4524767879391861108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4524767879391861108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4524767879391861108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4524767879391861108'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/10/cuda-32-on-ubuntu-1004.html' title='CUDA 3.2 on Ubuntu 10.04'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5095686360874043910</id><published>2010-10-04T09:16:00.000-07:00</published><updated>2011-08-14T04:00:18.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Slow PDF printing in Linux</title><content type='html'>I've struggled with slow printing of PDF files in Linux recently. It's only been in recent months though. I do not recall having this problem before.&lt;br /&gt;&lt;br /&gt;I finally realized that it was only a problem to print PDF files that are scanned images. The solution was buried in this thread: &lt;br /&gt;&lt;br /&gt;http://ubuntuforums.org/archive/index.php/t-1073942.html&lt;br /&gt;&lt;br /&gt;I set up a second printer. It is parallel, so (in Gnome) I went to System &amp;gt; Administration &amp;gt; Add&lt;br /&gt;&lt;br /&gt;I selected "Other". I needed a Device URI. A google search suggested for parallel printers that parallel:/dev/lp0 might work. I tried it, used "Generic" for the manufacturer, and chose PCL 5e as the driver.&lt;br /&gt;&lt;br /&gt;Works great. All PDF images print fast if I remember to choose the Generic printer rather than the HP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5095686360874043910?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5095686360874043910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5095686360874043910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5095686360874043910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5095686360874043910'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/10/slow-pdf-printing-in-linux.html' title='Slow PDF printing in Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5163036561340828094</id><published>2010-08-03T14:41:00.000-07:00</published><updated>2011-08-14T04:01:19.294-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Cuda on Slackware 13.1</title><content type='html'>This was much easier than I expected. Note that I'm running Slackware 13.1 32-bit.&lt;br /&gt;&lt;br /&gt;Step 1: Install the latest NVidia driver (256.44 in my case). You can't use the SlackBuild from slackbuilds.org. The latest NVidia packages are quite different from 195.*. I uninstalled the existing driver (that I had earlier installed from slackbuilds.org), downloaded the latest NVidia driver, and installed it according to the instructions.&lt;br /&gt;&lt;br /&gt;Step 2: Install the CUDA toolkit for Fedora 12. This amounted to downloading the file and running it. I accepted all the defaults.&lt;br /&gt;&lt;br /&gt;Step 3: Install the CUDA SDK. Again, I downloaded the file, ran it, and accepted the defaults.&lt;br /&gt;&lt;br /&gt;Step 4: Change the paths according to the CUDA instructions. &lt;br /&gt;&lt;br /&gt;Done! This was so much easier than Ubuntu, Mint, Debian, and others. I didn't expect it to work by just downloading a few files and running them. I'm certainly not complaining. I ran make for the examples, they all compiled and ran perfectly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5163036561340828094?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5163036561340828094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5163036561340828094' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5163036561340828094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5163036561340828094'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/08/cuda-on-slackware-131.html' title='Cuda on Slackware 13.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5141644908903221448</id><published>2010-07-28T08:29:00.000-07:00</published><updated>2011-08-14T04:03:10.006-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Gretl on Slackware 13.1</title><content type='html'>I recently built gretl 1.9.1 for Slackware 13.1. I needed to install two packages first, fftw and gdk-pixbuf. Both are available from slackbuilds.org.&lt;br /&gt;&lt;br /&gt;LAPACK and BLAS are also necessary. I prefer to use the ACML because it is a lot faster than an unoptimized BLAS. I created symbolic links to make libacml.a appear to be both libblas.a and liblapack.a in /usr/lib:&lt;br /&gt;&lt;br /&gt;ln -s /opt/acml4.4.0/gfortran32/lib/libacml.a /usr/local/lib/libblas.a &lt;br /&gt;ln -s /opt/acml4.4.0/gfortran32/lib/libacml.a /usr/local/lib/liblapack.a&lt;br /&gt;&lt;br /&gt;Here's the SlackBuild. It built a package and upon installation it runs correctly.&lt;br /&gt;&lt;blockquote&gt;#!/bin/sh&lt;br /&gt;# Heavily based on the Slackware 12.2 SlackBuild&lt;br /&gt;# http://gretl.sourceforge.net/gretl_italiano.html&lt;br /&gt;&lt;br /&gt;NAME=gretl&lt;br /&gt;VERSION=1.9.1&lt;br /&gt;ARCH=${ARCH:-i486}&lt;br /&gt;BUILD=1mf&lt;br /&gt;CWD=`pwd`&lt;br /&gt;&lt;br /&gt;if ["$TMP" = ""]; then&lt;br /&gt;&amp;nbsp;TMP=/tmp&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;PKG=$TMP/package-$NAME&lt;br /&gt;&lt;br /&gt;if [ "$ARCH" = "i486" ]; then&lt;br /&gt;&amp;nbsp; SLKCFLAGS="-O2 -march=i486 -mtune=i686"&lt;br /&gt;elif [ "$ARCH" = "i686" ]; then&lt;br /&gt;&amp;nbsp; SLKCFLAGS="-O2"&lt;br /&gt;elif [ "$ARCH" = "x86_64" ]; then&lt;br /&gt;&amp;nbsp; SLKCFLAGS="-O2"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ ! -d $TMP ]; then&lt;br /&gt;&amp;nbsp;mkdir -p $TMP&lt;br /&gt;fi&lt;br /&gt;if [ ! -d $PKG ]; then&lt;br /&gt;&amp;nbsp;mkdir -p $PKG&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;mkdir -p $PKG/usr&lt;br /&gt;&lt;br /&gt;cd $TMP&lt;br /&gt;&lt;br /&gt;tar xvjf $CWD/$NAME-$VERSION.tar.bz2&lt;br /&gt;&lt;br /&gt;cd $NAME-$VERSION&lt;br /&gt;&lt;br /&gt;CFLAGS="$SLKCFLAGS" \&lt;br /&gt;./configure --prefix=/usr --build=i486-slackware-linux --with-lapack-prefix=/usr&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;make prefix=$PKG/usr install&lt;br /&gt;&lt;br /&gt;mkdir -p $PKG/usr/doc/$NAME-$VERSION&lt;br /&gt;cp -a ChangeLog COPYING EXTENDING INSTALL README README.audio README.win32 TODO $PKG/usr/doc/$NAME-$VERSION&lt;br /&gt;mkdir -p $PKG/install&lt;br /&gt;mkdir -p $PKG/usr/share/pixmaps&lt;br /&gt;mkdir -p $PKG/usr/share/applications&lt;br /&gt;cat $CWD/slack-desc &amp;gt; $PKG/install/slack-desc&lt;br /&gt;cp $CWD/gretl.png $PKG/usr/share/pixmaps/gretl.png&lt;br /&gt;cat $CWD/Gretl.desktop &amp;gt; $PKG/usr/share/applications/gretl.desktop&lt;br /&gt;cp $CWD/$NAME.SlackBuild $PKG/usr/doc/$NAME-$VERSION/&lt;br /&gt;&lt;br /&gt;( cd $PKG&lt;br /&gt;&amp;nbsp; find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2&amp;gt; /dev/null&lt;br /&gt;&amp;nbsp; find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2&amp;gt; /dev/null&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;mv $PKG/usr/share/man $PKG/usr&lt;br /&gt;gzip -9 $PKG/usr/man/*/*&lt;br /&gt;chmod 755 $PKG/usr/bin/*&lt;br /&gt;&lt;br /&gt;cd $PKG&lt;br /&gt;&lt;br /&gt;chown -R root:root .&lt;br /&gt;&lt;br /&gt;requiredbuilder -v -y -s $CWD $PKG&lt;br /&gt;&lt;br /&gt;cat $CWD/slack-required &amp;gt; $PKG/install/slack-required&lt;br /&gt;cat $CWD/slack-required &amp;gt; $PKG/usr/doc/$NAME-$VERSION/slack-required&lt;br /&gt;&lt;br /&gt;makepkg -l y -c n $CWD/$NAME-$VERSION-$ARCH-$BUILD.tgz&lt;br /&gt;&lt;br /&gt;if [ "$1" = "--cleanup" ]; then&lt;br /&gt;&amp;nbsp;rm -rf $TMP/$NAME-$VERSION&lt;br /&gt;&amp;nbsp;rm -rf $PKG&lt;br /&gt;fi&lt;/blockquote&gt;License note: This is a modified version of a SlackBuild downloaded from slacky.eu a long time ago. It is in the public domain, as I understand it, and my modifications are public domain as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5141644908903221448?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5141644908903221448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5141644908903221448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5141644908903221448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5141644908903221448'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/07/gretl-on-slackware-131.html' title='Gretl on Slackware 13.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1973169402129734527</id><published>2010-03-19T07:10:00.000-07:00</published><updated>2011-08-14T04:03:28.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Running Windows Flash from Linux</title><content type='html'>Here's the deal. Every so often I need to view a Flash video from a site that only works with Windows (why that is the case remains a mystery, but apparently the website owner thinks it is a good idea).&lt;br /&gt;&lt;br /&gt;This until recently was trivial: just download Firefox for Windows, install using wine, install the Flash plugin, watch the video. For some reason this doesn't work any longer (Firefox 3.6). I tried to install Chrome for Windows, but that failed.&lt;br /&gt;&lt;br /&gt;I installed Opera for Windows, had no problems, and installed the Adobe Flash player from within Opera. I am now able to watch what I need, from either Firefox or Opera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1973169402129734527?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1973169402129734527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1973169402129734527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1973169402129734527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1973169402129734527'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/03/running-windows-flash-from-linux.html' title='Running Windows Flash from Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-469254575490366281</id><published>2010-01-18T07:19:00.000-08:00</published><updated>2011-08-14T04:04:04.903-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Simple clamav tutorial</title><content type='html'>To install clamav on Slackware 13, I used the SlackBuilds.org SlackBuild.&lt;br /&gt;&lt;br /&gt;To update the database:&lt;br /&gt;&lt;br /&gt;freshclam&lt;br /&gt;&lt;br /&gt;To scan all files in directory &lt;i&gt;dir&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;cd /dir&lt;br /&gt;clamscan -r -i&lt;br /&gt;&lt;br /&gt;This will scan all files in that directory and all subdirectories, and will only print out the names of infected files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-469254575490366281?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/469254575490366281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=469254575490366281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/469254575490366281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/469254575490366281'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/01/simple-clamav.html' title='Simple clamav tutorial'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1950017638928697116</id><published>2010-01-18T07:16:00.000-08:00</published><updated>2011-08-14T04:04:39.943-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>Restart networking in Slackware 13</title><content type='html'>Couldn't easily find it, so here it is. As root, run&lt;br /&gt;&lt;br /&gt;/etc/rc.d/rc.inet1 eth0_restart&lt;br /&gt;&lt;br /&gt;You may have to change the "eth0" if your interface goes by a different name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1950017638928697116?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1950017638928697116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1950017638928697116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1950017638928697116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1950017638928697116'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/01/restart-networking-in-slackware-13.html' title='Restart networking in Slackware 13'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-9136412251555649674</id><published>2010-01-18T06:58:00.000-08:00</published><updated>2010-01-18T07:11:56.618-08:00</updated><title type='text'>A note about my blog</title><content type='html'>When I first started this blog, it was to give me a place to vent my frustrations and make a few observations. There were already millions of blogs out there. I didn't expect anyone to read it. It was really more of a diary.&lt;br /&gt;&lt;br /&gt;Over time, I lost interest in venting my frustrations, and realized that a blog is a great way to keep track of useful bits of information. As I get older I tend to forget things quickly. Therefore most of what I post here is for my own benefit six months or a couple of years down the road. If you find something to be helpful, that's great, please leave a comment to let me know.&lt;br /&gt;&lt;br /&gt;Why am I wasting my time writing this? Because I recently deleted a comment from someone who thought it was a good idea to tell me all the problems with my blog, using words like "sucks" and "disorganized". Again, I post for my own benefit, but am happy when my experiences save someone else a little time and frustration. If my blog does not appeal to you, here's some free advice: you don't have to read it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-9136412251555649674?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/9136412251555649674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=9136412251555649674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/9136412251555649674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/9136412251555649674'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2010/01/note-about-my-blog.html' title='A note about my blog'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2228386659123502304</id><published>2009-09-28T06:46:00.000-07:00</published><updated>2011-08-14T04:06:23.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes for self'/><title type='text'>gretl on Slackware 13.0</title><content type='html'>I had some difficulties getting gretl 1.8.4 installed on Slackware 13. Here is what I did.&lt;br /&gt;&lt;br /&gt;The problem was with the LAPACK libraries. After a lot of digging, I found that the problem was twofold: (a) I had built my own LAPACK library using the SlackBuild from slackbuilds.org, and gretl wasn't looking for the library in the right directory. (b) It wasn't finding libblas.a. (You can open config.log for gretl in the /tmp/gretl-1.8.4 directory to find the configuration problems.)&lt;br /&gt;&lt;br /&gt;To handle the first problem, I had to edit the SlackBuild script to add the configure option --with-lapack-prefix=/usr to tell it to look for liblapack.a in /usr/lib. It will look in the /lib subdirectory of the directory you give, so if you pass the option --with-lapack-prefix=/usr/lib, it will look in /usr/lib/lib and quit with an error.&lt;br /&gt;&lt;br /&gt;The second problem was caused by the fact that I had built my LAPACK library against ACML, AMD's optimized math libraries. I created a symbolic link of that library into /usr/local/lib. (There are probably alternatives, but I know it will be found if I put it there.) I had installed ACML in the default directory, so the symbolic link I created was&lt;br /&gt;&lt;br /&gt;ln -s /opt/acml4.3.0/gfortran32/lib/libacml.a /usr/local/lib/libblas.a&lt;br /&gt;&lt;br /&gt;The gretl SlackBuild built a package that installed properly and ran, but gave an error when I attempted to plot a graph. I don't know what the error was but it was fixed when I ran gretl from a Slackware 12.1 installation. After that, gretl plotting worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2228386659123502304?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2228386659123502304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2228386659123502304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2228386659123502304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2228386659123502304'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/09/gretl-on-slackware-130.html' title='gretl on Slackware 13.0'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6100599274919049804</id><published>2009-09-01T03:47:00.000-07:00</published><updated>2009-09-01T03:59:17.472-07:00</updated><title type='text'>Slackware 13 Automount USB Drive</title><content type='html'>Scratch this: It worked once and now it doesn't work upon reboot!!!&lt;br /&gt;This is so frustrating I may just give up on Slackware altogether.&lt;br /&gt;&lt;br /&gt;With Slackware 12.1 and 12.2, USB drives automounted out of the box. Not so for my Slackware 13 installation. The obvious thing was to check which groups I was already a member of, using the command&lt;br /&gt;&lt;br /&gt;groups&lt;br /&gt;&lt;br /&gt;in Konsole. It said I was a member of cdrom, but not plugdev, so I used the command&lt;br /&gt;&lt;br /&gt;gpasswd -a [user] plugdev&lt;br /&gt;&lt;br /&gt;and logged out. I logged in again, double checked that I was in plugdev, and tested. Nothing. I didn't know what to do and Google didn't help. I added myself to a bunch of other groups, but none worked.&lt;br /&gt;&lt;br /&gt;Some more extensive searching took me here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linuxquestions.org/questions/slackware-14/12.0-and-hal-read-this-566862/"&gt;http://www.linuxquestions.org/questions/slackware-14/12.0-and-hal-read-this-566862/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Long story short, I had to open the file /etc/login.defs as root and add plugdev to the line referenced in that post. I logged out and back in, and then I could automount USB drives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6100599274919049804?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6100599274919049804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6100599274919049804' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6100599274919049804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6100599274919049804'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/09/slackware-13-automount-usb-drive.html' title='Slackware 13 Automount USB Drive'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6799088006475466918</id><published>2009-07-24T05:57:00.000-07:00</published><updated>2009-07-24T05:57:01.575-07:00</updated><title type='text'>KRDC on Vector Linux 6</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;You need to install the kdenetwork package from the repos. Why does it have to be so difficult to find this information?&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=5ef5157a-cf1e-8be1-833b-ccee222bad54' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6799088006475466918?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6799088006475466918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6799088006475466918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6799088006475466918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6799088006475466918'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/krdc-on-vector-linux-6.html' title='KRDC on Vector Linux 6'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7791859541282453330</id><published>2009-07-24T05:37:00.000-07:00</published><updated>2009-07-24T05:37:00.810-07:00</updated><title type='text'>Setting up hosts.deny</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;The safest policy, that should be implemented unless you know what you are doing, is to set the /etc/hosts.deny file to have only the entry ALL: ALL.&lt;br/&gt;&lt;br/&gt;That denies access to anyone attempting to access your machine, any services, unless you have explicitly given them permission in the /etc/hosts.allow file.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=801fa6bd-9b78-8ef4-8aa0-7980cd87b11c' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7791859541282453330?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7791859541282453330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7791859541282453330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7791859541282453330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7791859541282453330'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/setting-up-hostsdeny.html' title='Setting up hosts.deny'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1495235855594543392</id><published>2009-07-22T06:59:00.000-07:00</published><updated>2009-07-22T06:59:00.413-07:00</updated><title type='text'>Python for statistical computing</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Seems to work pretty well...more to come&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=c6311372-fad4-8664-83fc-cd7ecf18a7a4' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1495235855594543392?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1495235855594543392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1495235855594543392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1495235855594543392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1495235855594543392'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/python-for-statistical-computing.html' title='Python for statistical computing'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5433091401467302220</id><published>2009-07-16T06:00:00.000-07:00</published><updated>2009-07-16T06:06:37.915-07:00</updated><title type='text'>Using cython with numpy in Vector 6</title><content type='html'>When using cython and numpy, you need to use&lt;br /&gt;cimport numpy&lt;br /&gt;&lt;br /&gt;Unfortunately that is likely to give an error. I got&lt;br /&gt;error: numpy/arrayobject.h: No such file or directory&lt;br /&gt;&lt;br /&gt;Based on this link:&lt;br /&gt;&lt;a href="http://www.mail-archive.com/cython-dev@codespeak.net/msg02149.html"&gt;http://www.mail-archive.com/cython-dev@codespeak.net/msg02149.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I opened Python and issued the commands&lt;br /&gt;import numpy&lt;br /&gt;numpy.get_include()&lt;br /&gt;&lt;br /&gt;With output&lt;br /&gt;/usr/lib/python2.5/site-packages/numpy/core/include&lt;br /&gt;&lt;br /&gt;I tried&lt;br /&gt;export INCLUDE=/usr/lib/python2.5/site-packages/numpy/core/include&lt;br /&gt;but got the same error.&lt;br /&gt;&lt;br /&gt;I then tried&lt;br /&gt;export CFLAGS=-I/usr/lib/python2.5/site-packages/numpy/core/include&lt;br /&gt;and it worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5433091401467302220?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5433091401467302220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5433091401467302220' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5433091401467302220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5433091401467302220'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/using-cython-with-numpy-in-vector-6.html' title='Using cython with numpy in Vector 6'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5484765282288258082</id><published>2009-07-14T08:29:00.000-07:00</published><updated>2009-07-14T08:36:36.837-07:00</updated><title type='text'>Multivariate normal distribution in Python</title><content type='html'>I could not find a Python function to evaluate the multivariate normal distribution in Python. Here's one that gives equivalent results to the dmvnorm function in the mvtnorm package for R. It's something that works. I've not had time or need yet to fix it up.&lt;br /&gt;&lt;br /&gt;b: A vector&lt;br /&gt;mean: The mean of the elements in b (same dimensions as b)&lt;br /&gt;cov: The covariance matrix of the multivariate normal distribution&lt;br /&gt;&lt;br /&gt;License: GPL version 2&lt;br /&gt;&lt;a href="http://www.gnu.org/licenses/gpl-2.0.html"&gt;http://www.gnu.org/licenses/gpl-2.0.html&lt;/a&gt;&lt;br /&gt;k = b.shape[0]&lt;br /&gt;part1 = numpy.exp(-0.5*k*numpy.log(2*numpy.pi))&lt;br /&gt;part2 = numpy.power(numpy.linalg.det(cov),-0.5)&lt;br /&gt;dev = b-mean&lt;br /&gt;part3 = numpy.exp(-0.5*numpy.dot(numpy.dot(dev.transpose(),numpy.linalg.inv(cov)),dev))&lt;br /&gt;dmvnorm = part1*part2*part3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5484765282288258082?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5484765282288258082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5484765282288258082' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5484765282288258082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5484765282288258082'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/multivariate-normal-distribution-in.html' title='Multivariate normal distribution in Python'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5542138165458802528</id><published>2009-07-14T08:26:00.000-07:00</published><updated>2009-07-14T08:27:56.833-07:00</updated><title type='text'>Sage on Vector 6/Slackware 12.1</title><content type='html'>It's easy. Just download the Debian binary, extract it, and run it using ./sage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5542138165458802528?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5542138165458802528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5542138165458802528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5542138165458802528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5542138165458802528'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/sage-on-vector-6slackware-121.html' title='Sage on Vector 6/Slackware 12.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2802820732636905211</id><published>2009-07-01T08:30:00.000-07:00</published><updated>2009-07-01T08:39:03.805-07:00</updated><title type='text'>Static IP address information in Slackware 12</title><content type='html'>To find information about a static IP address in Slackware 12:&lt;br /&gt;&lt;br /&gt;1. Open /etc/rc.d/rc.inet1.conf&lt;br /&gt;Find the IP address, gateway, and netmask.&lt;br /&gt;&lt;br /&gt;2. Open /etc/resolv.conf&lt;br /&gt;There will be information about the nameserver(s).&lt;br /&gt;&lt;br /&gt;You can restart the network using the command&lt;br /&gt;/etc/rc.d/rc.inet1 restart&lt;br /&gt;&lt;br /&gt;This came in helpful, because I wanted to set up my static IP in Vector 6.0, needed to pull the information from my Slackware installation, but was unable to reboot my computer. I was able to enter the information using Netconf in the Control Center but did not have a way to restart the network.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2802820732636905211?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2802820732636905211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2802820732636905211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2802820732636905211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2802820732636905211'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/07/static-ip-address-information-in.html' title='Static IP address information in Slackware 12'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3107491027117316202</id><published>2009-06-29T05:21:00.000-07:00</published><updated>2009-06-29T05:30:59.335-07:00</updated><title type='text'>Dual Monitors on Vector 6</title><content type='html'>I have a Dell Optiplex 740 (purchased in July 2007). I wanted to add a second monitor, so I installed a nVidia GeForce FX 5200. To get it working in Slackware 12.1, I just used the SlackBuild from slackbuilds.org, followed the instructions, and everything worked fine.&lt;br /&gt;&lt;br /&gt;On Vector 6 it was not so easy. Installing the nVidia driver was pretty easy using the tools Vector provides - it even detected the card properly, and chose the right legacy driver. The problem was getting dual screens to work: I ran nvidia-settings (as root) but it simply would not work.&lt;br /&gt;&lt;br /&gt;I copied my xorg.conf information from Slackware 12.1 (Vector 6 is compatible with Slackware 12.1):&lt;br /&gt;Section "Module"&lt;br /&gt;&lt;br /&gt;# This loads the DBE extension module.&lt;br /&gt;# This loads the miscellaneous extensions module, and disables&lt;br /&gt;# initialisation of the XFree86-DGA extension within that module.&lt;br /&gt;# This loads the font modules&lt;br /&gt;# This loads the GLX module&lt;br /&gt;    Load           "dbe"        # Double buffer extension&lt;br /&gt;    SubSection     "extmod"&lt;br /&gt;        Option         "omit xfree86-dga"   # don't initialise the DGA extension&lt;br /&gt;    EndSubSection&lt;br /&gt;    Load           "type1"&lt;br /&gt;    Load           "freetype"&lt;br /&gt;    #Load        "speedo"&lt;br /&gt;    Load           "glx"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "ServerFlags"&lt;br /&gt;    Option         "Xinerama" "0"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;I logged out and logged back in again, and it worked properly. Surely there must be a better way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3107491027117316202?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3107491027117316202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3107491027117316202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3107491027117316202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3107491027117316202'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/06/dual-monitors-on-vector-6.html' title='Dual Monitors on Vector 6'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-1553988327156313898</id><published>2009-02-22T04:42:00.000-08:00</published><updated>2009-02-22T05:00:05.596-08:00</updated><title type='text'>Getting 1280x800 resolution on my Acer Aspire 4730Z</title><content type='html'>Some distros (Fedora, Mandriva, Ubuntu) have no trouble setting the proper resolution on my laptop. Others (Debian, Mepis, Sidux, Slackware) run into problems. Slackware 12.2 intelligently still comes with a real xorg.conf file. I opened the xorg.conf and found that it was using the vesa driver. I changed that to intel, restarted X, and I had 1280x800.&lt;br /&gt;&lt;br /&gt;Debian Lenny and the newer Debian derivatives have done away with all but a minimal xorg.conf. After a whole lot of searching and reading, I found that it is a PITA, but not that difficult to fix the problem. Most of my information came from &lt;a href="http://wiki.debian.org/XStrikeForce/HowToRandR12"&gt;this excellent page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Step 1: Generate an xorg.conf using Xorg -configure. Test that it works using the command that is given.&lt;br /&gt;&lt;br /&gt;Step 2: Generate the modeline. Lenny was running at 1024x768@60. That meant I needed to know the modeline for 1280x800@60. I issued the command&lt;br /&gt;gtf 1280 800 60&lt;br /&gt;The output was&lt;br /&gt;Modeline "1280x800_60.00"  83.46  1280 1344 1480 1680  800 801 804 828  -HSync +Vsync&lt;br /&gt;&lt;br /&gt;Step 3: Go to the Section "monitor" and add the given modeline. On the next line add&lt;br /&gt;Option "PreferredMode" "1280x800_60.00".&lt;br /&gt;See the link above for an example of what your xorg.conf should look like after adding the two lines.&lt;br /&gt;&lt;br /&gt;Step 4: Test the xorg.conf again using the same command as in step 1. If you are satisified, replace your current xorg.conf with the new one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-1553988327156313898?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/1553988327156313898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=1553988327156313898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1553988327156313898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/1553988327156313898'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/02/getting-1280x800-resolution-on-my-acer.html' title='Getting 1280x800 resolution on my Acer Aspire 4730Z'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8074918568520056594</id><published>2009-02-22T04:17:00.000-08:00</published><updated>2009-02-22T04:39:29.398-08:00</updated><title type='text'>Trying more distros with the RaLink RT-2860</title><content type='html'>One of the (admittedly lower priority) reasons I got my new laptop is that it would allow me to give more back to the FOSS community by allowing me to test new distros with my particular combination of hardware. I've reported a few bugs in test releases so far.&lt;br /&gt;&lt;br /&gt;As one of the last remaining hurdles for the Linux user is poor Linux support from some wireless card manufacturers, it is of interest to see whether my wireless card will pose any difficulties. Note that Intel wireless is better - that should "just work" with most distros. You will need some other form of internet access (perhaps using Windows) in order to get the RT-2860 working with most distros.&lt;br /&gt;&lt;br /&gt;I tried the recent Mandriva 2009.1 beta. They have compiled support for the RT-2860 into the kernel, so everything works out of the box. You select your wireless network and away you go.&lt;br /&gt;&lt;br /&gt;I like Slackware, but it does have a reputation for being a server distribution, not really a cutting-edge laptop distribution. I installed Slackware 12.2 (I also installed the Zenwalk 5.4 GNOME beta and had the same outcome) and installed wicd from /extra (I downloaded the package to a USB drive on another computer). After installation wicd can be installed - I did a full Slackware install and it did not have any missing dependencies.&lt;br /&gt;&lt;br /&gt;I followed the instructions in my earlier post for Ubuntu Jaunty. All of the commands for Ubuntu worked for Slackware (and Zenwalk). I was then able to use wicd to connect to the network. My concerns about Slackware being in any way difficult on a laptop were wrong. It's just as easy as using anything else, though you might &lt;span style="font-style: italic;"&gt;prefer&lt;/span&gt; a different distro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8074918568520056594?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8074918568520056594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8074918568520056594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8074918568520056594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8074918568520056594'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/02/trying-more-distros-with-ralink-rt-2860.html' title='Trying more distros with the RaLink RT-2860'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6557833659882254408</id><published>2009-02-04T03:46:00.000-08:00</published><updated>2009-06-29T05:21:06.662-07:00</updated><title type='text'>Ralink RT2860 Wireless in Ubuntu Jaunty</title><content type='html'>&lt;span style="font-style: italic;"&gt;[Update: The driver for this particular wireless card has been included in the Linux kernel. If you use the kernel that was part of the Jaunty release, the card will "just work". I was running an early test release of Jaunty at the time this was written. It will still be relevant if you are running a distro with an older kernel (such as previous Ubuntu releases). I'm happy that my post was of value to someone.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I recently purchased an Acer Aspire 4730Z. I settled on this particular laptop because it has Intel graphics and the saleswoman told me the wireless card was a Ralink. Intel wireless would have been better, because I know that "just works", but Ralink does offer good Linux support so I was happy. I would have bought something else if the card had been Broadcom.&lt;br /&gt;&lt;br /&gt;Nonetheless, it was still difficult to get the driver working with Ubuntu. With Fedora 10, it was trivial: add the rpmfusion repo, install kmod-rt2860, and you're done. I like to test distros in order to report bugs, so as good as Fedora is (and it's great) I need to install others.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Preparation:&lt;/span&gt; I went to this site&lt;br /&gt;&lt;a href="http://www.ralinktech.com/ralink/Home/Support/Linux.html"&gt;http://www.ralinktech.com/ralink/Home/Support/Linux.html&lt;/a&gt;&lt;br /&gt;to download the driver. I unpacked it and looked at the README_STA file. I had read that it is better to use wicd with this driver, so I installed that. I installed build-essential and the kernel headers.&lt;br /&gt;&lt;br /&gt;I went to the os/linux directory, opened config.mk in a text editor, and set options 'HAS_WPA_SUPPLICANT=y' and 'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y' as discussed in README_STA. Both of these options are set to "n" by default.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Building:&lt;/span&gt;&lt;br /&gt;sudo make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finishing up:&lt;/span&gt;&lt;br /&gt;Based on this page:&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=683085&amp;amp;page=4"&gt;http://ubuntuforums.org/showthread.php?t=683085&amp;amp;page=4&lt;/a&gt;&lt;br /&gt;I issued the following commands&lt;br /&gt;cd os/linux&lt;br /&gt;sudo cp /sbin/insmod rt2860sta.ko&lt;br /&gt;sudo modprobe rt2860sta&lt;br /&gt;sudo depmod -a&lt;br /&gt;sudo ifconfig ra0 up&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Connecting:&lt;/span&gt;&lt;br /&gt;Open wicd in &gt;&gt; Applications &gt;&gt; Internet. Connect to the network.&lt;br /&gt;&lt;br /&gt;This is far more work than it should be, and it was no fun having to look for the answers. The README_STA did not work properly for some reason. If I knew much about writing scripts I would write one to automate the process.&lt;br /&gt;&lt;br /&gt;Also, in Debian Lenny and Mepis 8, it is possible to use module-assistant as described here:&lt;br /&gt;&lt;a href="http://wiki.debian.org/rt2860sta?action=show&amp;amp;redirect=DebianEeePC/HowTo/Wifi/Rt2860"&gt;[Debian Link]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6557833659882254408?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6557833659882254408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6557833659882254408' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6557833659882254408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6557833659882254408'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2009/02/ralink-rt2860-wireless-in-ubuntu-jaunty.html' title='Ralink RT2860 Wireless in Ubuntu Jaunty'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5338667747996933405</id><published>2008-12-30T05:52:00.000-08:00</published><updated>2008-12-30T06:12:55.803-08:00</updated><title type='text'>ESS on Slackware 12.1</title><content type='html'>I have Slackware 12.1 and want to install &lt;a href="http://ess.r-project.org/"&gt;ESS&lt;/a&gt; because I do a lot of R programming. I use emacs 23 from CVS because it allows the use of antialiased fonts. Here are the instructions first for the emacs that comes with Slackware 12.1, and then for emacs built from CVS.&lt;br /&gt;&lt;br /&gt;1. Download &lt;a href="http://ess.r-project.org/downloads/ess/ess-5.3.10.tgz"&gt;ESS&lt;/a&gt;.&lt;br /&gt;2. Go to /usr/share/emacs/site-lisp. Make a directory to hold ESS. You probably have to be root to do this.&lt;br /&gt;cd /usr/share/emacs/site-lisp&lt;br /&gt;mkdir ess&lt;br /&gt;3. Extract the ESS download into that directory.&lt;br /&gt;4. You probably had to be root to do the previous steps. Change back to user. In your home directory, add&lt;br /&gt;(require 'ess-site)&lt;br /&gt;to .emacs. If you do not have the file .emacs in your home directory, you will need to create it.&lt;br /&gt;&lt;br /&gt;If you built emacs from CVS, you have to know the directory 'site-lisp' is located. On my computer, that is &lt;home&gt;/emacsbuild/share/emacs/site-lisp. Just change step 3 to extract the ESS download into that directory.&lt;br /&gt;&lt;br /&gt;I found the instructions in the &lt;a href="http://ess.r-project.org/Manual/ess.html#Installation"&gt;manual&lt;/a&gt; to be confusing. &lt;a href="http://slack.ser.man.ac.uk/progs/R/ess.html"&gt;This page&lt;/a&gt; helped me out. It's actually quite simple, yet the first step&lt;br /&gt;&lt;br /&gt;"&lt;code&gt;cd&lt;/code&gt; to a directory where you keep emacs lisp files, or create a new directory (for example, &lt;samp&gt;&lt;span class="file"&gt;$HOME/emacs&lt;/span&gt;&lt;/samp&gt;) to hold the distribution.  This directory will be referred to below as "the ESS distribution directory"."&lt;br /&gt;&lt;br /&gt;is almost certain to be confusing to anyone who doesn't already know what to do, in which case there's not much point in having documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5338667747996933405?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5338667747996933405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5338667747996933405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5338667747996933405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5338667747996933405'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/12/ess-on-slackware-121.html' title='ESS on Slackware 12.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3141419844993304519</id><published>2008-12-29T12:56:00.000-08:00</published><updated>2008-12-29T13:43:20.649-08:00</updated><title type='text'>Installing emacs 23 on Slackware 12.1</title><content type='html'>The biggest improvement to emacs in version 23 is that it is possible to have antialiased fonts in the X version. It's long been possible to have antialiased fonts by running emacs in a terminal; this, however, gives emacs a true GUI with acceptable fonts. It is not possible to shy away from Linux as a programming desktop on the basis that there are not GUI IDE's available.&lt;br /&gt;&lt;br /&gt;I'm unaware of either a package or a SlackBuild for emacs CVS, so here is what I did. Thanks to the following post, which I had to modify:&lt;br /&gt;http://theblackdragon.wordpress.com/2006/09/03/antialiased-emacs-using-xft/&lt;br /&gt;&lt;br /&gt;This installation will not affect your existing emacs installation if you follow these steps.&lt;br /&gt;1. Create a directory to store the downloaded source:&lt;br /&gt;mkdir &lt;span style="font-style: italic;"&gt;&lt;home&gt;&lt;/span&gt;/emacs23, replacing &lt;span style="font-style: italic;"&gt;&lt;home&gt; &lt;/span&gt;with whatever directory you wish. To make a directory to store the new emacs:&lt;br /&gt;mkdir &lt;span style="font-style: italic;"&gt;&lt;home&gt;&lt;/span&gt;/emacsbuild.&lt;br /&gt;2. CD to that directory:&lt;br /&gt;cd &lt;span style="font-style: italic;"&gt;&lt;home&gt;&lt;/span&gt;/emacs23&lt;br /&gt;3. Download:&lt;br /&gt;cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs&lt;br /&gt;4. cd emacs&lt;br /&gt;5. ./configure --prefix=&lt;span style="font-style: italic;"&gt;&lt;home&gt;&lt;/span&gt;/build/emacsbuild --program-suffix=.emacs-23 --with-x-toolkit=gtk --enable-font-backend --with-xft --with-freetype&lt;br /&gt;6. Then follow the rest of what is on theblackdragon:&lt;br /&gt;make bootstrap&lt;br /&gt;cd lisp&lt;br /&gt;make recompile EMACS=../src/emacs&lt;br /&gt;cd ..&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;You can then run your new emacs by cd &lt;span style="font-style: italic;"&gt;&lt;home&gt;&lt;/span&gt;/emacsbuild/bin&lt;br /&gt;and ./emacs.emacs-23&lt;br /&gt;&lt;br /&gt;This installation is completely seperate from your existing installation, so you need to reinstall any packages such as ESS that you use, only inside this directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3141419844993304519?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3141419844993304519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3141419844993304519' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3141419844993304519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3141419844993304519'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/12/installing-emacs-23-on-slackware-121.html' title='Installing emacs 23 on Slackware 12.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6601379250945436333</id><published>2008-05-22T08:24:00.000-07:00</published><updated>2008-05-22T08:31:08.060-07:00</updated><title type='text'>Adding a printer in Slackware 12.1</title><content type='html'>My fears about setting things up in Slackware 12.1 being difficult have thus far been unfounded. I wanted to listen to some talk radio, so I downloaded the SlackBuild for realplayer from slacky.eu. I downloaded the rpm from www.real.com/linux, built the package, and it just worked. Sound worked without any setup at all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Getting my printer working was slightly more difficult. I found the answer here:&lt;br /&gt;&lt;br /&gt;http://www.slackbasics.org/html/printer.html&lt;br /&gt;&lt;br /&gt;The answer is to issue the commands&lt;br /&gt;&lt;br /&gt;chmod a+x /etc/rc.d/rc.cups&lt;br /&gt;/etc/rc.d/rc.cups start&lt;br /&gt;&lt;br /&gt;then open the browser to http://localhost:631. The printer sets up the same as on any other distro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6601379250945436333?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6601379250945436333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6601379250945436333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6601379250945436333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6601379250945436333'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/05/adding-printer-in-slackware-121.html' title='Adding a printer in Slackware 12.1'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2613109606121517224</id><published>2008-05-22T08:15:00.000-07:00</published><updated>2008-05-22T08:22:59.351-07:00</updated><title type='text'>Moving to Slackware</title><content type='html'>Arch has served me well. Unfortunately I do not like the idea of &lt;span style="font-style: italic;"&gt;having&lt;/span&gt; to update repeatedly or eventually ending up with a broken system. I like the idea of having a simple system. I like the idea of being able to easily create packages, update them, or change them.&lt;br /&gt;&lt;br /&gt;I was surprised to find out that Slackware offers those things, only better. SlackBuilds are generally of very high quality. The same cannot be said of PKGBUILDs from the AUR. You can also get pretty much &lt;span style="font-style: italic;"&gt;anything &lt;/span&gt;as a SlackBuild. Slackware offers a stable system to build on, with no need to waste time updating, and handling problems for, every package on the system.&lt;br /&gt;&lt;br /&gt;I was worried about Slackware for two reasons. First, the documentation could use some work. Not that you can't find answers. You just have to look all over the web to find what you are looking for. Nothing like the Arch wiki.&lt;br /&gt;&lt;br /&gt;Second, I was worried about dependency hell. Nope. Slackware includes most of what you'll need at the low levels, so most packages don't have many unfulfilled dependencies. Package management is very easy. Slackware doesn't offer dependency resolution and doesn't need to offer dependency resolution. The system is built properly, so it's just not an issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2613109606121517224?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2613109606121517224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2613109606121517224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2613109606121517224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2613109606121517224'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/05/moving-to-slackware.html' title='Moving to Slackware'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-372407493549308814</id><published>2008-03-07T11:25:00.000-08:00</published><updated>2008-03-07T11:35:35.788-08:00</updated><title type='text'>OOo is rapidly improving</title><content type='html'>I have traditionally been critical of some things in OOo, mostly Calc, which has been a drag on Linux and OOo as an office suite.&lt;br /&gt;&lt;br /&gt;It is now possible to make graphs that are similar to Excel (I can do anything I normally do in Excel using Calc now). It's still far from intuitive - like having to copy and paste into Writer in order to print a graph on its own page - but dramatically improved.&lt;br /&gt;&lt;br /&gt;It's much faster, and the text-to-columns conversion is better (basically it is still not a function but the option to parse the data automatically pops up anytime you paste data into a spreadsheet).&lt;br /&gt;&lt;br /&gt;It would be nice to have a real text-to-columns feature, and it is extremely frustrating that OOo thinks it knows better than the user which program should be used to open a file. You can save data as .csv and then open it in Calc. That is some remaining "sixth-grade programming class feel" that needs to be removed.&lt;br /&gt;&lt;br /&gt;By the time of OOo version 3 I expect great things. It's a pretty able replacement for MS Office now and will only get better. TeX support is something they should have done long before they actually did. R support should be added to Calc. That would give an unbelievable data analysis, plotting, and programming framework that would blow the doors off of Excel. I mean more than just setting up a connection to R. I mean using Calc as a frontend for common features in R, like a wizard for basic plotting tasks, or a weighted least squares regression with standard errors corrected for heteroskedasticity. &lt;span style="font-style: italic;"&gt;That &lt;/span&gt;would make Calc the tool of choice on any operating system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-372407493549308814?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/372407493549308814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=372407493549308814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/372407493549308814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/372407493549308814'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/03/ooo-is-rapidly-improving.html' title='OOo is rapidly improving'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2887918054227608095</id><published>2008-02-15T05:46:00.000-08:00</published><updated>2008-02-15T05:50:21.282-08:00</updated><title type='text'>Compiling packages from AUR in Archlinux</title><content type='html'>So now I'm completely on Arch and haven't really had much motivation to use Debian or any other distribution recently. I'm almost there - the only stuff left in my migration is not that important.&lt;br /&gt;&lt;br /&gt;I had some difficulty in compiling packages using yaourt, so after a little searching I came to find that you need to install with&lt;br /&gt;&lt;br /&gt;pacman -S base-devel&lt;br /&gt;&lt;br /&gt;in order to compile many things on AUR. I was getting errors such as glib.h not found. These are in the packages in base-devel. I just wish this were stated more clearly in the descriptions in the wiki. (Well, okay, I guess I could change that myself!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2887918054227608095?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2887918054227608095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2887918054227608095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2887918054227608095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2887918054227608095'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/02/compiling-packages-from-aur-in.html' title='Compiling packages from AUR in Archlinux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7228625468536794651</id><published>2008-02-06T07:46:00.000-08:00</published><updated>2008-02-06T07:48:15.548-08:00</updated><title type='text'>Sound in Archlinux</title><content type='html'>Another unanticipated difficulty with Arch: there is no sound.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;pacman -Sy alsa-lib alsa-utils&lt;br /&gt;pacman -S alsa-oss&lt;br /&gt;&lt;/pre&gt;I ran alsamixer from the terminal and unmuted the master volume by pressing the "m" key. This is described in the wiki under ALSA.&lt;br /&gt;&lt;br /&gt;I was very surprised that the volume would be muted by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7228625468536794651?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7228625468536794651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7228625468536794651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7228625468536794651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7228625468536794651'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/02/sound-in-archlinux.html' title='Sound in Archlinux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2013702302156277977</id><published>2008-02-06T05:51:00.000-08:00</published><updated>2008-02-15T05:52:38.653-08:00</updated><title type='text'>Printing in Archlinux</title><content type='html'>I was worried I might never get my printer working in Arch, which would have been kind of a big problem. I've got an HP LaserJet 1300 connected to a parallel port. Here is what I think I did to make it work.&lt;br /&gt;&lt;br /&gt;pacman -S cups ghostscript gsfonts&lt;br /&gt;pacman -S foomatic-filters hplip&lt;br /&gt;&lt;br /&gt;Open a browser and go to&lt;br /&gt;&lt;br /&gt;http://localhost:631&lt;br /&gt;&lt;br /&gt;This brings up the CUPS manager. Then click on "Add Printer" and follow the steps like usual. There is little guidance in the windows (though there should be guidance!) so after trying a couple of them, I chose&lt;br /&gt;&lt;br /&gt;LPT #1&lt;br /&gt;&lt;br /&gt;I set HP as the make, HP LaserJet 1300 Foomatic/hpijs as the model, and printed out a test page.&lt;br /&gt;&lt;br /&gt;Not difficult, but I did try a number of things along the way that are not listed here. Oh well, Arch was never intended to be a newbie distro. In Ubuntu, setting up the printer amounts to, well, doing nothing. It automatically installs if it is plugged in when Ubuntu is installed. Otherwise, you plug it in and Ubuntu will automatically install the driver for you.&lt;br /&gt;&lt;br /&gt;Now there is little left to complete my transition to using Arch as my full-time production machine. I've always got Debian as a backup if there are problems with Arch once I get into my day-to-day routine, which is a good test of any distro. I'll be honest, this is the first time I've been truly excited about anything in the Linux world for more than a year. The top distros all do the same things as they jump over themselves to see which is the best Windows clone. I'm happy to see there are still projects that push ahead in providing the best operating system.&lt;br /&gt;&lt;br /&gt;Edit: Printing from my HP LaserJet 1000 only worked using the note in the wiki on CUPS related to the HP LaserJet 1020, just replacing "1020" with "1000". Not as easy as Ubuntu, but nonetheless, not that difficult.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2013702302156277977?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2013702302156277977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2013702302156277977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2013702302156277977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2013702302156277977'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/02/printing-in-archlinux-i-was-worried-i.html' title='Printing in Archlinux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-4449541323314411674</id><published>2008-01-28T08:26:00.000-08:00</published><updated>2008-01-28T08:31:51.366-08:00</updated><title type='text'>Crux and T2 Experiences</title><content type='html'>Crux is an interesting distribution, but not for me. In addition to doing a lot of compiling, the documentation and help just aren't what they should be. For me it was a matter of not being able to get my internet connection working with DHCP.&lt;br /&gt;&lt;br /&gt;The documentation is of the form 'configure files X, Y, and Z'. That's just not enough for me.&lt;br /&gt;&lt;br /&gt;T2 was actually working, but the problem is that there would be a problem with compiling maybe 5% of the programs. My system was pretty simple, so there shouldn't have been that kind of problem. I did like the power of the Emerge-Pkg command to compile software. However, when you have to compile all dependencies and 5% fail, that makes it difficult to get something like XFCE working.&lt;br /&gt;&lt;br /&gt;I was right: a source distro is not for me. I want to be able to compile easily &lt;span style="font-style: italic;"&gt;once in a while&lt;/span&gt;. I'll have to set both Crux and T2 aside. I need better documentation and more binaries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-4449541323314411674?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/4449541323314411674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=4449541323314411674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4449541323314411674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/4449541323314411674'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/crux-and-t2-experiences.html' title='Crux and T2 Experiences'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6379686191721387931</id><published>2008-01-28T08:20:00.000-08:00</published><updated>2008-02-06T05:57:49.449-08:00</updated><title type='text'>A Couple More Pieces on Arch</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;I now consider myself to be an "Arch guy". A couple of problems that I should document in getting everything going:&lt;br /&gt;&lt;br /&gt;I had hideous fonts in Gnome. I installed the bitstream fonts package using&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:monospace;"&gt;&lt;br /&gt;&lt;/span&gt;pacman -S ttf-bitstream-vera&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and everything is better.&lt;br /&gt;&lt;br /&gt;To get kpdf, kdvi and kghostview, I had to install kdegraphics. It would be helpful if individual pieces of KDE such as kate, kwrite, kpdf, etc. would be accessible directly with pacman. They could be empty packages with appropriate dependencies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6379686191721387931?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6379686191721387931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6379686191721387931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6379686191721387931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6379686191721387931'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/couple-more-pieces-on-arch.html' title='A Couple More Pieces on Arch'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-8276187918447482431</id><published>2008-01-28T08:10:00.000-08:00</published><updated>2008-01-28T08:11:53.282-08:00</updated><title type='text'>Efficient Computing in R</title><content type='html'>I sometimes find these seemingly trivial differences to be fascinating. Here's a simple, easy to read program to generate a million observations from a standard normal distribution using MCMC (never mind why you'd want to do so, it's just for fun):&lt;br /&gt;&lt;br /&gt;obs &lt;- 1000000&lt;br /&gt;print(date())&lt;br /&gt;series &lt;- matrix(0)&lt;br /&gt;for (ii in 1:obs) {&lt;br /&gt;   a &lt;- runif(1,min=-10,max=10)&lt;br /&gt;   b &lt;- series[nrow(series)]&lt;br /&gt;   r &lt;- dnorm(a)/dnorm(b)&lt;br /&gt;   d &lt;- runif(1)&lt;br /&gt;   if (d &lt;= r) {&lt;br /&gt;      series &lt;- rbind(series,a)&lt;br /&gt;   } else {&lt;br /&gt;      series &lt;- rbind(series,b)&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;print(date())&lt;br /&gt;&lt;br /&gt;An alternative that does the same thing is&lt;br /&gt;&lt;br /&gt;obs &lt;- 1000000&lt;br /&gt;print(date())&lt;br /&gt;series &lt;- matrix(0,ncol=1,nrow=obs)&lt;br /&gt;for (ii in 2:obs) {&lt;br /&gt;   a &lt;- runif(1,min=-10,max=10)&lt;br /&gt;   b &lt;- series[ii-1]&lt;br /&gt;   r &lt;- dnorm(a)/dnorm(b)&lt;br /&gt;   d &lt;- runif(1)&lt;br /&gt;   if (d &lt;= r) {&lt;br /&gt;      series[ii] &lt;- a&lt;br /&gt;   } else {&lt;br /&gt;      series[ii] &lt;- b&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;print(date())&lt;br /&gt;&lt;br /&gt;Another alternative with just one change in the third line is&lt;br /&gt;&lt;br /&gt;obs &lt;- 1000000&lt;br /&gt;print(date())&lt;br /&gt;series &lt;- matrix(0.0,ncol=1,nrow=obs)&lt;br /&gt;for (ii in 2:obs) {&lt;br /&gt;   a &lt;- runif(1,min=-10,max=10)&lt;br /&gt;   b &lt;- series[ii-1]&lt;br /&gt;   r &lt;- dnorm(a)/dnorm(b)&lt;br /&gt;   d &lt;- runif(1)&lt;br /&gt;   if (d &lt;= r) {&lt;br /&gt;      series[ii] &lt;- a&lt;br /&gt;   } else {&lt;br /&gt;      series[ii] &lt;- b&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;print(date())&lt;br /&gt;&lt;br /&gt;And the last alternative is&lt;br /&gt;&lt;br /&gt;obs &lt;- 1000000&lt;br /&gt;print(date())&lt;br /&gt;series &lt;- vector(mode="numeric",length=obs)&lt;br /&gt;for (ii in 2:obs) {&lt;br /&gt;   a &lt;- runif(1,min=-10,max=10)&lt;br /&gt;   b &lt;- series[ii-1]&lt;br /&gt;   r &lt;- dnorm(a)/dnorm(b)&lt;br /&gt;   d &lt;- runif(1)&lt;br /&gt;   if (d &lt;= r) {&lt;br /&gt;      series[ii] &lt;- a&lt;br /&gt;   } else {&lt;br /&gt;      series[ii] &lt;- b&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;print(date())&lt;br /&gt;&lt;br /&gt;I was shocked by the difference performance of these programs that all do the same thing, yielding exactly the same results, with the only difference being a seemingly trivial change in the way the results are collected. The runtimes are&lt;br /&gt;&lt;br /&gt;Method 1: 23 minutes 58 seconds&lt;br /&gt;Method 2: 19 minutes 28 seconds&lt;br /&gt;Method 3: 19 minutes 13 seconds&lt;br /&gt;Method 4: 24 seconds&lt;br /&gt;&lt;br /&gt;That's a big performance gap! I am unaware of any comprehensive resource explaining how to optimize your computations in R. I've used the ACML to get large performance improvements, but nothing like this. I only did the investigation because I started with the first program and noticed that it didn't scale very well: doubling the size of the simulation would more than double the time to run, in some cases by five times or more.&lt;br /&gt;&lt;br /&gt;I guess there's no substitute for experience. The myth that fast processors and cheap memory have eliminated the need for knowledge about computation is just that, a myth. Fast processors and cheap memory just mean we can tackle new problems. We still have to know what we're doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-8276187918447482431?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/8276187918447482431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=8276187918447482431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8276187918447482431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/8276187918447482431'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/efficient-computing-in-r.html' title='Efficient Computing in R'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-5416219376216342964</id><published>2008-01-10T21:00:00.000-08:00</published><updated>2008-01-10T21:04:55.247-08:00</updated><title type='text'>T2 Experiences</title><content type='html'>T2 seems to be an interesting source-based distro. Unfortunately, there are a few holes in the documentation.&lt;br /&gt;&lt;br /&gt;If you download the binary .iso, you still need to download the source tarball and unpack it in the root directory (/). It is necessary to go into the t2-x.y.z directory to run the scripts properly. I'm still confused about some of the basic configuration issues, and have read the full documentation at least twice.&lt;br /&gt;&lt;br /&gt;Nonetheless, it appears to be easier than Gentoo. And a whole lot faster to get going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-5416219376216342964?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/5416219376216342964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=5416219376216342964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5416219376216342964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/5416219376216342964'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/t2-experiences.html' title='T2 Experiences'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-7376720907523561894</id><published>2008-01-09T09:32:00.000-08:00</published><updated>2008-02-06T06:14:55.744-08:00</updated><title type='text'>Open to a new distro</title><content type='html'>I'm looking for the "one best distro" for my needs. I want something that&lt;br /&gt;1. Offers a binary installation&lt;br /&gt;2. Allows for a minimal base install to build on&lt;br /&gt;3. Provides reasonable binary package management with dependency resolution&lt;br /&gt;4. Makes building new/custom packages easy&lt;br /&gt;&lt;br /&gt;Debian has been great, but it is a binary distribution, and you should not mistake it for something else. The last characteristic of a my ideal distro is an area where Debian falls short.&lt;br /&gt;&lt;br /&gt;When I became serious about dumping Windows for Linux (as opposed to playing with Linux) I quickly learned that you should stick with the most popular few distros. They are "out of the box" distros. They're easy to install, have good documentation, good forums, and a good selection of binary packages. Once you move to a distro with fewer resources, you sacrifice too much, particularly in terms of package selection.&lt;br /&gt;&lt;br /&gt;I've come to realize that I no longer want a distribution that does everything for me. I now want a distribution that makes it easy to customize and build packages. I will never find a distribution that works out of the box just the way I want it to, so I need support in building my own distribution the way I want it. When you move into this, the resources of the distro are much less important, because you can build the few specialized apps you want easily. And the competence of the average user is far greater than that of the out of the box distros. A few expert users are a substitute for thousands of limited knowledge users.&lt;br /&gt;&lt;br /&gt;Arch does a good job in all the areas. I am very happy with it, have figured out the ABS, and currently have a Virtualbox image with all the latest and greatest, fully customized. I do not want to stop looking now, though. This shift, that started about a month ago, has radically changed my view of computing. I want to make sure I don't stop with Arch just because it is the first DIY distro that impresses me.&lt;br /&gt;&lt;br /&gt;Some others I have considered thus far:&lt;br /&gt;1. Frugalware - This is the segmentation fault distribution. Even if I do get the CD to boot, it will probably give me trouble somewhere. The installation locks up randomly. The installation is a beast if you are not careful in choosing packages (once my Virtualbox disk filled up) you can get the most bloat of any distro. One time I even managed to get it to install fully, but in the configuration it gave a segmentation fault. While it looks like a good distro, and maybe would be if it were installed to the hard drive, my experience has been horrible. I will set it aside for now. {Edit: I eventually got it to install in Virtualbox. A distribution with potential, but it appears the community is small and a pack of teenage losers. It also appears to depend too much on a single developer. If he finds a girlfriend, this distro is screwed, as good as it is. I'd probably go with Frugalware if they had a better community and relied less on one dev. I like it better than Arch.}&lt;br /&gt;&lt;br /&gt;2. FreeBSD - Locks up on connecting to ftp.&lt;br /&gt;&lt;br /&gt;3. Other BSD's - If they have easy configuration and installation, without having to download a big CD (or DVD) I will try them. I'm not seeing that. {Edit: Tried PC-BSD in VMWare, the image downloaded from their website, it's great but KDE-centric. No way I'm going with KDE.}&lt;br /&gt;&lt;br /&gt;4. Gobolinux - Known for the filesystem, but also makes it easy to compile software. Doesn't work with Virtualbox, so it's out. {Edit: I ran it in VMWare. Gnome is not available, so Gobolinux is out anyway. Also, a bit short on binary package selection - I'd be compiling most of my software.}&lt;br /&gt;&lt;br /&gt;5. Vector 5.9 - I don't know about the software compiling thing, but it doesn't matter because it doesn't boot in Virtualbox. {Edit: This is the first distro to actually not even boot into VMWare. The CD works outside of virtualization software.}&lt;br /&gt;&lt;br /&gt;6. Zenwalk - A spectacular binary distro. I have not attempted to build packages yet so I don't know. I doubt seriously I will use XFCE as my main desktop, no matter how good Zenwalk is. {A couple of problems. First, Zenwalk 5 won't boot into Virtualbox. Second, they think it's okay to disregard parts of a license if they don't think those parts are important. Doesn't work like that: either provide the source, or shut down your distro. I was sickened by the response to the poster asking where to download the sources. Pure garbage. I will never look at Zenwalk again until they decide that they should comply with their legal obligations.}&lt;br /&gt;&lt;br /&gt;At the moment I have a couple of others on my list to try: Crux and T2. Crux doesn't really excite me (no dependency resolution, for instance) &lt;span style="font-weight: bold;"&gt;{edit: prt-get does have dependency resolution}&lt;/span&gt; and T2 is mostly a source distribution. But I'll give them a try and see what happens. At this moment, it appears Arch will be replacing Debian. It will take a couple of months to migrate over and make sure I can do everything before I move.&lt;br /&gt;&lt;br /&gt;I'll keep looking, and really wish these other distros would work better with Virtualbox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-7376720907523561894?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/7376720907523561894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=7376720907523561894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7376720907523561894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/7376720907523561894'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/open-to-new-distro.html' title='Open to a new distro'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-2907906981964475133</id><published>2008-01-02T12:18:00.000-08:00</published><updated>2008-01-02T12:27:34.387-08:00</updated><title type='text'>Trying Different Distros</title><content type='html'>I'm always on the hunt for a new distro. What I want is something like Debian, but with good support for compiling packages either for customization or for getting cutting-edge versions. Debian's system for that is IMO awful.&lt;br /&gt;&lt;br /&gt;Two more distros I will try are Frugalware and Gobolinux. Gobolinux chokes inside Virtualbox, so that appears to be out for a while. That's unfortunate because they claim to have good compiling support (unfortunately they have no where near the binary package selection of Arch). Frugalware installed so much software that it used up all the hard drive space in the virtual machine. That doesn't really seem very frugal to me.&lt;br /&gt;&lt;br /&gt;Others that I would give a try if I had time are Crux (which apparently played a role in the development of Arch) and T2. I've tried Gentoo and it just isn't to my taste. Neither is Sabayon. T2 looks great but would probably take too much time, given that you build everything from scratch. Crux does not appear to have much documentation, and they do not seem welcoming to newcomers who might ask questions.&lt;br /&gt;&lt;br /&gt;Any distro with a user-friendly way to compile packages that are downloaded from that project's website is a candidate for me. Binary package selection is also important, but for what I use, most distros make the cut. I'm looking at Vector and see what they have in that regard. It appears to be one of the "do it for you" distros, though, with not much emphasis on compiling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-2907906981964475133?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/2907906981964475133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=2907906981964475133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2907906981964475133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/2907906981964475133'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/trying-different-distros.html' title='Trying Different Distros'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-968213429722813446</id><published>2008-01-02T12:11:00.000-08:00</published><updated>2008-01-28T08:17:28.977-08:00</updated><title type='text'>Problems with Qt 4 in Arch</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;As mentioned below, I like Arch Linux a lot. It has a good system for building new packages, without requiring the compilation of most of the software on your system. (Seriously, outside of maybe four or five programs, is there any need for the vast majority of Linux users to compile anything? Arch is wonderful if you want cutting-edge of just a few packages.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;I'm having difficulty compiling the latest LyX package. 1.5.2 is available in the testing repos; I'm just doing it to confirm that it works, so it's there when I need it. I keep getting a message that the Qt 4 libraries are not found.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;I'm compiling the Qt 4 libraries from the Trolltech website. Hopefully that does the trick. I will update this post as I either learn something or go down in flames trying.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Update 1: It worked! About 2 hours from start to finish on a pretty good machine - though inside Virtualbox - and it is done. Now I will see if it works.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Update 2: After significant playing around with the PKGBUILD, I had to tell it where to find the qt4 directories. Here is the PKGBUILD that worked for me:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre wrap=""&gt;# $Id: PKGBUILD,v 1.14 2007/12/15 03:26:29 jason Exp $&lt;br /&gt;# Maintainer: Jason Chu &lt;a class="moz-txt-link-rfc2396E" href="mailto:jason@archlinux.org"&gt;&lt;jason@archlinux.org&gt;&lt;/a&gt;&lt;br /&gt;pkgname=lyx&lt;br /&gt;pkgver=1.5.3&lt;br /&gt;pkgrel=1&lt;br /&gt;pkgdesc="An advanced open-source document processor."&lt;br /&gt;arch=(i686 x86_64)&lt;br /&gt;url='&lt;a class="moz-txt-link-freetext" href="http://www.lyx.org/"&gt;http://www.lyx.org&lt;/a&gt;'&lt;br /&gt;depends=('qt4' 'tetex' 'python' 'perl' 'imagemagick' 'aspell'&lt;br /&gt;'aiksaurus')&lt;br /&gt;license=('GPL2')&lt;br /&gt;source=(&lt;a class="moz-txt-link-freetext" href="ftp://ftp.lyx.org/pub/lyx/stable/$pkgname-$pkgver.tar.gz"&gt;ftp://ftp.lyx.org/pub/lyx/stable/$pkgname-$pkgver.tar.gz&lt;/a&gt;)&lt;br /&gt;#md5sums=('29c694fb042769bd3c886681bb922cfc')&lt;br /&gt;&lt;br /&gt;build() {&lt;br /&gt; cd $startdir/src/$pkgname-$pkgver&lt;br /&gt; ./configure --prefix=/usr \&lt;br /&gt;   --with-frontend=qt4 \&lt;br /&gt;   --with-qt4-dir=/usr/local/Trolltech/Qt-4.3.3 \&lt;br /&gt;   --with-extra-lib=/usr/local/Trolltech/Qt-4.3.3/lib \&lt;br /&gt;   --with-extra-inc=/usr/local/Trolltech/Qt-4.3.3/include&lt;br /&gt; make || return 1&lt;br /&gt; make prefix=$startdir/pkg/usr install&lt;br /&gt;}&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;I am not sure if things will be different now that qt4 has become 'qt' in the Arch repositories and qt3 has become 'qt3'.&lt;br /&gt;&lt;br /&gt;Luckily, this is (a) the only problem I've had with compiling (though some of the AUR stuff might give  you trouble) and (b) there's no real need to compile LyX anyway. It's fairly up to date in the Arch repos. I just did it to make sure it could be done.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-968213429722813446?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/968213429722813446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=968213429722813446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/968213429722813446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/968213429722813446'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/problems-with-qt-4-in-arch.html' title='Problems with Qt 4 in Arch'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-6282975677615842146</id><published>2008-01-02T12:08:00.000-08:00</published><updated>2008-01-02T12:10:40.963-08:00</updated><title type='text'>Drawing Programs for Linux</title><content type='html'>GIMP and Krita are powerful graphics programs for Linux. They are also difficult to use, and even more difficult for the new user to learn. Here are two simple programs for fast, basic tasks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/sf-xpaint/"&gt;XPaint&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gnu.org/software/gpaint/"&gt;Gpaint&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Both are available in the Debian repositories (as well as the repositories of many other distributions). Gpaint has a much nicer interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-6282975677615842146?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/6282975677615842146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=6282975677615842146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6282975677615842146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/6282975677615842146'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2008/01/drawing-programs-for-linux.html' title='Drawing Programs for Linux'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27706022.post-3598663247950373454</id><published>2007-12-31T08:26:00.000-08:00</published><updated>2007-12-31T08:30:23.559-08:00</updated><title type='text'>Error Starting XFCE in Arch</title><content type='html'>An error I got upon starting XFCE4 was&lt;br /&gt;&lt;br /&gt;"Could not look up internet address for myhost. This will prevent Xfce from operating correctly. It may be possible to correct the problem by adding arch to the file /etc/hosts on your system"&lt;br /&gt;&lt;br /&gt;I found an answer in the Arch forums. I used the command&lt;br /&gt;&lt;br /&gt;nano /etc/hosts&lt;br /&gt;&lt;br /&gt;as root, then added&lt;br /&gt;&lt;br /&gt;127.0.0.1 myhost.workgroup myhost&lt;br /&gt;&lt;br /&gt;and the problem was solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27706022-3598663247950373454?l=lmf-ramblings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmf-ramblings.blogspot.com/feeds/3598663247950373454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27706022&amp;postID=3598663247950373454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3598663247950373454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27706022/posts/default/3598663247950373454'/><link rel='alternate' type='text/html' href='http://lmf-ramblings.blogspot.com/2007/12/error-starting-xfce-in-arch.html' title='Error Starting XFCE in Arch'/><author><name>lmf</name><uri>http://www.blogger.com/profile/09147117300930142873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
