| Yup, its me again. This
rant has a bunch of little tidbits all accumulated since my last "UnArticle",
so rather than try to categorize them, I'll just rant on and y'all can
try to sort out the goodness yourself.
Cool Stuff I've Found Recently
Windows XP SP2, engineering marvel that it is, already
has some exploits and hotfixes; among them are the fix for the loopback
dealie that SP2
cripples
certain types of software.
GhostDoc is the Add-In contest winner - its a neat VS.NET
add-in that
reflects on your methods and helps by filling in the C# XML Documentation
comment block for you.
FirstFloor software has their FirstFloor.Msn
API for MSN Messenger that
uses the MSNP 9 protocol and supports file transfer, email and all that
other cool IM stuff. The free developer download includes a full-featured
demo app that will give you all the code you need to start doing Messenger
stuff programmatically. It has a 30 minute maximum connection time
limit, which is really no big deal.
Microsoft picked up Lookout Software recently
and now makes available the Lookout
Outlook Add-in . Now this is very cool, in Dr. Dotnetsky's humble opinion.
I can have this index not only all my Outlook folders, but even any folders anywhere
on my machine and search for stuff and it brings up the links right in MS Outlook.
And, brother - this thang is FAST! If you're anything like Old Dr. Dotnetsky,
who is beginning to have more and more Senior Moments and often can't even remember
where he left something he was working on ten minutes ago, you gonna like this
puppy!
ClearType Tune-Up, Anyone?
Microsoft developed ClearType technology specifically for LCD screens. Here's a page that lets you actually "Tune" your ClearType settings online, along with other very interesting stuff about how ClearType works.
Cool Email SpamBot Link Code
There are plenty of neat encryption
/ encoding schemes to show an email link in a page but prevent it from
being harvestable by spam bots, but here is one that is elegantly simple:
<script language=javascript>
<!--
function makeEmailLink(username, domain, linktext)
{
document.write("<a href=" + "mail" + "to:" +
username + "@" + domain + ">" + linktext + "</a>");
}
//-->
</script>
Hey, if I have to tell you how to use the above, please go back and
study for your first MCSE exam or something!
Myths about .Net and C# best-practices Department
This stuff is selected from a series of blog posts
and comments thereon published by somebody possessing an above-room
temperature IQ (actually I'm noticing that selective blog-reading can
help make you regular; I've even downloaded a copy of RSSBandit and
i like it). The ones I've selected are interesting:
Myth:
Always set your objects
to null (or Nothing) when you're done with them.
Rationale:
The garbage collector won't be able to free an object if any another
object is referencing it.
Truth:
The garbage collector can free any object that is unreachable from any
of the various heap roots. If object A references object B, and object
A is unreachable, object B can be released if it has no other references
from reachable objects.
However- it appears to matter although in very few cases
--
(see here:
http://weblogs.asp.net/pwilson/archive/2004/02/20/77422.aspx )
Myth:
StringBuilder.Append() is always faster than String.Concat().
Rationale:
String operations always create new string objects, whereas StringBuilder
uses internal magic to avoid expensive allocations.
Truth:
Using a StringBuilder is sometimes (even usually) faster than using
simple string concatenation, but there is a performance cutover point.
Various people have found this to be around the 5 - 10 concatenations
mark. The bottom line being that replacing this:
string fullName = firstName + " " + lastName;
with this:
StringBuilder builder = new StringBuilder();
builder.Append(firstName);
builder.Append(" ");
builder.Append(lastName);
string fullName = builder.ToString();
is rather pointless. Remember that StringBuilder is itself
reference type, and has the associated allocation / deallocation costs.
Myth:
Strings are passed to, and returned from, methods by-value.
Rationale:
Strings are immutable, therefore they must have value type semantics,
therefore must be copied by value.
Truth:
Strings have certain value-type semantics (namely, immutability), but
are otherwise heap-based reference types, and references to them can
indeed be passed or copied. Passing a string reference to or from a method
does not copy the underlying string.
Myth:
Dispose() releases an object's memory.
Rationale:
Well, it's called 'Dispose' isn't it?
Truth:
Dispose() is merely a convenient place for a class' developer to place
any resource clean-up code, in the hope that clients will call it. Dispose
does not free the managed memory allocated for an object. The only thing
that can do that is the garbage collector; there is no way to deterministically
(or manually) release memory.
Dispose() does have another benefit. If you implement IDisposable, you
can write something like:
using (Blah b = new Blah()) {
b...
}
At the end of that block, compiler will put the code to call Dispose
automatically. Useful when you acquire expensive resources.
Myth:
Keeping ADO.Net connection objects open for the duration of a [Page/Control/1000-line
method]'s lifetime is more efficient than repeatedly opening and closing
it around each operation.
Rationale:
Connecting to a database is expensive, so try to avoid doing it too
much.
Truth:
If your managed provider allows connection pooling, and if pooling is
enabled (it is, by default, for the managed SQL Server
provider at least), calling Close() on the connection object does not
simply close the underlying connection.
It merely releases that connection back to the pool where it can be associated
with another managed connection object at some time
in the future. This is a Good Thing, especially in multi-threaded environments
such as ASP.Net,
because physical connections are rare resources and should not be coveted.
(By the same token, calling Open() on a managed connection when a pooled
physical connection is available will simply
associate the former with the latter).
By keeping a managed connection in an open state, you are preventing
objects in other threads from getting hold of them,
leading to potential bottlenecks.
Myth:
Int32 and int are not the same thing (float/Short, long/Int64, string/String,
etc.).
Rationale:
They're spelled differently.
Truth:
The C# simple type keywords are interchangeable with the equivalent
BCL types; they are aliases.
Political BS Department
I'm Dr. Dexter Dotnetsky, and I approve this
message.
I've already made up my mind. They say that you "become
a conservative once you have something to conserve". We are in
a war against maniacs who have no regard for Healthcare, jobs, or Social
Security. Their goal is to kill Americans and anybody
who supports America, inflicting as much damage as possible. You can
talk all you want about a kinder, gentler war on terrorism. Go ahead
and hold your breath waiting for the French and the Germans to help
us out. If you are a software developer, think about what's gonna
happen to your job if we don't get rid of these monsters just as fast
as we can, whatever
it takes. It's unfortunate, but that's the platform at this
particular point in time. Dr.
Dotnetsky is saddened by how many otherwise intelligent Americans have
simply not learned the lessons of history.
I was on the alt newsgroups
recently and one guy had posted pirated PDF / CHM copies of about 100
different developer books. They all had the subject line "BUSH IS
OUR NATION'S GREATEST THREAT TO DEMOCRACY" - followed by the title
of the book. You know what? - Doesn't this just say it all! Most of these
people are just too dumb to "get it". A few of them are both
stupid and downright dangerous. On the other hand, you've got
people like Michelle Malkin that really need to be slapped, too.
Classes vs. Objects Department
There is a lot of syntactical confusion in the .NET space, particularly
among former C++ and JAVA developers, about what's the difference between
a Class and an Object. Let me put this
to rest very simply with Dr. Dotnetsky's Immutable Law of Objects:
An Object is an instance of a Class
The qualifying word here is "instance" - that's all there is to it.
Feel better now?
Well, that's all I"ve got for now, and besides my Martini needs to get
refreshed.
Cheers!
--Dexter
Dr. Dexter Dotnetsky is the alter-ego of the Eggheadcafe.com forums, where he often pitches in to help answer particularly difficult questions and make snide comments. Dr. Dotnetsky holds no certifications, and does not have a resume. Always the consummate gentleman, Dr. Dotnetsky can be reached at youbetcha@mindless.com. Dr. Dotnetsky's motto: "If we were all meant to get along, there would be no people who wait for all the groceries to be rung up before starting to look for their damn checkbook."Do you have a question or comment about this article? Have a programming problem you need to solve? Post it at eggheadcafe.com forums and receive immediate email notification of responses.
|