Published by

Comments

Monday, May 17, 2004 2:55 PM by Jim Bolla

# re: Your Daily Cup of WTF

WTF is right. I am curious as to what it's actually being used for. If they needed schema info on datatypes, why not use sql's built-in functionality to get it? select * from systypes ...there it is. no need for some magic table. the original developer should be given a wedgie or purple nurple or some other form of gradeschool abuse.
Monday, May 17, 2004 3:03 PM by jakeypoo

# re: Your Daily Cup of WTF

well, how else will you get a list of the possible datatypes? i mean, besides the fact that any programmer probably has them memorized already, the pull down menu that lets you select the data type, help files, books online, ...
Monday, May 17, 2004 10:11 PM by RegisteredTM

# re: Your Daily Cup of WTF

or have a table with

strDataType, strDataTypeDesc?
Tuesday, May 18, 2004 11:13 AM by Ryan Gregg

# re: Your Daily Cup of WTF - tblState

I know just what you mean. However when you have people who don't know what they're doing forcing design decisions, sometimes you don't have a choice.
Tuesday, May 18, 2004 12:17 PM by Addy Santo

# re: Your Daily Cup of WTF - tblState

Don't take this personally Alex, but consultants see so much of this (often on a daily basis) that it isn't really newsworthy :)

Also, beware that the person you are rediculing today might turn out to be your future boss ;) Stranger things have happened
Tuesday, May 18, 2004 1:54 PM by Phil Scott

# re: Your Daily Cup of WTF - tblState

I was doing some SQL Server training for some people that had taken over a database designed by a consultant that had just left. While I was showing the database diagram tool, one of them said that their tool at work didn't have the lines between the tables or the little yellow thing like mine did.

and upon further review, their 300 table application had neither primary nor foreign keys defined. I later got an e-mail saying that indexes where never created either.

opppps.
Wednesday, May 19, 2004 2:14 AM by Jon Galloway

# re: Your Daily Cup of WTF - tblState

I had to support an application with a state table that had GUID's for primary keys. This will be useful when we approach 3.40282367 × 10^38 states, or when multiple entities are creating states simultaneously and need to merge their lists. Until that time, it makes for difficult maintenance.
Thursday, May 20, 2004 2:25 PM by TrackBack

# Your Daily Cup of WTF - tblStaffDirectory

Thursday, May 20, 2004 2:34 PM by jakeypoo

# re: Your Daily Cup of WTF - tblStaffDirectory

what's wrong with

ID
Values

id, of course, being an autonumbered id, then values would be a comma separated list like "Username, Chris29, Password, pw1234, Date, 5/1/04"

well, i suppose the fields should be strUsername, strPassword, datDate, etc.
Thursday, May 20, 2004 2:47 PM by Jim Bolla

# re: Your Daily Cup of WTF - tblStaffDirectory

I fear the awesome performance of storing every value as a text field. This application must be pretty awesome to be able to handle a virtual database schema that can change w/o application modifications to accomodate the changes.
Thursday, May 20, 2004 3:29 PM by Phil Scott

# re: Your Daily Cup of WTF - tblStaffDirectory

Man, these posts crack me up. I had someone ask in class a couple weeks ago the maximum amount of data you can store in a row in SQL Server. I told them about 8k. Then they asked "no, i mean if you make all the fields text."

err, ok. my estimate was about 1,000,000,000,000 bytes of data per row btw.
Thursday, May 20, 2004 3:52 PM by Jerry Pisk

# re: Your Daily Cup of WTF - tblStaffDirectory

If you make all fields text (or image) then the maximum number of characters (bytes) you can store in a signle table row is (2^31 - 1) * 1024 which equals to 2,199,023,254,528 which is 2 ^ 41 - 1024. You'll get a little less characters if you're using double byte character set.
Thursday, May 20, 2004 4:10 PM by Phil Scott

# re: Your Daily Cup of WTF - tblStaffDirectory

Crap, you are right 1024 text fields per row, not 512. Doh! If this comes back to haunt me, I'll just say I was talking unicode data :)
Thursday, May 20, 2004 4:32 PM by Jerry Pisk

# re: Your Daily Cup of WTF - tblStaffDirectory

Heh, even if you say it was Unicode you'd still be wrong, because you said bytes, not characters ;) Otoh people who ask you such a question are not the ones to realize that.
Thursday, May 20, 2004 4:54 PM by Wim

# re: Your Daily Cup of WTF - tblStaffDirectory

You can't be serious! This sure is one way to kill performance...

Indexing down the drain, execution plan can't be optimized, bastardized datatypes, unmaintainable (speak of maintenance) overly complex queries, I could go on.
Thursday, May 20, 2004 4:54 PM by brady gaster

# re: Your Daily Cup of WTF - tblStaffDirectory

i'm so so so so so all about this thread. i think you should change the entire focus of your blog and just do things like this.

heck, why not buy "dailydoseofwtf.com" and we'll ALL contribute!

YEAH!
Thursday, May 20, 2004 6:19 PM by denny

# re: Your Daily Cup of WTF - tblStaffDirectory

I have done this kinf of thing for a set of "User Defined" items in an app but as was posted... indexing and sql server optimizing just got dumped to heck....

5 - 10 seconds you say?? you don't think the users mind?? what happens when you get say 50 hits on that in a 10 second time ?? bet it chokes and some users get errors....

where a normal db will be able to list that same data for say 1,000 users in say 1-2 seconds every time... no errors no lag.

sorry this is a good idea used for the wrong thing...
Friday, May 21, 2004 7:42 AM by ruurd

# re: Your Daily Cup of WTF - tblStaffDirectory

maybe denny should submit his own table scheme's to this blog?

sorry man, read between the lines
Friday, May 21, 2004 11:04 AM by Mischa Kroon

# re: Your Daily Cup of WTF - tblStaffDirectory

Friday, May 21, 2004 12:25 PM by Alex Papadimoulis

# re: Your Daily Cup of WTF - tblStaffDirectory

*sigh*

Sarcasm is dead.
Friday, May 21, 2004 1:55 PM by Jerry Pisk

# re: Your Daily Cup of WTF - IsTrue()

Well apparently whoever coded that function didn't think it through and forgot to include IsNotTrue, because how exactly are we supposed to tell when an expression is not true?
Friday, May 21, 2004 1:57 PM by Scott Galloway

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

Very very nice, thanks Alex!
Friday, May 21, 2004 2:07 PM by Phil Scott

# re: Your Daily Cup of WTF - IsTrue()

I did think about create the IsSomething function just because I was sick if writing Not IsNothing. But then I had a beer and everything was cool.
Friday, May 21, 2004 2:08 PM by brady gaster

# re: Your Daily Cup of WTF - IsTrue()

oh DUDE you SO FREAKING RULE!

i'll help. got a host for the puppy yet?
Friday, May 21, 2004 2:51 PM by AndrewSeven

# re: Your Daily Cup of WTF - tblStaffDirectory

I once had an architect and a DBA who came up with an equivalent suxtem, but the had an IsElement IsAttribute and Names.

We didn't have to write the queries and all the data was provided FOR XML AUTO which we were able to convert into recordsets or into deep and complex object heiarchies in VB6.


Sarcasm dead? Tha sounds like a really brilliant idea. I can recommend an arch to help with that.
Friday, May 21, 2004 2:55 PM by James Geurts

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

Sweet! this looks very useful. Any chance of being able to customize the pasting options, in the next version? For example, to dynamically add the option: paste as Html. Or for another example, remove paste as Region, if not needed...
Friday, May 21, 2004 4:14 PM by Chris McKenzie

# re: Your Daily Cup of WTF - IsTrue()

Your "Daily dose of WTF?" has been the highlight of my last couple of weeks!

Hey, I wrote an IsSomething function in VB6--of course, I was training a beginner at the time, and "IF Not SomeObject Is Nothing then" doesn't really make a lot of sense :)

Chris
Friday, May 21, 2004 4:14 PM by Addy Santo

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

Have you submitted this to Royo's VS lugin contest? If not, whatcha waiting for??
Friday, May 21, 2004 4:19 PM by Austin Bain

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

Great util. I'd like to be able to set up keyboard shortcuts to each of the commands. However I could not find the commands in the keyboard mapping. Also the formatting of the region block was not to my liking I'd like to see auto formatting run on the paste region to clean up the code. Also it would be nice to paste returns as Environment.Newline for C#.

I think you have made a great tool here. Keep it up.
Monday, May 24, 2004 9:09 AM by TrackBack

# Your Daily Cup of WTF - tblDataTypes

Monday, May 24, 2004 9:12 AM by TrackBack

# Your Daily Cup of WTF - tblState

Monday, May 24, 2004 9:13 AM by TrackBack

# Your Daily Cup of WTF - tblStaffDirectory

Monday, May 24, 2004 9:13 AM by TrackBack

# Your Daily Cup of WTF - tblStaffDirectory

Monday, May 24, 2004 9:14 AM by TrackBack

# Your Daily Cup of WTF - IsTrue()

Monday, May 24, 2004 2:56 PM by TrackBack

#

Monday, May 24, 2004 2:56 PM by TrackBack

# Smart Paster

Tuesday, May 25, 2004 12:30 PM by TrackBack

# Now

Tuesday, May 25, 2004 2:37 PM by TrackBack

# Smart Paster for Visual Studio .NET

Tuesday, May 25, 2004 5:58 PM by bert corderman

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

this thing is awesome!!!!. I usally always store queries in my code behind pages that are several hundred lines long. It can take me almost an entire day sometimes. Now with this tool even a query as long as this one http://weblogs.asp.net/alex_papadimoulis/archive/2004/05/25/141364.aspx will be a snap :)

Thanks
Bert
Tuesday, May 25, 2004 5:58 PM by TrackBack

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

Tuesday, May 25, 2004 10:15 PM by James Geurts

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

sweet! thanks for implementing our ideas so quickly!
Wednesday, May 26, 2004 12:50 PM by chadbr

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

??

Why don't you just do you strings like so?

someStr = @"
my
long
string here.
I don't need any quotes
or pluses anywhere
";
Wednesday, May 26, 2004 4:09 PM by TrackBack

# Greg's Cool [Insert Clever Name] of the Day

Greg's Cool [Insert Clever Name] of the Day
Wednesday, May 26, 2004 4:20 PM by Frans Bouma

# re: Your Daily Cup of WTF - Because New() Fails Way Too Much

Perhaps I don't do a lot of VB.NET work, but constructs can fail and thus if you know they can fail, you should test on that. So I don't see what's the big deal :)

(I'm more concerned about the exception being thrown without any description)
Thursday, May 27, 2004 4:41 PM by Alex Papadimoulis

# re: Now "Paste As.." in VS.NET with Smart Paster Add-In

chadbr,

In 1.1, you can configure it to Paste As a line-spanning string literal.

- Alex
Friday, May 28, 2004 5:14 PM by TrackBack

# New Add-Ins

Friday, May 28, 2004 5:17 PM by TrackBack

# New Add-Ins

Friday, May 28, 2004 6:25 PM by TrackBack

# http://blogs.msdn.com/larryosterman/archive/2004/05/28/143955.aspx

http://blogs.msdn.com/larryosterman/archive/2004/05/28/143955.aspx
Saturday, May 29, 2004 1:02 PM by TrackBack

# http://dotnetjunkies.com/weblog/mlevison/archive/2004/05/28/14761.aspx?pending=true

http://dotnetjunkies.com/weblog/mlevison/archive/2004/05/28/14761.aspx?pending=true
Thursday, June 03, 2004 12:01 PM by Chris Stewart

# re: A Former Microsoftie Forecasts Microsoft Doom

Microsoft's doom? Ha! Their presence on the desktop alone will keep them in business for a very very long time.
Thursday, June 03, 2004 12:54 PM by Jason Mauss

# re: A Former Microsoftie Forecasts Microsoft Doom

I appreciated the fact that the guy did his due dilligence and provided plenty of "evidence" of how many Microsoft challengers are making their way successfully but, this guy has obviously been bitten by the open source bug. Many open source fans like that guy love to have you believe OSS is a lot more successful than it actually is or has "really become a viable option for the[insert name of european country] gov't."

What the guy doesn't talk about, that's actually quite important, is the fact that Linux, Google, IBM, Apple, and everyone else, despite how long they've been around, are all going to face challenges of their own, similiar to Microsoft. And unless this guy can predict the future, there's no way to know that the aforementioned businesses won't make some stupid mistakes of their own, allowing Microsoft or other competitors to take over in the respective markets. That guy seems to forget that one of the biggest reasons for Microsoft's success is because they made the fewest mistakes. Not because they had the best OS or best productivity apps.

And honestly - who starts off w/ an opening paragraph like that? It's the typical "whine about Microsoft products"...that makes him sound like an OSS shill. Well, either that or a major "n00b" - which I doubt since he worked at MS for so long. Sure, we've all had little annoying problems here and there with office products, vs.net, etc. However, if you do work of any real value or importance, you figure out the issue and solve it. Just because a feature doesn't work like you expected doesn't mean you give up. RTFM man.
Saturday, June 05, 2004 1:28 AM by Sjoerd Verweij

# re: Your Daily Cup of WTF - tblStaffDirectory

Awesome. A full 8K page for every non-null property of this entity...

WOW.
Saturday, June 05, 2004 1:30 AM by Sjoerd Verweij

# re: Beyond "Hello World"?

Try what I did with VS.NET 2002 B1: a tray-bound utility to convert between units (meters->pounds, miles->kilometers). Mine was called TUSUC (The Ultimate Silly Unit Converter). It's fun AND useful.
Saturday, June 05, 2004 1:36 AM by Sjoerd Verweij

# re: Your Daily Cup of WTF - Who Needs Stored Procedures, anyways?

I think the only reason I'm not crying is that I've seen worse. (Imagine doing this 3 times and programmatically writing it out to a -- fixed name -- text file, opening another query, physically padding it to the first one's output file format... "exec sp_cmdshell 'bcp .......'", AND DOING THAT FOR 6 MOTHER-LOVIN' QUERIES IN A MOTHER-LOVIN' ROW... (breathe... breathe... breathe...))
Tuesday, June 15, 2004 10:29 PM by TrackBack

# An Introduction to Smart Clients

Wednesday, June 16, 2004 6:38 AM by mini chopper

# re: An Introduction to Smart Clients

yes, good
Thursday, June 17, 2004 1:17 PM by Jason Mauss

# re: Using Modules in VB.NET

I have always used modules both in VB 6 and VB.NET. in VB6, they were a great way to create static class like functions so that you could just call a method without needing to create an instance of an object and worry whether it's instantiated or not and all that other crap.

In VB.NET it's roughly the same idea. Use modules as a way to group/organize methods that are more utility methods than part of a class.
Thursday, June 17, 2004 2:56 PM by Jason Bock

# re: Using Modules in VB.NET

I believe in the next version of C#, aren't they adding the static keyword for class definitions, like this:

public static class MyClass
{
public void MyMethod() {}
}

IOW, this is a class that has nothing but static methods...like a module ;).
Wednesday, June 30, 2004 3:57 PM by matthew

# re: QBasic 4.5 Available for Download

qbasic != quick basic.

Quick Basic was qbasic with a compiler. So you could compile your rems and gotos into an exe.
Wednesday, June 30, 2004 4:43 PM by Jason Barnabe

# re: Using Modules in VB.NET

I say if there exists an OO-y function, use it. It makes it a lot easier to understand.

Instead of
newString = UCase(myString)
use
newString = myString.ToUpper()
Wednesday, June 30, 2004 4:49 PM by Alex Papadimoulis

# re: QBasic 4.5 Available for Download

And of course, the Irony here is that back then I too yelled at folks who confused the two. Gahh!

But, that aside, QBasic is still pretty good to learn in, as it's is free. QuickBasic, AFAIK, isn't free ... can you even buy it anymore?
Wednesday, June 30, 2004 6:57 PM by Josh Flanagan

# re: QBasic 4.5 Available for Download

Don't fret, you CAN still get QBASIC as well, it just isn't as obvious. Instead of looking in the Developer Tools branch, look in the Platforms branch. Under MS-DOS, grab the MS-DOS 6.22 self-extracting archive. You can then grab EDIT.COM and QBASIC.EXE from the "Upgrade" folder. Enjoy the nostalgia!
Thursday, July 01, 2004 1:10 AM by Centaur

# re: QBasic 4.5 Available for Download

Ah, the blessed days when the OS was provided with a development tool in the box…
Wednesday, July 07, 2004 4:02 PM by Jim Bolla

# re: Planning for the Future

ooh ooh. do Doctors/Surgeons. perhaps the patient will change his mind about this kidney transplant so we should install it as an external module instead of embedding it with the rest of the, erm, source code.
Wednesday, July 07, 2004 4:06 PM by Jason Mauss

# re: Planning for the Future

It's funny you mention those metaphors. I was in a meeting one time, and the client was talking about how they wanted to make a change that would've affected all 3 tiers of the application, the architecture of it, etc. They totally weren't able to understand why some much would have to change.

I ended up saying something like, "Imagine that after attempting to fix a faucet that didn't work you realized the reason it didn't work was because there were no pipes or plumbing at all in your house. Changing the faucet isn't the only change that's needed."

That apparently was clear enough and they understood things after that.
Wednesday, July 07, 2004 5:27 PM by Alex Campbell

# re: Planning for the Future

Thanks Alex! This is a much more amusing illustration of what I was trying to put forward.
Tuesday, July 13, 2004 4:19 PM by Shannon J Hager

# re: +5, Insightful

the reason: anti-virus companies only list viruses they can cure. There is no cure for IE (which could be classified as a trojan horse at worse, adware at best) on Windows. There are partial work-arounds but no way to remove it completely. Antivirus companies can not admit to a failure like that.
Friday, July 16, 2004 5:06 PM by Alex Papadimoulis

# re: QBasic 4.5 Available for Download

I cannot provide the software to download. Look for it yourself on google:

http://www.google.com/search?sourceid=navclient&ie=UTF-8&oe=UTF-8&q=quickbasic+4%2E5+download
Tuesday, July 20, 2004 1:27 AM by gerrgeger

# re: PHP vs. ASP.NET

Yeah, that article was total bollocks. The guy that wrote it has no idea what he's writing about.
Tuesday, July 20, 2004 3:22 AM by David Cumps

# re: PHP vs. ASP.NET

Check this place for a lot of comment on this topic: http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=490327
Tuesday, July 20, 2004 3:29 AM by Andrew Stopford

# re: PHP vs. ASP.NET

Amazing what happens when ASP.NET is talked about as a platform technology. But hey its the OTN, unbiased.. ;-)

Lets throw in Mono and see how it comes up

Platform price, free
Platform, strong
Platform, any
Source available, yes

That leaves us with speed and effiency. I think the point that is trying to be made here is that PHP can sometimes out perform ASP.NET for certain things. I am sure it can, but a true test is a bench mark test of equal footing. Only with that can a claim be made that PHP is faster than ASP.NET or vice versa.
Tuesday, July 20, 2004 4:29 AM by Russ C.

# re: PHP vs. ASP.NET

Did anyone else notice that the 2 exmaples of connecting to an Oracle database do 2 different things ?

The PHP one only opens a connection and displays an Error.

The VB (easier to read one) connects to the Database, runs a query and writes the results and closes the Connection.
Tuesday, July 20, 2004 5:47 AM by Wim

# re: PHP vs. ASP.NET

From the article: "With ASP, however, you're investing from the very beginning, and you're spending for add-on technologies—libraries for doing graphics manipulations, for instance."

WTF?!?

Looks like he is talking about ASP.NET, since classic ASP is not being talked about. So what on earth is this guy on? Magic mushrooms? Space cake? Has he actually looked at the .NET class library and checked out the System.Drawing namespace?

Another pathetic attempt to bash anything Microsoft.
Tuesday, July 20, 2004 7:39 AM by Sonu Kapoor

# re: PHP vs. ASP.NET

Tuesday, July 20, 2004 9:40 AM by Wally

# re: PHP vs. ASP.NET

Hosted by Oracle. Need anyone say more?

Wally
Tuesday, July 20, 2004 11:06 AM by Rolando

# re: PHP vs. ASP.NET

"He focuses on integrating OPEN SOURCE technologies with commercial technologies such as Oracle"

and hosted by Oracle!

well... no way the article can be unbiased
Tuesday, July 20, 2004 11:08 AM by Rolando

# re: PHP vs. ASP.NET

"He focuses on integrating OPEN SOURCE technologies with commercial technologies such as Oracle"

and hosted by Oracle!

well... no way the article can be unbiased
Tuesday, July 20, 2004 2:02 PM by Free

# re: PHP vs. ASP.NET

How about an IDE for PHP? VS.net is a killer app for anything .Net.
Tuesday, July 20, 2004 9:14 PM by Jakeypoo

# re: +5, Insightful

My guess:
Shannon J Hager posts on Slashdot as Iphtashu Fitz.
Saturday, July 24, 2004 8:22 AM by qwerty

# re: PHP vs. ASP.NET

Wow, the power of slashdot. If that page hadn't been posted with a flamebait headline on /. I doubt anyone would even know about it.
Tuesday, July 27, 2004 2:21 PM by Scott Galloway

# re: It only took a Long Weekend

Well, when you think about it, it's possible that the very basic IL stuff only took a relatively short time...even though it's really important doesn't mean it's necessarily huge. Most of the work on MONO seems to be in the implementation of all the namespaces - the actual basic infrastructure (which I guess is derived from ROTOR) didn't seem to take that long...
Wednesday, July 28, 2004 4:16 PM by Vol(o)

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

Great tool, but doesn't work in vs 2005...
Any hope to get it there?
Thursday, July 29, 2004 4:48 PM by Theologian

# re: It only took a Long Weekend

I have also heard stories about developing MONO over a long weekend at computer camp.

In fact, the developers must've stayed up late all weekend with MONO - because for the next few weeks they had trouble staying awake.
Thursday, August 05, 2004 1:18 PM by rs

# re: Why VB Is Better Than C# ...

VB.Net needs multiline comments and multiline code support.

Screw placing a ' before each line.

Screw placing _ at the end of each line.

It's the little things that matter.

-rs-
Thursday, August 05, 2004 1:29 PM by John Cavnar-Johnson

# re: Why VB Is Better Than C# ...

I like to call all these silly tech arguments "artichokes and roses". As in, if normal people were like geeks, the internet would be full of endless arguments about whether artichokes are better than roses. It would have all the right qualities. They're both plants, right? So, one has to be better than the other. Then, somebody will say, "yeah, but roses are ornamental plants, while artichokes are food. So if you want to grow something to look at, you want have roses, but if you want to eat, you want artichokes." The inevitable responses would come from the folks who cook with roses and those who grow artichokes ornamentally (both true, by the way). Then the conversation would descend into whether thorns are good or bad, etc. etc. See how fascinating that discussion would be?
Thursday, August 05, 2004 2:29 PM by Aaron

# re: Why VB Is Better Than C# ...

Arguing about stuff like you meantioned (syntatic stuff) is lame. There *are* a few actual feature differences.

For instance, VB.Net can be used in a late-bound manner, which is sometimes very useful for asp.net development.

It also has the Handles clause, also very handy for UI dev.

C# has pointers and a clever syntax for adding event handlers.

If you're going to argue about it (which really is silly given the similarities), at least argue about features.
Thursday, August 05, 2004 4:49 PM by Brian Carroll

# re: Why VB Is Better Than C# ...

Which is better, a Chevy or a Ford? Although the ride might be a little different, the bottom line is - they both get you where you're going! I've been using VB for a lot of years, but after working with C# a little here and a little there, I'm really starting to like it. Not because it can do anything more than VB, but simply because I'm enjoying the ride.

Speaking of Ford, I really wish mine had a low fuel light. Likewise, I wish C# wasn't case-sensitive.
Friday, August 06, 2004 6:35 PM by Jason

# re: Why VB Is Better Than C# ...

Why C# is Better....
-'==' Assignment operator is not the same as the comparison operator
-operator overloading
-'--'
-'++'
-'@'
-as operator (string s = obj as string)
-'OnError GoTo' is impossible
-EntryPoint isn't hidden ([STATThread] static void Main(string[] args))
-'using' blocks
-'params' keyword
-less verbosity
-much easier to read
-intellisense is much less interfering
-better and more optimized MSIL generation
-unmanaged/unsafe code
-casting (instead of ctype, cbool, etc)
-XML comments
-Multiline comments
-event syntax
-delegate syntax
-pointers
-'ByVal' is very misleading (it passes a pointer (ie reference), not a value; whereas 'ByRef' passes a pointer to a pointer)
-does not hide "Advanced Members"
-unsigned values (uint, ulong)
-P/Invoke makes much more sense, and is uberly easier to figure out
-'Default Namespace' doesn't just prefix your classes namespace
-array/collection indexor is not the same as a function call ('[0]', vs '(0)')
-more & better literature (especially advanced topics)
-C# Developers make more money
-hierarchical constructor calling (ctor() : ctor("defaultValue"))
-option explicit by default (inforces correct type usage)
-doesn't hide delegate usage (AddressOf)


But Hey, I'm not predjudice against VB ;-)
I use it all the time, and its got some good features too (cough):


Why VB is Better....
-With Blocks
-Imports is more powerful than using
-optional parameters
-default parameters
-Beep function
-InputBox
-ID 10 T support
-There are more pretty colors
-If you can't tell, I am running out of things to put here...
Tuesday, August 10, 2004 8:34 PM by Stuart

# re: Javascript Anti-Spam Email Link (#2)

Using an image is a huge loss of functionality for the user. It's not clickable, it's not copy-able...

(Use a PNG not a GIF, anyway...)
Wednesday, August 11, 2004 4:52 PM by Brandon Behrens

# re: Contest to win "A First Look at ASP.NET v2.0"

The answer to the 2nd one is:

X=8 or X=-2/3
Wednesday, August 11, 2004 5:42 PM by Jason Mauss

# re: Contest to win "A First Look at ASP.NET v2.0"

Uhm...this is just a guess but, if it's frictionless, in a vacuum, no drag, then no matter how soft (or hard) you hit the ball, both balls will go in the same direciton...

Right Top Pocket. The cue ball fallows in.
Wednesday, August 11, 2004 7:50 PM by petal

# re: Contest to win "A First Look at ASP.NET v2.0"

http://www.plasmaphysics.org.uk/collision2d.htm

can't quite put it into words though....
Friday, August 13, 2004 2:57 PM by blameMike

# re: It only took a Long Weekend

Interesting... I actually just heard Miguel De Icaza say that most of the MONO code was developed prior to the release of ROTOR.

Check out this week’s .NET Rocks for confirmation.
Monday, August 16, 2004 1:39 PM by TrackBack

# When Comments go Wild

Tuesday, August 17, 2004 11:35 PM by don@ghostdev.ca (Don Newman)

# RE: Who needs Flash? (Cool DHTML Demo)

That was pretty damned impressive! And not just that I hate flash everywhere.
Saturday, August 21, 2004 4:15 AM by pompo500

# re: Who needs Flash? (Cool DHTML Demo)

Makes me proud to be a Finn. :)
Thursday, August 26, 2004 12:02 AM by chuckbuc

# re: Why VB Is Better Than C# ...

How does "-much easier to read" go into the c# category? Not even on a good day. I have been recently cursed and forced into doing some projects with C# when VB would of done the job just fine, easier to read, and done in half the time; if for no other reason then the advanced intelisence of the IDE in VB. I have absolutely nothing against C# except for the fact that it has been come vogue. And at this release that is all that it is. I am excited to see what vs2005 and future releases are going to further separate the languages. Anyone have to work in both C# and VB?
Thursday, September 02, 2004 4:27 PM by mes

# re: Javascript Anti-Spam Email Link (#2)

I have a wife, then we need to thest life
Friday, September 24, 2004 1:13 AM by Jeroen

# re: VB6 to C#

I've seen the same reasoning in several companies. Forcing their VB-coders in C# makes them think harder about OO and the lot.
I've seen too much VB6.net already and I don't like it.

The worst so far was a class that performed all database-actions (opening connection, 4 inserts and 2 updates, perform select, closing connection, build table with select and put it in session) in the constructor, so by the time your object is properly initialized, it's no longer used.
Thursday, September 30, 2004 12:12 PM by anonymouse

# re: Getting Dynamic HTML From a Page

Something like this is pretty invaluable too:

http://www.iconico.com/webtool/index.aspx

Esepcially when you are working on a site that uses 6 frames...
Sunday, October 03, 2004 1:23 PM by Thom K

# re: Getting Dynamic HTML From a Page

Firefox has an extension that does that already, I use it everyday: http://www.chrispederick.com/work/firefox/webdeveloper/
Friday, October 29, 2004 9:57 AM by Huw W

# re: Getting Dynamic HTML From a Page

I wrote something similar a while ago. My version just pops up the source of the page in a new browser window.

javascript:window.open('about:blank').document.write('<xmp>'+document.body.outerHTML+'</xmp>');
Sunday, November 14, 2004 7:03 PM by TrackBack

# Howard's List of Ultimate Visual Studio.NET AddIns

Sunday, November 14, 2004 7:06 PM by TrackBack

# Howard's List of Ultimate Visual Studio.NET AddIns

Monday, November 29, 2004 1:44 PM by Wallym

# re: Announcing the I-Hate-Oracle Club ;-)

The only problem is that there are some things that Oracle does that Sql Server currently does not do.
1. Genealogy. Oracle has built in support for it. It has taken several versions to get this correct.
2. Change tracking. Oracle has impressive support for change tracking that I am not familiar with in Sql Server.

Aside from the above, I am not a big oracle fan either. Unfortunately, programmers and developers don't make the buying decisions. They may be involved in technology direction, but not in the buying decisions.

Wally
Monday, November 29, 2004 2:07 PM by Tom Clancy

# re: Announcing the I-Hate-Oracle Club ;-)

And what's with broadband Internet access? It doesn't have any of the features I love about AOL. And how come I can't get no Tang round here?
Tuesday, November 30, 2004 3:18 AM by Alx

# re: Announcing the I-Hate-Oracle Club ;-)

Dude, read a book before trying a product that requires other than Next->Next->Finish->Reboot.
Otherwise you might hurt yourself.
Tuesday, November 30, 2004 4:15 AM by Pete King

# re: Announcing the I-Hate-Oracle Club ;-)

Heres another one that I ran into yesterday - Oracle has no value for true and false, its too strongly typed.

So I cant do this age old trick ...

WHERE (1=1)+(2=2)+(3=3)+(4=4)>1

(replace 1=1 etc with sql clauses) without invoking a series of case statements... arrgh... even access can do this!

PS - for anyone that doesnt know what Im doing here, Im checking for any combination of two of the sql clauses being true.
Tuesday, November 30, 2004 4:19 AM by Pete King

# re: Announcing the I-Hate-Oracle Club ;-)

Tom - AOL has a broadband service, three in fact, lol
Tuesday, November 30, 2004 4:49 AM by Pirannia

# re: Announcing the I-Hate-Oracle Club ;-)

if you can't figure the damn thing out, this is no reason to hate it. take women for instance, you don't hate them , do ya ?

if you write SQL statements like WHERE (1=1)+(2=2)+(3=3)+(4=4)>1, Oracle is definitely not for ya, stick with SQL server. have you tried
WHERE (1=1)*(2=2)*(3=3)*(4=4) <> 0 too ?

btw, you may want to have a look at PL-SQL specs and compare that to the 'so easy to use' SQL server language.
Tuesday, November 30, 2004 6:05 AM by Pete King

# re: Announcing the I-Hate-Oracle Club ;-)

Yes, that doesnt work either, unfortunately. Booleans dont have integer values - alien!

The way around it turned out to be a series of case statements. I ran into this as Im programming a code generator (admin selects things in a web form, shell scripts (ugh!) generate sql that is run against oracle).

Somebody please swap unix for win 2003!
Thursday, December 02, 2004 7:56 PM by TrackBack

# Oracle: Don't hate it just because you don't get it, get it?

Thursday, December 02, 2004 8:01 PM by TrackBack

# Oracle: Don't hate it just because you don't get it, get it?

Thursday, December 02, 2004 11:49 PM by TrackBack

# Oracle Rant, by proxy

Friday, December 03, 2004 7:29 PM by Foo Bar

# re: Oracle vs SQL Server Query Optimization

Do you ever analyze your tables, alex? You might find that the cost based optimizer works _significantly_ better (and picks the plans you'd expect) when you do that.
Saturday, December 04, 2004 6:02 AM by Frans Bouma

# re: Oracle vs SQL Server Query Optimization

Oracle's dyn. query optimizer is getting up to par with SqlServer's btw. I'm not sure on which ancient Oracle box you've tested it ;)

Also, I'd like to remind you that the current fastest DB in the world, DB2 (according to the TPC-C list), doesn't have an optimizer on board as you know it from SqlServer, as it compiles all stored procedures for example to C code and compiles these into programs.
Thursday, January 20, 2005 4:46 PM by Gabe Halsmer

# re: Be careful jumping to 64 Bit


An AMD fx57 3000+ vs. an Athlon 2400+? I imagine the CPU power has doubled, even in 32-bit mode. But that's just the CPU power. I think you noticed a speed increase when you upgraded to a 7,2000 rpm SATA hard-drive. The Athlon 2400+ was probably more then enough speed for the apps you run, so more CPU power wasn't noticed. But you specifically mentioned the right-click context menu...of a folder or drive in windows explorer? Yeah that's definitely hard-drive speed.

Remember boys and girls that CPU speed is measured in nanoseconds, while memory speed is in microseconds. And hard-drive speed is in milliseconds. So if you want to make your PC faster, a hard-drive upgrade can make the most difference in some cases.

BTW, if you want real speed and can afford the price of a small house, get some solid state disks. $130,000 for a 64GB hard-drive that runs at 1.5GB/sec. Wow!
Thursday, January 20, 2005 5:20 PM by Jason

# re: Be careful jumping to 64 Bit

You aren't going to see alot of performance difference from 32 bit to 64bit unless you are using in excess of 4GB of memory or inducing register pressure. The extra performance from Athlon 64 to its predecessors is mostly archicture, things like an on die memory controller..

Good reading:
http://www.anandtech.com/showdoc.aspx?i=1884&p=2
Thursday, January 20, 2005 5:26 PM by Christophe Lauer [MS]

# re: Be careful jumping to 64 Bit

Yep, think about 64-bit in terms of "more resources" and not in terms of "more computing power". More ressources means more memory, which translates in more users per server for Exchange or Terminal Services scenarios, more inbound TCP/IP connections in a Web server scenario, more file handles, and more data in memory for a Database, BI/OLAP scenario.

All this indirectly can finally translate in better performances, but that's not the primary point.

A ton of good information about 64-Bit Windows here:
http://www.microsoft.com/seminar/events/series/msdn64bitwin.mspx
(a dozen of on-demand webcasts)

Regards,
/CL
Thursday, January 20, 2005 6:41 PM by SBC

# re: Be careful jumping to 64 Bit

I too am looking forward to exploring the 64bit .NET world. Have most of the hardware components in place - hopefully soon..
My recent posting about the AMD chip and the WIN OS to go with it -
http://weblogs.asp.net/sbchatterjee/archive/2004/12/22/330010.aspx
Thursday, February 03, 2005 11:29 AM by Roy

# re: Return True? That's It? WTF?

I think this is a totally valid example of methods returning static values.
Thursday, February 03, 2005 7:35 PM by Jon Limjap

# re: Return True? That's It? WTF?

Yup, I agree too. The fact that your class Inherits some other class which means that the property may be set to true some other place and be variable at another.

I'm sure you wouldn't put try...catch handling on that Get though. :p
Monday, February 07, 2005 11:15 AM by James

# re: GMail Invites. Still Want Em? I Got a Bunch.

Sure Alex, I'll take one- jamesmforrester@hotmail.com.

Thanks,
James
Monday, February 07, 2005 11:46 AM by rajamohan

# re: GMail Invites. Still Want Em? I Got a Bunch.

Alex, I can use one.

rajamohan_kr@hotmail.com
Monday, February 07, 2005 11:53 AM by Jason

# re: GMail Invites. Still Want Em? I Got a Bunch.

Thanks in advance for the invite, Alex. hardsale@yahoo.com
Monday, February 07, 2005 11:55 AM by George Baev

# re: GMail Invites. Still Want Em? I Got a Bunch.

I shall be very happy to get one

geo_baev@yahoo.com
Monday, February 07, 2005 12:05 PM by Gmail Spooler

# re: GMail Invites. Still Want Em? I Got a Bunch.

No need to beg, one at a time- folks have been pooling/donating their unneeded invites at http://isnoop.net/gmailomatic.php

Looks to be 20,000+ unused invites currently.
Monday, February 07, 2005 12:05 PM by joe

# re: GMail Invites. Still Want Em? I Got a Bunch.

Let me in.
hallberg_joakim @ hotmail.com
Monday, February 07, 2005 12:59 PM by Jay Miller

# re: GMail Invites. Still Want Em? I Got a Bunch.

I'll take one as well.
jaydmiller@insightbb.com
Monday, February 07, 2005 1:16 PM by Mark

# re: GMail Invites. Still Want Em? I Got a Bunch.

Me too. Thanks.
landmark450@yahoo.com
Monday, February 07, 2005 3:36 PM by Udi Dahan

# re: GMail Invites. Still Want Em? I Got a Bunch.

I've resisted as long as I could. I just GOTTA have one. Thanks.

UdiDahan@TheSoftwareSimplist.com
Tuesday, February 08, 2005 1:31 AM by Roland

# re: GMail Invites. Still Want Em? I Got a Bunch.

Yes please. rwhitmyre@verizon.net
Thanks a lot
Tuesday, February 08, 2005 10:33 AM by Alex Pinsker

# re: GMail Invites. Still Want Em? I Got a Bunch.

Thanks a lot!
alexpinsker at mail.ru
Wednesday, February 09, 2005 5:56 AM by Rob Herbert

# re: GMail Invites. Still Want Em? I Got a Bunch.

Yes please, that'd be great.
rpe_herbert@hotmail.com
Thursday, February 10, 2005 3:13 AM by GMail Lover

# re: GMail Invites. Still Want Em? I Got a Bunch.

I appreciate it.

gmail_lover_818@hotmail.com
Thursday, February 10, 2005 3:53 AM by Mr. Ed

# re: Be careful jumping to 64 Bit

I recently upgraded several systems to Athlon64. What's the absolute best part of going to Athlon64? Cool 'N Quiet. Less clock => less heat => less fan => less noise. After tons of heat problems with Athlon XP chips, I'm a happy camper now.
Saturday, February 12, 2005 4:10 AM by Brad G

# re: GMail Invites. Still Want Em? I Got a Bunch.

Me too Please
bradg@cox.net
Wednesday, February 16, 2005 5:23 PM by Tim

# re: GMail Invites. Still Want Em? I Got a Bunch.

Sure what the heck.. tlaughlin@midsouth.rr.com
Thursday, February 17, 2005 8:30 PM by Reji John

# re: GMail Invites. Still Want Em? I Got a Bunch.

Please send me a Gmail Invite.

Thanks
Thursday, February 17, 2005 8:32 PM by Reji John

# re: GMail Invites. Still Want Em? I Got a Bunch.

My Email is anjalimovie@yahoo.com

Thanks
Sunday, February 20, 2005 8:19 AM by Shashi

# re: GMail Invites. Still Want Em? I Got a Bunch.

Please send me a Gmail Invite.

My Enail is shashilfs_2001@rediffmail.com

Thanks
Sunday, February 20, 2005 1:00 PM by Timo

# re: GMail Invites. Still Want Em? I Got a Bunch.

I wouldn't mind one.
thanks in advance.
Sunday, February 20, 2005 1:05 PM by Timo

# re: GMail Invites. Still Want Em? I Got a Bunch.

and of course i forgot my email:
tiipe@catholic.org
Monday, February 21, 2005 5:47 AM by Shaz

# re: GMail Invites. Still Want Em? I Got a Bunch.

Yes please

icyrings@myway.com
Tuesday, February 22, 2005 11:46 PM by Mat

# re: GMail Invites. Still Want Em? I Got a Bunch.

would love a gmail invite if you've still got one... mat.spencer@bmw.co.nz
Wednesday, February 23, 2005 6:53 PM by Katja Bergman.

# re: GMail Invites. Still Want Em? I Got a Bunch.

Here's my comment. Hope you're happy now. :-)

Always interesting to have another mailbox. :-)

Katje@hccnet.nl
Thursday, February 24, 2005 6:07 AM by Chris

# re: Better Error Handling in SQL Server 2005 with TRY..CATCH

Can you give examples of errors that cause XACT_STATE()=-1? I've tried tran abort errors such as conversion errors, but they still don't do it.

Also can you elaborate on the meaning of the ERROR_STATE() function?

Thanks in anticipation
Sunday, February 27, 2005 11:24 PM by FaeLLe

# Sent a Gmail invite out to Everyone who requested one

Hi,

Sent out gmail invites to everyone who requested one on this post.

Except those who did not provide a email address off course.

- FaeLLe

www.FaeLLe.com
Wednesday, March 02, 2005 10:50 AM by Dan

# re: GMail Invites. Still Want Em? I Got a Bunch.

Yes please. Pretty please with a cherry on.

kyudos@hotmail.com
Wednesday, March 02, 2005 2:08 PM by Tim@TheOdells.org

# re: GMail Invites. Still Want Em? I Got a Bunch.

May I have one for my wife please?
Thursday, March 03, 2005 12:18 PM by Katrina

# re: GMail Invites. Still Want Em? I Got a Bunch.

I know you gave me one before, but can I have another gmail account. You can never have too many right?

-Katrina
(kittykat)
Monday, March 07, 2005 1:20 PM by Stephan Rose

# re: GMail Invites. Still Want Em? I Got a Bunch.

Would love one =)

kermos@somrek.net

Tuesday, March 15, 2005 10:47 AM by el Nino

# re: Worst. Best Practices Book. Ever.

I agree with all your criticisms but one. The issue of primary keys being meaningful or meaningless is a real debate and I fall on their side.

The issue is that ideally, primary keys should be immutable for a record (because it is referenced in many other tables with foreign keys.) If it is meaningless (i.e. a numeric counter), then that should be the case.

However, if you use a meaningful primary key like SS#, invoice# or ISBN value; it is possible that a user may mistype those values when entering records in the database. At some point in the future, someone needs to go back to that record, and want to correct the mistake. If there are a ton of references to this primary key, that could be a very expensive task (e.g. you have to go through all dependent tables and make the same update.)

In general, I like to use a meaningless primary key like "BOOK_ID" which is just a sequence type, and have a unique key for ISBN value so that uniqueness is still enforced, but there is no expense of updating that field.

There are exceptions--so they should not use the word never, but I believe it is good practice.
Tuesday, March 15, 2005 11:25 AM by The REAL Josh Anderson

# re: Worst. Best Practices Book. Ever.

I totally concur with el Nino. I find myself searching for other ideas to back him up, but there is no need. Top notch, el Nino!!!

Perhaps someone should write a scathing article about the "credibitliy" of this article... :)

Tuesday, March 15, 2005 11:33 AM by Barry Kelly

# re: Worst. Best Practices Book. Ever.

"Don't use primary keys that have meaning for the end user, such as invoice number or the ISBN value."

For relational DBs which are mapped to OO classes with some kind of business object mapping layer, there isn't much value in primary keys with business meaning, while there are drawbacks.

Business meanings (and codes) can and do change. Depending on what kind of tools you have available to change all your primary keys this may or may not be a big burden.

Not disagreeing with the overall jist of the review of the book (which I haven't read), just a point to consider.
Tuesday, March 15, 2005 11:48 AM by Stefano Demiliani

# re: Worst. Best Practices Book. Ever.

I had received in october a first preview of this book (written in italian language) and what I can say is that the preview I have in my hand is a good book, with lots of useful optimization tips.
I'm shocked to listen this opinion.
Tuesday, March 15, 2005 12:01 PM by Ian Cooper

# re: Worst. Best Practices Book. Ever.

I also fall in the 'avoid using natural primary keys' camp, if only because too often natural primary keys often turn out not to be so, or are incorrect and need changing. My, bitter experience, rule here would be to avoid natural primary keys or in the worst case avoid natural primary keys that you do not manage.
Tuesday, March 15, 2005 12:23 PM by Karl

# re: Worst. Best Practices Book. Ever.

I haven't seen the book, but this type of stuff really makes my blood boil. Assuming your description is modestly accurate I'm totally with you...
Tuesday, March 15, 2005 12:51 PM by Scott

# re: Worst. Best Practices Book. Ever.

+1 on not using PK's that have a business meaning. IMO you always want a PK that doesn't related to the data in the row in any way. Whether you use an int or a GUID is up for debate, but not picking a business value for a PK isn't.

At the very least, if you are going to use a buisness value for a PK, use it in a compound PK with an arbitrary value.
Tuesday, March 15, 2005 2:22 PM by Joe

# re: Worst. Best Practices Book. Ever.

Your comments seem harsh: I haven't seen the book, but I would for example expect a "best practices" book to recommend using the standard capitalization styles and the standard sender/EventArgs pattern for events -I'd interpret "right/wrong" in a "best practice" book as meaning "should/shouldn't", rather than being dogmatic.
And I don't see anything wrong with "<title><%=GetTitle()%></title>." - I've seen "<% %>" recommended by Scott Guthrie as an optimisation technique, and it might save a picosecond here. "runat=server" would be better if the VS.NET designer didn't keep deleting it (fixed in VS 2005 I believe).

However I won't get sucked into the tired old Surrogate vs Natural PK debate.
Tuesday, March 15, 2005 3:11 PM by Ian Smith

# re: Worst. Best Practices Book. Ever.

I find it somewhat ironic that somebody who nitpicks about words like "right" and "wrong" has the cheek to call this the WORST book EVER!

I thought the book was excellent. Too many shops don't have standards or guidelines and the Microsoft Design guidelines are impossible to print or get in any sort of cogent form.

The great thing about this book is it explains the reasoning behind its guidelines. It sometimes suggests alternatives that are the opposite of its recommendations, but explains why you should choose one solution over another.

Having given a guidelines or rule AND explained the reason for it it gives concrete code examples to illustrate (the "right" and "wrong" you so strongly object to).

I've bought a lot of rubbish books in the past (mainly from Wrox or Microsoft Press) but this is NOT one of them.

Your personal attack on the authors (are we supposed to think that while they are not in the "IT legend" league of Don Knuth - YOU are???!!!) smacks of some sort of personal grievance rather than an honest review of a book that will prove extremely useful in many shops. It's readable by the average developer (which I would argue Knuth's dry academic work isn't) I don't know the authors and have no idea whether they are industry guru's or not. I DO know that their book will save a lot of people time and effort in drawing up standards. And it's easy to read and reasonably priced too.

I, too, like "Code Complete" but it, too, can be rather dry at times and is a long read. This book makes a handy read for those trying to get up-to-speed on agreeing standards within a typical .Net shop on tight timescales. I highly recommend it.
Tuesday, March 15, 2005 3:33 PM by Alex Papadimoulis

# re: Worst. Best Practices Book. Ever.

The title was a bit of a pun, ala Simpons' comic book guy.

Guidelines are great, but this book falls short of explaining the difference between preference and correctness. And for many explanation, there is a poor reason WHY. "It's optimizes better" is a bad excuse for their belief.

I did not intend my review to be perceived as a personal attack on the authors. The fact of the matter is they have no established credibility. Nor do you, nor do I, nor do the vast majority of us. This is why most people who write books use references from either people with credibility or from research. The authors did neither.

The book as potential. But as I see it, it's hardly of "beta" quality. One incorrect paragraph outweighs twenty correct pages.
Tuesday, March 15, 2005 6:23 PM by (luKa)

# re: Worst. Best Practices Book. Ever.

I've attended Balena and Dimauro talks, I've read Balena and Dimauro articles and used Balena and Dimauro sample code and after that can say that I can really trust their work: they are great!!!

No book, talk, article always tell *all* the true with *all* the details, some semplification is *always* necessary to focus on the main topic and to reach the target readers. Probably you just misunderstand the book topic and just focused on irrelevant details ;-)

I do not agree with your review and I think that make no sense to compare
Wednesday, March 16, 2005 8:25 AM by Francesco Balena

# Worst. Best Practices Book. Ever. - Some notes from the authors


Being one of the authors of the "Practical Guidelines and Best Practice ..." book, I guess I ought to jump into the discussion. Needless to say, I respect your opinion. Actually, I am very impressed by how carefully you read the book and weighed each of our sentences... and I am equally impressed by how cleverly you quote them out of their context to support your line of reasoning. Just because you proved to be such a careful reviewer, it's really odd – so to speak – that you omitted so many important points. I assume that you are too ethical to do it maliciously and on purpose, and I am glad I have the opportunity to make your review more complete and useful.

Let me begin with the first inaccuracy in your post. Being a MSDN Regional Directors isn't a volunteer position, at least not in the sense you subtly imply. Your readers might believe that everybody can become and RD if only he or she wishes so, but this isn't the case. Microsoft Corp. carefully selects one or two RDs among recognized expert developers in each US state and foreign country: as a matter of fact there are only 140 RDs all over the world.

Giuseppe and I are the only two Regional Directors for Italy and we are very, very proud to be part of this team. It is true that we all are volunteers, in the sense that we aren't Microsoft employees and aren't paid by Microsoft just to be RDs. On the plus side, our RD status gives us the opportunity to train and consult for large MS customers (and for MS itself), and work at many complex software projects. What we learned in the process lead us to the idea to gather our *practical* experience in a book.

Of course, being just an RD doesn't make us software legends and for sure we aren't in the same league as the gurus you name. Unfortunately, a casual reader of your blog might conclude that we dare to compare ourselves to those living myths, but this isn't the case. We neither claim nor imply anything like that. More simply, we have written software for two decades and believe that we have something interesting to say on the topic. Period. That entire paragraph is a product of your imagination.

You're correct: we often use "always" and "never" adverbs. However, you curiously omit to mention that we complement all controversial guidelines with an explanation of when you should apply them, why you shouldn't, if there are exceptions, and so forth. We believe these additions largely compensate for those strong adverbs. By the way, most guideline collections – as well as Microsoft's own FxCop tool – use sentences beginning with "Do" and "Don't", so at least we are in good company. As one of your readers suggests, in this context "right/wrong" is to be interpreted as "should/shouldn't", and it's a convention used in many guideline collections. Thank you very much for your notes, though: If I ever write an English grammar textbook I'll surely keep them into due account.

You're also correct about a 50-lines-per-method guideline. In the hurry to post your review, however, you forgot to quote the entire paragraph, which reads as follows:
"Try to avoid methods longer than 50 executable statements. If necessary, split the method into multiple procedures. Shorter methods improve code readability. In addition, the JIT compiler can inline short non-virtual methods (fewer than 32 bytes of IL code) that don’t contain Try (Visual Basic) or try (C#) blocks, or conditional or loop statements, and that don’t receive a structure as an argument."

An unbiased reader would probably agree that the complete text is much less generic or rigid than your cleverly-clipped quote suggests. As for me, the omission of the leading "Try to" provides interesting hints about the selection criteria you adopted when excerpting our guidelines.

I won't even try to defend our guidelines, except to notice that, coincidentally, all the ones you mention have appeared, in one form or another, in MSDN articles and are normally regarded as official Microsoft guidelines. In other words, you just picked up the wrong target for your criticism, even though I understand that it's easier to criticize us rather than the people who actually created the .NET Framework and that know it better than everyone else. You can surely argue about the exact wording we use, but the substance is the same.

An unbiased review would mention that the book contains over 700 rules for 600 pages, that the "questionable" rules are therefore a small portion of the overall contents, and that nearly all of them belong to the "coding guideline" portion (less than half of the book). The bulk of the book, in fact, is about best practices in Windows Forms, ADO.NET, ASP.NET, COM+ and remoting-based applications.

Here's another (causal?) omission in your review. In the intro, we explain that we sorted our guidelines according to the goals each one is meant to reach: robustness, security, scalability, efficiency, usability, code reuse, extensibility, maintainability, interoperability, ease of development. In other words, we recommend a guideline that buys you faster execution only if it doesn't affect the robustness, security, and scalability of your applications. We aren't obsessed by speed and we do our best to illustrate the trade-offs of all the recommendations we make. Our goal is to enable readers to make informed decisions. We deem our peers to be smart enough to understand when a guideline should be applied, once they know its pros and cons.

While on the topic of execution speed: most of the techniques you consider as questionable can make your code run faster by at least 50%, or more. If the offending statement appears in a tight loop they can save you a significant amount of time, not just a few CPU cycles. In a server-side component this sort of optimization makes the difference and can positively affect scalability - I am surprised you missed the point.

Also, you mention the "as" operator, the String.CompareOrdinal method, and VB's ChrW function (and others) as factors that can decrease code readability. Granted, not all developers are familiar with the advantages of these *standard* and *documented* techniques, and this is precisely why we wrote these guidelines. Please notice the emphasis on "standard" and "documented": we aren't advocating any undocumented and obscure code technique that might undermine the readability of your code. It's just plain C#, VB, and .NET stuff! Where is the danger you mention at the top of your review?

In case you haven't noticed, programmers usually buy books to improve their skills and learn about features of the language or the .NET framework they aren't already familiar with. If you weren't so biased, you'd probably see that it's the most laughable argument in your review.

ironically yours,

Francesco Balena
Wednesday, March 16, 2005 3:31 PM by TrackBack

# Author responds to

Wednesday, March 16, 2005 3:54 PM by TrackBack

# La risposta di Francesco Balena e la replica...

Wednesday, March 16, 2005 4:04 PM by RD

# re: Author responds to "Worst. Best Practices Book. Ever."

Hey, your own books are very low
on quality too.
Wednesday, March 16, 2005 4:05 PM by TrackBack

# Picking a fight with a book author

Wednesday, March 16, 2005 4:11 PM by Adrian Florea

# re: Author responds to "Worst. Best Practices Book. Ever."

> Yes, "MSDN Regional Director" is a prestigious
> title, but it certainly is no where near
> "Turing Award Recipient."

Do you really want to see Turing Laureates writing .NET guidelines and best practices?
Wednesday, March 16, 2005 4:25 PM by Joe

# re: Author responds to "Worst. Best Practices Book. Ever."

Any "best practices" book, or indeed any set of guidelines, inevitably will include contentious points. So will have more than one "bad paragraph" in the eyes of some beholders. Therefore I think you're wrong (dogmatic of me I realize) to judge it on a "higher standard" than other books: if it didn't cover any contentious points it would be too bland.

And I wouldn't want a pragmatic book for beginner and intermediate developers to reference research like some academic treatise.

But you've intrigued me enough to want to see this book!
Wednesday, March 16, 2005 6:33 PM by Free Beer

# re: Worst. Best Practices Book. Ever.

The world is full of mixed messages.

I do try to follow best practices but there in no chance I would have bought this book. I use MSDN and FxCop and I try to understand.
I believe that premature optimization is bad, I think that coding based on what the JIT might optimize is often premature.

I like my RD a lot, but before he starts telling me what best practices are he better sit down and start working in some projects, not just training and consulting.

The primary key thing is a burning issue. Burning issues should be expressed as such.

Just today I caught and swallowed a ThreadAbortException, it was the right thing to do, it was from a response redirect and it was poluting the event log.

I use the "as" operator all the time. I find it easier to understand and cleaner than catching invalid casts.
Wednesday, March 16, 2005 7:56 PM by WilliamT

# re: Worst. Best Practices Book. Ever.

Dar Alex,

While I would reserve my judgement about the book and your comments, there is one statement you made which I find rather unfair and unprofessional and crossing the lines of a personal attack

> Don't let the "MSDN Regional Director" title fool you: it's a volunteer position. You would think they would supplement their lack of credibility

How (well) an author writes a book is not dependent on his title as such...and vice versa, a person's title/appointment/award is has no bearing on how (well) he writes a book or treats his dogs, etc etc.

Going by your token, one can easily imply that someone who works in MS is bound to churn out a classic ? How a person carries out his duties should have no relative bearing on what he is awarded or appointed.

That statement you made is also a "blanket" statement because you are effectively making a public statement against 140+ folks who are appointed their positions based on a number of (selfless) activities they have done that have contributed greatly to the dev communities. Writing a book is one, BUT knowing how to write a good book THAT statisfies everyone is definitely NOT one of the criteria.

Now, I wonder what kind of flames you would incur if you substituted the Regional Director role with that of a Microsoft Valuable Professional one. (Both are voluntary as well) Now you deal with thousands more people.

Having said that, my point is that personal statements like that can be sometimes viewed as personal and discriminatory. While I agree that having an appointment or title, regarless whether it is voluntary or not, does hold some weight in the public's eye; it should not be used as part of a basis of attack against someone's work just because you do not like it.
Thursday, March 17, 2005 3:12 AM by TrackBack

# La risposta di Balena

Thursday, March 17, 2005 4:17 AM by Carl Franklin

# re: Worst. Best Practices Book. Ever.

> Today I'm pointing out some serious flaws in a book I came acrossed called <

Just when did you come acrossed this books?
Thursday, March 17, 2005 11:06 AM by Andrea Adami

# re: Author responds to "Worst. Best Practices Book. Ever."

I read a first preview of this book (written in italian language) and on page 4 of introduction the authors write that the book is not for the inexperienced developer and i agree with them.
A best pratices book publishies the author's experiences (20+20 years in this case).
The reader have to choice what to do, for that he have to be at least a project leader.
I think the book can became a reference for a project, also if it contains some errors because is more quick and easy to adopt a standard (with some small errors) than create one on your own.
It's more easy to write a note to correct what you don't like.
May be you can think to write a similar book with less errors.
Well do it !
Some problem to find an editor ?
Balena and Dimauro had found the editor in about 1 minute (i read it in the introducton).
How many time do you need ?
What about your credibility ?
"such a book must be judged on a higher standard than others" you said.
What about the level of reviwer ?
How many enterprise projects did you managed ?
Hown may softwar engineers did you lead ?
Some times the suggestions contained in the book are not original, i understand don't use a primary keys that have meaning for the end user after my first project as DBA, but, of corse, not all did that job.
Thursday, March 17, 2005 11:57 AM by Sam

# re: Author responds to "Worst. Best Practices Book. Ever."

Maybe the differences stem from their priorities: "robustness, security, scalability, efficiency, usability, code reuse, extensibility, maintainability, interoperability, ease of development".

And in that regard, I'd agree that their priorities are pure unmitigated evil. :)

The priorities, IMO should be: maintainability, extensibility, ease of development, code reuse, and security.

Robustness is a factor of maintainability and extensibility in my mind. So it's a little out of place in this list I think. If it's truly extensible, then it should be easy to scale/tweak when the time comes, so performance is *never* a design goal for me. The flexibility in the design to accomodate possible performance tweaks (among other things) is. Ease of Development is a big plus, but it comes far behind a robust design unless it's throwaway code. The level of code reuse can be an indicator of good design I think, but an extreme devotion to it can lead the more fragility if you aren't diciplined. The DRY principle should only be applied to a feature level IMO. Once you start using code outside of it's intent just because it does what you want right now, you start leaning in the direction of static libraries and tight coupling. At least I do. Security is a process of review IMO. Some say you have to design with security in mind, but I don't believe in that. Security "solutions" are generally "fixes" to issues found in testing in my experience. Important for projects that need it, but many don't, and the difference between a hardend application, and one that isn't, doesn't have anything to do with the overall design IMO, more the implementation of a few choice interfaces to cross-boundry resources, and diligent testing.

I think that from the comments there's probably a lot of good in the book, and I'm looking forward to reading it, but I think that until your own priorities as a developer are solidified, this book could be very dangerous.

Disclaimer: My opinions are my own and that of the invisible little green men that beam them to me. :)
Thursday, March 17, 2005 2:21 PM by Scott C Reynolds

# re: Author responds to "Worst. Best Practices Book. Ever."

God Alex, how dare you review a book you read, applying what you know and your opinions to the material, and let people know what you think? Why would you ever do that? You deserve to be attacked from all angles for it. Hang your head in shame.
Thursday, March 17, 2005 11:51 PM by Chris

# re: Author responds to "Worst. Best Practices Book. Ever."

Man, you need to get laid and relax (I do too by the way, so I'm not criticizing). Good points, but take it easy. Just b/c Baleana and Dimauro use absolute terms/phrases like "always, never, don't, it is essential" doesn't mean there's not allot to learn within the pages of this book. (I wonder if the Italian version contains more nuanced terms? It is possible. Writing in one's own language is difficult enough) Regardless, while I haven't read much yet, the little I have contains much value and my copy of the book already has several dog-ears and underlines.

Personally, I bought it because they tell you "why" they make their recommendations, thereby arming with reading w/ more information to decide whether or not he or she wants to take any particular guideline to heart, determine if they're making a specious claim or are just plain making arbitrary recommendations.

For me, understanding the processes of their reasoning (whether specious or not) is an exercise that helps me learn more.

Thanks,
-Chris
Friday, March 18, 2005 6:47 PM by Martin

# re: Worst. Best Practices Book. Ever.

Umm, have you ever worked on a website with 15 million members, and an average of 3 million visitors a day, that spend more than 2 hours on average? You see, in situations like that speed is very important. A single try statement, when repeated billions of times, can brake your application.

When I was working on measly sites back in the day I was thinking the same way about processors and memory... Fortunatly, as I've found out speed and memory is very much important unlike human readibility which doesn't really make a shred of difference once a project is finished and encapsulated in the right way, which seems to be lacking with you.

As far as 'right' and 'wrong' go... It really is wrong.

' *** Wrong: uses incorrect casing, type is embedded in parameter name.
Sub PerformTask(ByVal UserName as String, ByVal boolIsAdmin as Boolean)
' *** Correct
Sub PerformTask(ByVal userName as String, ByVal isAdmin as Boolean)

You see, it is wrong because the two parameters have different names. I've never seen a standard or preference where one parameter will be lower case first letter, and the next one upper case first letter. What are you? Retarded? Learn how to critisize, learn how to program, and then make a blog.
Sunday, March 20, 2005 4:36 PM by Francesco Balena

# Once again, author responds to "Worst. Best Practices Book. Ever."

Come on, Alex, you can do better than this!

In just a few days you carefully analyzed a 600-page book filled with technical tips, so I find it weird that you have overlook most of the points I made in my previous reply.

To remedy to your distraction, I am summarizing my objections in an easy-to-follow, numbered list of items. You can comment on each point, if you wish, or make it clear that you prefer to leave them unanswered.

[1] A MATTER OF ETHICS
I raised several doubts about your approach to reviewing. I proved that you carefully excerpted text by clipping important info in the surrounding paragraph; that you didn't mention that we provide explanations, exceptions, and even alternate rules; more in general, that you hid facts that would have made your criticisms weaker or completely void.

If you were a regular columnist of a technical magazine you'd be in trouble for adopting these practices. Therefore, please don't lecture us about how credibility should be measured.

I would expect that you'd address *these* points before anything else, because they are essential in (re)establishing your credentials as a reviewer. Instead, you raised the noise level by focusing on secondary details and tried to draw the attention away from this and other central points. Even worse, you insist in adopting the same unethical approach (see next points).

[2] THE TARGET AUDIENCE
In the original review you stated that the book advocates bad practices. After my reply, you somewhat redefined your criticism. In the new, milder version, most guidelines that were plain wrong have become correct in their substance, only they are dangerous in the hands of inexperienced developers. Let me quote a couple of sentences from your post:

"The book is targeted not towards the gurus and experts, but towards the beginner
and intermediate level developers....Yes, tuning and optimization is important,
but it is not an appropriate theme for a book with this target audience."

It's quite funny that *you* decide what the intended audience for this book is. Not the authors, not the publisher, just you! Wow!

Once again, let's your readers know that your criticism has no ground whatsoever. Here's a piece of text excerpted from the "Who should read this book" section in the introduction:
+-----------------------------------------------------------------------------------------
| IMPORTANT: One category of developers should *not* buy this book:
| This book is neither for beginner developers nor for developers who have
| never worked with the Microsoft .NET Framework.
+-----------------------------------------------------------------------------------------
Let us state it once again: This book doesn’t teach you the basics of the
.NET Framework, Visual Basic, and C#. Quite the opposite: we expect
that you have a good familiarity with these languages, with object-oriented
programming in general, and with the most important types in the .NET Framework.

Notice that the portion between dashed lines is enclosed in a box and is highlighted with a big icon. There's no way you can overlook this warning, yet there is no trace of it in neither of your posts. You should have acknowledged that we are crystal clear about the expected expertise level. We emphasized this concept to avoid unrealistic expectations from less experienced readers, even though it significantly narrows the potential market for the book.

The truth is, the book is targeted to developers who have enough experience to take all our recommendations with a grain of salt, understand what "right" and "wrong" mean in its context, and make the best use of all the low-level information we provide... including the max number of variables the JIT compiler can allocate in CPU registers (and not in "memory", as you incorrectly quoted).

But the key point here is: you *deliberately* omitted to mention this important disclaimer in the attempt to backup your claims. This is what I call cheating. It was a nice try, but it was cheating anyway.

[3] ANOTHER CASE OF DELIBERATE OMISSION
You say we recommend to "never catch the ThreadAbortException". For the benefit of your readers, here's the complete paragraph:

Don’t catch the following special .NET exceptions except for logging reasons:
OutOfMemoryException, StackOverflowException, ThreadAbortException,
and ExecutionEngineException. If you catch these exceptions, you should
always rethrow them.
WHY: After the .NET runtime throws one of these exceptions, the application is
usually in an unstable or undetermined state and it’s quite unlikely that you
can recover from these exceptions gracefully [continues...]

The actual recommendation isn't as rigid as you claim it to be and, more importantly, it clearly explains the risk deriving from ignoring the guideline. You fraudulently tweaked the actual text to prove your reasoning, but this shouldn't be a surprise by now. But in this specific case there is more.

I agree that the case you mention - i.e. catching ThreadAbortException as the only way to gracefully clean up and exit from a sleeping background thread using unmanaged resources - is rather frequent. Strictly speaking, however, to gracefully exit from a sleeping thread you need a *finally* block (not a catch block). The background thread typically performs its chores in a loop which in turn is contained in a try-finally block (not a try-catch block), so the clean up can occur regardless of whether the thread is exited by normal means or is aborted by another thread.

Our guideline suggests that you don't *catch* ThreadAbortException and in fact you rarely need to do it. If you do it, you should rethrow it because the application might be in an unstable state. I believe readers can conclude that the guideline is therefore correct, accurate, and informative. You can disagree, of course, but you should explain exactly why.

[4] THE PREMATURE OPTIMIZATION ISSUE
You repeatedly accuse us of promoting early optimization, but none of the examples you mention are real cases of early optimization. As a matter of fact, we never advocate early optimization anywhere in our book.

Let me explain this detail in the simplest terms, so that you can't pretend you don't understand my point. These are the examples you made:
a) "as" operator vs. "is" operator + casting
b) Return keyword vs. Exit Function keyword
c) VB-specific functions vs. .NET standard methods
d) ChrW vs. Chr function
e) String.CompareOrdinal vs. String.Compare (where applies)
f) inline <% ... %> expression vs. runat=server attribute

In all cases we have two equally robust and documented techniques, based on standard C#, VB, or .NET features. They are perfectly equivalent, except the one on the left is faster. Where is the problem with recommending the faster one? Where is the danger you mention, in the obvious attempt to scare your readers away from this book?

Oh boy, if you consider these techniques as examples of "unreadable code" or "premature optimization" then you obviously have a serious problem with writing real-world apps.

[5] MSDN OFFICIAL GUIDELINES
As I have already explained, all the guidelines you consider as extremely dangerous have appeared long ago in MSDN articles and are considered as official Microsoft .NET guidelines. For your convenience, let's list the similarities and differences between our book and those articles:

- both come from the same authoritative publisher (Microsoft)
- both use terms such as "guidelines" and "best practices", therefore they should target the same audience (at least according to your distorted criteria)
- MSDN articles are freely available on the Web, therefore they can reach and affect many more developers than our book.

With all these premises, you should explain why our book is so dangerous whereas these MSDN articles, which have a much greater disruptive potential, are not. I am sincerely eager to hear your explanation; until then, though, I can only conclude that your review was just an unfair and gratuitous case of personal attack.

-- Francesco
Sunday, March 20, 2005 5:28 PM by Francesco Balena

# More from the author: A clarification on guideline priorities

Let me expand on guideline priorities, in the attempt to address an issue that Sam raised.

We explain that we put robustness at the top of the list because a programming technique must never unexpectedly fail or deliver bogus results. It has little to do with neither maintainability nor extensibility, at least in our schema.

Here's a concrete example: never access a Windows Forms control from a different thread. Your .NET 1.1 code might appear to work during the debug phase, but sooner or later it is doomed to failure at the customer's site. (.NET 2.0 controls correctly throw if accessed from other threads.) Putting robustness at the top of our priority list ensures that we never suggest a technique that makes your code easier to write & maintain but that might fail under special or infrequent cases.

Another example: many techniques allow you to detect whether another application instance is already running, but some of them don't work well with the XP Fast Switching User feature. Using the wrong approach would therefore make your application malfunction in some cases, thus we recommend a technique that works well even if the end user enables the XP Fast Switching feature. I hope these two examples clarify what we exactly mean by robustness.

We placed security quite high in the list because we believe it can't be an afterthought in the .NET world. Here's one of the many reasons (hardly the most important): all method invocations are subject to Code Access Security and the .NET framework makes some of them fail when your code runs in a partially trusted environment. If you don't keep this security-related detail into account you might be forced to throw away a lot of code you already tested and debugged in case you (or your customer) later decide that your app should run in a partially trusted context.

That said, I am not claiming that our priority list is perfect. You can disagree with our priorities and with individual guidelines. Alas, we can't make everybody happy. I am just saying that we did our best to follow a set of well-defined criteria and made these criteria clear to our readers, so that they can always make an informed decision.
Monday, March 21, 2005 6:29 AM by heinzkunz

# re: Worst. Best Practices Book. Ever.

"You see, it is wrong because the two parameters have different names. I've never seen a standard or preference where one parameter will be lower case first letter, and the next one upper case first letter. "

True, but these are standards, or preferences. It is not "wrong" to use or not use them, while it certainly is wrong to label them "wrong" or "right".
Tuesday, March 22, 2005 11:02 PM by Jon Limjap

# re: Author responds to "Worst. Best Practices Book. Ever."

Did someone up there not realize that this is a *personal* blog full of *personal* opinions.

Congratulations Alex. I totally love http://www.thedailywtf.com, but today you're being gunned down (with Microsoft Press backing?) by book authors themselves for a personal review.

Cool!
Tuesday, March 22, 2005 11:30 PM by Alex Papadimoulis

# re: Author responds to "Worst. Best Practices Book. Ever."

Francesco,

Quick reply, since I don't know if this will ever be read by anyone being that it's a comment.

I really appreciate the personal replies. I do realize that my review was harsh, and I still do feel it was warranted. I have, however, reworded my original post on credibility.

Ethis:
I picked apart your book and looked for the detail. The examples I made I did not take out of context. The <%= %> thing you did not have a left and right way, you said "do your title like this." You offered no other way. And frankly, your way sucks.

Target Audience:
On the scale of Beginner, Intermediate, and Expert, your book is target more towards the first two. Beginners (especially to .NET) will look towards the best practices book.

ThreadAbortException:
THis was not an ommision to twist the trut. The quote from the docs does nothing to explain when you should (multi-threaded exiting) and shouldn't (response.redirecting) use the exception. It was on the whole useless.

Optimization:
It's the fact that you make it a high priority in your book that gets to me. When you speed is on the developers mind, it leads to crappy code. Plain and simple. This has been known for 30+ years now.

Wednesday, March 23, 2005 1:18 AM by Entropian

# re: Worst. Best Practices Book. Ever.

It's a good thing that they don't engineer bridges the way software is "engineered", otherwise all the effort would go towards things like inventing the "Gravity Makes Things Fall - Pain Hurts" pattern rather than focusing on keeping the damn thing standing.


Let's be honest, we are just making this up as we go along - maybe in a couple hundred more years of doing it there will be some 'right' answers, but current "Best Practices" of software development are really more like "Practices That May Lead To Deliverables Other Than Heat, Or At Least Have For Me More Than Once"
Wednesday, March 23, 2005 9:20 AM by Stoyan Damov

# re: Author responds to "Worst. Best Practices Book. Ever."

To Alex: take it easy ;) You're free to express your opinion. You don't even have to back up your statements. You think a book is bullshit - so it is... for you. The more you try to make Francesco to agree with anything you dislike, the more Fracesco will attack you. He wrote the book, he can and will pick lines in and out of context to make you feel miserable. He's right... for himself.

To Francesco: take it easy ;) If you wrote a good book (haven't read this one) you can bet you'll sell hundrends of thousands of copies. I really wound't care if I see one or two bad opinions about "Code Complete" (I'm in no way measuring your book agains it) if I see thousands of positive reviews from other readers. I'm going to buy it, read it, and then, if I see that it is indeed a good book, I'm *not going to bother* writing a reply to a guy who didn't like it. Maybe he's too experienced? Or dumb? Or drank too much coffee? What do I care if the book was good for me?

Take it easy and cheers,
Stoyan
Friday, March 25, 2005 12:29 AM by Matt

# re: CommunityServer: Adding the "Post Date" Sort Order

Isn't "// Add countries //" a minor WTF in itself?
Friday, March 25, 2005 9:46 AM by Scott

# re: CommunityServer: Adding the "Post Date" Sort Order

What happens when they release a new CS version and you have to upgrade?
Friday, March 25, 2005 9:53 AM by Alex Papadimoulis

# re: CommunityServer: Adding the "Post Date" Sort Order

Scott,

As I did with the Forums Beta 2 changes, go through and remake every change. So long as you document your changes (I have a change log word document), it's not too painful.

This is why I won't upgrade unless the new version makes it worth while.

-- Alex
Friday, March 25, 2005 10:29 AM by patag

# re: CommunityServer: Adding the "Post Date" Sort Order

Any mods or tweaks you do, I'd love to hear about.
Friday, March 25, 2005 8:32 PM by Sam

# re: Author responds to "Worst. Best Practices Book. Ever."

Thanks for replying Francesco:

You explanation of what you mean by robustness makes a lot of sense now. Thanks for taking the time.

As far as security, I'd disagree if it's not a requirement, I don't think the impact on the code base should be that large with a well thought out design.

I'm still looking forward to picking up the book when I find the time. :)
Saturday, March 26, 2005 1:25 AM by Tim Haines

# re: CommunityServer: Adding the "Post Date" Sort Order

Useful.
Saturday, March 26, 2005 10:08 PM by Dave Burke

# re: CommunityServer: Adding the "Post Date" Sort Order

Excellent! I would definitely love to hear about more of your CS work. Subscribed!
Monday, March 28, 2005 11:46 AM by Dave Burke

# re: CommunityServer: Adding the "Post Date" Sort Order

Alex, I was cruising along, made the mod, then went to administration to change the sort options. I don't have Forums enabled, and I see no ability to change the sort order in Admin Blog, so I'm wondering if I'm missing something? Great description of making the mod, btw. 4 minutes, tops.

Monday, March 28, 2005 11:55 AM by Alex Papadimoulis

# re: CommunityServer: Adding the "Post Date" Sort Order

Dave,

I have not looked into the blogs component at all. I have only Forums enabled, and have a custom home page that looks like a blog (but feeds from the main forum).

-- Alex
Monday, March 28, 2005 1:42 PM by Dave Burke

# re: CommunityServer: Adding the "Post Date" Sort Order

Thanks for your reply, Alex. Is this site online? Not TheDailyWTF?
Monday, March 28, 2005 1:50 PM by Alex Papadimoulis

# re: CommunityServer: Adding the "Post Date" Sort Order

This modification (and the tweaks I will continue to writeabout) are all tweaks I made for The Daily WTF.
Monday, March 28, 2005 10:56 PM by Dave Burke

# re: CommunityServer: Adding the "Post Date" Sort Order

Well I'll be! I never knew The Daily WTF was using Forums! I assumed it was a blog. Nice. I get it now. Thanks for your help clarifying the point for me.
Tuesday, March 29, 2005 11:29 AM by Jim Arnold

# re: A Word from the "Wise": Don't Use Exceptions

+1

I've seen this nonsense lots of times, and the really stupid thing is: even if exceptions *are* slow, why are you concerned about the performance of your application when it CLEARLY DOESN'T WORK PROPERLY?

Jim
Tuesday, March 29, 2005 11:37 AM by Vurg

# re: A Word from the "Wise": Don't Use Exceptions

That's just weird. That person is probably using exceptions the wrong way. To think about it, exceptions indicate a potential error condition that should be handled separately from the main application logic, and it doesn't make sense to perform speed tests.
Tuesday, March 29, 2005 11:44 AM by Scott Elkin

# re: A Word from the "Wise": Don't Use Exceptions

That's really funny.
Tuesday, March 29, 2005 3:01 PM by Richard P

# re: A Word from the "Wise": Don't Use Exceptions

I think everyone here so far gets it.

Exceptions are for exceptional circumstances.

A user's search returning 0 results is quite common and therefore *not* exceptional.

The network connection being dropped mid-way through a file transfer is exceptional.

Now, exceptions *can* be expensive from a performance standpoint in complex systems because of automatic exception handling and reporting. A persistant server application has to recover from exceptions and that often means a whole lot of flushing state to get back to a known safe state. But that's OK. Because you log your exceptions, you fix the bugs, and then they don't happen ever again. RIGHT!?!?
Tuesday, March 29, 2005 3:28 PM by Douglas Reilly

# re: A Word from the "Wise": Don't Use Exceptions

What Richard P said. Exceptions should not be used for normal processing, but for, well, "exceptions", they are the perfect thing to use.
Tuesday, March 29, 2005 4:02 PM by Callum

# re: A Word from the "Wise": Don't Use Exceptions

They give MVPs out in packets of cereal.
Tuesday, March 29, 2005 10:30 PM by Wallym

# re: A Word from the "Wise": Don't Use Exceptions

Well, I'm an MVP and I didn't get it through a packet of cereal............ ;-)

Well, I throw exceptions when bad things happen, and I plan on continueing to do so.......hmmmm
Tuesday, March 29, 2005 11:41 PM by Jon Limjap

# re: A Word from the "Wise": Don't Use Exceptions

Makes sense. It's called an exception because either something bad or something unexpected happens.

For an MVP to say *not* to throw exceptions, maybe he meant not to throw your own exceptions?

Oh whatever. I'm happy with my "Catch ex"s
Wednesday, March 30, 2005 12:04 AM by foobar

# re: A Word from the "Wise": Don't Use Exceptions

Back in the evil pre-managed C++ days, when exceptions were first added as a feature, they did slow down performance quite a bit.

Of course, technology advances and those bad days are long gone.
Wednesday, March 30, 2005 4:47 AM by Andrew Armstrong

# re: A Word from the "Wise": Don't Use Exceptions

I agree with the authors comments. However, care must be taken regarding when to catch and throw exceptions. .NET does not mandate trapped exception (unlike Java) - this is good, it allows the developer to pick and choose what exceptions are important. However, I have seen lots of code that catches exceptions then just throws them again - this is dumb! Exceptions should only be caught when you intend to do something useful with them, otherwise just leave them be and let the top-level application deal with them after bubbling....
So to choose to ignore exception would seem foolish to me, let's just all agree to use them properly and let your super-quick processors deal with the mimimal overhead.

Andrew, (non-MVP - is that bad?)
Wednesday, March 30, 2005 5:58 AM by Oleg Tkachenko

# Re: A Word from the "Wise": Don't Use Exceptions

"After all, I've used exceptions quite extensively to pass messages from the database all the way to the client, and I've never noticed a performance problem."

Oh boy! Using exceptions to pass messages between tiers ??????? That's crazy. You better never show that code to anybody.

Even if your dummy exception sample with local empty handling (which is nicely optimized out to nop by the compiler and JIT) seems to be fast enough on your doing nothing else desktop that doesn't mean that's good idea.
Here is what actually happen when you throw an exception:
* Grab a stack trace by interpreting metadata emitted by the compiler to guide our stack unwind.
* Run through a chain of handlers up the stack, calling each handler twice.
* Compensate for mismatches between SEH, C++ and managed exceptions.
* Allocate a managed Exception instance and run its constructor. Most likely, this involves looking up resources for the various error messages.
* Probably take a trip through the OS kernel. Often take a hardware exception.
* Notify any attached debuggers, profilers, vectored exception handlers and other interested parties.

Read more at http://blogs.msdn.com/cbrumme/archive/2003/10/01/51524.aspx

Happy wasting resources!

olegt (MVP)
Wednesday, March 30, 2005 8:12 AM by Ramon Smits

# re: A Word from the "Wise": Don't Use Exceptions

Well to use exceptoinhandling depends on the kind of application you are developing.

So let's make a firstperson shoot'em up with a featureloaded 3d engine. Let's use exception handling all the time instead of resultcodes.

You should always put these kind of questions in the right context.

Generally speaking it is better to not use exceptions. Especially when talking about businesslogic.
Wednesday, March 30, 2005 5:29 PM by Sahil Malik

# re: Hi, My Name is Alex, and I am a Resource Waster

Interesting views. Surely at some point you must concern yourself with performance over architecture.

Can you give some examples of that?
Wednesday, March 30, 2005 6:43 PM by Scott

# re: Hi, My Name is Alex, and I am a Resource Waster

Comment became too long, posted at my blog. Enjoy my verbal diarrhea.

http://www.lazycoder.com/weblog/archives/2005/03/30/when-to-throw-an-exception/
Wednesday, March 30, 2005 7:10 PM by Ken

# re: Hi, My Name is Alex, and I am a Resource Waster

Throwing an exception should be something that slows the computer down. After all, it's a response to something that impedes the flow of your program. If you're throwing so many exceptions that you worry about the performance on Gigahertz processors then you're using exceptions counter to their design. They're no longer the exception, but the rule.
Wednesday, March 30, 2005 8:45 PM by JosephCooney

# re: A Word from the "Wise": Don't Use Exceptions

I agree with what Oleg said. If you look at what happens when an exception is thrown it is significant. Reading about the internals of the SSCLI implementation in the SSCLI Essentials book from O'Reilly was enough to foreswear me from throwing them ever un-necessarily. Maybe my PC is not fast enough but I "notice" when an exception is trown by the lag it introduces before any message appears, and I certainly wouldn't be using them as part of routine message passing. They are for "exceptional" circumstances.
Wednesday, March 30, 2005 11:45 PM by Jon Limjap

# re: A Word from the "Wise": Don't Use Exceptions

Oleg,

We want numbers, like the way Alex did it.

Even if the computer/server/whatever does just that, how long does it really take anyway?

Wednesday, March 30, 2005 11:57 PM by Jon Limjap

# re: Hi, My Name is Alex, and I am a Resource Waster

Alex,

Can you try doing this at a... ummm... webserver that has 1000 people logged at it at the same time?

Then unplug the database server and see what happens or do something that is otherwise disastrous?

Just try :)

=============

I think they invented something for when servers go haywire. They're called "custom error pages" and they usually say something like "Hi, *web application name here* is currently undergoing technical difficulties. Please try logging in again later" or something shorter.
Thursday, March 31, 2005 5:12 AM by Oleg Tkachenko

# re: Hi, My Name is Alex, and I am a Resource Waster

Well, may be I wasn't clear. For sure I'm with you on hating return code approach, that's really bad idea to never ever use exceptions but return codes. But another extreme - using exceptions for everything, even for normal flow - is equally wrong. As many noted, exceptions are for exceptional things.
Thursday, March 31, 2005 6:29 AM by Marcel Popescu

# re: A Word from the "Wise": Don't Use Exceptions

<<Generally speaking it is better to not use exceptions. Especially when talking about businesslogic.>>

Ramon, that was a joke, right? (I can never tell.) Especially when it comes to business logic, you don't want a lazy programmer to forget to check a return code. You REALLY don't want to accept an order for 300 screws when you only have 200 in stock, because someone, somewhere, didn't check a return code. Speed be damned - the integrity of the data comes first. (And, if you still worry about speed, you really didn't pay attention to Alex' #1 conclusion.)
Thursday, March 31, 2005 3:32 PM by Jakeypoo

# re: Author responds to "Worst. Best Practices Book. Ever."

Man, this author seems like a real dick.
Friday, April 01, 2005 9:20 PM by Chris Martin

# re: What Exactly Is An Exceptional Circumstance, Anyway?

I respectfully disagree with your conclusion. If you're following any decent OOP practices, you will have an instantiated Auction object in your business layer that you can validate before you pass it to your persistance layer.

Exceptions *are* for "exceptional" situations where you really, as a developer, have almost no control over. One example that pops into mind is a WebException when a server cannot be found. How exactly are you going to know that when calling myWebRequest.GetResponseStream()?

In your example, all of your business rules can be checked before an exception be thrown. If you allow your exception to be thrown from the persistance layer, you are wasting time man! ;) Just define a new exception and throw it from your validator.

I know and understand your point, but I don't think it's a very good argument. Sorry that this was short and vague. I don't much time right now.

Chris
Saturday, April 02, 2005 1:11 AM by Alex Papadimoulis

# re: What Exactly Is An Exceptional Circumstance, Anyway?

I'm not sure I understand.

Are you suggesting that we don't enforce data integrity rules in the database?

Or should we duplicate our business logic in both the database and the business layer?
Saturday, April 02, 2005 12:37 PM by AndrewSeven

# re: What Exactly Is An Exceptional Circumstance, Anyway?

There is nothing exceptional about people entering data in the UI that will not meet integrity requirements ;)

If you don't find yourself saying "that should never happen" it might not be excpetional.

I'm confronted with this pattern at work.

AnonUser user= new AnonUser(userID,create);
If the userID exists and create==true, there is an exception thrown.
If userID doesn't exist and create==false, it throws an exception.
You must assume the (non)existence or catch the exception and re-try :(
I have yet to find any code that does anything else but create it if it in the catch if it didn't exist.

Using a factory method, and returning null would be much clearer.
AnonUser user= AnonUser.Find(userID);
AnonUser user= AnonUser.GetAssuredUser(userID);
Saturday, April 02, 2005 12:38 PM by AndrewSeven

# re: What Exactly Is An Exceptional Circumstance, Anyway?

create it in the catch if it didn't exist
Saturday, April 02, 2005 1:18 PM by BradC

# re: What Exactly Is An Exceptional Circumstance, Anyway?

I'm no OOP master, but I think I see the difference between these two strategies (correct me if I'm wrong):

Alex is taking the Bid request and submitting it all the way down to the database layer, which attempts to place the bid, but verifies that it is valid to place the bid (based on the business rules). The database layer is the one that returns an exception if it fails one of these checks.

Chris is advocating verifying these business rules in the business layer.

Here's the issue, as I see it: Chris's technique requires a double-trip to the database.
First: to get the "current price and status" of the auction. (to compare and validate)
Second: to actually submit the new bid.

This means that unless special care is taken, there is a chance that someone ELSE could submit a bid between the first and second calls, which makes the subsequent bid placement invalid. The bottom line is: Chris's bid request (second trip) is STILL going to have to do error checking at the db layer to verify that nobody else has placed a bid or the auction hasn't closed in the meantime.

There are ways to do this, I suppose. The "get auction info" call could put a flag on the data indicating a claim on next bid, so if other requests are made, they are rejected.

I find it extremely helpful to discuss this in the context of specific examples, instead of the abstract level. After all, each situation is different, and may require different techniques.
Saturday, April 02, 2005 5:15 PM by Tim Haines

# re: What Exactly Is An Exceptional Circumstance, Anyway?

I'd have to back Chris up and say rules like this should be checked in the business layer.

BradC has raised a point saying that you need to be cautious that other bids aren't received between the time the validation is done and the actual insert - but this is pretty similar to any other concurrency problem.
Saturday, April 02, 2005 11:36 PM by TrackBack

# CommunityServer: Custom Homepage With Thread Listing

Sunday, April 03, 2005 12:37 AM by bestcomy

# re: CommunityServer: Custom Homepage With Thread Listing

great
Sunday, April 03, 2005 3:54 AM by Michael Fitzpatrick

# re: Hi, My Name is Alex, and I am a Resource Waster

Remember the "OLD" days when fuctions were written in C and returned error codes, where 0 meant no error? That's the way I still write code, albeit in C++, because I can't stand the idea that my program is wasting resources, time being the most important one. I must confess that I do put an exception trap at the top level, so as to not disturb the user with those awful windows exception messages.
Sunday, April 03, 2005 8:38 AM by Dave Burke

# re: CommunityServer: Custom Homepage With Thread Listing

Great description on this. Thanks for posting another item on CS.
Monday, April 04, 2005 1:02 PM by George Handlin

# re: Worst. Best Practices Book. Ever.

I'm in the camp of not making the PK meaningful. I was bitten by that one when I was starting out. Suppose the original thought was the invoice number would be the PK and it would just increment up like a checkbook. So you make the PK a int. Then the rule changes and the invoice number now needs to be coded to show the department that it's primarily from. So 1234 now becomes 1234-REC. Trouble. My belief and what I teach people is the PK should never be a meaningful piece of data.
Monday, April 04, 2005 4:31 PM by TrackBack

# Customize your bland homepage in Community Server 1.0

An excellent post by Alex on how to customize your homepage in Community Server.
Alex was so kind as...
Monday, April 04, 2005 5:55 PM by Scott Elkin

# re: Productivity++

Where did you buy the book? I purchased it almost 2 months ago from amazon, and it still has not shipped. My estimate is between 4/11 - 4/18.
WAY too long.
Monday, April 04, 2005 6:48 PM by Alex Papadimoulis

# re: Productivity++

It's "official" release date (I belive) was 4/1/05. My copy came from the publisher, and it got it (I think) last thursday.
Monday, April 04, 2005 10:46 PM by Tim Haines

# re: Productivity++

I've seen the 5 sample hacks online. I like the way he's kept each one short, so those of us with NADD can still grok each hack in a quick 2 minute scan. ;-)
Tuesday, April 05, 2005 2:27 AM by Kingsley Tagbo

# re: CommunityServer: Custom Homepage With Thread Listing

How would most recent blogs be displayed using the same design?

Thanks
Tuesday, April 05, 2005 12:42 PM by TrackBack

# Exception Throwing Design Guidelines : Performance (another religious war?)

Tuesday, April 05, 2005 12:43 PM by TrackBack

# Exception Throwing Design Guidelines : Performance (another religious war?)

Tuesday, April 05, 2005 1:23 PM by TrackBack

# Exception Throwing Design Guidelines : Performance (another religious war?)

Sunday, April 10, 2005 2:21 AM by TrackBack

# re:CommunityServer: Adding the

^_^,Pretty Good!
Sunday, April 10, 2005 2:21 AM by TrackBack

# re:Author responds to

^_^,Pretty Good!
Tuesday, April 12, 2005 6:06 AM by TrackBack

# Interesting finds last week ...

Interesting finds last week ...
Tuesday, April 12, 2005 9:36 AM by TrackBack

# Dont use exceptions, use return codes (?!)

Dont use exceptions, use return codes (?!)
Wednesday, April 13, 2005 7:13 AM by M. Kiewitz

# re: Author responds to "Worst. Best Practices Book. Ever."

>Believe me when I say your customer would
>prefer code that works to code that saves
>forty nanoseconds out three milliseconds.
>Yes, tuning and optimization is important,
>but it is not an appropriate theme for a book
>with this target audience.

Sorry, that's just moronic.
If one has a function that is called some million times per second, optimization *is* important. That's like decoding base64 in an application. If you decode some GBs data per minute (and that's it), you won't want the customer to pay for an extra server because your code is so god-damn slow.
Wednesday, April 13, 2005 6:52 PM by TrackBack

# Practical Guidelines and Best Practices for Microsoft Visual Basic and Visual C# Developers

Wednesday, April 13, 2005 10:18 PM by Luis

# You're all wrong

Or, alternatively, you're all right, but none of you is right enough. In the ideal case, the business logic should be enforced in the database as constraints/triggers, *and* the app should validate data before sending it to the database. The key is to achieve this without duplicating business logic.

This means that you need an implementation-independent representation of the constraints, which can be translated into database constraints by your schema management tool, and object validation rules by your O/R mapper.

I've not seen such a system, but my company has something a bit similar: a form field validation language that gets translated into two things: (a) rules for validating the form object before persisting it to the database; and (b) dynamically generated Javascript code to do the same validation on the client's web browser. In principle, we could add (c) translating the rules into database constraints, but that's really, really hard to do in a database-independent manner.

The key here is that each layer of validation is doing different things: the database server is guaranteeing data integrity in the face of non-conformant clients; the app-server validation is saving us a trip to the database, plus it can deal with validation failures in an application-specific way (e.g. displaying a response page that highlights the error fields in red); the client-side Javascript validation is providing the user a faster, more interactive UI (and reducing some load on the app servers).
Thursday, April 14, 2005 10:41 AM by TrackBack

# re:Hi, My Name is Alex, and I am a Resource Waster

^_^,Pretty Good!
Wednesday, April 20, 2005 7:28 PM by Bobstar

# re: A Word from the "Wise": Don't Use Exceptions

Yeah thats funny, i've always been told not to use exceptions.. Well atleast only in special circumstances. Anyway...

As Oleg Tkachenko writes <<Oh boy! Using exceptions to pass messages between tiers ??????? That's crazy. You better never show that code to anybody>>
And why is that so?, imho thats exactly one of the places that an exception fullfills it's usefullness.
Friday, April 22, 2005 3:11 PM by Thomas Eyde

# re: The "Steve Rule" Proved True Again

Where I come from, Kristian is not a girl's name. So you probably have only 5 female bloggers.
Friday, April 22, 2005 3:22 PM by jayson knight

# re: The "Steve Rule" Proved True Again

I've worked with more Raj's than females; and I can count on one hand the number of female coders I've done projects with. Never really thought about it...interesting observation.
Friday, April 22, 2005 4:20 PM by Chuk

# re: The "Steve Rule" Proved True Again

And that Kristian has only one post in his (her?) blog, too, so hardly counts.
Friday, April 22, 2005 4:39 PM by Jakeypoo

# re: The "Steve Rule" Proved True Again

"Gwen" is pretty ambiguous and only has one post, too.
Friday, April 22, 2005 4:41 PM by Blue

# re: The "Steve Rule" Proved True Again

I'm disappointed.
Only Julia Lerman (if you follow her 'moved to' link) has posted more than once in 2005. What a poor showing
Friday, April 22, 2005 5:03 PM by TrackBack

# On Software Development and Gender

Alex&rsquo;s post about &ldquo;The Steve Rule&rdquo;&nbsp;got me to thinking about software development...
Friday, April 22, 2005 5:39 PM by James Curran

# re: The "Steve Rule" Proved True Again

At my company we has 1 female developer. Among the men, we have: James, Miguel, James, Miguel and James.
Friday, April 22, 2005 8:43 PM by TheZeusJuice

# re: The "Steve Rule" Proved True Again

At my university cs department we have the Matt to Girl ratio
Friday, April 22, 2005 9:38 PM by =j

# re: The "Steve Rule" Proved True Again

Well there are two things here. The obvious one is there are less women in programing than men. The other less obvious thing is there are fewer male names than female names in the US (go check your census data). So, a small poplulation of women combined with a small variety of names of men and you have the spooky steve to girl ratio.
Saturday, April 23, 2005 11:31 AM by Kate Gregory

# re: The "Steve Rule" Proved True Again

Marcie (one of the asp.net bloggers you mention) and Julie Lerman (mentioned in your comments already) observed that at Tech Ed last year there were 8 women speakers, and 8 speakers named Brian. This has become our favourite measure of balance. About half the time I am at an event the women and Brians balance. For example last week I was on a panel at VSLive with Brian Randell - instant balance.

However this year the women slightly outnumber the Brians as Tech Ed speakers ( http://www.gregcons.com/kateblog/Trackback.aspx?guid=2762e183-ba2f-49ea-99ed-38dfb7f71e89 ). I didn't check the Steves though.
Sunday, April 24, 2005 9:01 AM by TrackBack

# The 'Steve' Rule

Sunday, April 24, 2005 4:49 PM by Ruth

# re: The "Steve Rule" Proved True Again

Now in my office of programmers, there are five Mikes, two Ricks (okay Rich and Rick), and an impressive array of other masculine names, including one Steve. Everyone is on a first name basis except the Mikes who are universally referred to by their last names. All the women are uniquely named, no duplicates.
Sunday, April 24, 2005 7:04 PM by Chris Norman

# re: The "Steve Rule" Proved True Again

asp.net?

Iew iew iew iew
Run away!!!
Sunday, April 24, 2005 8:22 PM by Toxia

# re: The "Steve Rule" Proved True Again

Jeff is also a common name for programmers. In my list of "elite programmers", many of them are Jeff's
Monday, April 25, 2005 2:31 AM by TrackBack

# CommunityServer: Custom Homepage With Thread Listing

In this Community Server tip, I'll describe how to make a quick & easy home page that displays posts...
Monday, April 25, 2005 9:54 AM by Nick

# re: The "Steve Rule" Proved True Again

Anyone else noticed how "Nick" rarely appears as a typical male programmer name...



Well there go my career prospects.
Tuesday, April 26, 2005 9:30 AM by keeper40k

# re: The "Steve Rule" Proved True Again

I don't know about Kristian and Gwen, but could it be that that is a boy named Sue?
Wednesday, April 27, 2005 2:53 PM by Eric Vitiello

# re: The "Steve Rule" Proved True Again

Another interesting observation is the number of programmers named "Eric" that have a mustache:

http://www.catb.org/~esr/ecsl/
Friday, April 29, 2005 11:55 AM by Baloney

# re: The "Steve Rule" Proved True Again

Our team of 10 developers has 3 women and NO duplicate guys names!

This must be the exception that prooves the rule.
Friday, April 29, 2005 2:53 PM by Mike

# re: Computer Programmer Inflation

Solutionologist
Friday, April 29, 2005 3:03 PM by Jason Mauss

# re: Computer Programmer Inflation

I've talked with colleagues before about just renaming everyone's job title to 'Problem Solver' since that's really the bottom line of what you do.

Problem Solverologist? meh.
Friday, April 29, 2005 3:32 PM by David Cumps

# re: Computer Programmer Inflation

Art direction, we're designers :)

So, add 'Designer' :)
Friday, April 29, 2005 3:49 PM by Steve Hall

# re: Computer Programmer Inflation

In some shops, titles have de-evolved into "Shinola Shoveler"...

Personally, I'd like to see an end to this move towards "sumtin' Engineer" titles, and instead get the word "craft" or "art" in there somehow (as a tribute to our revered holy work, TAOCP by Don Knuth). "Problem Crafter"? "Crafty Problem Solver"? "Shifty Solution Crafter"?

In my current company, we've actually got some folks with the title "Computer Scientist", which is pretty ambiguous. Whenever I find out someone's gotten a "sideways promotion" to "Computer Scientist" I always ask them "Exactly what DOES a C.S. DO? What did YOU DO to deserve this? Where a white lab-coat into work a few times?" Invariably, it always boils down to the lame excuse that they got the title due to getting their name on a patent. (Afterall, engineers NEVER get their names on patents, only scientists, right?)

Obviously, more ambiguity can be had with a combination of the above: "Computer Science Craftsman" or "Software Craftsman" or "Software Solution Artist".

Now if anyone were to approach Knuth and suggest he change the TAOCP title to replace the "Programming" in the title with any of the aforementioned tags, I heartily support the spillage of blood! (I'll supply him the light saber...) ((Can you imagine a title of "The Art of Computer Solutioning"?))
Friday, April 29, 2005 4:23 PM by Chris

# re: Computer Programmer Inflation

I just got told that I missed out on a job because they expected me to be an analyst/programmer instead of a programmer after 7 years in the industry. We have 7 programmers where I work and 0 analyst/programmers but we all do analysis.
Friday, April 29, 2005 4:25 PM by uber1024

# re: Computer Programmer Inflation

I don't much care what my title is. It's the paycheck that's important.
Tuesday, May 03, 2005 9:44 AM by Steve

# re: The "Steve Rule" Proved True Again

At my last company we had 1 female developer and I was one of the two Steves (although the other one was moving out of development and into management).
Tuesday, May 03, 2005 7:27 PM by TrackBack

# Comicality Inflation

Tuesday, May 03, 2005 7:40 PM by Jason Mauss

# re: Comicality Inflation

HAHAHAHAHA OMG THIS ARTIKUL IS TEH FUNNAY!!! LOL!!

U R TEH ESS-EMM-AR-TEE!! ROFLMFAO!!!111Shift+One!!

LOLLERSAKTES!! haahhaahahahaha
Wednesday, May 04, 2005 12:59 AM by Jon Limjap

# re: The "Steve Rule" Proved True Again

In my previous job, when we lost our last female, our operations guys created a policy to hire only female On-the-job-trainees for the programming team.

None of us complained. We even got to hire a female developer after that.
Wednesday, May 04, 2005 1:05 AM by Jon Limjap

# re: Comicality Inflation

Don't worry too much about the LOL acronyms. Consider the internet chatting problem in my country aggravated by a cultural addiction to SMS messaging:

h! hw r u? i rily hd fn lst nyt. dat Jon dud was so funi lol. hs jk abt d...

I think you get what I'm trying to say.
Wednesday, May 04, 2005 4:28 AM by TrackBack

# Computer Programmer Inflation

Alex Papadimoulis (he of DailyWTF fame) has posted a couple of v.funny articles recently:

Computer...
Wednesday, May 04, 2005 4:28 AM by TrackBack

# Computer Programmer Inflation

Alex Papadimoulis (he of DailyWTF fame) has posted a couple of v.funny articles recently:

Computer...
Wednesday, May 04, 2005 8:06 AM by TrackBack

# Titel Inflation

Griner post
Wednesday, May 04, 2005 9:17 AM by Hank Miller

# re: Comicality Inflation

ROFL, LMAO, and ROFLMAO have all existed longer than LOL as far as I can tell. I encountered all 3 on UseNet many years before I encountered LOL - on irc.

I think this is a culture issue. Where you are communicating indicates what you use.

Those on UseNet tend to use ROFL and the like, but never LOL and rarely haha. (ha is generarlly used to indicate you think the position is so wrong it is almost funny to see someone arguing it, not an indication of a joke that was enjoyed)

LOL is something I have only encountered on irc, where the others were rarely used. (I have not been a regular on irc in something like 5 years, I can't tell how the culture has changed since then)

The term for haha is Onomatopoeia - a word that sounds like it is pronounced. see: http://en.wikipedia.org/wiki/Onomatopoeia
Wednesday, May 04, 2005 9:57 AM by Jakeypoo

# re: Comicality Inflation

Thank god I have a wireless keyboard! I pulled it off the table and am typing on it now (with surprising precision) while I ROFLMAO at your article.
Wednesday, May 04, 2005 10:50 AM by Katja Bergman

# SQ

That's all I want to add to this discussion: SQ

SQ = Smiling Quietly...
Wednesday, May 04, 2005 10:55 AM by bob

# re: Comicality Inflation

heh, you forgot to include roflmmfao...
Wednesday, May 04, 2005 1:20 PM by Jason

# re: Comicality Inflation

Well, these words are all onomatopoeias ( http://www.tnellen.com/cybereng/lit_terms/onomatopoeia.html ) but I think the phenomenon of expanding them to show intensity are truly expandojectives. lol
Wednesday, May 04, 2005 1:24 PM by Jason

# re: Comicality Inflation

DAMN IT I should have read all the comments... Someone already mentioned "onamatopoeia". I guess I was just too excited to show what I've learned with Verbal Advantage®.
Wednesday, May 04, 2005 1:29 PM by Alex Papadimoulis

# re: Comicality Inflation

Some expandojectives are onomatopoeias and some are not; there's an interesection between the classifications, but no subsets.

expandojectives that are not onomatopoeias:
- cooooooold (like, -50 degrees cold)
- cooooooool (few steps above the Fonz cool)
- ccccrrraazzzyy (prices so low you want to explode)

And you certainly can't just expand any subjective adjective:
- transluuuuuuuuuuuucent
- hooooooooooooot (unlike cool/cold)
Thursday, May 05, 2005 4:33 AM by Mayo

# re: Comicality Inflation

\\o oOo o//
Thursday, May 05, 2005 8:45 AM by samuel

# re: Comicality Inflation

oh hell yes this is one hell of my expriance. and it is realy funy LOL.probably i am the one using this word so often but pal, i don't have mental disorder . i like your aricle i didn't expect that i'm gonna clash with this site. just pop in this site to get detailed information about inflation for my economics project it's realy funny though LOL again!! pisss out!!!
Thursday, May 05, 2005 9:37 AM by Jeff Atwood

# re: The "Steve Rule" Proved True Again

Julia Lerman calls this the "Brian" rule based on TechEd 2004 speakers..

http://www.codinghorror.com/blog/archives/000282.html
Thursday, May 05, 2005 11:18 AM by Dwight

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

I used this methodolgy 15 years ago. It's called Application Prototyping. Moving forward into the past.
Thursday, May 05, 2005 11:38 AM by sureshot

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

har har. keep sniffing that paint dude. something in me really wants this to exist though....
Thursday, May 05, 2005 11:40 AM by Jeremy Miller

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

LOL. How about a "WAP" methodology - WTF Avoidance Programming?
Thursday, May 05, 2005 11:55 AM by Wallym

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

LMAO
Thursday, May 05, 2005 2:39 PM by Jason Hoekstra

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Good stuff. I have to admit, I try the URLs to make sure this was not a real trend in project architecure/methods.
Thursday, May 05, 2005 8:08 PM by Cindi

# re: Computer Programmer Inflation

Industry analysts have encouraged inflation in their research. Read about the real facts at http://blogs.ittoolbox.com/eai/leadership
Friday, May 06, 2005 12:03 AM by TrackBack

# Robin Curry

Robin Curry
Friday, May 06, 2005 4:20 AM by Jon Limjap

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Hell, I thought this was gone.

And W-ever TF happened to N-tier systems and OOP? Throw them out the window and embrace DWIT?
Friday, May 06, 2005 6:52 AM by Alex Hoffman

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

" ... solves every problem there is to building software (and then some) ..."

LOL - is it April 1st?
Friday, May 06, 2005 8:02 AM by Luzk

# re: Comicality Inflation

I couldn't agree more! But what I hate even more than people (mis)using LOL etc, are the ones SAYING LOL etc.
Friday, May 06, 2005 10:26 AM by Jakeypoo

# re: Comicality Inflation

PrincessGurl and AngelKitty sound pretty hot.
Friday, May 06, 2005 11:04 AM by Seanba

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

I couldn't get any of the URLs to work and it looks like there's a lot of people laughing here.

Ummmm ... am I missing something?
Friday, May 06, 2005 2:23 PM by Thomas Wagner

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Personally I see a nice convergence opportunity between a FAD front end coder and a WTF architect on the back. That's got to be the most flexible approach. I can't wait for MS to deliver the WTF Architect Certificate course. Yeah thats it!
Friday, May 06, 2005 7:07 PM by MeCoder

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

This reminds me of SCAM
SCAM Can Adapt Methodology
Saturday, May 07, 2005 8:50 AM by TrackBack

# Some interesting finds ...

Some interesting finds ...
Saturday, May 07, 2005 11:32 AM by Hussein Zahran

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

i think this approach is already exists in small to medium organization where you need to satisfy your customer and you think only in delivery
Saturday, May 07, 2005 11:55 PM by Tim Haines

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

FAD will be taken up with great enthusiasm for a brief period of time.
Sunday, May 08, 2005 3:37 PM by Richard Spindler

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Is this supposed to be funny?

Designing the Interface first is actually not a bad Idea at all!
Monday, May 09, 2005 8:14 AM by Benjy

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

it does seem rather late to be an April 1 joke...like the Unix&C hoax joke that went around a few years ago ..i dont think its even worth adding anything more in reply.
Wednesday, May 11, 2005 11:34 AM by Peter

# re: Computer Programmer Inflation

Fred Brooks commented on the title "computer scientist" years ago.

http://www.cs.unc.edu/~brooks/Toolsmith-CACM.pdf
Friday, May 13, 2005 4:33 PM by Sergey

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Judging from the comments, some people didn't notice the sarcasm dripping from the screen... FAD is the way to go - I'm a big evangilist of FAD. Works every time.
Tuesday, May 17, 2005 3:56 PM by Oliver Klozoff

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

I believe what's going to help the DWIT methodology along is the fact that most managers are clueless zombies who will embrace any FAD that comes along.
Tuesday, May 17, 2005 4:07 PM by Rob Garrett

# re: Computer Programmer Inflation

I have to disagree with your post, although it does make some convincing points. My understanding of programmer vs. developer label came about because of the shift in responsibility of each job role.

Back in the 70's and 80's we referred to people who punched instruction code into computers as "programmers.” Programmers had no role in the design of software, nor did they facilitate the requests of the client, this was the role of the system analyst. Typically, programmers were paid far less than analysts and were only given requirements to implement for given projects.

Fast forward to today. The industry is now flooded with individuals who posses Computer Science and Software Engineering qualifications. The fact that software development is now considered an "engineering" principle is testament to the fact that software creation involves much more than just coding. Thus, in my mind, the "programmer" is dead and we have a new title – the “developer.”

Developers are expected to know object oriented programming, object oriented design, and process methodologies (RUP, XP etc). It is not uncommon to see a developer in design meetings, code review meetings and for them to play a large part in creating test cases for developed software. Programmers, true programmers, are the people who, in my mind, are only responsible for writing software code and no more. Some employers still distinguish differences between programmers and developers. Many of the legacy UNIX and mainframe jobs involve programmers to keep these systems running on a day-to-day basis.

I do concur with one point that you make, and that is the one about this being a debate about image. Sadly, the market is awash with individuals that claim that they can develop good software; but in reality do a bad job. Therefore, image is everything when standing above the crowd as one of the elite. The “developer” title has a certain grandeur that is synonymous with excellence in the engineering field, whereas “programmer” does not.

Some may agree with you in that "programmer" and "developer" are titles for the same role, but ask 9 out of 10 programmers/developers what they would rather be referred to, and they will likely tell you "developer.”

Tuesday, May 17, 2005 4:17 PM by Alex Papadimoulis

# re: Computer Programmer Inflation

> Back in the 70's and 80's we referred to
> people who punched instruction code into
> computers as "programmers.”

Actually they were called punchcard girls. Though their actual job title was coder.

> Programmers had no role in the design of
> software, nor did they facilitate the
> requests of the client, this was the role of > the system analyst.

Go back and read books from the 70's and 80's, specifically M.A. Jackson's Principles of Program Design to get an idea of how the terminology and roles were like. Job roles haven't changed since then. Only titles.

Programer/Analyst = Developer
System Analysts = Business Analyst
System Designer = Architect

Experience and Skill correlate to rank (Programmer I, II ... VI). A "1" is fresh outa college, a "3" knows a bit more, a "6" is a total guru.

Same roles. Some differences. BS Semantics.
Wednesday, May 18, 2005 11:22 AM by TrackBack

# Front Ahead Design - at last something sensible

Friday, May 20, 2005 1:24 PM by Bob, London

# re: Computer Programmer Inflation

This guy started before most of us were born.
He said back then they were called 'computers'

Weinberg explained, "the title software developer did not exist; the word software did not exist."


http://www.devx.com/enterprise/Article/27631

Wednesday, May 25, 2005 8:49 PM by Don Almeida

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I totally agree with you. We miss the real problem in a pursuit to get it to work. There is a very good saying about leadership and managers. "A good Manager will take you through the forest, no mater what. A Leader will take time to climb on a Tree and say 'This is the wrong forest'"
Thursday, May 26, 2005 7:21 AM by Jarno Peschier

# I'm a disillusioned grumpy curmudgeon...

Good news: you are more than 100% right (your opinion about what "we" would need to do with these questions)

Bad news: you are more than 100% right (your guess about the world around us opposing this truth either because the current way seems to work better short term or because people just do not think/care at all)

I'm tired of trying to actually be a grumpy curmudgeon in public (i.e. in newsgroups, forums, whatever) because of the overwhelming David v.s. Goliath feeling it gives me. So I just keep doing this on the project I happen to work in myself and be done with it.

Even though you are (also) more than 100% right in stating that I might be "that poor sap" somewhere down the line. At the moment I'm just to numbed down and desillusioned to really care.

[No, please don't worry; I'm not suicidal. Dilbert keeps me laughing and thus quite sane.. ;-)]
Thursday, May 26, 2005 10:18 AM by Rick Scott

# re: Pounding A Nail: Old Shoe or Glass Bottle?

That is a terrific analogy. Did you write that? I think I will have to quote you in the future :)

OTOH, giving credit will be tough because of your last name. Maybe I'll just give credit to the owner of thedailywtf.com =P
Thursday, May 26, 2005 10:42 AM by Alex Papadimoulis

# re: Pounding A Nail: Old Shoe or Glass Bottle?

> That is a terrific analogy.
> Did you write that?

Sadly, I experienced it first hand in a bout of sheer laziness. I was upstairs, needing to pound a nail to hang a picture ... and the hammer was *all* the way in the basement.

I ended up using an CD-ROM drive I had siting in a drawer. It worked surprisingly well, although I think I would have had a net time savings had I just gone down and grabbed the tool.
Thursday, May 26, 2005 12:13 PM by Bob

# re: Pounding A Nail: Old Shoe or Glass Bottle?

Heh, You are 100% right to set them straight. It would tick me off to see my post removed as being a "flame" tho.

I'm at the point in my life where I have almost given up on telling people why they need to do it differently.

The answer is invariably the same, "There's no time to do it right."

Of course, when it breaks, there always seems to be time to do it over.

I've discovered that mostly it comes down to Business people not understanding why "its bad and should be cleaned up/done right the first time"
and
Technical folks like us being incapable of presenting our reasons in a way that makes sense to the Business people.

Keep up the good fight while you still can!!!
Friday, May 27, 2005 10:47 AM by Adam Machanic

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

Best post this month, by far.
Friday, May 27, 2005 10:56 AM by Jon Limjap

# re: Pounding A Nail: Old Shoe or Glass Bottle?

This is nice, Alex. I agree with you 101%.

Is this the inspiration behind thedailywtf.com?
Friday, May 27, 2005 11:31 AM by Alex Papadimoulis

# re: Pounding A Nail: Old Shoe or Glass Bottle?

>Is this the inspiration behind thedailywtf.com?

If only I were that insightful ...

More, TDWTF provided inspiration for this attitude and post :-)

The inspiration behind TDWTF was merely complaining about incompetence at my work.
Friday, May 27, 2005 9:29 PM by Jon Limjap

# re: Pounding A Nail: Old Shoe or Glass Bottle?

So it was the other way around huh?

I guess it's the attitude TDWTF regulars get after reading enough WTFs --- they suddenly become conscious that carelessness in programming and design will lead to catastrophic (if not rather amusing) WTFs that will not only be laughed at by people but scorned by future maintenance developers (solutionologists? :p).

Makes you at least go back to the "hardware store" and look up on what you really need to acquire.
Sunday, May 29, 2005 8:09 PM by Jeff Atwood

# re: Pounding A Nail: Old Shoe or Glass Bottle?

To me, this is about following conventions, whether they are in UI (design) or code:

http://www.codinghorror.com/blog/archives/000289.html

If you have a compelling reason to build a crazy, denormalized table, then do it. But it sounds like the person you quoted was just doing something different either out of A) ignorance or B) just because they felt like they could.

Those aren't good reasons.

So I'm on your side. But you do need to be diplomatic about how you express this, unless you want people to dig in and do the wrong thing just to spite you and show how "right" they are. Sounds strange, but then, so is human nature..
Monday, May 30, 2005 9:24 AM by Paul McBride

# re: Pounding A Nail: Old Shoe or Glass Bottle?

Alex:

Yes, I agree with you 100%. And I have been known to be that person out there, especially in the ASP.Net SQL Database forums, asking people why they are trying to fit a squre peg in a round hole when the issue is their db design. And the first thing I thought when I read the example you used was: What kind of f-in' design is that???

That said, one thing I have learned from the various newsgroups and forums is that questions are posted by relatively inexperienced developers working on systmes that are not of their own design. More than once, I have responded with a typical "What the f--- were you thinking" (and, yes, I tend ot be a good deal more diplomatic), only to have the original poster sheepishly reply "Well, it isn;t my desing, it's a system I inherited, and I'm new here, and my boss needs this report by 5..." (or something to that effect).

So I agree: educate, educate, educate, but be willing to jump in and help people drive that nail in with a glass bottle if absolutely necessary, as well...
Tuesday, May 31, 2005 1:04 PM by Patrick Bounaix

# re: Pounding A Nail: Old Shoe or Glass Bottle?

give 'em hell. how else will developers (junior or otherwise) be sharp if they are allowed to be coddled and continue with insane practices?

we should be held to a high standard and pushed to be better- thats what makes us valued professionals, right?!

the question asked will determine the type of answer i give. if this is a "i have no clue what i am doing, please help me" question, i have no problem giving a full attitude and politely directing the asker to RTFM.

if they did RTFM, ask relevant questions, try, try, and keep trying- then i'll help out however i can....
Wednesday, June 01, 2005 2:25 AM by Me

# re: Pounding A Nail: Old Shoe or Glass Bottle?

> If you say the former, then you probably think I'm a grumpy curmudgeon

Don't you mean 'latter', not 'former'? Or does my brain have an off by one error?

As for taking advice - the advice is good, but no normal human being is going to be happy to be talked to in that tone of voice, no matter how wrong they are. A slightly more tactful tone will give better results.
Wednesday, June 01, 2005 9:44 AM by Lucio

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I think we should try and mix together a bit of grumpiness and tact when answering to such posts.

It seems that most of the time the scenario is: somebody has inherited a badly designed system that they cannot change due to a tight schedule, small team, stubborn business people (:P) etc. So if we can't beat them, I guess both things can be done: start by telling them what a tremendous smelly crap they're doing and explain why is it crap (or just tell them to RTFM). Next, once the poor fella is frightened enough, I believe it would be valid to propose a solution that he could use.

Some might say that providing a solution would be bad, since somebody else in the near future might come across the answer and use the damn workaround as a definitive solution. But then again, there's a chance they'd read your entire message, including the part where you trash the design, and learn something from it.

Correct and help. That's what I usually do.
Wednesday, June 01, 2005 12:55 PM by Qevlarr

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I do some Qbasic programming for a hobby.
Nothing fancy.

The other day, I was working on a program to create a graph from any function. Then I got a problem. It got worse and worse.

Eventually, I went to a forum for help. Instead of solving my problem, they told me I was doing something fundamentally wrong, or at least unnecessarily difficult.

They suggested me to use a different notation for the functions, so the computer can handle it better (RPN). To do that, I had to start all over again.

I was angry at first. Who the hell are they, anyway? I didn't ask that! I don't want your opinion on my program! ...

But I did it.
And I'm forever thankful.
Wednesday, June 15, 2005 8:28 PM by jeffdav

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I would have given some technical indication as to just what was wrong with their design, but otherwise, yeah, they needed that response.
Sunday, October 16, 2005 4:29 PM by nsimeonov

# re: "What's the Point of [SQL Server] User-Defined Types?"

There's wisdom in your words and I'm surprised that so much people don't know anything about SQL servers and use them as flat tables. But let me give you something to think about: Consider the following situation - if you have n-tier application you better check the input in the user access layer - some simple validators will dramatically minimize the traffic and load of your servers. You better check the input as early as possible not rely on the SQL server to inform you whether input is wrong or not.

However I strongly encourage anyone to be using as much check constraints, foreign keys and unique indexes as possible in order to keep the database consistent. I ran so many times into wrong reports, because of doing it "the wrong way" - that means the sql wasn't not joining the tables "properly" and it was including records, that shouldn't be in the database and those records of course were not referenced at all.
Thursday, October 20, 2005 11:59 AM by Marty Thompson

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Good to see you back Alex.

I unfortunately have not read up too much on SQL 2005, but are these column types essentially XML column types? Where the CLR object would be XML-serialized and then placed in the field? I agree that in general it's a bad idea, but currently at my company we are using that same basic premise for saving a user's current process.

Essentially we have a user process object that keeps track of whatever process the user is currently involved in. That process object has the necessary business objects as members and interactions required for those objects and the actual process. We allow the functionality of the user saving their current progress and logging out. What we do is serialize the user process object and place it in a table and assign it to that user. So when the user logs back in they can choose to resume that process. If they do, then we just shuck it to the base user process object, deserialize it, and then call a base method to return to the last thing being done in the process.

I may be way off on the way that the CLR UDTs actually work, but I can see a rare benefit for dumping an object that you may want to possibly use later.
Thursday, October 20, 2005 2:02 PM by Charles Chen

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

How about as a monetary unit? I think this scenario would make perfect sense no?

From "A First Look at SQL Server 2005 for Developers" (Beauchemin, Berglund, Sullivan):

"If the object represents a scalar and requires more than one firled ot be described, a user-defined type should be used to represet it; otherwise, it should not."

"Is a geometric point a scalar? No, because its representation requires two dimensions, not just two numbers. But why is a data that has three numbers a scalar but a point that has only two numbers associated with it not a scalar? You can ask of any date something like 'Is d2 between date d1 and date d3?' and get a consistent answer."

To me this says that if the rules of inequality are transitive, then a CLR UDT can be used to create a cleaner representation of the data. I'm thinking that it would be helpful to work with monetary units without using two columns to store the amount and the currency.
Thursday, October 20, 2005 2:07 PM by Richard P

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

I can't imagine anywhere in a non-trivial application where a CLR UDT would be preferable to normal data in the DB mapped with a decent Object Relational Mapper.

Now, if MS goes and does something drastic like turning the filesystem or the registry into a shallow wrapper around SQL Server... well then you may see some uses I guess.

Maybe we're forgetting one thing though -- polymorphism. With .NET as an SP language, storing CLR objects in the DB lets you do "interesting" (aka "so new it's bound to be abused") things. Imagine iterating through a table and calling virtual methods on the objects in a CLR UDT column.
Thursday, October 20, 2005 3:55 PM by Alex Papadimoulis

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

@Marty.
What you describe (storing unfinished "scratch" data) is fine to store as a BLOB -- in this case, the database ("data layer") should have no ability or knowledge of what the scratch data contains. Putting it as a CLR UDT would give the database such knowledge and throw out the clean tiered design.

@Charles
Don't be sold by the authors' double-speak! If something requires two attributes to be described, then it is, by definition, not scalar.

Money has always been two-parts and not scalar: Currency_Code (CHAR(3) per ISO-4217) and Amount (DECIMAL(9,4), or whatever). That's how the real world models and and how the real world describes it.

We could apply that logic to anything that "we" consider to be scalar. An address, for example, is always stamped as a block, so why not store it in a TEXT field? Or as a CLR UDT?

@Richard
Ah yes, "interesting" things. That usually translates to completely unmaintainable and "cool while it lasted" systems. That's where systems modeled on "Object-Relational" models end up going.
Thursday, October 20, 2005 4:20 PM by Chris Miller

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Another reason to take a pass on CLR UDTs is that you have now tied your database to SQL Server 2005. If you are developing code that can run on multiple versions of SQL Server or even different server vendors, you're screwed.
Thursday, October 20, 2005 4:27 PM by Charles Chen

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

But money _is_ scalar.

If A > B and B > C and C > D, then A > D, B > D, A > C, etc.

The problem is that no one thought about creating a monetary data type that not only described the amount, but also the currency of the amount.

The unit qualifies the amount much the same way that say the year qualifies the month. Which is greater, June or July? It depends on how you qualify the two, as June, 2005 is obviously greater than July 1999. Similarly, which is greater, 100.00 or 99.00? It depends on how you qualify the two, as 99.00 GBP is obviously greater than 100.00 USD. And this is a good example of where the CLR integration becomes very powerful as when you write your custom aggregation funtions, you can call out to a web service to build a lookup table of the currencies :)

Very powerful (and useful) indeed. Otherwise, the alternative is not nearly as clean. To answer a question like "What is the total value of all of our global positions in USD?" (assuming that you store the original currency value along with the currency) you would either need to break it out into another layer (read all of the data as is and perform conversions in some business code) or add another layer to import the conversion data into SQL Server (and do the math in SQL Server).

Using a CLR UDT, you can resolve all of this in SQL Server, which is beauty of it all.
Thursday, October 20, 2005 5:32 PM by Alex Papadimoulis

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

@Charles
Time is one-dimensional. "June" is not a point in time, nor a unit of measure. It's the name of a month and cannot be evaluated with "greater than." Points in time can be easily evaluated.

Money is two dimensional and cannot be evaluated with "greater than." For example, you can not say whether "20.00CDN > 15.00USD" is true or false. Five years ago that was probably true, but today it isn't.

The web-service solution you describe to aggregate global holdings would be a complete nightmare. It can be solved with much simpler means:
ACCOUNT_BALANCES { ACCOUNT_NUM, BALANCE_DTE, ACCOUNT_CUR, BALANCE_AMT }
CURRENCY_CONVERSION { CONV_DTE, FROM_CUR, TO_CUR, EXCH_RTE }

A few simple join and you've got global holdings given in any currency at any time. No web services. No CLR. Simplicity.
Thursday, October 20, 2005 7:06 PM by Charles Chen

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

I don't think it would be a nightmare at all.

Where would you get your currency conversion table from? You'd have to write some external process to do this.

The two solutions that I see are to either write it as a CLR UDF or do it inline as part of the sum and simply cache a hashtable of the results from a web service call from within SQL Server.

The beauty of this solution, again, is that it's entirely hosted in SQL Server.

And you're flat out wrong about:

[ "June" is not a point in time, nor a unit of measure. It's the name of a month and cannot be evaluated with "greater than." ]

Obviously you didn't understand the analogy. Given 100 and 99, 100 is always greater than 99. Similarly, given January and August, August is always after January. But given 100 USD and 99 GBP, 99 GBP has more monetary value than 100 USD. Similarly, January 2005 is later than August 1999. It's a simple analogy, no?
Thursday, October 20, 2005 8:44 PM by Alex Papadimoulis

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

@Charles
I take it you've never done anything like this before? You never "pull" into your prod db or DW -- having the db interface with vendors would be just like the diagram I have above.

As far as exchange rate tables, vendors for that are dime-a-dozen. Just add a simple job to your batch processing servers to pull from the vendor and push into the database.

I understand the analogy, but it's incorrect comparison. Months, Month Names, and Points in Time are totally different concepts. Without getting into semantic nonesense, "June" is the name of a month, not a point in time. A point in time scalar in that it is N units past epoch.

Money and Monetary Value are two different concepts, the former being described as Imentioned before, and the second being a non-quantifiable perception. If we could quantify monetary value, we wouldn't really be having these problems i suppose ...

Currency types also works significantly differently than units of measure. A cup will always be 12 tablespoons, but 99GBP may not always be more than 100USD.
Monday, October 24, 2005 5:30 PM by DavidM

# Outdated definition of domain/types

You seem to be stuck in the 1970's. Modern understanding of RM says that ANY type is allowed to be defined for an attribute but only ONE value of that type is allowed. The attribute, type, value "triple" concept.

The internal machinations (properties, methods etc..) of the type are irrelevant to 1NF. It can be anything.. DNA, another table, geometric points.. etc...as long as only ONE value of the type is "stored" per attribute per tuple.

I seriously recommend you grab a copy of Chris Date's "Introduction to Database Systems".. The only DBMS book you will ever need..
Monday, October 24, 2005 8:16 PM by Alex Papadimoulis

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

@DavidM
There seems to be some disagreement in the field as far as what 1NF is and what 1NF is not. Celko, for example, in DATA & DATABASES book, contends that scalar values are required for 1NF.

However, in that same INTRODUCTION TO RELATIONAL DATABASES (Chap 25), it's pretty clear that CLR UDT falls painfully short of the extended-relational model that Date calls for.

Consider that the CLR UDT do nothing but serialize their data into a BLOB column. On top of that, with the use of properties on the CLR types, we have the potential for non-deterministic "mystery" values exposed to the user. Surely this is *not* part of the non-scalar types either.

Informix's DataBlades are a prime example of a good implementation of an extended-relational model. It is actually an extention at the engine level, as opposed to CLR UDT which exist on top of the relational level.
Monday, October 24, 2005 10:20 PM by DavidM

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Alex,

Cheers for the response!

The disagreement seems to boil down to: One Value vs One Scalar Value.

Personally, I like the simple definition and feel the term "scalar" be banished!

It shouldn't matter how the value is being physically stored. People get REALLY confused between the logical and physcial.
I once read someone argue that indexed views violated normal forms because the view stored the data.

I haven't had a chance to use 2005, but regardless of the issues/limitations CLR UDTs have, it is a step in the right direction AFAIAK.
Wednesday, October 26, 2005 10:38 AM by Critic

# re: MySQL 5.0: Still A "Toy" RDBMS

We just got stored procs and views and all that other stuff....kinda like saying, "hey we are serious about buildings cars, our new one even has fuel injection and shocks and power steering; all those fancy things you guys wanted!

HELLO! You are still 20 years behind the rest of us!
Wednesday, October 26, 2005 11:01 AM by Police

# re: MySQL 5.0: Still A "Toy" RDBMS

Perhaps this is a cost issue and not a feature issue? Perhaps you're too brainwashed?
Wednesday, October 26, 2005 11:10 AM by DerelictMan

# re: MySQL 5.0: Still A "Toy" RDBMS

I have to fully agree with this. I can't see myself ever trusting MySQL to anything critical. It will be a long time before I forget that the MySQL developers used to tell everyone that they didn't REALLY need things like referential integrity or transactions. Thank goodness there's PostgreSQL...
Wednesday, October 26, 2005 11:45 AM by Jakeypoo

# re: MySQL 5.0: Still A "Toy" RDBMS

DerelictMan, you can have referrential integrity, but you have to change the table driver. And by "change the table driver," I mean you have to create a new table, apply the constraints, INSERT INTO the new table from the old table, DROP the old table, and rename the new one (I forget the command for that).

That's right, by default you can not have any referrential integrity! But, it's just a simple 5 step process for each table you've created. Microsoft SQL Server does way too much on its own, and I like knowing that I have to set table drivers. Builds character.

On a serious note - table drivers? Why the hell should I have to worry about this? MySQL is an incredibly lousy platform and it's what I keep getting stuck building sites on for my job :[
Wednesday, October 26, 2005 11:58 AM by Wim Hollebrandse

# re: MySQL 5.0: Still A "Toy" RDBMS

As far as feature set and 'proper RDBMS' goes, it might be worth checking out PostgreSQL instead.

Amongs other things, it offers GIS extensions (Spatial in Oracle speak), regex queries and of course supports check constraints, referential integrity etc.

And, it's free and OpenSource. Must be a toy RDBMS then eh...?
Wednesday, October 26, 2005 12:43 PM by Fabio

# re: MySQL 5.0: Still A "Toy" RDBMS

Firebird too is free and open source. And have a lot of interesting extra features, like the "Fyracle" where the Firebird works in Oracle mode!
Wednesday, October 26, 2005 12:50 PM by Jim Arnold

# re: MySQL 5.0: Still A "Toy" RDBMS

It seems that your criticisms stem from the fact that you believe a database should be responsible for enforcing business rules. That's fine, but it is not the only view.

Plenty of critical, high performance, enterprise systems have been built without relying on the database for anything more than storing data - it is the application software which guarantees integrity.

I don't want to get into the "which layer does this belong in" debate, because it's never pretty, but bear in mind that the absence of so-called "key features" from a DBMS doesn't always matter. And it doesn't make that DBMS a toy.
Wednesday, October 26, 2005 1:21 PM by Alex Papadimoulis

# re: MySQL 5.0: Still A "Toy" RDBMS

@Jim Arnold,

Those who believe that a database should not enforce business rules are a subset of those who have never maintained such a system.

The fact that you think there's a "which layer does this belong in" debate is rediculous. That's like arguing about how to wash clothes: sink & washboard or whirlpool washing machine.

Maintain some large information systems and you'll see the complete absurdity of not enforcing data integrity in the database. You can't know what's "good" until you've gotten your hands dirty.
Wednesday, October 26, 2005 2:33 PM by Frans Bouma

# re: MySQL 5.0: Still A "Toy" RDBMS

Alex: if he doesn't want to go into that discussion, don't start it yourself, that's only silly.

The whole debate IS silly, simply because people participating in it are talking about different things. Example?

He wasn't talking about data integrity alone. He was talking about business rules in general. Business rules are more than integrity enforcing rules.

If I create a NIAM model, I can define the constraints I want, they're part of my abstract model. Logically, they can be perfectly implemented in the live datamodel in a schema. The thing is: business rules are far more than a set of constraints. Update a set of entity X if X has a relation with at least one entity Y in another set.

That should be done in the DB? I don't see it has to be done ONLY in the db: there are more views on that problem. Your remark:
"Those who believe that a database should not enforce business rules are a subset of those who have never maintained such a system. "
shows you mean A but say B, as you're talking about data-integrity, not business rules.

And make no mistake, determining the set for X and for Y in my update example can be very complex and the rule set can be huge.

Another point against having all rules in the db (I'm not saying no rules in the db, I have my constraints defined in the db as well, but constraints aren't all bl rules) is that if a rule is violated in the DB it's really late in the call chain. recovering from that is often harder to do than discovering earlier on what's going on.

A physical datamodel represents a set of entities (Chen) but the data inside it can be semantically interpreted by creating new sets (Codd) which can be used for new rules to produce even more sets, for example for reporting or datamining. Storing everything in the DB means that you effectively flatten your complete application into a single set of procs.

Besides DBA's fearing for their job, no-one would do that.
Wednesday, October 26, 2005 3:01 PM by Alex Papadimoulis

# re: MySQL 5.0: Still A "Toy" RDBMS

@Frans:
Indeed. The problem you describe is one that is difficult to enforce in the database. Each situation is different, though many are solvable without getting ugly; here's how I handle the classic "itemless orders" problem:

Create a order lifecycle starting with a status of "incomplete." When the status is upgraded from "incompletel" to "submitted", validate that ORder Items exist.

I think that a lot of people have a difficult time equating "business rules" with "data integrity." The two go hand in hand. "Purchase_Qty > 0" and "LEN(SSN) = 9" are both business rules and constraints that need to be enforced in multiple places (UI, DB, possibly more).

I don't advocate storing "everything" in the database or even doing "business processes" in the database. But CHECK constraints are absolutely essential.

You seem to agree with this. I think you may be surprised how many people believe that "constraints are totally unecessary." These are the people I was refering to when I said that "there is no debate."
Wednesday, October 26, 2005 3:17 PM by Jesse Ezell

# re: MySQL 5.0: Still A "Toy" RDBMS

No one in their right mind will claim that MySQL is better than SQL server or Oracle if the two had to go head to head and cost wasn't an option. You definately would want to think twice before making it the primary RDBMS for some critical data of a huge enterprise, but that isn't the market it is intended for quite yet. Where MySQL shines is as the backend for an application. When you have the RDBMS behind a single application, these data integrity issues are minimized, because the application can easily validate any constraints itself (obviously, this would be a problem if many different applications that didn't share the same codebase were accessing the DB).

This makes MySQL an excellent choice for just about any modern web app, and just about every modern web app needs a DBMS. Remember back when SQL Server was ridiculed (and to some extent it still is today) because it couldn't handle a lot of the enterprise work that systems like Oracle could handle? Now Microsoft is the one who is laughing all the way to the bank. However, if they don't play their cards right, MySQL is now in that position that Microsoft SQL Server was once in and it could soon cut that laughter short. Its already turning heads and its definately headed in the right direction. The truth is that most situations where people are installing SQL Server aren't situations where MySQL couldn't concievably do the same job. There are countless SQL server installations that are serving up web sites and decent web apps, yet don't use triggers, don't use complex constraints, don't use OLAP, etc. Honestly, although it may sound like herisy, they could probably even get away without any transaction support at all if they really had to.
Thursday, October 27, 2005 4:41 AM by Founder

# re: MySQL 5.0: Still A "Toy" RDBMS

To throw my two cents into the ring:

When Designing a web app, I try to validate at every step in the chain. For user input you want to;
-First validate on the client machine so they have a chance to correct there mistake (ie. Missing Fields)
-Second, Validate on the server side things that can't be validated on the client (ie. duplicate user names, etc) and duplicate the client side validation (Can never trust the client side)
-third data layer checks if the data is of the right type, length, not null, etc before inserting into the database.
-forth database checks for checks if the data is of the right type, length, not null, etc

Theoretically the database checks could be removed and all the other validation would guarantee valid data, but its best to be safe then sorry.

Thursday, October 27, 2005 2:09 PM by paddy

# re: MySQL 5.0: Still A "Toy" RDBMS

Well I use mysql a lot in my work, but I will say database level data integrity checks are a very good idea.

Essentially, you are testing assertions, and while no one should ever *depend* on it for error handling, its a thousand times better to raise an error pre-insert vs. post-insert with "wierd results" down the road.
Wednesday, November 02, 2005 12:37 PM by frosty

# re: MySQL 5.0: Still A "Toy" RDBMS

Great post Alex!

One thing I notice (and it strikes fear into my heart) is that a lot of Web companies seem to be actively hiring MySQL people.

This even though MySQL is well-known to be a *dangerous* thing to trap yourself into. Fine for your blog, but really scary if you have to do something complex, or want to grow your business, or if the data itself is vital to your business. I won't go into the details, I think from the comments everyone here knows what I'm talking about.

With PostgreSQL available and in fact *more free* than MySQL (license-wise), why would anyone do this? Postgres is clearly considered superior by everyone who knows anything about RDBMS's, is safe and secure and feature-rich, and offers a clear upgrade path to industrial DBs should the need arise. And PG is not the only serious free RDBMS, and some of the commercial ones are not actually all that expensive (especially if you're in a position to hire people).

Your post has a perfect example of the danger: a semi-failed transaction (the constraint) is reported as OK. WTF?? Actually, if you do any real work with MySQL, you quickly realize there's a lot of that. The very fact that a transition can "semi-fail" should have any DB geek twitching. The fact that you have a whole lot of people, techies and managers alike, who don't consider that a catastrophic situation is a sad and dangerous thing.

BTW, one request: could you possibly put line-breaks in your code here? It would be a lot easier to read without the horizontal scrolling.
Wednesday, November 09, 2005 3:14 PM by Katrina

# re: Gettin' Down in Detroit: The 2005 Launch Party

Hey,

Too bad I did not get to go :-(. Glad you had a fun time.

+Kat
Wednesday, November 09, 2005 6:41 PM by Xepol

# re: Gettin' Down in Detroit: The 2005 Launch Party

Ya, MSDN events tend to be really good about the food (technet too). The goodies at the last technet event I went to in september was cruddy deck of cards tho.

Some of my past MS bling includes 8' rj-45 network cables that retract into a palm sized container (very cool), key chains (also cool), clipboards, and many MANY pens and tshirts. I am still hoping that one day they'll give up ceramic coffee cups, as I collect coffee cups.

I'm looking forward to the event later this month here in canada. I wonder if the honey is a local thing or if we'll see 'em here too!
Wednesday, November 09, 2005 6:43 PM by Xepol

# re: Gettin' Down in Detroit: The 2005 Launch Party

Oh, and my favorite MS blink to date : The VS.NET messenger bag/backpack from the VB Bigger and better tour (I have TWO!)

And let's not forget all the books....

Dang, ya know, developers get more out of MS than their shareholders do!
Wednesday, November 09, 2005 8:46 PM by David Wolever

# re: Gettin' Down in Detroit: The 2005 Launch Party

Awe, sounds like a lot more fun than the launch party in Toronto :( We only got two halves of a sandwich, some mediocre pasta and some disgusting apple-somethings for lunch. The best goodies that were be given out were hockey pucks (thanks Symantec) and some backpacks.
It was pretty fun thou, really cool to get all the software :D
Wednesday, November 09, 2005 8:55 PM by Drew Robbins

# re: Gettin' Down in Detroit: The 2005 Launch Party

I'm glad you could make it to the Detroit Launch event and that you had a good time. Have fun with Visual Studio!
Thursday, November 10, 2005 3:50 AM by Martin Vilcans

# re: Gettin' Down in Detroit: The 2005 Launch Party

It's great to see that you are focusing on the important aspects of these events. :-)
Thursday, November 10, 2005 5:59 AM by Mandyhan

# re: Gettin' Down in Detroit: The 2005 Launch Party

Sounds like a smart thing, open source buildings. Built only when the council has verified that it won't break, and you can verify it yourself if you don't trust it. Pity this isn't done with software that handles our critical information, and we have to live with simple promises on the security and safety of those systems. Oh well, I guess I have a natural distrust of programmers , because I know what they're like -- I am one myself. :)
Thursday, November 10, 2005 8:53 AM by smudge

# re: Gettin' Down in Detroit: The 2005 Launch Party

Stop with the taking open source buildings seriously thing, already!

That B*nne M*man stuf is the devil's work - it's "Franch", you know - ze "Franch" make it.

You should be smearing yourself with this: www.tiptree.com

Now, I shall go back to reading TDWTF and smearing stuff on things...
Thursday, November 10, 2005 9:21 AM by Jeff Cutsinger

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Alex,
how is something like a complex number different from a string? A string can be viewed as a sequence of characters (and often is: witness CHAR(30)), which makes it not scalar by your definition.
What makes CHAR(30) ok and INT(2) not ok?
Thursday, November 10, 2005 9:22 AM by nraynaud

# Honey

"Bonne maman" is the main confiture brand in France. I'm astonished that 1) they produce honey 2) in the US under a french brand.
Thursday, November 10, 2005 9:47 AM by hank miller

# re: Gettin' Down in Detroit: The 2005 Launch Party

Whenever I see I building downtown I ask "What would Gaudi do here". I think he would love that much glass, but only after he gets his workmen to smash it to smaller pieces.

We need some creative architechs who know how to build something that lasts, is function, and beatiful. Which is why I specified Gaudi and not some others.

BTW, did you demand the source to the carpet? How else would you know if it causes cancer in lab rats if you can look at the source and try it yourself? ;)
Thursday, November 10, 2005 11:06 AM by Peter Bridger

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

A good idea, done well.
Thursday, November 10, 2005 1:03 PM by ocean100000@hotmail.com

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

I did something like this in the past, But since I didn't want to reinvent the wheel I used the windows Task scheduler to schedule the job to run by calling my job executable with command line argument giving it what job to run. So all my program had to do is worry about running x job pass or fail and log the results, not on scheduling the job to run or the details relating to that. Also made debugging a great deal easier to do.
Friday, November 11, 2005 9:37 AM by Ben

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Alex,

Your confused. A point is a datum, an array is a collection of data. Are you next going to argue that rational numbers should be stored in two columns because they can be represented as a numerator and a denominator, and not a numi-denominator? And, as an earlier post mentionied, what about strings? Getting a table into first normal form isn't about breaking each and every datum up into it's components and then putting that into separate columns, but rather it is about breaking the data apart into single pieces.

A point is a single entity, not two: the two components are very tightly bound, in fact it doesn't even make sence when working with a point, to only look at one component, you have to look at both components when doing transformations with that point. This same result is also true of time, complex numbers (Oh, and by the way, nobody is going to need complex numbers? Complex numbers are only used in solving differential equations? You're now an expert on what everybody needs in a database? So, you're just going to ignore all of those scientific applications that need a reliable data store?), and vectors (math/physics vectors). Vectors are not scalar in the math sence, but they are in the computer science sence, because the components of a vector are so tighly coupled. (Again, you can't talk about a vector without working with both components.) This tight coupling of components is (in general) not true of arrays and lists. An array is a collection of values, but each value is distinct (unlike in points, math/physics vectors, etc). This is exactly why an array of chars to represent a string is valid in a column, but an array of chars to represent grades would not be. Each component of the array of chars in the string doesn't mean anything buy itself (just like vectors, points, rational numbers, etc.), however, in the array of chars representing grades, each component does have meaning by itself.

Being a scalar value (in computer science terms) has nothing to do with being an ordered set (being a scalar value has nothing to do with being an ordered set in mathematics either, but I digress). Being a scalar value has eveything to do with whether the components of that value (the numerator and denominator of a rational number, the two components of a vector) have any meaning (as a piece of data) by themselves.
Friday, November 11, 2005 9:58 AM by Ben

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

I have one more thing to say. Concerning my rant above, my point isn't that you should always put tightly coupled pieces of data in the same column, but rather, that it is often difficult to determine whether something should go into seperate columns or not. I am not a database expert, but I do know inconsistancy when I see it, and it would be inconsistant to insist that (mathematical/physics) vectors should be broken into separate components unless you were also insisting that rational numbers, strings, and other (mistaken for merely aggregate) datatypes should also be broken up into components and put into separate columns. We're thinking about too much detail. We need to think about our data in more abstract terms. We need to really understand what Codd was saying when he proposed the normal forms, and also understand the mathematical reasons for using the normal forms.
Friday, November 11, 2005 11:22 AM by Brian Manchester

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

Very impressive. I look forward to seeing you final version. The missing SQL Agent was my only complaint for SQL Express.
Friday, November 11, 2005 4:51 PM by Mike Schinkel

# Open Source it? Load .NET DLLs with it?

Cool. Any chance you'll open source it?

Also, any chance your make it so it can load .NET DLLs and execute them? Maybe by implementing an "ISqlAgentTask" interface? Then you could ad helper functionality to that most tasks would need, like error logging, etc.
Sunday, November 13, 2005 10:54 PM by Jason Mauss

# re: Holy Crap: I'm an Official MVP for MS Paint

oh wow - the use of sarcasm in this post is just delightful. As James Lipton might say... "SCRUMTRULESCENT!!" haha.

I can't wait to hear which people were given the other MVP awards...but I think Paint and Command Prompt are fairly prestigious, good job man!
Monday, November 14, 2005 5:05 AM by Frans Bouma

# re: Holy Crap: I'm an Official MVP for MS Paint

hahaahah Bed head :D
Monday, November 14, 2005 5:58 AM by Mandyhan

# re: Holy Crap: I'm an Official MVP for MS Paint

This rings a bell! Photos of myself always scare the crap out of me, because my hair is always parted the wrong way. At least, that's what I think: I part my hair in the mirror, and the way I look in the mirror represents the _right_ way of parting my hair. Pity for the rest of the world they never get to see me with my hair parted the right way. :)
Monday, November 14, 2005 12:35 PM by MVP

# re: Holy Crap: I'm an Official MVP for MS Paint

Yeah I got two of them too last week.
MVP - Most valuable Padder: for helpful tips to the community on how to launch notepad and write big words in bold text....and...
MVP - Most valuable Porn-monger for how to download porn for more than 48 hours non-stop with out straining a aingle eye.
Monday, November 14, 2005 2:31 PM by Jeff

# re: Holy Crap: I'm an Official MVP for MS Paint

CONGRATULATIONS! This will look quite nice on your resume.

I am told that next year I am a shoe-in for becoming an MVP for Notepad. Wish me luck!
Monday, November 14, 2005 2:31 PM by Jeff

# re: Holy Crap: I'm an Official MVP for MS Paint

(damn! that joke was already made!)
Thursday, November 17, 2005 1:39 PM by Louis Berman

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Hi! Thanks to all for a great discussion on UDTs. If I may weigh in I have a slightly different slant on UDTs based on "utility" not "theory". I've begun to cautiously use UDTs for several data types that I consider, for lack of a better term, "fundamental". Three in particular come to mind: EMail, YesNo and SimpleStatus. I just developed a huge futures trading database that includes some 80 instances of the above-listed types. To ensure that good data gets into each of those fields UDTs are a clear winner. For starters, they're way easier to lay down than constraints. Also, I want my database to intrinsically ensure that all of the data that gets into it is consistent. I'm not talking business rules here, merely consistency. Just as importantly, I am convinced that the implementation for each is totally defined and therefore can remain static. This is at great variance with a UDT like an Address. Anyway, that's my two cents...
Thursday, November 17, 2005 2:42 PM by TomC@TJDevs

# re: Gettin' Down in Detroit: The 2005 Launch Party

I live in Scotland and we get the road shows
here too, although I have never seen Steve Balmer or such. We get to talk to the uSoft UK
people and are all very nice down-to-earth
chaps, could easily be confused with Linux hippy geeks (you know them who want it all for nought and wear penguin badges!)
We get the fair laid on too; bags of crisps
and sconnes, notepads and the inevitable CDs.
There's always an unseemly rush for these and you can soon eek out the Linux Crashers.
Is it a Beta, Beta2, RC2 or what for SQL Server etc, I always get confused with uSoft
releases and product names...am I alone in this respect!
Thursday, November 17, 2005 5:05 PM by Heh

# On fanbois

> You know who I'm talking about, right? Those basement-dwelling fanboys who go to Microsoft conferences

...

> It's one thing to experience Visual Studio 2005 through your buddy's work's MSDN subscription, but you really feel alive having your own, fully-licensed copy of the software. I'm still buzzing from that.

Too bad I missed the fanboi slapfights :)
Friday, November 18, 2005 3:25 PM by Brendan Tompkins

# re: Holy Crap: I'm an Official MVP for MS Paint

This is the funniest post I've read all year!
Monday, November 21, 2005 5:51 AM by David Reynolds

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

If you're still looking for help then i'm happy to offer a limited service.

We use the SQL Agent within MSDE for some of our solutions at present and so the release of an agent for SQL2005 would help us move forward.

Strengths are with SQL Server 2000, Visual Basic6, .net 1.1 (c#) and just moved to .net 2.

I can offer around five hours a week.

david@imaginsolutions.co.uk
Friday, December 02, 2005 1:47 PM by Sergio Pereira

# re: Holy Crap: I'm an Official MVP for MS Paint

I used to have "MVP MS-Paint and Notepad" in my email and newsgroups signatures just for fun. When I saw the title of this post, for a minute I thought the title actually existed :) LOL ! Searching google groups showed me that I'm not the only fake out there :)
Friday, December 02, 2005 2:11 PM by Derick Bailey

# re: Holy Crap: I'm an Official MVP for MS Paint

i got my MVP for Start button award just a week ago. :)
Friday, December 02, 2005 2:13 PM by micah

# re: Holy Crap: I'm an Official MVP for MS Paint

funny stuff! hey, where'd all the flare images go?
Friday, December 02, 2005 2:24 PM by TBrown

# re: Holy Crap: I'm an Official MVP for MS Paint

I want the CPB MVP! or for those not in the know the copy and paste buffer MVP.
Friday, December 02, 2005 3:35 PM by Todd Aspeotis

# Anybody actually seen what pbrush can do?

If you're actually a qualified CPU-operator, you'll find that you can get 1337 results from paint. Just check this image: http://www.thebestpageintheuniverse.net/c.cgi?u=weekly_sub3, it was made all in paint (apparently).
Friday, December 02, 2005 7:22 PM by Foxyshadis

# re: Holy Crap: I'm an Official MVP for MS Paint

That is not MS Paint, c'mon now.

My friend took most of her MS paint drawings down, but she was fantastic with it.

http://aya.jamt.se/scan/my_first_paintbrush_painting.png
Saturday, December 03, 2005 2:02 PM by Vineet Reynolds

# re: Gettin' Down in Detroit: The 2005 Launch Party

Just passing by.
LOL, since when did humour become open source , lol ?!?!
ROFLMAO.

Keep up the blogging. It was fun reading your blog after downloading SmartPaste. Now I must go back to the MSDN website to download the other tool that featured in "Ten Essential Tools :
Visual Studio Add-Ins Every Developer Should Download Now" .
Monday, December 05, 2005 4:25 AM by R3Sh33P

# re: Holy Crap: I'm an Official MVP for MS Paint

I've been using different tools for the last ten years, but these tips were just mind bogglingly brilliant.

Your award is well deserved. Keep me posted if your doing some additional postings or when the book gets published!

Best regards and salute,
Jeff
Johannesburg
South Africa
Monday, December 05, 2005 6:26 AM by R3Sh33P

# re: Holy Crap: I'm an Official MVP for MS Paint

and spelling, texts that is...
Monday, December 05, 2005 5:50 PM by Office Pleb

# re: Holy Crap: I'm an Official MVP for MS Paint

Damn, I wish I could afford a licenced copy. Is there an OpenSource resource or is Paint part of Micro$oft's 'Visual Binary' project?
Tuesday, December 06, 2005 7:43 AM by Tony Morris

# re: Holy Crap: I'm an Official MVP for MS Paint

<quote>
Keep me posted if your doing some additional postings or when the book gets published!
</quote>
<quote>
and spelling, texts that is...
</quote>
What about spelling the contraction for 'you are'? It is spelled "you're", not "your".
Tuesday, December 06, 2005 1:55 PM by mitchel Sellers

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

Also, if you are still looking for more help I can help some too.

mitchel.sellers (at) gmail.com
Wednesday, December 07, 2005 3:53 AM by R3Sh33P

# re: Holy Crap: I'm an Official MVP for MS Paint

oi I'm dutch okay stop moaning, rather sort me out with the highlight tips! :)

thanks for the help non the less Tony M, related to Bony M?
Thursday, December 08, 2005 3:26 AM by roodles

# re: Holy Crap: I'm an Official MVP for MS Paint

this dutchie is a fool... tony m is cool
Thursday, December 08, 2005 3:28 AM by roodles

# re: Holy Crap: I'm an Official MVP for MS Paint

by the way the previous post was to the tune of "Daddy Cool"
Friday, December 09, 2005 6:07 AM by painter

# re: Holy Crap: I'm an Official MVP for MS Paint

That's funny
Friday, December 09, 2005 7:21 AM by roodles

# re: Holy Crap: I'm an Official MVP for MS Paint

humour is my middle name... no seriously now guys humour my first name.
Wednesday, May 03, 2006 5:15 PM by Merrion

# re: Stop Using Enterprise Manager! (Use DDL Instead)

There are a number of additional things needed - like version numbering of all your objects (I use a parallel table that matches sysobjects but has major version, minor version, release number etc.) and release scripts that are re-runable (i.e. check that a table doesn't exist before running CREATE TABLE, and so on)
Saturday, May 13, 2006 1:37 PM by Erich

# re: Stop Using Enterprise Manager! (Use DDL Instead)

I never considered the possibility that a professional software developer would use a GUI to create a table. I know it's possible, I know the result is probably the same but it feels wrong. Writing DLL code also has the copy-paste advantage; for example, if you want fields like "created_by", "creation_date", "modified_by", "modification_date" in all tables, it's easy to do in code but repetitive work in the GUI tool.
Friday, May 19, 2006 3:02 AM by Gabe

# re: Stop Using Enterprise Manager! (Use DDL Instead)

Why not use the GUI to create your tables, then have it generate DDL for you? It wouldn't be too hard to write a script that just compares DDL for two tables and creates an ALTER TABLE statement to modify the old one to have the same schema as the new one.
Saturday, May 20, 2006 6:30 AM by Erich

# re: Stop Using Enterprise Manager! (Use DDL Instead)

Gabe: At least for Oracle, such tools already exist; e.g. the free Tora can compare database schemes.
Monday, May 22, 2006 10:26 AM by Jason Haley

# Interesting Finds: May 22, 2006 AM edition

Wednesday, May 24, 2006 9:25 AM by Will

# re: Why VB Is Better Than C# ...

A feature that blocked me and is NOT in VB :
Create a class with an event and serialize it....
you'll see....
Wednesday, May 31, 2006 1:52 AM by Evolve Develop Blog

#

Thursday, June 01, 2006 12:41 PM by Laurent

# re: PHP vs. ASP.NET

The fact that you have to pay is biaised to, because there is an open source equivalent to Visual Studio. I did a whole .NET application and it didn't cost us a penny. I also used the free MSDE solution for developpers. After that...it was just a matter of putting up to the corporate server ont he real database and IIS server.

ASP.NET is really not that expensive.
Thursday, June 01, 2006 12:45 PM by Laurent

# re: PHP vs. ASP.NET

There is also an open source equivalent to Visual Studio so developping ASP.NET applications is even cheaper than he says.

Alos, he does not talk about how much easier in ASP.NET it is to manage code because of the true OO model. He doesn't talk about all the thinmgs ASP.NET can do that PHP can't like custom HTTP event handlers for files etc.
Friday, June 02, 2006 5:54 AM by Tom Pester

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

I copied the dll to the addins folder (which I first had to create) but it doesnt register itself in VS2005.

Any chance of releasing an official version with installer?
Friday, June 02, 2006 8:30 AM by Baxter Basix

# re: MySQL 5.0: Still A "Toy" RDBMS

Superb post, Alex!

I wasn't aware that MySQL didn't enforce CHECK constraints. Doesn't it support UNIQUE constraints either? Regardless, this absent feature makes the MySQL DBMS an absolutely laughable joke for any non-trivial application. I'll avoid it like the plague and use PostgreSQL or Firebird for open source solutions.

IMHO the only reason MySQL maintains its popularity is due to its ubiquity on the Linux platform. Virtually all the big distros feature it. Makes no sense to me!

As a side point, I wonder if the fabled speed of MySQL suffers when using the InnoDB table driver and has to enforce referential integrity etc. I'll bet it does...
Saturday, June 03, 2006 1:51 PM by MicBoucinha

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

Hi there,
for those who can't get the VS2005 update working, just do these extra step besides the one mentioned in the install directions.
Well, al least for me, it worked.
In the source files, there is a file named SmartPaster2005.AddIn. Copy this file too to the Addins directory and you are ready to go :)

# Now &amp;quot;Paste As..&amp;quot; in VS.NET with Smart Paster Add-In

I don't know about you guys (and gals), but I often find myself pasting large string literals (SQL queries...
Monday, June 05, 2006 4:59 PM by Mike Rod

# re: Holy Crap: I'm an Official MVP for MS Paint

I'm a Minesweeper Consultant, Solitaire Expert (MCSE) Certified by Microsoft

Wonder if there is MVP awards for the same categories...

Mike

PS: Congrats, Alex!
Tuesday, June 13, 2006 11:01 AM by andi mcburnie

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I have been writing code now for over 20 years and I have to agree with you Alex.

However, the thing that gets me the most, is people who interrupt what you are doing to ask for your opinion, you take the time to give it to them, nicely, and professionally, only to find that they have ignored you, and knock on your door later to resolve the issues they caused by ignoring you in the first place.

I am afraid, like the other reader, I am too long in the tooth now to be tolerant with these tire kickers. S’pose I am just a grumpy old trelbeldo!
Thursday, June 15, 2006 12:40 PM by Ringo

# re: Comicality Inflation

Having just posted ROFLMAO I'm now truly ROFLMAO ... some of you guys are too funny ...!
Saturday, June 17, 2006 4:56 PM by Ed

# re: PHP vs. ASP.NET

Visual Studio Express is a free download until next fall, and the license has no restrictions.  VSE is not a bare-bones trial version of VS, it is quite powerful.  If the main argument in favor of PHP was "cost = $0", then that argument is nullified, eh?
Tuesday, June 20, 2006 9:21 AM by Arni, Reykjavik

# re: Computer Programmer Inflation

Peter Naur coined the term datalogy which is heavily used in Scandinavia -- e.g., the Danish word for computer science is datalogi. Thus computer scientists/(software) developers/programmers/whatever could also title themselves as datalogists.
Thursday, June 22, 2006 12:54 PM by Luke Breuer

# re: Stop Using Enterprise Manager! (Use DDL Instead)

What would be best is to have an option to print out all SQL/DDL run against the server, perhaps with options to filter.  This way, instead of always referencing the documentation, one could simply do the action once and glean the relevant information from the generated output.  I know that Enterprise Manager allows some of this, but it could to much better, make it much easier to see what's going on, etc.

Note that ALTER TABLE doesn't work so hot when you want to add a field in the middle of others and there are a plethora of constraints on the table.  Life isn't as simple as one might think.
Thursday, June 22, 2006 2:02 PM by Alex Papadimoulis

# re: Stop Using Enterprise Manager! (Use DDL Instead)

"Note that ALTER TABLE doesn't work so hot when you want to add a field in the middle of others and there are a plethora of constraints on the table."

There is no reason that this should be done, ever. Column are *always* assumed to be unordered -- the SELECT statement is what brings them out in a desired order.


"Life isn't as simple as one might think."

Life is as complex as you make it. I can see why you believe it's so tough when you try to do things like this ...
Tuesday, June 27, 2006 7:28 PM by Michael Kennedy

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

Very nice, thanks a bunch!
Wednesday, July 05, 2006 1:55 AM by Koen

# re: Stop Using Enterprise Manager! (Use DDL Instead)

Erich, for SQL server the same tool exists: it's called AdeptSql, there's a free trial available for download.

# ChrisBellini.com &raquo; Blog Archive &raquo; i would&#8217;ve been a great ninja

Friday, July 14, 2006 5:32 PM by Mike Gates

# re: What Exactly Is An Exceptional Circumstance, Anyway?

I know I'm jumping in here a bit late but I thought I might add my opinion for the record :)

An exception should be thrown from any abstraction layer when the requested behavior of that abstraction layer could not be completed. For example, Calling FileSystem.OpenFile should throw a FileCouldNotBeFoundException if the requested file could not be found. In any given app, it could be a regular occurance (not exceptional) that a requested file is not found. For example, go to the File->Open in notepad and enter in a non-existing filename. Deep in the code for notepad, there could be a call to FileSystem.OpenFile, which in this case would throw a FileCouldNotBeFoundException. This would be caught in the appropriate abstraction layer (could be the GUI layer), where the error box gets sent to the user. It is also possible that there is some call to FileSystem.DoesFileExist(...). This should not throw an exception if the file could not be found because the DoesFileExist logic could be completed fine, and returns its value of false, no need for an exception.

So, my point is, you can't decide whether or not to throw an exception based on whether the situation is "exceptional" in the application. You should throw an exception if the requested logic could not be performed for any reason. At least, this is my guideline.

Sunday, July 16, 2006 1:27 AM by yoda

# re: Pounding A Nail: Old Shoe or Glass Bottle?

Great story!  Just remember: when pounding a nail with a glass bottle, wear eye protection!

Tuesday, July 18, 2006 8:43 AM by arjoy

# re: Computer Programmer Inflation

wd

# Christophe Lauer, Blog Edition : Une approche plut&#244;t na&#239;ve des plates-formes 64 Bits...

Wednesday, July 19, 2006 7:03 PM by Masoud Shokri

# re: PHP vs. ASP.NET

Really funny! The guy shows a table but doesn't show where is the table coming from! Look at most of PHP websites, most of them crash very easily, Even the Zend website, It crashes so often and you see the php error page, but if you have used ASP.NET 2.0 you know that it got a wonderfull speed! Trust me. And something more, in a shared hosting system, can you manipulate php source codes and use your own php? Do not make me laugh! And is Oracle free? How much is a WINDOWS hosting more expensive than LINUX? Not that much for a shared hosting! And something more, why so many people are defending php and not so many people defent asp.net? I guess because most of asp.net users are enterprise developers and do not have enough time, trust me dudes!

Friday, July 21, 2006 11:33 AM by John Webb

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

I just stumbled upon this "non-blog" while searching for an SQL Agent tool for 2005 Express.  Since most of the responses are rather old I was wondering what kind of progress you've made and if your Express Agent was available for use yet?

Friday, July 21, 2006 6:58 PM by sqlfan

# re: "What's the Point of [SQL Server] User-Defined Types?"

Thanks for posting this; it's clear, concise example of UDTs that makes a great response to why people should use them.

Tuesday, July 25, 2006 9:12 AM by Zicolino

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

Hi! I'm very interested too.

A free program with that features would be very nice for all. Please update info.

Thank you

Saturday, July 29, 2006 11:08 PM by J.Sakamoto

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

This is greate product.

I extend your product "Smart Paster 2005",to add [Paste As]-[XML Document Comment] function.

This function does:

* HTML encode

* Insert "///"(if VB, "'''")

source:

http://www.stbbs.net/~junichi/archive/smart-paster-2005-xmldoccomment-enhanced/SmartPaster2005-XMLDocComment-enhanced-src.zip

binary(installer):

http://www.stbbs.net/~junichi/archive/smart-paster-2005-xmldoccomment-enhanced/SmartPaster2005-XMLDocComment-enhanced.vsi

Monday, July 31, 2006 4:42 PM by Min Thaung

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

my company actually uses express for some of our smaller clients and this app would be an extraordinary help for our services... right now we are emulating an agent using sqlcmd and batch files but this would be stupendous. id like some info and possibly help out

Tuesday, August 08, 2006 11:19 AM by Steve Zhang

# re: "What's the Point of [SQL Server] User-Defined Types?"

But how can change it, say from char(1) to char(2)?

since you cannot drop it if it's already referenced.

The point of user-defined type is to keep inconsistency, now it canot be changed since it's defined.

Thanks for your help.

Monday, August 14, 2006 1:48 AM by BM

# re: Holy Crap: I'm an Official MVP for MS Paint

*pixellation

(apologies)

Thursday, August 17, 2006 10:37 AM by Bill

# re: PHP vs. ASP.NET

I found this interesting, But I am still confused as a beginner, which technology should I learn?

thanks

Friday, August 25, 2006 7:20 PM by Russ

# re: Stop Using Enterprise Manager! (Use DDL Instead)

There are also tools for managing schema and data changes for sql server. While they're not free, they can offer a lot of help when managing these kinds of changes. Check out the tools www.red-gate.com (they have a free trial). While you're at it grab their free SQL Prompt. Other companies make similar tools as well.
Sunday, August 27, 2006 2:40 PM by Jeorge Lukasing

# re: Comicality Inflation

Very many thanks for a good work. Nice and useful. Like it!

Saturday, September 02, 2006 6:35 AM by dna2

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

Sunday, September 03, 2006 11:05 PM by Matt

# Falling behind?

Oh, sure, as long as the back end is stable and robust, who gives a damn whether anyone except the programmer can actually use it? The interface should always be based on the fundamental and immovable assumptions of whatever genius built the database schema.

An interface anyone can use without at least one computer science degree is not only a sure sign that not enough 'design' went into the architecture, it's also downright dangerous! Hell, if anyone can use your corporate accounts software, anyone can screw up your corporate accounts.

Monday, September 04, 2006 8:24 PM by Kristoffer Ryden

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

This is a must-have for me with SQL Server Express. I'm glad someone is tackling this. Is the release version ready yet?

TIA, Kris.

Wednesday, September 06, 2006 10:57 AM by Chris Parsons

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

@Alex,

I noticed that SQL Express has all the same tables and stored procedures for managing jobs, just nothing to actually run them.

For example I have a script that I wrote to create a couple of jobs via sp_add_job, sp_add_jobstep, sp_add_jobschedule etc. and maintenance plans via sp_add_maintenance_plan.  Everything gets put into the appropriate SQL tables (sysjob*) in msdb as per normal just there isn't an agent to actually start execution.  Is that where you will be storing the job details?  

I could care less about pretty GUI's, I'm happy to write it all out in script.  If you are close to a version 0.1 that runs, with limited features or GUI I think you should release it.

If you are still in need of assistance to help get it out the door let me know.  I'm competent in C++ and SQL internals.

-Chris

Saturday, September 09, 2006 11:38 PM by Craig

# re: Stop Using Enterprise Manager! (Use DDL Instead)

Alex,

You know I am SO onboard with you on most topics, but on this you've really lost me.  Do you never use the designer in VS.NET, or use a code generator such as Codesmith or MyGeneration to auto-generate repetiive plumbing?  

I have been developing for 7 years.  I almost always use Enterprise Manager for initial development.  Its just much faster.  If i'm making changes to an existing database, I'll use EM to script it out for me.  Also, others mentioned tools like RedGate and AdeptSql to merge changes automatically.  This saves a lot on development time.  Its not that i can't write my own DDL, its just that it saves time not to.

Only when I'm doing some REALLY complicated schema migration do I script this all out by hand.  

Craig

Wednesday, September 13, 2006 2:12 PM by John Cowan

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

I entirely agree that only scalar values should be allowed in database columns.  The trouble is that one person's "atom" is another's "bucket o' quarks with electrons in shells around it".

After all, if you look at them the right way, strings aren't really scalars -- they are arrays of characters.  Even integers can be seen as arrays of digits.  But obviously 1NF doesn't require decomposing these.

1) By UCS-2 you hopefully mean UTF-16, as UCS-2 is not capable of representing all Unicode values.  Unfortunately, UTF-8 and UTF-16 don't sort the same way on a simple binary sort order.  UTF-8 sorts according to the order of Unicode codepoints, but UTF-16 does not.

2) If talking about the past, it's fine to capture moments in time using a single time zone such as UTC and push off converting to local time to the interface layer.  For future moments, that won't work: you need a local time and a place.  Nobody knows what UTC instant corresponds to "midnight November 1, 2010 in New York", because Congress could change the time-zone rules or (more likely) the daylight-savings rules.  It's happened before.

3) I correct you: you are wrong about complex numbers.  You need 'em for anything concerned with electrical engineering, a perfectly fit subject for relational databases.  And to their users, complex numbers are no more non-atomic than decimal fractions are.

Wednesday, September 13, 2006 2:59 PM by Jonathan Allen

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

1. You cannot sort any string using binary, and especially not unicode strings.

2. I agree, that is a hard problem.

3. I have to agree with you here.

Wednesday, September 13, 2006 9:20 PM by DaBookshah

# imaginary numbers

Dude, if you think the only use of imaginary numbers is in solving differential equations, I think it is time to go back to uni and study some more maths.

Thursday, September 14, 2006 8:04 AM by csrster

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

Quite correct, dabookshah, if not  very polite. I could well imagine wanting to store a bunch of complex Fourier components in a database. Logic would then suggest storing the amplitude and phase in two separate columns.

Thursday, September 14, 2006 7:11 PM by J

# re: Comicality Inflation

I've usually heard LOL refer to "Lots of Laughs", so even though LOLOLOLOL is RDS (Really Damn Stupid) it could still make sense as Lots Of Lots Of Lots of ... Laughs

Thursday, September 21, 2006 8:52 AM by John

# re: Express Agent for SQL Server Express: Jobs, Jobs, Jobs, and Mail

Free Agent for SQL Server:

http://www.lazycoding.com/products.aspx

Monday, September 25, 2006 7:51 AM by nand

# re: Comicality Inflation

When I started using modems, BBS's, chats, Internet and IRC in 1994 and 1995, I was explained it was embarrassing to laugh out loud alone, so LOL was a warning to the typer that he has gone too far, because now the reader is laughing out loud, possibly embarrassing him/herself to family members or neighbors. I was explained LOL is Laughing Out Loud (too loud, alone, sitting on a computer).

Monday, September 25, 2006 7:53 PM by My son plays Toontown

# re: Coghead: Web Applications for Dummies by Dummies

We need to follow Disney's lead (http://play.toontown.com/playersguide/PGPage.php?pg=37) and defeat the evil cogs with lots of cream pie and even more gags.

Monday, September 25, 2006 8:34 PM by Paul McNamara

# re: Coghead: Web Applications for Dummies by Dummies

Alex, I agree that programmers are required for a large portion of the custom apps that exist today in the enterprise.  What we're targeting is a class of applications that have been resistant to the custom development process.  These tend to be apps that can't tolerate the time and expense of custom app development.  They are a myriad of less-complex applications and business processes that today are generally unautomated or at best handled by speadsheets or Filemaker or Access.  

Our focus is business applications.  The term 'Enterprise' means different things to different people. To some, it means large-scale complex applications.  To others it simply describes the size of the business.  We say that we are targeting small and medium size businesses and enterprise workgroups.  I think the press sometime translates the term 'workgroups apps for enterprises' to 'enterprise apps'.    

Tuesday, September 26, 2006 5:26 PM by Don

# re: Stop Using Enterprise Manager! (Use DDL Instead)

Enterprise _MANAGER_

For managing.

Not for development.

Friday, September 29, 2006 12:23 AM by VectorVision

# re: Coghead: Web Applications for Dummies by Dummies

We've seen this kind of stuff come and go dozens of times. The only thing Coghead will ever succeed in doing is creating a niche market for programmers who have knowledge of Coghead.

Smart business people don't WANT to mess around with this stuff - that's the whole point. Someone will sell a detached executive on all the pretty flashing lights of this application and in the end the customer will STILL go out and pay the technology people to use the pretty new tool they just bought. Or worse yet, they'll pay the technology people to dig them out of the immense hole they dig for themselves trying to do something that is completely out of their element.

The customer will inevitably have it so hacked up and stretched beyond its operating limits that it would've been cheaper, easier, and more effective to just have a professional create precisely what the customer needed in the first place and move on with their business affairs.

It is indeed sad that our industry still has so many ignorant and/or arrogant people in it continually giving the industry a bad reputation to overcome. Programmers and even IT professionals in general just need to do their jobs and quit thinking they're so brilliant that they're going to single-handedly change the world with their eccentric ideas.

Friday, September 29, 2006 1:39 AM by Simple Simon

# I'd bet on Greg Olsen over Alex Papadimpoulis anyday

Alex's two second tutorial about 4GL, while lame and useless is a sharp contrast to what I read in Queue magazine (you can find it on slashdot as well) a few months ago authored (I think) by the same Greg Olsen you mentioned above.

Based on what I read, and what I see above, I'm guessing Greg knows, ummm, 20x more about this subject that Alex.  

Another example of the "media" trying to take on a subject too complex for their own good perhaps?

Anyways - I checked the website and it does not look like Coghead is even available yet, so unless Alex has early access, how do you even have a basis for all of this?  Did Business 2.0 decide to exclude you from the same article or something?

Tuesday, October 03, 2006 4:19 PM by estroJen

# re: Smart Paster 1.1 Add-In

oh yeah, this tool is awesome. in vs 2005, works like a champ!  SWEET!

-

jen

Wednesday, October 04, 2006 1:37 PM by Scott

# re: Coghead: Web Applications for Dummies by Dummies

Have you checked out DabbleDB yet? I was pretty impressed at how they made a lot of the functionality of an RDBMS accessible to everyday schmoes and office workers. You still have the same problem of putting your data in a third parties hands, but the UI concepts they put forth in their application seem pretty solid.

I would be less afraid of a secretary/admin assistant designed DabbleDB than I would a secretary/AA designed Access database.

Friday, October 06, 2006 10:18 AM by Reed

# re: Coghead: Web Applications for Dummies by Dummies

Graphical programming tools only really work for very specialized applications. The best example I can think of are 3D animation applications: your data is really well defined, everything is based on movement over a timeline, etc, the application is already visual.

The screenshot makes it look like a general programming language turned graphical, i.e., a programmer's flowchart. (if/then/etc.) These are unfortunately not that useful to untrained users, and limiting to programmers.   Even really well-done graphical programming systems take expertise, but I'm skeptical that many companies will really understand that and take the time to train employees on the tool.

Tuesday, October 10, 2006 6:44 AM by Laugher

# re: Comicality Inflation

ROTFLOLSHIFTMSHS

Seriously though, they annoy me too as they are used to liberally to mean anythingf, and many of tmhe too extreme to apply usefully.

Tuesday, October 10, 2006 1:52 PM by mep

# re: "When Should I Use SQL-Server CLR User Definied Types (UDT)?"

SQL Server CLR User Defined Types is Microsoft's attempt at supporting the new Object Relational Extensions of SQL3.  However, I personally don't like the way M$ decided to implement this.  Oracle has a much easier way of defining user defined types:

create type mytype as (

 somenumber number,

 somechar varchar2(50),

);

I don't have an opinion as to whether creating/using UDT's is a good idea tho...

Tuesday, October 10, 2006 4:41 PM by Gary Woodfine

# re: Using Modules in VB.NET

I'm so glad across your blog post, I was in forum the other day, discussing the whole VB6 -> VB.NET, and this other bloke wasn't making much sense, and one thing he said was Modules are a Violation of OOP, which is a concept I really have had trouble coming to terms with, as in every other OOP book I have read they mention Modules.

The full forum thread can be found here

http://www.codeguru.com/forum/showthread.php?t=402024

Sunday, October 15, 2006 5:20 AM by Knollepetz

# re: Holy Crap: I'm an Official MVP for MS Paint

R.E.S.P.E.C.T....

A friend of mine has an "Bed Head" and during my laughter he told me, that his barber calls it "pillow cut"!!!!!

Sunday, October 15, 2006 6:02 AM by YesMan

# re: Holy Crap: I'm an Official MVP for MS Paint

thanks for your extraordinary hints... i am on my way to antialias some elder paintings of mine... looks fantastic so far...

Paint forever, powerapps for powerusers!

Sunday, October 22, 2006 4:23 PM by Larry Velez

# re: Coghead: Web Applications for Dummies by Dummies

I think the reaction of this post is a similar one I hear from Linux fans.  When someone views the world through a perspective where their focus and time are mostly consumed by running the environment they are a fan of (Linux, Rails, PHP, etc) - then they can't imagine a world where someone might want to use technology to achieve a goal that is only part of their day and need to leave time for their other duties such as running a business or being a doctor or writing a book.

Developers and hobbyist will always look at solutions such as Coghead and DabbleDB or Microsoft Office for that matter from a viewpoint that they are "expensive", "Untrustworthy" and "not under my control".  But people who spend most of their day a few layers removed from coding or hardware tinkering are willing to sacrifice some money and some control to a trusted third party to recapture some of their time or better yet move initiatives forward much faster and in parallel with other initiatives.

Not everyone values their time at $0 and not everyone has lots of it to spare or a highly technical social group .  For those people CogHead and DabbleDB are useful tools to let them play with different what-if scenarios quickly and at a low cost. It also lifts the burden of "simple" apps off of a developer and let's them concentrate on the really hard problems like generating pixel perfect PDF reports from these solutions or LDAP based integration of various solutions.  

I think solutions like Coghead and DabbleDB will make interaction between non-programmers and programmers even better,  giving each side a better respect for the intelligence and skills of the other.   A user of these solutions will think twice before asking for help from a developer before thinking through their requirements because they would have experienced first hand the double and triple work that occurs when you don't think and plan things through in advance.  They would have learned this from their time using Coghead or DabbleDB.

Monday, October 23, 2006 1:01 AM by Vikram

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

This thing looks awsom help to me

Monday, October 23, 2006 8:10 AM by ram

# re: PHP vs. ASP.NET

Its impossible to say wich language is better, its like about the most beutiful woman, the most beautiful is one near you :)

Monday, October 23, 2006 1:59 PM by Mark Lutton

# re: Coghead: Web Applications for Dummies by Dummies

An anecdote comes to mind, from around 1980.

A friend went to a trade show where a salesman was showing off his new "natural language" database.  "Just ask a question in English!  This sample geographical database has all the rivers and mountains in the world."

My friend typed:  "What are the tallest mountains in Africa and Europe?"

The computer replied:  "There are no mountains in Africa and Europe."

Which was correct, technically, but not useful.

Wednesday, October 25, 2006 11:30 AM by Göran Andersson

# re: Pounding A Nail: Old Shoe or Glass Bottle?

I think that the alalogy is a bit bleak. ;)

Often it's more in the line of:

"I am trying to hang a painting and thought that I would use a hair pin, as I have a lot of those. I tried to use a hammer to get it in, but that doesn't work at all. Now I have put the hair pin in a power drill, but the problem is that I have to use so much force to get the pin into the wall, and the hole is getting far bigger than the pin so it doesn't sit very well. What can I do so that I don't have to use so much force, and how can I make the hole smaller, so that the hair pin will fit?"

Of course the first replies comes with suggestions to try to sharpen the hair pin, and to use a different kind of power drill...

;)

Thursday, November 02, 2006 9:31 AM by John Wall

# re: Holy Crap: I'm an Official MVP for MS Paint

Holy Crap... that's funny!

Thursday, November 02, 2006 12:25 PM by Buford

# re: Coghead: Web Applications for Dummies by Dummies

[The computer replied:  "There are no mountains in Africa and Europe."]

Given that there are, in fact, mountains in Europe (the Alps?) illustrates exactly why these efforts have continually failed over 20 or more years of trying.

An anecdote of my own comes to mind. There is no problem with any weekend handyman trying to rebuild his automatic transmission if he really wants to try, but he better be prepared to accept the wasted time and inevitable expense when he finally realizes that he really does need a trained professional to complete the job accurately and correctly.

There is a reason the open market drives everything towards specialization. Business people conduct business. Programmers write programs. This is the most efficient use of both time and money. Trying to reverse the tide of the open market is just begging for failure.

Monday, November 06, 2006 2:52 AM by dazza

# re: Smart Paster 1.1 Add-In - StringBuilder and Better C# Handling

Hi,

Just resolved an issue I had so I thought to post this to hopefully help others if need be;

I have my 'My Documents' target set to 'c:\me' and as such the installer installed the Addin to 'c:\me\Visual Studio 2005\Addins'.  However, in order to get the addin to work I had to manually move it to 'c:\Documents And Settings\<user>\My Documents\Visual Studio 2005\Addins'.

Not sure if this is an installer problem, a Visual Studio problem, or a configuration problem.  Works now though and is so time saving!!  Good work and thank you.

Wednesday, November 08, 2006 5:59 AM by Boole's geography

# re: Coghead: Web Applications for Dummies by Dummies

@Buford: There are mountains in both Africa and Europe. The problem was the program did the intersection of the set of mountains in Europe with the set of mountains in Africa, which of course gives the empty set,

because "There are no mountains in Africa and Europe".

Friday, November 10, 2006 7:35 PM by doomonu

# re: Holy Crap: I'm an Official MVP for MS Paint

I'm glad that I've gotten the MVP for multiplayer notepad five years running. Great stuff.

Friday, November 10, 2006 7:53 PM by anonymous

# re: Holy Crap: I'm an Official MVP for MS Paint

Pixilation? This is related to pixies? Perhaps you mean pixelation, which relates to pixels.

Friday, November 10, 2006 8:09 PM by Rod Trent at myITforum.com

# Microsoft gives MVPs for -- MS Paint?

Apparently so&hellip; Holy Crap: I'm an Official MVP for MS Paint

# Kyle &raquo; Blog Archive &raquo; Holy Crap: I&#8217;m an Official MVP for MS Paint

Friday, November 10, 2006 9:21 PM by anonymous

# re: Holy Crap: I'm an Official MVP for MS Paint

Get rid of Brewster

Friday, November 10, 2006 10:34 PM by Brandon A.

# re: Gettin' Down in Detroit: The 2005 Launch Party

Rockstar is amazing. I could drink it all day. But I'd rather not die of heart attack and too many stimulants at once.

One or two every now and then is fine.

I love the taste.

If the "NERDS" candy was liquid and carbonated, it would be this drink.

# Holy Crap: I&#8217;m an Official MVP for MS Paint &laquo; Digged Stories

Friday, November 10, 2006 11:58 PM by sasa

# shss.. noob

ur noob dude.. u dont know how to use teh paint. its not a tool its a weapon for your mind.. you should use the paint with your soul... ur noob dude.. ur a noob! mvp ah.. u suck!

Saturday, November 11, 2006 4:38 AM by brainwashed

# re: Holy Crap: I'm an Official MVP for MS Paint

You are a true artist!

Saturday, November 11, 2006 11:37 AM by Christopher Clark's AvaBlog

# Alex Papadimoulis' : MVP for MS Paint

I struggle with the words to describe how elated I am to be chosen for this award. Sure, I’ve worked...

Saturday, November 11, 2006 5:08 PM by Keith

# re: Holy Crap: I'm an Official MVP for MS Paint

Are you kidding? You sure do know how to make full use of MS Paint. I can't live with that. At least, if I have to, will get something like <a href="http://www.neohide.com">GIMP</a>, as substitute.

Saturday, November 11, 2006 5:46 PM by Mgkwho

# re: Holy Crap: I'm an Official MVP for MS Paint

Is this a joke?

And Keith, I think you meant www.neohide.com

-=|Mgkwho

Sunday, November 12, 2006 6:01 AM by Kerry Kobashi

# re: Holy Crap: I'm an Official MVP for MS Paint

Bahahaha! I guess that's better than MVP for Microsoft Bob!

Tuesday, November 14, 2006 3:14 AM by Chris

# re: DNA, XP, SOA, ESB, ETC Are Dead; FAD is the Future

https://gettingreal.37signals.com/

I think 37 Signals is in agreement.

Sunday, November 19, 2006 6:09 PM by ammoQ

# No Programmers Required. Again.

I think it's a fair assumption that people who are unable to express their requirements in a complete and consistent fashion when using their native language will not be able to create complete and consistent programs with any tool in the world. There is much more to software development than just knowing the programming language.

On the other hand, I have little doubt that tools that make developement easy (for a limited range of applications) can easily succeed in the market when contrasted to the multi-tier, multi-framework overkill that some people create even for the most simple tasks.

Tuesday, November 21, 2006 10:39 PM by Craig Beere

# Atomic attributes

>A geospatial location is described with Latitude and Longitude. Not Lati-longi-tude. These are two separate attributes and putting them in the same column violates First Normal Form

I think you are completely wrong. They are atomic in that both are required in the attribute. A latitude on its own is meaningless wrt a point on the globe, just as an hour number is meaningless wrt a point in time.

There are many attributes that contain what look like multiple values but are atomic values. For example, the quads in an IP address. For example an IP address without a subnet mask. For example the digits in a phone number.

Arguing that these should be split into component properties is like arguing that date time information should be stored like this:

DOBYear int,

DOBMonth int,

DOBDay int,

DOB Hour int,

DOBMinute int,

A user-defined type, for example DateTime, is the best way to store this data.

Friday, November 24, 2006 11:03 AM by Alexander Temerev

# Smells like XP

It is just in match with XP's popular motto 'get it work, get it right, get it fast'. And it's OK.

Wednesday, November 29, 2006 6:47 PM by uberbob

# re: Your Daily Cup of WTF - Batman()

Yeah I know what you mean.

I still have some code in production written on a bad day where the variables are named "idiot", "stupid" etc.  It's like coded code, only uberbob knows what's going on there!  Good luck to anyone else.

fnarr!

Friday, December 01, 2006 10:26 PM by Jeff Nolan

# re: Coghead: Web Applications for Dummies by Dummies

"Programmers and even IT professionals in general just need to do their jobs and quit thinking they're so brilliant that they're going to single-handedly change the world with their eccentric ideas."

Yeah, that kind of attitude has never resulted in anything good or useful.

Monday, December 04, 2006 1:23 PM by ET

# re: MySQL 5.0: Still A "Toy" RDBMS

I love thedailywtf, but you're quite outspoken on some things I disagree very strongly with.

I won't say mySQL is better than Oracle or SQL Server... but I will say that depending on your database to enforce data integrity (and clearly misinterpreting and generalizing a quote in which you added embarassingly telling emphasis) is NOT a good idea.

I've been involved in two relevant large projects that have employed both mySQL and Oracle to hold hundreds of gigabytes of data.  I can say that your problem with database-level data integrity protection is only really valid when your programmers are distanced from the nature of the data, the database itself, or both.

At the mySQL/postgre shop, we managed our own DB.  The programmers knew the business rules, and we made sure our code obeyed them.  We did not have to worry about making sure our queries weren't spat back with data integrity errors; that's another level of error to deal with, when solid coding and knowledge of what you're doing can and should save you that trouble.

At the Oracle shop, there was a layer between the coder and the DBMS -- DBA's.  While I'm not against having them, DBA's can act as an excuse for programmers not to be as familiar as they should with the nature and type of the data they're working with.  Is that a failure of the DBMS?  No.  Is that a good argument for database-level integrity checks?  No.  That's a good argument for programmers to know what they're doing before they do it.

Are database-side integrity checks a bad idea?  No, I can see the utility there.  Are they necessary?  Absolutely not, unless you plan on writing bad code or maintaining good code poorly.  And they still don't solve that problem, because the schema will probably need to be changed and updated as well; at that point you run into -exactly- the same problem, except now you're potentially dealing with people who have no idea where or how the da