There's nothing wrong with them HIDING! It's when they end up in positions
from which they can make decisions (or even obstructionist participation)
that problems happen. ("The Peter Principle") Folks promoted out of
positions where they HAD to be productive (worker bees) and INTO positions
where they are inevitably OBSTRUCTIVE (cuz they can't recognize the difference
between the hole in their *ss and the one in the ground in front of them!)
With bigger organizations, these folks seem to want to "be noticed"... made
to feel important (or, at least, "significant"). So, they get involved
in things for which they have no qualifications. Then, fall back on the
"I'm the boss" credential to ensure things stay f*cked up. All the while,
thinking of how they can hope for a change in events that will let
them shift the blame to someone/thing else.
I had a PHB who was visibly upset with me for stumbling on a problem in
a colleague's design. Catching it when I did saved the company several
months and several tens of kilobucks!
*But*, it meant the boss had to go in and report the problem to HIS boss,
TODAY! He couldn't wait for the 3rd party vendor to perhaps miss a delivery
date (that he could then use to rationalize the delay -- by obfuscating
the pertinent details).
Unfortunately, they'll still be on the list of approved vendors!
The more interesting issue is the apportioning of the incompetence
that is undoubtedly involved. Were the requirements too vague?
Too lofty? Or, was the execution flawed?
I was invited to bid on a nice, lucrative project, locally (most of my
clients have been remote so this would have been a blessing!). After
talking with the principal, it was immediately obvious that he:
- didn't understand his problem
- had already come up with an approach (that wouldn't work)
*If* he'd just stated his problem and was willing to sit back and
wait for a solution, it would have been a manageable (and profitable)
project. But, you just KNEW he was going to have his fingers in the
pie throughout -- then wonder why it was taking too long and costing
[I learned to avoid T&M jobs for exactly this reason; let me give you a fixed
cost quote -- then, it would be ludicrous of me to give you any say on
the design after accepting those terms!]
A local nonprofit has a serious data management problem. I formulated
a comprehensive, automated solution and presented the idea to the
"staff member responsible". It was a project that I would tackle
pro bono -- no skin off their back!
"No thanks! The Board approved $250,000 for the project and we've
hired a guy to do it."
So, a quarter of a megabuck later, they have an MSAccess database
and hired two full time staff who just sit and transcribe the
hundreds of forms that come in each week. And, they wonder why the
data is always suspect!
("How come last week's records are missing the data for Foo?" <shrug>
"I dunno. Maybe I deleted it, by accident?")
People don't "realize" what they don't "understand". Yet, blissfully
make decisions based on that misinformation. Then, end up with
"striped camels" instead of horses and wonder why they're so hard
I worked on a RFP a few months ago. The first thing I did was to list
the conflicting requirements plus some of the completely unfeasible
requests that weren't going to happen. It didn't make me too popular but
I wasn't going to sign off on the impossible.
Early in my career the company I worked for bid a project over the
advice of myself and the mechanical engineer. There was a requirement
for a 7 second cycle time but the VP said they didn't really mean it. We
got the cycle down to a reliable 15 seconds. The client said, 'That's
nice but we need 7 seconds'. Trying to find those 7 seconds was like
building a top fuel dragster. After you make your 4 second pass you
rebuild it. It got to the point where the said VP could look at a dial
indicator showing critical parts bending under stress and declare it
wasn't happening before trundling off for a few Rob Roys.
I'm still not shy about undertaking difficult projects but I try to
avoid the impossible. In real life the impossible doesn't take a little
I think (esp as a contractor) clients often float RFP's as a cheap way
to get someone to find the flaws in their ideas. Learning to recognize
when someone is looking for "free labor" (in the guise of soliciting
for a supplier!) is an important skill that is hard to acquire.
Often, the best bid is "No bid"! :>
In my career, the most enjoyable ones were always the ones where I *thought*
I could tackle it -- but wasn't quite *sure*!
Anything that I was *sure* of wasn't interesting (what's to learn from that?
I already KNOW how to do it so its just trading my time for your money -- I
can do that lots of different ways; why not find one that I'll consider
Anything that I know I couldn't do was just setting myself up for failure.
So, the sweet spot are those things that you *hope* you can do (with your
level of experience, tools, financial resources, level of dedication,
I'm convinced I will never "finish" my current project with the years I
have left on the planet -- there's no really "defined end". So, I can
expect to remain interested and engaged as long as I am capable of
being interested and engaged! Enjoy the mini-successes and accomplishments
along the way and let someone else enjoy the "finished" product (if they
can ever settle for some definition of "finished"!)
Mouse capabilities? You mean like the ability to highlight text and
paste it with a middle mouse click rather than Ctrl-C Ctrl-V? I switch
between Windows and Linux at work and that feature, along with the lack
of built in multiple desktops is the one I miss in Windows.
Windows has improved. I remember when you had to diddle with an
undocumented Registry setting just to get tab completion on the command
I think he means mice that can do things other than being a set of buttons
and an XY displacement source. E.g., press this button to get finer
grained positioning; press this other button to click-lock; etc.
But it's implemented inconsistently in X! I.e., try to copy from an
xterm to another -- paying attention to how whitespace is treated!
One of the power toys adds multiple/virtual desktops. And, many of
the multihead monitor cards drag in that sort of support as well.
I get annoyed because Windows tries to be smarter than me: I configure
three monitors with the center one as my main desktop (the desktop extended
off to the left and right on the other monitors). The thinking is that
if I only want to run with one monitor, I can use the center monitor
for that (power off the other two -- particularly useful in the Summer
But, powering down a monitor causes the desktop to be reshuffled -- anything
that was on the powered down monitor gets moved onto the remaining monitors
(no doubt as an AID for me!). So, I have to reshuffle my desktop if I
don't want to use all three monitors (I would be content to leave whatever
was on the powered down monitor where it is and just not access it! Or,
access it via a miniature version of the virtual screen -- dragging the
tiny outline of the window onto the center monitor!)
I don't understand the problem.
I run an X server on each of my machines so I can work on the UN*X boxen
"as convenient". I can size the X desktop to be as large as I like and
span monitors readily.
[I've not checked to see how this behaves when I power off a monitor as
I mentioned up-thread; I imagine it just moves the X server's window onto
the remaining monitor(s) and lets some part of it "extend past the edge of
What are you (they) using for your (windows hosted) X Server?
[I'm currently debating replacing my Neoware X terminals with something
home grown; yet another example of a supplier using FOSS software
(NeoLinux) and not making the sources available -- so I could FIX the
problems instead of rolling my own!]
It was Mortice Kern Systems (MKS) before PTC bought them for another
product and inherited the XServer and Toolkit. The bulk of our code
dates back to the AIX days and builds and runs on both Linux and
Windows. IBM priced their way out of the market with the RS6000 boxes so
everyone has went to Windows. I think we still have a couple of RS6000
boxes but whether they would boot is a good question.
Legacy is grand.
Ah! I think I have an old version of the toolkit archived here.
Yeah, my SPARCstation LX got to that point. It was frustrating to "set it
free" as I had really maxed it out. But, at 50MHz, it was too pokey to
hang onto. (OTOH, I kept my Voyager which wasn't much faster at 60MHz!)
I think it is an interesting aspect of technology.
I know what it costs me (effort/time/money) to maintain my legacy
"investments". OTOH, I only have to answer to myself; if I want
to replace/upgrade, I don't have to make a case to my employer,
stockholders, customers, etc.
I've a colleague who does IT for a multimillion dollar enterprise, here.
It is "educational" (for want of a better word) to watch how he pieces
together solutions to leverage the existing software/hardware infrastructure.
He's always squirreling away big iron that he comes across as getting
spares for his existing systems is virtually impossible.
He clearly could never tackle replacing everything; the effort and
cost would be prohibitive (cheaper to sell the business and let that be
someone else's "surprise"! :> ). They might end up with a cleaner
implelmentation -- but business would grind to a halt for many years
while the upgrade was being created (i.e., the IT would be frozen
while it was reimplemented anew).
I often muse over where the "drop dead" point might be... when he'll
be faced with a challenge that he can't cobble into his existing
implementation. And, whether he will, at that time, propose the
complete overhaul; or, yet another kludge to ALMOST upgrade...
[Kinda like a plumber repeatedly patching a leak... when does
he give up and tell the homeowner major repairs are in order?]
That's the problem with legacy software -- you do need to make a case to
move on. Not many industries come with that long a trail. Another
programmer and myself are hacking out the next generation that will
depart from the old code base. It's been a long project, mostly
examining to competing technologies. We're well aware we're laying the
groundwork for the next legacy. flash forward to 2031: what idiot ever
decided C# was a good idea? We still need to use Visual Studio 2025 to
build the crap.
Yes. And "software inertia" is REALLY hard to overcome as it costs so
Good that you are aware of that! I was completely stumped by the whole
Y2K thing: "How could people NOT realize the '19' would be changing to
a '20'?" Likewise: "How can people NOT realize the upcoming rollover
in 2038?" Yeah, this *product* might not survive to that date but
the *code*/algorithm will! It would be like designing a math library
that magically stops working due to some FORESEEABLE event...
I spent a lot of time thinking about my build environment. I've got a *huge*
code base (my RTOS alone is a bigger piece of software than most folks
would write in their entire career!). Not only do I have to worry about
what hardware it will run on but also whether the tools will remain viable
as well as the hosting environment.
My solution was to adopt technologies that are all open source -- so I
can archive the sources for the tools themselves instead of having to
archive *just* binaries (which will only run on a particular OS -- which
means the binaries for the OS would have to be archived; which would only
run on a particular hardware platform -- which means archiving the
hardware platform; etc.)
And, the incentive to document the hell out of things -- the design is the
biggest portion of a project ("coding" is just a tiny portion). Much less
effort building a house from a plan than setting out with a hammer and some
nails and a "dream" :-/
I did most of our Y2K fixes. iirc there was nothing fatal and most of it
would have been display annoyances like
sprintf(year, "19%02d", tm.tm_year);
We had a crew in the office on New Year's Eve and I was on call. I went
to the First Night festivities and when the Ed Norton Big Band broke
into 'Auld Lang Syne' without the lights going out I figured I could go
home and go to bed. I missed the free pizza.
The one hack that's still there is age calculations. Typically the
dispatchers enter 052016 for DOB. If they put 052019 we assume they
busted a real old fart. I can live with that. I was amused a couple of
weeks ago when some 103 year old woman got a notice about pre-school
registration and immediately knew what that bug was.
In the media hype leading up to the "(non) event", I got calls from old
clients wondering if they'd have any problems with the products I'd designed
for them. It was amusing cuz they'd always bring it up really casually...
as if they didn't want to seem panicked. My policy has always been that
bugfixes are free so they knew any problems would come out of "my pocket".
Yet, all seemed stunned when I could confidently respond "No problems"...
without even LOOKING through the code! In hindsight, I probably should
have handled this more diplomatically: "Gee, Bob, let me get back to
you on that! I'm pretty sure there's nothing to worry about -- but,
let me dig through your sources and make sure that's the case..."
Then, a day/week/month later, call them back and reassure them that
there were, in fact, no problems!
I saw a device report the year as 19A0 (which gave me pause until I
thought about how they'd obviously implemented it).
In my case, my code was in "devices". So, patching the code would
easily cost a LOT of money. EPROMs, masked ROMs, MCU's, etc. It wasn't
like I could just "download" an update to all of those devices.
And, at the same time, you had folks worrying that the mechanism on some 3
ton piece of equipment would suddenly sieze up and kill its operator.
I've seen similar screwups.
Once recived a nasty letter from my bank threatening to withhold 10% (?)
of my interest (IRS) because they didn't have my SSN on file. Despite
the fact that it was printed at the top of the form they mailed me!
A week or two ago, received some promotional material from Acura dealer
suggesting we trade in our (fill in the blank) _2016 RDX_ for a new 2016 RDX!
Always fun to imagine how some dweeb made a stupid error of assumption!
That was the beginning of the end for our RS6000 sites. I forget all the
details but the older RS6000 boxes couldn't run the newer AIX versions
that IBM patched for Y2K. When the sticker shock for new RS6000 boxes
set in people started thinking "I could buy one hell of a Windows server
I think a lot depends on who gets to make the buying decision.
You spend money for THIS... or for THAT.
I've worked for lots of different companies/clients with different
management backgrounds: engineers, finance people, even *dentists*
(marketing electronic devices). It is interesting to see how they
approach decisions regarding "investments", make/buy tradeoffs,
I think the *worst* one are engineers! There's too much temptation to
DIY things -- things that often should be purchased or even passed over!
In my current project, I am continually aware of this as I don't have to answer
to anyone. It's too easy to fall for the Siren's Song. OTOH, I *do* want to
see results -- in MY lifetime! :> So, regardless of how deep the pockets
might be and how interesting the technology, there's an eventual limit on
the calendar... (it would be nice if I KNEW what that limit was!)
I had a client that was heavily into NIH mode. At the time the woods
were full of competing Z80/8080 buses and cards for industrial control
systems like the STD but they wanted their own and I was happy to oblige.
You have to train the engineers right :) DEC salted the colleges heavily
with their equipment. When the young engineer gets out in the real world
and starts politicing for equipment, what's he going to advocate? Then
there was Unix during the period where you couldn't exactly buy it. Half
of Boston was running an OS that fell off the back of a truck someplace.
M$ did that with the $99 academic versions of Visual Studio. Lately
they've expanded that with the Express and Community editions. Get them
hooked and they'll be begging the boss to buy the Enterprise package.
Our MSDN just came up for renewal and they've changed the game a bit.
You can still buy the full meal deal but I saw in the pricing matrix
that you can also rent it for $45/month. They're easing the world int
the new model.
The opposite is true -- worse -- now. All these little "stamps", arduino, rpi,
etc. Folks seem to think all they need to do is buy a premade board and
they're all done!
Until they discover that the board doesn't come with controls suitable for
driving a fractional HP motor. "Ah, but we can buy a daughter card to
handle that!" Then, they realize the daughter card has no provisions for
a safety interlock to shut down the motor (even if the CPU is crashed)
before the mechanism that it is driving crashes into its stops. "Ah, we can
And, when they're done, they look at this hodgepodge of cards glued together
and realize they have a $300 solution -- based on a $10 CPU board. "Hmmm...
maybe we can layout our own board and combine all of these?" (Yeah, *if*
you had the expertise to do that to start with...)
I have a colleague who has built all of his development tools! Incredibly
impressive -- his own OS, his own window system, his own compilers, etc.
But, I'd rather BUY that than MAKE it. OTOH, I have to roll my own RTOS
because there's nothing available "at any price" that can do what I want
(and need) done.
Yup. At Athena, you had your own *personal* VAX! When the rest of the world
was struggling to afford $5K "XT's" with a whopping 128K of RAM and a
single-tasking "toy" OS!
Many vendors (including apps) have taken the same approach. The
more specialized the knowledge required to operate a tool, the
bigger the payoff for presalting the future employee pool!
If someone can learn how to use vendor X's product offering
in a few days, then there's not much value to the prior experience
he may have had with vendor Y!
OTOH, if it takes thousands of hours to become proficient, then
there's a big incentive to drawing on that pool of EXPERIENCED
users instead of trying to reeducate them for some other tool
(because someone at your firm flipped a coin and chose Y over X)
I ran OpusV (AT&T w/ BSD extensions) on an Opus 110PM (later, more advanced
models from the product line) in the mid 80's *in* my 386. A fairly zippy
system (currently have it running in a Compaq Portable 386 as the PM is
Most of the OS's in school (other than MULTICS or TOPS-10) were little
one-of-a-kind works that professors had written and deployed on
whatever hardware they could scrounge for their classes. I.e., each
class ran on different hardware, OS, languages, etc. It wasn't like
you could use the tools from class A to work on a project for class B
(and you had to walk *to* wherever the machines/terminals for that
class happened to be physically located!)
In the early 80's, JRT Pascal tried the same approach -- $29.95 Pascal
compiler. They couldn't make/ship them fast enough! (literally, they
went belly up from the popularity) And, it was cheap enough that you'd
just buy it to get a hard copy of the manual (how much is your time
worth to xerox a manual??)
Yup. MS is slow to the party. But, you can bet your *ss they're not going
to miss out! Great time to be squirreling away everything that is precious
and rethinking which path you want to follow, going forward!
[What happens when you "leave" the community -- and then have to come
back at some future date to support some legacy product? What if the
"old tools" are no longer available for use?]
I missed that one. I'm not a Pascal fan but when TurboPascal came out I
dropped the $50 out of curiosity. I was using Zolman's BDS C on CP/M and
when I did the obligatory Hello World with Turbo my first thought was
something had went wrong, it couldn't have compiled and linked that fast.
Later I used the Borland C++ compiler and IDE with OWL. I preferred it
to MS but by Visual Studio 1.5 the race was just about over. That whole
period wasn't exactly a highpoint. I'm not a big C++ fan. It was a
premature birth without real libraries so MS invented their own, along
with their Hungarian notation style. I still have some older ArcObjects
C++ code but I've moved on to C# as well as plain old C for speed. I'll
leave 'Modern C++' to the kids.
There was that brief blip for C++ when MS was pushing WinRT but that
seems to history along with Windows 8, Sinofsky, and Ballmer. The final
nail was when MS bought Xamarin.
Yeah, I have a copy of the v3.0 manual still on the shelf (as a language
reference) -- alongside Wirth's 2nd ed.
Yup. I had an old 512KB CP/M (ZCPR3) box that would run like greased
lightning (use the large RAM as a disk cache or a semiconductor disk).
For most 64K machines, the speed of secondary storage was the limiting
factor as most compiler/assemblers/etc. were multi-pass -- not smart
enough to tackle everything in a *single* pass! (even with restrictions
on forward references, etc.)
Yup. I have the "two tone" volumes on the shelf above the Pascal texts
(things are sorted in alphabetical order by language name). Ditto
for Pascal with Objects, etc. (I've purchased a LOT of software over
I still have a copy of Borland 5.0 on one of the laptops. I use it
as a glorified lint(1) when I'm traveling (if it doesn't compile
under EVERY compiler, then I must have a syntax error, someplace)
The idea of object-based designs is a good one. But, I'm not sure that
you need an object-oriented language to accomplish that!
E.g., my current system is object based -- but written primarily in C.
Each object has a "handle" managed by the RTOS. You invoke operations
(methods) on the handle by giving the handle and the operation information
to the RTOS. It then dispatches the operation, on your behalf, to whatever
"active entity" (process) manages that particular instance of that particular
type of object. (I.e., the "object" may "reside" somewhere else in the
physical system; you don't care!)
Hungarian notation. Yet another stupid idea. Like walking around
with name tags that say manDonY, motorcyleHarley, gasstationCitgo, etc.
I was reading one of Stroustrup's texts some years ago. Got to a
discussion regarding pre/port in/decrement operators. Read the page
two or three times wondering "what am I missing here? this seems entirely
WRONG -- yet, it can't be! It's so simple and this is coming from the
I eventually wrote him, head bowed in humble respect, begging for
enlightenment. "What am I *missing* in your description? It seems
completely WRONG -- forgive my insolence..."
His reply: "Because it IS completely wrong! I'll have to fix that
in the next edition..."
I figure if the acknowledged expert can't get the *simple* things right,
then I haven't a chance!
(If you think C++ bad, look at Ada! One of those things where they want
you to invest your career in it -- so you never can afford to walk away
MS keeps wanting to have things their own way. Without ever making
any commitment to keeping them that way! It would be like someone
deciding that ints should be 37 bits, henceforth. Then, in the next
release, realizing that this was a bad idea and that 28 bits would be
much better -- and, giving you glue libraries to fixup all such
I left MS's tools at VC++ 1.0. I had found a bug in C++ 7 (or whatever
predated VC++) and, rather than give me a fix, they offered to sell
me the new product at the bargain $99 price!
"No thanks. I think I'll find another development environment..."
I left Wirth's book somewhere along the way. When I moved from NH I gave
most of my development boards, documentation, computers and so forth to
a high school teacher who was trying to get a computer lab going.
At the time the University of Maine used Pascal as a didactic language,
which was its true calling. The best description I've heard was 'a
language that specializes in telling secrets to itself since there is no
i/o.' Sprague's tantalum capacitor operation in southern Maine tended to
hire out of UM. Kept me in work writing drivers so they could happily
program in Pascal and interface to real test equipment.
Our architecture is based on a number of objects -- and it's all C. I
haven't read Stroustrup's latest edition but the early one I have looks
a lot like C, snake_case and all, with classes used very sparingly. I
blame some of what it turned into on academics. 'Here we have the Animal
class. The Dog and Cat class inherit from Animal, but we'll override
speak() so Cat says meow and dog says woof.' I don't know how many
hideous class architectures I've seen because someone figured since it
was C++ everything had to be a class.
We've had a few koolAid drinkers in the past. The most notorious is an
mostly obsolete map program. There are literally variables like theMap,
thePixel, theSegment. It's good for a chuckle. When I'm doing
maintenance work I try to maintain the original style as much as
possible but sometimes I just can bring myself to do it.
I never nibbled on that hook. I remember the Boston Globe Sunday ads
from companies looking for programmers with two years Ada experience --
before there was a working Ada compiler. Got to love HR drones. The bait
smelled familiar. I had bad memories of the subtly named Programming
We thought long and hard about WPF. It doesn't give you confidence when
MS took SilverLight and WinForms out behind the barn and shot them. At
figuring that wasn't going away.
Even with WPF we're going to go to great pains to make sure the view
stays the view.
That was my first go around with ATL. I thought it was a shortcoming on
my part but, no, it was a bug in the ATL code.
HomeOwnersHub.com is a website for homeowners and building and maintenance pros. It is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.