Why "If you can't say anything nice ..." hurts development

Come on now, admit it. Your mom/dad told you at some point "If you can't say anything nice, don't say anything at all." The thing is, neither had any idea how detrimental this philosophy is to the real world. While I will focus on the harm it causes the development community, you could extend my ideas to any thread of social interaction.

Basically, there are two main reasons why I feel mom/dad should have received a lecture after stating that gem:

1) It instills a mindset into the recipient that speaking your mind is not welcomed in the world.

2) This mindset further expands itself within the recipient so they are no longer able to receive (and act upon) "hostile" criticism.

Let's examine further...

Words have an everlasting effect on children -- it scares me how quickly my 6 y/o daughter repeats things I didn't mean to say. In addition, endless studies (which I won't take the time to quote) have pointed out a correlation between verbal abuse and self-esteem. The contrapositive of that is also true, positive reinforcing words instill wonderful feelings within their recipient.

Because of this everlasting effect, simple phrases become absorbed deep into subconscious behavior and alter a person's persona. Now knowing that, let's rethink what that glorious phrase really means to a child -- I'm not allowed to say anything that isn't nice.

The worst example of this tends to happen to extremely introverted people that hide behind the "No one cares what I think anyway" phrase. Sadly, this travesty of justice keeps these people from reporting problems they see, solutions they've conceived, ideas they've dreamed up, and a whole slew of other items that can help a project achieve its goal.

Some people will say something that isn't nice but feel the pressure to employ that wonderful effect called "sugarcoating" (placing as much "nice" words around a "hard to swallow pill"). I've seen it in plenty of relationships with my users. For example:

Wow, this page is really neat. I like the layout, all the links work, the articles are great. You've really done a good job. However, you misspelled the word "Emmeekaguramookavich" in paragraph 32. Hopefully this will be an easy fix.

Keep up the wonderful work,

Now, for me the above comment has this long drawn out way of asking me to do something. Don't get me wrong, I'm grateful for the appreciation you're showing me, but the first sentence suffices at doing so. As far as how easy a fix would be, don't you think I'm better qualified to answer that? After all, I am going to be implementing it. Finally, are you expecting me to hand you anything but the wonderful acts of work that I create? Not only do these extra words discombobulate the communication effort, I now have to repeatedly skim them over every time I refer to this message for what I need to do. My time is in high demand, so please speed up my ability to help you by not buttering me up.

Then, you get the side of the spectrum where I sit, the one where the person either never heard this advice or (like me) concluded it was full of crap. We're the ones that don't hesitate to blurt out to your face, "This sucks!" and "I wouldn't even feed this to my neighbor's dog." We're also the ones who will then go over every point as to why we came up with our assessment and expect you to fix them. But however, you won't because of my second point.

For example, instead of taking what I said back to your drawing board you'll be labeling me as a jerk because of my "hateful diatribe."

This same thing happened to me at a previous job. I asked a junior developer to create some custom form that would sort by name, allow you to add new ones (and then more importantly resort once they were added/edited). After a week, I got back something that I used and then immediately told him "didn't work" because it didn't do the one thing I wanted (the resorting). When I said these points, he literally called me "rude", turned around, and went back to his desk. Now, I was able to code what I needed by the time he got to his desk, so I didn't push the issue. However, I wonder if my second point about this little phrase was to blame.

Basically, when you grow up in the mind set that "you can't say anything nice," you conclude that there is something wrong with the person saying these "un-nice" words before you actually listen to what he/she is saying. You can see examples on many Internet based threads. The typical pattern is this. User1 says "this module sucks because it doesn't do blah which I really need." This thread will then quickly fill up with replies stating how User1 is a "n00b", "Id10t", how they should "use something that has blah", "code it", "be happy with what they have," etc. While it is amazing that these same people lash out using such un-niceities, the fact remains that until someone comes along that can accept such criticism (and possess the resources to add blah), blah never gets added to this module. The module is further hindered because many of the developers that do have the resources to add blah are probably turned away from working on it because of the aura that now surrounds its request.

It's getting late and I need to wrap up so I'll finish here and ask that "if you can't say anything nice, shout it loudly!"


The Standard of End-User Experience

Recently a lot of people around me were dropping the "standards" word. This might have something to do with the release of IE7, FF 3.0, Opera 9.0.2, etc., who knows. While this is fine and dandy, I would like to know what standard they are referring to. From what I remember from my networks class, there are two types of standards:

  • De facto (becomes a standard "by fact or practice" because so many people do it/use it/etc.) IE's "manufacturer-specific non-complaint enhancements" are a perfect example of this. Even though they fit the above quote, they are still a standard because IE and its ~90% market dominance has made it just that.

  • De jure ("by law") are the standards released by a lawmaking body (in this case the IETF or W3C). "Compliant HTML" fits this category. Please note that IMO RFCs do *not* fit within this category. RFC are Requests For COMMENTS. Standards are based on these, yes; but they aren't in the finalized form that a de jure standard needs to be.

Now, following either one of these is great, but by limiting yourself to just one you are going to eventually run into trouble with the other camp. Take, for example, the "Craptive X" features. Yeah, they are great when you are in the ~90%, but if your not, you know why I chose that name. The opposite is also true, there are websites that are making fully compliant HTML/XHTML/XML/CSS/javascript/etc. However, those sites "render" badly, if at all, in IE. Heck, there are even differences between the ways FF, Opera, render the same "compliant" code.

Now, some developers employ a remark along the lines of "Use another browser" to conceal the fact they can't/won't/whatever make their site work for whichever portion of the surfing population is affected by their shortcomings. There is even an increasing portion of this populous that go out of there way to sniff out these "inferior browsers" and redirect users to the homepage of whichever their favorite browser is. The funny part is that many times, other browsers (and the people who use them) get caught up in the fray and face these stupid redirections even when their tool can display the information coherently.

What I do like are the developers that have the mindset of remembering their end-users. The ones that have found the "Middle Path" and take the time to test out the way their site renders on *all* the different browsers. These are the developers that are worth their weight in Lutetium. For these are the people that remember the only standard that truly matters -- the standard of the end-user experience.

This standard isn't just limited to web-development either. We all know that applications that are actually beta tested are far better than those that were only used by their creator before being released. Heck, ask any interior designer who really gets the ultimate decision on which color scheme to use. Why can't we all remember this?

This standard is important. Does your creation make the cut?


Scalix and Digg

This is the 2nd time typing this. Apparently Windows Movie Maker is causing deadlock problems on my computer...

The other day the below post came through Digg.


It was talking about an Open Source Exchange alternative. I do want to know how these things stack up, so I checked it out. The article just talked about the e-mail stuff. I want to know more (shared calendaring, contacts, etc.) so I had to check out scalix's website. I came across a link for a "product demo", so I clicked on it. I got the following error message:

"No native WebEx Event Manager is available for your platform."

That's the entire message. No list of supported platforms, contact numbers, or any other information on how to debug, etc. Taking what they said literally. I thought this meant that they didn't support Linux (in my case Ubuntu) and felt that the fact this was an OSS application, it warranted a comment. Being who I am, I felt the need to be sarcastic.

I got a response saying that message "really meant" I needed to install Java. Now, I have a big problem with stupid error messages, especially ones that mean one thing when they say something else. This waranteed another response, and I continued my sarcastic trend by comparing the message to women.

Apparently, my original replier didn't like this (even though I thanked him for deciphering the message for me). Instead he calls me an "ass" and says I'm immature.

Now, I admit being sarcastic is hard to detect over the Internet. Being sarcastic on Digg is no exception, and this is the ideal case to prove that. I should have simply:

1) Asked how to get the webex thing working on Ubuntu and
2) Thanked the person for telling me and wondered why the error message couldn't have helped me further
3) Erased the wondering part, and then said something along the lines of "this is why Linux rulz and all others droolz...blah"

This is why Linux isn't making it. Instead of addressing the valid points I had, the fellow Luser decided to chastize me for pointing them out. Now granted, this isn't the offical "WebEx support center," but it still illustrates a point that's bad in all crappy software. The people writing it praise its good points, hide the bad. Then when someone points out the "man behind the curtain" (in this case the weak points) they attempt to discredit him/her rather than fixing what needs to be fixed, or at least admiting that it needs to.

So, I've learned not to be sarcastic on Digg.

Hopefully developers will learn to produce things that won't lead me to make sarcastic comments.

Somehow, I doubt that's going to happen.

BTW, blogger's auto complete labeling could use some work. It completes a lot more than needed even when I erase what it just put in...



It's Friday. I'm coming down with something. Spent most of the day working with Beta software. Lots of fun....


Tests and Ubuntu crud

I got my test back yesterday. The score was a 91.5 out of 100.

Evolution crashed on me again a few days back. I had bug buddy go through and do its thing. At the end I had it CC a copy of the bug report e-mail to myself. Guess what? I never got a copy. I'm pretty sure bugs@gnome.com (or whereever it goes) didn't get a copy either. Let's hear it for Bug Buddy.

My friends are convincing me to dump Ubuntu and switch to Fedora. They are supposed to be releasing FC6 soon. I might give that a try. What I really want is something that works.


My Lovely State

I live in South Carolina. It's a wonderful place that always ends up on the worst side of whichever list is created. Take today, we had our second paranoid schizo get arrested for keep his sex slave in an underground dungeon:


Sigh, how many other states/countries can claim that honor?


Gun Shows

Aren't these things great :-D

Getting Sleepy

Last night I fell asleep early and didn't post. Today I stayed up late and posted after midnight.

Yesterday, I helped a former co-worker restore a misbehaving mount point. It was one of those "Stop digging" cases. He started off needing to update an application. Then, when that didn't work, he updated the entire OS. Then, when that broke he installed a different flavor of Linux. Then another. Then his current version of Linux informed him the mount point consisted of a "zero length partition." I'm not sure if Fedora just isn't able to read Debian formatted drives, or if it was something else. When I got there, we reinstalled Debian and did an fsck. fsck takes a long time on 1.6TB. After that he could access the files.

Today, I had the pleasure of installing a vendor's app on a 64-bit 2k+3 server. The installed wouldn't work because it was designed for a "different version of Windows." The app also spontaneously crashed after a certain point. Eventually, I was told to disable "Data Execution Prevention" for the app and it started working. Sadly, I was then told not to teach people how to use it. Personally, I don't see the logic in that call, but what can you do?



An Old Friend

Last night after posting, I went to visit a friend I haven't seen in about five years. He was pretty much my best buddy in High School and lived right across the street from me. Sadly, he's one of those people that hasn't "broken his mold." He's still looking for a better job, better place to live, while still playing video games late into the night. I hope he finds what he's looking for and soon.

While I finally got Evolution to get the right time on my PDT appointment (I couldn't edit the time using the interface, and changing the time/timezone/combo on the actual .ics file didn't help either so I just deleted it and made my own). The honor of today's code complaint goes to the guy that's posting tomorrow's www.thedailywtf.com, Eric Sink. He had a blog posting that made reddit because he was able to make 100% code coverage (http://software.ericsink.com/articles/Code_Coverage.html). While this is a commendable feat, there is something that just isn't right about his example:

if (condition1)
return result1;
else if (condition2)
return result2;
else if (condition3)
return result3;

Here's a hint, it isn't the fact that I left off the exception part he had so that he would get past the "not all control paths return a value" message. It's the fact that if he wrote the code right he would only need one return value.

Think of the poor sap that uses this function five years down the road and discovers it doesn't work with his exciting new app. How much harder is it going to be for him to find the bug when he's putting a command to debug what is returned by the function with it laid out that way? Compare it to this:

if (condition1)
returnValue = result1;
else if (condition2)
returnValue = result2;
else if (condition3)
returnValue = result3;
return returnValue;

It's simpler to follow, prevents the C# error, and allows for easy use later down the road. This is what proper software engineering is about. Not just getting it working, but making it right for the people that extend/maintain/etc. the code after you.


Double Dose

Well, I didn't post yesterday because I went to bed early. Therefore, this will consist of my grips for yesterday and today.

Yesterday I was greeted to an error message at work. It consisted of the phrase "Access is denied." Turns out the machine had been plugged into the wrong network jack. What this has to do with permissions I'll never know. I also tried to get audio for YouTube working on Ubuntu. Why does Linux make everything so hard? What is ESD and why does it not perform the way it should? Why, instead of fixing it, did someone come up with alsa?

Today was the first test in my Biostatistics class. Thanks to the crappy service at Norm's I got there five minutes late. I was still able to answer all the questions though. I'm sure I got the last question right. However, I wasn't sure how to "show my work." I know that doesn't make sense, but I used basic math to answer. I'm sure the teacher wants the logical probability proof. Oh well.

Today's bad software gripe goes to Evolution. I got an appointment from a vendor on the West Coast (I'm on the East). Instead of being smart enough to translate the timezone correctly, I now have an 8AM PDT meeting at 8AM EDT. I wonder who'll be there at that time? Of course, this seems to be on par for Evolution. That thing crashes at least once a week. It hasn't done it lately, so I'll get a double dose tomorrow. Also, whoever designed it's e-mail address interface was smoking some rare form of crack, it's God Aweful. Try to remove one recipient from a list. Go ahead, I dare you.


Another Sunday Post

This is the real Sunday post...

Well as I mentioned, I got gallery working. I downloaded the 2.1.2 release. I must say that I'm not that impressed with it. Like most software out there, the phrase "rough around the edges" applies. I had to can the first install to get Postgres installed and running. When I tried the second install, it would only get to the fourth step before generating a new "login authentication" code. I think the apache thread is regenerating and that caused it, but I only looked through enough code to make the authentication check only return true.

Now, everytime I try to do something ... anything ... I get a stupid "Security Violation -- The action you attempted is not permitted." message (we'll explain why it's stupid below). The funny part is that if I hit refresh, it takes. So, immediately, I have to wonder if the bug is in the first message or the "taking" of the second try. In addition, the drop down under the images only appears on every other showing of the thumbnail page. This is really annoying. To top it off, there isn't a way to go from pic-to-pic on the edit photo page. So the whole change a photo's caption process is like this:

1. Choose picture to edit and enter "edit picture" mode.
2. Make change and click Save.
3. Notice error message, click refresh.
4. Notice "save successful" message at top, click the album title link at top.
5. Notice that drop downs aren't there, click refresh.
6. Navigate to next picture and repeate steps 1-5.

Now, why is that security message stupid? Well, which action did I (or the computer program on my behalf) perform that is causing the volation? Why is it "not permitted" (am I not part of an appropriate group, do I not possess the right token, etc.) How can I obtain the appropriate security level? Can you give me anything else to work with?

That's my beef with gallery2 atm. And yeah, I know the Open Source credo "don't whine, submit a patch, you didn't pay for it, we're better than proprietary." So much for software that "just works."

Don't get me started on YouTube's "agree that all videos flagged ... will be viewable" confirmation. Infinite loop ... yeee-haaaw.

PostgreSQL and Gallery Working

Petr Janda was nice enough to send me clarification on how to get PostgreSQL startup scripts installed on DragonFly. Now that and Gallery are working on my server. Hopefully Ang will get some pictures uploaded soon (considering she was the motivation to get this working).

I'm fixing a friend's mom's PC. Her modem died. The machine is running 98 (SE at least). By chance, I went to windowsupdate. You get a wonderful feeling when you have to install the ActiveX control. Let's see 8 years and never updated. No wonder we have so many spambots around.

It's late. This is going to come up as Sunday's even though it's really the one for Saturday. Aren't Saturday nights that you spend at home fun? At least I wasn't alone.

Oooh nice. Tried the Spell checker. Got this error:

name: TypeError
message: Statement on line 205: Could not convert undefined or null to object
Line 205 of linked script http://beta.blogger.com/app/scripts/dom.common.js
return iframe.document;
Line 1 of eval script
getIFrameDocument(iframe).onkeydown = func;
Line 114 of linked script http://beta.blogger.com/app/scripts/spellcheck.js
setIFrameEvent(iframe, "keydown", keyhandler);
Line 256 of linked script http://beta.blogger.com/app/scripts/spellcheck.js
Line 1 of eval script
BLOG_selectErrors([["Janda", 5, "Jandy", "Jenda", "Kaunda", "Canad", "Canada"], ["PostgreSQL", 66], ["startup", 77, "start up", "start", "stirrup", "statue"], ["DragonFly", 106, "Dragonfly", "Dragon Fly", "Dragonfly's", "Dragonflies"], ["Ang", 176, "Ange", "Angy", "Nag", "Ag", "An"], ["windowsupdate", 395, "windows update", "undissipated", "undisputed", "anticipated"], ["ActiveX", 468, "Actives", "Activates", "Octaves", "Arctics", "Activeness"], ["spambots", 550, "spam bots", "steamboats", "steamboat's", "speedboats"]]);
Line 169 of linked script http://beta.blogger.com/app/scripts/message.js
Goo_HandleResponse(transaction, msg_id, transactionStart, opt_handler);
At unknown location
[statement source code not available]


BLOG_selectErrors([["Janda",5,"Jandy","Jenda","Kaunda","Canad","Canada"],["PostgreSQL",66],["startup",77,"start up","start","stirrup","statue"],["DragonFly",106,"Dragonfly","Dragon Fly","Dragonfly\'s","Dragonflies"],["Ang",176,"Ange","Angy","Nag","Ag","An"],["windowsupdate",395,"windows update","undissipated","undisputed","anticipated"],["ActiveX",468,"Actives","Activates","Octaves","Arctics","Activeness"],["spambots",550,"spam bots","steamboats","steamboat\'s","speedboats"]]);


PostgreSQL on DragonFly

I run DragonFly (http://www.dragonflybsd.org) on my server at home. Today I wanted to install PostgreSQL (http://www.postgresql.org) and run it as a back-end database. I've found out that pkgsrc, which DragonFly uses for its applications, doesn't install PostgreSQL start/stop scripts, meaningful config files, etc. In addition Google reveals no HOWTOs on getting it running on either pkgsrc or NetBSD (where pkgsrc was born).

Looks like I've found something to occupy my "free time" this weekend.

Why does Ctrl+Shift make blogger show the preview? I'm way too used to that key combo selecting words at a time.


Another day, another post

Not much today. Class was fun. I was told to sit next to the "problem kid(s)" to "help them out." That's always lovely to hear.

I should mention to the reader(s) that at home I live with my wife, our two daughters, her mom, and her grandmother. Being at home is always a wonderful experience, and I treasure it greatly.

Back off to bed. Hopefully tomorrow I won't be in such a sarcastic mood.


My first Blog

Well, I've finally decided to give this "blogging" thing a try -- wheee! Of course, I had to give it my own spin and call it a "flog." This is simply because this thing is going to be my blasting board. Because I'm quite the "critical person", I expect my thoughts, etc. are going to be quite heated (and sure to piss off a few folks). I'll leave the comments open to the public so you can voice your opinions along with mine. We'll see how long it takes for the spammers and trolls to change my mind.

I decided to go with blogger instead of building my own. This is simply because I lack the time. Yeah, I know there are other ones besides blogger. I don't know why I chose blogger instead of them, I just did. I'm on the beta because I like to try out the new goods. However, I also get all the new bugs. It acts polly-wolly-crappy on both Opera 9 (can't get past the login) and IE 7 (can't save my color scheme), so I'm using FF to post this. Nothing makes me happier than when a site makes me use this fanboy browser...yay! We'll see how long I can stomach it until I give in and try something else.

Oh well, I better get to bed now. I've got both work and school tomorrow, so I better get a good night's sleep (and it's already 0:00).