This just in from the New York Times:
Essentially, A.D.H.D. is a problem dealing with the menial work of daily life, the tedium involved in many school situations and 9-to-5 jobs.
So, the problem isn't the 5-15% of the population that can't focus without their daily recommended dose of Focusin, but the 5-15% of the population that has the ominous sounding, complementary problem, attention surplus disorder. Those nimrods (or do I mean "we nimrods"?) are quite happy working in a knowledge based economy that requires deep focus for prolonged periods of time. Everyone else is just fidgety because they haven't found those few things they like to focus on (until they are medicated to make them differently abnormal).
A few people have been posting questions to the SQLite mailing list about how to make a cash donation to the project. Here is D. Richard Hipp's response:
There is no mechanism set up to "donate" to SQLite as there
is with other open-source projects. If you want to donate
something, please make a donation in honor of SQLite to a
charity of your choice.
A good idea, simply put. One more reason to admire this gentleman.
Here is an incident from $WORK that happens at least once a month these days. It's very annoying.
It starts when the network admin staff sends an email that they will be pushing a Windows patch to all desktop machines in a few days. That's not horrible. Every networked system has some security holes somewhere that need to be patched (once the patches are available). And at least Windows admins can automate installation so we never have to repeat the visit-every-PC-in-the-building process that was too common in the mid 90s.
And, yes, while Windows sucks eggs, it meets the four minimum criteria that any operating system must meet before being work ready:
The next step is when the patches are installed, usually at noon, a couple of days after the warning email was sent out.
The next step is the helpful dialog box that alerts me that the machine must be rebooted. If I do nothing, the machine will automagically reboot in 12 hours (and counting). This dialog pops up periodically to remind me I really need to reboot, and presents me two buttons: hide and reboot. (The default button is Hide, thankfully enough.)
Now that the machine has been updated, and the reboot countdown started, the "you must reboot" dialog box, once hidden, will reappear at random intervals throughout the rest of the afternoon. Just to be extra thoughtful, this dialog always pops up on top of all other open windows.
Of course, the very next thing that happens, after being hidden for some random interval of time, the dialog pops up on top of all other windows, while you just happen to be typing the letter r. Naturally, you must be ready to reboot. Forget the fact that you have a dozen windows open and various tests and unsaved work in Firefox.
In user interface design circles, this is known as being "as useful as a rusty nail in the eye." Sheesh!
This feature alone is sufficient cause to use any other operating system that meets the four criteria listed above to do Real Work at the office.
We all know about Duck Typing (if it walks like a duck, and talks like a duck, then it's probably a duck). Works fine most of the time with dynamic objects (in Perl, Ruby, Python, etc.). Also used as a defense against big up front static compilation regimes (in C++, Java, etc.) that claim to help you from making type errors by catching them early (but actually give you more stuff to type, since you're always using casts to turn off the type checks every line or three).
Dave Herman has a new take on the situation - Nancy typing. In typical lispnik fashion, Dave is picking on Perl's DWIMery in this example:
In some cases, the heuristics for conversion are arguably relatively clear, but sometimes the language is so eager to find some way to make the operation consistent rather than simply give an error (and force the programmer to be more explicit) that extremely bizarre and unpredictable behavior ensues. [...]
[E]very once in a while, the system reported a false positive[...]. And it just so happened that in each one of these cases, the name in the record was "Nancy." The explanation is that the programmer had accidentally used the numeric equality operation, rather than string equality.
Yep. "Every" name numifies to 0, except for Nancy, who numifies to NAN. Everyone is thus numerically equivalent to everyone else, except for Nancy, who is numerically equivalent to no one (including herself).
Whoops. That's a, um, rather interesting form of silent failure. If you're wearing your Lispy hat today, you can extrapolate this into a proof that duck typing fails thanks to dear old Nancy.
The rest of you can take this opportunity to add dear old Nancy to your smoke tests.
Update: This bug exists in 5.6.0/5.6.1, but is fixed as of 5.8.0. So you can either worry about Nancy, or just upgrade to a reasonable version of Perl.
A quick cheat-sheet on the various forms of database normalization
First Normal Form (1NF): No multivalued fields. Example: No such column like programming_languages_used containing the value Perl, C. Similarly, a tuple like project; programming_language_1; programming_language_2 is also avoided.
Second Normal Form (2NF): A unique key identifies each tuple value (row) in each relation (table).
Third Normal Form (3NF): Data is not duplicated across relations (tables). Example: store customer information and order information separately; do not repeat customer information across a table of users, orders, wishlists, shopping carts, etc.
Fourth Normal Form (4NF): No complicated multivalue dependencies. Example: if an employee may have one or more certifications, and a may attend one or more training classes, store these relationships separately. A tuple that combines employee_id, certification_id, and training_class_id is bad. Instead, two tuples should be stored, one relating employee_id to certification_id, and one relating employee_id to training_class_id.
Fifth Normal Form (5NF): All joins are in 4NF. (See example for details, implications for duplicate elimination, and associated benefits.)
Sixth Normal Form (6NF): A database in 5NF that extends 5NF characteristics into a temporal dimension. Possible example: a data warehouse that archives activity quarterly, and gathers the current quarter's activity along with the most recent previous 3 quarters of archived activity to produce a set of results over the last 12 months.
Here are a few points to keep in mind.
We now return you to your regularly scheduled Friday Morning armchair quaterbacking.
If you had a multi-billion dollar software company, where would you spend your research money?
Oh, and they're hiring. Brainiacs only, please.
It's official. Oracle has purchased Sleepycat, makers of BerkeleyDB.
(I wonder what other open source databases are left for Oracle to buy...)
The long and short of it is that Motorola's business is focused on CPUs for embedded systems (which need low power consumption more than they need more MHz or GFLOPs), and IBM's CPU business is quickly migrating towards game consoles (where Apple's demands are a drop in the bucket, compared to what Nintendo, the XBox and Playstation gobble up).
In the end, if Apple is in the business of building desktops, laptops and servers, it needs a CPU manufacturer that's aligned to those markets. Which leaves two vendors and one platform: x86.
Interestingly, Microsoft's actions to use a 3-core PPC from IBM for the XBox may have accelerated the demise of the Apple/IBM relationship. Surely this will surface soon among the conspiracy-minded Mac faithful, but realistically, it's just an indication that the high tech is a rat's nest of relationships, where everyone is simultaneously your closest partner and fiercest rival.
I'm working on a project of a certain vintage, and of a certain age, that uses upwards of five programming languages to get stuff done. Annoying, but nowhere near uncommon. (There's a story about how JScheme is included in the JDK sources, because the code to generate CORBA classes for Java are written in Scheme...)
Luckily for me, I had a feature to add that traces through most of those languages all at once: Haskell -> Tcl -> XSLT -> Tcl. (The Perly bits form the backend system, not the frontend runtime components.) Thankfully, it was a simple fix: add wordbreak barriers around a regex being output from a Haskell program and sent upstream to heaven knows where.
Should be simple, right? Just replace "..." with "\\b(...)\\b", or some variant thereof. Easy peasy.
Except that the \b metacharacter is Perl syntax, and the regex isn't going to be processed by Perl. At one point, I though that this regex was going to be processed by a component written in C, using the GNU Regex library. Turns out that Perl, GNU Regex and PCRE all agree that \b is a word boundary. (POSIX regexes don't appear to know what a word boundary is...)
Yet none of the standard regex magic was working. Tracing through the code, I discovered that Tcl's regex engine was the one being used (by way of XSLT; about as convenient as a direct flight from Sydney to New York by way of Mars).
Looking over Tcl's regex docs, it turns out that \b is a backspace character!
Because matching backspace characters is such a common operation within a regex, Tcl preserves the C-style escape for \b, and uses \y for word boundaries.
WHAT ON EARTH WERE THEY THINKING?