<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6691429138293034846</id><updated>2011-07-31T09:04:37.357+02:00</updated><category term='pages'/><category term='subversion'/><category term='mac'/><category term='keynote'/><title type='text'>Bits and pieces I'd like to share</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-8099599268402363465</id><published>2009-07-21T18:59:00.013+02:00</published><updated>2009-07-21T20:41:28.582+02:00</updated><title type='text'>Absence of Evidence is Evidence of Absence</title><content type='html'>&lt;ul&gt;&lt;li&gt; if the evidence had a chance to show up, i.e., if someone looked for it.&lt;br /&gt;&lt;li&gt; if evidence is not understood as proof but as an indication. Of course, absence of proof is &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; proof of absence.&lt;/ul&gt;I recently found a really nice &lt;a href="http://oyhus.no/AbsenceOfEvidence.html"&gt;proof&lt;/a&gt; of this statement using conditional probabilities. I found the symbols and the layout to be not optimal. Therefore, I created my own version of the proof:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vAvAC5GXfJU/SmYG8Sg5vVI/AAAAAAAAAE8/0FkPOw0WrlI/s1600-h/absenceOfEvidenceIsEvidenceOfAbsence.png"&gt;&lt;img style="display:block; margin: 40px auto 0px; cursor:pointer; cursor:hand;width: 252px; height: 320px;" src="http://3.bp.blogspot.com/_vAvAC5GXfJU/SmYG8Sg5vVI/AAAAAAAAAE8/0FkPOw0WrlI/s320/absenceOfEvidenceIsEvidenceOfAbsence.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5360980039262911826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What I like especially about this proof is that it first explicitly defines what evidence is: Some observation E is evidence for a hypothesis X if X being true is more likely when given that E is observed than when given that E is not observed, i.e., P(X|E) &gt; P(X|not E). If this is given, observing E will increase the likelihood of X being true. Using &lt;a href="http://en.wikipedia.org/wiki/Bayes%27_Theorem"&gt;Bayes' Theorem&lt;/a&gt;, you can precisely calculate how much it is increased. Assume you assigned some a priori probability P(X) to X. The a posteriori probability, i.e., the probability that X is true given that you observed E, is&lt;br /&gt;P(X|E) = P(E|X)*P(X) / ( P(E|X)*P(X) + P(E|not x)*P(not X) ).&lt;br /&gt;It is easy to see that the "shift" from a priori to a posteriori probability will be the higher the bigger P(E|X) / P(E|not X) is. If it is likely to observe E given that X is true, say P(E|X) = 80%, and at the same time unlikely to observe E given that X is false, say P(E|not X) = 0.1%, observing E is strong evidence. On the other hand, if P(E|X) is only slightly greater than P(E|not X), say 80% vs. 75%, E is weak evidence.&lt;br /&gt;&lt;br /&gt;Knowing what strong and weak evidence is and knowing that absence of evidence is evidence of absence helps you evaluating lots of things. I find these facts to be actually quite intuitive but it helps if you can be sure of them on a very formal basis.&lt;br /&gt;&lt;br /&gt;For example, if your friend John tells you about that new alternative medical treatment that has helped him getting rid of his cold for just 50€. In that case, the hypothesis X is that the treatment is efficacious and the evidence E is that John recovered from his cold. Well, you know that John would probably have recovered anyway, so P(E|not X) is nearly 1. Therefore, however high P(E|X) is, E can only be very weak evidence. This, of course, matches the intuition that you cannot rely on an individual case to judge such a treatment.&lt;br /&gt;&lt;br /&gt;Some time later you read about a double-blind, placebo-controlled clinical trial in which they tested the treatment John was talking about. It showed no statistical significant effect, i.e., the result they got did not contradict the null hypothesis that the treatment has no other effect than a placebo. (The result would have contradicted the null hypothesis if, assuming the null hypothesis being true, it was less likely than the level of significance they used -- usually 5%.) This absence of evidence of the treatment's efficacy is of course no proof that it is inefficacious. But it is evidence for that. Again, this matches the intuition. They looked for efficacy, they found no efficacy, so there being no efficacy is more likely now than before they looked.  &lt;br /&gt;&lt;br /&gt;What about if John tells you about that new lifestyle drug that turns your skin green (hypothesis X). He took it and his skin turned green (evidence E). Your intuition tells you that this should be strong evidence, and it is. Assuming that John tells the truth, you can be pretty sure about the efficacy of that drug because the probability P(E|not X) that he would turn green without the drug being efficacious is practically zero.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-8099599268402363465?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/8099599268402363465/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=8099599268402363465' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8099599268402363465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8099599268402363465'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2009/07/absence-of-evidence-is-evidence-of.html' title='Absence of Evidence is Evidence of Absence'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vAvAC5GXfJU/SmYG8Sg5vVI/AAAAAAAAAE8/0FkPOw0WrlI/s72-c/absenceOfEvidenceIsEvidenceOfAbsence.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-5255568942186853873</id><published>2009-01-05T14:09:00.006+01:00</published><updated>2009-01-06T10:57:47.692+01:00</updated><title type='text'>Fullscreen editing in TextMate à la WriteRoom</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vAvAC5GXfJU/SWISJPWYOmI/AAAAAAAAADQ/XoEECRIiwGs/s1600-h/megazoom_single.png"&gt;&lt;img style="border: 1px solid #333;  clear:right; float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_vAvAC5GXfJU/SWISJPWYOmI/AAAAAAAAADQ/XoEECRIiwGs/s200/megazoom_single.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5287808862434900578" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vAvAC5GXfJU/SWISWDnHzPI/AAAAAAAAADY/_KrKFNYe4QE/s1600-h/megazoom_multiple.png"&gt;&lt;img style="clear: right; border: 1px solid #333; float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 125px;" src="http://4.bp.blogspot.com/_vAvAC5GXfJU/SWISWDnHzPI/AAAAAAAAADY/_KrKFNYe4QE/s200/megazoom_multiple.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5287809082622201074" /&gt;&lt;/a&gt;I always wanted distraction free text editing like supported by &lt;a href="http://www.hogbaysoftware.com/products/writeroom"&gt;WriteRoom&lt;/a&gt; – but using a powerful text editor I am used to, e.g. &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you can see in the screenshots, I managed to get very close to this goal. I use &lt;a href="http://www.johnhaney.com/backdrop/"&gt;BackDrop&lt;/a&gt; to hide the desktop, and I use a patched version of &lt;a href="http://ianhenderson.org/megazoomer.html"&gt;Megazoomer&lt;/a&gt; to hide the Mac OS X menu bar, the dock, and the current window's title bar. The patch was necessary because Megazoomer's normal behaviour is to maximize both width and height of the current window and maximizing the width of a text editor can be problematic. Therefore, I created a version of megazoomer that maximizes only the window's height. Thus, you can also put multiple editing windows beside each other as you can see in the second screenshot. I also changed the shortcut to megazoom a window to Cmd+Ctrl+Alt+M to make it more TextMate compatible. You can find my patched version of Megazoomer &lt;a href="http://informatik.hu-berlin.de/~sadilek/megazoomer-0.4.1-textmatepatch.zip"&gt;here&lt;/a&gt; (installation instructions included).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-5255568942186853873?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/5255568942186853873/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=5255568942186853873' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5255568942186853873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5255568942186853873'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2009/01/fullscreen-editing-in-textmate-la.html' title='Fullscreen editing in TextMate à la WriteRoom'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vAvAC5GXfJU/SWISJPWYOmI/AAAAAAAAADQ/XoEECRIiwGs/s72-c/megazoom_single.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-6886018497614785830</id><published>2008-09-19T20:09:00.009+02:00</published><updated>2008-09-23T13:32:08.186+02:00</updated><title type='text'>Agile Language Engineering Tutorial</title><content type='html'>This week, Guido Wachsmuth and I gave a tutorial at the &lt;a href="http://www.uia.no/en"&gt;University of Agder&lt;/a&gt; on using the tools &lt;a href="http://mmunit.sf.net/"&gt;MMUnit&lt;/a&gt;, &lt;a href="http://eprovide.sf.net/"&gt;EProvide&lt;/a&gt;, and &lt;a href="http://tef.berlios.de/"&gt;TEF&lt;/a&gt; for agile language engineering. We described how to generate a prototype of a DSL with a test-first approach to metamodel development and with an operational semantics approach for describing the DSL's semantics.&lt;br /&gt;&lt;br /&gt;As an example DSL, we used a very simple language for describing the behaviour of a telephone remote control system. The idea is that you can call the system with your mobile phone and use your phone's &lt;a href="http://en.wikipedia.org/wiki/Dtmf"&gt;DTMF&lt;/a&gt; tones to control something remotely in your house. The DSL looks like this:&lt;br /&gt;&lt;pre&gt;main {&lt;br /&gt; say "main menu";&lt;br /&gt; listen {&lt;br /&gt;   1: "control lights" -&gt; lights;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;lights {&lt;br /&gt; say "your lights are";&lt;br /&gt; say lights_status();&lt;br /&gt; listen {&lt;br /&gt;   1: "switch your lights" -&gt; switch_lights;&lt;br /&gt;   0: "return to main menu" -&gt; main;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;switch_lights {&lt;br /&gt; lights_switch();&lt;br /&gt; say "your lights are now";&lt;br /&gt; say lights_status();&lt;br /&gt; goto main;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;You can find the slides of the tutorial &lt;a href="http://www2.informatik.hu-berlin.de/%7Esadilek/presentations/2008-09-16_ale-tutorial/slides1.pdf"&gt;here&lt;/a&gt; and &lt;a href="http://www2.informatik.hu-berlin.de/%7Esadilek/presentations/2008-09-16_ale-tutorial/slides2.pdf"&gt;here&lt;/a&gt;. There was also a &lt;a href="http://www2.informatik.hu-berlin.de/%7Esadilek/presentations/2008-09-16_ale-tutorial/handout.pdf"&gt;handout&lt;/a&gt; that explains step-by-step how to create the DSL prototype. In this &lt;a href="http://www2.informatik.hu-berlin.de/%7Esadilek/presentations/2008-09-16_ale-tutorial/"&gt;folder&lt;/a&gt;, there are some code snippets you may find useful if you want to go through this tutorial.&lt;br /&gt;If you are lazy you can also just download the &lt;a href="http://eprovide.svn.sourceforge.net/viewvc/eprovide/trunk/hub.metrik.lang.dtmfcontrol/"&gt;completed project&lt;/a&gt; or watch this &lt;a href="http://www2.informatik.hu-berlin.de/%7Esadilek/presentations/2008-09-16_ale-tutorial/screencast.mov"&gt;screencast&lt;/a&gt; showing the prototype in action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-6886018497614785830?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/6886018497614785830/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=6886018497614785830' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/6886018497614785830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/6886018497614785830'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/09/agile-language-engineering-tutorial.html' title='Agile Language Engineering Tutorial'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-3391968432532862280</id><published>2008-08-29T17:14:00.004+02:00</published><updated>2008-08-29T17:28:21.053+02:00</updated><title type='text'>EProvide 2.1.0</title><content type='html'>Yesterday, we released a new version of &lt;a href="http://eprovide.sf.net/"&gt;EProvide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;(EProvide is an Eclipse EMF-based tool with which you can describe the operational semantics of your DSL using different description languages. The idea behind EProvide is to metamodel not only the static structure of your DSL but also the runtime states. Thus, the runtime state of a DSL program is encoded in a model that changes step-wise over time. With EProvide, these step-wise changes are described with a model transformation that transforms one runtime state to its successor. Based on such a description and on an editor for your DSL, EProvide can execute your models in an animated way so that you can observe and debug model execution.)&lt;br /&gt;&lt;br /&gt;The new version is much better integrated into the Eclipse debug framework than its predecessor: you can use Eclipse's standard GUI elements for controlling model execution (suspend, resume, step, drop to frame = reset initial state, terminate). Also, we added a new &lt;i&gt;step-back&lt;/i&gt; button to the debug view that allows you to step back in the execution history of your model execution.&lt;br /&gt;&lt;br /&gt;You can see the new features demonstrated in this &lt;a href="http://eprovide.sourceforge.net/screencasts/dsl-execution.mov"&gt;screencast&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-3391968432532862280?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/3391968432532862280/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=3391968432532862280' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/3391968432532862280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/3391968432532862280'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/08/eprovide-210.html' title='EProvide 2.1.0'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-7236430597953848487</id><published>2008-08-28T10:13:00.003+02:00</published><updated>2008-08-28T10:36:32.825+02:00</updated><title type='text'>Time Machine freezes computer</title><content type='html'>I let Time Machine backup into a sparse bundle on a windows share. This worked a little slow but otherwise fine until yesterday when Time Machine froze my MacBook every time it ran. To get it back running, I had to turn off the MacBook by holding down the power key for a few seconds. After restart, Mac OS told me the reason: a kernel panic with this backtrace:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;panic(cpu 0 caller 0x00321C20): "hfs_UNswap_BTNode: invalid forward link (0xABAC0006)\n"@/SourceCache/xnu/xnu-1228.5.20/bsd/hfs/hfs_endian.c:254&lt;br /&gt;Backtrace, Format - Frame : Return Address (4 potential args on stack)&lt;br /&gt;0x3cb4b768 : 0x12b0fa (0x4592a4 0x3cb4b79c 0x133243 0x0)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;After some web search &lt;a href="http://discussions.apple.com/thread.jspa?messageID=7956885"&gt;[1]&lt;/a&gt;, I found out that the reason was probably a defect sparse bundle caused by turning off my computer during backups, which I sometimes do. So the solution was to repair the sparse bundle:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; I mounted the windows share on which my Time Machine sparse bundle lies.&lt;br /&gt;Then, I executed the following commands in the terminal:&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Make the sparse bundle available as a device (in my case, it was /dev/disk1, but hdiutil tells you, which device it assigns the sparse bundle to):&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; hdiutil attach -nomount -readwrite /Volumes/windows_share/my.sparsebundle&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Repair the sparse bundle (this takes some time):&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; fsck_hfs -f /dev/disk1&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-7236430597953848487?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/7236430597953848487/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=7236430597953848487' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/7236430597953848487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/7236430597953848487'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/08/time-machine-freezes-computer.html' title='Time Machine freezes computer'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-8717025865417079808</id><published>2008-08-05T15:14:00.002+02:00</published><updated>2008-08-05T15:24:09.806+02:00</updated><title type='text'>Are writing code and writing text so different?</title><content type='html'>It seems to me that programming and paper writing modify your brain in incompatible ways. Whenever I have been heavily in programming for a couple of days, I have problems switching to paper writing -- and vice versa. Maybe it is because in paper writing, you are forced to structure your thoughts in a sequential order, whereas in programming, knowing your code structure requires you to keep track of many things in parallel: call and inheritance hierarchies, operation parameters, names of variable, operations, and classes, ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-8717025865417079808?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/8717025865417079808/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=8717025865417079808' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8717025865417079808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8717025865417079808'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/08/are-writing-code-and-writing-text-so.html' title='Are writing code and writing text so different?'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-458772541697702558</id><published>2008-06-27T09:54:00.003+02:00</published><updated>2008-06-27T10:11:55.574+02:00</updated><title type='text'>Eclipse Ganymede OutOfMemoryError</title><content type='html'>The new version of Eclipse is out now: &lt;a href="http://www.eclipse.org/ganymede/"&gt;Ganymede&lt;/a&gt;. I installed it and most things seem to work fine. The only problem I had was getting an &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;OutOfMemoryError&lt;/span&gt; when starting a second Eclipse instance with the Eclipse plugins I develop. This error occurs in the second Eclipse instance after activating some of the plugins by GUI interaction. Normally, such an error can be solved by increasing the maximum heap size the JVM can use with the VM argument &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-Xmx&lt;size&gt;&lt;/size&gt;&lt;/span&gt;. The default size is &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;128m&lt;/span&gt; and usually &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-Xmx256m&lt;/span&gt; is enough for my purposes.&lt;br /&gt;&lt;br /&gt;However, in this case, increasing the heap size did not solve the problem. The error that occurred was not the typical OutOfMemoryError. The total heap size was big enough but the PermGen region was too small. This was indicated by the error's message:&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;java.lang.OutOfMemoryError: PermGen space&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To solve this error, I had to increase this region's size with this VM argument (the default size is &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;64m&lt;/span&gt;):&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;-XX:MaxPermSize=128m&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-458772541697702558?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/458772541697702558/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=458772541697702558' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/458772541697702558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/458772541697702558'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/06/eclipse-ganymede-outofmemoryerror.html' title='Eclipse Ganymede OutOfMemoryError'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-1975421162511549482</id><published>2008-06-25T15:35:00.003+02:00</published><updated>2008-06-25T15:41:22.800+02:00</updated><title type='text'>Resizing sparse bundle image for time machine</title><content type='html'>I use Mac OS X Leopard's time machine to backup my notebook data to a network drive. I configured it according to &lt;a href="http://www.flokru.org/2008/02/29/time-machine-backups-on-network-shares-in-leopard/"&gt;this tutorial&lt;/a&gt;. Everything works fine. Initially, I set the maximum size of the spare bundle image to 15GB. Now I wanted to increase this to 20GB. After some searching, I found the solution:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;hdiutil resize -size 20g &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;path_to_your_sparsebundle&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-1975421162511549482?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/1975421162511549482/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=1975421162511549482' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/1975421162511549482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/1975421162511549482'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/06/resizing-sparse-bundle-image-for-time.html' title='Resizing sparse bundle image for time machine'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-1714290518677450437</id><published>2008-04-13T20:29:00.007+02:00</published><updated>2008-04-13T21:00:58.796+02:00</updated><title type='text'>Configurable Sequence Highlighting</title><content type='html'>&lt;div style="float:right; margin:0 0 10px 10px"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vAvAC5GXfJU/SAJWfStdw1I/AAAAAAAAACM/sMdYNed6pKo/s1600-h/sequence_highlighting_menu.png"&gt;&lt;img src="http://3.bp.blogspot.com/_vAvAC5GXfJU/SAJWfStdw1I/AAAAAAAAACM/sMdYNed6pKo/s200/sequence_highlighting_menu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5188804816282698578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vAvAC5GXfJU/SAJVvytdw0I/AAAAAAAAACE/DYVH2LYolmk/s1600-h/sequence_highlighting.png"&gt;&lt;img src="http://1.bp.blogspot.com/_vAvAC5GXfJU/SAJVvytdw0I/AAAAAAAAACE/DYVH2LYolmk/s200/sequence_highlighting.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5188804000238912322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Sometimes when editing DNA sequences, you wish to highlight specific sequence parts, e.g., all stop codons.&lt;br /&gt;For this, I made an update of the TextMate bundle I wrote for &lt;a href="http://sadilek.blogspot.com/2008/04/dna-sequence-analysis-with-textmate.html"&gt;sequence analysis&lt;/a&gt;. The new version supports custom highlighting of sequences and can be downloaded from the &lt;a href="http://www2.informatik.hu-berlin.de/~sadilek/SequenceAnalysis.tmbundle.zip"&gt;same location&lt;/a&gt; as the old version. There is a new command ("Sequence Analysis" -&gt; "Highlighted Sequences...") for configuring the custom highlighting. It opens a dialog in which you can enter sequence patterns, give each sequence pattern a name and a color, and enable and disable sequence patterns. A sequence pattern can be a single sequence string or a list of multiple sequences separated by dashes ("|"). Unfortunately, you must restart TextMate for the changes to take effect.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-1714290518677450437?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/1714290518677450437/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=1714290518677450437' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/1714290518677450437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/1714290518677450437'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/04/update-of-sequence-analysis-textmate.html' title='Configurable Sequence Highlighting'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vAvAC5GXfJU/SAJWfStdw1I/AAAAAAAAACM/sMdYNed6pKo/s72-c/sequence_highlighting_menu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-5315053661718480978</id><published>2008-04-09T12:25:00.006+02:00</published><updated>2008-09-16T22:40:42.243+02:00</updated><title type='text'>Finder integration for restoring .svn folders</title><content type='html'>&lt;div style="float:right; margin:0 0 10px 10px"&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_ybrvzBARI/AAAAAAAAAB0/7oaDDNQqsQA/s1600-h/SVN_Recover.png"&gt;&lt;img src="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_ybrvzBARI/AAAAAAAAAB0/7oaDDNQqsQA/s200/SVN_Recover.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5187192046691090706" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;I created an Automator workflow for the shell script "svnRecover" I wrote about in an &lt;a href="http://sadilek.blogspot.com/2007/07/restore-svn-in-keynotepages-documents.html"&gt;earlier post&lt;/a&gt;. This allows to restore the .svn folders in a Keynote/Pages or similar document that is under Subversion control. For this, you simply select More-&gt;Automator-&gt;SVN_Recover from the document's context menu (see screenshot). You can download the automator workflow &lt;a href="http://www2.informatik.hu-berlin.de/~sadilek/SVN_Recover.workflow.zip"&gt;here&lt;/a&gt;. To install it, unzip it and copy the workflow document into the folder ~/Library/Workflows/Applications/Finder in your home directory. (You do not need to install the shell script separately; it is included in the Automator workflow.)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-09-16: I fixed a bug that could lead to the deletion of all contents of folders with extended privileges.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-5315053661718480978?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/5315053661718480978/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=5315053661718480978' title='4 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5315053661718480978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5315053661718480978'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/04/finder-integration-for-restoring-svn.html' title='Finder integration for restoring .svn folders'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vAvAC5GXfJU/R_ybrvzBARI/AAAAAAAAAB0/7oaDDNQqsQA/s72-c/SVN_Recover.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-5768652587387490338</id><published>2008-04-07T12:29:00.016+02:00</published><updated>2008-04-13T21:01:37.086+02:00</updated><title type='text'>DNA Sequence Analysis with TextMate</title><content type='html'>&lt;div style="float:right; margin:0 0 10px 10px"&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n4qfzBANI/AAAAAAAAABQ/y0tvxseSJxE/s1600-h/menu_sequence.png"&gt;&lt;img src="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n4qfzBANI/AAAAAAAAABQ/y0tvxseSJxE/s200/menu_sequence.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5186449854867505362" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n5nPzBAOI/AAAAAAAAABY/fXfmY0kBF-o/s1600-h/menu_reading_frame.png"&gt;&lt;img src="http://1.bp.blogspot.com/_vAvAC5GXfJU/R_n5nPzBAOI/AAAAAAAAABY/fXfmY0kBF-o/s200/menu_reading_frame.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5186450898544558306" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n69_zBAPI/AAAAAAAAABg/LnTzmZkIzSM/s1600-h/menu_amino_acids.png"&gt;&lt;img  src="http://4.bp.blogspot.com/_vAvAC5GXfJU/R_n69_zBAPI/AAAAAAAAABg/LnTzmZkIzSM/s200/menu_amino_acids.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5186452388898210034" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n7L_zBAQI/AAAAAAAAABo/9D18MDr4K8Q/s1600-h/menu_text.png"&gt;&lt;img  src="http://4.bp.blogspot.com/_vAvAC5GXfJU/R_n7L_zBAQI/AAAAAAAAABo/9D18MDr4K8Q/s200/menu_text.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5186452629416378626" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;I have built my first bundle for &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;, the &lt;a href="http://www.rubyonrails.org/down"&gt;famous&lt;/a&gt; text editor for Mac OS X. The bundle allows simple DNA sequence analysis tasks, like setting the reading frame, sequence comparison, expressing codons, and determining masses of the expressed amino acids. For sequence comparison, I integrated two tools from &lt;a href="http://emboss.sourceforge.net/"&gt;EMBOSS&lt;/a&gt;: needle and water. These are also accessible via a web interface of the &lt;a href="http://www.ebi.ac.uk/emboss/align/"&gt;European Bioinformatics Institute&lt;/a&gt;.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;You can download the bundle &lt;a href="http://www2.informatik.hu-berlin.de/~sadilek/SequenceAnalysis.tmbundle.zip"&gt;here&lt;/a&gt;. Just unzip the file and double click it or drag  it on the TextMate application. When you edit a sequence file you should select "Fasta" as language at the bottom of TextMate. Then, you can access the sequence analysis commands by pressing Ctrl+Escape.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Have fun!&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-04-13: &lt;a href="http://sadilek.blogspot.com/2008/04/update-of-sequence-analysis-textmate.html"&gt;Configurable sequence highlighting&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-5768652587387490338?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/5768652587387490338/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=5768652587387490338' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5768652587387490338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/5768652587387490338'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/04/dna-sequence-analysis-with-textmate.html' title='DNA Sequence Analysis with TextMate'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vAvAC5GXfJU/R_n4qfzBANI/AAAAAAAAABQ/y0tvxseSJxE/s72-c/menu_sequence.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-8559015003067616434</id><published>2008-02-19T18:07:00.004+01:00</published><updated>2008-02-19T18:17:11.259+01:00</updated><title type='text'>Remove .svn folders</title><content type='html'>This is just another svn hack. On the Mac, when copying a Keynote/Pages/Numbers or similar document that is under subversion control, you also copy all its .svn directories. A similar problem to the one I described in &lt;a href="http://sadilek.blogspot.com/2007/07/restore-svn-in-keynotepages-documents.html"&gt;this post&lt;/a&gt;. Again, a litte shell script can help here. &lt;a href="http://www2.informatik.hu-berlin.de/~sadilek/svnCleanAllSvnFolders"&gt;svnCleanAllSvnFolders&lt;/a&gt; simply removes all .svn folders inside the current directory&amp;mdash;if you call it with "yes" as a parameter; otherwise it just prints out what it would remove.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-8559015003067616434?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/8559015003067616434/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=8559015003067616434' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8559015003067616434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/8559015003067616434'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2008/02/remove-svn-folders.html' title='Remove .svn folders'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6691429138293034846.post-164154300229646532</id><published>2007-07-16T11:51:00.004+02:00</published><updated>2008-09-16T22:40:24.426+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pages'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='keynote'/><title type='text'>Restore .svn in Keynote/Pages documents</title><content type='html'>&lt;div&gt;Subversion stores its metadata in a directory called ".svn" that lies in every directory under version control. Keynote, Pages, and some other applications on Mac OS X store their documents in directories that look like files in the Finder. However, for Subversion they are normal directories and as such contain a ".svn" when under Subversion control.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Unfortunately, Keynote/Pages delete the ".svn" metadata-directories when a document is saved. This breaks Subversion: on the next commit or update you get the error "containing working copy admin area is missing". This bug is &lt;a href="http://subversion.tigris.org/issues/show_bug.cgi?id=707"&gt;known&lt;/a&gt; since years but has not been fixed.&lt;/div&gt;&lt;br /&gt;As a workaround, I've written a shellscript that restores the deleted ".svn" files. You can download it &lt;a href="http://www2.informatik.hu-berlin.de/~sadilek/svnRecover"&gt;here&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-09-16: I fixed a bug that could lead to the deletion of all contents of folders with extended privileges.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-04-09: I created an &lt;a href="http://sadilek.blogspot.com/2008/04/finder-integration-for-restoring-svn.html"&gt;Automator workflow&lt;/a&gt; so that the .svn folder recovery can be started from a document's context menu in Finder.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-04-09: I improved error handling when the document is not under version control or has been an ordinary file before.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update 2008-02-19: I incorporated the improvements from the comments. Thank you!&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6691429138293034846-164154300229646532?l=sadilek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sadilek.blogspot.com/feeds/164154300229646532/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6691429138293034846&amp;postID=164154300229646532' title='8 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/164154300229646532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6691429138293034846/posts/default/164154300229646532'/><link rel='alternate' type='text/html' href='http://sadilek.blogspot.com/2007/07/restore-svn-in-keynotepages-documents.html' title='Restore .svn in Keynote/Pages documents'/><author><name>Daniel A. Sadilek</name><uri>http://www.blogger.com/profile/16298618811307801255</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://metrik.informatik.hu-berlin.de/grk-wiki/images/2/28/Sadilek_150_219.jpg'/></author><thr:total>8</thr:total></entry></feed>
