Is a Computer Science Degree Worth Getting Anymore?
However, I stay clear of Java or Visual Studio only people. They have a truly warped and unrepairable mindset.
Stay clear of anyone who is [anything]-only.
Anyone who will only use one language will warp all problems to that language -- and worse, warp all solutions to only those that they don't have to think about. It doesn't matter if the language is Java, C#, C++, C, Perl, Python, Ruby, or COBOL. If they are only willing to code in one language, let them go.
Nearly every accredited university offers "language survey" courses. This is where a CS degree can be useful -- the graduates have, in theory, been exposed to other languages. Bring this up in the interview. See if they can articulate the tradeoffs of various languages.
Entirely-self-taught developers often require a lot of basic remedial training. I'd suggest investing in them only if they will spend their evenings completing a CS degree. For an intelligent and skilled person, this isn't terribly difficult. The ones to be careful with are the "Meh, I can't be bothered to obtain/complete a degree." types. They might be intelligent, and they might be skilled. But their ego is going to make a lot of work for everyone else, as that can't-be-bothered attitude is a sign.
(Yes, there are lots of people who could only possibly succeed in an academic environment where the problem is carefully structured to be completed in five weeks by a mediocre and distracted person. This is where "what do you do in your free time?" comes in useful. One of the best teams I've ever worked on had "What are the last three books you've read for pleasure, and when?" as a key interview question.)
As for the 10% effect ... Sturgeon's Law.
San Diego's Fireworks Show Over In 15 Seconds
They can see an artistically choreographed fireworks show next year. They probably saw one last year. Around here they do one every Thursday, all summer. How often do you get to see what happens when all the fireworks go off at once?
Every night during the summer SeaWorld has a fireworks show at 9:45.
The only good reason to complain about this is if you didn't catch it.
You'd Think I'd Learn
And yet, nevertheless, I get near-daily email from Amazon to the email address I provided only to Amazon, offering to sell me things I don't want or need.
Do I assume it's personal? Perhaps I annoyed someone at Amazon at some time in the past...
(That's actually too paranoid, even for me.)
On Tipping (in the USA)
If this is how you wield power, I shudder what would happen if you ever get to a position with real power.
Quite well, obviously.
People who don't do their job get mildly penalized. People who do their job well get rewarded. People who do the bare minimum are neither penalized nor rewarded. It's fair, it's more-or-less standardized, it applies pressure instead of going over the top, and it scales. This is the essence of a meritocracy.
It avoid the negative feedback loop of a customer making a fuss and calling over the manager for substandard service (which would demoralize the employee and result in continued substandard performance). It avoid penalizing the entire establishment for hiring inexperienced staff (as not ever returning would). It avoids setting up a system of entitlement (which kills the drive to do well for a fraction of the populace needs an incentive to do a good job).
How is this not an ideal exercise of power?
Tesla Delivers First Batch of Model S Electric Sedans
The thought might occur, and has occurred to many, but that doesn't make it useful. :)
Typically, on-ramps aren't all of the cloverleaf design - there is an intersection where the on/off ramp meets with the cross-road, and a stop sign or stoplight at the intersection. (Even on-ramps *with* a cloverleaf design often have drivers in heavy squishy-suspension vehicles slowing down traffic behind them to ~10mph, with the resulting excitement. Such driver+vehicles aren't all that uncommon, alas.)
And then there are the congestion-control lights, which are typically put *on* the on-ramp itself, with a little sign indicating that 1 or 2 cars can go when the light turns green. (There are sensors to count how many cars *actually* go through, and whether or not the light was green at the time. They track these things quite carefully.)
"Fixing" such things would be more than what a traffic engineer could manage; businesses and/or employees would have to be relocated to better control the flow of people from one place to another, which has its own huge set of downsides. Engineering-wise, it's a bad tradeoff.
Tesla Delivers First Batch of Model S Electric Sedans
Why the hell do people obsess about 0-60 time? How often do you ever accelerate flat out from 0 to 60?
Freeway on-ramps. I average a half-dozen times a day when I put the foot down and shift > 5k rpm.
Now whether or not that's a good idea is another thing, perhaps worthy of discussion. If we all drove VW microbuses then I imagine we'd not care so much about acceleration or top speeds.
But as it is, our expectations have been set. Given that air resistance is such a big factor, we could probably greatly extend the max distance simply by setting 25mph as a maximum speed for all vehicles -- but it would then take me over an hour to get to work, which is a change I wouldn't be happy with at all.
Tesla Delivers First Batch of Model S Electric Sedans
I would buy this car even if gas was $2/gal. Someone has to eat the R&D costs for the price to drop for everyone else.
And THAT, boys and girls, is how a responsible adult justifies buying this sort of vehicle.
Tesla Delivers First Batch of Model S Electric Sedans
Doesn't matter, if you are buying one of these to save money, you are making a mistake. If you are buying on of these to save the environment, you'd be better off buying a Honda Civic and spending the $30,000 planting trees or something.
It is amazing how many people don't actually bother to do the math before buying an electric or hybrid vehicle. They may pretend to do the math, but then add in an undefined fudge factor big enough to "fix" the problem, hiding it behind assertions of "it's obvious".
It's not that it's a bad idea to buy these sorts of cars. It's just annoying to hear someone blather about how much money they're (going to be) saving when one has done the math and they haven't.
Then again, I keep a "stupid little book", so I know *exactly* what the TCO is for my vehicles. Most people don't bother, and so they need to wave their hands a lot and go by "gut feeling", so it's no wonder that they get the math wrong. They don't have actual data.
On Tipping (in the USA)
Good point about obligations.
I don't see cash as making boorish behavior pleasant. I see avoiding boorish behavior entirely as a better place to start.
Thinking on it, it's like kindergarten lessons:
When you ask for something, say "please".
When you are given something, say "thank you".
It's never appropriate to throw a temper tantrum.
Smile at people.
No hitting, yelling, shouting, screaming, or making a mess.
Don't be grumpy on the outside.
Always be ready to help, but don't get in the way if help isn't wanted.
Basically.... all the stuff we should be doing *anyway* when interacting with other people.
History books can be fun (but usually aren't and this is a Bad Thing)
I quite enjoyed _Lies My Teacher Told Me_ (James Loewen).
On Tipping (in the USA)
I am indeed entitled to a meal without putting up with hostile staff, substandard food, or unprofessional service. Why? Because I am *paying* for it.
With. Actual. Money. That. I. Earned. Myself.
I understand how the restaurant business works in North America. I have had it explained to me at length by some very passionate people. Some of the harshest judges of service are my friends who've actually worked as waitresses. They'll ding the tip *and* chew out the staff if the plates are cleared away incorrectly, a sin I can't even comprehend. To them, my heuristic is weak, pathetic, and amusingly non-confrontational. (And other friends who are just as passionate about generously tipping, no matter how bad the service. To them, my heuristic is cold and stingy.)
What astonishes me about your position is how the burden of respect falls entirely on me, the paying customer, and not at all on the person to whom I am giving money to. At a minimum, it should be an equal and mutual respect, should it not?
If the corporate headquarters are indeed as callous to the conditions that result in my having an unpleasant experience, then those chains need to go out of business. If my comfort, and the comfort of the staff, is as meaningless as you imply, the sooner that chain goes out of business the better.
Then there's a remote chance they can be replaced by something that doesn't suck quite so much.
I also infer that there's a suspicion that my heuristic is used to keep my tipping low. On the contrary, it's normally at the upper end of the scale. I don't like having a crappy time, so I tend to not return to places where I did not enjoy myself. My heuristic is used as an attempt to keep my tipping fair. (Yes, it's a rather geeky thing to do.)
Finally, I agree, this is a sad reflection of the state this society is in, as there's a sizable number of people around who think that paying customers should just accept crappy service, crappy food, a crappy experience, and pay extra for it, because the people responsible for all that crap *deserve* that money. A clearer sense of entitlement would be hard to come by.
David Lowery On the Ethics of Music Piracy
If I am enjoying some music, do I owe the artist for that enjoyment? (Owe in the sense of "some money or obligation is due" rather then the sense of "resulting from".)
Here's a principle to live by:
Value given for value received.
If you stand and listen to a busker, toss a few coins into the hat or case.
If you listen to a song on the radio, remember that it's been paid for by advertising (generally). If the commercial isn't actively annoying or stupid, let it play -- you're the product, the music is the lure, and the customer is the advertiser, and if you like the music, you want the customer to keep paying, right?
If you buy the CD or pay for a download from iTunes, you've purchased _a_ product. Treat it like a book -- you might loan it to friends, you might copy small portions of it to use in your journal or other personal work -- but remember that it isn't yours to distribute widely (yet).
Here's where things start to get tricky... there's a lot of crap out there. A lot of the music is utter drek, and you deserve the three minutes of your life back after listening to something that purports to be "culture", much less paying $18 for a CD or $10 for an album.
That's not good value.
With the advent of cassette recorders, we had a try-before-you-buy model: friends would make friends mix-tapes as a way of informing them about artists they liked. If the friend liked that artist, he'd be inclined to go out and buy that artist's work. This was a good thing, and while technically stealing, it was more like grassroots advertising.
The advent of anonymous file-sharing broke the try-before-you-buy model -- broke it hard. People amassed music collections they'd never be able to listen to, solely as virtual currency in the the file-sharing systems. They're receiving value without giving it in one frame of reference, and engaged in some quite serious value exchanges in another frame of reference.
Others announced that they'd no longer be wasting money actually *buying* music, when all this "free" music was available. What's amazing is that these sorts of people tend to hold very dim views of "leeches" -- those who only take shared music, and never share their own. This is the whole purpose of technologies like BitTorrent -- to MAKE people share, rather than to simply consume at the edges. The hypocrisy is rather stunning.
And now we have the new generation that has never bothered with trying to own music. It's just there, freely available, practically an entitlement -- modulo some jerk whining about how it's theft. The implicit agreement has changed: artists are now supposed to create content for all to share -- and some artists are unhappy about this.
The artists and their representatives changed the agreement first. Thank you Sonny Bono.
Copyrights used to be quite limited. And now they look to be effectively forever. That's not the agreement! And when one side unilaterally changes a contract, surely it's fair for the other side to do the same thing.
And that, I think, is where we're at. We had a sort of value-given-for-value-received arrangement, and then one side broke it, and now we have the backlash. A new arrangement is needed, a new agreement between artists, infrastructure, and consumers. We've broken the old one beyond repair.
We need a new arrangement. A new agreement. And it needs to have buy-in from all players, not just the one with the upper hand at the moment. Dictating unreasonable terms never results in a lasting solution.
 If it is actively annoying or stupid, switch stations. Don't reward advertisers for producing crap advertisements. Their product needs to be entertaining as well. That's part of the game, after all; paying for the music is only half the bargain. They buy a spot, not your actual attention.
 Or iTunes-like service, of course.
 Cost of production and distribution keep going down, and yet the retail prices don't really change. Costs of distribution from an iTunes-style store is pretty cheap, and yet the 'album price' is still more than half. Someone's getting ripped off, and it's clear that value isn't being given. But that's a separate issue.
 Or did so quietly, but then, we wouldn't know about such folks.
 I suppose artists can call the bluff of the consumers, and go on strike for a generation. Let the talented people go get jobs, and leave the field to the talentless hacks.
 And now we can't have anything nice.
A Better Way To Program
Smalltalk and Lisp are a good example, and they show (to me) that the problem isn't the language. The hard part about programming isn't the code.
The hard part about programming is understanding and decomposing the problem. If you're not any good at that, then no matter what language you use, you're going to struggle and produce crap.
This isn't to say that languages aren't important -- different languages lend themselves to particular problem-spaces by suggesting particular solutions. Picking the right language for the problem is as important as picking the right wrench for the nut.
But there will never be a DWIM language, because the big problem is getting the programmer's brain wrapped around what needs to be done. Once that's done, what's left is only difficult if the programmer doesn't have the figurative toolset on hand.
UK Student Jailed For Facebook Hack Despite 'Ethical Hacking' Defense
Mangham's defense lawyer, Mr. Ventham, pointed out that Mangham is an 'ethical hacker' and runs a tax registered security company.
Doesn't sound so ethical to me.
He's running a business. That means he ought to abide by the rules we expect to apply to businesses. In this case, obtain prior consent, agree on charges/fees/rewards up-front, and do not copy what isn't yours to copy.
(A lot of businesses don't abide by these rules, but that's why we get all pissed at them for being unethical.)
It doesn't look like this "student/business owner" bothered with any of that, and got in trouble for it. Not really much of a story there.
Why Facebook isn't being lambasted for their shoddy system is another matter. Their breach of ethics for failing to design a reasonably secure system is arguably more significant than this unethical 'ethical hacker'.
We don't let banks get away with designing bank vaults made of 3/8" drywall over 2x2 studs. We expect banks to put forth a level of effort securing the valuables in their care proportional to the value of what's being protected. If they do a shoddy job and fake it, and get robbed, we'll punish the robbers, sure... and then ensure that heads roll at the bank.
UK Student Jailed For Facebook Hack Despite 'Ethical Hacking' Defense
"You accessed the very heart of the system of an international business of massive size, so this was not just fiddling about in the business records of some tiny business of no great importance," he said.
ooo, that's got to hurt.
Basically, "size does matter".
Ask Slashdot: What's the Best Way To Deal With Roving TSA Teams?
None of my liberal friends are supportive of the president's current stance on civil liberties. Every one of them are unhappy about it.
What's odd is that all of my conservative friends and family who happily supported Bush's attacks on civil liberties are now suddenly *for* civil liberties. What's sad is that it doesn't take much work to get them to both dismiss the need for civil liberties and to bemoan the loss of civil liberties within five minutes. (I have been prohibited from doing this with family.)
Apparently I'm a moderate troublemaker.
Why We Need More Programming Languages
Sorry, I was not clear that my base assumption is that we're already trying to use the best language for the problem at hand. There are *still* going to be problems that are large, hairy, and complex, given the other constraints we might be working under.
If you don't consider at least three viable different languages for a new project, you're not doing your due diligence.
(Unless, of course, the project is 'use language X on a real-ish problem to see how it really works', and the end result is just a happy side-effect of giving language X an honest go.)
Why We Need More Programming Languages
Second, we as humans don't really have much success expressing exactly what we want. It's why the most insidious bugs are not in code, but in specification. We so often don't know quite what we want that restrictive languages are actually beneficial, in that they force us to reason consistently.
Oh, god, yes.
One of the more important development skills to have is to be able to extract consistent requirements from stakeholders, and then to be able to write them down in such a way that the requirements will be correct and the stakeholder will agree with them.
When it comes to programming languages, give me a language suited to the problem (all the one-language bigots can go pound sand) that's easier to debug than to rewrite. Large, hairy, complex solutions should eventually result in a new programming language that makes those sorts of things much smaller, far smoother, and simpler.
Samsung Lawyer Fails To Differentiate iPad and Galaxy Tab In Court
Hm. I have an iPhone 3G and an HTC Android.... the android phone needs to be plugged in every day at worst, every other day at best. The iPhone needs to be charged twice a week. All of this is under fairly light load.
This is the problem I have with iPhone-vs-Android debates. The Android suffers from a variety of hardware vendors who can screw up the user experience, and the whole platform suffers as a result.
I really want to like the Android more than I do... but I can't. And it's probably not the fault of the software, but as a consumer, I don't really care about that.
Security Vulnerabilities On HTC Android Devices
"The market for users who care about their privacy is way too small to count. "
Just so. I've been considering buying an Android device, and in preparation was playing with Android in a VirtualBox VM. I found it very difficult to find ANY apps I was willing to run, because things that obviously should not require internet access (or some other permission) did require it.
Work has provided me with an Android phone, so I've been looking through the Applications, and most of 'em I won't install because the application (or rather, the developer of the application) demands access far beyond what is needed. It's not so much that an application requires a permission, but how many permissions many of them require.
I want a way to easily change the permissions granted to an application, without the application's knowledge. If I decide that an application has no business making or receiving a text message, I should be able to disable that capability, all without the application being aware that it's attempt to send a text message failed.
Then, I became absolutely bewildered that (apparently!) many millions of people will let some unknown app X have access to capabilities it absolutely should not need to do what it purports to do. To me that means instant distrust. I don't know what everybody else is thinking ... wish I did.
I'm sure that they're thinking that they don't have a choice.
It's *hard* maintaining a decent policy of "Don't Use Apps That Demand Stupid Things". People get tired of it all. So they say "screw it!" and forget about it, and basically wish really hard that they get lucky and don't get compromised, or have their data splashed about. (Then, to make themselves feel better about their lax policy, they harangue others for not "taking advantage" of their similiar device. They scoff at the hesitation of others in allowing unknown and untrusted third parties to have full and unfettered access to personal data. Peer pressure eventually wins.)
Most people don't have much self-discipline, after all.
Whatever your app is, kudos for taking the high road.
You'd Think I'd Learn
I've been using Amazon for a long time.
You'd think I'd learn not to trust Amazon.
Don't get me wrong. They have an amazing amount of stuff at very nice prices, and what they don't have, their affiliates have.
Every time I buy something from Amazon, I check all the little boxes I see to indicate I don't want to be emailed anything. And every time, shortly after my purchase is completed, I start getting spam from Amazon (rather, unsolicited commercial email that I *suspect* is bulk-sent, but haven't verified). It's annoying, because it's getting through the hole I have in the spam filters that allow *legitimate* email from Amazon about my order to get to me.
Is it onerous? Not really.
It's just annoying. And it demonstrates just how much the people at Amazon despise their customers.
Eventually, I get annoyed enough to make it stop, but that's something I really shouldn't ought to have to do, so I resolve to take my money elsewhere. And I do, for awhile, and then someone I trust will kindly inform me that Amazon has changed, they're more respectful and not at all spammy anymore. So I relent, because the promise of reform plus the lure of convenience overcomes my stubbornness... and discover that no, Amazon is still run by scum.
You'd think I'd learn.
On Tipping (in the USA)
The subject of tipping in restaurants has come up recently, and I realized I had a heuristic for such things. This seems a good as place as to write it down.
If I have to stand in line and order at a counter, there's not going to be any tip.
Caveat: if (a) there's a tip bucket and (b) I've been there before and (c) the food was really good, I'll drop a dollar in the tip bucket.
Base tip rate is 15%.
If the wait staff is rude, the tip goes down. (I don't care about your shitty day. Be professional.)
If the wait staff is impossible to find, the tip goes down. (I can't serve myself, else I wouldn't need you.)
If the wait staff continually interrupts, the tip goes down. (I didn't come here to listen to you talk.)
If the wait staff makes excuses, the tip goes down. (Your team, your problems. Take up intra-staff conflicts with your manager.)
If the food isn't very good for the class of restaurant, the tip goes down. (Again, your team, your problem. Reward your cooks. They're why I came.)
If the food is late, the tip goes down. (Again, your team, your problem.)
If I end up thirsty, the tip goes down. (I am not going to reward you for ensuring I have a crappy dining experience.)
If the bill comes with 'pre-computed' tip-guide based on the post-tax total instead of the pre-tax subtotal, the tip goes down. (Your establishment is trying to scam me. I resent that.)
If the wait staff seems to be actually enjoying their work, the tip goes up. (If you're enjoying yourself, you're helping me to enjoy myself.)
If the wait staff is nearby often enough so that when I need something, they're there to help, the tip goes up. (Making my experience pleasant should be rewarded.)
If I never have to ask for a refill of my beverage and water, the tip goes up. (If you're going above and beyond, so will I.)
If the food is better than expected for that class of restaurant, the tip goes up. (I came here for the food. I hope you share your tips.)
Generally, it's pretty dang easy to get to 20%, and you have to basically be phoning it in to get 10%. Note that I round the final result to a dollar amount, and the percentage of the tip is based on the pre-tax subtotal (since the government gets the tax, it's not part of the food or service price).
All this excludes significant problems. The quality of a restaurant's service is not really in its day-to-day service, but in how they handle dining disasters -- did you forget or drop my dish? Did you get the order wrong? Does what's delivered not match the menu? Was something under- or over- cooked? Did the food go bad? Was there something _in_ the food that shouldn't be there? These sorts of problems eventually crop up at any restaurant, and this is where I really start to pay attention to how they're resolved.
Do they apologize? (If you don't apologize, you're not sorry, so that means this is expected or that you don't care. Either way, bad.)
Do they make excuses? (Excuses are bad. They don't fix the problem. They don't make things right. They just waste my time and your time.)
Do they get the manager involved? (Better, but it indicates that you don't have the authority to make things right, or you don't have a policy of how to make things right.)
Do they not charge me for the item? (Minimum expected behavior. If you don't do this, I'm likely not coming back, or if I do, 10% is the tip ceiling.)
Do they not charge me for any of my meal? (Good! I had a bad experience, but at least it didn't cost me anything.)
Do they not charge me for any of my meal and give me something extra (e.g., a dessert)? (Great! I had a bad experience, but it didn't cost me, and you demonstrated that you were actually sorry about it. I will strive to become a regular, and will suggest your establishment whenever folks wonder where to go to eat.)
Do they not charge my party at all? (Awesome! Your establishment is so committed to superb service that they'll eat the cost of a screw up. That's dedication. I will be back. I want to send all of my friends to your place, because it's a guaranteed good time. I will make friends with strangers for an excuse to introduce new people to your place.)
If I have to push for something to be done, or ask the the manager, or make a fuss... that's a failure. The wait staff has just ruined my experience by Not Doing Their Job. I will be unhappy. I do not like to be unhappy. I do not want to be unhappy. My unhappiness will be expressed in my tip, and in future choices, and in how I describe the establishment to friends, acquaintances, and outright strangers.
Some common objections when I float (bits of) the above in conversations:
"If they're slammed, you have to take that into account."
No, I do not. It's not my fault that the manager didn't allocate enough staff to serve the people he let in. Hire more or better staff (you may need to pay them better). Increase the size of the kitchen and decrease the size of the seating area.
"It's a hard job."
It's part of the job. Do the job, or do something else. Paying someone to NOT do their job is incredibly stupid.
"They might be having a bad day."
Yes, and so might I. I went out and GAVE SOMEONE MONEY so I could have a better day, and they made it worse. And kept my money. I assure you, me spending money to make a bad day worse is in no way a better experience than someone *getting* money for having a bad day.
Copyright and Scarcity
I'm a bit annoyed at the use of Copyright to stop the publication of a work. Specifically, a rulebook for tabletop gaming.
I understand, and support, paying the creator for his work by granting a limited monopoly for a period of time. Copyright isn't generally a BAD thing.
But when it's used to KEEP works from being published (presumably so the users will be forced to upgrade to a later version), it seems to violate the spirit of the law, and I wonder if perhaps there isn't a way to fix that. Mandatory licensing if the work in question is out of print for more than three years?
On Miserable Programmers
There's an article on GarlicSim that caught my attention . . . http://blog.garlicsim.org/post/2840398276/the-miserable-programmer-paradox
And it just doesn't make much sense. Perhaps it's just an oversimplification of how things actually work, or it's a sign of a programmer with limited experience, or maybe I've been lucky. More likely, my metrics are different.
So... what makes a programmer happy? For me, and most of the good programmers that I've worked with, what makes a programmer happy is accomplishments. The code compiles, then passes unit tests, then integrates with everyone else's code, then passes integration, functional, and acceptance tests, demonstrates well, and makes the customer happy. Good programmers also take pride in their work, so there are internal metrics that bring them happiness as well -- the code is well-documented, well-structured, organized, readable, maintainable, garners admiration from fellow coworkers, and/or is adopted by coworkers and associates; junior programmers become respected senior programmers under one's mentoring, bad programmers depart in shame, etc.
Contrariwise, miserable programmers have few events that make them happy. It's really a flux thing -- if you measure happiness-events per day, you're going to be a happy programmer; if you measure days, weeks, or months between happiness-events, you're going to be a miserable programmer.
So what's the crux of the argument on GarlicSim?
Interrupting the train of thought is bad. Not interrupting the train of thought is good.
This is not a measure of happiness or miserableness. This is a measure of OCD, or possibly Vingean Focus.
So the GarlicSim article isn't *entirely* wrong... it's just missed the basic mechanism. Interruptions slow down work, which slows the rate of happiness-event, which increases misery. Using bad tools means that more of the programmer's time is spent fighting the tools instead of getting those incremental rewards, which means when you find programmers that put up with crappy tools, they tend to be unhappy programmers. (A programmer who has a tool that's too clever will be happy, but might make a lot of other programmers unhappy. Who cares if you've figured out how to make emacs use eliza to 'help' you write documentation?)
Somewhere in this division of labor between "good technologies" and "bad technologies", "work" has been lost. Solving the problem, expressing the solution, and demonstrating the result is the work that the technologies facilitate or hinder. To put things like "go to a specific line number" in the "good technologies" and everything else in "bad technology" seems to miss the point -- work still needs to be done, and since there's no way to reduce that part to a shortcut, 'work' ends up in the 'bad technologies' slice of the pie.
And yet there are people who think that programming would be a lot more fun if it wasn't for those pesky requirements.
Computers should eliminate the tedious, the boring, and the error-prone tasks. Finding the right tradeoff is a matter of personal preference, the problem at hand, the environment you're working in, and the constraints you're working under. And, of course, being the kind of person who enjoys telling computers what to do.
Apparently, the folks behind "Hudson" (a project I've never heard of and probably don't care about) are so upset with Oracle that they're going to change their name.
(See http://www.hudson-labs.org/content/hudsons-future )
Has Oracle actually done something objectionable, with regards to the Hudson project?
Has Oracle indicated that they're likely to do something objectionable, with regards to the Hudson project?
But, you see, they /might/. And because they might do something objectionable in the future, it's vitally important *now* to adopt the course of action that would be required later.
There's a possibility that something bad might happen, which would require the project to take drastic steps to, oh, change its name or something. Because that's such a terrible prospect to consider, obviously the best way to keep that from happening is to act as if the bad thing has in fact happened, and take the drastic step of renaming the project.
Yes, it doesn't make sense to me either. It's like giving yourself a black eye before the alleged neighborhood has spoken a harsh word.
Some people just have to borrow grief.
Android and the iPhone
Well, I now have an Android phone.
And, frankly, I don't think Apple has much to be worried about.
Sure, it's a sexy little phone. A little bit sleeker than my year-old (to me) refurbished iPhone 3G. It has a mini-SD card that I can replace, unlike the iPhone. It has a battery that can be replaced, unlike the iPhone. The camera has a flash, unlike the iPhone.
But despite all that, I don't see giving up my iPhone anytime soon. The user-experience of the iPhone is miles ahead of the Android, and it appears that the Android isn't even heading in the same direction. The Android seems to be taking the standard path set out by all the previous phones I've owned: cluttered and crowded screens, non-orthoganal commands, and a reliance on convoluted menu trees.
On the iPhone, the natural gesture is the tap. Want to do something? Tap the thing on the screen and see what you can do.
On the Android, the natural gesture is the menu. Want to do something? Hit the menu button.
Granted, I've only been playing with it for half a day, but I'm far from impressed. Had I purchased this phone with my own money to replace the iPhone, I'd be extremely upset about now. As it's a work phone... meh. It's there for three things:
1) To receive (cell) phone calls.
2) To make (cell) phone calls.
3) To receive work-related email when I'm away from my desk.
It'll do just fine with that.
But I'm not giving up my personal iPhone. And I don't think I'm the only one.
Pity, really. I had hopes that the Android might give Apple some competition in the UI space.
Have Axe, Need Grindstone
How the lessons of the past are so easily lost....
According to SecureCoding.Cert.Org, using a goto is the recommended way to write secure code. Let's just forget about how goto is universally abused by mediocre and undisciplined programmers to create comprehensibility and maintainability nightmares, and concern ourselves only with the ideal situation.
The example is a clever bit of sleight-of-hand. A single-entrance-multiple-exit-no-goto approach is contrasted with a single-entrance-single-exit-using-goto approach. The appearance is that apples are being compared to apples, but what's actually going on is that apples are being compared to potatoes (i.e., earth apples).
The "this is how you write the code without gotos" example really should be code that's as equivalent to the "this is how you write the code with gotos" example. And if the authors can't see a way to write that sort of code (it's pretty damn obvious, IMNSHO), they're not really qualified to make the sort of judgement they're making.
It may be that one could argue that the goto-using code is still cleaner, but if you don't do a reasonable job in creating the contrasting code, that argument rings hollow. It's arguing in bad faith. It's dirty pool. It's *slimy*.
Cert doesn't get a biscuit.
A new machine is a good time to re-evaluate how one's been doing things.
Such as logging _in_ to Slashdot.
Let's see how the new interface holds up.
Not surprising, as the author of the entry was profoundly upset at the idea of water rights. Apparently, this idiot worries about the government enslaving people by controlling the water, but never reflects on the subject for five minutes to think about what the underlying problem might be: else he (or she) might have had an actual thought, and perhaps wondered what would happen if, instead of a government (answerable to all of the people) controlling the distribution of water, a random citizen were to "enslave" people by controlling the water.
Many laws are bloated, twisted, unreadable, useless, and stupid -- but most of the laws that affect most of the people in the country are, oddly enough, not without some sort of justification. They address a problem, concern, or issue, that was or is important. Sure, the law may introduce a different problem, but that, too, is often addressed by the law (which is how we end up with such bloated, twisted, unreadable legal codes).
This isn't to say that laws shouldn't be routinely challenged, or re-evaluated; it just means that we should take a little time to learn some of the history of the issue, and ponder the concerns the law was apparently made to address. It may be that our national values have changed since then (it used to be -- as in before I was born -- illegal for a non-white to own my house, for example, something I find quite offensive), or not (I quite like it being illegal for someone to shoot me just because).
I ran across http://wordaligned.org/articles/brackets-off and, well, I disagree.
"Thomas Guest" writes:
And secondly, if a coding standard were to rule on how to parenthesise, it would be difficult to find a middle ground. This leaves as candidate rules the two extremes:
1. parenthesise everything
2. never parenthesise
The first quickly leads to unreadable code. The second seems overly proscriptive.
Thomas misses the obvious middle-ground: parenthesize everything where order matters.
x = ((((a * b) * c) + e) + f);
may be overkill, but even the most passionate parenthesize everything advocates don't go that far; they write
x = ( a * b * c ) + e + f;
where every operation at the same
level of precedence is left alone. This provides maximal clarity and promotes readability,
as the reader doesn't have to think about the order of precedence for that language.
He then goes on to discuss order of precedence as if it's a universal rule, rather than a convention of infix notation in programming languages. (I've had this discussion with people,
some of whom could not be convinced that precedence was anything other than a convention,
arguing that it derives from fundamental principles of mathematics that I was too stupid to
comprehend and thus it wasn't worth explaining.)
Perhaps Thomas should try programming in more than just one language.
I suggest Smalltalk.
I bought something online. DHL was the cheapest/fastest combination offered, so that's the shipping method I selected, and I've always used FedEx or UPS, so variety is good, eh?
And, this being the Bright New Future, I received a link to the DHL tracking page for my order. Hurrah!
Then I follow the link to see what the status of my shipping order is... and I get a blank page. WTF?
Dumb. I already used the page. I discovered the information I was looking for.
Of course, if someone at DHL runs across this, I see three ways it can go:
- Nothing happens. I'm a crank on "the internet" and it's vitally important not to upset the web developers by
offering up criticism; besides, I should just get with the program and jump on the Web 2.0 bandwagon and
trust everyone already, instead of being a paranoid freak.
would then give up and concede that my it's-my-computer-not-yours-keep-your-hands-off attitude is
everyone else does) the page.
- This gets to an actual programmer who looks it over, realizes that this "technique" is indeed entirely bogus,
and rips it all out, or at least makes the few minor changes needed to have the system work just
I think the middle option is actually the most probable outcome, and would demonstrate
level of corporate stupidity that moderately intelligent people have come to expect.
I played Arkham Horror [ http://www.fantasyflightgames.com/arkhamhorror.html ] for the first time the other night. I played the nun (7 SAN and "never lost in time and space" were the big draws), managed to engage in quite a lot of combat (especially for a newbie), and had a great time.
By the end of the night, I was almost managing to remember what to for each phase of the game.
Oh, and we "won".
On Selling Software
I spent some time today looking for spreadsheet and word-processing software for my new MacBook. I figured I'd look to see if there was anything worth spending money on.
I had mixed results.
Some vendors offered a trial version, others, not so much. I found this astonishing... there are free-as-in-beer alternatives out there. Why for the love of ladybugs would I pay to check out some software? Because the marketing hype is so convincing? I think not!
But, that simplifies the process a bit. No trial version? Move on to the next product in the list.
Some vendors would offer to give me a trial version, but they wanted contact information first. I'm just browsing, folks; I do not feel like providing you with a name and email address. I get enough junkmail as it is, I don't need something more to ignore (or directives to go to a website to unsubscribe from something that I never wanted in the first place). Move on to the next product in the list; I'll come back if nothing else can do the job, but otherwise no go.
Now we're cooking with gas. I happily download several .dmg files (I have become a heavy user of tabbed browsing, and will often take actions in parallel). I mount each of 'em in turn to start evaluating the products.
Some of the programs are installers. They want to splatter themselves across my system for a trial version. Sorry, no. Move on to the next product in the list.
But some... some products let me run them straight from the .dmg -- drag-to-where-you-want-it kind of installation. These I can evaluate. Some work better than others, of course, but that's why I'm doing the little evaluation dance.
These vendors deserve a biscuit.
However, that's not the point of the ramble. I'm concerned with the reasoning behind those vendors who made it difficult (or at least annoying) for me to evaluate their product. How does this happen?
UNIX and Security
I was poking around on the apple discussion boards, and
ran across some assertions by one Scott Radloff.
He explains that OS X is safe from viruses because it's UNIX, and then he goes on to assert a number of things about UNIX that just aren't so, to the best of my knowledge. The thing is, I've heard these assertions before, from Linux advocates mostly, which means this isn't just another standard case of excessive Mac advocacy.
Scott first asserts that UNIX was built with the Internet in mind. To the best of my knowledge, UNIX was first conceived and built prior to the Internet, and its basic structure and principles were established before even the Internet's precursor, ARPANET.
Scott further asserts that "UNIX was conceived as a rock-solid fortress of security". This is laughable, as even a cursory reading of UNIX history reveals that UNIX is very much a
"good enough" system. The name itself is a pun on MULTICS, about which one might be able
to defend Scott's assertion. UNIX was a simplification over MULTICS (thus the pun).
This isn't to say that UNIX lacked any sort of security. UNIX was built in the days of
timesharing computers -- many users, one machine -- so naturally there are *some* controls in place. Just enough to do the job, however, which is a far cry from being a fortress.
Many of the modern UNIX security advantages are due to efforts to retrofit a better security
system on to UNIX, rather than to design it in from the very beginning.
(MSWindows, on the other hand, comes from a tradition of microcomputers, which were not typically networked, and had one user per machine. NT attempted to bring a more sensible
infrastructure, but by all accounts, that's mostly been subverted in the name of market
share. And hey, it's the right business decision for Microsoft: most of their users don't
actually want security.)
Scott's assertion that MSWindows "began life as no more than a port of the early MacOS to the PC" is a huge stretch. But then, when I think of "port", I think of starting with a copy of the source code of what I'm porting, not an attempt to reimplement functionality from scratch. If MSwindows is a port, then so is MacOS -- Xerox invented the GUI, after all.
Scott then oversimplifies the concept of a virus (or, less charitably, demonstrates an ignorance between virus, trojan, and worm). He, like many "UNIX-is-secure-out-of-the-box"
advocates, miss the point.
A virus doesn't have to compromise the whole machine. It just has to replicate somehow.
So long as you, as a user, can create and run executable programs in your home directory, you can, in theory, support a virus.
Why there aren't viruses galore for the UNIX platforms I don't know -- it may be that the kind of person who would write a virus can't justify spending the money for a Mac or UNIX box (or can't figure 'em out); or that there aren't enough UNIX users among the general population to keep a virus viable; or that there are UNIX viruses but they're very slow, very subtle, and don't break anything; or that UNIX users tend not to run everything as root or the administrative account, making the payoff less juicy; or that the virus-writers believe the hype, and just don't try.
One of the things that most UNIXes get right, but OS X gets wrong, is that they have you create a "normal user account" in addition to the root/administrative account. The first user you create in OS X is, by default, the Administrative User. There's a reasonable
justification behind it -- most users won't or can't track two distinct accounts -- but it's still uncomfortably close to the MSWindows "solution" of making everyone a Administrator so
they can get their work done.
Remember, one of the first viruses ever created was created on a UNIX machine. Some of the most widespread worms spread on UNIX machines. UNIX isn't immune to malware, at least not if you have a gullible user.
Update: Seems like I'm not the only one annoyed by this attitude. I just ran across
this article on unix viruses.
Upgrade Hell (with a Biscuit)
I wanted to run some OSes in a virtual machine on my laptop, but my venerable Titanium Powerbook just wasn't up to the task. It's short on disk, short on power, and starting to fall apart. So in the middle of January, I go and buy a MacBook.
(I looked at a variety of machines, but the constraints were simple: it had to ship with some variant of *nix, support wireless out of the box, and have a keyboard I could enjoy, or at least not loathe, typing on. The last is often the killer... I could've gotten a macbook pro, but the keyboards suck, for me.)
Since I'll be using this laptop for presentations, I ask the guy in the store: "This WILL run all of my existing PPC software, right?" "Yes, unless it's Classic. If it's OS X native PPC software, this macbook will run it out of the box."
Cool. That's what I need to know. Transaction ensues. New laptop is brought home.
I dig out the box for Keynote. I install Keynote. It crashes on startup.
Crap. Okay, let's poke around the Apple site.... good, here's the upgrade to 1.1.1 -- and it says this makes Keynote work for all versions of OS X 10.2.8 and later.
Crashes on startup (got a little farther, but not much) again.
Damn, damn, damn.
Okay, time to use that AppleCare support I bought. My new laptop won't run software that it ought to run. I call... and end up on hold.
Eventually, I get thru to a nice support lady, and we fix the permissions, verify the partition, reinstall, and do the fix-permissions dance again.
It _ought_ to work, but it doesn't. So... she bumps me up. Back on hold.
Eventually, I get a guy, who listens to the problem, listens to what we've done so far, agrees that it ought to work, and then explains that he'd have to spend some time researching this to find out what's wrong, and it would be faster to get bumped over to iApps Support.
Okay, fine. Back on hold.
Ten minutes in, a voice tells me I'll be with a representative inside of 15 minutes. An hour and twenty minutes later, I finally talk to someone.
He stalls on the fact that I'm having a problem with Keynote. He corrects me: "iWork".
We go around and around; he all but calls me a liar, not until he takes my CD's version number and goes away for another quarter-hour does he come back and acknowledge that, indeed, I do have Keynote, not iWork. (No apology, either.)
He then asks how I can expect such old software to work anymore. I point him at the Apple Website, and point out the bit where it says "10.2.8 or later", and get him to grudgingly agree that 10.5.1 is, indeed, "later".
"But that's an old website!" he cries. "How can you expect it to apply?"
The fact that it's an Apple website makes no difference to this drone. In fact, the suggested solution is that I go out and purchase iWork 08.
No admission that perhaps the website is misleading.
No pointer to an announcement that Keynote 1.1.1 wouldn't be supported on OS X 10.5.
No promise to fix the misleading website.
I should just go out and drop close to $90 on a new copy of iWork. (Well, he said $79, but then there's at least $8 in taxes on top of that.)
Now, I'm not against paying money for value received. Fair is fair.
But to break working software, and then to suggest that the solution is to buy more than what I want (I don't need the rest of the crap in iWork) to "upgrade" what was broken, well, I've seen that attitude before, and I want nothing to do with it.
But I've been on the phone for four hours by this point. I'm tired, hungry, cranky, and am being given crap by some jerk on the phone who is trying to tell me that I just need to spend MORE money because the promises made by Apple employees don't mean anything.
In short, I'm pissed.
No way in hell am I going to go buy iWorks anything. This is a good way to lose a customer, Apple. Shoot, this is exactly how Microsoft lost me as a customer; I used to grudgingly accept their dominance, at least at work, until I got exactly this sort of treatment,and decided that I, as a customer, could not in good conscience give my money to a vendor who treated me like that.
So... a biscuit to the Apple hardware folks.
No biscuit to the Apple iApp folks.
It's not that it would have been hard to treat me as customer.
I didn't expect to be _given_ a copy of iWork 08 (although, that would have been nice). A discount for upgrading iWork would have been plenty of motivation; AT LEAST stating that the Apple Store employee was wrong in his assertion that OS X PPC software would run on the new laptops, that the website was wrong to say "or later" instead of giving an explicit version range, and promising to fix the website RSN, would have begun smoothing ruffled feathers.
If they can't be bothered to treat me like a customer, I can't be bothered to give them money, or talk nice about 'em.
So, time to look at the competition.
I still don't look at Microsoft. Sooner or later, they'll screw you.
NeoOffice still wants a package installer. No go.
OpenOffice, however, lets me drag-and-drop from the DMG file.
OPEN OFFICE ORG GETS A BISCUIT!
However, OOo falls down after a bit, it seems. Some sort of X11 error.
However, the OOo Aqua alpha version runs, and seems pretty stable for alpha software. It's ugly as sin at the moment, but it'll play a presentation on the new laptop. I tried using it to create my presentation, but it's still a bit rough, but I can still use the old machine to create a Keynote 1.1.1 presentation, and then export it so the OOoAqua can play it.
I have great hopes for OOo Aqua.
Still... OpenOffice.org has changed for the better.
Have a second biscuit.
I have a spreadsheet in Appleworks that I'd like to give out to a few people. Appleworks won't save it in an "open" format, but I can export it to a Microsoft Excel file. Alas, that incurs some minor corruption in some of the formulas. Since I don't have Microsoft Excel on my system (any of 'em), I can't load it up in that to fix 'em.
The folks I want to give this spreadsheet to generally use OpenOffice. As this spreadsheet started life as a StarOffice document, I figured having the up-to-date version in the Microsoft Excel format and the original in the StarOffice format would provide enough information to correct the corruption due to the exporting of this file to Microsoft Excel.
It seems OpenOffice doesn't read StarOffice files.
Bad developers! No biscuit!
Okay, I suppose I can install OpenOffice long enough to do the fixup, with the added bonus of being able to provide the spreadsheet in an "open" format. Since I'm using a Mac, the recommendation is to use NeoOffice.
So I go to download NeoOffice. They want a donation. I want to try before I buy, so I skip that bit. It's in a DMG, yay! Mount... and it's a freakin' PKG installer. WTF? Well, maybe it'll let me install it in /tmp or something. No joy... it demands the Administrator password.
Bad developers! No biscuit!
There's zero reason for an _application_ to require the Administrator password. I consider an application installation process that requires an Administrator password -- especially on the Mac, where run-from-the-DMG-file is almost a standard -- to be a sign of incompetence, arrogance, or carelessness on the part of the developers. Laziness is a virtue, but only sometimes.
And they wanted a donation?
No way. Not until they demonstrate a little professionalism and provide me, the user, a reasonable installation process.
Of course, a reasonable soul might point out that there's nothing wrong with a PKG installer, since Apple ships the PKG installer builder tool as part of the "standard" development suite. And they'd be half-right... the problem with PKG tools is that it doesn't do the right thing and allow the user to choose where and how to install an application (no matter what the developer does or doesn't do). Apple developers dropped the ball here.
Bad developers! No biscuit!
Sometimes folks wonder why "the average users" get so annoyed at developers. This is why. We have a tendency to take reasonable choices away from the end-user, instead of building our tools (especially our installation tools) to preserve the user's sense of control over the hardware that they've paid for and use on a daily basis.
How does Sun do it?
So here I am, wanting to get a good set of Solaris 10 installation disks, and not wanting to go through the bother of downloading and burning a set. "No problem," thinks I, "I shall simply pay the $35 and order a media kit."
Sun's web-pages suck.
You'd think that a company with so many talented designers, engineers, graphic artists (you have to admit, their logo is cool and they have a very good eye for color), and so forth could manage to come up with a usable website. But noooo....
I suppose that $35 could be selling at a loss for them, and selling onesies and twosies isn't worth the cost or infrastructure -- but why then offer to sell it to me anyway? What's the use of teasing me by offering to take my money, and then going through all sorts of effort to make it difficult?
No wonder they're in trouble.
They fixed it. Or I found an alternate approach at
http://www.sun.com/software/solaris/ that worked. For free. And the media kit arrived
in just a couple of days.
Of course, it's a DVD, which means I have to go juggle hardware now....
So there I was, with too many open projects, contemplating the purchase of a 160GB 2.5" Seagate Momentus drive. This laptop needs more storage, so why be stingy?
Nice of them to be so clear about it. It saves me a lot of time and aggravation, plus, since I won't do that, it saves me all that money. I mean, if they don't want my money, that's fine with me, I'm sure I can find something else to spend it on, and it's not like I don't have sufficient projects to consume my time anyway.
So it's a big thank-you to provantage for not wanting to take my money.
Must be nice to be so flush you can treat customers like marks.
Where we left off: I wanted a remote for my JVC TV, and I discovered that the JVC website sucked.
But that's not the end of the story.
-- and by searching on the TV's model number, I found a remote that was "compatible".
"Compatible" ought to be good enough. All I really need is a way to navigate the menu so I can change aspect ratios and suchlike without having to stand next to the TV. So I order one.
It arrives in just a couple of days. Far faster than I expected.
So I unpack the remote, verify it's what I ordered, and go to try it out. It's even a JVC remote.
"Compatible" obviously means something different to the folks at JVC. There's virtually no useful feature of my TV that matches up with this remote.
A quick email to the support address and I go to bed, annoyed and frustrated. I am not a happy customer.
I get back a response informing me that I should call the toll-free support number. This I do.
And this is where the story gets short... after a couple of minutes on hold, I am on the line with a real human being. A helpful human being. He determines that yes, I did get the wrong remote for my TV.... and takes care of it.
I'm feeling like a customer. It's amazing. I was expecting to be told I was SOL, that the Computer Does Not Make Mistakes, and so on and so forth, and to end the evening in a lousy mood and a worse temper.
It's almost a let-down. Problem taken care of. End of problem. Finis.
The new remote arrived in two days. It's exactly the remote I need. As a bonus, it also can control the JVC VHS deck. (The remote that came with the VHS deck died. The universal remote isn't. But this one works. It's a bonus.)
This kind of service needs to be encouraged. I'm now wondering what other parts I need. They'll be the first stop.
But I won't use their webpage to order. I'll call to make the order.
And I'll ask for Don.
Well, it turns out I need a replacement remote for my JVC television. The so-called "universal" remote can just about power the thing on and off; I still need to go up to the TV and use the "menu" interface to change the aspect ratios. This is tedious and error-prone and distracts from the movie-watching experience.
"No problem," I say to myself. "I shall go to the JVC website and purchase one."
You can see it now, can't you? What a silly boy I am. I get to the JVC website, and it looks pretty, but I can't get it to do anything useful.
No doubt I'm expected to "have an experience", but I can't see how that would benefit anyone if they don't make it dreadfully easy for me to part with my cash. I want to have experiences using their product, not their website.
I wonder what sort of thinking goes on in businesses these days. Has no-one pointed out the futility of having a pretty website that doesn't work for their customers?
Or do they expect that frustrated and annoyed customers are going to spend more money, and go around telling people (even strangers) how great their company is, than happy and satisfied customers?
What alternate dimension is this, and how did I get here?