Despite C++ templates having been around for quite some time, development environments still haven't caught up.
Debugging heavily templatized code is thoroughly nasty. Names are mangled beyond recognition for anyone not using a 500 column display or lots of scroll bars. Stepping through code in the debugger often yields senseless results -- you often cannot see the source for the instructions being generated without manually tracing through the headers and looking for every overload and template body declaration. Templates thorougly ambiguate linker symbols. Templates slow compiles to a crawl, often adding tens or hundreds of thousands of lines to every inclusion of a given header in order to define the types it uses. With subtly improper use, templates can bloat code size astronimically and create horrendous execution bloat.
I don't know how many weeks I've lost to helping others debug or rewrite their code because they thought they would do something "clever" with templates and they ended up creating a maze. And bringing in third-party code with templatized interfaces has frequently required more time to debug and adapt than it would have taken to create the code anew.
If you're going to use templates, stick to simple container classes for now. Anything else should be considered theoretical research until the tools catch up. Let me repeat: development tools HAVE NOT CAUGHT UP WITH C++ TEMPLATES. There is no debugger available which makes templates as transparent as normal code, inline functions or even #defines.
And please save your first forray into templates for private projects. Don't inject your template experiments into code others are trying to use!
The one thing that really, really worked well on the Newtons was the font. As I remember it, the font was a slightly tweaked version of the old Mac system font, which was really wonderful for LCD use.
I read on a color iPAQ 3975 at that resolution. It's nice for fifteen minutes or half an hour, but not much more than that. I have to end up bringing the fonts up to large sizes and holding the device at arm's length to get comfortable with the text.
I borrowed a Sony Clie for a while at a slightly higher resolution, and it made all the difference in the world.
This is very close to being a perfect device. The only complaint I've got is that it's yet another 240x320 screen device. At that size, it's not quite enough to make it easy on the eyes for extended use.
For eBook use, one of the more popular applications for PDAs, you really need something more like the newer Sony Palm devices. This resolution isn't quite enough for crisp fonts (even with subpixel rendering) and it's small enough that most preformatted PDF/Web content still needs to scroll half a screen horizontally to be read at a legible magnification.
Can we please please see a Zaurus with a 360x480 display?
FreeBSD didn't install in 4M of RAM in 1997, so you'd have to go back more than a few versions
The default installer disk suggested 8mb, but worked with less. For a 4mb notebook, it might come down to installing on an alternate machine then dropping the drive in, but it'll definitely run.
In all fairness, OpenBSD and NetBSD can likely accomplish this as well. I only named FreeBSD because I helped a friend set up a 6 meg system for his kids a few years back, and it performed admirably, despite the low clockspeed and tight memory.
It's easy to set up a tiny FreeBSD install. You can build a usable and full-featured kernel for your hardware in around 700k so you're not eating up half the memory with locked pages before you've actually done anything. You may have to step back a few versions to get the smallest kernel.
While X and all may take a little time to start up, FreeBSD performs exceptionally well under low memory situations. It does very little redundant copying, and tunes the swap and scheduling policies as the load increases to try and help keep interactive applications responding smoothly at the expense of some services.
Many of these features are now in the Linux kernel, but I don't know that it'll be too easy to pack them into a tiny kernel to maximize the amount of pageable memory for applications.
More and more people are getting broadband. Call me unimaginative but, in the long run, what would this scheme offer over downloadable software? I'm sure some people will still be lacking internet connections, but will it really be enough people to subsidize this form of software distribution?
I won't be overly specific, as many of my coworkers read Slashdot.
As a programmer though, the things where I've felt the best have been where we've pulled together as a team and delivered on something tough, where I've been in a more competitive environment and charged ahead of the other guys enough that it was clear who was top dog a while, and where I've had a tough problem thrown at me and been left with enough time to do some research and lay out a clean and elegant solution.
it's really tough to find an environment where you're working with good people who are all already dedicated. It's tough to enjoy competition in an environment where management aren't very clueful about measuring accomplishments, or are so touchy-feely that they won't vocalize that this guy's leagues ahead of that guy. And there's not much joy in constant-pressure environments where managment won't let you invest time in creating quality, reusable systems.
The team dedication and energy you can create yourself, if you spend some time on building relationships with the people around you and learning their skills. A good programmer knows who shares interest in what kind of problem, and can leverage that to get buy-in and support. I'm sure that's true in other kinds of work as well.
The second and the third, competition and deep work, are tough to create, unless you're willing to take charge yourself and rally coworkers around while still pushing credit for most things off on your manager so he doesn't stand in your way.
The folks who complain about their work the most tend to be the passive kind who are idly waiting for things to get interesting. That doesn't happen most places. You've got to create that if you want to be part of something big and interesting, or if it's really not possible to do that where you are, start figuring out how to get out.
Bochs will also emulate SMP machines. Bochs pretends to be an x86 machine with one or more processors, and runs on all Linux architectures, as well as Windows, Mac OS X and several BSDs.
It's no speed demon, but it's about the nicest free tool for machine-level debugging.
I didn't write it, obviously. But there's a security auditing tool called "satan" which probes a system for many known vulnerabilities. It was originally a black hat tool, as I understand it, but it was adopted by the white hat crowd for testing their own systems.
Now, many white hat folks are affiliated with businesses or other groups who don't take kindly to running something called "satan." It looks bad in the company reports, and some take personal offense. The solution?
Many releases came with a utility which simply moved the n up a bit, renaming the built executable as "santa.":)
That helps out with writing code, but the link names and the names you see in the debugger (gdb, VS6 and CodeWarrior at least) are still blown up.
Debugging heavily templatized code is thoroughly nasty. Names are mangled beyond recognition for anyone not using a 500 column display or lots of scroll bars. Stepping through code in the debugger often yields senseless results -- you often cannot see the source for the instructions being generated without manually tracing through the headers and looking for every overload and template body declaration. Templates thorougly ambiguate linker symbols. Templates slow compiles to a crawl, often adding tens or hundreds of thousands of lines to every inclusion of a given header in order to define the types it uses. With subtly improper use, templates can bloat code size astronimically and create horrendous execution bloat.
I don't know how many weeks I've lost to helping others debug or rewrite their code because they thought they would do something "clever" with templates and they ended up creating a maze. And bringing in third-party code with templatized interfaces has frequently required more time to debug and adapt than it would have taken to create the code anew.
If you're going to use templates, stick to simple container classes for now. Anything else should be considered theoretical research until the tools catch up. Let me repeat: development tools HAVE NOT CAUGHT UP WITH C++ TEMPLATES. There is no debugger available which makes templates as transparent as normal code, inline functions or even #defines.
And please save your first forray into templates for private projects. Don't inject your template experiments into code others are trying to use!
What software do you recommend for this? I'd like to run a test through and see how well it works out.
Seen nothing that's approached DVD qulity without going back up to MPEG data rates.
Maybe they didn't want the movie to look like it was being played through a bunch of grease-smeared glass blocks?
The one thing that really, really worked well on the Newtons was the font. As I remember it, the font was a slightly tweaked version of the old Mac system font, which was really wonderful for LCD use.
Maybe some sandpaper and a light touch and I could 'frost' the display...
I borrowed a Sony Clie for a while at a slightly higher resolution, and it made all the difference in the world.
For eBook use, one of the more popular applications for PDAs, you really need something more like the newer Sony Palm devices. This resolution isn't quite enough for crisp fonts (even with subpixel rendering) and it's small enough that most preformatted PDF/Web content still needs to scroll half a screen horizontally to be read at a legible magnification.
Can we please please see a Zaurus with a 360x480 display?
Yeah. But the Windows dudes brought the money. Missed again, Slashdot ha ha!
The default installer disk suggested 8mb, but worked with less. For a 4mb notebook, it might come down to installing on an alternate machine then dropping the drive in, but it'll definitely run.
400k compressed doesn't help. It still needs to be decompressed in order to be run.
In all fairness, OpenBSD and NetBSD can likely accomplish this as well. I only named FreeBSD because I helped a friend set up a 6 meg system for his kids a few years back, and it performed admirably, despite the low clockspeed and tight memory.
While X and all may take a little time to start up, FreeBSD performs exceptionally well under low memory situations. It does very little redundant copying, and tunes the swap and scheduling policies as the load increases to try and help keep interactive applications responding smoothly at the expense of some services.
Many of these features are now in the Linux kernel, but I don't know that it'll be too easy to pack them into a tiny kernel to maximize the amount of pageable memory for applications.
Please mod me down. I never get that done anymore.
We both got a +5 Funny today. It's a regular LOLocaust!
(...not to mention, having seen the kitchen, he was obviously allowed to peek inside!)
I'd think he would've said something about the toll booth in the driveway...
Begging your pardon, but I think you forgot the funny on this one.
More and more people are getting broadband. Call me unimaginative but, in the long run, what would this scheme offer over downloadable software? I'm sure some people will still be lacking internet connections, but will it really be enough people to subsidize this form of software distribution?
o/` Everybody wants prosthetic
foreheads on their real heads o/`
As a programmer though, the things where I've felt the best have been where we've pulled together as a team and delivered on something tough, where I've been in a more competitive environment and charged ahead of the other guys enough that it was clear who was top dog a while, and where I've had a tough problem thrown at me and been left with enough time to do some research and lay out a clean and elegant solution.
it's really tough to find an environment where you're working with good people who are all already dedicated. It's tough to enjoy competition in an environment where management aren't very clueful about measuring accomplishments, or are so touchy-feely that they won't vocalize that this guy's leagues ahead of that guy. And there's not much joy in constant-pressure environments where managment won't let you invest time in creating quality, reusable systems.
The team dedication and energy you can create yourself, if you spend some time on building relationships with the people around you and learning their skills. A good programmer knows who shares interest in what kind of problem, and can leverage that to get buy-in and support. I'm sure that's true in other kinds of work as well.
The second and the third, competition and deep work, are tough to create, unless you're willing to take charge yourself and rally coworkers around while still pushing credit for most things off on your manager so he doesn't stand in your way.
The folks who complain about their work the most tend to be the passive kind who are idly waiting for things to get interesting. That doesn't happen most places. You've got to create that if you want to be part of something big and interesting, or if it's really not possible to do that where you are, start figuring out how to get out.
Make it happen, dudes.
</ramble>
It's no speed demon, but it's about the nicest free tool for machine-level debugging.
Does anyone know if this, or another like it, will ever be available stateside with an ATX-mountable motherboard?
Now, many white hat folks are affiliated with businesses or other groups who don't take kindly to running something called "satan." It looks bad in the company reports, and some take personal offense. The solution?
Many releases came with a utility which simply moved the n up a bit, renaming the built executable as "santa." :)