<?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:blogger='http://schemas.google.com/blogger/2008' 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-2738742852720994552</id><updated>2012-07-15T12:11:03.945+02:00</updated><category term='Programmieren'/><category term='Debugging'/><category term='GCC'/><category term='Cross-Compiling'/><category term='Mex'/><category term='OpenSource'/><category term='Matlab'/><category term='C'/><category term='Mac'/><title type='text'>daskrachen</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.daskrachen.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-2559954948184436381</id><published>2012-07-15T12:11:00.000+02:00</published><updated>2012-07-15T12:11:03.954+02:00</updated><title type='text'>Adieu</title><content type='html'>This blog will be continued at my new domain at &lt;a href="http://bastibe.de/"&gt;bastibe.de&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sorry that I could not migrate all the comments and links.</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/2559954948184436381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2012/07/adieu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2559954948184436381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2559954948184436381'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2012/07/adieu.html' title='Adieu'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-2753265473101040637</id><published>2012-02-22T11:43:00.002+01:00</published><updated>2012-02-22T11:43:36.824+01:00</updated><title type='text'>How to gem install rlua on OSX/homebrew</title><content type='html'>If you want to use rlua, you need to have Lua installed. However, OSX does not come with Lua preinstalled, so you install it using&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;brew install lua&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Oh, would it be nice if everyone agreed on how to install stuff like this. Case in point, homebrew installs liblua (quite reasonable) in &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/local/lib/liblua.[5.1[.4]].dylib&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;rlua however expects it to be called &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;liblua5.1.dylib&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; (notice the missing &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;.&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Similarly, the headers are installed plainly into &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/local/include&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;, whereas rlua expects them to be in a folder called &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;lua5.1&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Hence, here is how you get rlua to install:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ln -s /usr/local/Cellar/lua/5.1.4/lib/liblua.5.1.4.dylib /usr/local/lib/liblua5.1.dylib&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ln -s /usr/local/Cellar/lua/5.1.4/include/ /usr/local/include/lua5.1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not exactly a beautiful solution, but it works.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/2753265473101040637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2012/02/how-to-gem-install-rlua-on-osxhomebrew.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2753265473101040637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2753265473101040637'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2012/02/how-to-gem-install-rlua-on-osxhomebrew.html' title='How to gem install rlua on OSX/homebrew'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-4140314869569920718</id><published>2012-02-03T18:22:00.001+01:00</published><updated>2012-02-03T19:22:59.024+01:00</updated><title type='text'>Text Editors</title><content type='html'>&lt;title&gt;Text&amp;lt;sub&amp;gt;Editors&amp;lt;/sub&amp;gt;&lt;/title&gt;      &lt;style type="text/css"&gt; &lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/   html { font-family: Times, serif; font-size: 12pt; }   .title  { text-align: center; }   .todo   { color: red; }   .done   { color: green; }   .tag    { background-color: #add8e6; font-weight:normal }   .target { }   .timestamp { color: #bebebe; }   .timestamp-kwd { color: #5f9ea0; }   .right  {margin-left:auto; margin-right:0px;  text-align:right;}   .left   {margin-left:0px;  margin-right:auto; text-align:left;}   .center {margin-left:auto; margin-right:auto; text-align:center;}   p.verse { margin-left: 3% }   pre {  border: 1pt solid #AEBDCC;  background-color: #F3F5F7;  padding: 5pt;  font-family: courier, monospace;         font-size: 90%;         overflow:auto;   }   table { border-collapse: collapse; }   td, th { vertical-align: top;  }   th.right  { text-align:center;  }   th.left   { text-align:center;   }   th.center { text-align:center; }   td.right  { text-align:right;  }   td.left   { text-align:left;   }   td.center { text-align:center; }   dt { font-weight: bold; }   div.figure { padding: 0.5em; }   div.figure p { text-align: center; }   textarea { overflow-x: auto; }   .linenr { font-size:smaller }   .code-highlighted {background-color:#ffff00;}   .org-info-js_info-navigation { border-style:none; }   #org-info-js_console-label { font-size:10px; font-weight:bold;                                white-space:nowrap; }   .org-info-js_search-highlight {background-color:#ffff00; color:#000000;                                  font-weight:bold; }   /*]]&gt;*/--&gt;&lt;/style&gt;&lt;script type="text/javascript"&gt;&lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/  function CodeHighlightOn(elem, id)  {    var target = document.getElementById(id);    if(null != target) {      elem.cacheClassElem = elem.className;      elem.cacheClassTarget = target.className;      target.className = "code-highlighted";      elem.className   = "code-highlighted";    }  }  function CodeHighlightOff(elem, id)  {    var target = document.getElementById(id);    if(elem.cacheClassElem)      elem.className = elem.cacheClassElem;    if(elem.cacheClassTarget)      target.className = elem.cacheClassTarget;  } /*]]&gt;*///--&gt;&lt;/script&gt;    &lt;br /&gt;&lt;div id="content"&gt;As far as I can tell, there has been a resurgence of development in the landscape of text editors of late. Only a few years ago, the text editing scene one the Mac seemed to be dominated by&lt;br /&gt;&lt;div class="outline-2" id="outline-container-1"&gt;&lt;div class="outline-3" id="outline-container-1-1"&gt;&lt;div class="outline-text-3" id="text-1-1"&gt;&lt;ul&gt;&lt;li&gt;Crazy unix farts using Vim or Emacs &lt;/li&gt;&lt;li&gt;BBEdit users &lt;/li&gt;&lt;li&gt;Textmate users &lt;/li&gt;&lt;/ul&gt;During a very short period of time though, a raft of new text editors became available. Sublime Text in particular has been getting a lot of attention and rave reviews by many people. To me, this warrants another look at what these new (and old) text editors are offering.&lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-2"&gt;&lt;h3 id="sec-1-2"&gt;                          Vim &lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-2"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.vim.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://2.bp.blogspot.com/-7yI5rdwDRsE/Tym4f8w0t0I/AAAAAAAAARY/CKwnSi9VnBc/s200/MacVim+Icon.png" width="75" /&gt;&lt;/a&gt;&lt;/div&gt;Vim is very old software. It is a more or less direct descendant of &lt;i&gt;ed&lt;/i&gt; from the early 1970s. It grew up in text based terminals without any graphical windows or mouses. Hence, all of its functionality is really meant to be used from the keyboard &lt;i&gt;only&lt;/i&gt;, even though mousing is supported these days. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-qYVhP_9btbE/Tym4fchTB6I/AAAAAAAAARQ/Drd8aosnjAA/s1600/MacVim.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/-qYVhP_9btbE/Tym4fchTB6I/AAAAAAAAARQ/Drd8aosnjAA/s320/MacVim.png" width="320" /&gt;&lt;/a&gt;The terminal inheritance limits its graphical capabilities somewhat. There are no graphical drawers or animations or pixel-precise scrolling. Everything is displayed in terms of rectangular characters, hence scrolling can only ever scroll one line at a time and there are no graphical images anywhere. Since Vim predates graphical displays altogether, it does not adhere to its standards much. In fact, in its normal mode it won't even type out the characters you hit on your keyboard.  &lt;br /&gt;&lt;br /&gt;This is at really Vim's greatest strength and weakness: In its 'normal mode', all key presses are interpreted like keyboard shortcuts in other programs. And what shortcuts there are! Pretty much every key on the keyboard has some special function, most keys even serve multiple functions depending on what mode you are in at the moment. Thus it should come as no surprise that you can do &lt;i&gt;anything&lt;/i&gt; with these shortcuts at astounding speed.   Watching a seasoned Vimmer do his keyboard dance is something to behold. Moving the cursor is especially powerful. Usually, any place in the current file is reachable using just a few key strokes. But of course, you are not limited to just viewing one file at a time either: Vim supports arbitrary split views and can even be used for efficient diffing or merging.   And when it comes to changing that text, Vim is no slouch, either. There are various registers for saving text or locations, there is an increadibly powerful macro system, amazing searching capabilities, command line integration, there are specialized functions for programming… Really, when it comes to pure text editing chops, nothing beats Vim. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mB1VCi70i1g/Tym4u-E2QlI/AAAAAAAAATI/PAj_OX-0N_M/s1600/Vim+Full.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://4.bp.blogspot.com/-mB1VCi70i1g/Tym4u-E2QlI/AAAAAAAAATI/PAj_OX-0N_M/s320/Vim+Full.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Vim is also&amp;nbsp;incredibly&amp;nbsp;customizable. Of course, there is no graphical preferences windows to do the customization in. You customize Vim by editing simple text files. Vim even includes its very own scripting language, VimScript, to enable users to extend it. There is a huge wealth of plugins available. These range from file browsers to support for new languages, or even some limited integration with compilers or source control tools.   However, VimScript is not exactly a very pleasant language to code in and Vim does not actually like to interface with external tools much. These two issues limit the scope of what is possible with Vim somewhat–deep compiler integration and graphical debugging are fiddly at best, so you will probably just keep a terminal open and do them there. That said, the plugin ecosystem for Vim is probably still leaps and bounds beyond what is possible with most other text editor out there, but it does not quite reach the same breadth or integration as some IDEs or Emacs do.&lt;br /&gt;All that power comes at a price. Learning Vim is hard. If you start out with Vim, it will probably take at least a week or so until you can approach your old productivity again. Mastering Vim will take years. Even after months and months of diligent learning, you will find some new tricks and features to increase your speed. &lt;br /&gt;&lt;br /&gt;At the end of the day though, Vim is an amazingly powerful tool, and it is certainly worth it to at least learn the basics of it. Actually, most people I know who tried it have actually stuck with it. Myself, I have some two years of Vimming under my belt, too, and it has proven to be a very important tool for me. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-3"&gt;&lt;h3 id="sec-1-3"&gt;         &lt;/h3&gt;&lt;h3 id="sec-1-3"&gt;                          Emacs 24&lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-3"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.gnu.org/software/emacs/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://2.bp.blogspot.com/-P_r3uAC3crc/Tym4aZYKZsI/AAAAAAAAAQs/YCNlADQWLa4/s200/Emacs+Icon.png" width="75" /&gt;&lt;/a&gt;&lt;/div&gt;The thing you have to realize about Emacs is that… Emacs is powerful. People have called it the &lt;a href="http://www.emacswiki.org/emacs/NealStephenson"&gt;thermonuclear text editor&lt;/a&gt;, and for a reason. Emacs can edit text, of course, but that is really only the most mundane of its features. Really, Emacs is a little world of its own. You can read and write your mail from within Emacs, you can do spreadsheets, calendaring, it can host terminals, debuggers, compilers, there is Tetris, hell, it even includes its very own psychiatrist! Speaking off the record here, I have a suspicion that Emacs might achieve sentience pretty soon. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nZoStc-FfLc/Tym4YWvAhcI/AAAAAAAAAQc/SIp8ruQwlnc/s1600/Emacs.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="197" src="http://1.bp.blogspot.com/-nZoStc-FfLc/Tym4YWvAhcI/AAAAAAAAAQc/SIp8ruQwlnc/s320/Emacs.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Similar to Vim, Emacs is old software. It was invented in the late 1970s at MIT and has been growing ever since. Also like Vim, its terminal inheritance shows its teeth sometimes: mouseweel scrolling can be awkward, especially if you like your inertial scrolling, the menu bar seems to not get much love and keyboard shortcuts are not conformant with what you might be used to from other text editors. On the other hand, Emacs has some very modern features like mixing of proportional fonts and fixed-width fonts or inline image display. &lt;br /&gt;&lt;br /&gt;The upside of being old is that Emacs is very mature software. There is a &lt;i&gt;ginormous&lt;/i&gt; selection of extensions available for Emacs, most of it actually distributed right with Emacs itself and a lot of it is superbly documented. Besides that, there are &lt;a href="http://tromey.com/elpa/"&gt;several&lt;/a&gt;&amp;nbsp;&lt;a href="http://marmalade-repo.org/"&gt;integrated&lt;/a&gt; &lt;a href="http://elpa.gnu.org/"&gt;repositories&lt;/a&gt; for additional tools that can be downloaded and installed from the internet.&lt;br /&gt;&lt;br /&gt;The real power of Emacs is in that it is really not so much a text editor but a virtual machine for a programming language called eLisp. Really anything that can possibly be written in Lisp and remotely involves text editing is possible and probably already available in Emacs.   As such, Emacs probably has the most diverse feature set of any text editor out there. Most relevant to programmers will be debugger integration, automatic syntax and spell checking, powerful and context-aware autocompletion, refactoring capabilities and much much more. Emacs is the only program in this list which can actually be used as a full fledged IDE on its own. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8ile2Yzt_ZI/Tym4ZaOD1zI/AAAAAAAAAQk/q00zT3vv4fc/s1600/Emacs+Full.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://4.bp.blogspot.com/-8ile2Yzt_ZI/Tym4ZaOD1zI/AAAAAAAAAQk/q00zT3vv4fc/s320/Emacs+Full.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;But Emacs is not limited to programming at all. As mentioned before, it includes an Email client, a great calendar with an agenda, several IM clients, RSS readers, an &lt;a href="http://orgmode.org/"&gt;astoundingly powerful outliner&lt;/a&gt; and spreadsheet editor, it is frequently used for blogging, writing screen plays, books or really anything you can think of. &lt;br /&gt;&lt;br /&gt;The only real downside to this is that Emacs is, well, old. There is great power there, but is is only accessible to those willing to learn the myriad key combinations to invoke it. Rellay, mastering Emacs is a task for years, not weeks. But of course, you are not forced to wield all the power Emacs has to offer at once. Getting up to speed with basic text editing in Emacs will only take a few minutes, and the built-in help system and tutorial will guide you further whenever you feel the need to explore. &lt;br /&gt;&lt;br /&gt;I have been using Emacs for several months now and I am really enjoying it. It has a few shortcomings, but it is constantly being improved and getting more modern every day. I can see myself giving in to it and just live in Emacs all day long, but for now, I'm happy with it just being my primary text editor. However, I can't quite get beyond the fact that its pure text editing chops are nowhere near Vim. Then again, Emacs does &lt;a href="http://gitorious.org/evil/pages/Home"&gt;support Vim key bindings&lt;/a&gt;, so this might turn out not to bother me in the long run.  &lt;br /&gt;&lt;br /&gt;At any rate, I would recommend anyone to give Emacs a shot at least for a short while. The power of Emacs can be an exhilarating experience, really. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-4"&gt;&lt;h3 id="sec-1-4"&gt;         &lt;/h3&gt;&lt;h3 id="sec-1-4"&gt;                          Textmate (2)&lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-4"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://macromates.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://3.bp.blogspot.com/-sC_breib7JM/Tym4rgwIUGI/AAAAAAAAASs/MW1YyMNphqc/s200/TextMate+2.png" width="75" /&gt;&lt;/a&gt;&lt;/div&gt;For the longest time, all GUI text editors could generally be classified as either Vim-based, Emacs-based or shortcut-based. The prevalent crop of shortcut-based GUI text editors mapped all its advanced functions to certain modifier-letter combinations and/or menu bar items. &lt;br /&gt;&lt;br /&gt;When Textmate was introduced, it introduced a new concept: snippets. Snippets are short pieces of text which, upon activating a certain trigger, would expand to arbitraryly complex constructs. &lt;br /&gt;&lt;br /&gt;Thus, to define a class in some programming language, you would type `class`, then hit TAB, and it would expand to a complete class declaration with constructor, destructor and documentation. Further yet, the class name would be highlighted immediately, so you could start editing it to your liking. These edits would even automatically percolate to all the relevant places in the class declaration and thus automatically change all scope declarations and the like.&lt;br /&gt;Or, you could drag some image file into some LaTeX code and it would expand (dragging being the trigger here) to a whole `\begin{figure}` complete with `\caption`, `\label`, the correct path to the image and everything else you need. &lt;br /&gt;&lt;br /&gt;This has proven to be such a popular feature that since Textmate's inception, implementations of snippets have been developed for pretty much every IDE or text editor out there.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-h6Iu5mR4WW4/Tym4q1qm_yI/AAAAAAAAASo/pTdMIyAN4gw/s1600/TextMate.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="162" src="http://3.bp.blogspot.com/-h6Iu5mR4WW4/Tym4q1qm_yI/AAAAAAAAASo/pTdMIyAN4gw/s200/TextMate.png" width="200" /&gt;&lt;/a&gt;Textmate also featured a very flexible and easily extensible regex based syntax parser, beautiful color schemes, a very elegant project management system and a vibrant community extending it in many directions. This was even more fascinating in that most of this functionality was implemented using a convenient shell scripting engine that could utilize any programming language your shell supported. &lt;br /&gt;&lt;br /&gt;Sadly though, its main developer got stuck somewhere along the way and development all but dried up for five years. This primarily meant that some issues just would not be fixed and thus, got all the more jarring. Most prominently, Textmate lacked split views, regex incremental search and would only do single character undo/redos. Many people left Textmate because of this lack of progress. &lt;br /&gt;&lt;br /&gt;While I was in college, I used Textmate extensively and it proved to be a veritable tool for many editing tasks. It is somewhat limited in its integration with programming tools, though, so don't expect any complex compiler or debugger integration. Ultimately, I left it behind for lack of cross platform compatibility and lack of development. There used to be a Windows program called &lt;a href="http://e-texteditor.com/"&gt;E Text Editor&lt;/a&gt;, which wanted to become a fully compatible Textmate alternative for Windows and Linux, but development never even reached production quality. &lt;br /&gt;&lt;br /&gt;Recently however, an early alpha version of Textmate 2 has been released that could reinvigorate the community and fix long standing issues. Whether that will actually happen will remain to be seen. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-5"&gt;&lt;h3 id="sec-1-5"&gt;         &lt;/h3&gt;&lt;h3 id="sec-1-5"&gt;                          Vico &lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-5"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.vicoapp.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://4.bp.blogspot.com/-5Nph7YS9g_E/Tym4tic0NzI/AAAAAAAAATA/WpBN6EXi-wU/s320/vico.png" width="75" /&gt;&lt;/a&gt;&lt;/div&gt;Vico is a very new application that has spung to live only in 2011 and is not finished yet. It aims to be a modern Vim, combining the virtue of the powerful mode-based editing system of Vim with a modern Cocoa interface. It even merges Vim's editing capabilities with Textmate-derived snippets and syntax highlighting. &lt;br /&gt;&lt;br /&gt;Really, it tries to be an organic symbiosis of Vim and Textmate. And for most purposes, it very much succeeds in this. Syntax highlighting is very solid, there is a code browser, a nice file browser and full support for Textmate snippets. Vico even includes a powerful scripting environment that enables you to extend it in a language called Nu, which has the interesting aspect of being able to call into every object or method in the Cocoa libraries, thus opening the doors to a boundless world of wonders.   Its Vim integration is well on its way, too. The most notable omission at this point are macros. The developer is working on it though and has promised to implement them in the near future. Some other areas are lacking, too, but if development continues I see no reason why it should not become a very nice text editor. &lt;br /&gt;&lt;br /&gt;As it stands though, development of Vico is going slow and its community is not very large yet. Vico is a very nice tool, but at the end of the day, I miss the raw power of an &lt;i&gt;actual&lt;/i&gt; Vim just as I miss the vibrant community around Textmate. If you are not spoiled by Vim yet or find Vim just a bit too ugly for your taste, you could give Vico a try though. &lt;br /&gt;&lt;br /&gt;Personally, I like it quite a bit and I am hoping very much that it will not be forgotten as a failed attempt to modernize Vim. That said, what with Sublime Text 2 including a limited support for Vim key bindings, I can't really see Vico taking off.&lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-6"&gt;&lt;h3 id="sec-1-6"&gt;         &lt;/h3&gt;&lt;h3 id="sec-1-6"&gt;                          Sublime Text 2 &lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-6"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.sublimetext.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://2.bp.blogspot.com/-NoXwaxJ1Yxk/Tym4o2Ac7hI/AAAAAAAAASQ/3amv9DFizos/s320/Sublime+Text+2.png" width="75" /&gt;&lt;/a&gt;&lt;/div&gt;Sublime Text is a fairly recent development. It is a one-man project that has gained a lot of enthusiastic following in the last few months. In many ways, it feels like the next step in text editor development. Much like several other text editors out there, it has adopted Textmate snippets, color themes and syntax definitions as its core feature set. On top of that though, it has built a very powerful and flexible extension system that really sets it apart. &lt;br /&gt;&lt;br /&gt;Do you remember CMD-T from Textmate? To open some file, you would hit CMD-T and start typing a file name. The name would be fuzzy matched to select from all available files. Thus, typing `bcc` would select `BeaconController.cpp`. This form of selection is increadibly intuitive and fast. It is also the basis for the extension system of Sublime Text. If there is no keyboard shortcut for a command, hit CMD-Shift-P and start typing to invoke the command. &lt;br /&gt;&lt;br /&gt;In very much the same way as M-x in Emacs (though with fuzzy matching), this can invoke arbitrarily complex commands such as `install bundle` or using some refactoring library. Additionally, the same mechanism can be used to jump to method names or opening files. Really, these features are very efficient implementations of a code browser and file browser. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HnOJL7OpGpI/Tym4oIyQxAI/AAAAAAAAASM/VbcniELPR4A/s1600/Sublime.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-HnOJL7OpGpI/Tym4oIyQxAI/AAAAAAAAASM/VbcniELPR4A/s320/Sublime.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The second big thing about Sublime Text is just the ridiculous amount of polish it received. For example, if you have two files with the same name, it will prefix the tab titles with the folder they reside in. Simple, but so useful! If you jump around in a file, there is always a subtle scrolling animation. Even simple text selections have slightly rounded borders and just look amazingly beautiful. &lt;br /&gt;&lt;br /&gt;Also of note is that Sublime Text supports multiple cursors. Want to change then name of all occurrences of a variable? Just select them all (!) and change them all at once. This is another amazingly useful feature. &lt;br /&gt;Its plugin system is based in Python, which is a refreshingly non-awkward choice for a text editor and spawned an astonishing amount of very interesting plugins already. Indeed the plugin system is flexible enough to support things like linters, source control integration and even something akin to Emacs's org-mode.&lt;br /&gt;And it also supports &lt;a href="http://www.sublimetext.com/docs/2/vintage.html"&gt;Vim key bindings&lt;/a&gt;. Not very complete, but easily enough to be useful. Oh, and it is available cross-platform on Mac, Windows and Linux, too. &lt;br /&gt;&lt;br /&gt;I think there are three big families of text editors: Emacs, Vim, and shortcut-based text editors. Since I discovered Textmate however, I started believing that it represents a new branch in the big tree of text editors. Sublime Text seems to be the next step in the evolution of the Textmate branch. &lt;br /&gt;&lt;br /&gt;Really, Sublime Text is an amazing achievement. Maybe not quite as hackable as Emacs and not quite as flexible as Vim, but easily beating both in terms of elegance and modernity. If you don't want to learn Emacs or Vim, Sublime Text is what you should use. In fact, it is the first text editor ever that has tempted me to leave Emacs and Vim behind. Nuff said. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-3" id="outline-container-1-7"&gt;&lt;h3 id="sec-1-7"&gt;         &lt;/h3&gt;&lt;h3 id="sec-1-7"&gt;                          What else is out there &lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-7"&gt;Of course, that little list up there is by no means complete. Neither does it list all the amazing features these text editors have to offer, nor does it represent an exhaustive list of them. To the best of my knowledge, this is a short list of other text editors for the Mac platform. Note however, that I have never used any of them extensively and can only tell you stuff from heresay. &lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-1"&gt;&lt;h4 id="sec-1-7-1"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-1"&gt;                          BBEdit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-1"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.barebones.com/products/bbedit/index.html" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://1.bp.blogspot.com/-CvMGN3LD91U/Tym4VAWzuWI/AAAAAAAAAQE/wTOFDOD3dXg/s200/BBEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;BBEdit is the big daddy of Mac text editors. It is currently available in version 10 and has a huge follwing predominantly amongst web developers. As far as I can tell, it includes amazing features for editing HTML. Maybe amongst the best out there. &lt;br /&gt;The remainder of its feature set seems rather standard crop though. There is some support for compilation, source code control, snippets, plugins… Though nothing on the level of Vim or Emacs really. Its most important disadvantage is probably its lack of cross-platform availability and extensibility. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-2"&gt;&lt;h4 id="sec-1-7-2"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-2"&gt;                          TextWrangler &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-2"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.barebones.com/products/textwrangler/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-D0VCXR5Ta7c/Tym4sayebqI/AAAAAAAAAS4/1adW69g0p1E/s200/TextWrangler.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;TextWrangler is the free smaller brother of BBEdit. Its feature set is somewhat pared down in comparison with BBEdit. In particular, it is missing BBEdit's famous HTML magic and some advanced external tool integration.  &lt;br /&gt;Even for free, there are probably more capable candidates available, though maybe not at the same level of platform integration. That said, TextWrangler is not a bad choice and probably just fine for some casual text editing.   &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-3"&gt;&lt;h4 id="sec-1-7-3"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-3"&gt;                          Jedit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-3"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.jedit.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://1.bp.blogspot.com/-5fRSXSRSi9k/Tym4dEwrMxI/AAAAAAAAAQ4/81p6thopewE/s200/JEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;I really don't know much about JEdit other than that it is written in Java, it has a sizeable following and it is available cross-platform. It seems like it could be about as useful as any shortcut based text editor can ever be, which is no small achievement. Also, it features a rich plugin system, of which I only heard good things. &lt;br /&gt;For all I know, this could be a very worthy alternative if you are on a budget (no Sublime Text) and don't want to learn Emacs or Vim. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-4"&gt;&lt;h4 id="sec-1-7-4"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-4"&gt;                          Chocolat &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-4"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://chocolatapp.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://1.bp.blogspot.com/-QlCW7L9h9cY/Tym4WFZ5xeI/AAAAAAAAAQM/Hgoylco03B4/s200/Chocolat.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;Chocolat is yet another text editor that came into being in the post-Textmate void. It offers a good range of standard features, though notably missing advanced plugins apparently. Apart from that, it seems to be a solid shortcut based Mac text editor that is relatively cheap and actively developed. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-5"&gt;&lt;h4 id="sec-1-7-5"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-5"&gt;                          Kod &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-5"&gt;&lt;a href="http://www.kodapp.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-rMwL0zf1YuY/Tym4d1JjWuI/AAAAAAAAARE/W-DQqVXWfRo/s200/kod.png" width="50" /&gt;&lt;/a&gt;Kod started out as an open source alternative to Textmate. This is quite uncommon for a post-Textmate text editor and worth supporting. After a good start however, the developer found a new job and development has pretty much stalled. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-6"&gt;&lt;h4 id="sec-1-7-6"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-6"&gt;                          SubEthaEdit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-6"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.codingmonkeys.de/subethaedit" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://4.bp.blogspot.com/-BKaw26C09KI/Tym4nIlgycI/AAAAAAAAASE/9brwjiJ9DVg/s200/SubEthaEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;The great thing about SubEthaEdit is collaborative editing. if you want to edit text collaboratively with several people, SubEthaEdit performs the task seamlessly and elegantly. &lt;br /&gt;Beyond that, it is a capable shortcut-based text editor. If you don't need the collaboration feature, you should probably look elsewhere though. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-7"&gt;&lt;h4 id="sec-1-7-7"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-7"&gt;                          Smultron &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-7"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.peterborgapps.com/smultron/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-j9SVqjAcD8s/Tym4lzy4E1I/AAAAAAAAAR8/8Q6XhEkALQw/s200/Smultron.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;Another venerable veteran on the Mac, Smultron used to be a free open source text editor that had a sizeable following. However, the developer ceased development at some point and later restarted the effort as a paid app in the Mac App Store. &lt;br /&gt;Smultron lost most of its following in that transition. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-8"&gt;&lt;h4 id="sec-1-7-8"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-8"&gt;                          SlickEdit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-8"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.slickedit.com/products/slickedit" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://3.bp.blogspot.com/-F3fInIeC7uY/Tym4jyuDpvI/AAAAAAAAAR0/vaci7dPEvwg/s200/SlickEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;SlickEdit is easily the most expensive text editor in this list. A single user license for one platform and one developer costs a scant 300 bucks. That is a lot of money for a text editor and is usually only shelled out only for business critical platform exclusive IDEs. It seems as if SlickEdit tries to be exactly that for general purpose text editing. &lt;br /&gt;It's feature list reads very well and checks all mayor boxes. It is available on pretty much any platform out there and is probably only rivalled by Emacs or Vim in that regard. It also supports emulation for Emacs or Vim key bindings. &lt;br /&gt;That said, 300-600 $ per developer is a pretty hefty price tag. Personally, I doubt that SlickEdit can live up to that price if you compare it to some of the other examples in this list. It is undoubtedly a well-maintained and powerful text editor though. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-9"&gt;&lt;h4 id="sec-1-7-9"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-9"&gt;                          Komodo Edit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-9"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.activestate.com/komodo-edit" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://3.bp.blogspot.com/-_LoLPQ_mdic/Tym4eqK9NxI/AAAAAAAAARI/jJpACexInBQ/s200/komodo.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;Komodo Edit is the free open source offspring of ActiveState's Komodo IDE. It's feature set is very complete and seems to be very worthy for many editing tasks. Being of IDE ancestry provides it with nice plugin support and very helpful deep language integration like sophisticated autocompletion and syntax checking.  &lt;br /&gt;There are also quite good Vim key bindings and it is available on the three major platforms. However, its language support is limited to Perl, Python, Tcl, PHP, Ruby and Javascript. Probably not a bad choice if you can live with the language selection and are on a budget. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-10"&gt;&lt;h4 id="sec-1-7-10"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-10"&gt;                          TextEdit &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-10"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Q5uytRtwOTM/Tym7yKY3DpI/AAAAAAAAATQ/Z2iHfIUzoDw/s1600/TextEdit.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-Q5uytRtwOTM/Tym7yKY3DpI/AAAAAAAAATQ/Z2iHfIUzoDw/s200/TextEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;The built-in text editor in OSX. No syntax highlighting, project management or any programming support whatsoever make this a rather poor choice. There are plenty of free alternatives out there. &lt;br /&gt;That said, TextEdit does support rich text editing and might be of value for the odd letter to your grandma. &lt;/div&gt;&lt;/div&gt;&lt;div class="outline-4" id="outline-container-1-7-11"&gt;&lt;h4 id="sec-1-7-11"&gt;         &lt;/h4&gt;&lt;h4 id="sec-1-7-11"&gt;                          Text editors for web development &lt;/h4&gt;&lt;div class="outline-text-4" id="text-1-7-11"&gt;Strangely, all the major Mac text editors that cater specifically for web development are not cross platform. If web development is all you are ever doing though, these text editors might be well worth their money. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.panic.com/coda/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-dQWZ0VgImFE/Tym4Xf23QLI/AAAAAAAAAQU/l5L2uQyef3M/s200/Coda.png" width="50" /&gt;&lt;/a&gt;&lt;b&gt;Coda&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="outline-text-4" id="text-1-7-11"&gt;Combine the SubEthaEdit text editing engine including its collaborative tools with the great FTP program Transmit and you have CODA, the program for "one-window web development". It even includes a reference book to HTML in the package.  For what it is, probably of great value and nice polish. As a general purpose text editor, there are better alternatives.&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;a href="http://macrabbit.com/espresso/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://3.bp.blogspot.com/-7YlSR6CNxVk/Tym4b2FhVxI/AAAAAAAAAQ0/KSCt-sm5170/s200/Espresso.png" width="50" /&gt;&lt;/a&gt;&lt;b&gt;Espresso&lt;/b&gt;&lt;br /&gt;Another text editor gearing specifically for web development. Thus, you get powerful HTML and CSS editing features and good support for typical web development languages such as PHP, Ruby or Markdoen, but no support for other languages. There is an extension system though that could improve language support. This might be a slightly less expensive alternative to Coda.&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;a href="http://tacosw.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://4.bp.blogspot.com/-u5V7R-CuvLc/Tym4plYgEVI/AAAAAAAAASg/IxwO5mrsLXg/s200/taco.png" width="50" /&gt;&lt;/a&gt;&lt;b&gt;Taco HTML Editor&amp;nbsp;&lt;/b&gt;Another text editor geared exclusively towards web development. This time around though, there is no support for languages other than HTML, CSS and PHP, which makes this program a rather poor choice.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.beforedawnsolutions.com/applications/skedit" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="50" src="http://4.bp.blogspot.com/-EfC-4_Xo26Q/Tym4jMmfYQI/AAAAAAAAARo/9O_7hllr0wg/s200/skEdit.png" width="50" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="outline-text-4" id="text-1-7-11"&gt;&lt;b&gt;skEdit&lt;/b&gt; &lt;br /&gt;skEdit supports a nice array of web development languages and offers a good range of features for a web development text editor. Also, it is pretty inexpensive in comparison to its brethren here. Probably a nice choice for web development if you are on a budget.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;h3 id="sec-1-1" style="text-align: left;"&gt;                         List of major text editors on the Mac:&lt;/h3&gt;&lt;div class="outline-text-3" id="text-1-1"&gt;&lt;table border="2" cellpadding="6" cellspacing="0" frame="hsides" rules="groups" style="text-align: center;"&gt;&lt;caption&gt;&lt;/caption&gt;&lt;colgroup&gt;&lt;col class="left"&gt;&lt;/col&gt;&lt;col class="right"&gt;&lt;/col&gt;&lt;col class="left"&gt;&lt;/col&gt;&lt;col class="left"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="left" scope="col"&gt;Name&lt;/th&gt;&lt;th class="right" scope="col"&gt;Current version&lt;/th&gt;&lt;th class="left" scope="col"&gt;Price&lt;/th&gt;&lt;th class="left" scope="col"&gt;Availability&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="left"&gt;Vim&lt;/td&gt;&lt;td class="right"&gt;7.3.315&lt;/td&gt;&lt;td class="left"&gt;Open Source&lt;/td&gt;&lt;td class="left"&gt;cross platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Emacs&lt;/td&gt;&lt;td class="right"&gt;24.0.92 pretest&lt;/td&gt;&lt;td class="left"&gt;Open Source&lt;/td&gt;&lt;td class="left"&gt;cross platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Textmate&lt;/td&gt;&lt;td class="right"&gt;v2 Alpha&lt;/td&gt;&lt;td class="left"&gt;45 EUR&lt;/td&gt;&lt;td class="left"&gt;OSX (and E on Win)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Vico&lt;/td&gt;&lt;td class="right"&gt;1.3&lt;/td&gt;&lt;td class="left"&gt;32 EUR&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Sublime Text 2&lt;/td&gt;&lt;td class="right"&gt;Build 2165&lt;/td&gt;&lt;td class="left"&gt;60 USD&lt;/td&gt;&lt;td class="left"&gt;Win, OSX, Linux&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;BBEdit&lt;/td&gt;&lt;td class="right"&gt;10.1.1&lt;/td&gt;&lt;td class="left"&gt;40 EUR&lt;/td&gt;&lt;td class="left"&gt;&lt;div&gt;OSX only&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;TextWrangler&lt;/td&gt;&lt;td class="right"&gt;3.5.3&lt;/td&gt;&lt;td class="left"&gt;Free&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Jedit&lt;/td&gt;&lt;td class="right"&gt;4.5pre1&lt;/td&gt;&lt;td class="left"&gt;Open Source&lt;/td&gt;&lt;td class="left"&gt;cross platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Chocolat&lt;/td&gt;&lt;td class="right"&gt;0.057&lt;/td&gt;&lt;td class="left"&gt;50 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Kod&lt;/td&gt;&lt;td class="right"&gt;0.0.3&lt;/td&gt;&lt;td class="left"&gt;Open Source&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;SubEthaEdit&lt;/td&gt;&lt;td class="right"&gt;3.5.4&lt;/td&gt;&lt;td class="left"&gt;30 EUR&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Smultron&lt;/td&gt;&lt;td class="right"&gt;4&lt;/td&gt;&lt;td class="left"&gt;5 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;SlickEdit&lt;/td&gt;&lt;td class="right"&gt;2011 / 16.1.0&lt;/td&gt;&lt;td class="left"&gt;300-600 USD&lt;/td&gt;&lt;td class="left"&gt;cross platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Komodo Edit&lt;/td&gt;&lt;td class="right"&gt;7.0.0c2&lt;/td&gt;&lt;td class="left"&gt;Free&lt;/td&gt;&lt;td class="left"&gt;cross platform&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;TextEdit&lt;/td&gt;&lt;td class="right"&gt;1.7&lt;/td&gt;&lt;td class="left"&gt;builtin&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Coda&lt;/td&gt;&lt;td class="right"&gt;1.7.5&lt;/td&gt;&lt;td class="left"&gt;100 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Espresso&lt;/td&gt;&lt;td class="right"&gt;2.0.1&lt;/td&gt;&lt;td class="left"&gt;80 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;Taco HTML Editor&lt;/td&gt;&lt;td class="right"&gt;3.0.2&lt;/td&gt;&lt;td class="left"&gt;25 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="left"&gt;skEdit&lt;/td&gt;&lt;td class="right"&gt;4.1.5&lt;/td&gt;&lt;td class="left"&gt;30 USD&lt;/td&gt;&lt;td class="left"&gt;OSX only&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/4140314869569920718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2012/02/text-editors.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4140314869569920718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4140314869569920718'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2012/02/text-editors.html' title='Text Editors'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-7yI5rdwDRsE/Tym4f8w0t0I/AAAAAAAAARY/CKwnSi9VnBc/s72-c/MacVim+Icon.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-4976154313947505287</id><published>2011-12-04T20:21:00.001+01:00</published><updated>2011-12-04T20:39:02.537+01:00</updated><title type='text'>How to make Tagbar work with Objective-C</title><content type='html'>For the longest time, ctags did not support Objective-C. Without tags, many of the cool programming-related features of Vim simply didn't work. (There are ways to coax other programs to output tags, but this is usually painful)&lt;br /&gt;&lt;br /&gt;Recently however, ctags finally gained support for Objective-C! Hurrah!&lt;br /&gt;As of today, Objective-C support is not in the stable branch yet, but thanks to the magic of homebrew, an Obj-C ready ctags is only a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;brew install ctags --HEAD&lt;/span&gt;&amp;nbsp;away!&lt;br /&gt;&lt;br /&gt;With that, tag navigation in Vim works for Objective-C. Awesome!&lt;br /&gt;However, Tagbar does not work yet. There used to be &lt;a href="http://stackoverflow.com/a/5790832/1034"&gt;a workaround&lt;/a&gt; that&amp;nbsp;apparently&amp;nbsp;worked for some people, but it did not work for me.&lt;br /&gt;Things like this drive me nuts. I can see that tags are being generated, but Tagbar won't show them. What is going wrong?&lt;br /&gt;&lt;br /&gt;Some investigation proved: There is simply no template in Tagbar for Objective-C! Luckily, that can be fixed quite easily: Simply put this code in your .vimrc:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;" add a definition for Objective-C to tagbar&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;let g:tagbar_type_objc = {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ 'ctagstype' : 'ObjectiveC',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ 'kinds' &amp;nbsp; &amp;nbsp; : [&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'i:interface',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'I:implementation',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'p:Protocol',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'm:Object_method',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'c:Class_method',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'v:Global_variable',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'F:Object field',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'f:function',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'p:property',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 't:type_alias',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 's:type_structure',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'e:enumeration',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'M:preprocessor_macro',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ ],&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ 'sro' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: ' ',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ 'kind2scope' : {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'i' : 'interface',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'I' : 'implementation',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'p' : 'Protocol',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 's' : 'type_structure',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'e' : 'enumeration'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ },&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ 'scope2kind' : {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'interface' &amp;nbsp; &amp;nbsp; &amp;nbsp;: 'i',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'implementation' : 'I',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'Protocol' &amp;nbsp; &amp;nbsp; &amp;nbsp; : 'p',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'type_structure' : 's',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ 'enumeration' &amp;nbsp; &amp;nbsp;: 'e'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; \ }&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;\ }&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;With that, Tagbar should work. Admittedly, it won't work perfectly yet. Class definitions will show up in addition to their contents and the contents of all categories will go into the same list. Also, you won't get much more than a flat list of functions with no way to distinguish between class methods and object methods. This can be confusing at times, but by and large, it does the job!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Happy Vimming!&lt;/span&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/4976154313947505287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/12/how-to-make-tagbar-work-with-objective.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4976154313947505287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4976154313947505287'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/12/how-to-make-tagbar-work-with-objective.html' title='How to make Tagbar work with Objective-C'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-2850989531804934437</id><published>2011-10-13T15:27:00.003+02:00</published><updated>2011-10-13T15:27:57.915+02:00</updated><title type='text'>Compiling Scipy and Matplotlib again</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Well, it's compile time again. Once again, I need to install scipy and matplotlib using homebrew and pip on Lion.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;It seems things have improved since I tried to compile last time! Well, it still does not work out of the box, but at least now it &lt;i&gt;can&lt;/i&gt; be done without compiling by hand:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(remember to brew install &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pkg-config&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; and &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;gfortran&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; first)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pip install -e git+https://github.com/scipy/scipy#egg=scipy-dev&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pip install -e git+https://github.com/matplotlib/matplotlib#egg=matplotlib&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I must say, this is still a mess. But at least, it is getting less bad.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/2850989531804934437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/10/compiling-scipy-and-matplotlib-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2850989531804934437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2850989531804934437'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/10/compiling-scipy-and-matplotlib-again.html' title='Compiling Scipy and Matplotlib again'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-4378544130496203793</id><published>2011-09-03T13:08:00.001+02:00</published><updated>2011-09-03T13:08:38.213+02:00</updated><title type='text'>Adobe AIR Application Crashes</title><content type='html'>Adobe, oh Adobe. Why?&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Your updater pops open. Adobe AIR 2.5, if I remember correctly. It runs, and after that, all AIR applications stop working. They boot, then crash and barf up a crash report.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out, this is a problem with case sensitive file systems. If your file system is not case sensitive, you are experiencing some other problem and this fix is not for you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See, Adobe has this library called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;WebKit.dylib&lt;/span&gt;. However, their code actually looks for &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Webkit.dylib&lt;/span&gt; (note the capitalisation of the K). Well, spelling is hard, I presume.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At least this is an error that can easily be fixed. Fire up your terminal, type&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;cd /Library/Frameworks/Adobe\ AIR.framework/Version/Current/Resources/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo ln -s WebKit.dylib Webkit.dylib&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Then enter your password and your AIR applications should work again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Dear Adobe, is it too much to ask to pretty please make your software work on a case sensitive file system? Spelling is primary school stuff. It is really not that hard!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/4378544130496203793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/09/adobe-air-application-crashes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4378544130496203793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4378544130496203793'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/09/adobe-air-application-crashes.html' title='Adobe AIR Application Crashes'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-2941335878119540944</id><published>2011-08-01T12:40:00.000+02:00</published><updated>2011-08-01T12:40:07.692+02:00</updated><title type='text'>Compiling Scipy and Matplotlib using pip on Lion</title><content type='html'>&lt;p&gt;So I upgraded to Lion. Predictably, some things went wrong. This time, the main thing that bit me was that for some reason, &lt;code&gt;pip&lt;/code&gt; stopped working. After a bit of messing around with &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;pip&lt;/code&gt; and &lt;code&gt;easy_install&lt;/code&gt;, I found out it was almost entirely my own fault. I messed up my &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;In the meantime, I had uninstalled all of &lt;code&gt;brew&lt;/code&gt;'s Python, so I had to reinstall. For me, that entails Python, Numpy, Scipy and Matplotlib. Only this time, Scipy would not build. Some obscure error in some &lt;code&gt;veclib_cabi_c.c&lt;/code&gt; would report errors. A quick &lt;a href="http://mail.scipy.org/pipermail/scipy-user/2009-June/021383.html"&gt;round of googling&lt;/a&gt; reveals:&lt;/p&gt;&lt;p&gt;In order to get Scipy to compile, you need to insert &lt;code&gt;#include &amp;lt;complex.h&amp;gt;&lt;/code&gt; in&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;./scipy/lib/blas/fblaswrap_veclib_c.c.src&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;./scipy/linalg/src/fblaswrap_veclib_c.c&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;./scipy/sparse/linalg/eigen/arpack/ARPACK/FWRAPPERS/veclib_cabi_c.c&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That done, Scipy compiles perfectly fine.&lt;/p&gt;&lt;p&gt;But, that is not enough yet. As &lt;a href="http://jholewinski.wordpress.com/2011/07/21/installing-matplotlib-on-os-x-10-7-with-homebrew/"&gt;this blogpost&lt;/a&gt; outlines, Matplotlib is not currently compatible with &lt;code&gt;libpng&lt;/code&gt; 1.5, which ships with Lion. Fortunately, this is already fixed in the most recent source on the Matplotlib repo, so you just have to checkout that:&lt;/p&gt;&lt;pre&gt;&lt;code&gt; pip install -e git+https://github.com/matplotlib/matplotlib.git#egg=matplotlib&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;By doing that, Matplotlib should install just fine.&lt;/p&gt;&lt;p&gt;Seriously though, these PyPi repos are in a very sorry state. Every time I install one of these packages, I have to jump through hoops and spend hours debugging packages that really should work right out of the box. After all, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;rvm&lt;/code&gt; and &lt;code&gt;gem&lt;/code&gt; can do it just fine. Why is &lt;code&gt;pip&lt;/code&gt; such a horrible mess? &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/2941335878119540944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/08/compiling-scipy-and-matplotlib-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2941335878119540944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2941335878119540944'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/08/compiling-scipy-and-matplotlib-using.html' title='Compiling Scipy and Matplotlib using pip on Lion'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-3234898429995420734</id><published>2011-03-04T14:16:00.000+01:00</published><updated>2011-03-04T14:16:37.829+01:00</updated><title type='text'>Installing Pygame using Homebrew</title><content type='html'>&lt;p&gt;So I want to do audio development on the Mac without using Matlab. An alternative to Matlab is Python, or rather, &lt;a href="http://www.daskrachen.com/2011/02/installing-pythonnumpyscipymatplotlib.html"&gt;Numpy, Scipy and Matplotlib&lt;/a&gt;. They are awesome for working with audio data. What they don't do however is playing back audio. There are several packages out there that would afford audio playback. If you are serious about this though, you not only want audio playback, you want &lt;em&gt;asynchronous&lt;/em&gt; audio playback. That is, you want to send some audio data to the sound card and continue with your program without waiting for the audio to finish playing. This allows continuous audio playback of computer-generated sound.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pygame.org/news.html"&gt;Pygame&lt;/a&gt; is one package that allows this. (I will submit a patch to &lt;a href="http://people.csail.mit.edu/hubert/pyaudio/"&gt;Pyaudio&lt;/a&gt; soon that will enable it there, too). There are pre-built binaries on the Pygame website that you can install easily. But then there would be no easy way to uninstall them, so what I would rather want is to install Pygame using package managers that allow easy updating and uninstallation. My tool of choice on the Mac is of course &lt;a href="https://github.com/mxcl/homebrew/"&gt;Homebrew&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Note that although I am mostly interested in audio playback, this post will detail the installation of all modules of Pygame, not just &lt;code&gt;pygame.mixer&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Homebrew won't install Pygame, but it will install all the prerequisites for Pygame. So, let's do that.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install sdl, sdl_mixer, sdl_ttf, libpng, jpeg, sdl_image, portmidi&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will install most packages for you. Note that libpng is also available as a system library, so it is installed &lt;code&gt;keg_only&lt;/code&gt;, that is, without linking it in your path. We will need to compile against it though, so the next step is&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew link libpng&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now there is still one package missing, &lt;code&gt;smpeg&lt;/code&gt;. Sadly, &lt;code&gt;smpeg&lt;/code&gt; does not install its headers, so you can't compile against it. To fix that, type&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew edit smpeg&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and add the following line just above the two &lt;code&gt;end&lt;/code&gt; at the end of the file&lt;/p&gt;&lt;pre&gt;&lt;code&gt;include.install Dir["*.h"]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then save the file. (I submitted a bug to have this fixed, so you might not need to do this when you read this). Now you can install &lt;code&gt;smpeg&lt;/code&gt; with the usual&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install smpeg&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and you will get the headers, too. Isn't Homebrew great?&lt;/p&gt;&lt;p&gt;Now that all the prerequisites are met, lets look at Pygame itself. This is rather more difficult, as it will not build properly against Homebrew libraries on its own. First, download the source package of Pygame from the &lt;a href="http://www.pygame.org/download.shtml"&gt;official website&lt;/a&gt;. Unpack it to some directory. &lt;br /&gt;&lt;br /&gt;Now open a terminal and navigate to that directory. Me, I like &lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt;, but Terminal.app will do just fine, too. In there, run &lt;code&gt;python config.py&lt;/code&gt; to create an initial setup file.&lt;/p&gt;&lt;p&gt;At this point, the setup file is mostly useless since &lt;code&gt;config.py&lt;/code&gt; failed to find any homebrew-installed library. It is also strangely garbled, so there is some manual labor to do. Open the file &lt;code&gt;Setup&lt;/code&gt; (no extension) in your favourite text editor. After the first comment block, you will see a line that looks like this&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SDL = -I/NEED_INC_PATH_FIX -L/NEED_LIB_PATH_FIX -lSDL&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Obviously, this is lacking the paths to the SDL library. If you installed Homebrew to its default directory, this will be in &lt;code&gt;/usr/local…&lt;/code&gt;. Hence, change this line to&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SDL = -I/usr/local/include/SDL -L/usr/local/lib -lSDL&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The next lines are strangely garbled. They say, for example&lt;/p&gt;&lt;pre&gt;&lt;code&gt;FONT = -lS -lD -lL -l_ -lt -lt -lf&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Where they actually should say&lt;/p&gt;&lt;p&gt;FONT = -lSDL_ttf&lt;/p&gt;&lt;p&gt;Instead of having one &lt;code&gt;-l&lt;/code&gt; and then the library name &lt;code&gt;SDL_ttf&lt;/code&gt;, they put &lt;code&gt;-l&lt;/code&gt; in front of every single letter of the name. This is strange, and certainly wrong. So, correct it for &lt;code&gt;FONT&lt;/code&gt;, &lt;code&gt;IMAGE&lt;/code&gt;, &lt;code&gt;MIXER&lt;/code&gt; and &lt;code&gt;SMPEG&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Note that I did not tell you to do this for &lt;code&gt;PORTTIME&lt;/code&gt;, too. Actually, &lt;code&gt;PORTTIME&lt;/code&gt; is already correctly linked in &lt;code&gt;PORTMIDI&lt;/code&gt;, so you don't need that at all any more. Just delete or comment the &lt;code&gt;PORTTIME&lt;/code&gt; line.&lt;/p&gt;&lt;p&gt;Now that all the dependencies are corrected, lets enable the features. A few lines further down, there will be a block of lines, where most lines begin with a &lt;code&gt;#&lt;/code&gt; except for the ones beginning with &lt;code&gt;_numericsurfarray…&lt;/code&gt; and &lt;code&gt;_camera…&lt;/code&gt;, These are the different features of Pygame: The ones with the &lt;code&gt;#&lt;/code&gt; are disabled, the other two are enabled.&lt;/p&gt;&lt;p&gt;With all the stuff we installed earlier, you can now enable all features (remove the &lt;code&gt;#&lt;/code&gt; in front of &lt;code&gt;imageext…&lt;/code&gt;, &lt;code&gt;font…&lt;/code&gt;, &lt;code&gt;mixer…&lt;/code&gt;, &lt;code&gt;mixer_music…&lt;/code&gt;, &lt;code&gt;_minericsndarray…&lt;/code&gt;, &lt;code&gt;movie…&lt;/code&gt;, &lt;code&gt;scrap…&lt;/code&gt; and &lt;code&gt;pypm…&lt;/code&gt;). &lt;/p&gt;&lt;p&gt;Remember we disabled &lt;code&gt;PORTTIME&lt;/code&gt; a while ago? Right, so we have to remove that dependency: In the line starting with &lt;code&gt;pypm…&lt;/code&gt;, delete the part that says &lt;code&gt;$(PORTTIME)&lt;/code&gt;. Great. That was easy, right? Now save that file and go back to the Terminal.&lt;/p&gt;&lt;p&gt;We are now going to compile and install Pygame. The nice thing is, even though we are installing it manually, it will go in the right directories and it will be registered with &lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;easy_install&lt;/code&gt;, so you can just invoke them if you want to uninstall it later by typing &lt;code&gt;pip uninstall pygame&lt;/code&gt;. This is something I love about Python!&lt;/p&gt;&lt;p&gt;Alright, now without further ado, install Pygame by typing&lt;/p&gt;&lt;pre&gt;&lt;code&gt;python setup.py install&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Great! That's it! Everything should work now!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/3234898429995420734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/03/installing-pygame-using-homebrew.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/3234898429995420734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/3234898429995420734'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/03/installing-pygame-using-homebrew.html' title='Installing Pygame using Homebrew'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-88725200732747365</id><published>2011-02-03T16:23:00.001+01:00</published><updated>2011-03-23T10:56:07.714+01:00</updated><title type='text'>Installing Python/Numpy/Scipy/Matplotlib on OSX</title><content type='html'>&lt;p&gt;For numerical analysis and signal processing prototyping, you would use &lt;a href="http://www.mathworks.com/products/matlab/" title="Matlab"&gt;Matlab&lt;/a&gt;. However, Matlab has some downsides that might make it unsuitable for your project. It might be too expensive. You might be a snobbish programmer that can't stand less-than-elegant programming languages. I certainly am.&lt;/p&gt;&lt;p&gt;So, you look for alternatives. You could take &lt;a href="http://www.gnu.org/software/octave/" title="Octave"&gt;Octave&lt;/a&gt;, which is free, but that would not solve that ugly-code issue. You could take any scripting language you fancy, but Ruby, Perl and Python are too slow to do serious number crunching.&lt;/p&gt;&lt;p&gt;Then, you stumble upon that Python package called &lt;a href="http://numpy.scipy.org/" title="NumPy"&gt;Numpy&lt;/a&gt;, which seems to be nearly as fast as Matlab when it comes to matrix processing and linear algebra. You then discover &lt;a href="http://www.scipy.org/" title="SciPy"&gt;SciPy&lt;/a&gt;, which would add all that signal processing prowess of Matlab (do quick transformations, random numbers, statistics) to your toolbox. Last but not least, you need plotting. That would be &lt;a href="http://matplotlib.sourceforge.net/" title="matplotlib"&gt;Matplotlib&lt;/a&gt; then, which provides quick plotting facilities in Python. &lt;br /&gt;&lt;br /&gt;And the best thing is, these three systems work really well together. They seem to be the perfect replacement for Matlab that could even be superiour to it in many regards.&lt;/p&gt;&lt;p&gt;Next up, you need to install all that stuff. If you are like me, you naturally want to do all that on a Mac. Also, you kind of dislike all these installer-thingies, which install stuff to unknown places and are nigh impossible to uninstall or update cleanly. Even though, you could of course just go to the individual websites, download Python, Numpy, SciPy and Matplotlib, run them installers, and be done. You would save yourself a lot of trouble that way. &lt;br /&gt;&lt;br /&gt;But since you allegedly &lt;em&gt;are&lt;/em&gt; like me, you instead fire up &lt;a href="http://mxcl.github.com/homebrew" title="homebrew"&gt;&lt;code&gt;brew&lt;/code&gt;&lt;/a&gt; and try to install all that stuff using that. Again, you could use &lt;a href="http://www.macports.org/" title="MacPorts"&gt;MacPorts&lt;/a&gt; or &lt;a href="http://www.finkproject.org/" title="Fink"&gt;Fink&lt;/a&gt; instead, but you probably had some bad experiences with them and you generally love the hackishness of Homebrew, so this is your natural first try.&lt;/p&gt;&lt;p&gt;So you set about this, you believe in packet managers and trust them to take care of every obstacle that might be lying in your way. First of all, install the latest developer tools from &lt;a href="http://developer.apple.com/" title="ADC"&gt;developer.apple.com&lt;/a&gt;. You might need to register (for free) to get them. Also, you need to install &lt;a href="http://mxcl.github.com/homebrew" title="homebrew"&gt;Homebrew&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To cut this short, here is what you need to get that Python running:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install python&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one should be obvious. At the time of writing, it will install Python 2.7.1. You could take Python 3, but matplotlib is not compatible to it, so you kind of have to stick with 2.7.1 instead.&lt;/p&gt;&lt;p&gt;You also need to put &lt;code&gt;/usr/local/bin&lt;/code&gt; and &lt;code&gt;/usr/local/sbin&lt;/code&gt; in the beginning of your path to make sure the &lt;em&gt;new&lt;/em&gt; Python gets loaded instead of the pre-installed one. You do that by writing&lt;/p&gt;&lt;pre&gt;&lt;code&gt;export PATH=/usr/local/bin:/usr/local/sbin:$PATH&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in your &lt;code&gt;~/.bash_profile&lt;/code&gt;. (Create it if its not there--it is just a simple text file).&lt;/p&gt;&lt;p&gt;Now, if you type &lt;code&gt;python --version&lt;/code&gt;, you should get &lt;code&gt;Python 2.7.1&lt;/code&gt; as a response.&lt;/p&gt;&lt;p&gt;Alright, next up, install the python package manager:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install distribute&lt;br /&gt;brew install pip&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will come preconfigured for your newly installed Python. In an ideal world, this should be all. The world being as it is, the pip package of Matplotlib is severely broken and has one other unstated dependency:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install pkg-config&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, SciPy is using some FORTRAN sources, so you need a fortran compiler:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;brew install gfortran&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alright. That was enough. Now on to pip. With all these dependencies cleared, pip should be able to download Numpy and Scipy without trouble:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pip install numpy&lt;br /&gt;pip install scipy&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Matplotlib, on the other hand, is more difficult to install. You see, pip is looking at the Python package repository &lt;a href="http://pypi.python.org/" title="PyPi"&gt;PyPi&lt;/a&gt; for each package. PyPi then provides a URL. Pip then scans that website for links to suitable package files. But, &lt;a href="http://sourceforge.net/" title="SourceForge"&gt;Sourceforge&lt;/a&gt; changed its links a while ago, so pip gets confused and will download an outdated version. Sourceforge says, its new links are way better and no way we will change them back; Pip says, well, if Sourceforge can't provide proper links, that's not our problem. Oh My. Silly children. &lt;br /&gt;&lt;br /&gt;So we have to do this manually:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;pip install -f http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That URL comes straight from Sourceforge. Look for the latest version of Matplotlib, search for the download link to the source distribution (&lt;code&gt;*.tar.gz&lt;/code&gt;), copy that link and strip any trailing '/download'.&lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;It seems the matplotlib package was updated in the meantime, so you can just run &lt;code&gt;pip install matplotlib&lt;/code&gt; now.&lt;/p&gt;&lt;p&gt;This should now download and install matplotlib.&lt;/p&gt;&lt;p&gt;Thank you for reading.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/88725200732747365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2011/02/installing-pythonnumpyscipymatplotlib.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/88725200732747365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/88725200732747365'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2011/02/installing-pythonnumpyscipymatplotlib.html' title='Installing Python/Numpy/Scipy/Matplotlib on OSX'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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-2738742852720994552.post-2212468004601679751</id><published>2010-07-03T12:08:00.000+02:00</published><updated>2010-07-03T12:08:11.516+02:00</updated><title type='text'>The strangeness of widescreen displays in modern operating systems</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_e-cZlUtocGc/TC8IUpDe5xI/AAAAAAAAAMY/ur1HD_EmhDQ/s1600/File-Screens_png.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="172" src="http://2.bp.blogspot.com/_e-cZlUtocGc/TC8IUpDe5xI/AAAAAAAAAMY/ur1HD_EmhDQ/s200/File-Screens_png.png" width="200" /&gt;&lt;/a&gt;So today, pretty much everyone has widescreen displays. That is, displays that are far more wide than high. This was not always so. In ye olden days, computers were mainly used for displaying text, hence displays tended to have a similar layout as books or magazines. Today, they are more like movies (which might be worrying in itself).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_e-cZlUtocGc/TC8LWqiir5I/AAAAAAAAAMg/cUErYQJbICI/s1600/Screen+shot+2010-07-03+at+12.04.37.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="121" src="http://2.bp.blogspot.com/_e-cZlUtocGc/TC8LWqiir5I/AAAAAAAAAMg/cUErYQJbICI/s200/Screen+shot+2010-07-03+at+12.04.37.png" width="200" /&gt;&lt;/a&gt;So todays displays are widescreen. To do all that modern stuff, like watch (widesreened) videos or multitask (display two windows side by side). However, this also means that vertical pixels are something of a scarcity. Especially on those small Laptop screens. In fact, the first Netbook screens were so tiny that many of Windows' own windows could not be used at all since the lower parts did not fit on the screen. Raise your hand if Word 2007 leaves barely ten lines of visible text between all its blue-tinted UI-splendour on your laptop screen.&lt;br /&gt;&lt;br /&gt;This gets most straining when reading text. On the internet for example. There is practically no website at all that can be displayed in its entirity even on one of those full HD displays. Print-formatted documents are a similar matter. Actually, I find myself craving for pixels regularly. I even disable the bookmark bar in my browser to free those extra two lines of text. And I memorize keyboard shortcuts so I can hide toolbars. And I use Google Chrome instead of Firefox/Safari/Internet Explorer, not least of all since it has the smallest title bar and no bottom bar.&lt;br /&gt;&lt;br /&gt;Why, then, do modern operating systems still waste so much vertical space with that Dock/Taskbar? This is something I really don't get. Vertical space is such a scarcity, yet virtually every operating system choses to waste at least three lines of text with something that could easily go on the side of the display. Well, at least on Windows 7 and OSX that is something you can easily change.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e-cZlUtocGc/TC8H4JNjKrI/AAAAAAAAAMQ/VzKrUAsKz10/s1600/Screen+shot+2010-07-03+at+11.50.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="48" src="http://1.bp.blogspot.com/_e-cZlUtocGc/TC8H4JNjKrI/AAAAAAAAAMQ/VzKrUAsKz10/s640/Screen+shot+2010-07-03+at+11.50.00.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So if you are like me and appreciate every added line of text, do yourself a favour and put your Dock/Taskbar on the side. Really, this should be the default.</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/2212468004601679751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2010/07/strangeness-of-widescreen-displays-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2212468004601679751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/2212468004601679751'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2010/07/strangeness-of-widescreen-displays-in.html' title='The strangeness of widescreen displays in modern operating systems'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e-cZlUtocGc/TC8IUpDe5xI/AAAAAAAAAMY/ur1HD_EmhDQ/s72-c/File-Screens_png.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-6897105242045738640</id><published>2009-04-25T14:15:00.001+02:00</published><updated>2009-04-25T14:29:11.040+02:00</updated><title type='text'>Gedanken zu User Interfaces</title><content type='html'>Jeder kennt dieses Fenster:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SfL-8pT9ecI/AAAAAAAAAKU/f_rJwBg0zTI/s1600-h/Delete+File.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 208px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SfL-8pT9ecI/AAAAAAAAAKU/f_rJwBg0zTI/s400/Delete+File.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5328601626967898562" /&gt;&lt;/a&gt;&lt;br /&gt;Dieses Fenster ist eine ziemlich schlechte Idee, denn jeder geübte Benutzer hat irgendwann gelernt, dass die Aktion "Dateien Löschen" aus drei Gesten besteht: (1) Dateien auswählen, (2) Die Löschaktion einleiten, (3) Den Löschdialog bestätigen. Leider hat man schon vor mehr als zwanzig Jahren nachgewiesen, dass solche zusammengehörigen Gesten von den Benutzern als einzelne "Datei-Löschen" Geste abstrahiert werden. Man kennt das vom Tippen: Man tippt Worte nicht, indem man einzelne Buchstaben aneinander hängt, sondern man tippt Worte fast immer am Stück; Hat man erst einmal angefangen, ein falsches Wort zu tippen, kann man damit nicht aufhören, bis das gesamte Wort getippt ist. Auf ähnliche Weise ist es dem Benutzer auch nicht möglich, auf den Löschdialog sinnvoll zu reagieren, da das Bestätigen der Sicherheitsfrage vollkommen automatisiert ist und daher nicht einmal verhindert werden könnte, wenn man wollte. &lt;br /&gt;Die Alternative ist ein alter Bekannter: Undo. Statt den Benutzer im Vorfeld zu fragen, ob er die Datei wirklich löschen möchte (was er durch Einleiten der Löschaktion bereits bejaht hat) gibt man ihm die Möglichkeit, die Aktion im Nachhinein wieder rückgängig zu machen. Das ist wesentlich effektiver und kommt ohne nerviger Dialogbox aus. Übrigens funktioniert Dateiaktion-Undo bereits heute in allen Betriebssystem außer Linux, jedoch ohne Menüicon und zumeist nur für die letzte Aktion. Wäre es nicht schön, wenn dies noch weiter ausgebaut würde?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Noch ein gefährlicher Dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SfL_M37yzRI/AAAAAAAAAKc/uVqv3m6JkcM/s1600-h/JaNeinAbbrechen.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 131px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SfL_M37yzRI/AAAAAAAAAKc/uVqv3m6JkcM/s400/JaNeinAbbrechen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5328601905770974482" /&gt;&lt;/a&gt;&lt;br /&gt;Das ist ebenfalls ein alter Bekannter, der immer dann erscheint, wenn man ein Programm schließen will, welches noch ungesichte Änderungen enthält: Abgesehen von dem offensichtlichen Problem, dass "Abbrechen" keinen wirklichen Sinn ergibt (Was abbrechen? Das Programm?) erfordert diese Frage jedes Mal das komplette Lesen der Meldung, bis man entschlüsseln kann, was "Ja" und "Nein" in diesem Kontext bedeuten. Um das noch einmal zu verdeutlichen, hier ein besonders schlimmes Beispiel:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SfL_T-VCFJI/AAAAAAAAAKk/-Kz--VD7DQg/s1600-h/Bad+GUI.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SfL_T-VCFJI/AAAAAAAAAKk/-Kz--VD7DQg/s400/Bad+GUI.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5328602027746530450" /&gt;&lt;/a&gt;&lt;br /&gt;Es leuchtet ein, dass hier ein eindeutigerer Dialog wesentlich sinnvoller wäre, bei dem sofort ersichtlich ist, was welcher Button tun wird: (Merke: Auf Buttons gehören immer Verben) &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e-cZlUtocGc/SfL_ZG00dEI/AAAAAAAAAKs/BzELPR_xXZY/s1600-h/Speichern.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 394px; height: 187px;" src="http://1.bp.blogspot.com/_e-cZlUtocGc/SfL_ZG00dEI/AAAAAAAAAKs/BzELPR_xXZY/s400/Speichern.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5328602115926684738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e-cZlUtocGc/SfL_dh_M01I/AAAAAAAAAK0/yRfOp5wftZw/s1600-h/Speichern+2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 115px;" src="http://3.bp.blogspot.com/_e-cZlUtocGc/SfL_dh_M01I/AAAAAAAAAK0/yRfOp5wftZw/s400/Speichern+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5328602191937459026" /&gt;&lt;/a&gt;&lt;br /&gt;Aber warum eigentlich überhaupt speichern? Warum muss ich mich persönlich darum kümmern, meine Arbeit zu speichern? Ich dachte, ich würde mit einer Datei arbeiten -- aber wenn diese Datei nicht geändert wird, wenn ich nicht zuerst "Speichern" anklicke, habe ich wohl eigentlich doch nicht mit dieser Datei, sondern mit einer heimlichen Kopie gearbeitet. Wäre es nicht viel sinnvoller, immer automatisch zu speichern, und statt des "Speichern"-Buttons eine "auf Urzustand zurücksetzen"-Funktion bereitzustellen? Ich bin mir auf jeden Fall sicher, dass man den "Undo all changes"-Button wesentlich seltener bräuchte als den "Speichern"-Button, denn wenn der Benutzer nicht vorgehabt hätte, neuen Text in eine Datei zu schreiben, &lt;i&gt;dann hätte er keinen neuen Text in die Datei geschrieben&lt;/i&gt;. Hat er dennoch "versehentlich" Text eingegeben, ist das ein klarer "Benutzerfehler", also der logische Einsatzzweck für Undo.&lt;br /&gt;&lt;br /&gt;Das sind nur zwei Beispiele, wie man intelligente Undo-Mechanismen sinnvoll einsetzen könnte, um das Arbeiten am Computer angenehmer zu gestalten. Ich wünschte, mehr Leute würden sich mit diesen Dingen auseinander setzen...</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/6897105242045738640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/04/jeder-kennt-dieses-fenster-dieses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6897105242045738640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6897105242045738640'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/04/jeder-kennt-dieses-fenster-dieses.html' title='Gedanken zu User Interfaces'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/SfL-8pT9ecI/AAAAAAAAAKU/f_rJwBg0zTI/s72-c/Delete+File.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-4838263400287021270</id><published>2009-04-19T09:41:00.000+02:00</published><updated>2009-04-19T10:34:04.055+02:00</updated><title type='text'>Tagged File System</title><content type='html'>Ein großes Problem bei der Benutzung von Computern ist, dass unerfahrene Benutzer oftmals kein Verständnis für Ordnerstrukturen haben. Das ist im Grunde auch klar, denn die Ordner-Metapher legt nahe, dass sich Ordner auf dem Computer wie echte Aktenordner verhalten, also dass jeder Ordner mehrere Dateien, jedoch nicht andere Ordner enthalten kann. Ganz im Gegenteil dazu basiert aber eine normale Verzeichnisstruktur meist aus vielen, tief ineinander geschachtelten Ordnern. Von einem Usablitity-Standpunkt aus ist daher der Begriff "Ordner" wahrscheinlich schlecht gewählt. Vielleicht würde es schon reichen, den älteren Namen "Verzeichnis" wieder einzuführen. (Dann bräuchten wir nur noch ein passendes Piktogramm für "Verzeichnis"...)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/Sera4p-J7_I/AAAAAAAAAJ8/a5LXfFMjcKo/s1600-h/Bild+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 120px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/Sera4p-J7_I/AAAAAAAAAJ8/a5LXfFMjcKo/s320/Bild+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5326310176193114098" /&gt;&lt;/a&gt;&lt;br /&gt;Es wäre daher wünschenswert, eine einfacher zu verstehende Alternative zu Ordnerhierarchien zu haben. Die gibt es auch schon, in Form der bekannten Verzeichnisse "Meine Bilder", "Meine Dokumente", etc.&lt;br /&gt;Diese Ordner wollen den Benutzer mit einfachen Piktogrammen und klaren Namen dazu animieren, einen natürlichen Ort für seine Dateien zu wählen und so ein wenig Ordnung zu schaffen. Tatsächlich ist dieses Konzept einer Tag-Struktur schon relativ ähnlich, da auch hier nicht davon ausgegangen wird, dass sich der Benutzer selbst um eine tief geschachtelte Orderhierarchie kümmert, sondern nur wenige, einfach zu verstehende Markierungsmöglichkeiten ("Bilder", "Dokumente") geboten werden.&lt;br /&gt;&lt;br /&gt;Ein echtes Tag-basiertes System könnte vollkommen ohne Verzeichnisse auskommen, wobei man dann eben beim Speichern einer Datei nicht mehr aus einer hierarchischen Liste von Ordnern den Speicherort auswählen würde, sondern von einer flachen Liste von Tags. Die Usability-Kosten davon wären vernachlässigbar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SerbAW5yitI/AAAAAAAAAKE/JNScfNDOAdg/s1600-h/Bild+4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SerbAW5yitI/AAAAAAAAAKE/JNScfNDOAdg/s320/Bild+4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5326310308513483474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ähnlich würde das Finden von Dateien funktionieren: Statt eine hierarchische Liste von Ordnern nacheinander anzuklicken, würde man eine flache Liste von Tags nacheinander anklicken, jedoch mit dem Bonus, dass man die gesuchte Datei nicht erst bei Anklicken &lt;span style="font-style:italic;"&gt;aller&lt;/span&gt; Tags, sondern mit großer Wahrscheinlichkeit schon nach ein oder zwei Tags gefunden hätte.&lt;br /&gt;&lt;br /&gt;Ein Problem würde jedoch mit Projekten entstehen, die aus mehreren Dateien bestehen. Hier müsste man sicher stellen, dass sie im Dateisystem nur als einzelne große Projektdatei auftauchen und nicht jede einzelne Unterdatei gelistet wird. Das ließe sich zum Beispiel durch "Bundles" lösen, wie sie heute schon in OSX vorkommen (Ordner mit definierter Namesendung und Inhalt werden wie Dateien behandelt) oder einfach durch einen speziellen Tag, der die einzelnen Dateien vor der normalen Suche versteckt. &lt;br /&gt;Dieses Konzept wird übrigens heute schon vielfach verwendet, so ist etwa eine aktuelle Word-Datei nur eine ZIP-Datei, die eine definierte Verzeichnisstruktur mit allen Bildern, dem Text (als XML), einer Vorschau-Grafik etc. enthält. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SergvyRIClI/AAAAAAAAAKM/ciQuU2OAJnk/s1600-h/Bundles.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SergvyRIClI/AAAAAAAAAKM/ciQuU2OAJnk/s320/Bundles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5326316620871109202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ich glaube, dass man mit solch einem Tag-basierten Dateisystem deutlich einfacher arbeiten könnte als mit den heute üblichen Verzeichnisstrukturen. Tja, jetzt fehlt nur noch eine innovative Firma, die sich um die Umsetzung kümmert...</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/4838263400287021270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/04/tagged-file-system.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4838263400287021270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4838263400287021270'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/04/tagged-file-system.html' title='Tagged File System'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/Sera4p-J7_I/AAAAAAAAAJ8/a5LXfFMjcKo/s72-c/Bild+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-1051398380645715394</id><published>2009-03-31T20:09:00.000+02:00</published><updated>2009-03-31T20:32:13.013+02:00</updated><title type='text'>Es geht um Tabs</title><content type='html'>Tabs sind kaputt. Tabs waren noch nie eine gute Idee. Tabs werden dafür benutzt, um in einem Programm mehrere Fensterflächen voll Inhalt in nur einem Fenster darzustellen. Speziell zu diesem Zweck entwarf man in grauer Vorzeit eine neue Klasse von Programmen namens Fenstermanager. Fenstermanager erlauben es, mehrere Fenster &lt;em&gt;gleichzeitig&lt;/em&gt; darzustellen, gerne auch nebeneinander, hintereinander oder übereinander. Kennt jeder. Und Tabs sind eine Krücke, die genau dieses Prinzip unterlaufen, denn sie organisieren Fenster &lt;em&gt;in&lt;/em&gt;einander.&lt;br /&gt;&lt;br /&gt;Aber es ist ja nicht nur das. Wir kennen Tabs schon lange in ganz verschiedenen Formen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtmWxeQI/AAAAAAAAAJ0/6REEXPNQO1k/s1600-h/Tabs+Firefox+Preferences.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 34px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtmWxeQI/AAAAAAAAAJ0/6REEXPNQO1k/s400/Tabs+Firefox+Preferences.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319420446384421122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtZ3CwpI/AAAAAAAAAJs/in8hXmSAYi4/s1600-h/Tabs+OSX.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 35px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtZ3CwpI/AAAAAAAAAJs/in8hXmSAYi4/s400/Tabs+OSX.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319420443030110866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtbYe_DI/AAAAAAAAAJk/-_tyQqQymhw/s1600-h/Tabs+Windows.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 54px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtbYe_DI/AAAAAAAAAJk/-_tyQqQymhw/s400/Tabs+Windows.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319420443438808114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All diesen Formen gemein ist, dass sie wenigstens einen Rahmen bilden, der andeutet, welcher Teil des Fensters sich ändern wird, wenn man einen anderen Tab öffnet. Die Ausnahme: Browser.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e-cZlUtocGc/SdJgiI4Y8EI/AAAAAAAAAJc/LzjMrMPkqGI/s1600-h/Tabs+IE8.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 87px;" src="http://1.bp.blogspot.com/_e-cZlUtocGc/SdJgiI4Y8EI/AAAAAAAAAJc/LzjMrMPkqGI/s400/Tabs+IE8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319420249493794882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJghm2ThsI/AAAAAAAAAJU/nsnSYJIrvxs/s1600-h/Tabs+Firefox.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 64px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJghm2ThsI/AAAAAAAAAJU/nsnSYJIrvxs/s400/Tabs+Firefox.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319420240358246082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wo hat ein Browser seine Tabs? zwischen Adressleiste und Webseiteninhalt. Bei Firefox (besondere Perversion) sind die Tabs sogar so dargestellt, als würden sie &lt;em&gt;nur die Adresszeile&lt;/em&gt; ändern (oben befestigte Reiter), ganz im Gegensatz dazu ändern sie aber sowohl die Adresszeile als auch -viel wichtiger- den Webseiteninhalt. Wenn überhaupt, dann sollten sich die Tabs also am oberen Bildschirmrand befinden, so dass man mit ihnen wenigstens konsistent den kompletten Fensterinhalt ändert. Immerhin hier sieht man bereits Licht: Google Chrome und Safari 4 funktionieren bereits so:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgRLLxbTI/AAAAAAAAAJM/ZYgT0DpoTC4/s1600-h/Tabs+Chrome.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 107px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgRLLxbTI/AAAAAAAAAJM/ZYgT0DpoTC4/s400/Tabs+Chrome.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319419958054186290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgRNw5FEI/AAAAAAAAAJE/TI7QVy9M0yE/s1600-h/Tabs+Safari+Win.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 63px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgRNw5FEI/AAAAAAAAAJE/TI7QVy9M0yE/s400/Tabs+Safari+Win.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319419958746747970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgQ8--IlI/AAAAAAAAAI8/I9qzhBXIuCs/s1600-h/Tabs+Safari+OSX.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 54px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJgQ8--IlI/AAAAAAAAAI8/I9qzhBXIuCs/s400/Tabs+Safari+OSX.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319419954242396754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Die Lösung von Safari hat noch ein paar Probleme: Wo verschiebt man Tabs? (Ungeschickt: an dem kleinen Handle am rechten Tabgreifer-Rand), Wieso haben die Tabs keine Favicons? Aber nicht verzagen: Noch ist Safari 4 lediglich eine Beta. Gut hingegen fände ich es, wenn dieses Tabbed-Fenster-Interface nicht nur für Safari, sondern für jedes andere Programm auch verwendbar wäre, also als Feature des Fenstermanagers implementiert würde. Man müsste daran noch ein wenig feilen, aber es würde Einiges sehr viel übersichtlicher gestalten. Snow Leopard anyone?&lt;br /&gt;&lt;br /&gt;Weitere gute Ideen rund um Tabs, sortiert nach Browser:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/germany/windows/internet-explorer/default.aspx"&gt;Microsoft Internet Explorer 8&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tabs werden nach Farben sortiert, je nach dem von welchem Tab aus sie geöffnet wurden&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Im neuen Fenstermanager von Windows 7 werden alle Tabs als eigene Fenster aufgeführt&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jeder Tab läuft in seinem eigenen Prozess. Bringt aber nix, weil wenn einer abstürzt nimmt er trotzdem den ganzen Browser mit. Ist aber auch noch nur Beta!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e-cZlUtocGc/SdJgBl6o_aI/AAAAAAAAAI0/1crT4jCKEbY/s1600-h/Tabs+IE8+goodness.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 83px;" src="http://3.bp.blogspot.com/_e-cZlUtocGc/SdJgBl6o_aI/AAAAAAAAAI0/1crT4jCKEbY/s400/Tabs+IE8+goodness.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319419690352180642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mozilla-europe.org/de/firefox/"&gt;Firefox 3&lt;/a&gt; Preview&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tabs sollen über ein neuartiges Interface beim Wechsel als Miniaturen dargestellt werden, so dass man einfacher zwischen ihnen wechseln kann&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Viele andere nette Vorschläge rund um diese Idee gibts hier: &lt;a href="http://www.azarask.in/blog/post/new-tab-iterations/"&gt;Aza Raskins Blog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.apple.com/de/safari/"&gt;Safari 4&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Die Tableiste nimmt keinen eigenen Platz auf dem Bildschirm ein&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tabs sind am richtigen Ort (oben)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/chrome?hl=de"&gt;Google Chrome&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tabs sind am richtigen Ort (oben) aber es gibt dennoch eine klassische Titelleiste des Fensters (im Gegensatz zu Safari 4)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jeder Tab läuft in einem eigenen Prozess, daher können einzelne Tabs abstürzen ohne den Browser mitzunehmen.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jeder Tab läuft in seiner eigenen Sandbox, was es Angreifern &lt;a href="http://arstechnica.com/security/news/2009/03/chrome-is-the-only-browser-left-standing-in-pwn2own-contest.ars"&gt;wesentlich erschwert&lt;/a&gt;, den Browser hochzunehmen.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJf3Dzd3QI/AAAAAAAAAIs/Hp_Dx0FkQaQ/s1600-h/Tabs+Chrome+goodness.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/SdJf3Dzd3QI/AAAAAAAAAIs/Hp_Dx0FkQaQ/s400/Tabs+Chrome+goodness.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5319419509396593922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fazit: Es gibt noch viel zu tun, aber anscheinend ergibt sich langsam aber sicher ein Konsens, dass etwas mit Tabs getan werden muss. Es bleibt spannend.</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/1051398380645715394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/es-geht-um-tabs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1051398380645715394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1051398380645715394'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/es-geht-um-tabs.html' title='Es geht um Tabs'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/SdJgtmWxeQI/AAAAAAAAAJ0/6REEXPNQO1k/s72-c/Tabs+Firefox+Preferences.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-1736663277216123694</id><published>2009-03-29T22:22:00.000+02:00</published><updated>2009-03-29T22:47:53.751+02:00</updated><title type='text'>Mirror's Edge</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/Sc_atlzI0pI/AAAAAAAAAIU/UrwIxOVCPkU/s1600-h/Bild+3.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 198px; height: 67px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/Sc_atlzI0pI/AAAAAAAAAIU/UrwIxOVCPkU/s400/Bild+3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318710161723413138" /&gt;&lt;/a&gt;Ich habe am Wochenende, wie in Twitter schon verkündet, Mirror&amp;#8217;s Edge (durch-) gespielt. Ganz kurz: Mirror&amp;#8217;s Edge ist ein Videospiel für PC/XBOX360/PS3, im Endeffekt ein Platformer aus der Ego-Perspektive, zwar mit der Möglichkeit, Waffen aufzunehmen, aber mit dem klaren Fokus auf Rennen, genauer: Parkours, dem modernen Hindernislauf, hier mit dem Extratwist: auf Hochhausdächern.&lt;/p&gt;&lt;p&gt;Es wurde schon viel gesagt über dieses Spiel. Müde Story, schlechte Charactermodelle, schlechte Shooter-Elemente, unübersichtliche Atmosphäre, kurze Spieldauer, um nur einige der üblichen Kritikpunkte zu nennen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e-cZlUtocGc/Sc_cHv-35zI/AAAAAAAAAIk/UBFLP5Ci-SQ/s1600-h/Bild+2.png"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 191px;" src="http://3.bp.blogspot.com/_e-cZlUtocGc/Sc_cHv-35zI/AAAAAAAAAIk/UBFLP5Ci-SQ/s320/Bild+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318711710645217074" /&gt;&lt;/a&gt;Ich sage: Alles Popauswurf. Was Mirror&amp;#8217;s Edge versucht, ist die Direktheit und Intimität der Egoperspektive mit dem Flow und der Geschwindigkeit eines modernen Platformers zu verbinden. Faith, der Hauptcharakter ist eine kleine &amp;#8220;Eurasierin&amp;#8221; (Zitat der Entwickler), deren Eltern in einem Widerstandskampf&amp;#8230; Bla, bla, bla.&lt;br /&gt;Es geht um Flow, es geht darum, mit blitzschnellen Reflexen und akrobatischem Geschick einen Weg über die Dächer einer Großstadt zu finden. Es geht darum, nicht stehen zu bleiben, nicht zu zögern. Es geht um Geschwindigkeit und Freiheit, über Straßenschluchten zu springen, zwischen Klimaanlagen und Baugerüsten zu sprinten und immer schneller, immer weiter, den Großstadtlärm hinter sich zu lassen. Nur begleitet von Faiths immer wieder ins Bild ragenden Armen und Beinen, ihrem schnellen Atem, dem Rhythmus ihrer Schritte. Und ja, man stirbt häufig, wenn man sich bei einem Sprung verschätzt oder es doch nicht schafft, den Jägern zu entkommen. Aber um so größer ist die Befriedigung einen komplizierten Run endlich zu schaffen und mit einem perfekten Sprung über eine Häuserschlucht die Polizei hinter sich zu lassen.&lt;br /&gt;&lt;br /&gt;Mirror&amp;#8217;s Edge perfektioniert den Flow, das Gefühl der Freiheit und der Geschwindigkeit. Klar, dass da die Ego-Shooter-Mechanik auf der Strecke bleibt, aber Faith ist auch keine Kämpferin, sondern selbsterklärter &lt;em&gt;Runner&lt;/em&gt;. Sicher, die Story ist ein wenig lahm, aber wir reden hier über ein Computerspiel: Die Story hat allein das Ziel, die einzelnen Schauplätze miteinander zu verbinden, und das gelingt ihr. Charakterentwicklung kennt das Spiel nicht, allein der Spieler wird besser. Und auch das ist gut so, denn in den späteren Leveln ist der Schwierigkeitsgrad nicht von schlechten Eltern. Aber Checkpoints sind häufig und fair verteilt, so dass dies selten ein Problem wird.&lt;br /&gt;&lt;br /&gt;Ach ja, und der Sound ist genial, selten habe ich mich so sehr in eine Spielfigur hineinversetzt gefühlt wie in Faith. Und die Grafik&amp;#8230; Ich könnte hier viel schreiben; Ich glaube schlicht, dass die aktuelle Konsolengeneration im Grunde ein Niveau erreicht hat, auf dem weitere Verbesserungen keine große Rolle mehr spielen. Mirror&amp;#8217;s Edge, mit seiner gleißend-Weiß-plus-Farbe Ästhetik zeigt hier eine Welt, wie man sie noch nie gesehen hat, in der Farbe nicht nur als Stilmittel, sondern auch als Wegweiser und tatsächlich Spielhilfe eingesetzt wird: &lt;em&gt;Rot&lt;/em&gt; ist, wo es weiter geht. Diese Ästhetik ist schwer in Worte zu fassen und gibt dem Ganzen eine ganz eigene Freiheit, im starken Kontrast zum &amp;#8220;realistisch&amp;#8221;-Grau-Braun, dem sich so viele andere Spiele verschrieben haben.&lt;br /&gt;&lt;br /&gt;Und was bleibt unterm Strich? Ich sage: Das Spiel ist es Wert. Es mag seine Mängel haben, aber allein der Mut, einmal etwas Neues zu machen und nicht dem Einheitsbrei ins Land der Realo-Shooter und der digitalen Nebenjobs zu folgen ist der Beachtung Wert. Einmal nicht schießen zu müssen und stumpfen Missionen zu folgen, sondern in einem Spiel Freiheit zu finden, dass ist eine außergewöhnliche Erfahrung. Wer als Spieler etwas Erfrischung sucht, sollte es probieren. Ich finds geil!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/Sc_aiZCP2nI/AAAAAAAAAIM/ydfUx_OLNSc/s1600-h/Bild+6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 204px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/Sc_aiZCP2nI/AAAAAAAAAIM/ydfUx_OLNSc/s400/Bild+6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318709969318566514" /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/1736663277216123694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/mirrors-edge.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1736663277216123694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1736663277216123694'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/mirrors-edge.html' title='Mirror&apos;s Edge'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/Sc_atlzI0pI/AAAAAAAAAIU/UrwIxOVCPkU/s72-c/Bild+3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-8408868143207611772</id><published>2009-03-28T17:18:00.000+01:00</published><updated>2009-03-28T17:29:46.668+01:00</updated><title type='text'>Synchronisieren von Google, Äpfeln, Fenstern und Telefonen</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/Sc5QYm-LPJI/AAAAAAAAAIE/KCL3DOTMhY0/s1600-h/800px-John_Constable_029.jpg.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/Sc5QYm-LPJI/AAAAAAAAAIE/KCL3DOTMhY0/s320/800px-John_Constable_029.jpg.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318276593679547538" /&gt;&lt;/a&gt;Ich hatte lange Zeit zwei Computer, einen Desktop und einen Laptop, jeweils mit verschiedenen Betriebssystemen und Datensätzen. Um dennoch immer mit den selben Daten arbeiten zu können, verwendete ich eine externe Festplatte. Obwohl sehr low-tech, funktionierte diese Lösung absolut tadellos: Meine Linux-Kisten mounteten die Festplatte automatisch in ihr jeweiliges home-Verzeichnis und so konnte ich auf verschiedenen Computern arbeiten, ohne mich um die Synchronizität der Daten kümmern zu müssen.&lt;br /&gt;&lt;br /&gt;Fast-forward ein Jahr, tausche Linux gegen Apple und finde es jetzt doch sehr anstrengend, immer eine externe Festplatte mit mir herumzuschleppen -- &lt;a href="http://www.daskrachen.com/2009/03/get-mac.html"&gt;Apple-Snob, der ich bin&lt;/a&gt;. Sieht auch unelegant aus, dieses schwarze Kästchen an den hübschen Laptop zu klemmen. Es muss also eine andere Lösung her, um immer auf beiden Rechnern mit aktuellen Dateien arbeiten zu können. Es bietet sich an: MobileMe (damals noch .Mac), genauer, die iDisk, also ein Stück online-Speicher bei Apple, auf dem man von mehreren (Apple-) Rechnern aus arbeiten kann. Das Angebot ist verlockend, aber leider erfüllt MobileMe meine Erwartungen nicht, es gehen Daten verloren und ich ärgere mich, jemals Geld für diesen Dreck ausgegeben zu haben.&lt;br /&gt;&lt;br /&gt;Eine Alternative finde ich in Dropbox, welches die Vision des immer synchronen Datenspeichers "in the cloud" endlich erfüllt, wenn auch als Ordner und nicht als Laufwerk. Inzwischen erbringt auch Syncplicity diese Leistung, wenn auch mit einem eigenen Set an Einschränkungen (Es ist aber noch Beta, also kein Grund zur Sorge).&lt;br /&gt;&lt;br /&gt;Dennoch: ganz zufrieden bin ich nicht, einfach, weil zwei Rechner immer eine gewisse Menge "mental overhead" bedeuten. Allein, nicht immer am selben Gerät zu sitzen stellt einfach eine Irritation dar, die im Grunde nicht nötig ist. Na gut, und dieses neue "Unibody"-MacBook Pro ist einfach sexy. Also, tausche iMac + MacBook gegen MacBook Pro. Das löst -logisch- auch alle Synchronizitätsprobleme.&lt;br /&gt;&lt;br /&gt;Aber ich wäre nicht der Sohn meines Vaters, wenn ich nicht immer noch mehr technischen Schnickschnack haben müsste, enter: the iPhone. Dank Apple und iTunes ist es natürlich kein Problem, Kalender, Email, Kontakte und Musik immer synchronisiert zu halten; Kabel reinstecken, iTunes machen lassen und fertig.&lt;br /&gt;Perfektioniert wird das alles aber erst durch Beihilfe von Google, welches durch ActiveSync (sprich: Exchange) nun auch alle meine Kontakte, Kalendereinträge, Emails und Dokumente auf allen Geräten zur Verfügung stellt. Dieses Setup ist nun endlich wirklich extrem zufriedenstellend. Es ist zwar ein Haufen Kleinkram, den man durcharbeiten muss, bis man das alles richtig konfiguriert hat, aber hat man das einmal getan funktioniert es wirklich tadellos! Und Syncplicity und Dropbox laufen auf dem Rechner einfach nur noch als Backup weiter.</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/8408868143207611772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/synchronisieren-von-google-apfeln.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/8408868143207611772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/8408868143207611772'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/synchronisieren-von-google-apfeln.html' title='Synchronisieren von Google, Äpfeln, Fenstern und Telefonen'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e-cZlUtocGc/Sc5QYm-LPJI/AAAAAAAAAIE/KCL3DOTMhY0/s72-c/800px-John_Constable_029.jpg.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-1637583027187409365</id><published>2009-03-24T15:16:00.000+01:00</published><updated>2009-03-24T16:02:47.456+01:00</updated><title type='text'>E Text Editor goes Open Source</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/Scj1_vvvvOI/AAAAAAAAAH8/dds9fwgw8vk/s1600-h/Bild+1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 77px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/Scj1_vvvvOI/AAAAAAAAAH8/dds9fwgw8vk/s320/Bild+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5316769835608161506" /&gt;&lt;/a&gt;Als ich heute von der FH nach Hause kam, lag &lt;a href="http://e-texteditor.com/blog/2009/opencompany"&gt;das hier&lt;/a&gt; in meinem Newsreader und ich war, in Ermangelung eines besseren Wortes, &lt;span style="font-style:italic;"&gt;geschockt&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Nur, um es noch einmal zu wiederholen: &lt;span style="font-weight:bold;"&gt;E, der meiner Meinung nach beste Texteditor der Welt wird Open Source&lt;/span&gt;. Das kann man nicht oft genug sagen.&lt;br /&gt;&lt;br /&gt;Warum ist E so fantastisch?&lt;br /&gt;&lt;a href="http://www.e-texteditor.com/"&gt;E&lt;/a&gt; ist ein recht neuer, kleiner &lt;a href="http://de.wikipedia.org/wiki/Texteditor"&gt;Texteditor&lt;/a&gt; für Windows. Nein, um ihm Genüge zu tun, muss man E in einem Satz mit &lt;a href="http://de.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;, &lt;a href="http://de.wikipedia.org/wiki/Vim"&gt;Vim&lt;/a&gt; und &lt;a href="http://macromates.com/"&gt;Textmate&lt;/a&gt; nennen, denn wie diese Drei Großen Texteditoren sind auch E keine Grenzen gesetzt, da all seine Funktionalität durch kleine, einfache Skripte entsteht, die von jedem Nutzer beliebig verbessert werden können. Genauer gesagt: E tritt in die direkten Fußstapfen von Textmate, einem Editor für den Mac und ist vollkommen kompatibel mit dessen Erweiterungen, so dass E schon bei seiner Markteinführung auf eine riesige Masse von &lt;a href="http://svn.textmate.org/trunk/Bundles/"&gt;Sprachen, Snippets und Programmen&lt;/a&gt; zurückgreifen konnte, mit der sich jede noch so obskure Textmanipulation bewältigen lässt. Anders als Emacs oder Vim folgt E dabei aber modernen Bedienungs- und Designrichtlinien und fühlt sich genauso flüssig und heimisch an, wie das für eine Windows-Anwendung nur möglich ist.&lt;br /&gt;Seine zweite große, und kaum weniger berauschende Stärke ist sein &lt;a href="http://e-texteditor.com/blog/2006/making-undo-usable"&gt;History-System&lt;/a&gt;. Jeder Benutzer eines Texteditors kennt die Undo-Taste (&lt;a href="http://stackoverflow.com/questions/247568/how-can-i-undo-more-than-a-single-character-in-textmate/248255"&gt;mit Ausnahme von Textmate&lt;/a&gt;. &lt;a href="http://nslog.com/2006/11/08/textmates_undo"&gt;What a shame.&lt;/a&gt;). Undo macht die zuletzt gemachte Änderung rückgängig und ist damit der beste Freund von notirisch fehleranfälligen Menschen. E bringt Undo auf das nächste Level: Denn neben dem normalen Undo-Befehl gibt es noch eine komplette Übersicht aller jemals an einem Dokument gemachten Änderungen, komplett mit verschiedenen Pfaden, die zu verschiedenen Zeiten genommen wurden kompakt und übersichtlich verpackt in einem fantastischen Baumdiagramm.&lt;br /&gt;Dazu kommen ein riesiger Haufen Features, die eigentlich jedes Programm haben sollte, welche man aber nur viel zu selten findet: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Inkrementielle Suche mit sofortiger Ergebnisvorschau und Unterstützung von Regulären Ausdrücken!&lt;br /&gt;&lt;li&gt;Direkte Unterstützung von Cygwin für alle möglichen Skriptsprachen!&lt;br /&gt;&lt;li&gt;Syntax-Highlighting für so ziemlich jede denkbare Sprache!&lt;br /&gt;&lt;li&gt;Unterstützung für Snippets!&lt;br /&gt;&lt;li&gt;Multiline-Editing!&lt;br /&gt;&lt;li&gt;Kontinuierliche Weiterentwicklung des Editors!&lt;br /&gt;&lt;li&gt;...&lt;/ul&gt;Wer mehr wissen will, der surfe nach &lt;a href="http://e-texteditor.com/index.html"&gt;e-texteditor.com&lt;/a&gt; und schaue sich dort den Screencast und den Blog an, lade sich die Demo herunter oder suche im Internet nach Reviews zu E.&lt;br /&gt;&lt;br /&gt;Selbst ich, als eingefleischter Textmate-Benutzer halte E als meinen heimlichen Lieblingseditor, denn schließlich kann er alles, was Textmate kann (und das ist schon enorm gut) und dazu noch eine gute Latte mehr. Wer, wie ich, eigentlich seinen Tag nur mit (a) surfen und (b) tippen verbringt, sollte wirklich darüber nachdenken, ein wenig Geld für einen guten Texteditor auszugeben. Es lohnt sich, und E ist ohne Frage einer der Besten. Und jetzt wird er Open Source. Ich bin begeistert!</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/1637583027187409365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/e-text-editor-goes-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1637583027187409365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/1637583027187409365'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/e-text-editor-goes-open-source.html' title='E Text Editor goes Open Source'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/Scj1_vvvvOI/AAAAAAAAAH8/dds9fwgw8vk/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-4104912335849319891</id><published>2009-03-19T21:17:00.000+01:00</published><updated>2009-03-20T18:07:29.859+01:00</updated><title type='text'>Western Digital Festplatten-Umtausch mit Überraschungen</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/ScKon9ZIMXI/AAAAAAAAAH0/A3Ogpwdbpa8/s1600-h/wdfMyBook_Essential2.0_1U.jpg.jpeg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 300px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/ScKon9ZIMXI/AAAAAAAAAH0/A3Ogpwdbpa8/s320/wdfMyBook_Essential2.0_1U.jpg.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5314995914698928498" /&gt;&lt;/a&gt;Ich hatte mir vor einer Weile eine externe Festplatte nur für TimeMachine gekauft. Denn TimeMachine ist super, die einzige Backup-Lösung die ganz bewusst nie in Erscheinung tritt es sei denn man braucht sie. TimeMachine läuft leise und unbeachtet im Hintergrund, und gibt mir dieses flauschige Gefühl von Sicherheit, quasi das unsicht- und spürbare Kondom der Computerwelt (bzw. Apple-Welt).&lt;br /&gt;&lt;br /&gt;...Bis ich einmal den fatalen Fehler beging, meine externe Festplatte HOCHZUHEBEN. Nicht ruckartig, nicht gewaltsam, sondern tatsächlich sehr sanft, aber wohl gerade zu einem ungünstigen Zeitpunkt, denn die Festplatte gab ein leises Klick von sich und hörte auf zu funktionieren.&lt;br /&gt;&lt;br /&gt;Es handelt sich hierbei um eine externe Festplatte der Marke Western Digital MyBook mit 500 Gigabytes, gekauft bei Norskit. Ein Anruf beim Verkäufer ergab, dass dies eine alte Bestellung (weltbewegende 9 Monate) sei und ich daher bei einer anderen Nummer anrufen sollte. Eine sehr freundliche Mitarbeiterin teilte mir dort mit, dass die Firma leider Insolvent sei und ich meine Supportanfrage daher an den Hersteller richten sollte. Und was soll ich sagen? EIN GLÜCK, dass sie das sagte!&lt;br /&gt;&lt;br /&gt;Denn auf der Webseite von Western Digital gibt es nicht nur eine Support-Telefonnummer, sondern gleich ein komplettes austausch-Programm für Festplatten, welches vollkommen automatisiert abläuft: Man gibt die Modellnummer seiner Festplatte und -für Notfälle- seine Email-Adresse an und bekommt sofort eine neue Festplatte zugeschickt, mit der einzigen Auflage, die alte, defekte Platte innerhalb von 30 Tagen einzuschicken. Und tatsächlich wurde die neue Platte prompt am nächsten Tag verschickt und kam heute pünktlich per UPS bei mir an.&lt;br /&gt;&lt;br /&gt;Faszinierend, so wünsche ich mir Kundenservice. Der einzige Wermutstropfen ist, dass Western Digital offenbar nicht sehr überzeugt von der Ausfallsicherheit seiner Festplatten ist, wenn sie so viel Infrastruktur für den einfachen Austausch bereitstellen... Na egal, ich will mal nicht meckern ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Nachschlag:&lt;/span&gt; Es stellt sich heraus, die neue Festplatte unterscheidet sich ein wenig von der alten: Sie ist silber statt schwarz und hat zwei Firewire 800 Anschlüsse anstatt Firewire 400 -- ein Glück, dass auch Kabel mitgeliefert wurden, sonst könnte ich sie jetzt nicht anschließen!</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/4104912335849319891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/western-digital-festplatten-umtausch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4104912335849319891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/4104912335849319891'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/western-digital-festplatten-umtausch.html' title='Western Digital Festplatten-Umtausch mit Überraschungen'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/ScKon9ZIMXI/AAAAAAAAAH0/A3Ogpwdbpa8/s72-c/wdfMyBook_Essential2.0_1U.jpg.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-8055653982636138632</id><published>2009-03-15T15:10:00.000+01:00</published><updated>2009-03-16T18:19:16.153+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmieren'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='Matlab'/><category scheme='http://www.blogger.com/atom/ns#' term='Mex'/><title type='text'>Debugging und GCC auf Windows</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e-cZlUtocGc/Sb0OXtKMUEI/AAAAAAAAAHc/8fXvO6yyViI/s1600-h/Bild+1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 253px; height: 164px;" src="http://2.bp.blogspot.com/_e-cZlUtocGc/Sb0OXtKMUEI/AAAAAAAAAHc/8fXvO6yyViI/s400/Bild+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5313418935789178946" /&gt;&lt;/a&gt;So, jetzt habe ich mein Mex-File zum Einlesen beliebiger Audiodateien endlich lauffähig auf Windows und Mac. Leider werde ich nicht dafür bezahlt, auch noch eine Linux-Version zu bauen, aber falls Interesse besteht, versuche ich mich vielleicht einmal daran. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/State_of_the_Union"&gt;The State of The Union&lt;/a&gt;: Kleine Dateien einlesen, kein Problem. Exotische Formate einlesen, kein Problem. Metadaten auslesen, kein Problem. Dateigröße, Bitrate und Samplerate auslesen, ein kleines Problem, da diese Parameter bei komprimierten Formaten nicht unbedingt fest stehen. Große Dateien einlösen, auf dem Mac kein Problem, auf Windows&amp;#8230; nun ja, es &lt;em&gt;dauert&lt;/em&gt;. Eine WAV-Datei von 5:30 min einzulesen, dauert mit Windows momentan ca. &lt;em&gt;eine Stunde&lt;/em&gt;. Das kann nicht sein, in der Zeit habe ich die Datei dem Programm &lt;em&gt;vorgelesen&lt;/em&gt;, wenn es sein muss.&lt;br /&gt;&lt;br /&gt;Also, was ist da faul? Jetzt heißt es debuggen: &lt;a href="http://de.wikipedia.org/wiki/GNU_Debugger"&gt;GDB&lt;/a&gt; ist mein Freund, aber leider spreche ich seine Sprache nicht, also Oldschool-Debugging mit &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/printf.html"&gt;printf()&lt;/a&gt; (bzw. &lt;a href="http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/apiref/mexprintf.html"&gt;mexPrintf()&lt;/a&gt;; Aber da &lt;code&gt;#define printf mexPrintf&lt;/code&gt; ist das das selbe). Blöd nur, dass Matlab selbst entscheidet, wann es meine Printfs auf den Bildschirm schreibt und es sich dazu entschlossen hat, dies immer erst nach dem Ausführen der Datei, also erst nachdem es bereits eine Stunde gearbeitet hat, zu tun. Einiges Hirnen später konnte ich Matlab endlich über eine Kombination aus &lt;a href="http://de.wikipedia.org/wiki/Typumwandlung"&gt;Typecasts&lt;/a&gt;, &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html"&gt;sprintf&lt;/a&gt; und &lt;a href="http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/apiref/mexwarnmsgtxt.html"&gt;mexWarnMsgTxt&lt;/a&gt; dazu überreden, wenigstens sporadisch ein paar Informationen herauszugeben.&lt;br /&gt;&lt;br /&gt;Das Ergebnis:&lt;br /&gt;(1) Die Datei funktioniert tadellos, ist nur ein wenig langsam (s.o.)&lt;br /&gt;(2) Wer ist schuld? &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/realloc.html"&gt;Realloc&lt;/a&gt; ist schuld!&lt;br /&gt;&lt;br /&gt;Das kam überraschend! Offenbar ist realloc auf dem Mac um mehrere Größenordnungen performanter als auf &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt;/Windows, denn die selbe Anwendung, die auf dem Mac ca. eine Sekunde braucht, braucht auf Windows &lt;em&gt;eine Stunde&lt;/em&gt;! Und das allein wegen realloc! (Eigentlich: eine halbe Stunde wegen realloc, der Rest ist der Tatsache geschuldet, dass Windows in einer &lt;a href="http://www.vmware.com/de/products/fusion/"&gt;VM&lt;/a&gt; läuft)&lt;br /&gt;&lt;br /&gt;Bei WAV-Dateien werden immer 2048 Samples an einem Stück ausgelesen. Danach verwende ich ein realloc, um meinen haupt-Speicherpuffer um diese Größe zu vergrößern und kopiere die neuen Daten dort hinein. Bei meinen 5:30 min macht das bei einer Samplerate von 44100 kHz und zwei Kanälen ca. 15000 Aufrufe von realloc. Komprimierte Datenformate haben üblicherweise kleinere Frames und damit noch einmal wesentlich mehr realloc-Aufrufe.&lt;br /&gt;Der Plan ist also, jetzt statt häufiger, kleiner realloc-Aufrufe, seltenere, größere Aufrufe zu machen. Zeit für ein paar Experimente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;realloc()-Größe   realloc()-Aufrufe   benötigte Zeit&lt;br /&gt;2^11 = 2048       15000               ~1 h&lt;br /&gt;2^16 = 65536      470                 ~2 min&lt;br /&gt;2^17 = 131072     240                 ~1 min&lt;br /&gt;2^18 = 262144     120                 30 s&lt;br /&gt;2^19 = 524288     60                  18 s&lt;br /&gt;2^20 = 1048576    30                  10.5 s&lt;br /&gt;2^21 = 2097152    15                  7.3 s&lt;br /&gt;2^22 = 4194304    7                   5.1 s&lt;br /&gt;2^23 = 8388608    3                   4.2 s&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Das Spannende ist: Ich ändere durch meine Methodik praktisch nichts außer der Anzahl und Größe der realloc-Aufrufe, aber man erkennt einen eindeutigen Zusammenhang zwischen Performance und Anzahl der Aufrufe, ergo ist realloc der alleinige Schuldige für mein Performanceproblem auf Windows.&lt;br /&gt;&lt;br /&gt;An dieser Stelle fiel mir ein, dass ich bereits an früherer Stelle einmal die gesamte Länge des Audio-Streams anhand der Metadaten geschätzt hatte. Durch eine somit vorgenommene Prä-Allokation des gesamten Speichers lässt sie die Laufzeit weiter auf 2.2 s drücken. Das ist immernoch nicht einmal halb so schnell wie auf OSX (0.9 s), aber das mag auch an der virtuellen Maschine liegen.&lt;br /&gt;&lt;br /&gt;Mehr als diesen anecdotal Evidence kann ich nicht anbieten, aber ich bin mir sicher, dass ich ab jetzt die Finger von inkrementiellen Speichervergrößerungen auf MinGW/Windows lassen werde. Ist das in MSVC ähnlich schlimm, oder habe ich da etwa einen Bug entdeckt?</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/8055653982636138632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/so-jetzt-habe-ich-mein-mex-file-zum.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/8055653982636138632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/8055653982636138632'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/so-jetzt-habe-ich-mein-mex-file-zum.html' title='Debugging und GCC auf Windows'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e-cZlUtocGc/Sb0OXtKMUEI/AAAAAAAAAHc/8fXvO6yyViI/s72-c/Bild+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-6025192689068710620</id><published>2009-03-14T10:24:00.000+01:00</published><updated>2009-03-15T15:54:31.828+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Get a Mac</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e-cZlUtocGc/Sbt58ESSePI/AAAAAAAAAHU/vFJJNlxkHcY/s1600-h/Bild+4.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 153px; height: 139px;" src="http://4.bp.blogspot.com/_e-cZlUtocGc/Sbt58ESSePI/AAAAAAAAAHU/vFJJNlxkHcY/s400/Bild+4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5312974258263193842" /&gt;&lt;/a&gt;Bei meinem üblichen, Samstagmorgendlichen, bettlägrigen Web-Rundgang habe ich heute drei sehr nette Artikel von David Alison gefunden, einem Windows-Programmierer und selbsternanntem Microsoft-Fanboy, der sich einen Mac zulegt und unverhofft glücklich damit wird. So glücklich sogar, dass er inzwischen mehr oder weniger ein Mac-only-User geworden ist.&lt;br /&gt;&lt;br /&gt;Ziemlich genau wie ihm ging es mir auch.&lt;br /&gt;&lt;br /&gt;Teil 1: &lt;a href="http://www.davidalison.com/2008/02/hardcore-windows-guy-switches-to-mac.html"&gt;A hardcore Windows guy gets a Mac&lt;/a&gt;&lt;br /&gt;Teil 2: &lt;a href="http://www.davidalison.com/2008/04/mac-after-two-months-of-mac-heres-why-i.html"&gt;After two months of Mac, here's why I switched&lt;/a&gt;&lt;br /&gt;Teil 3: &lt;a href="http://www.davidalison.com/2009/03/switching-from-windows-to-mac-one-year.html"&gt;Switching from Windows to Mac - One Year Later&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wens interessiert: Das ist eine sehr hübsche Einführung darin, warum Macs toll sind. Viel besser als alles, was ich dazu schreiben würde oder &lt;a href="http://www.meinstudi.de/basti/?p=49"&gt;bereits&lt;/a&gt; &lt;a href="http://www.meinstudi.de/basti/?p=4"&gt;getan&lt;/a&gt; &lt;a href="http://www.meinstudi.de/basti/?p=24"&gt;habe&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/6025192689068710620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/get-mac.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6025192689068710620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6025192689068710620'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/get-mac.html' title='Get a Mac'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e-cZlUtocGc/Sbt58ESSePI/AAAAAAAAAHU/vFJJNlxkHcY/s72-c/Bild+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-5762429587960049778</id><published>2009-03-12T23:24:00.000+01:00</published><updated>2009-03-15T15:54:15.185+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmieren'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSource'/><category scheme='http://www.blogger.com/atom/ns#' term='Matlab'/><category scheme='http://www.blogger.com/atom/ns#' term='Mex'/><title type='text'>Kompilieren auf Windows</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://en.wikipedia.org/wiki/File:Opensource.svg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 288px; height: 259px;" src="http://3.bp.blogspot.com/_e-cZlUtocGc/SbmPrBx3G4I/AAAAAAAAAHM/3euhMLnqNZ8/s400/opensource+rules.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5312435204834925442" /&gt;&lt;/a&gt;Seit einigen Wochen arbeite ich an einem kleinen Projekt: Eine Matlab-Funktion, die, ähnlich wie die standard-Funktion &lt;a href="http://www.mathworks.com/access/helpdesk_r13/help/techdoc/ref/wavread.html"&gt;wavread()&lt;/a&gt;, Audiodateien einlesen kann. Aber nicht irgendwelche Audiofiles, sondern ALLE MÖGLICHEN Audiofiles. Wie geht das? Jeder kennt &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt;, den Video-Player, der so ziemlich jedes Video öffnen kann, das man ihm vorsetzt, selbst wenn man überhaupt keine Codecs installiert hat. VLC basiert auf &lt;a href="http://de.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt;, einem Open-Source Programm, welches Funktionen bereit stellt, um eben alle möglichen Mediendaten zu öffnen.&lt;br /&gt;&lt;br /&gt;Und da FFmpeg freie Software ist, kann man sie auch für andere Dinge verwenden, etwa, um mit Matlab Audiodateien zu öffnen. Fehlt noch eine Verbindung zwischen Matlab und den FFmpeg-C-Bibliotheken, und die gibt es in Form von &lt;a href="http://www.mathworks.com/support/tech-notes/1600/1605.html#intro"&gt;Mex&lt;/a&gt;, der C-Schnittstelle von Matlab. Feine Sache, zwar hat es eine Weile gedauert, bis ich mich in libavformat und libavcodec eingearbeitet hatte (die beiden wichtigsten FFmpeg-Bibliotheken), aber im Endeffekt lief das alles sehr schmerzfrei -- und das, obwohl ich bisher Mex-Kompilieren mit Matlab immer als eine grausige Beschäftigung in Erinnerung hatte, gespickt von kryptischen Kompiler-Fehlern und hässlichen Notlösungen.&lt;br /&gt;&lt;br /&gt;Bumms, Zack, kaum hatte ich mich versehen, hatte ich ein lauffähiges, tadellos funktionierendes &lt;a href="http://en.wikipedia.org/wiki/MATLAB#Calling_C_and_Fortran_functions"&gt;Mex-File&lt;/a&gt; auf meinem Mac liegen. Damit hatte ich nicht gerechnet. Also sofort die momentane Euphorie ausnutzen und weiter zu Schritt 2, das Ganze nochmal auf Windows. Meine Probleme, Windows so einzurichten, dass ich endlich Kompilieren kann, &lt;a href="http://www.daskrachen.com/2009/03/great-scott.html"&gt;hatte ich ja schon berichtet&lt;/a&gt;. Ich hatte also Visual Studio 2005 installiert, um Matlab zufrieden zu stellen und einen anständigen Kompiler auf dem System zu haben. Aber war ja klar, MSVC macht wieder sein eigenes Ding und nichts ist mit Standardkonformität und Trallalla: Keine &lt;a href="http://de.wikipedia.org/wiki/C99#C99"&gt;C99&lt;/a&gt;-Unterstützung, also keine Variablendeklarationen mitten im Code und keine stdint.h oder inttype.h. Ein Glück, es gibt wieder ein wenig mehr Free Software, die wenigstens &lt;a href="http://code.google.com/p/msinttypes/"&gt;letztere Lücke schließt&lt;/a&gt;. Dennoch; Ich bekomme mein mex-File nicht zum Laufen. Es ist wie verflucht, kaum setze ich mich an eine Windows-Maschine zum Programmieren, fällt meine Produktivität auf das Niveau eines Backsteins.&lt;br /&gt;&lt;br /&gt;Enter &lt;a href="http://sourceforge.net/projects/gnumex"&gt;gnumex&lt;/a&gt;, &lt;span style="font-style:italic;"&gt;noch&lt;/span&gt; ein weiteres Stück FOSS, das es ermöglicht, GCC als Mex-Kompiler zu verwenden, AUF WINDOWS. Um die Dinge zu vereinfachen, verwendete ich die &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt;-Variante und kaum war diese Hürde genommen... lief alles. Einfach so. Wahrscheinlich bin ich ein Dickschädel und habe einfach nicht die Geistesschärfe, mit Windows-Kompilern zu arbeiten, aber mir scheint, alles was ich diesbezüglich anfasse und das nicht GCC heißt ist zum Scheitern verurteilt. Ein Glück, dass es die vielen klugen Jungen und Mädchen gibt, die so wunderbare freie Software schreiben, die mir das Leben so viel einfacher macht!&lt;br /&gt;&lt;br /&gt;Eine Fortsetzung kommt noch...</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/5762429587960049778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/kompilieren-auf-windows.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/5762429587960049778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/5762429587960049778'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/kompilieren-auf-windows.html' title='Kompilieren auf Windows'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e-cZlUtocGc/SbmPrBx3G4I/AAAAAAAAAHM/3euhMLnqNZ8/s72-c/opensource+rules.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2738742852720994552.post-6687644629824110658</id><published>2009-03-05T13:55:00.000+01:00</published><updated>2009-03-15T15:53:25.272+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programmieren'/><category scheme='http://www.blogger.com/atom/ns#' term='GCC'/><category scheme='http://www.blogger.com/atom/ns#' term='Cross-Compiling'/><category scheme='http://www.blogger.com/atom/ns#' term='Matlab'/><category scheme='http://www.blogger.com/atom/ns#' term='Mex'/><title type='text'>Great Scott!</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Vom Sinn und Unsinn, ein Cross-Platform-Compiling-Matlab-System aufzubauen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e-cZlUtocGc/Sa_MP9wq9pI/AAAAAAAAAGs/pd47QlAg3aA/s1600-h/Bittewarten.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 136px; height: 79px;" src="http://3.bp.blogspot.com/_e-cZlUtocGc/Sa_MP9wq9pI/AAAAAAAAAGs/pd47QlAg3aA/s320/Bittewarten.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5309687060341913234" /&gt;&lt;/a&gt; Mal wieder: Ich schreibe ein Stück Software für meinen Nebenjob bei meinem Signalverarbeitung-Prof. Diesmal geht es darum, beliebige Audio-Files in Matlab einlesen zu können. Perfekt geeignet ist dafür die selbe Bibliothek, die auch von VLC verwendet wird, libavcodec/libavformat. Das ist eine normale C-Bibliothek, es braucht also nur noch ein kleines mex-File, um ihre Funktionalität für Matlab zur Verfügung zu stellen. Klappt auch wunderbar. Auf dem Mac.&lt;br /&gt;&lt;br /&gt;Schritt zwei ist dann, das Ganze auf Windows und Linux zum Laufen zu bringen. Eigentlich kein Problem, denn ich habe keine wilden Dinge getan und die Libraries selbst sind wunderbar Cross-Platform, es gibt sie sogar schon vorkompiliert für praktisch jedes denkbare Betriebssystem.&lt;br /&gt;&lt;br /&gt;Also, was brauche ich? Zwei Dinge: Matlab und einen C-Compiler (der mitgelieferte LLC-Compiler macht mein Hirn bluten). Matlab zu installieren ist meiner Erfahrung nach schmerzhaft. Bigtime. Nicht, weil Matlab schwer zu installieren wäre, sondern, weil Mathworks nur zwei Installationen pro Schachtel erlaubt, was für meine drei Betriebssysteme zu gewissen Problemen führt. Außerdem müsste ich meine eine Lizenz erst für die Windows-installation umschreiben lassen, und... ach, Schmerzen. Offenbar habe ich die Jungs dort aber schon derart häufig mit Lizenzanfragen genervt, dass sie mich einfach als hoffnungslos aufgegeben haben, denn dieses Mal musste ich keine neue Lizenz erstellen lassen, sondern einfach installieren, Passwort eingeben, und los. Mein Account meldet jetzt, dass ich fünf gleichzeitige Installationen hätte (von zwei erlaubten). Mir solls Recht sein.&lt;br /&gt;&lt;br /&gt;Außerdem: ein aktuelles Linux muss her. VMWare sei Dank, lauert im Linux-Installieren nicht mehr der Schrecken, im Zweifelsfall den kompletten Festplatteninhalt zu verlieren, sondern nur noch, an akuter Progressbar-itis zu ersticken. War ja klar, dass Autoupdate sich diesen Nachmittag aussucht, um meine Ubuntu-VM hoffnungslos zu zerstören. Also, neues Ubuntu heruntergeladen, neu installiert, neu Updates aufgespielt, zwei Stunden Lifetime verloren. Immerhin: es hat fehlerfrei funktioniert, das ist was Neues. Matlab hinterher, VMWare Tools dazu, fertig ist die Development-Kiste. Jetzt fehlt nur noch eine Verbindung zu meinem Development-Verzeichnis, damit ich auf meine Dateien zugreifen kann. Fehlanzeige. Dukommsthiernichrein. Na Toll.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e-cZlUtocGc/Sa_MiJwz_JI/AAAAAAAAAG0/J0jXE1YUr1I/s1600-h/Der+Upgradepatch.png"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 280px;" src="http://1.bp.blogspot.com/_e-cZlUtocGc/Sa_MiJwz_JI/AAAAAAAAAG0/J0jXE1YUr1I/s320/Der+Upgradepatch.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5309687372801375378" /&gt;&lt;/a&gt;Also weiter zu Windows. Frühere Versuche ergaben bereits, dass ich Matlab nicht dazu bewegen kann, (a) GCC als Compiler zu nehmen oder (b) das bereits installierte Microsoft Visual Studio C++ .Net Professional Directors Cut Special Edition 2008 Ultimate zu verwenden. Nähere Nachforschungen zeigen: Zu neu, Kennternich. Geht nur bis MSVC Jahrgang 2005. Also: Neues MSVC deinstallieren, Altes installieren. ich freue mich immer darauf, MSVC zu deinstallieren, denn es besteht lediglich aus kompakten 12 Programmen, die sich zwar alle auf einem Haufen Installieren- jedoch nicht De-Installieren lassen. Immerhin ist es dank MSDNAA-Membership nicht schwer, an die alten Versionen heranzukommen. Und klar, die Systemsteuerung lässt einen auch immer nur ein Programm auf einmal deinstallieren. Multitasking ist nicht. Dank Syncplicity kann Windows die Zwischenzeit immerhin dazu verwenden, all meine Development-Files auf den Rechner zu laden. Yay!&lt;br /&gt;Das Schöne an Fortschrittsbalken ist ja, sie zeigen Fortschritt. Damit haben sie einen klaren Vorteil gegenüber etwa Dachbalken oder den Bittewartenpunktpunktpunkt-Balken, die die Microsoft SQL Server 2008-Deinstallation stolz herumzeigt. Die fühlt sich wohl sehr wichtig, denn sie rödelt eine starke halbe Stunde im Bitte-Warten-Modus herum. So mag ich Deinstallationen.&lt;br /&gt;&lt;br /&gt;To be continued...</content><link rel='replies' type='application/atom+xml' href='http://www.daskrachen.com/feeds/6687644629824110658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.daskrachen.com/2009/03/great-scott.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6687644629824110658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2738742852720994552/posts/default/6687644629824110658'/><link rel='alternate' type='text/html' href='http://www.daskrachen.com/2009/03/great-scott.html' title='Great Scott!'/><author><name>Basti</name><uri>http://www.blogger.com/profile/06879685783736531333</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_e-cZlUtocGc/Sa_MP9wq9pI/AAAAAAAAAGs/pd47QlAg3aA/s72-c/Bittewarten.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>