I finally got fed up with Blogger, and am moving this blog to live on Wordpress hosted off of scripts.mit.edu. In the process of converting everything over and setting up Wordpress I’ve decided I hate it, but hopefully I hate it less than I hate Blogger. We’ll see. I’ve also changed the URL to this blog from http://nelhage.com/blog to http://blog.nelhage.com,…
12 Sept 2008
10 Sept 2008
"And as for this non-college bullshit I got two words for that: learn to fuckin' type" — Mr. Pink This is another one I've wanted to write forever. Man, I've tried a bunch of times. No ruck. Not Rucky. Once again I'm stuck feeling so strongly about something that I'm tripping over myself trying to get my point across. So!…
7 Sept 2008
Like most people who started with Rails a while back, I first loved Rails fixtures and ended up hating them (slow, a pain to maintain etc…). I went through different experiments, trying different existing libs, writing my own solutions etc… I wasn’t quite satisfied until I found factory_girl from thoughtbot. You might not feel the need for a decent fixtures…
4 Sept 2008
What does “favour composition over inheritance” mean, and why is it a good thing to do? Object composition and inheritance are two techniques for reusing functionality in object-oriented systems. In general, object composition should be favoured over inheritance. It promotes smaller, more focused classes and smaller inheritance hierarchies. Troels Knak-Nielsen wrote: Class inheritance is a […]
3 Sept 2008
Whatever you write today will become legacy. Legacy code is often written by people who thought they got it nailed, and later realize that the application is legacy. Not because of the application itself, but because of changes in themselves. “What the hell was I thinking?” Code is always the same, it’s your perception of […]
We have been busy, mostly fixing bugs for stability, but also winning a bit more performance, since TraceMonkey landed on mozilla-central, from which Firefox 3.1 alpha-stage nightly builds are built. Tonight’s builds include a fix for the bug that ilooped a SunSpider test (my apologies to those of you who suffered that bug’s bite). But … Continue reading "TraceMonkey Update"
27 Aug 2008
Wow, it’s been a while since I blogged. With all the cool kids saying that spending time reading RSS feeds is overrated (see Defunkt’s keynote for instance) I even wonder if people will ever read this post! Anyways, I have been quite busy preparing courses for classes I gave to a bunch a great Engineers at one of the Fortune…
25 Aug 2008
For HR and legal purposes, most development companies classify Software Engineers into ranks from 1 to 4 (or 5). The higher the rank, the higher the responsibilities, expectations, independence and pay grade. To cut it as an interviewer and manager, you’ll need to classify people accurately with a minimum amount of direct personal exposure: a […]
This tutorial by Charitha Kankanamge takes you through different approaches to testing Web services. There are multiple approaches to invoking Web services, regardless of the platform or technology used to built such services. If a service consumer has access to the contract (WSDL) file of a given Web service, then, that particular service can be […]
Spice up your presentations with Keithnote: Where improvisation meets automation!
23 Aug 2008
I’m extremely pleased to announce the launch of TraceMonkey, an evolution of Firefox’s SpiderMonkey JavaScript engine for Firefox 3.1 that uses a new kind of Just-In-Time (JIT) compiler to boost JS performance by an order of magnitude or more. Results Let’s cut straight to the charts. Here are the popular SunSpider macro- and micro-benchmarks average … Continue reading "TraceMonkey: JavaScript…
22 Aug 2008
I’ve been using wpa_supplicant to manage wifi on my Ubuntu laptop for a while, and have found that it’s pretty close to what I want for managing wireless — closer than anything else I’ve found, at least. I figured I should document my setup and experiences. Some Background You probably all know just how much wireless on Linux can be…
20 Aug 2008
Most projects carry some amount of legacy code. You can’t work very fast with a legacy code base, but you can speed it up if you establish a strategy to deal with your existing code and mitigate risk as new development goes forward. What is Legacy Code? Legacy code is code from the past, maintained […]
16 Aug 2008
"Your go-to MySQL command cheat sheet for quick reference."
12 Aug 2008
Some CEO emailed me the other day. I don't remember who it was; people mail me all the time about their blah blah yawn product service thingy, and on the rare occasions I bother to read mail from strangers, I don't usually remember anything about the email, even if I respond to it. I can remember broad categories of questions…
4 Aug 2008
The includes of the system map out the dependencies of the system, which files depend on which, which subsystem depends on which. When working with a system, it’s always useful to map out the dependencies before hand. Here are some examples: WordPress 2.2.1 http://wordpress.org MediaWiki 1.12 http://www.mediawiki.org/ phpBB 3.0 http://www.phpbb.com/ phpMyAdmin 2.9.1.1 http://www.phpmyadmin.net/ Symfony 1.1 […]
31 Jul 2008
The inside details of the software development cycle: Programmer produces code he believes is bug-free. Product is tested. 20 bugs are found. Programmer fixes 10 of the bugs and explains to the testing department that the other 10 aren’t really bugs. Testing department finds that five of the fixes didn’t work and discovers 15 new […]
30 Jul 2008
Programmers are a great example of thinking outside the box because, well, programmers can actually create the box. If you’ve ever spent more than two minutes talking with a programmer about his work, you’ll find out very quickly that programmers have a passion for what they do. They eat, sleep and breathe programming. Read more: […]
25 Jul 2008
In this post, Alex Iskold discusses the top 10 concepts software engineers should know. A successful software engineer knows and uses design patterns, actively refactors code, writes unit tests and religiously seeks simplicity. Beyond the basic methods, there are concepts that good software engineers know about. These transcend programming languages and projects – they are […]
21 Jul 2008
I needed to automate the task of synchronizing files from one server to another, so I wrote a Phing task. Finally today I found some time to finish writing the documentation. Overview FileSyncTask is a Phing extension for Unix systems which synchronizes files and directories from one location to another while minimizing data transfer. FileSyncTask […]
16 Jul 2008
VoIP It's Cheap, It's Chic, It's Your New Communication Clique
13 Jul 2008
Traditionally, there are two fundamental approaches when it comes to organising your development teams: the Architecture-Oriented approach and the Feature-Oriented approach. The first privileges teams that focus on the different architectural layers or components, whereas the second prefers to organise teams around deliverable application features. How do you organise your development teams?
12 Jul 2008
Django has not been updated for a long time. The most current release, 0.96, was released in March 2007. This is a very long time when you look at the roadmap of other frameworks. But guess what, all that is about to change, because Django 1.0 is only two months away! Over the next six […]
9 Jul 2008
The “find” command is one of the most powerful and useful Unix commands, you can use it to locate files, and then perform some type of action on the files after they’ve been located. With this capability, you can locate files using powerful search criteria, and then run any Unix command you want on the […]
4 Jul 2008
Google announced the release of ratproxy, a passive web application security assessment tool that they’ve been using internally at Google. This utility, developed by their information security engineering team, is designed to transparently analyse legitimate, browser-driven interactions with a tested web property and automatically pinpoint, annotate, and prioritize potential flaws or areas of concern. The […]
30 Jun 2008
Flickr Platform PHP MySQL Shards Memcached for a caching layer. Squid in reverse-proxy for html and images. Linux (RedHat) Smarty for templating Perl PEAR for XML and Email parsing ImageMagick, for image processing Java, for the node service Apache SystemImager for deployment Ganglia for distributed system monitoring Subcon stores essential system configuration files in a […]
28 Jun 2008
MVC is about loose-coupling, and Modular Programming takes that concept to the extreme. A modular application can dynamically load and unload modules at runtime, completely separate applications in their own right, which interact with the main application and other modules to perform some set of tasks. In this article you will presented with a different […]
Karl Seguin has released the official, and completely free, Foundations of Programming eBook. Although simplistic, every programming decision I make is largely based on maintainability. Maintainability is the cornerstone of enterprise development. Frequent readers are likely sick of hearing about it, but there’s a good reason we talk about maintainability so often – it’s the […]
pChart is a PHP class oriented framework designed to create aliased charts. Data can be retrieved from SQL queries, CSV files, or manually provided. To have a complete overview of what pChart can do for you, we invite you to take a look on the on-line documentation which is trying to show all basic & […]
27 Jun 2008
Github, probably the most famous social code hosting service just redesigned their homepage and are now featuring hosted projects. I got a very good surprise when Takeo from Powerset & Stafftool hall of fame mentioned to me that Github picked one of my gems as the first featured project! By the way, Takeo is also a Googlecharts contributor (+ a…
25 Jun 2008
Drag and drop widgets to build Web applications, in minutes, with minimal code. WaveMaker Visual Ajax Studio is an easy-to-use visual builder that enables the drag & drop assembly of scalable, web-applications using Ajax widgets, web services and databases. WaveMaker Studio will look and feel especially familiar to client/server developers who are used to working […]
MVC is about loose-coupling, and Modular Programming takes that concept to the extreme. A modular application can dynamically load and unload modules at runtime, completely separate applications in their own right, which interact with the main application and other modules to perform some set of tasks This document (PDF) discusses the classes and interfaces of […]
22 Jun 2008
Phing allows you to use SQL to define changes to your database schema, making it possible to use a version control system to keep things synchronized with the actual code. A common way to automate development and deployment tasks is by writing shell scripts, however, Phing provides some advantages over shell scripts for task automation. […]
18 Jun 2008
In a previous article I took an example of bad metaprogramming and I pushed people to think twice before using metaprogramming. My main points were that: you might make your code way slower if you don’t know what you are doing readability might drop considerably maintainability can become an issue People left some very good comments about how to write…
I realized I haven’t updated this blog in a while. Here is a quick update on what’s happened and on things to come: RailsConf 08. Great conference, probably my last Rails Conf though. I’ll be in Orlando for Ruby Conf 08 and I’ll focus on 1 or 2 local conferences (probably mountain west and another one). MerbCamp 08 in San…
17 Jun 2008
When it comes to testing, Cedric Beust (co-author of “Next Generation Java Testing”) lives by the following rules of thumb: “Tests first” or “tests last” is unimportant as long as there are tests. Try to think about testing as early as possible in your development process. Don’t listen to people who tell you to write […]
The best code is very shy. Like a four-year old hiding behind a mothers skirt, code should not reveal too much of itself and should not be too nosy into others affairs. But you might find that your shy code grows up too fast, shedding its demure shyness in favor of wild promiscuity. When code […]
The software industry is currently in the middle of a paradigm shift. Applications are increasingly written for the Web rather than for any specific type of an operating system, computer or device. Unfortunately, the technologies used for Web application development today violate well-known software engineering principles. Furthermore, they have reintroduced problems that had already been […]
Disclaimer: I do not speak for Google! These are my own views and opinions, and are not endorsed in any way by my employer, nor anyone else, for that matter. Everyone knows and quotes Joel's old chestnut, "Smart, and Gets Things Done." It was a blog, then a book, and now it's an aphorism. People quote Joel's Proverb all the…
16 Jun 2008
Every getter and setter in your code represents a failure to encapsulate and creates unnecessary coupling. A profusion of getters and setters (also referred to as accessors, accessor methods, and properties) is a sign of a poorly designed set of classes. “Getters and setters should be avoided because they break the encapsulation OOP offers”, says […]
14 Jun 2008
I will once again plagiarize myself by transcribing a talk I gave. First: be warned! I offer this gesture of respect to you — yes, you! — when I say that this is at least 20 minutes of reading. This is long even for me. If you're surfing reddit, gobbling up little information snacks, then it's best to think of…
12 Jun 2008
Optimization is a complex task because ultimately it requires understanding of the entire system to be optimized. Although it may be possible to perform some local optimizations with little knowledge of your system or application, the more optimal you want your system to become, the more you must know about it. The following 10 articles […]
8 Jun 2008
Neil Grab wrote: One of the Zend Framework’s strongest drawing cards, as I see it, is its loosely-coupled structure. The name Zend Framework may be a misnomer, in fact, as ZF is more a set of reusable libraries than an actual application framework. I won’t go into detail about the advantages of loose coupling, but […]
7 Jun 2008
Jason McDonald posted some quick reference diagrams for the Gang of Four design patterns on his blog. Each section has the name of the pattern, a quick description, and the class diagram for the pattern. Definitely a handy thing to have around. Design Patterns Quick Reference (PDF)
6 Jun 2008
…has become the world’s most popular programming language. This is the story of JavaScript Most languages die in obscurity. Only a few are able to build a following beyond a single project or company. And only a very small number of languages become important. There are many things that a programmer must consider when selecting […]
5 Jun 2008
Most digital data we deal with in the real world is not inherently relational in nature, yet most web applications use a SQL RDBMS for data persistence. CouchDB is fundamentally a different type of database, storing data as independent “Document” objects. They can be easily replicated to other instances of CouchDB for distributed and offline […]
31 May 2008
This is an archive of some posts in a forum thread titled "Beware of Bioware" in a now defunct forum, with comments from that forum as well as blog comments from a now defunct blog that archived that made the first attempt to archive this content. The original posts were deleted shortly after being posted, replaced with "big scary company…
30 May 2008
I'm just saying
22 May 2008
From managing databases to shopping, writing blogs to sending emails. Ten years of passion, great software architectures, team work and revolutionary ideas. Here are the most influential open-source PHP applications to date: 1998 phpMyAdmin phpMyAdmin is a tool written in PHP intended to handle the administration of MySQL over the Web. Currently it can create […]
20 May 2008
"From hosted services to self-hosted solutions: A geek's guide to digital independence."
18 May 2008
Let be a curve and be an element of the set of all smooth vector fields on . Let re-parameterize the curve. Then and . Thus which is smooth since the composition of smooth functions is a smooth function and therefore . By definition So Also by definition So, using the chain rule Which gives … Continue reading (Induced) Covariant…
17 May 2008
One of the reasons is that UML attempts to become a programming language. By aiming to be able to generate full code actually UML tries to be a programming language. In my mind there is a big problem with a general purpose graphical programming language. In human history the written form of all languages evolved […]
15 May 2008
Ajaxterm offers a simple solution to those who want to run a terminal over the Web for performing remote administration tasks. Vincent Danen tells you how to get it and configure it for Apache.
12 May 2008
Nothing to do with differential geometry but there was a question on the haskell-cafe mailing list asking for “a proof that initial algebras & final coalgebras of a CPO coincide”. I presume that means a CPO-category. A category is a CPO-category iff There is a terminator, 1. Each hom-set, , is a CPO with a … Continue reading Isomorphic Types
Some guys at Stanford invited me to speak at their EE Computer Systems Colloquium last week. Pretty cool, eh? It was quite an honor. I wound up giving a talk on dynamic languages: the tools, the performance, the history, the religion, everything. It was a lot of fun, and it went over surprisingly well, all things considered. They've uploaded the…
11 May 2008
A programmer cannot be Agile if the person that manages him is not Agile as well, and vice versa. That’s why Scrum focuses on management and organization practices while XP focuses mostly on actual programming practices, and that’s why they work so well together. This excellent free book aims to give you a head start […]
7 May 2008
What does Google, Sun Microsystems, HP, Amazon, Oracle and Motorola have in common? They all use ScrumWorks, an Agile process automation tool that enables teams to self-organize and maximize productivity. Sun Microsystems: “The best compliment I can give to ScrumWorks is that my staff doesn’t think about it. It is intuitive and respectful of the […]
5 May 2008
4 May 2008
Ruby is sexy, Ruby is cool and its metaprogramming potential offers some really cook features. However you might not realize that your cleverness is slowing down your code. Today I was working on cleaning up merb_helper a Merb plugin that brings a lot of the stuff Rails developers are used to. In Merb we aim for speed and try to…
2 May 2008
Define . This is well defined since if is another bump function then and reversing and gives
29 Apr 2008
So, there you are, asking yourself – “How the hell am I going to deploy my next application across multiple servers?”. First, you write some shell scripts. One that checks out the project from the repository and the other one that runs all the tests. Then, you master the synchronization technique and realise that combined […]
28 Apr 2008
"We're going to get lynched, aren't we?" — Phouchg And you thought I'd given up on controversial blogs. Hah! Preamble This must be said: Jamie Zawinski is a hero. A living legend. A major powerhouse programmer who, among his many other accomplishments, wrote the original Netscape Navigator and the original XEmacs. A guy who can use the term "downward funargs"…
27 Apr 2008
Just a reminder, this coming week end, San Diego presents BarCamp for the third time. This time, the chosen Venue is Microsoft in La Jolla I was thinking about preparing 2 intro talks, one on Merb and one on Unobtrusive Javascript (jQuery, Prototype + LowPro etc…), then we’ll see the crowd and what people are interested in. Feel free to…
26 Apr 2008
Let and be sub-manifolds of . Then and there are charts: for about adapted to for about adpapted to such that Now let be the injection map. Consider the commutative diagram below. Then which is smooth. Hence is smooth.
24 Apr 2008
I’m a big fan of PHP_CodeSniffer and I think it’s a great development tool, it ensures that you write code that is easy to read and maintain. But, what about making sure that the code you write is secure and doesn’t have any vulnerabilities? Right, there’s another tool for that… PHP Security Scanner is a […]
Web security is possibly today’s most overlooked aspect of securing the enterprise and should be a priority in any organization. Recent research shows that 75% of internet attacks are done at web application level. Web application security scanners ensure website security by automatically checking for SQL injection, Cross site scripting and other vulnerabilities. There are […]
23 Apr 2008
A twelve-year-old can build a nice Web application using the tools that came standard with any Linux or Windows machine. Thus it is worth asking ourselves, “What is challenging, interesting, and inspiring about Web-based applications?” This textbook written by Eve Andersson, Philip Greenspun, and Andrew Grumet for the MIT course “Software Engineering for Internet Applications”, […]
22 Apr 2008
CouchDB was accepted for incubation at the Apache Software Foundation a couple of months ago. My congrats to the development team! It’s a very interesting and challenging project, and the fact that it was accepted for incubation will definitely get the team exited. What is CouchDB? A document database server, accessible via a RESTful JSON […]
Let be a vector space with linear isomorphisms to as charts. Let be a curve . Then and . But is linear (see the exercise) and so as was required to be shown.
17 Apr 2008
Let be integral curves in a manifold then is closed. Proof: Let be have a limit in . Let be a chart then converges to by continuity. But also converges to . Hence and so . Thus is closed.
16 Apr 2008
Ask yourself: What are my primary concerns and interests when making software? It is by answering this question that you’ll be able to define the distinction between software architecture and software development An A-Z Guide to Being an Architect
As you’ve probably heard, Rails now moved to its own GitHub repo. If, like me you were a heavy piston user, you are wondering how you will be able to do the same thing if you switch to git. First off, you need to know that Piston will soon support git. As a matter a fact it already does. At…
15 Apr 2008
THIS CONTENT is OUTDATED and can’t be used with Merb 1.0 or more recent Merb doesn’t really have a core team per say. It’s actually managed the same way Rubinius is managed meaning that few people such as Ezra, Wycats and Ivey lead the development while many other contributors have commit rights to the different repos. Patches are handled via…
14 Apr 2008
One of my favourites ZendCon sessions, presented by Shahar Evron: “Building Scalable Development Environments”. Related links: Slides (PDF) Podcast (MP3)
10 Apr 2008
The first in a two-part series that appeared in The Rational Edge, this article presents a case study that analyses the requirements captured in use cases and transforms them into implementable representations that can be directly coded. An excellent article written by Gary Evans. Getting from use cases to code: Part 1: Use-Case Analysis Getting […]
If you follow my blog, you already know what Merb is. I love Rails and I truly believe it has changed web development. At least it has changed the way I do web development. But Merb looks slick, apparently is way faster than Rails, and has less “fluff” and less magic. Now that we are getting really close to a…
8 Apr 2008
_* this content is now outdated and only applied to Merb 0.9_* I the previous post I covered few useful tips for Merb 0.9. The good news is that Merb should get its wiki setup over the week end! Here is another batch of hopefully useful tips: In init.rb, you can define a dependency and specify a version number: dependency…
6 Apr 2008
Application usability is enhanced when users know how to operate the UI and it guides them through the workflow. Violating common guidelines prevents both. Once again usability expert Jakob Nielsen writes about common mistakes made by designers, front-end developers and information architects when designing user interfaces. Top-10 Application-Design Mistakes
5 Apr 2008
_* this content is now outdated and only applied to Merb 0.9_* I’m working on a post reporting a recent benchmark I did comparing Rails vs Merb performances for a client’s app. In the meantime, here are few tricks you might need when using Merb 0.9x In the init.rb file, uncomment and rename c[:session_id_key] (in the Merb::Config.use block) In the…
4 Apr 2008
It seems (according to one guru, but coming from this source, it’s a left-handed compliment) that JavaScript is finally popular. To me, a nerd from a tender age, this is something between a curse and a joke. (See if you are in my camp: isn’t the green chick hotter?) Brendan Eich convinced his pointy-haired boss … Continue reading "Popularity"
31 Mar 2008
Varien, one of the most important eCommerce development and consulting firms in the world, has taken eCommerce to a completely different level with the latest release of Magento 1.0. An amazing, flexible, modular and scalable open-source eCommerce solution, powered by one of the most popular systems on the web today, the Zend Framework. Congratulations to […]
23 Mar 2008
For some time now, many of us around MIT have noticed just how awesome sshfs is. It gives a totally lightweight way to access the remote filesystem of any machine you have ssh to, without requiring any extra setup on the host. I’ve been running for at least a year now with my /data RAID on my server sshfs-mounted on…
17 Mar 2008
I’m sure, at least once in your life you played with Duplos. Duplo bricks are eight times the size in volume, twice the length, height and width of traditional Lego bricks, and are easier to handle for younger children. Despite their size, they are still compatible with traditional Lego brick. Duplos are great to introduce kids to the concept of…
15 Mar 2008
Is your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts. In the book Working Effectively with Legacy Code, […]
13 Mar 2008
A couple of months ago I wrote a Dependency Injection component for the Zend Framework. It’s a simple solution to a complex problem: removing hidden dependencies and injecting mocked objects. The component has evolved quite a bit since I first created it, and it’s now part of a bigger system, where objects are persistent, can […]
I’ve recently switched to Conkeror as my primary browser. It started life as a Firefox extension, but nowadays it’s a standalone app built on top of Mozilla’s xulrunner, so it uses the Gecko rendering engine. What it is, is an emacs implemented in Javascript, for the web. This means on the one hand that it acts like emacs. Most of…
11 Mar 2008
What’s a Web Cache? Why do people use them? A Web cache sits between one or more Web servers (also known as origin servers) and a client or many clients, and watches requests come by, saving copies of the responses, like HTML pages, images and files (collectively known as representations), for itself. Then, if there […]
Agile development methodologies have been around for a while now, and the list of them is long. It includes: Extreme Programmin (XP): Developed by Kent Beck, Ward Cunningham, and Ron Jeffries, XP is probably the best-known lightweight methodology. With its roots in the Smalltalk community, it is a relatively complex system of practices, and Highsmith […]
8 Mar 2008
MediaWiki is a great PHP-based Wiki application that is used to power many sites, including Wikipedia itself. One of MediaWiki strengths is how easy it is to extend with its plug-in architecture. The following is a list of 20 extensions that should make your life easier and save you a fair bit of time. Check […]
5 Mar 2008
I started moving some of my projects to GitHub. Here is my GitHub account. Projects moved to GitHub: GlobaLite ActiveRecord Backup mimetype-fu I’m planning on moving GoogleCharts, RandomWordGenerator and some not released stuff to GitHub so people can have fun forking my projects. Git and GitHub are the new cool things. GitHub is planning on setting up a gem server…
3 Mar 2008
If you don’t know about git and github yet, it’s time you clean up your RSS feeds and find some good source of information. Github is used by the Merb core team and I’ll show you how to use github to fork Merb, make your modifications and “submit your patch”. This is the exact reason why github is simply awesome,…
29 Feb 2008
MediaWiki is definitely one of the most widely used and best known Wikis out there, it powers Wikipedia.com, but I’m sure you already knew that. I’ve been using it at work to record and document all our internal systems and projects. It’s a great tool, it allows developers and projects managers to collaborate, provide and […]
I’ve been using git and git-svn for a little while and never had a problem… until today. On one of my project, we have a SVN repo but since I prefer using Git, I’m using git-svn. Git-svn has been great, it let me create my own local branches for each new set of features (that’s when I don’t forget to…
28 Feb 2008
For the last few months I worked on a Rails app called GumGum. GumGum is a licensing and distribution platform for online content. GumGum believes paying a flat rate to license content for online use is illogical. Offline, the flat rate model works because distribution is finite. Online, thanks to Google and other search engines, a story lives forever. GumGum…
25 Feb 2008
19 Feb 2008
broder has been hacking on some better quicksilver integration for Hiveminder using todo.pl. I don’t use a mac, but I don’t see why linux users shouldn’t get fun toys to. So I hacked up the following two-liner that uses todo.pl and ratmenu to pop up a list of tasks, and mark one as completed: #!/bin/sh todo.pl | perl -ne 'push…
17 Feb 2008
An AntiPattern is a pattern that tells how to go from a problem to a bad solution. For example: The Blob Procedural-style design leads to one object with a lion’s share of the responsibilities, while most other objects only hold data or execute simple processes. The solution includes refactoring the design to distribute responsibilities more […]
12 Feb 2008
Building border walls one slogan at a time