I’ve made a lot of progress with seafelt 2.1 lately. I managed to implement the TCP polling framework with some working examples in a frenzy of activity over two weekends and about 40 hours all together. The big bonus for me was really learning how Jim’s backend framework actually works. Though seafelt is built from some quite simple ideas, there is a lot of complexity in how those simple ideas work together.
I really like modular code, as it makes it a lot easier for me to maintain. That’s one reason why seafelt is split into a series of modules that deal with one specific area; libsnmp for the SNMP protocol, seafelt-backend for the polling framework, seafelt-frontend for the reporting, libchart for the chart drawing. The power, and the complexity, comes from having small parts that can interoperate with each other. It’s a lot like Lego, or Meccano, or computers themselves, in that you can build a lot of different things from the same, simple components.
I’m trying now to build on the power that comes from this framework of pieces to make it easier to use. 80% of people are likely to use seafelt to do a small number of common tasks, and I hope to make it really, really easy to do those tasks while still keeping all the power there if you need it.
This is one of the things that really annoys me about Microsoft products: they cater reasonably well for the novice or average user (though this is somewhat arguable), but if you need to really unleash the power of the tool, it is frustratingly difficult for an advanced user to do. All of the ‘safety’ features designed to make the product easy for novices to use just get in the way of someone who knows better. I don’t want to have to click “Yes, I really do mean this” every 3 seconds. I like the power of *nix, where you can write a quick script that glues together a few simple modules to do something powerful, without human intervention. With great power comes great responsibility, so you need to accept the risk that you may rm -rf /* and destroy your system, and take appropriate measures to manage that risk.
Not all Windows programs are like this, and not all *nix programs are user-hostile. I believe it is possible to have a balance of both. A user should be able to decide that they are experienced enough that they can take off their training wheels and get some real speed happening, accepting the risk that they may injure themselves from time to time if they aren’t sufficiently disciplined.
It’s a lofty goal, but one that I hope seafelt lives up to.