Biomorphic Software
CowboyRobot writes "From the molecular structure of spiders' silk to the efficient use of energy by insects and fish, we can learn many things from Nature and apply them to our engineering tasks.
One thing that nature is particularly good at is the development of dynamic, self-organizing systems.
Ken Lodding is a software engineer at NASA and is currently developing 'swarm algorithms for groups of wind-driven, remote exploratory vehicles'.
He has a six-page article at Queue on 'biologically inspired computing', how to develop 'algorithmic design concepts distilled from biological systems, or processes.'"
You know, you really got my curiosity. You put me on your foes list yesterday, and I've never even talked with you. Weird. "I wonder who this joker is?" I say to myself. So, I go find out. I find out that not only are you NOT a /. troll, you even work in the same geographical area as me. We work within about 10 miles of each other. So, I go read some of your other stuff. I'm curious and I can't help myself. I keep wondering why a reasonable and intelligent guy would bother to make me into a foe.
So, I go tripping through some of the stuff you have out there for work. Then I figured it out. In particular, I don't think you liked the following comment I made in this post:
If Mr. Sowell truly wants a simplified experience he should just go use Apple products, which are already dumbed down and streamlined. But he should be prepared to shell out the extra cash to support Apple's entirely proprietary architectures.
I'm reasonably certain that's the comment that earned your ire based on the kinds of projects I see you have on the web site. It's understandable.
So, let me correct myself:
1. While Apple products probably deserve to be called streamlined, I did go a bit far in calling them dumbed down. I wasn't thinking when I said that, and I was allowing myself to play the stereotype without examining it. The last time I used a Mac was in about 1995, so my impressions of it are out of date and irrelevant by now.
2. Apple's DOES have a proprietary architecture in the sense that I have to buy their hardware to run their OS. There just no denying that. I would be all over OS X if I could run it on x86 and other machine architectures and I didn't have to buy their hardware to use it. Even Microsoft doesn't have as much control over my computing environment as does Apple.
3. HOWEVER, Apple is most definitely not proprietary by virtue of their new OS architecture. You know far more about this than I, but even I can appreciate how having a Unix-like OS under the hood allows a lot of cross-over to and from the open source world.
FWIW - I didn't start out liking Windows and I don't particularly like what Microsoft does in the name of competition. I was a die hard Amiga lover when I hit the marketplace and I spent 5 years in the market hating the tools I needed to use for my employers before the tools were at least high enough quality to make stop missing the Amiga. I suppose OS X would, given its quality today, spoil me again and again make me dissatisfied with Windows. But I'm not sure I can afford that now.
I don't know what I'm trying to accomplish here. I really don't care if you keep me on your foes list. But, I do hate it when I stick my foot in my mouth. I like to correct myself when I do that. Your opinion of me may not change because of this, but I've done what I can to correct myself.
Peace.
Please mod this post only if you think others should/n't read this. I have enough ego^H^H^Hkarma. Thanks!
It's worth noting that I never said you couldn't. I said it was HARD. If you look farther up the thread, I reiterated this point.
Why is it hard ? Open Visual Studio, make one or more DLL projects, then use these DLLs from the main project according to what you want to do. Making a DLL is nothing more than pressing a few buttons anyway.
10ms res on 2000/XP
Where did you read that? Windows NT provides 1 milisecond resolution. 10 milliseconds is the default timer interrupt granularity. By using the function 'timeBeginPeriod' the resolution can be set to 1 millisecond. Here is an example.
Furthermore, all waitable functions are guarranteed to return at 1-millisecond resolutions (even 'Sleep()'). I have personal experience with this, as I have used the waitable timer functions in many projects.
Finally, Windows have a hidden API ('NtSetTimerResolution') that you can set the timer resolution in nanoseconds. This is kernel stuff, though. And for profiling, you can't beat 'QueryPerformanceCounter' which returns number of clock ticks passed via the RTDSC instruction.
Most Unix systems have a hi-res timer that dives down to the nanosecond range
Which Unix systems are that ? Linux, for example, also starts with a 10 ms granularity, just like Windows (the link above actually saids that any granularity below 10 ms will result in degrading performance on Intel systems). High resolution POSIX timers is a kernel patch, and it is mostly offered in the context or real-time Linux systems.
Solaris also starts with a 10 ms granularity that can be adjusted. Solaris also offers a timer solution based on CPU timer instruction (RTDSC on 80x86).
OS X, not running on the Intel platform, has the benefit of not having the interrupt limitations of Windows, Linux and Solaris on 80x86.
You mean the documents that say "this timer is not actually accurate and is only useful in certain situations", or do you mean the documents that say "the resolution of this timer is dependent on how many processors are in the system".
The "this timer is not actually accurate and is only useful in certain situations" is valid for 'SetTimer' which sets a timer event for a window. This is because timer events are dispatched on the gui message queue.
The "the resolution of this timer is dependent on how many processors are in the system" is valid for all operating systems running on multiprocessor computers. Google it out, if you don't believe me.
Sorry, as far as the industry is concerned, Windows timing blows. Just about every other OS does a better job.
I've shown you that you overreact concerning Windows timers. The 80x86 platform has an archaic interrupt architecture, and that's where the problem is. And this problem concerns all systems, Windows or Unix, running on 80x86. Windows on Alpha have an 1-ms granularity, by default.
There are solutions though to overcome the problems. A nice solution is to use critical sections (that take nano seconds to lock/unlock) and 'QueryPerformanceCounter'). If you search the web, you can even find MFC-based classes for this.