Book buying bonanza

The GoF Design Patterns of enterpise application development.. I just got my copy of Martin Fowler’s Patterns of Enterprise Application Architecture. I can best describe this as the GoF Design Patterns of enterprise application development. Beautiful book. I followed the public review process on his web site very closely. Martin’s style makes for such an easy read. I see this being a staple of any serious developer’s bookshelf.

I’m off to Ireland to drink my Thanksgiving dinner. Bet your ass that this book will be in my carry-on. [crazybob.org – web log]

Just placed the order for my copy. I’ve been following its evolution on Martin’s site for over year, so it seemed only fair.

Written any good books lately?

Michael Feathers of Object Mentor has started writing a book (currently) called Working Effectively with Legacy Code. Everything you need to know about tackling that aspect of software development that most of us spend a large chunk of our time on, and would probably rather we didn’t have to. Excellent stuff.

Follow its development, and discuss refactoring in general at the ‘refactoring’ yahoo group here.

XP Misconceptions

This

article makes for an interesting read, but it suffers from a common

misconception about agile methods and planning. Namely that Agile doesn’t do

planning. I’m more familiar with XP than the other agile methods, but as far as

I know, none of them claim that ‘planning doesn’t work so lets throw it out’, as

the article states. There’s even a book called “Planning Extreme Programming”,

by Kent Beck and Martin Fowler. What XP does recommend is that you should have

just enough planning/design/whatever for your specific needs. Its about

removing anything that doesn’t add value to your process.

The shroud of the dark side is falling

I like Perl. I feel like I should go to a meeting or start a 12 point plan or something. I’ve volunteered to work on a project at work that is using Perl, as I’ve wanted to see it in action for a while, and I have to say that it is scarily seductive. It just does what you want and gets out of the way. Provided you know how to tell it what you want.

One thing in my defense: I am entirely unconvinced that there should be ‘More Than One Way To Do It’. I got terribly confused with some date manipulations due to the ‘localtime’ function returning zero-indexed (0-11) months, and the Date::Calc module expecting 1-indexed (1-12) months. Sometimes its just easier to have Only One Way To Do It.

The OO stuff also looks like a dodgy aftermarket bolt-on…

Language Loss

Books and Words

Learning another language is tough. Amazingly tough. Cedric is going to post about accents some other day, which should be interesting. My accent in Spanish is horrible… I feel for the people who have to try to have conversations with me every day. I need another 3 years here at least.

-Russ [Russell Beattie Notebook]

Learning another language is certainly tough. Knowing that you used to speak one and can no longer is also a bummer. Its hardly my fault – I was 5 when we left Brazil. But when my parents recount stories of how my mother used to get me to translate for her, I feel gutted that I have (apparently) utterly lost all my Portugese. I would love to go to Brazil or Portugal to work just to see if I could regain my childhood facility with the language, but unfortunately its hard enough to maintain a software career in your native country currently, let alone try to make a go of it overseas. Darn.

Nullify Nasty Negotiators

Kept Waiting. Karen wants to know how to handle being persistently kept waiting by lawyers and accountants. [read more] [Tony Bowden: Understanding Nothing]

I hate negotiations, mostly because I’m not very good at it. Or perhaps its because the majority of my experience has been with people who do it for a living (car salesmen, estate agents etc.) and are therefore a lot more experienced at it than I am. Either way this link makes for an interesting read. The best way to prepare for a negotiation is to understand what tactics might be employed against you and how to deflect them, while resisting the temptation to try and be underhanded yourself. About the only thing I hate more than negotiation is dealing with a dishonest negotiator.

Someone’s melted my keyboard!

Got a Maltron keyboard on hire for the next
few weeks. Its very strange. People also think I am for using it. I’ve just
about gotten used to the fact that all the keys are at different heights and
angles, but its all the control keys that are giving me real difficulty.
Several times I’ve gone to hit alt-tab and got \’ instead. Most of the
non-letter keys are in different positions, and muscle memory is working against
me. My mind thinks alt-tab, but my body is doing ‘left arm over, thumb back,
second finger up’ before I can catch it. Its an oddly jarring sensation. I
know what I want to do, but my fingers defy me.

Oddest things so far:

  • Return is under the left thumb
  • …as is backspace
  • …and tab

Coolest things so far:

  • Opening brackets, braces, angle brackets etc. is done with the left hand,
    closing them with the right. Appeals to my logical programmer nature.
  • Angle brackets are unshifted, which makes typing markup a lot easier.
  • The shift-lock key (as distinct from caps-lock).
  • ctrl-alt-del are next to each other and can be activated by drumming one
    hand over them.

Internet not obsolete yet

The Top Seven Things Wrong with the Internet. The Internet is in serious need of an upgrade in a number of areas. Some of these problems already have fixes, they’re just not being rolled out because it’s considered too hard, or there are large vested interests in maintaining the status quo. (This was originally going to be a top ten, but I ran out of writing time during my lunch hour. I may amend the list later.) (1003 Words) [The Fishbowl]

To address some of your points:

1. DDOS attacks.

ISP’s already have the ability to contain some of these and make them less damaging. Its called something like ‘Packet Egress Filtering’. One of the ways that DDOS attacks like SYN floods and the ‘ping of death’ work is that they get lots of machines to send packets with spoofed IP addresses. In the example of SYN floods (as I understand it – I may be wrong) zombie machines are instructed to send out TCP SYN requests (the initial ‘handshake’ request for opening a connection to another machine), with the source IP spoofed to be that of the machine being targeted for the denial-of-service. A server receiving a SYN request will send an ACK response to the source IP to acknowledge the connection. If sufficient zombies are all sending spoofed SYN packets, the target is buried under a flood of ACK packets all coming from well-meaning servers that are under the impression it tried to initiate a connection with them. The really sneaky part is that each individual middle-man machine would only see a very minor increase in traffic, as its the aggregated total of all the middle-men sending ACK’s that swamps the target system. A variation of this (I’m more fuzzy on this one so I may be even more wrong) is sending SYN packets directly to the victim system, with source IP’s spoofed to be non-existant. The victim will try and send an ACK response, which will go nowhere, so it will try again, several times before giving up. Given enough SYN packets, it will eventually be spending its entire time trying to send ACK’s and not servicing genuine requests.

How does egress filtering address these issues? An ISP knows which IP address ranges belong to it, and could put this data into their routers, such that any packet that arrives at the inside edge of their network that claims to be from an IP that is NOT within the ISP’s allocated range could simply be dropped. This would prevent packets with spoofed source IP addresses ever getting out of the originating network.

This is about the limits of my knowledge on this. More info:

here, and here

3. IP numbers.

IPv6 is on its way, with mind-boggling numbers of er, numbers, unfortunately inertia (and upgrade cost) is against us on this one. It will get here eventually (I hope).

7. Amero-centricity.

Agreed. 🙂

Refuse Collection Engineering

Turbo-charging Java HotSpot Virtual Machine, v1.4.x to Improve the Performance and Scalability of Application Servers. This paper describes the requirements of a Telecommunication (Telco) application server written in Java, and how those requirements might influence Java virtual machine design. Most of the discussion is not limited to Telco alone, but applies to the enterprise as well. [Java-Channel]

Some serious detail on java garbage collection here. Tweaking GC can have major impacts on application performance. I’ve obtained speed-ups of up to 500% on batch operations (turning a 1-hour task into a 12 minute one) by doing this. For almost all server-side or long-running batch applications, the default young generation size is way, way too small, and should be increased to a significant proportion of the JVM’s maximum memory.

-verbose:gc

is your friend.