-
Using Ruby Subversion Bindings to Create Repositories
Subversion has a default Web UI that is served up by Apache if you run Subversion that way. It is pretty boring and read-only. Then there are things like WebSVN that make it less boring, but still read-only. I got curious about what it would take to make something even...
-
DRY your CruiseControl.NET Configuration
Don't Repeat Yourself (DRY) is one of the principles of good software development. The idea is that there should ideally be one and only one "source of knowledge" for a particular fact or calculation in a system. Basically it comes down to not copying-and-pasting code around or duplicating code if...
-
StringBuilder and my Biggest Pet Peeve
What You Should Know About Strings In both Java and .NET (and other languages) String objects are immutable. They don't change. Period. If you "change" a String, it creates a new String. That includes String concatenation using a + // One string created "foo" String foo = "foo"; // foo...
-
MSBuild Task for PartCover
I continue to lament the dearth of option for Test Coverage in the .NET world. In the Java world you have open source tools like Emma and Cobertura that are widely used and supported (and many more) as well as proprietary tools like Clover available. .NET we have an open...
-
Tracking Project Metrics
How do you track the health of your software projects? Ideally you could come up with few, easy to collect metrics and have your Continuous Integration system generate the information and maybe even graph it over time. What we track is going to be based on a set of beliefs...
-
Register and Unregister COM DLL from .NET Code
Background The command regsvr32 is used to register a native, unmanaged code DLL so that it is available via COM. With a registered DLL you can use COM Interop to call that code from .NET Managed code. Regsvr32 is unmanaged code and as such makes use of some existing functions...
-
Windows Subversion Maintenance Scripts
Previously I wrote about the Subversion Maintenance Scripts that I use for doing things like backups and upgrades. They were bash shell scripts that automated dealing with multiple Subversion repositories. The secret was that those guys were being run using Cygwin on Windows. Recently we got a new, more powerful...
-
Swapping Values Without a Temp Variable
It's been a long time since I've done any C programming (the only C I ever really did was in school 10+ years ago) and I've never done it outside of school. I figure since I look at and study languages that are pretty esoteric, it's only fair to throw...
-
Scheme/HtDP Unit Testing Functions
How to Design Programs (HtDP) provides a series of unit testing functions that allow you to test the output of any kind of function. The current version talks about testing your code, but doesn't offer a lot of guidance into how to do that. Everything you need is there though,...
-
Studying HtDP
I haven't posted in a while, but I've recently been studying How to Design Programs (HtDP). It's really a book about teaching beginners how to program by following a series of recipes that tell you how to identify and solve different classes of problems. The techniques are taught in a...
-
Grails Testing Acegi Security
Almost every web application I create needs some form of user authentication and authorization. Grails provides a great plugin system that allows you to extend the base framework to provide these kinds of features. My current favorite security plugin for Grails is the Acegi Security Plugin. It's built using the...
-
Grails Validations Based on Related Objects
Grails has a rich set of tools for performing validations of your domain objects. There are quite a few built in validations that you can use. These mainly resolve around validating single properties within a single domain object. It also supports things like validating the sizes of dependent collections. Sometimes...
-
Mobile Free (Partial Solution - Calendar Edition)
The holy grail is to have a computer at home, a computer at work and a computer (or a phone) in your pocket. Those things have calendars and contacts and email on them. You might use them at different times, but in the end, you want to know what you...
-
Erlang Examples: GUIs and Error Handling
This is part of a series on the Erlang Exercises which is a great set of programming problems that challenge you to implement solutions to some common Erlang problems. I'm going to share some of my solutions to these problems. Robustness in Erlang, and use of a graphics package Excercise:...
-
Capistrano and Ferret DRB
This is a bit of a followup to my previous post on Capistrano with Git and Passenger. I decided to use Ferret via the acts_as_ferret (AAF) plugin. Ferret is a full-text search inspired by Apache's Lucene but written in Ruby. Basically Ferret and Lucene keep a full-text index outside of...
-
Capistrano Deploy with Git and Passenger
One of the great things about Rails and its community is that they are very lazy. Lazy in the good way of not wanting to do boring, repetitive, error prone things manually. They metaprogram and they automate. A great example of this is Capistrano. Capistrano allows you to deploy Rails...
-
Package Grails DBMigrations in your WAR File
The Grails DBMigrate Plugin is a handy way to give you control over the generation of your database if you don't want Grails to auto-munge your schema. It works fine in development, but when you create a WAR for deployment on another machine the Migrations are not packaged in the...
-
Erlang Examples: Talk with Erlang
This is part of a series on the Erlang Exercises which is a great set of programming problems that challenge you to implement solutions to some common Erlang problems. I'm going to share some of my solutions to these problems. Implementing Talk with Distributed Erlang Make a simple Talk program...
-
Erlang Examples: Talk with Sockets
This is part of a series on the Erlang Exercises which is a great set of programming problems that challenge you to implement solutions to some common Erlang problems. I'm going to share some of my solutions to these problems. Erlang using UNIX sockets Do you want to talk with...
-
Erlang Example: Star Messages
This is part of a series on the Erlang Exercises which is a great set of programming problems that challenge you to implement solutions to some common Erlang problems. I'm going to share some of my solutions to these problems. Interaction between processes, Concurrency 3) Write a function which starts...
-
Erlang Example: Min and Max Element of a List
This is part of a series on the Erlang Exercises which is a great set of programming problems that challenge you to implement solutions to some common Erlang problems. I'm going to share some of my solutions to these problems. Simple recursive programs 1. Write a function lists1:min(L) which returns...
-
Erlang Exercises: Ring Messages
Erlang Exercises has a great little series of programming problems that challenge you to implement solutions to some common Erlang problems. It's a great way to learn the language. I'm going to share some of my solutions to these problems. Maybe for some discussion, maybe for some feedback from some...
-
Erlang First Post
Some linguists and philosophers posit the idea that you can not have a thought for which you do not have language. "The limits of my language mean the limits of my world." -- Ludwig Wittgenstein I've started looking at Erlang a bit. Erlang is a functional programming language that is...
-
The Best Reason for REST
REST is a popular means of implementing Service Oriented Architectures (SOA) as well as merely providing simple remote APIs for interacting with systems. REST is a constraint based architecture built on HTTP, the foundational protocol of the Web. That foundation, its simplicity and the constraints it is built upon are...
-
Grails Philosophy
There was a post on the Grails Mailing list today asking about the philosophy of Grails. This is my response: I think I might have ripped this off from somewhere, but fundamentally there are 4 questions to answer for a basic application like this: How do you display data to...
- Newer posts Older posts