<?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-8128534680626804659</id><updated>2012-02-15T23:43:20.302-08:00</updated><category term='ubuntu xorg nvidia macosx'/><category term='scala eclipse'/><category term='python debugging'/><category term='git ruby capistrano'/><category term='scala'/><category term='html5'/><category term='go'/><category term='clojure'/><category term='soap interoperability'/><category term='scala build'/><title type='text'>Cold Code</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.coldcode.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8128534680626804659.post-396139284941051079</id><published>2012-01-25T03:33:00.000-08:00</published><updated>2012-01-25T03:33:42.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python debugging'/><title type='text'>python winpdb automation</title><content type='html'>I wasted some time trying to automate the launching of winpdb without asking the user for the password; hoping that what I found out will help somebody:&lt;br /&gt;&lt;br /&gt;Passing the password to winpdb with -p is unsupported on unix, because of security issues (the command line parameters can be seen by anyone). However there is an undocumented --rid parameter which takes an integer which is used to construct a file name which will contain the password (beware: no newline after the password). winpdb will delete this password file after reading it. You should create this file it with appropriate permissions.&lt;br /&gt;&lt;br /&gt;Here's a bash haiku to show what I mean:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; RID=$RANDOM; echo -n 'test' &amp;gt;/home/marko/.rpdb2_settings/passwords/$RID; winpdb --rid $RID --attach yourscript.py  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-396139284941051079?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/396139284941051079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2012/01/python-winpdb-automation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/396139284941051079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/396139284941051079'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2012/01/python-winpdb-automation.html' title='python winpdb automation'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-4005590637418270196</id><published>2011-06-06T14:12:00.000-07:00</published><updated>2011-06-06T14:12:38.125-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='go'/><title type='text'>golang interface is not nil even if 'containing' a nil pointer</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;Today I was struggling with a weird issue with "err != nil" during a refactoring of the&amp;nbsp;&lt;a href="http://code.google.com/p/go9p/"&gt;go9p&lt;/a&gt;&amp;nbsp;library. Here is a simplified situation:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;script src="https://gist.github.com/1011076.js?file=gistfile1.go"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This prints:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Test *main.Test 0x0 dummy"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;here 'err' is &lt;b&gt;not&lt;/b&gt; nil, even if nil is actually returned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem arised because go9p has an inner API returning some custom *Error, which is then 'casted' to a os.Error interface in the public API layer, so that it can implement the io.Reader,... interfaces. All code using this standard API was getting errors even if no error was returned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From what I understood, it goes this way: *Test implements os.Error. *Test can be nil since it's a pointer.&lt;br /&gt;os.Error is an interface value. Any interface value can also be nil.&lt;/div&gt;&lt;div&gt;When a value of type X is put* in a variable (or return value) declared as interface Y, then a new value is created holding X. In our case a value of type os.Error&amp;nbsp;contains a *Test, both of which can be nil.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"if err != nil" checks whether 'err', the interface value, is nil, which is not. &amp;nbsp;"%T" fetches the runtime type of err, which skips (confusingly) the interface envelope and prints *main.Test.&lt;/div&gt;&lt;div&gt;"%p" also skips the interface value, probably because it's not really a pointer (or perhaps because it sounded more natural to follow what the underlying real value points to).&lt;br /&gt;Lastly "%s"&amp;nbsp;invokes the String() method, which is implemented for *Test; here "self != nil" is true because here we have the real underlying pointer.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, assuming I understood correctly what's happening, we can generalize this issue to:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/1011084.js?file=gistfile1.go"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is because an interface value has to have a "zero" value, and it's nil. If you assign a pointer which implements that interface, that pointer can point somewhere or be nil, it doesn't matter, it's a valid pointer; and if you assign this pointer to the interface value, that interface value now has a value which is not nil.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I imagine that otherwise it would be impossible to have a zero value for the interfaces:&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/1011088.js?file=gistfile1.go"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;So, in order to fix this code you have to catch and "rethrow" the error:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;script src="https://gist.github.com/1011107.js?file=gistfile1.go"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;This might seem a big issue, but usually this kind of code already checks for errors and returns so you just have to pay attention to not assigning to a previously declared interface value like os.Error, for example here "err" was inferred as os.Error in a previous ":=" assignement and then used to hold a *Error:&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/1011112.js?file=gistfile1.diff"&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-4005590637418270196?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/4005590637418270196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2011/06/golang-interface-is-not-nil-even-if.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/4005590637418270196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/4005590637418270196'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2011/06/golang-interface-is-not-nil-even-if.html' title='golang interface is not nil even if &apos;containing&apos; a nil pointer'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-9057664936473584033</id><published>2011-01-25T07:52:00.000-08:00</published><updated>2011-01-26T05:40:26.772-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala eclipse'/><title type='text'>scala generics and eclipse autocompletion</title><content type='html'>The Scala 2.8.1 compiler doesn't create correctly the generics signature in some cases&lt;br /&gt;&lt;br /&gt;&lt;a href="https://lampsvn.epfl.ch/trac/scala/ticket/4067"&gt;https://lampsvn.epfl.ch/trac/scala/ticket/4067&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Eclipse 3.6 is very strict about the signatures and it's autocompletion feature throws an exception when you work on a java project using scala code:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332423"&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=332423&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The issue is being fixed in both projects, but in the meantime I needed to work in eclipse with the &lt;a href="http://akkasource.org/"&gt;akka library&lt;/a&gt;, and this issue is annoying.&lt;br /&gt;&lt;br /&gt;I wrote a small tool which tries to fix the scala classes. Currently I tested it only on scala-library.jar, which contained the "orElse" method whose signature affected my setup. I don't know if it fixes all the problems, but I tried it on my project and eclipse &amp;nbsp;doesn't complain.&lt;br /&gt;&lt;br /&gt;For now I only tried to put that jar in the eclipse IDE classpath, while keeping the original scala-library.jar in the executable classpath.&lt;br /&gt;&lt;br /&gt;You can get the code at:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/mmikulicic/scala-fix-generics"&gt;https://github.com/mmikulicic/scala-fix-generics&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-9057664936473584033?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/9057664936473584033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2011/01/scala-generics-and-eclipse.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/9057664936473584033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/9057664936473584033'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2011/01/scala-generics-and-eclipse.html' title='scala generics and eclipse autocompletion'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-3622363556381264457</id><published>2011-01-13T10:34:00.000-08:00</published><updated>2011-01-13T10:34:42.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><title type='text'>Ballerina</title><content type='html'>A colleague of mine told me today that that his girlfriend woudln't believe that there was an optical illusion in the animated dancer image that you can find at: &lt;a href="http://dl.dropbox.com/u/2520452/ballerina/ballerina.gif"&gt;http://dl.dropbox.com/u/2520452/ballerina/ballerina.gif&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was just about to play with html5 canvas drawing, and so I wanted to try out to pilot the illusion with a small red ball which can rotate in both directions, following an elliptical path (an illusion of perspective) and appearing to disappear when going "behind" the dancer.&lt;br /&gt;&lt;br /&gt;I don't know if it works for all, but for me this simple (and unprecise) animation, combined with the psycologial effect introduced by clicking on a "change direction" button, swaps the dancer's direction immediately in my head, or at least within one rotation.&lt;br /&gt;&lt;br /&gt;Click here to se a &lt;a href="http://dl.dropbox.com/u/2520452/ballerina/ballerina.html"&gt;demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source code on &lt;a href="https://github.com/mmikulicic/ballerina"&gt;github&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-3622363556381264457?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/3622363556381264457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2011/01/ballerina.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3622363556381264457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3622363556381264457'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2011/01/ballerina.html' title='Ballerina'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-1157436947986368623</id><published>2010-12-13T15:28:00.000-08:00</published><updated>2010-12-13T15:28:41.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>scala specs functional matchers</title><content type='html'>I was reading http://code.google.com/p/specs/wiki/MatchersGuide and wondered if new matchers could be defined more tersely than:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/739785.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;So here it is, with a couple of implicits:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/739767.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The example shows how to promote a function to a matcher. Currently I didn't find how to define&lt;br /&gt;a function literal with call-by-name semantics, but for simple matchers where a call-by-value semantic is acceptable this trick works fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-1157436947986368623?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/1157436947986368623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/12/scala-specs-functional-matchers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/1157436947986368623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/1157436947986368623'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/12/scala-specs-functional-matchers.html' title='scala specs functional matchers'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128534680626804659.post-138561671618857353</id><published>2010-10-10T15:45:00.001-07:00</published><updated>2010-10-10T15:45:54.795-07:00</updated><title type='text'>Haml macro for clojure</title><content type='html'>&lt;a href="http://github.com/mmikulicic/haml-macro"&gt;http://github.com/mmikulicic/haml-macro&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I made a small project which implements a &lt;a href="http://clojure.org/"&gt;clojure&lt;/a&gt; macro that reads a &lt;a href="http://haml-lang.com/"&gt;haml&lt;/a&gt;&amp;nbsp;file and generates &lt;a href="http://github.com/weavejester/hiccup"&gt;hiccup&lt;/a&gt; markup.&lt;br /&gt;&lt;br /&gt;The parser is more or less&amp;nbsp;compatible with the ruby haml parser,&amp;nbsp;except the clojure expressions instead of ruby.&lt;br /&gt;&lt;br /&gt;An example:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;%table.pane(cellspacing="0")&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;%tr&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- (for [side-name ["left" "right" ]])&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%td(class="side-#{side-name}")&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%table&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-138561671618857353?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/138561671618857353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/10/haml-macro-for-clojure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/138561671618857353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/138561671618857353'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/10/haml-macro-for-clojure.html' title='Haml macro for clojure'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-3289954166486550289</id><published>2010-08-04T08:36:00.000-07:00</published><updated>2010-08-04T08:36:19.511-07:00</updated><title type='text'>TracAutoSessionMail</title><content type='html'>&lt;a href="http://github.com/mmikulicic/tracautosessionmail"&gt;http://github.com/mmikulicic/tracautosessionmail&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is a trac plugin which automatically adds the anonymous reporter email into the user's session.&lt;br /&gt;&lt;br /&gt;This is useful when you want to make a helpdesk trac instance, open to anonymous users. They will put their email in the "reporter" field, pass a captcha test, and&lt;br /&gt;submit tickets. The problem is that, whenever they want to comment or make another ticket, they are required to type their email over and over again, unless they&lt;br /&gt;go to 'preferences' and set their session's email address, which is unlikely to happen for 'normal' users.&lt;br /&gt;&lt;br /&gt;This plugin simply adds the reporter email address into the session email field, when an anonymous user creates a ticket, and it doesn't already have a session email address.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-3289954166486550289?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/3289954166486550289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/08/tracautosessionmail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3289954166486550289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3289954166486550289'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/08/tracautosessionmail.html' title='TracAutoSessionMail'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-949659835142159563</id><published>2010-05-10T19:14:00.000-07:00</published><updated>2010-05-19T04:28:25.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu xorg nvidia macosx'/><title type='text'>nvidia auto display</title><content type='html'>I've created a little shell script which allows me to avoid&amp;nbsp;continuously struggling with nvidia-settings&amp;nbsp;in order to manually switch monitor resolution on my MacBook pro 5,3 running ubuntu linux.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://github.com/mmikulicic/nvidia-auto-display"&gt;http://github.com/mmikulicic/nvidia-auto-display&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you plug your external screen and it automatically switches to it, changing resolution and resizing the desktop&lt;/li&gt;&lt;li&gt;useful on laptops with nvidia graphic card and nvidia proprietary drivers&lt;/li&gt;&lt;li&gt;behaves more or less like on MacOS X&lt;/li&gt;&lt;li&gt;works also after standby&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Hope you find it useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-949659835142159563?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/949659835142159563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/05/nvidia-auto-display.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/949659835142159563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/949659835142159563'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/05/nvidia-auto-display.html' title='nvidia auto display'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-7038354004223726270</id><published>2010-04-21T08:39:00.000-07:00</published><updated>2010-04-21T08:40:56.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala build'/><title type='text'>Scala 2.8 Maven and continuous compilation</title><content type='html'>Scala looks very interesting, and I wanted to give a try to &lt;a href="http://akkasource.org/"&gt;akka&lt;/a&gt;, hoping to be able to push erlang style practices in a JVM oriented workplace.&lt;br /&gt;&lt;br /&gt;I one of the key features I want is to be able to use jrebel to hot update by running scala code during development. Another important requirement is to run scala 2.8.0 (beta or rc1) because akka 0.8.x requires it and I don't want to suffer later on from migration issues; I hope it's safe since for the time I've learned scala, 2.8.x will probably be mainstream.&lt;br /&gt;&lt;br /&gt;I invested some time to learn &lt;a href="http://code.google.com/p/simple-build-tool"&gt;sbt&lt;/a&gt;&amp;nbsp;(looks really promising and fast) but at the end I was not feeling comfortable using it because of a couple of issues regarding unit test detection and dependency management issues. So for now, let's start with maven.&lt;br /&gt;&lt;br /&gt;But with maven I had to:&lt;br /&gt;&lt;blockquote&gt;MAVEN_OPTS="$MAVEN_OPTS -noverify -javaagent:/home/marko/bin/ZeroTurnaround/JRebel/jrebel.jar" mvn scala:console&lt;/blockquote&gt;because the documented method doesn't work (because the scala maven plugin doesn't fork a new virtual machine, see issue ...)&lt;br /&gt;&lt;br /&gt;Ok, now whenever my scala sources are recompiled I can see hot updates in my scala console! Great stuff.&lt;br /&gt;&lt;br /&gt;Eclipse can recompile each source file as soon as it's saved but, unfortunately the eclipse scala plugin for 2.8 (I tried both snapshot and -rc1) is not very stable and there are tons of issues which will be fixed soon, but I want to start to focus on scala and reduce the impact of immature tooling.&lt;br /&gt;&lt;br /&gt;So I had to delegate this continuous recompilation to command line tools and use my programmer's editor of choice.&lt;br /&gt;&lt;br /&gt;Both sbt and maven support continuous compilation. Sbt worked great out of box with "~ compile" but I preferred being able to use only maven to do the job.&lt;br /&gt;&lt;br /&gt;Maven scala:cc goal has some issues with the compilation daemon:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[INFO] [scala:cc {execution: default-cli}]&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] Checking for multiple versions of scala&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] use fsc for compilation&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] stop server(s)...&lt;/blockquote&gt;&lt;blockquote&gt;[No compilation server running.]&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] start server...&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] wait for files to compile...&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] /home/marko/tmp/scala/scalatest/src/main/scala:-1: info: compiling&lt;/blockquote&gt;&lt;div&gt;It turned out that it happens because there is an executable /usr/bin/fsc from the ubuntu scala 2.7.5 installation. If I remove that:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[INFO] [scala:cc {execution: default-cli}]&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] Checking for multiple versions of scala&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] use fsc for compilation&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] stop server(s)...&lt;/blockquote&gt;&lt;blockquote&gt;[No compilation server running.]&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] start server...&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] wait for files to compile...&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] /home/marko/tmp/scala/scalatest/src/main/scala:-1: info: compiling&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] Compiling 1 source files to /home/marko/tmp/scala/scalatest/target/classes at 1271863673692&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] Cannot start compilation daemon.&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] tried command: List(scala, scala.tools.nsc.CompileServer)&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] prepare-compile in 0 s&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] compile in 0 s&lt;/blockquote&gt;&lt;blockquote&gt;[INFO] wait for files to compile...&lt;/blockquote&gt;&lt;br /&gt;In the meantime I tried to start my own fsc daemon (see&amp;nbsp;&lt;a href="http://gist.github.com/373965"&gt;gist.github.com/373965&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;java -cp ... scala.tools.nsc.CompileServer&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;and it worked, and it's also incredibly fast at compiling (&lt;span class="Apple-style-span" style="color: #333333; font-family: monospace; font-size: 12px; white-space: pre;"&gt;mvn scala:cc -Dfsc=false &lt;/span&gt;on the other hand works but it's very slow, it takes 3-4 seconds to compile)&lt;br /&gt;&lt;br /&gt;So, basically all we need it provide an executable called "scala" which gets invoked by maven scala plugin with the&amp;nbsp;scala.tools.nsc.CompileServer, parameter:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gist.github.com/373981"&gt;gist.github.com/373981&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now maven scala:cc works fine, and spawns a compile server as needed.&lt;br /&gt;&lt;br /&gt;Next, I will try to do some mixed java/scala development, thrift stubs building, subprojects etc.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-7038354004223726270?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/7038354004223726270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/04/scala-28-maven-and-continuous.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/7038354004223726270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/7038354004223726270'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/04/scala-28-maven-and-continuous.html' title='Scala 2.8 Maven and continuous compilation'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8128534680626804659.post-7548943577398017233</id><published>2010-04-13T08:10:00.000-07:00</published><updated>2010-04-13T08:10:22.948-07:00</updated><title type='text'>reverse proxy overriding content-type</title><content type='html'>I had some links to images hosted on http servers which reported application/octet-stream instead of an 'image' mime type.&lt;br /&gt;&lt;br /&gt;My application relied on that and I had to find a quick way to fix this by putting a reverse proxy in front of that particular server and override the content type.&lt;br /&gt;&lt;br /&gt;I tried with no luck to do it with apache2 but it appears that there is no way to set the content-type response header after it's generated by the mod_proxy module.&lt;br /&gt;&lt;br /&gt;So I tried out nginx, but it turns out that even nginx cannot force headers, but only add new headers&lt;br /&gt;&lt;br /&gt;However the nginx docs point to a &lt;a href="http://wiki.nginx.org/NginxHttpHeadersMoreModule"&gt;3rd party module&lt;/a&gt;&amp;nbsp;. Unfortunately the ubuntu nginx distribution didn't have this module compiled in, so I had to recompile nginx with this module built in. It turned out to be a &lt;a href="http://wiki.nginx.org/NginxHttpHeadersMoreModule#Installation"&gt;simple operation.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I managed to reuse the same ubuntu nginx configuration files, by simply installing the custom nginx in /opt/nginx and symlinking ubuntu /etc/nginx to /opt/nginx/conf and changing the /etc/init.d/nginx script to point to /opt/nginx/sbin/nginx instead of /usr/sbin/nginx&lt;br /&gt;&lt;br /&gt;then I simply added this line in my 'server' section:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; more_set_headers 'Content-Type: image/jpeg';&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-7548943577398017233?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/7548943577398017233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/04/reverse-proxy-overriding-content-type.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/7548943577398017233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/7548943577398017233'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/04/reverse-proxy-overriding-content-type.html' title='reverse proxy overriding content-type'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-5441158435937094988</id><published>2010-03-24T09:11:00.000-07:00</published><updated>2010-04-21T08:41:44.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git ruby capistrano'/><title type='text'>Deploying a Git subdirectory in Capistrano</title><content type='html'>Many suggest applying a patch to capistrano but for me this isn't an option.&lt;br /&gt;&lt;br /&gt;I found this solution which works:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/29168/deploying-a-git-subdirectory-in-capistrano/2047574#2047574"&gt;stackoverflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perhaps this can be refactored in vendor plugin receipt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-5441158435937094988?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/5441158435937094988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/03/deploying-git-subdirectory-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/5441158435937094988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/5441158435937094988'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/03/deploying-git-subdirectory-in.html' title='Deploying a Git subdirectory in Capistrano'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-209031383715091500</id><published>2010-03-15T07:26:00.000-07:00</published><updated>2010-04-21T08:41:30.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soap interoperability'/><title type='text'>apache CXF and .NET</title><content type='html'>I had some troubles finding out why .NET (3.5 RC1) svcutil wasn't able to invoke my java CXF web service. Hope this may help you.&lt;br /&gt;&lt;br /&gt;The error was:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;exception = {"There was an error reflecting 'return'."} InnerException = {"The Form property may not be 'Unqualified' when an explicit Namespace property is present."}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It turned out that (besides mandatory namespaces) it was also caused by the fact svcutil doesn't like encoding arrays/lists as:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;xs:element form="qualified" maxoccurs="unbounded" minoccurs="0" name="linkedGroups" type="tns:group"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;but it requires a nested element:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;xs:element form="qualified" minOccurs="0" name="linkedGroups"&amp;gt;&lt;br /&gt;  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;     &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;        &amp;lt;xs:element form="qualified" maxOccurs="unbounded" minOccurs="0" name="item" type="tns:group"/&amp;gt;&lt;br /&gt;     &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This can be accomplished with the following jaxws annotations:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@XmlElementWrapper(namespace = "http://rmi.r2d2.dnetlib.eu/", name = "linkedGroups")&lt;br /&gt;@XmlElement(namespace = "http://rmi.r2d2.dnetlib.eu/", name = "item")&lt;br /&gt;public List&amp;lt;Profile&amp;gt; getLinkedGroups() {&lt;br /&gt;  return linkedGroups;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This blog helped me &lt;a href="http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html"&gt;http://kjellsj.blogspot.com/2008/03/wcf-datacontractserializer-schema-rules.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-209031383715091500?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/209031383715091500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/03/apache-cxf-and-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/209031383715091500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/209031383715091500'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/03/apache-cxf-and-net.html' title='apache CXF and .NET'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-3257969170769414269</id><published>2010-03-01T08:10:00.000-08:00</published><updated>2010-04-21T08:41:18.813-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>lazy clojure couchdb</title><content type='html'>lazy paged clojure couch db interface:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gist.github.com/318486"&gt;http://gist.github.com/318486&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/318486.js?file=gistfile1.clj"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-3257969170769414269?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/3257969170769414269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/03/lazy-clojure-couchdb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3257969170769414269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3257969170769414269'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/03/lazy-clojure-couchdb.html' title='lazy clojure couchdb'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-3871339471575103659</id><published>2010-01-26T09:08:00.000-08:00</published><updated>2010-01-26T09:08:00.404-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>Clojure lazy sequence</title><content type='html'>I want to share my experience with lazy chunked sequences of clojure 1.1 and threads.&lt;br /&gt;&lt;br /&gt;I wrote some code that used 'futures' to execute parallel IO, potentially in a large number of background threads (about 200).&lt;br /&gt;&lt;br /&gt;I noticed that my code wasn't behaving like I expected and I was wondering if clojure executed the futures in some unbounded thread pool, or if it had some fixed maximum. So I wanted to try it out: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(map deref (map #(future-call (fn [] (Thread/sleep 1000) %)) (range 20))) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;this actually created 20 threads (I saw it with jconsole), and returned to the REPL within 1 second. So far so good. However:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(map deref (map #(future (Thread/sleep 1000) %) (range 200))) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;this took about 6 times more to execute. I also noticed a strange behaviour in thread creation. New threads were only created in ... chunks of 32....&lt;br /&gt;&lt;br /&gt;Well now it seems obvious for me, but I didn't realize that I stuck upon the new clojure chunked lazy evaluation feature. The correct code is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(map deref (doall (map #(future (Thread/sleep 1000) %) (range 200))))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Without the doall, only the first 32 futures are evaluated and actually submitted to the cachingThreadExecutor that sits behind the "future-call" core function.&lt;br /&gt;&lt;br /&gt;In order to avoid this kind of errors in future, I created a simple helper:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(defn future-map [f seq]&lt;br /&gt;  (doall (map #(future-call (fn [] (f %))) seq)))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to be used as:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; (future-map do-something asequence)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This sounds like a 'pmap' parallel map, but AFAIK the 'pmap' stuff was intended as a performance enhancement, and as such it tries to use a reasonable number of threads in order to exploit the available CPUs, a different kind of requirement from what I needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-3871339471575103659?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/3871339471575103659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/01/clojure-lazy-sequence.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3871339471575103659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/3871339471575103659'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/01/clojure-lazy-sequence.html' title='Clojure lazy sequence'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</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-8128534680626804659.post-4543216408661983686</id><published>2010-01-08T09:43:00.000-08:00</published><updated>2010-01-26T09:08:36.140-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><title type='text'>clarsec</title><content type='html'>I attempted to port Haskell monadic monadic parsing library Parsec to clojure&lt;br /&gt;&lt;a href="http://github.com/mmikulicic/clarsec"&gt;&lt;br /&gt;http://github.com/mmikulicic/clarsec&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;for now it's very basic but I already for work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8128534680626804659-4543216408661983686?l=www.coldcode.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.coldcode.net/feeds/4543216408661983686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.coldcode.net/2010/01/clarsec.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/4543216408661983686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8128534680626804659/posts/default/4543216408661983686'/><link rel='alternate' type='text/html' href='http://www.coldcode.net/2010/01/clarsec.html' title='clarsec'/><author><name>ithkuil</name><uri>http://www.blogger.com/profile/06783319434070283386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
