Clojure's standard library provides a lot of functionality, more functionality than I can easily remember by taking a quick glance at it. When I first started learning Clojure I used to read the api docs, hoping that when I needed something I'd easily be able to remember it. For some ...
If you've written a fair amount of Clojure code and aren't familiar with clojure.set, then chances are you've probably reinvented a few functions that are already available in the standard library. In this blog post I'll give a few examples of commonly written code, and I'll show the ...
I use multiple assertions per test, and here's why: 1. I'm asserting behavior, not individual lines of code. 2. I've found it rare that there are two different errors in one test (more likely is that one error causes multiple tests to fail). When there are two different errors in one ...
Aman King left the following comment:I've always liked Ruby's open class feature but have also wondered how do you keep track of all the changes made to the class definition during runtime? ... There isn't an easy way (that I know of) out of the box to know what files made what change...
Every developer, at some point in their career, will find themselves looking for some information on a Linux* box. I don't claim to be an expert, in fact, I claim to be very under-skilled when it comes to linux command line mastery. However, with the following 8 commands I can get pre...
Every developer, at some point in their career, will find themselves looking for some information on a Linux* box. I don't claim to be an expert, in fact, I claim to be very under-skilled when it comes to linux command line mastery. However, with the following 8 commands I can get pre...
I love the value that method_missing provides; unfortunately, sometimes I get into trouble when I abuse the power Matz has bestowed upon me. If you've done much work with method_missing the following error message probably isn't foreign to you.SystemStackError: stack level too deep It...
Trust plays a very important role at speakerconf. speakerconf is known as a place where you can be honest without fear of repercussions. Every year we have several presentations that are confidential, and those are often some of the most interesting presentations. Josh and I have made...
ezmobius, deciding not to use define_method because it is 3 times slower than def seems like premature optimisation to me. I can't help but feel that in (say) a web application, the effect that define_method will have on performance will be negligible, and that areas to focus on with ...
Recently I was looking at creating a patch for Mocha that would allow you to specify a class as an argument. The feature was added to allow you to specify that an argument can be any instance of the class specified.object.expects(:do_this).with(Fixnum, true, 99) object.do_this(2, true...
Every year it seems that someone is disappointed (or even insulted) that they didn't receive an invite to speakerconf . If you haven't gotten an invite at this point, contrary to popular belief, it's not because Josh and I hate you. There's actually very little magic that goes into re...
I've been blogging since 2005, using various tools for publishing readable code. Originally you'd just put code out there, no colors, just a pre tag and some indention. Then 'export to html' became pretty standard in various editors, and everyone's life got better. These days, people ...
Clojure stacktraces are not incredibly user friendly. Once I got used to the status quo, I forgot how much noise lives within a stacktrace; however, every so often a Clojure beginner will remind the community that stacktraces are a bit convoluted. You can blame the JWM, lack of priori...
Clojure stacktraces are not incredibly user friendly. Once I got used to the status quo, I forgot how much noise lives within a stacktrace; however, every so often a Clojure beginner will remind the community that stacktraces are a bit convoluted. You can blame the JWM, lack of priori...
About a year ago I got a phone call asking if I wanted to join another team at DRW . The team supports a (primarily) Java application, but the performance requirements would also allow it to be written in a higher level language. I'd been writing Clojure (basically) full-time at that ...
is a powerful tool. I use the REPL extensively in development, and I recently added a web REPL to each of our production applications. Context A production REPL is not for the faint of heart. I wouldn't add a REPL to production in 95% of the projects I've been a part of; however, I'm ...
is a powerful tool. I use the REPL extensively in development, and I recently added a web REPL to each of our production applications. Context A production REPL is not for the faint of heart. I wouldn't add a REPL to production in 95% of the projects I've been a part of; however, I'm ...
Amanda Laucher recently queried the twitterverse on the topic of team size. In my opinion, my last project team was "too large". This blog entry will focus on the things that happened that drove me to that conclusion. note: I was the only person on the team who believed it was too lar...
Amanda Laucher recently queried the twitterverse on the topic of team size. In my opinion, my last project team was "too large". This blog entry will focus on the things that happened that drove me to that conclusion. note: I was the only person on the team who believed it was too lar...
About 5 years ago I expressed an idea to Josh Graham.Let's take the parts of traditional conferences that the presenters like the most, and make that an entire conference. Specifically, we should have plenty of discussion time with drinks available & we should have group dinners every...
Being a consultant, I'm generally at the mercy of whatever source control system my current client is using. Luckily, Subversion has been the version control choice for every client I've worked for in the past 3 years. A friend of mine, Kurt Schrader, recently posted The Power of Git:...
The real stumbling block is that Java class methods are totally different things from Ruby "class" methods, so different that applying Java rules of thumb to Ruby just isn't even relevant. If you can get a Java programmer to see the difference in what classes are, the class methods st...
Trust plays a very important role at speakerconf. speakerconf is known as a place where you can be honest without fear of repercussions. Every year we have several presentations that are confidential, and those are often some of the most interesting presentations. Josh and I have made...
I was recently chatting to some friends about all the apprenticeship experiments going on and (name withheld to protect the innocent) lamented:So, what happens when they quit that first job (or worse, get laid-off) and their only skill is writing a Rails app? I know what happens. It h...
Convincing 20 industry leaders to set aside 4-5 weekdays to come to a conference is not an easy thing, especially when said conference is also very hard to describe to the person (or people) who are approving the time off, travel, & expenses. With this in mind, Josh and I designed spe...
The 'name' function is a clojure function that returns the string for a keyword, symbol, or string. name - function Usage: (name x) Returns the name String of a string, symbol or keyword. At first glace this might not seem that interesting; however, it's good to know 'name' if you've ...
I have a personal hatred for weekend conferences*. To me, a weekend conference ensures that I'll be "working" for 12 straight days. I understand that opinion isn't universal. Some people have problems getting time "off" to attend conferences. These situations feel like a fundamental m...
Speaking at speakerconf is nothing like speaking at a traditional conference. It took us a few years to tweak our ideas around presentations - and this blog post is about what we've come to consider 'the speakerconf way' (with respect to speaking) There are no abstracts or pre-announc...
At this point, speakerconf has run 5 times in 4 years - in Aruba and Italy. Josh and I are happy with what we've created, and a few follow up entires will list the attributes of speakerconf that make it a unique and successful event. This post, however, should serve as a quick view in...