<?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-3329511750176683717</id><updated>2011-06-24T09:04:59.583+02:00</updated><category term='microsoft'/><category term='rants'/><category term='animals'/><category term='other'/><category term='emacs'/><category term='diy'/><category term='tips'/><category term='thoughts'/><category term='programming'/><category term='electronics'/><title type='text'>chop-mode</title><subtitle type='html'>Emacs stuff. Programming stuff. Other stuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-6686549333531055411</id><published>2008-10-16T22:16:00.004+02:00</published><updated>2008-10-16T22:22:48.774+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Switching to Wordpress</title><content type='html'>For various reasons, I have decided to &lt;a href="http://chopmo.wordpress.com"&gt;move my blog to Wordpress&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I have been slightly unhappy with Blogger for a while, mainly due to small annoyances. Also, although I like the theme I have installed here, it has dawned on me that the fonts are not very easy to read (I know, probably easy to fix). &lt;br /&gt;&lt;br /&gt;But the main reason for the switch is because I haven't been able to find a way of posting entries from inside Emacs. On Wordpress, this was relatively easy to get working. &lt;br /&gt;&lt;br /&gt;I will post an entry on the new blog, describing my experiences with the two services in more detail. &lt;br /&gt;&lt;br /&gt;Bye Blogger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-6686549333531055411?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/6686549333531055411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=6686549333531055411' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/6686549333531055411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/6686549333531055411'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/10/switching-to-wordpress.html' title='Switching to Wordpress'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-3821895745424957036</id><published>2008-10-15T17:32:00.005+02:00</published><updated>2008-10-15T17:51:14.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>JAOO 2008 recap</title><content type='html'>So, time for a (late) JAOO 2008 recap. How was it this year?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SPYPDRaybpI/AAAAAAAAACI/IJqhY1DlUeo/s1600-h/jaoo_speaker_aarhus_08.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SPYPDRaybpI/AAAAAAAAACI/IJqhY1DlUeo/s400/jaoo_speaker_aarhus_08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5257406163891416722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The keynotes&lt;/h2&gt;&lt;br /&gt;Unfortunately, the keynotes were clearly lacking this year, but in very different ways.&lt;br /&gt;&lt;br /&gt;Monday, Anders Hejlsberg talked about the future of programming languages. Or should I say, the future of programming languages on the .NET platform. For which there is currently support in Visual Studio. Don't get me wrong, I actually like .NET, even though &lt;a href="http://chopmo.blogspot.com/2008/07/why-i-dont-like-microsoft.html"&gt;I hate Windows&lt;/a&gt;. But for the opening keynote, talking about F#, LINQ and P-LINQ (with the Pascal background intro that seems to be becoming the slightly dull backdrop for Hejlsberg's talks) simply doesn't cut it. And switching to VS &lt;b&gt;three times&lt;/b&gt; to do live demos is just missing the mark by a mile. I was very disappointed with this talk, but mostly because I know how brilliant Hejlsberg is, so I expected more than just an MS-centric view of the future.&lt;br /&gt;&lt;br /&gt;Lars Bak talked about V8 tuesday. This keynote was a bit special, because obviously it had to be planned some time in advance, and the V8 project was only revealed very recently. &lt;br /&gt;&lt;br /&gt;Working in the office next to Lars and the rest of the Google team here in Aarhus, I was very curious to hear more about what they have been up to for the last few years. In that respect, I certaintly wasn't disappointed. The talk was rich on details, so having no experience with VMs (in the V8 sense, not the VMware sense :-)), I was lost at times. But this was no problem, and it was great to hear Lars explain about the challenges they've been facing in creating V8. Also the QnA session was very good.&lt;br /&gt;&lt;br /&gt;So I was very pleased with this keynote, actually. But as someone pointed out to me later on, the topic really wasn't keynote material. Interesting as it was, and popular as the topic is, it was obviously only relevant for a fraction of the audience. Nevertheless, I personally enjoyed this one.&lt;br /&gt;      &lt;br /&gt;Wednesday's keynote was a complete disaster. The otherwise brilliant Guy Steele and Richard Gabriel (who is also very bright, I'm sure) did their "50 in 50" routine, and I have to say that I absolutely loathed every minute of it.&lt;br /&gt;&lt;br /&gt;The tagline was something like: 50 remarks in 50 minutes, each 50 words long (if I recall correctly). The remarks were interspersed with images, audio and video clips. The substance of the talk was a tour through the last many (50?) years of programming languages, sprinkled with uber-geeky humour. Definitely not for me, but fortunately, judging from the reaction of the audience, others liked it better.&lt;br /&gt;&lt;br /&gt;However, I'm pretty sure noone enjoyed the fact that they went more than 20 minutes over their time slot. Given that the talk was so rigorous in its form, I simply don't understand how this could happen.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The talks&lt;/h2&gt;&lt;br /&gt;I didn't see as many talks as I would have liked this year, but I did see some good stuff.&lt;br /&gt;&lt;br /&gt;Guy Steele gave a &lt;b&gt;great&lt;/b&gt; talk on Fortress. Not unlike the one he gave last year (or was it 2006?) but with even more substance. Some of the maths stuff was over my head, but that didn't matter. The important this was that the talk was interesting and really whet my appetite for learning more about Fortress.&lt;br /&gt;&lt;br /&gt;Also, Sun ran a great little competition in the exhibition area this year. A guy came around to our booth with 2-page Fortress program that solves Sudoku puzzles in a massively parallel fashion. The challenge was to figure out how many threads of execution are used, and the prize was a Sun-branded USB stick with the latest snapshot of Fortress on it. I still have the program on my home office wall, and when I feel like it, I look over it and understand another little chunk. Unambitious, you may say, but a lot better than putting it away and forgetting all about it.&lt;br /&gt;&lt;br /&gt;Wednesday, a guy from LEGO gave a pretty weak talk about a project that actually looks very interesting. They're building a new "robotics platform" called WeDo, which is basically a $30 (IIRC) kit with a few motors and sensors. This was a challenge spurred by the OLPT project, so various measures have been taken to target it at developing countries. For example, the robot is connected to the laptop with a USB cable because batteries may not be readily available. A very cool project, but the presentation was really a drag... For instance, I now know that LEGO uses Perforce for their software projects, and I would have lived happily on without that piece of information.&lt;br /&gt;&lt;br /&gt;Lastly, the talk "The lively kernel" by Dan Ingalis was awesome! I urge you to check out &lt;a href='http://www.youtube.com/watch?v=gGw09RZjQf8'&gt;this video demo&lt;/a&gt; or simply &lt;a href='http://research.sun.com/projects/lively/index.xhtml'&gt;have a go at it&lt;/a&gt; yourself. I'm very curious to see what this project might lead to in the future.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The exhibition floor&lt;/h2&gt;&lt;br /&gt;Again this year, we had a VMware Denmark stand, and we got to show off our software and tell people what we do.&lt;br /&gt;&lt;br /&gt;One thing that we all noticed was how much more aware of virtualization everyone was this year. At last year's JAOO, we were very surprised to learn how many developers simple had no idea that virtualization existed as a concept. But this year, it was different. Maybe because we handed out so many VMware Workstation coupons last year ;-)&lt;br /&gt;&lt;br /&gt;On the demo side, we had taken the time to get a VMotion setup up and running this year. Two ESX hosts and a Linux VM running some streaming video server being moved between them. And obviously a third machine running Virtual Center and a VLC player showing the streaming video without a glitch as the VM was moved. A lot of the attendees didn't know that this was possible and wanted to know the details of how it works.&lt;br /&gt;&lt;br /&gt;Also, we brought our Mac Mini running the recently-released Fusion 2. With all the Google Chrome hype in full effect, it was a lot of fun showing off Chrome running (apparently) natively on the Mac! Of course, it was running in a Windows VM in unity mode, but we did manage to fool a few people :-)&lt;br /&gt;&lt;br /&gt;Version 2 of Fusion also adds the ability to run Linux VMs in Unity mode, so we were able to fire up Chrome, Safari and Evolution side-by-side on the (struggling) Mini.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;I didn't go to a lot of talks this year (I was at work most of Tuesday) so I shouldn't pass judgment on the conference as a whole. But I do think the keynotes left a lot to be desired.&lt;br /&gt;&lt;br /&gt;Also, I think the Trifork team should reconsider the number of tracks on the conference. Judging from various Ruby-related blogs, the trend for conferences is clearly in the direction of fewer tracks (often just one) and much shorter talks. &lt;br /&gt;&lt;br /&gt;I think this makes perfect sense. We go to conferences to widen our perspectives on software development in general. And you really don't need 50 minutes to present new ideas or projects. With so many tracks going on at the same time, attendees constantly need to discard a lot of material. This would be less of a problem if there wasn't such a big overlap between the topics of the tracks. But as it is, I think most developers wish they could follow 2-3 concurrent tracks. This leaves you with a constant feeling of missing out on interesting stuff (which you probably are!), and if you're unlucky enough to attend a boring talk, its 50 precious minutes gone.&lt;br /&gt;&lt;br /&gt;I think the organizers should consider cutting the number of tracks and the length of each talk in half. The talks should inspire and engage the audience, and this can easily be done in 25 minutes, leaving us with an urge to know more. The success of a talk should be measured by the surge of hits to the project's website after the talk, not by the number of people still present in the room after 50 minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-3821895745424957036?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/3821895745424957036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=3821895745424957036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/3821895745424957036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/3821895745424957036'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/10/jaoo-2008-recap.html' title='JAOO 2008 recap'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KzEvDu8TrZ0/SPYPDRaybpI/AAAAAAAAACI/IJqhY1DlUeo/s72-c/jaoo_speaker_aarhus_08.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-8651804424194692233</id><published>2008-10-02T23:58:00.003+02:00</published><updated>2008-10-03T00:36:29.365+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><title type='text'>Atheism</title><content type='html'>No matter if you're an atheist or not, these articles are really worth a read: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.newsweek.com/id/160080/page/1"&gt;When Atheists Attack&lt;/a&gt; by Sam Harris, about Sarah Palin. Very well written and definitely thought-provoking, whatever your stance is on politics and religion. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bofh.org.uk/articles/2008/09/20/and-if-there-were-what-then"&gt;And if there were, what then?&lt;/a&gt; by Piers Cawley, about atheism in general. An excellent read, and very much to the point. &lt;br /&gt;&lt;br /&gt;I have been thinking a lot about this lately (especially since reading these articles). Unlike Piers, I'm not quite ready to declare myself an all out atheist just yet. Mostly because I'm reluctant to completely reject something I know very little about. &lt;br /&gt;&lt;br /&gt;But what I can't understand or accept is the terrible destuctiveness of the way religion is practiced around the world. All religions claim to be peaceful, yet people are slaughtered every day in the name of some religion, and entire populations are deprived of progress because religion is deemed more important than freedom. What is the point?! I should really read more about this and learn. &lt;br /&gt;&lt;br /&gt;Watching the news every day nudges me steadily in the direction of atheism. From a distance, religious behaivour looks like madness to me, plain and simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-8651804424194692233?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/8651804424194692233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=8651804424194692233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8651804424194692233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8651804424194692233'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/10/atheism.html' title='Atheism'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-8670545170048884908</id><published>2008-09-03T21:53:00.013+02:00</published><updated>2008-09-14T19:20:30.660+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Quickly jumping to symbols</title><content type='html'>This is brilliant. &lt;br /&gt;&lt;br /&gt;For a while, I have been using &lt;tt&gt;&lt;a href="http://www.emacswiki.org/cgi-bin/wiki/InteractivelyDoThings"&gt;ido&lt;/a&gt;&lt;/tt&gt; to quickly jump between buffers and files by just typing any part of the file/buffer name I want. In fact, typing any sequence of letters narrows the interactive search to candidates with names that contain those letters in that order: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &lt;b&gt;fb&lt;/b&gt; -&gt; &lt;b&gt;F&lt;/b&gt;oo&lt;b&gt;b&lt;/b&gt;ar, &lt;b&gt;F&lt;/b&gt;rancisGail&lt;b&gt;B&lt;/b&gt;rown&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But for finding method definitions in a big source file, I have always just used &lt;tt&gt;isearch&lt;/tt&gt;. It turns out that there is a better way. &lt;br /&gt;&lt;br /&gt;By combining &lt;tt&gt;imenu&lt;/tt&gt; with &lt;tt&gt;ido&lt;/tt&gt;, I can quickly find methods as well: &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SL7sYVNaSoI/AAAAAAAAACA/tWQeUIgL9Hw/s1600-h/ido-imenu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SL7sYVNaSoI/AAAAAAAAACA/tWQeUIgL9Hw/s400/ido-imenu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5241886919060245122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All it takes is this method in my &lt;tt&gt;init.el&lt;/tt&gt;: &lt;br /&gt;&lt;small&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="lisp"&gt;&lt;br /&gt;(defun ido-goto-symbol ()&lt;br /&gt;  "Will update the imenu index and then use ido to select a &lt;br /&gt;   symbol to navigate to"&lt;br /&gt;  (interactive)&lt;br /&gt;  (imenu--make-index-alist)&lt;br /&gt;  (let ((name-and-pos '())&lt;br /&gt;        (symbol-names '()))&lt;br /&gt;    (flet ((addsymbols (symbol-list)&lt;br /&gt;                       (when (listp symbol-list)&lt;br /&gt;                         (dolist (symbol symbol-list)&lt;br /&gt;                           (let ((name nil) (position nil))&lt;br /&gt;                             (cond&lt;br /&gt;                              ((and (listp symbol) (imenu--subalist-p symbol))&lt;br /&gt;                               (addsymbols symbol))&lt;br /&gt;   &lt;br /&gt;                              ((listp symbol)&lt;br /&gt;                               (setq name (car symbol))&lt;br /&gt;                               (setq position (cdr symbol)))&lt;br /&gt;   &lt;br /&gt;                              ((stringp symbol)&lt;br /&gt;                               (setq name symbol)&lt;br /&gt;                               (setq position (get-text-property 1 'org-imenu-marker symbol))))&lt;br /&gt;   &lt;br /&gt;                             (unless (or (null position) (null name))&lt;br /&gt;                               (add-to-list 'symbol-names name)&lt;br /&gt;                               (add-to-list 'name-and-pos (cons name position))))))))&lt;br /&gt;      (addsymbols imenu--index-alist))&lt;br /&gt;    (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names))&lt;br /&gt;           (position (cdr (assoc selected-symbol name-and-pos))))&lt;br /&gt;      (goto-char position))))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/small&gt;&lt;br /&gt;I have bound it to &lt;tt&gt;C-t&lt;/tt&gt;, because I realized that I don't use &lt;tt&gt;transpose-chars&lt;/tt&gt; (or whichever transpose method was there..I don't use any of those, really).&lt;br /&gt;&lt;br /&gt;I found this trick on the &lt;a href="http://www.emacswiki.org/cgi-bin/wiki/ImenuMode"&gt;&lt;tt&gt;imenu&lt;/tt&gt; wiki page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-8670545170048884908?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/8670545170048884908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=8670545170048884908' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8670545170048884908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8670545170048884908'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/09/quickly-jumping-to-symbols.html' title='Quickly jumping to symbols'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KzEvDu8TrZ0/SL7sYVNaSoI/AAAAAAAAACA/tWQeUIgL9Hw/s72-c/ido-imenu.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-4726228173851859398</id><published>2008-08-17T01:10:00.019+02:00</published><updated>2008-08-20T02:10:09.954+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>My first AVR-based project</title><content type='html'>I have always been fascinated by electronics. As a child, I tore apart several rather expensive appliances to see how they worked. Much to my parents' grief, of course. &lt;br /&gt;&lt;br /&gt;However, since I got into software development, I haven't given it much thought. Moving several levels of abstraction away from the hardware, your focus shifts quickly to completely different areas. &lt;br /&gt;&lt;br /&gt;But recently, &lt;a href="http://www.jenrathbun.com/Electronics/CatFaucet.html"&gt;this project&lt;/a&gt; caught my attention for some reason. So even though I ended up implementing it &lt;a href="http://chopmo.blogspot.com/2008/07/cat-faucet-crude-edition.html"&gt;completely differently&lt;/a&gt;, I couldn't stop thinking about the potential of being able to write code for tiny, cheap embedded processors. &lt;br /&gt;&lt;br /&gt;I'm not sure why I have never thought of this before. I have considered writing software for PDAs, but they're pretty expensive, and the platform choices are poor. Windows Mobile is a joke, and Palm OS is not very appealing either. &lt;br /&gt;&lt;br /&gt;So I decided to take a big step closer to the iron. Knowing nothing about the state of this field, I simply googled for a few starting points. I ended up buying the very cool &lt;a href="http://www.ladyada.net/make/usbtinyisp/"&gt;USBtinyISP&lt;/a&gt; programmer kit (and absolutely enjoyed the process of assembling it). &lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm2.static.flickr.com/1388/531946274_b6aec192ba.jpg" width=316/&gt;&lt;br /&gt;&lt;br /&gt;Also, I got the &lt;a href="http://www.active-robots.co.uk/attiny26-development-board-p-249.html"&gt;ATtiny26 development board&lt;/a&gt; from Active Robots. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.active-robots.co.uk/images/at26db-500.jpg"  width=316/&gt;&lt;br /&gt;&lt;br /&gt;This last item, I have later discovered, is probably somewhat outdated. What you want for electronics prototyping these days is the&lt;a href="http://www.arduino.cc/"&gt; Arduino&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.arduino.cc/en/uploads/Main/arduino316.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Anyway, the great thing about the ATtiny is that it's cheap (the processor itself is about $4) and it doesn't consume a lot of power. &lt;br /&gt;&lt;br /&gt;OK, so what did I do for my debut project? Nothing very interesting, I'm afraid. I wrota a program that simply morses a sentence using the LED built into the development board. I used the GNU toolchain (avr-libc et al) for writing the program and &lt;a href="http://www.nongnu.org/avrdude/"&gt;avrdude&lt;/a&gt; for flashing it onto the processor. Works great on both Linux and OSX. &lt;br /&gt;&lt;br /&gt;In action, this is what it looks like:  &lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BHmiXrM4KZk&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/BHmiXrM4KZk&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;And yes, I realize that the quality of the video is too crappy to distinguish the pulses. &lt;br /&gt;&lt;br /&gt;Here is the complete source code for this project (sorry about the formatting):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="cpp"&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * The morse alphabet.&lt;br /&gt; *&lt;br /&gt; * 0: Short pulse&lt;br /&gt; * 1: Long pulse&lt;br /&gt; */&lt;br /&gt;const char ltr_a[] PROGMEM = "01";&lt;br /&gt;const char ltr_b[] PROGMEM = "1000";&lt;br /&gt;const char ltr_c[] PROGMEM = "1010";&lt;br /&gt;const char ltr_d[] PROGMEM = "100";&lt;br /&gt;const char ltr_e[] PROGMEM = "0";&lt;br /&gt;const char ltr_f[] PROGMEM = "0010";&lt;br /&gt;const char ltr_g[] PROGMEM = "110";&lt;br /&gt;const char ltr_h[] PROGMEM = "0000";&lt;br /&gt;const char ltr_i[] PROGMEM = "00";&lt;br /&gt;const char ltr_j[] PROGMEM = "0111";&lt;br /&gt;const char ltr_k[] PROGMEM = "101";&lt;br /&gt;const char ltr_l[] PROGMEM = "0100";&lt;br /&gt;const char ltr_m[] PROGMEM = "11";&lt;br /&gt;const char ltr_n[] PROGMEM = "10";&lt;br /&gt;const char ltr_o[] PROGMEM = "111";&lt;br /&gt;const char ltr_p[] PROGMEM = "0110";&lt;br /&gt;const char ltr_q[] PROGMEM = "1101";&lt;br /&gt;const char ltr_r[] PROGMEM = "010";&lt;br /&gt;const char ltr_s[] PROGMEM = "000";&lt;br /&gt;const char ltr_t[] PROGMEM = "1";&lt;br /&gt;const char ltr_u[] PROGMEM = "001";&lt;br /&gt;const char ltr_v[] PROGMEM = "0001";&lt;br /&gt;const char ltr_w[] PROGMEM = "011";&lt;br /&gt;const char ltr_x[] PROGMEM = "1001";&lt;br /&gt;const char ltr_y[] PROGMEM = "1011";&lt;br /&gt;const char ltr_z[] PROGMEM = "1100";&lt;br /&gt;&lt;br /&gt;PGM_P alphabet[26] PROGMEM = {&lt;br /&gt;    ltr_a,ltr_b,ltr_c,ltr_d,ltr_e,ltr_f,ltr_g,ltr_h,ltr_i,ltr_j,ltr_k,&lt;br /&gt;    ltr_l,ltr_m,ltr_n,ltr_o,ltr_p,ltr_q,ltr_r,ltr_s,ltr_t,ltr_u,ltr_v,&lt;br /&gt;    ltr_w,ltr_x,ltr_y,ltr_z&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void sleep_msecs(int msecs) &lt;br /&gt;{&lt;br /&gt;   /*&lt;br /&gt;    * The argument to _delay_ms must be constant (ie. known at compile-time). &lt;br /&gt;    */&lt;br /&gt;   int i;&lt;br /&gt;   for(i = 0; i &lt; msecs; i++){&lt;br /&gt;      _delay_ms(1);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void set_led_state(int state) &lt;br /&gt;{&lt;br /&gt;   PORTB = (state == 1) ? _BV(6) : _BV(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * Emit single pulse&lt;br /&gt; * &lt;br /&gt; * Length choices are:&lt;br /&gt; * 0: short&lt;br /&gt; * 1: long&lt;br /&gt; */&lt;br /&gt;void emit_pulse(int length) &lt;br /&gt;{&lt;br /&gt;   set_led_state(1);&lt;br /&gt;   sleep_msecs((length == 1) ? 210 : 60);&lt;br /&gt;   set_led_state(0);&lt;br /&gt;   sleep_msecs(100);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * Emit a sequence of pulses, eg. "1000" for the letter "b".&lt;br /&gt; */&lt;br /&gt;void emit_pulses(char *pulse_str)&lt;br /&gt;{&lt;br /&gt;   int pulse_str_len = strlen(pulse_str);&lt;br /&gt;   int i2;&lt;br /&gt;   for (i2 = 0; i2 &lt; pulse_str_len; i2++) {&lt;br /&gt;      emit_pulse(pulse_str[i2] == '1');&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void emit_letter(char l) &lt;br /&gt;{&lt;br /&gt;   if (l == ' ') {&lt;br /&gt;      sleep_msecs(700);&lt;br /&gt;      return;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   char *buf = malloc(8 * sizeof(char));&lt;br /&gt;   &lt;br /&gt;   int index = l - 'a';&lt;br /&gt;   PGM_P p;&lt;br /&gt;   memcpy_P(&amp;p, &amp;alphabet[index], sizeof(PGM_P));&lt;br /&gt;   strcpy_P(buf, p);&lt;br /&gt;   emit_pulses(buf);&lt;br /&gt;   free(buf);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void morse_msg(const char *msg) &lt;br /&gt;{&lt;br /&gt;   int len = strlen(msg);&lt;br /&gt;   int i;&lt;br /&gt;   for (i = 0; i &lt; len; ++i) {&lt;br /&gt;      emit_letter(msg[i]);&lt;br /&gt;      sleep_msecs(350);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void do_morse(const char *msg) &lt;br /&gt;{&lt;br /&gt;   for(;;){&lt;br /&gt;      morse_msg(msg);&lt;br /&gt;      sleep_msecs(2500);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;   /* Init IO */&lt;br /&gt;   DDRB = _BV(6); /* make the LED pin an output */&lt;br /&gt;&lt;br /&gt;   do_morse("er der mon mere kaffe");&lt;br /&gt;&lt;br /&gt;   /* Not reached */&lt;br /&gt;   return 0;               &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In case you're wondering, the morsed message, "er der mon mere kaffe", is danish for "I wonder if there's any more coffee". Indeed, the first thing that sprang to mind when I finally got the software working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-4726228173851859398?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/4726228173851859398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=4726228173851859398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/4726228173851859398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/4726228173851859398'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/08/my-first-avr-based-project.html' title='My first AVR-based project'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1388/531946274_b6aec192ba_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-8765137414175398581</id><published>2008-08-17T00:48:00.004+02:00</published><updated>2008-12-11T07:33:50.875+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><category scheme='http://www.blogger.com/atom/ns#' term='animals'/><title type='text'>Nostalgia</title><content type='html'>&lt;h2&gt;Thomas Winding, you will be missed&lt;/h2&gt;&lt;br /&gt;Not so long ago, Danish author Thomas Winding died, 71 years old. &lt;br /&gt;&lt;br /&gt;Thomas was famous for writing a lot of books for children, but even more for reading his stories aloud on the radio. He had a deep, calm voice that was known and loved by all Danish children when I was a child. &lt;br /&gt;&lt;br /&gt;The death of Thomas Winding seems to have led to a feeling of "mass nostalgia" in my generation. A &lt;a href="http://www.facebook.com/home.php?ref=logo#/group.php?gid=18537077883&amp;ref=nf"&gt;Facebook group&lt;/a&gt; has been created, and the media has written a lot about how everyone will sorely miss the "soundtrack of their childhood". &lt;br /&gt;&lt;br /&gt;This made me think. I'm 33 years old now, and I don't think I have heard the voice of Thomas Winding for almost a decade. &lt;br /&gt;&lt;br /&gt;Still, his death is kind of a painful event for me. Of course, I will not &lt;i&gt;miss&lt;/i&gt; him as such, but he was a very happy memory of my childhood. So losing him is yet another reminder that I am no longer, and will never again be, a happy and carefree child. &lt;br /&gt;&lt;br /&gt;It seems bizarre to feel so sad about the death of a person I didn't even know, and haven't thought about for years. But luckily, I'm not alone, and there is a word for this feeling: Nostalgia. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Feeling nostalgic&lt;/h2&gt;&lt;br /&gt;According to Wikipedia, the word Nostalgia is of greek origin and refers to "the pain a sick person feels because he wishes to return to his native land". &lt;br /&gt;&lt;br /&gt;I think this is a beautiful way to describe a feeling that everybody knows, but which is hard to define. The description is absolute nonsense, I know, but so is the feeling itself. &lt;br /&gt;&lt;br /&gt;In fact, I find it highly irrational, especially from an evolutionary standpoint. I mean, what is the purpose of an individual wanting to "return to his home land"? On the surface, it seems regressive and foolish. &lt;br /&gt;&lt;br /&gt;However, it is hard to believe that any counterproductive sentiment would have been allowed to survive for countless generations to still be present in the human beings of today. There must be some rational purpose to this feeling, but it eludes me. &lt;br /&gt;&lt;br /&gt;If anyone out there knows, please drop me a line. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;My father&lt;/h2&gt;&lt;br /&gt;So, having questioned the rationality of feeling nostalic, I want to convince everyone that I am not a robot. &lt;br /&gt;&lt;br /&gt;Three years ago, my siblings and I lost our father. He died of cancer, only 55 years old. Needless to say, this was a terrible time for our family. After three years, it is still hard. &lt;br /&gt;&lt;br /&gt;But life moves on, and this is how it should be. &lt;br /&gt;&lt;br /&gt;However, life paused for a brief moment when I found this picture on my harddisk. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SHacPoLx0kI/AAAAAAAAABA/XvfCpWHE6HY/s1600-h/2003-08-09.17.Skovtur.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_KzEvDu8TrZ0/SHacPoLx0kI/AAAAAAAAABA/XvfCpWHE6HY/s320/2003-08-09.17.Skovtur.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5221532610281460290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My father was a man of habit. Every day, he would take his dog for a long walk in the forest. Same route every day. Same sticks that had to be thrown into the water at the same spots on the route along the lake, year after year. He once calculated that he had walked more than a thousand miles on this trail, which is only a few miles long.&lt;br /&gt;&lt;br /&gt;Our dog, Luna, was a very loving animal, and she absolutely adored my father. She was half Collie, so the herding instinct was very visible in her behavior. I think this is part of the reason that we loved her so much. She always wanted to keep the family together. &lt;br /&gt;&lt;br /&gt;The above picture was taken by me. Luna is clearly worried that I have become separated from the leader of the flock, so she looks ahead to assess the risk. &lt;br /&gt;&lt;br /&gt;For me, looking at this 5 year old picture simply defines nostalgia. It forces me to forget the present and focus on the past for a while. Never again will I join my father and Luna for that walk, and my home town seems so far away now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-8765137414175398581?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/8765137414175398581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=8765137414175398581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8765137414175398581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8765137414175398581'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/08/nostalgia.html' title='Nostalgia'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KzEvDu8TrZ0/SHacPoLx0kI/AAAAAAAAABA/XvfCpWHE6HY/s72-c/2003-08-09.17.Skovtur.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-5869889910101298932</id><published>2008-07-22T20:58:00.009+02:00</published><updated>2008-07-22T22:12:00.700+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><category scheme='http://www.blogger.com/atom/ns#' term='animals'/><title type='text'>Cat faucet, crude edition</title><content type='html'>If you're a cat owner, you know that cats love to drink from the faucet! &lt;br /&gt;&lt;br /&gt;Being a cat owner myself, I was pretty excited to learn about this &lt;a target="_blank" href="http://www.jenrathbun.com/Electronics/CatFaucet.html"&gt;Cat Faucet project&lt;/a&gt; by Sixerdoodle Electronics. I have often thought about building something similar myself, but I had never gotten around to it. &lt;br /&gt;&lt;br /&gt;However, even though the design of the Sixerdoodle Cat Faucet is very elegant, I find it more complicated than necessary (mainly because they wanted to keep it low voltage, it turns out). &lt;br /&gt;&lt;br /&gt;So I started wondering how to build the simplest possible cat faucet. This is what I came up with: &lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3141/2693620204_6895fa361c.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;a target="_blank" href="http://www.flickr.com/photos/21265379@N06/2693620204/"&gt;(Open above image, with notes, in a new window)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3075/2693618518_8d0ab4f7f6.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(Diva enjoying the running water)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The complete list of components: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;a solenoid from an old dishwasher&lt;/li&gt; &lt;br /&gt;  &lt;li&gt;a movement sensor (the kind usually used to light up a driveway)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;a few bits of plumbing&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;a piece of gaffer tape to limit the area monitored by the sensor&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3124/2692801291_8238c93bd8.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(Solenoid from an old dishwasher)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3281/2692800609_c53051cc1a.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(The movement sensor, pointed straight down)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it. The flow of water is controlled simply by adjusting the position of the red valve that lets water into the system. The sensitivity and timeout of the sensor can be controlled with small knobs on the underside. &lt;br /&gt;&lt;br /&gt;My wife put a little bowl underneath the faucet to allow the cats to drink from a surface of water as well as from the running water. Excess water simply spills down the drain below. &lt;br /&gt;&lt;br /&gt;Contrary to the Sixerdoodle design, my cat faucet is &lt;i&gt;not&lt;/i&gt; low voltage (it runs on 230V, our mains voltage in Denmark). However, because both components were designed to be safe and withstand pretty rough conditions, this does not worry me at all.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3267/2692960897_d586642a90_o.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(The finished setup, tucked away under a small shelving unit)&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3059/2692799823_fa265597a7.jpg"/&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(Obviously, it takes a little practice!)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-5869889910101298932?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/5869889910101298932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=5869889910101298932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5869889910101298932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5869889910101298932'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/07/cat-faucet-crude-edition.html' title='Cat faucet, crude edition'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3141/2693620204_6895fa361c_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-4669357435627798890</id><published>2008-07-15T01:12:00.006+02:00</published><updated>2008-12-11T07:33:51.301+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>My CEFSSPPSSS was in the mail this morning</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KzEvDu8TrZ0/SHvdi_8c5LI/AAAAAAAAABQ/TroAbWDZoHI/s1600-h/cefssppsss.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_KzEvDu8TrZ0/SHvdi_8c5LI/AAAAAAAAABQ/TroAbWDZoHI/s400/cefssppsss.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5223011786216498354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WTF? Headlines that long are usually reserved for doctoral dissertations...! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-4669357435627798890?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/4669357435627798890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=4669357435627798890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/4669357435627798890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/4669357435627798890'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/07/my-cefssppsss-was-in-mail-this-morning.html' title='My CEFSSPPSSS was in the mail this morning'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KzEvDu8TrZ0/SHvdi_8c5LI/AAAAAAAAABQ/TroAbWDZoHI/s72-c/cefssppsss.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-7952860455554815692</id><published>2008-07-12T12:20:00.006+02:00</published><updated>2008-08-17T13:57:49.832+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>Why I don't like Microsoft</title><content type='html'>As anyone who follows the virtualization business know by now, this has been a tough week for us at VMware. &lt;br /&gt;&lt;br /&gt;CEO &lt;a href="http://vmware.com/company/news/releases/executive_leadership.html"&gt;Diane Greene stepped back&lt;/a&gt;, effective immediately, and was replaced by ex-Microsoft employee &lt;a href="http://en.wikipedia.org/wiki/Paul_Maritz"&gt;Paul Maritz&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This event led to a brief discussion with one of my collegues, who is also a former MS employee, about whether or not Microsoft is an evil company. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/56/125277887_e1f20c8d6b_o.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://farm1.static.flickr.com/24/61938659_9468d076c0.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(Photo: &lt;a href="http://flickr.com/photos/batmoo/"&gt;batmoo&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As he pointed out, MS has invested huge sums in research, and has hired some of the brightest people out there. These people come up with excellent ideas and they receive the funding to put those ideas into practice. &lt;br /&gt;&lt;br /&gt;So what is the problem? One word: &lt;span style="font-weight:bold;"&gt;Windows&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm1.static.flickr.com/185/419349275_647c1bceee.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://farm1.static.flickr.com/185/419349275_647c1bceee.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(Photo: &lt;a href="http://flickr.com/photos/balkan/"&gt;aralbalkan&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am not at all a religious man, and I certaintly don't want to be religious about this either. But the fact of the matter is, I find Windows completely ridiculous as a platform for anything but gaming. This is my honest opinion. &lt;br /&gt;&lt;br /&gt;I was frustrated to read an article about Silverlight 2 in the August issue of &lt;a href="http://www.ddj.com/"&gt;DDJ&lt;/a&gt;. This is actually pretty cool stuff, but it is not for me. I know it runs on my Mac, but you need Windows to do any serious development. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2072/2416730072_a01215fec7.jpg?v=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://farm3.static.flickr.com/2072/2416730072_a01215fec7.jpg?v=0" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;John Lam - what a waste of talent (Photo: &lt;a href="http://flickr.com/photos/timheuer/"&gt;timheuer&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't have the patience for running Windows, because it sucks terribly. This is hardly a controversial opinion. I tolerate it at work, because the job is otherwise great, but I wouldn't dream of running it on my home computers. Over the last few years, I have come to realize that OSX is the only OS that doesn't suck one way or the other. For a few years, I was running Ubuntu on my laptop, but I was never very happy with it. I was wasting far too much time fixing small problems and trying to get basic stuff like suspend/resume working. &lt;br /&gt;&lt;br /&gt;On my MacBook Pro, everything works. I have been using it daily for a few years now, and the number of times is has crashed is still below ten. You would &lt;span style="font-weight:bold;"&gt;never&lt;/span&gt; get that kind of milage from a Windows box, probably not even if you left it idle. &lt;br /&gt;&lt;br /&gt;So while I really like .NET, C#, LINQ and all that, I can't use it, because I can't stomach the OS that comes with it. I really don't care very much about whether Microsoft is good or evil, but I'm sad to see so much talent go to waste. This is why I don't like Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-7952860455554815692?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/7952860455554815692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=7952860455554815692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/7952860455554815692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/7952860455554815692'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/07/why-i-dont-like-microsoft.html' title='Why I don&apos;t like Microsoft'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-2037163621132613340</id><published>2008-07-07T01:53:00.005+02:00</published><updated>2008-07-08T19:37:04.789+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='animals'/><title type='text'>In the Zoo</title><content type='html'>Recently, my friends and I spent an entire day at &lt;a href="http://www.aalborg-zoo.dk/"&gt;the Zoo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It was a beautiful day. The sun was shining, and everyone else seemed to have hit the beach, so the place was almost deserted.&lt;br /&gt;&lt;br /&gt;We were hung over, most of the animals were drowsy from the heat and we thoroughly enjoyed ourselves!&lt;br /&gt;&lt;br /&gt;I mean, just take a look at &lt;a href="http://species.wikimedia.org/wiki/Image:Myresluger2.jpg"&gt;this guy&lt;/a&gt;. If such a  creature can't bring out the giggles in you, what can?&lt;br /&gt;&lt;br /&gt;Also, many of the animals are just &lt;a href="http://cache.eb.com/eb/image?id=75640&amp;amp;rendTypeId=4"&gt;breathtaking&lt;/a&gt;. Check out &lt;a href="http://www.ryanphotographic.com/images/JPEGS/Panthera%20tigris%20Siberian%20Tiger.jpg"&gt;this photo&lt;/a&gt;. These are by no means lucky shots...Siberian Tigers just are that beautiful.  &lt;br /&gt;&lt;br /&gt;Actually, the resemblance to &lt;a href="http://chopmo.dk/diva"&gt;our cat Diva&lt;/a&gt; is  clear, although Diva may be slightly less intimidating... &lt;br /&gt;&lt;br /&gt;Looking back, I am surprised to say that the animal that fascinated me the most was &lt;a href="http://en.wikipedia.org/wiki/Brown_bear"&gt;the brown bear&lt;/a&gt;. There were two of them, and they were very restless. &lt;br /&gt;&lt;br /&gt;Watching them from a distance of only 10 feet, their restlessness was contagious. They breathed heavily and kept following the same pattern back and forth in their cage. Maybe it was just before their scheduled feeding, or maybe something was bothering them. We never found out. &lt;br /&gt;&lt;br /&gt;Everytime they paused in front of me and looked straight into my eyes, I couldn't help looking down at their claws and imagining the kind of damage they could do to human flesh...those thoughts left quite an impression on me. &lt;br /&gt;&lt;br /&gt;The bear is truly an awesome creature, and as I discussed with my younger brother, there is not much you can do to avoid it in the wild. It will certainly run, swim and climb much better than you. This is clearly an instance of the human being superior only with a rifle in his hand.  &lt;br /&gt;&lt;br /&gt;Spending an entire day in the Zoo was therapeutic to me. It gave me time to process the impressions from &lt;a href="http://www.sherylcrow.com/"&gt;the concert&lt;/a&gt; we attended at &lt;a href="http://www.nibefestival.dk/"&gt;a festival&lt;/a&gt; the day before, and it inspired me to ponder life, the universe and everything. I need to do that sometimes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-2037163621132613340?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/2037163621132613340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=2037163621132613340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/2037163621132613340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/2037163621132613340'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/07/in-zoo.html' title='In the Zoo'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-6153861239457662765</id><published>2008-07-07T00:51:00.010+02:00</published><updated>2008-07-07T01:40:22.282+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>MySpace sucks!</title><content type='html'>I have always suspected that MySpace sucked. More than once, a profile page has killed my browser or consumed all resources on my machine for half a minute. In fact, at the time of this writing, my Safari seems to have died. &lt;br /&gt;&lt;br /&gt;However, I always thought that the MySpace users were to blame. I knew that you can add HTML and CSS to your profile, so I assumed that people just messed up their profiles. &lt;br /&gt;&lt;br /&gt;While that may be true, the MySpace site itself is just absolutely bloody ridiculous. &lt;br /&gt;&lt;br /&gt;My wife is a singer/songwriter, so she needed a MySpace profile to demo her work. Naturally, I volunteered to help her create one. &lt;br /&gt;&lt;br /&gt;Now, for some reason a "MySpace Music" profile is different from a regular profile, which translates into additional punishment trying to figure out how the s*** works. &lt;br /&gt;&lt;br /&gt;Alright, enough bitching. I believe the following facts speak for themselves: &lt;br /&gt;&lt;br /&gt;1) From her public profile, she can click "My MySpace" to reach a personalized, dashboard-style page where she can check out her own "mood" and enjoy lots of colorful ads. &lt;br /&gt;&lt;br /&gt;2) Clicking "My account" brings up a section where she can change her email-address etc. &lt;br /&gt;&lt;br /&gt;3) Selecting "Profile" -&gt; "Edit profile" allows her to change "Interests", "Background", "Education" etc. In short: Social networking metadata. &lt;br /&gt;&lt;br /&gt;4) Surprise #1: None of the information entered in (3) are visible in her public profile!  &lt;br /&gt;&lt;br /&gt;5) Selecting "My account" -&gt; "Edit profile" bring up an &lt;i&gt;entirely different&lt;/i&gt; section, allowing her to edit information relevant to her music (add upcoming shows, upload songs etc). &lt;br /&gt;&lt;br /&gt;6) The information entered in (5) &lt;i&gt;is&lt;/i&gt; displayed on her profile. &lt;br /&gt;&lt;br /&gt;So there you have it. Two completely different meanings of the link "Edit profile", depending on where you find it. Usability people should be weeping by now. And this is just one example of the brokenness - I won't bore you with details of how confusing the danish translation of the site is. Even on the all-US site, you will find typos and spelling errors. &lt;br /&gt;&lt;br /&gt;I suspect MySpace has become insanely popular for the same reason that Microsoft did: Lack of competition. &lt;br /&gt;&lt;br /&gt;As far as I know, MySpace was the first site to offer free MP3 hosting for amateur artists. And I certainly recognize that it has helped a lot of musicisians expose their music. This is good - we all benefit from this one way or the other. &lt;br /&gt;&lt;br /&gt;But as in the Microsoft case, the inertia of beating the competition is truly scary. Both "MS's" are clearly deficient compared to their competition. Only diehard fans will suggest otherwise. However, they both have huge market shares, so they remain the default choice. Come to think of it, this is the same mechanism that keeps IBM consultants in business. &lt;br /&gt;&lt;br /&gt;I need to get some sleep now. This is just too depressing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-6153861239457662765?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/6153861239457662765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=6153861239457662765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/6153861239457662765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/6153861239457662765'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/07/myspace-sucks.html' title='MySpace sucks!'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-5546511473694119481</id><published>2008-05-21T10:33:00.005+02:00</published><updated>2008-07-12T13:58:00.079+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Breadcrumbs!!</title><content type='html'>&lt;a href="http://www.emacswiki.org/cgi-bin/wiki/BreadcrumbForEmacs"&gt;This small addon&lt;/a&gt; by William W. Wong really put a smile on my face! &lt;br /&gt;&lt;br /&gt;Many of the source files I work with are huge (&amp;gt; 16000 lines), so I almost always need to do an isearch to find the point I need (which is often a pain due to false positives). Also, I often need to temporarily jump to another place in the same file. &lt;br /&gt;&lt;br /&gt;Breadcrumbs are a "light" alternative to regular bookmarks, using a trail (or rather, a circular buffer) of anonymous bookmarks across all buffers. I have set up the keybindings to drop a breadcrumb with &lt;tt&gt;S-&amp;lt;space&amp;gt;&lt;/tt&gt; and navigate back/forward with &lt;tt&gt;M-C-;&lt;/tt&gt; and &lt;tt&gt;M-C-'&lt;/tt&gt; respectively. &lt;br /&gt;&lt;br /&gt;As a special bonus, a breadcrumb is automatically dropped when using &lt;tt&gt;find-tag&lt;/tt&gt; to make it easy to backtrack after looking up a chain of symbol definitions. Very useful! &lt;br /&gt;&lt;br /&gt;The feature is very well documented, by the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-5546511473694119481?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/5546511473694119481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=5546511473694119481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5546511473694119481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5546511473694119481'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/05/breadcrumbs.html' title='Breadcrumbs!!'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-5839856008143085419</id><published>2008-03-26T22:28:00.004+01:00</published><updated>2008-07-12T13:57:48.077+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Effective tags?</title><content type='html'>A lot of my work hours are spent programming C++ in Emacs on Windows.&lt;br /&gt;&lt;br /&gt;Earlier, I've done a lot of Java work in Eclipse and C# work in VS2005. And while I'm overall very, very happy with Emacs, I do miss the source code navigation features from the IDEs (especially Eclipse).&lt;br /&gt;&lt;br /&gt;Right now, I'm using the version of ctags that comes with Emacs. Every night a scheduled task scans my source trees and rebuilds the tag files. I know only one keybinding: &lt;tt&gt;M-.&lt;/tt&gt; (find-tag). Of course, I &lt;i&gt;should&lt;/i&gt; spend some time familiarizing myself with the build-in tags package, but to be honest, I'm not very impressed with the list of features. Plus, &lt;tt&gt;find-tag&lt;/tt&gt; quite often misses the mark completely. &lt;br /&gt;&lt;br /&gt;So, I would like to check out the alternatives. I have been told that the Exuberant version of ctags is better, so I might give that a go. &lt;br /&gt;&lt;br /&gt;If anyone has a decent Emacs configuration  for setting this up, I'd be happy to see it. Also, any tips on C/C++ code navigation would be greatly appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-5839856008143085419?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/5839856008143085419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=5839856008143085419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5839856008143085419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5839856008143085419'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/03/effective-tags.html' title='Effective tags?'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-49827957671790785</id><published>2008-03-06T10:55:00.006+01:00</published><updated>2008-07-12T13:58:19.357+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Avoiding dired buffer explosion syndrome</title><content type='html'>I have always been annoyed that dired mode opens a new buffer for each directory it visits. I typically only use each buffer once anyway, and they get in the way of the autocompletion when switching between buffers with &lt;tt&gt;C-x b&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Only recently did I learn that simply pressing &lt;tt&gt;a&lt;/tt&gt; instead of &lt;tt&gt;enter&lt;/tt&gt; or &lt;tt&gt;C-m&lt;/tt&gt; makes it reuse the same buffer. Nice!&lt;br /&gt;&lt;br /&gt;For some reason, the function is marked dangerous, but that's easily fixed:&lt;br /&gt;&lt;code class="lisp"&gt;&lt;br /&gt;(put 'dired-find-alternate-file 'disabled nil)&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-49827957671790785?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/49827957671790785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=49827957671790785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/49827957671790785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/49827957671790785'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/03/avoiding-dired-buffer-explosion.html' title='Avoiding dired buffer explosion syndrome'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-5541548081590998669</id><published>2008-02-25T22:14:00.004+01:00</published><updated>2008-07-12T13:58:33.959+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Productivity hint #2: Don't move your hands!</title><content type='html'>This one is simple, but important.&lt;br /&gt;&lt;br /&gt;To move the cursor left, right, up and down, use &lt;tt&gt;C-b&lt;/tt&gt;, &lt;tt&gt;f&lt;/tt&gt;, &lt;tt&gt;p&lt;/tt&gt; and &lt;tt&gt;n&lt;/tt&gt; respectively. &lt;br /&gt;Page down: &lt;tt&gt;C-v&lt;/tt&gt;&lt;br /&gt;Page up: &lt;tt&gt;M-v&lt;/tt&gt;&lt;br /&gt;Beginning of line: &lt;tt&gt;C-a&lt;/tt&gt;&lt;br /&gt;End of line: &lt;tt&gt;C-e&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;See the point (no pun intended)? &lt;span style="font-weight:bold;"&gt;Don't move your wrists&lt;/span&gt;! &lt;br /&gt;&lt;br /&gt;Everytime you do, you waste a little time repositioning your fingers. You may be thinking that the amount of time wasted this way is very small. Well, I disagree. Sure, moving your hand takes only a few tenths of a second, but programmers need to reposition the cursor and scroll up and down &lt;span style="font-style:italic;"&gt;ridiculously&lt;/span&gt; often. &lt;br /&gt;&lt;br /&gt;I'm really surprised to see how many otherwise fast typers haven't taken the time to learn these shortcuts. Really, it's easier than you think, especially because you use these commands all the time. Getting used to the new shortcuts should take you a few hours of determination, at most.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-5541548081590998669?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/5541548081590998669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=5541548081590998669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5541548081590998669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/5541548081590998669'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/02/productivity-hint-2-dont-move-your.html' title='Productivity hint #2: Don&apos;t move your hands!'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-3083724921572232374</id><published>2008-02-22T00:03:00.011+01:00</published><updated>2008-07-12T13:58:53.394+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Faster point movement</title><content type='html'>My day job doesn't include a lot of Lisp hacking. &lt;br /&gt;&lt;br /&gt;On the positive side, though, this means that I'm free to redefine &lt;tt&gt;"M-C-p" (backward-list)&lt;/tt&gt; and &lt;tt&gt;"M-C-n" (forward-list)&lt;/tt&gt;, because I never use them. &lt;br /&gt;&lt;br /&gt;So here is today's init.el addition: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="lisp"&gt;&lt;br /&gt;(global-set-key "\M-\C-p" &lt;br /&gt;  '(lambda () (interactive) (previous-line 5)))&lt;br /&gt;&lt;br /&gt;(global-set-key "\M-\C-n" &lt;br /&gt;  '(lambda () (interactive) (next-line 5)))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I use a rather small font, so my 1600x1200 monitors can hold a &lt;span style="font-weight:bold;"&gt;lot&lt;/span&gt; of lines. This snippet allows me to move 5 lines at a time instead of one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-3083724921572232374?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/3083724921572232374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=3083724921572232374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/3083724921572232374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/3083724921572232374'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/02/faster-point-movement.html' title='Faster point movement'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-2641406568223730072</id><published>2008-02-18T22:43:00.006+01:00</published><updated>2008-07-12T13:59:06.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Productivity hints #1: Shift not</title><content type='html'>In the next few posts, I want to highlight a few productivity boosters that have worked very well for me. &lt;br /&gt;&lt;br /&gt;First up: Numbers vs. puctuation. &lt;br /&gt;&lt;br /&gt;A standard US keyboard is &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; designed for programming. You need to press &lt;span style="font-style:italic;"&gt;shift&lt;/span&gt; to access most punctuation characters: Curly brackets, parentheses, double quotes etc. &lt;br /&gt;&lt;br /&gt;So, &lt;a href="http://infolab.stanford.edu/~manku/dotemacs.html"&gt;this brilliant guy&lt;/a&gt; took the step and simply remapped the keys! &lt;br /&gt;1 -&gt; ! &lt;br /&gt;2 -&gt; @ &lt;br /&gt;3 -&gt; #&lt;br /&gt;' -&gt; " &lt;br /&gt;and so on (the numbers are, of course, accessed with &lt;span style="font-style:italic;"&gt;shift&lt;/span&gt;). &lt;br /&gt;&lt;br /&gt;This may sound impossible to get used to, but it's a lot easier than you think! Sure, it takes a few hours and countless wrong keystrokes, but it really pays off. &lt;br /&gt;&lt;br /&gt;Combined with the "electric" features of Emacs, this speeds up coding a lot. Try it out for a few hours and see for yourself. &lt;br /&gt;&lt;br /&gt;By the ways, the mapping technique described on the linked page is not perfect. He simply swaps the keys with &lt;tt&gt;keyboard_translate&lt;/tt&gt;, so keybindings that include numbers (eg. C-x 2) now require you to press &lt;span style="font-style:italic;"&gt;shift&lt;/span&gt; to get the number 2. I'm working on improving this, but for now, I've just mapped C-x @ etc. &lt;br /&gt;&lt;br /&gt;In general, keep a eye out for any keystrokes that tend for annoy you, or that you get wrong several times a day. For example, I use 2-4 windows per frame, and of course I need to switch between them very often. Therefore, the default shortcut, &lt;span style="font-style:italic;"&gt;C-x o&lt;/span&gt; was just too slow, and I remapped it to &lt;span style="font-style:italic;"&gt;C-o&lt;/span&gt; (&lt;span style="font-style:italic;"&gt;M-C-o&lt;/span&gt; to switch frames, by the way).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-2641406568223730072?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/2641406568223730072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=2641406568223730072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/2641406568223730072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/2641406568223730072'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/02/productivity-hints-1-shift-not.html' title='Productivity hints #1: Shift not'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-8480731697386817464</id><published>2008-02-09T23:08:00.001+01:00</published><updated>2008-07-12T13:59:29.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Prelude</title><content type='html'>Hello, and welcome.&lt;br /&gt;&lt;br /&gt;This blog will be mostly about Emacs. For now, anyway. I have a feeling that, along the way, I will probably start blogging about other subjects as well. But for now, I'm writing about Emacs. &lt;br /&gt;&lt;br /&gt;Note that my blog will not be for the Emacs newbie. Although I certaintly recommend investing the time needed to learn the basics of this wonderful editor, there are already a lot of great resources out there to get you started. For an excellent starting point, check out &lt;a href="http://www.emacswiki.org/cgi-bin/wiki"&gt;the Emacs wiki&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I hope that others will be able to make use of my experiences on my way to becoming an expert Emacs user. Feel free to comment away!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-8480731697386817464?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/8480731697386817464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=8480731697386817464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8480731697386817464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/8480731697386817464'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/02/prelude.html' title='Prelude'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3329511750176683717.post-662633352337431133</id><published>2008-02-09T21:18:00.004+01:00</published><updated>2008-07-12T13:59:40.440+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Fixing vc-checkin</title><content type='html'>I use Subversion for a lot of my projects, and I've really enjoy the seamless integration in Emacs. Committing a file is as easy as &lt;tt&gt;C-x v v&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;However, vc-checkin is slightly broken. It needs a window in which to open the buffer &lt;tt&gt;*VC-log*&lt;/tt&gt; (for you to enter the commit message in) and after you've entered a message and pressed &lt;tt&gt;C-c C-c&lt;/tt&gt;, it closes that window. If you have only one window open in the current frame, it splits your window. Everything is fine...you get your one-window layout back. &lt;br /&gt;&lt;br /&gt;But if you have more than one window open, &lt;span style="font-style: italic;"&gt;it steals an existing window and closes it&lt;/span&gt;. Quite annoying.&lt;br /&gt;&lt;br /&gt;So, I decided to fix this using vc-before-checkin-hook. The following hook opens a new window visiting the buffer &lt;tt&gt;*VC-log*&lt;/tt&gt;. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code class="lisp"&gt;&lt;br /&gt;(add-hook&lt;br /&gt; 'vc-before-checkin-hook&lt;br /&gt; #'(lambda ()&lt;br /&gt;     (set-window-buffer &lt;br /&gt;         (split-window-vertically) &lt;br /&gt;         (get-buffer-create "*VC-log*"))))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This way, the newly created window will always be selected and closed by vc-checkin, and predictability is restored.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3329511750176683717-662633352337431133?l=chopmo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chopmo.blogspot.com/feeds/662633352337431133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3329511750176683717&amp;postID=662633352337431133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/662633352337431133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3329511750176683717/posts/default/662633352337431133'/><link rel='alternate' type='text/html' href='http://chopmo.blogspot.com/2008/02/fixing-vc-checkin.html' title='Fixing vc-checkin'/><author><name>Chopmo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_KzEvDu8TrZ0/SH5rA2FQAXI/AAAAAAAAABY/kLiDrP6SGd4/S220/CIMG1893.jpg'/></author><thr:total>0</thr:total></entry></feed>
