Wednesday, December 19, 2007

Refactoring from EJB's to Spring & Hibernate, part I

As part of our infrastructure we have some "legacy" EJB applications. As usual these are slow, hard to test, hard to maintain, etc etc. As a result we'd like to refactor them to use Spring/Hibernate. One of these applications is a proprietary monster that it's easier to throw away and rewrite (one of the few occasions where I will agree to the rewrite over refactor path, it's that bad!!), the other two are prime candidates for refactoring: we own the source and we control their lifecycle.

I hope to post a few more articles on our experiences as we go along, but in the meantime here's some reading on other peoples experiences:

First, lets review EJB's, the why and wherefore..
http://dynamicsemantics.blog-city.com/abriefhistoryofejb.htm

Example with a single entity application:
http://kaksles.org/2007/08/11/how-to-migrate-a-legacy-ejb-application-to-spring-and-hibernate/

High-level overview of the process :
http://kaksles.org/2007/08/11/why-migrate-a-legacy-ejb-application-to-spring-and-hibernate/

Story of migrating a large application:
http://jdj.sys-con.com/read/140097_p.htm

debugging SQL statements from EJB's

EJB's...(sigh!) I don't know what the ejb community was thinking when they went off onto this tangent. Granted that in the narrow domain of systems that genuinely need distributed transactions and tiers, and compared to the alternatives at the time for transaction management & ORM (CORBA & nothing), EJB was good.
It could have been a lot better if not for standard-itis and if SUN had thought for 5 minutes about what most applications need (instead of how they could cash in), but it (++sh) happens. The problem then was every man and his dog j2ee developer going off and architecting systems with no distributed requirements at all with full-blown EJB architecture and every J2ee pattern in the catalogue. Enter the current breed of "legacy" applications less than ten years old...

Anyway, if you are in the situation of wanting a non-proprietary way to see what SQL the container is producing on your behalf, then you're in trouble, it's not as easy as saying show_sql=true.

Having just dug around on this topic, here's my two cents:
1) use Log4JDBC
this is really the premier solution, Log4jdbc wraps your jdbc driver transparently, and you can fully configure the logging via standard log4j xml. The caveat with this method is that you need to keep in mind that the JDBC driver will be loaded in to a different ClassLoader than your application, and you need to be aware of this because it can cause some strange errors otherwise.
The basic idea with log4j is to replace all references in your config (you don't configure your Datasources in code, do you?) to your JDBC driver with the log4jdbc driver, and prepend the jdbc url with "jdbc:log4". then configure your logging and you're away!
This method is preferred, but can take a bit of configuring and hacking if you're many levels removed from the DriverManager, eg - in a managed environment.

2) The retarded cousin...
decompile your JDBC driver with JAD or similar, then *manually* add in logging statements to print SQL and parameters, then replace your existing driver with this hack version. This is an ugly hack and should only be used in the absolute last resort where all else has failed.

Ideally *any* SQL abstraction should allow the printing of the SQL it generates as it executes, to allow debugging and profiling, but unfortunately it's not always possible.

Java Sizeof() & sessions

I've just been doing some stuff to optimise our infrastructure to stop it calling an external ejb 6 times per request, which I fixed by sticking stuff in the session. there's similar problems in other places in our app and I was thinking about sticking them in the session as well, but then the issues of session size/scalability & stale data stopped me.
long story short, I found some interesting stuff on reinventing the sizeof operator for java. in C you use it all the time, but in java such a thing doesn't exist. Now, you could go and profile your application, but that usually takes a bit of setting up, and if you want to instrument your app in production then it doesn't really work so good.
Anyhoo, here's three interesting links on the topic of figuring out how big objects in java are in general, and session size in particular:
[1] how big are primitives? brute force approach, useful for boot-strapping
[2] Article developing the issue and source of tool to get a good (approximate) idea of the size of an arbitrary rooted graph.
[3] Java web parts helper class to determine size of your session

and we're back...!

Ok I haven't posted for awhile, it's been pretty hectic with the new job. I've got a few posts in draft mode that I haven't had the chance to get to a point where I could publish them. They're coming, but in the meantime there's a few interesting thoughts that I thought I'd put up, so there may be some posts out-of-order coming up. ah well!

Monday, September 3, 2007

Essentials for the first day at your new job...

Ok, so you've decided that you're not happy at your old job, you've looked around and found a totally kick-ass firm to work for, and it's your first day. now what?
  • dress up. you should have a good idea what everyone dresses like from when you came for the interview. dress above this mark, you can always come down later. first impressions count.
  • bring a pen and a notebook. The learning curve is gonna be steep, and a lot of knowledge is going to be dropped by you on your first few days, you'll need to write it down. Don't wait to raid the stationary cupbaord, bring your own.
  • Forms filled out. There's a million pieces of paper to get started on their way through the system, bank account details, next of kin, super, disclaimers, medical declarations etc. Fill them out the night before and bring them with you. the sooner you hand them in, the sooner your pay will arrive...;-p
  • ID. All that paperwork will probably need verification, so bring the requisite 100 points of ID, which is usually a drivers licence and passport or birth certificate.
    • if you're starting in a position that requires security clearance, then you'll need 5- or 10 years worth of history, some places may require this before you start, some may let you provide it after you start, play it by ear.
  • Don't bring lunch. Carrying food will slow you down, plus you don't know where to put it yet. just bring tucker money, it's a good excuse to go out to lunch with a colleague.
  • Most importantly, get a good nights sleep the night before. You'll need it!
Ok, on day two you can start to enscounce yourself a bit...
  • bring your lunch today, now that you know where the staff fridge is...;-p
  • start setting up your environment, this includes your favorite utilities and programs.
  • bring some music. you may be lucky enough that they have a shared music drive somewhere, othewise you'll have to provide for yourself. depending on the corporate environment you may need to keep it all on a portable HD for quick removal...
  • bring in your personal coffee mug
What I haven't mentioned is day zero, before you start it's a good idea to come in, meet & greet (if you haven't already), but most importantly ask about your login profiles. If these can be kicked off before you start then you can be sure of doing something practical on your first day. otherwise you'll be twiddling your thumbs waiting for help desk to get back to you...

Saturday, August 18, 2007

Mandatory Reading

These are the blogs and articles that have shaped my thinking as a software engineer, and helped influence my professional values and attitudes. I think they should be compulsory reading for any neophyte hackers to get a solid grounding in the Tao of hacking...

MS Junkies will notice that this list is heavily biased towards all things *nix. this is not an accident and I don't apologise.

#1 - Joel on Software
the original. I was reading joel when i was still at uni. it took me a *long* time to get through his archive, but i finally did it, and it worth it. You should too. This gives you solid software design plus insight into some of the ways software companies (should) work, and treat their geeks.

#2 - Rands in Repose
ditto, but less on the engineering side, and more on the management side. lots of good stuff here that will serve you in good stead if you work for a bunch of soulless suits.

#3 - The Art of Unix Programming
Years before XP had a name, unix hackers were already doing it. may need to filter some of the rhetoric but.

#4 - The cathedral & the bazaar
ditto.

#5 - How to ask questions the smart way
this should actually be higher in the list. If you ever want to post a question on a forum or a mailing list, then you *need* to read this, in detail. then apply it. or be prepared to get STFW & RTFM'd.

#6 - How to become a Hacker
This is your pathway to technical development. I'm not talking about keeping up with maven, or spring, or GRails or the latest fad. I mean the solid things that will make you a fundamentally better programmer, regardless of your toolset. coming back to this after a few years I can recognise it's fundamental truth. you need to learn a few different languages, so that you can appreciate the essence of solving a problem abstracted from the details of your particular language or tool. At the very least you'll learn how to learn, which will help when Java & .Net get made obsolete by the Next Big Thing, and we all have to learn how to write code in FORTRAN 3000.
Interesting sidebar here, I read a while back that all modern programming languages were slowly evolving to become more like lisp. at the time I mocked this, but slowly I'm seeing it be more and more true. Compare Java to Ruby, then compare both to lisp, and the progression is obvious.

#7 - Positive Sharing
And after all that hardcore techo stuff, finally be happy & passionate about what you do, otherwise everything else is just chasing after the wind. The signal-to-noise on this one is a bit higher than the average, but if you start at the popular posts and work out, then you'll do well.



ps - Rootless Root and the Tao of Programming, it's just fun!

Development tools I'm currently using...

unlike the previous three lists, the status of these items is fragile and depends solely on the fact that at the moment they fill a niche, but they're not compelling. These are the tools that roll up the building blocks into something that I can use.

#1 - IntelliJ
Apparently it's the nicest IDE around, but it doesn't seem that smart to me. Good enough.

#2 - TOra - Toolkit for Oracle
Free Open-Source. GUI PL/SQL client for oracle. Extremely fast (written in C++), uses QT Library by Trolltech. Only shame is that it's still buggy in some area's (some instability, BLOB & error handling poor), otherwise very full-featured and *quick*! Unfortunately not actively maintained currently...

#3 - Oracle SQL Developer
When Tora runs out of horsepower, you can always trust SQL Developer to come through. It's often fast enough, but as it's written in Java it's a big memory hog, which I often prefer to avoid.

Firefox and Thunderbird extensions I can't live without...

this list isn't as big as my utils list, as FF2.0 & TB2.0 are pretty good out-of-the-box.

Firefox:

#0 - MR Tech disable XPI delay
one extension to rule them all!

#1 - Adblock plus
The web without ads, it's like a breath of fresh air...

#2 - Gmail notifier
the integration is nice, very unobtrusive.

#3 - Restart Firefox
"hmm, FF is over 300mb of ram, time for a re-start..."

#4 - Plain Text To Link
I got so sick of ctrl-c,ctrl-t,ctrl-v. this does it in 2 clicks.

#5 - LastTab
Firefox should work this way in the first place

#6 - DOM Inspector (default, but still...)

#7 - Web Developer Toolbar
Indispensible for hacking websites. However I'm being rapidly seduced by Firebug...


Thunderbird:
#1 - miniBird theme
oh yeah, test out your vision with this 5x5 icon set...;-p min to the max!

#2 - Display Mail User Agent Extension
hmmm, what mail client are you using?

#3 - English (au) dictionary
(sigh) I love the way americans assume everyone uses US english.

#4 - Signature switch
only use that crappy corporate signature when you *absolutely* have to!

Tools I can't live without...

I'm talking software here. The tools of the trade that I use everyday to make life easier for me to write code, administer servers & generally hack about. Note these aren't specifically dev tools, and in fact most of them aren't. The few that can be used that way are highly generic (textpad).

Having composed this list, I notice that the common theme among most of these tools is that most of the time they work so well I don't even notice that I'm using them. they just work. I'm not constantly stressing because they annoy me, they just do what i ask, then they get out of the way. Bright, patient design as rands would say...

Granted there's always a learning curve, and sometimes a bit of config'ing, but once that's done I don't have to think about it again, unless I want to change something. When things work well enough, you shouldn't even be aware of how well they work.

#1 - Firefox.
ok! I admit it! I can't live without Firefox!!! I tried (see opera post), but I keep coming back to some plugin I need or website that just won't work in opera, and I come back to FF. ok it's got some problems (=memory hog), but regular restarts and an extension diet can fix that. Firefox rules!

#2 - Thunderbird
I've tried Outlook, I've tried Lotus notes, I've tried Evolution, and nothing compares to TB. it just works. It's got a few rough edges, and the calender still sucks, but for what it's designed to do (read email). It's faster & simpler than anything else that can compete on features. TB rocks!

#3 - Launchy
Wow. what else can I say? Launchy is a breed apart, it's freed me from the start menu, and decreased the cost of context-switching. It's so good I actually paid for it!! (and this is FREE software!) and I regularly want to pay more for it, it's that good. Download it, use it, love it.

#4 - Process Explorer
Whenever some crappy app dies and goes unresponsive, or I need to see what's saoking all my resources, ProcExp is indispensible. I also use autoruns & Filemon, but not nearly so much. If ProcExp isn't running then I just don't feel safe. Need to kill-restart explorer? ProcExp is your friend. kudos to Mark Russinovich for being such a legend, and continuing to be legend despite being beamed aboard the Mother Ship.

#5 - BBLean
This is an Explorer Shell Replacement, and really in a category of it's own. I don't use it directly, but it allows me to fully distance myself from MS's cruddy & crufty shell as it completely replaces explorer.exe as your shell. this saves me from having to go through all the pain of explorer freezing out on me, and the painfully slow start menu. Now when I have to use the start menu (which i rarely have to use, thanks to Launchy!), it's blazingly fast, instead of painfully slow. the benefit of bblean is indirect, in that you never notice it saving you time, until you use a PC that still has the windows shell and you remember how painful it was.

#6 - Generic File manager
I can't recommend a specific tool here, there are so many and no really shine. However all of them aren't Windows Explorer the file manager, so they all get a big plus! They all have extra functionality lacking from WE (multiple panes, tabs etc), and aren't as prone to random freezing. They still use the windows components behind the scenes, so this is a marginal improvement. I'm currently using XPlorer2, and before that I was using Ultra Explorer.

#7 - Console CLI shell
the interface to CMD.exe suxx0rs. Console just makes it nice, I love that it's now easy to highlight select-copy/paste text, and resizing is just a breeze! plus tabs are nice...;-p

#8 - Textpad
though I'm being swayed by Notepad++, textpad is fast & just works. Ol' reliable. Also, being able to open 100MB log files without chugging out is a big plus!

#9 - 7zip
First winzip, then winRar, now 7zip. open source, clean, fast. nuff' said.

#10 - Keepass Password Safe
I need access to a lot of servers/databases/applications/web sites etc, keepass makes keeping all that info forever securely just a breeaze. No more lost passwords, no more security worries#1

#11 - TortoiseSVN
simple & easy to use SVN client. low impact.

#11a - Winmerge
the diff/merge tool par excellence. and open-source too. tortoise + winmerge is muy bueno!

#12 - Gadwin Printscreen
about a million times a day I need to grab a quick screeny of something, or measure the width of a html field. Printscreen is perfect for this. It replaces the standard windows functionality, so all I notice is that taking screenshots is a *lot* easier!

#13 - Sequoia View
"Where's all my disk space gone!?! oh, there it is..."

#14 - FoxIt PDF Reader
"hmm, lets open this tiny little 20k pdf.. oh no Acrobat Reader is loading every plugin known to man, it's gonna take a hour to start!". you can either fight Reader, or just ignore it. FoxIt is fast, and only loads the plugins you need, when you need them.

#15 - Unix Utils for windows
added to a directory in the PATH, this makes simple things even easier, and allows a consistent *nix-y feel to the CLI even on windoze...

#16 - UltraVNC
only the best implementation of VNC client/server that runs on the windows platform. much more reliable than TightVNC I've found.

#17 - Putty
The unsung hero of the network admin & DBA. Half the internet would stop without putty. Muchos Gracias Simon Tatham!

#18 - WinSCP
For a generic, user-friendly ftp/sftp/scp gui client that *just works*, winscp is the bomb. nuff said.

Monday, June 11, 2007

Canberra Craziness...

Things I expected moving to Canberra:
  • the cold (this includes cold toilet seats)
  • traffic
  • increased living costs
Things I didn't expect:
  • in Darwin the birds fly in the air, in Canberra for some reason they all seem to want to sit on the ground and eat the dirt. Must be stray radiation from Parliament House...
  • the static electricity. In Darwin it's so humid all the time that you really have to work hard to get a charge up. In Canberra moving in the car seat is enough, so everytime I get out of the car I get zapped. It's new every time...
  • The drought, it really is pretty bad down here. I've never had to conceptualise water restrictions before, and it's still strange to me.
I think there were a few others that I've forgotten, but c'est la vie! 

HOWTO: assign Color & B+W printing permissions

Problem:
You have a printer that uses expensive color ink, and you (are asked by management to) restrict access to the colour ink to a small group of users (the managers), while still allowing other users to print B+W.

Solution:
This solution relies on obtaing two different drivers for your printer, one that only prints in Black & White, & another that prints in color. The printer in this example is a HP COlor LaserJet 2840, for which said drivers can be downloaded from the HP website.

There's different ways of doing this, and this method isn't perfect (I can think of several workarounds), but if you have the usual n00b users then it'll work perfectly...:-)

Download the vanilla & B+W drivers & create the printer port on the FPS (File-Print-Server, assuming Server 2k3/XP) manually by using the add-printer wizard, selecting Local Printer->TCP/IP port->enter hostname.

First install the B+W drivers and configure a printer from the printer port (last step), when the wizard asks you for the drivers browse to where the B+W driver installed itself, name this printer "MakerModelB+W" or similar.

Now install the vanilla drivers that allow color printing, and create a printer from the port, but this time using the color drivers. Congratulations! you now have two virtual links to the same machine, one that will always print color, on that will always print B+W.

Now open 'Active Directory Users & Computers", browse to your Groups node, and create a group called "Colour Printer Users" or similar, add a few people (yourself & the managers).

Go back to the two printers and configure printer sharing. Give printing rights on the B+W printer to your main User group ("Staff" or whatever), then go to the color printer, remove "Everyone" and add the Color printing group from the last step.

Congratulations! Now you've got a mechanism for letting some users print color, while restricting everyone else to B+W! now just add the printers to your login script with a check for the color group so that they get the color mapping instead and you're done!


 

state of the art user interfaces (pt 2)

(installs printer...)
this experience wasn't so bad. the instructions were pretty good, step-by-step for idiots. There were a few gaps between what was in the tute and reality (eg-there's two piece's of sticky tape on the base not in the tute and I can't figure out how to get them off), but no show stoppers in plugging everything in and inserting the ink cartridges.

It was obvious that the box team had been at the ink cartridges and internals as well, everything had guidelines and pretty pictures for the technically challenged (like me!), so that was a good experience. One thing lacking was some audio on the CD-ROM tutorial, as well as the ability for it to scale, the tutorial is a pre-packaged presentation about 600px by 480px that can't be resized, or rewound, so usability is a bit limited, but the content was good. pretty pictures and exploded diagrams everywhere.

The big failing wasn't the hardware though, it was the software. Installing the drivers was a bit of a pain as the supplied disks don't support Server 2k3, which is a bit retarded considering this is a mid-range network printer, and you would expect it to be deployed as a shared printer from a 2k3 instance.

Had to download the drivers from HP, the B+W & vanilla  drivers and install them manually. This took a couple of goes, but not because of HP. That'll be in a coming-soon blog.

Overall? It's a nice machine, very functional. can't comment on the price cos I wasn't involved in that stage. The most noticeable thing about it though, is that in operation it is *LOUD*! When you print you can hear every gear and cog inside grinding away and wheezing. This printer needs to be away from people or else it will drive them fair up the wall!! 

A close second is how slow it is, the quotes of about 7ppm is pretty close, if not a bit high, if you don't expect high performance then you won't be disappointed! ;-p

How I managed to separate color & B+W printing permissions will be in another blog...

Sunday, June 10, 2007

Survival of the fittest...(browser)

The Browser war is dead, Long Live the Browser war!!

I'm going back to Opera after a long hiatus. I've come to the conclusion that for actually the net, as opposed to developing web pages etc Opera just leaves FF for dead. it's so much nicer to use day to day, it's pretty, smooth, *fast* and it comes in the box with features that you need to muck around installing extensions in FF. Also the fact that I can have both browser & mail client in less memory footprint than either FF or TB.

I first got on the net in '98 or so, I stayed with IE long enough to discover that netscape existed. These were the bad old days when 56k was fast, and everything had to go around on floppy disks. Netscape had tabs and wasn't MS, that was enough for me. I stayed with NN until '03 when a friend introduced me to Opera 7, and I fell in love with its slick goodness. But that didn't last long as Firefox pre-release 0.9 came along shortly, was faster, lighter & had more functinality available through extensions, so that was a done deal.

Well, 4 years later here I am, going back to Opera. Why? Well for a while now I've been having issues with FF+TB taking up a lot of memory and slowing down. yes I run a few extensions, but not that much! I was toying with Lynx & Pine, and was impressed with the whole command-line test-only browser thing(fast!!). Searching for a modern equivalent of lynx gave a big fat blank except for a few comments about using Opera in text-only mode.

This put me back onto trying out Opera again after a multi-year gap. And wow has it come along! no more ads, and it's fast! start it and it's there before you realise what's happened! I remember when FF used to start like that...

Add the fact that it has a mail client built into the browser (ok so does Seamonkey, but sorry I don't want something even bigger & heavier than FF/TB). Plus the text-only mode is pretty cool, very-lynx when you disable images as well. If I could bothered to write a custom script I could probably get it looking like a console.

Unfortunately this time it's not a black-and-white cut-over. I've got 2-and-a-half years of email in TB, and Opera doesn't do everything that FF does (Greasemonkey, Web developer, css viewer), so my browser/mail environment is going to be more of an ecosystem than a monoculture for a time to come yet.

But then that's the power of choice at work, and it's all good! I can have as many browsers & mail clients as I want!


Opera things that don't work correctly:
- random JS widgets (eg this blogger interface!)

Things I'll miss from FF:
- my plugins, adblock is just awesome, opera doesn't have anything even close, all my web development stuff, and FF's superior JS compatibility, Greasemonkey & Taskinator,

Things I won't miss:
- having each plugin update itself every time I start FF, just do it in the background please!
- FF & TB hogging about 400MB of memory for no known reason
- waiting ten minutes for FF & TB to load.

Things I've missed from Opera:
- ctrl+plus /minus zooms the web page, **including images**, fast forward/rewind buttons that work properly.
- the way things 'just work', opera has a much tighter design that works within itself very well.

Saturday, June 9, 2007

State of the art user interfaces

not what you expect..

installing the new HP Colo(u)r Laserjet 2840 at work on the weekend, must say I'm very impressed with the effort they've put into the the user interface of their....packaging.

Yes thats right, the packaging.  when the box sits on the floor there's a very obvious line of sticky tape holding the top flaps together, it affords cutting the tape as the obvious first step. Ok no rocket science here yet right?

when you open the flaps, the first thing you see is diagrams (& instructions in 5 asian languages, lose marks for no english)instructing you how to continue. Oh look, the little man is popping out those plastic things on the side, I wonder what that's about..? Oh look! if you pop them out then the sides and top of the box detach and lift off!  (I hope someone makes a packet from that patent, they deserve it.)

Now you've got the printer sitting on the floor on the box base. sticky-taped to the top of the printer is a sheet warning you to run the install  CD before plugging the printer in. oops! that's right, the little man on the box did that before he lifted the printer safely with another colleague. I'd better dig up the manual that i threw to the side and see what that's all about...

See? good user interfaces aren't that hard!! If a printer box can afford it's use, surely your hugely expensive enterprise application (or even that cool little utility that makes life easier) can afford it's use. It's as simple as making the following step as obvious as possible, and allowing for people to be lazy (not necessarily stupid, but the two can be hard to separate sometimes) and need reminding about the right way to do things, and the occasional polite reminder if they're not doing what they should be.

Kudos HP, your packaging team deserve a bonus. Let's hope that the rest of the package is as easy to setup.

I hate configuring printers, it always seems like black magic and secret incantations...

Tuesday, June 5, 2007

air fares 2...

well, there goes $1,000 AUD I won't be seeing again. The trip's booked, with the sideline to sydney and all.

see the budget/itinerary here: http://spreadsheets.google.com/pub?key=pYkGXyqd2mcXUF8cTu9KVSQ

that little sydney trick just saved me a couple hundred dollars, total cost of the outward jaunt is $488, including bus, train & plane. the next cheapest flights on that day (for much worse times) are:
qantas - $650, $778, $820, $900+
virgin - $625, $670

It's the return leg that's a real killer, at around $520. So overall not the worst, but could have been a lot better. moral of the story? book plane tickets as early as possible!!


interesting sidenote on the qantas web site (which by the way, although substantially better than virginblue still has a long way to go in terms of usability), the final booking confirmation page url looks like this: https://book.qantas.com.au/pl/QFdomestic/en/BookTripPlanServlet;jsessionid=

if in the same FF tab I overtype that with qantas.com.au, I get a SSL certname mismatch (the cert is against www.qantas.com.au, not qantas.com.au, oversight on their part I guess) the briefest flash of the Sun logo:

which leads me to believe that the qantas web site is hosted on a Sun Application Server.

The funniest bit tho, is that putting that url into another browser that doesn't have a current qantas session (like ie), it gets a 400 bad request error. strange...

Virgin isn't much better though, drop the 'www' off their site name and it doesn't resolve to anything, even though they own the domain. slack. (and the less I say about their popup window calender the better, at least qantas has the common decency to float a div...)



ps - feel free to comment!!!!

matt kerle

Web comics & blogs

Isn't the internet great? I find that on the internet is a never-ending source of things I can do instead of work! Here's some of them...

Web-comics:
User-friendly - http://ars.userfriendly.org/cartoons/
These guys rock, the little hairball guy, pitr with the fake russian accent, the caffeine dependencies, it's just awesome, number #1.

Dilbert - http://www.dilbert.com/comics/dilbert/archive/
The original, nuff' said.

PVPOnline - http://www.pvponline.com/article
oldie but a goodie. getting a little bit tired now but still a classic of the genre

Everybody loves Eric Raymond -http://geekz.co.uk/lovesraymond/
so funny (sigh!), but only if you grok the fullness of the kernel...

Angst Technology - http://www.inktank.com/AT/index.cfm?nav=1
this one ended in 2005 after a slow decline. I'll always remember the great moments though, the web monkey flinging poo at Metallica, and what happened when web monkey had real coffee. One day I'm sure his hosting will run out and this wonderful thing will disappear from the web. I have vague intentions of spidering it before then...


Blogs:
Joel on software - http://www.joelonsoftware.com/Archive.html
The first series of articles I ever read about *real* software engineering, full of the principles and guidelines on how an IT company *should* work. If you run a company the way Joel does you'll never be able to own a medium sized african nation, but you will be well off, have a great job, a fantastic company surrounded by great people, and as a side-effect you'll produce amazing software. sounds ok to me.

Rands in Repose - http://www.randsinrepose.com/
Bit rambling at times (and I never got those SXSW things), but there's a lot of good stuff in here, especially if you're a minnow in a large pool, and you want to know the warning signs of when the barracudas are coming, and how to avoid them. valuable for that reason.

Shoemoney - http://www.shoemoney.com/
Don't know if he's legit, but even the idea that you can make this kind of money off the internet is amazing. very smart operator, this blog is good because I don't know anything at all about the shallow world of internet advertising/marketing, and it educates me about things I never even knew existed, which is a good thing (you don't know what you don't know).


Honourable Mentions:
this page, for being so incredibly simple, yet managing without fail to be gotten wrong by most java developers, you know, the ones who don't understand pointers.

/.

Swik.net

lifehacker

fin, matt kerle.

Non-Functional Prototypes Rock!

Old & Busted way to design an application interface:
Use photoshop etc to mock up images of what a particular screen would look like, paste this into a html page and add hotspots. repeat for every page in the system.

then the client decides they'd like the background to be a slightly different shade of puce (is that even a color?), so some poor grad (not me!!) has to go through and change every single screen.

the client finally signs off on the design, you throw the whole thing away and start coding afresh in whatever the spaghetti framework du jour is. reusability: zero. blegh!

New Hotness:
(assuming it's a web app, would probably work as well for client app gui's) mock everything up in html/jsp/aspx/ whatever you're using. don't write any business logic at all, just pump out great steaming mounds of raw html, and just enough smarts to tie the pages together.
then when the client decides they actually like chartreuse, you change a single style (you did use css right?) and the whole thing changes in one step. we save money and the grad doesn't get that crazed look in his eyes...
Now when the client signs off on design, you hand the "non-functional prototype", aka the app minus the business logic, off to the coders, they pump out the business logic and you save a whole swag of time.

It's just so easy, so simple, I don't know why more people don't do it...

My first experience with this methodology was also the first app I got to architect from the ground up (lol, the front map *still* doesn't work in FF, and it probably never will! one day I might blog about this one...) instead of having to maintain someone else's cruft (these are mainly internal so they can stay nameless).

I came on for the develop phase after the NFP was done. The entire application skeleton already existed so all I had to do was the little task of making it dynamic (yeah, easy) which meant learning about ldap & .NET, and how to plug the two together (thank God for Novell, or I would've been stuffed!). MS Visual Studio was also alarming productive, as a hard-core java fan I found that offensive!

Anyway, I'm rambling. NFP's rock, they save lots of time. The guys I'm currently working with love their intellij/struts/hibernate, and with NFP's once the design phase is over, that's half the develop boilerplate done as well, leaving lots more time for business rules, just like those pesky dotnet developers do...

Matt Kerle

First post, air fares...

wow, no longer a blog virgin! now I'm gonna have to post some photo's and stuff up here.

Anyhoo, organising my trip to darwin to work on the farm with EK. I've left this so late that plan prices are horrendous, and I'm looking at doing some crazy mucking around to get them back down, like catch the bus to sydney from canberra, train to the airport, to fly to darwin, just about to run the numbers to see if it's actually cheaper. bonus of that is that I get in fri night instead of saturday, so the extra day is worth it.

I discovered that mid-week is the cheapest time to fly if you can, the wednesday flights are almost 3/4 the price of the weekend ones. was seriously tempted to swap but the beauty of leaving on a friday and getting back on a monday with 10 working days off is that you actually get 2 weeks + 2 days (the second weekend) instead of just two weeks. downside is that going to work after two weeks down the farm and a red eye flight, well, I don't think that monday will be super-productive...;-p

ah well, bite the bullet and book it!

btw - have I mentioned how much I love google stuff? I'm going to do my budget up in google docs, plot my course in google maps, and blog about it right here. Go Google!!!

Other posts should be vaguely more techo, I intend to use this blog as a random repository of cool + neat tricks and hacks that make a coders life easier (there's plenty of them!).

It seems that having an online presence is mandatory these days, if you type your name into Google, and the best hit you get is a friends bebo comment, then somethings wrong. The only other best hit is my subversion posting, which is pretty ordinary.

As Shoemoney points out, your signature is a valuable thing. One of the goals in this blog is that if someone randomly types my name into Google, that the first hit they should get is my blog/website.

Stuff WhereAreYouNow.com & other craps like that, just use google to index you and noone will ever loose you...