Russ Lewis's little corner of the digiverse
| | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| 28 | 29 | 30 | 31 | 1 | 2 | 3 | | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | 11 | 12 | 13 | 14 | 15 | 16 | 17 | | 18 | 19 | 20 | 21 | 22 | 23 | 24 | | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Search
Navigation
Categories
Blogroll
|

Tuesday, January 01, 2008

Tuesday, June 12, 2007
Unlock your Orange Smartphone
You will need to unlock
your Orange Smartphone if you want to install an unsigned application. OK, so
there are questions one should ask about installing an unsigned program, but
assuming you still do, it may not be quite as straight-forward as it should be.
Here are the things which DON'T
work:
Eventually, you may email developers@orange.com and if you have the word "unlock" somewhere in your email, you will
likely get an automated response that includes the magic
line:
Obvious
really!
6/12/2007 12:48:17 PM (GMT Standard Time, UTC+00:00)

Monday, May 14, 2007
Dont buy an Acer laptop - especially an Acer TravelMate
I recently bought an Acer TravelMate 4230, equipped with Acer’s Windows
Vista Business. I put Office 2007 on it (plus my usual development tools) and
it ran unbelievably slowly. Even with 2 Gb RAM it was awful. I use Outlook all
the time and just hated being at work because of it’s speed and
non-responsiveness. I have hardly been able to do any development work and even
writing a letter has become a chore (it was made slightly better by adding Word
2003). I’ve lived with it for a couple of months simply because I didn’t
have the time to rebuild it.
Last week I took the plunge and installed a 'proper copy' (not an Acer
OEM version) of Vista. Everything went well and
the basic system was noticeably faster.
I then installed good old Office 2003, SQL 2005, VS etc. and it was
still fine and still fast. Which is when I noticed that it had only recognized one
of the two DRAMM chips and was in fact faster on only 1 Gb RAM than it had been
on 2 Gb! But, I couldn't find the missing PCI MEM (PCI FLASH) drivers for the
extra DRAMM slot and Acer didn’t have them either.
About this time I also realized that Vista
wouldn't activate, and a call to Microsoft confirmed that I had installed the
wrong version for the partner product keys we have. I decided to go back to the
Acer recovery image to see if that had the drivers. But, the recovery disk I’d
been prompted to make wasn't a real recovery disk; it doesn't boot - apparently
Acer uses a hidden partition with the recovery tools on it. So I spent a couple
of hours learning how to read DOS partitions with a live Unix OS, got the utilities
I needed, created a boot disk and discovered that it still wouldn't restore because
the version of Windows had changed and there was no backup or CD of the Acer
version of windows. That’s right, Acer do not ship any OEM CDs with their
notebooks.
At that point I had a super fast system, which used only half the
installed RAM and had only about 24 days remaining before activation shut it
down!
Acer tech support in the US said the required PCI MEM (or
PCI FLASH) drivers were on their website but it was down at the moment. When the
site came back, the drivers weren't there, and when I called back (and spoke to
someone else) they said the drivers didn't exist.
Acer in the UK said
there could be a hardware fault but they couldn’t fix it because it was a
US
machine. They would though, sell me the recovery CDs which included Windows
Vista and the missing drivers for 50 quid. (It was just $40 from the US!)
Since we get some technical support incidents from Microsoft as part of
the Partner program, I decided to use one - value GBP 200. We get five of these
each year, and the last one we used was back in the year 2000, so I didn’t
feel too bad about using one. It took nearly two hours for the technician to
call back, but when he did he could not have been more helpful. He carefully
listened to the problem and made sure he understood it. He used Google to try
to search for answers and sent me a link that he wanted me to try. When that
didn't get the answers we wanted, he initiated a conference call with Acer
technical support. Surprisingly, Acer resisted the might of the call from
Microsoft and steadfastly refused to provide the drivers that would make their
notebook's RAM work with (retail) Windows Vista. However, they did confirm that
these PCI MEM drivers do exist and that they would not provide them.
Although MS support was unable to resolve the issue, I was very
impressed with the service and professionalism. I liked that he volunteered the
information that he hadn't done anything which I hadn't already tried, and I
especially liked that he said the case would only be closed when my notebook
showed the full 2 Gb. Today, the matter has been escalated within Microsoft, so
they can petition Acer for the drivers, but through another channel.
Meanwhile I managed to find the correct license keys for Vista, so I do now have a working PC. Hurray!
The very first notebook I ever bought was an Acer and it was great. Wow,
have they changed.
5/14/2007 8:49:21 PM (GMT Standard Time, UTC+00:00)
Error installing Visual Studio 2005 SP1 on Windows 2003 Server
Visual Studio 2005 SP1 failed with error Installation failed - 0x64C
The error is related to an unsigned driver.
I found an excellent post which explained the steps to take
to enable the correct Software Protection Policies at
http://blogs.msdn.com/knom/archive/2007/05/02/problems-with-visual-studio-2005-sp1-on-windows-2003-server.aspx
1) Open local security setting: Start -> Programs ->
Administrative Tools -> Local Security Policy.
2) Click on "Software Restriction Policies" and if it shows
"No Software Restriction Policies Defined" then insert a new (right
click the left pane node).
3) 2 x click on the "Enforcement" entry and under "Apply
software restriction policies to the following users:" section change to
"All users except local administrators".
He also mentions that he tried placing the original VS2005
disk in the CD tray whilst performing the service pack installation (note that getting
MS products to work correctly engenders all kinds of quasi-supernatural
beliefs!)
I followed the above steps (including the CD in the tray)
and the SP installed correctly.
I also found a bizarre KB article which tells you to remove
the .NET framework, then install the SP, then reinstall the framework –
don’t bother!
5/14/2007 10:19:07 AM (GMT Standard Time, UTC+00:00)

Friday, February 23, 2007
VS2005 & ASP.NET on Vista
OK, so you’ve worked-out how to run VS2005 as an
administrator (create a new shortcut to devenv.exe, and check the box in the
Compatibility tab).
But you can’t browse the IIS metabase and you still can’t
create or debug an IIS application. Worse, you get a spurious error message
about missing FrontPage server extensions! Well, you’re right in thinking you
don’t need FP server extensions. The thing you really want is called the IIS6
compatibility layer for IIS7. It’s configured via Control Panel | Programs
& Features | Turn Windows features on or off. Then drill down into IIS as
shown here.

Whilst there, you should make
sure that you have ASP.NET enabled

And, if you want F5 debugging
(which, of course you do,) you need Windows security too

Now, use IIS manager to
configure your Web application. It should use the ASP.NET 2 Application pool

And you will need to enable
Windows authentication for your Web:

There’s an excellent post which
explains what’s going-on here: http://mvolo.com/blogs/serverside/archive/2006/12/28/Fix-problems-with-Visual-Studio-F5-debugging-of-ASP.NET-applications-on-IIS7-Vista.aspx
2/23/2007 9:02:46 PM (GMT Standard Time, UTC+00:00)

Tuesday, November 28, 2006
Microsoft Empower
This looks
good...
Microsoft Empower is a two-year initiative that helps turn your idea for a
software application into a reality. For just £260 + VAT, the programme gives
you a full range of development resources, MSDN subscriptions, software licences
and technical support - all the tools you need without the cost!
http://go.microsoft.com/?linkid=5834397
11/28/2006 6:01:04 PM (GMT Standard Time, UTC+00:00)

Tuesday, September 26, 2006
HTTP Pipeline in ASP.NET 2.0
Here is
a quick reference for the steps in HTTP pipeline in ASP.NET 2.0.
Some of the steps are internal (cannot be
subscribed by HTTP modules or GLOBAL.ASAX):
- Internal step to validate request. Protects
against malicious attacks exploiting path canonicalization
- Internal step to perform URL mapping (if the URL
mapping feature is enabled)
- Fire BeginRequest event
- Fire AuthenticateRequest event
- Fire DefaultAuthentication internal event
- Fire PostAuthenticateRequest event
- Fire AuthorizeRequest event
- Fire PostAuthorizeRequest event
- Fire ResolveRequestCache event
- Fire PostResolveRequestCache event
- Internal step to determine the IHttpHandler to
process the current request (this is when the page compilation takes place)
- Fire PostMapRequestHandler event
- Fire AcquireRequestState event
- Fire PostAcquireRequestState event
- Fire PreRequestHandlerExecute event
- Internal step to execute the IHttpHandler (call
its ProcessRequest method) for the current request. The handler is determined
at step #11
- Fire PostRequestHandlerExecute event
- Fire ReleaseRequestState event
- Fire PostReleaseRequestState event
- Internal step to perform response filtering (only
if HttpResponse.Filter is installed)
- Fire UpdateRequestCache event
- Fire PostUpdateRequestCache event
- Fire EndRequest event. This is the only
event that is guaranteed to be fired for each request
I came across this
in Dmitry Robsman's blog. He has several excellent code projects there, two of
which I have incorporated into production websites today!
9/26/2006 10:24:03 AM (GMT Standard Time, UTC+00:00)
We have evolved -- or were created -- as a small hairless creature in a world of big hairy problems and predators.
I
loved this quote from one of the keynote's in Waterfall 2006 - a conference
dedicated to re-welcoming the waterfall method of software development.
Read all about it at
www.waterfall2006.com and if you're
doing nothing else on April 1st, maybe even go
along!
9/26/2006 10:24:03 AM (GMT Standard Time, UTC+00:00)
GoogleClient Demo
Here's an updated
version of the Google & Amazon Client demo from my course
508.
Download: GoogleClient.zip
9/26/2006 10:24:03 AM (GMT Standard Time, UTC+00:00)
localhost, (local) and . fail with SQL Server 2005
If you've moved your
databases from SQL 2000 to 2005 and tried to run them using a connection string
which includes something like:
server=(local);
or
server=localhost;
or
server=.;
you will have surely
noticed that it falls over when your .NET application tries to access the
database with a "server not found" error.
The cause is that
Microsoft have shipped the developer versions of SQL 2005 with local
access only. This means that
server=YOUR MACHINE NAME;
will work, but
that's really bad practice, because the application will certainly fail when you
copy it to the deployment server, having forgotten to amend the machine
name.
The solution in fact
is to do this :
Start | All Programs
| MS SQL Server 2005 | Configuration Tools | SQL Surface Area Config.
Follow Surface Area
Config for Services and Connections, then click Remote Connections in the left
hand pane.
On the right, select
Local and Remote Connections | using TCP/IP only
The old, familiar
monikers will now work once again 
9/26/2006 10:24:03 AM (GMT Standard Time, UTC+00:00)

Friday, December 16, 2005
It is not possible to run two versions of ASP.NET in the same process
Here's a problem
that many people may encounter as they start deploying ASP.NET version 2
applications on servers running which have existing ASP.NET v.1
sites.
The first symptom is
a Web page or Web service that sometimes works but at other times refuses
to start debugging or yields a "Server Application Unavailable" error page. This
page suggests looking in the event log for further information. If you do, you
are told in the log that "It is not possible to run two versions of ASP.NET in
the same process ..."
Further observation
may lead you to realize that you have a .NET v.1 and a .NET v.2 website running
on the same IIS Web Site (usually 'Default Web Site'). What's happening is
that whichever site is being hit first is imposing it's ASP.NET version on the
process which IIS creates for 'Default Web Site'. When a subsequent request is
then made to the other application, it cannot load its version of ASP.NET,
a fact which it notes in the event log.
So, how do you
create a separate process for a Web?
Open Internet
Information Services manager,
For Windows Server 2003, create
a new Application pool, accepting the default
settings.
Next, locate your
Web (under Default Web Site), right-click to select Properties,
and
Windows Server 2003:
assign the newly-created pool to the Application Pool property
Windows XP and
2000: Change the Application Protection
property to High (Isolated)
Not too obvious, but now you know
12/16/2005 11:43:25 AM (GMT Standard Time, UTC+00:00)

Thursday, December 08, 2005

Tuesday, November 29, 2005

Thursday, September 08, 2005
Writing C# .NET stored procedures
The 2005 release of SQL Server will allow developers to write their stored
procedures in a .NET language, does that mean the end of T-SQL as we know
it?
Not at all. T-SQL 2005 is the workhorse for this database, it has been
developed and modernised (slightly) from T-SQL classic, but it's the
language database developers will use 95% of the time for writing stored
procedures.
.NET code allows you to bring .NET types directly into the database for
manipulation. Because those types run in the CLR, so must the code you use.
However, this is the "long way round", so you can't expect it to perform as
well as the classic T-SQL route.
You would use .NET code in the database when:
- returning a .NET class (or type) is more useful than returning a SQL type
- the processing is not SQL-like
The advantage of writing CLR code in SQL Server, is the ability to populate
a custom business class (a .NET type) inside the database, in order to more
readily marshal it to the business layer. Architecturally, it simply means
you have the same types in the data layer as in the business layer.
9/8/2005 9:43:09 AM (GMT Standard Time, UTC+00:00)

Friday, August 26, 2005
Current status of restoring my blog from Google
I've got all the pages - held open in about two dozen browsers, now I just have to do some copy and pasting ...
done... now, some removing of Google highlighter, and we're good to go

8/26/2005 5:22:02 PM (GMT Standard Time, UTC+00:00)

Thursday, August 25, 2005
Thank Blog for Google
So, the other day, I deleted this blog. I deleted it accidentally, thinking it was the blog engine I no longer used. I did it using Shift + Delete, so it wasn't moved into the Recycle bin. The blog is completely self-contained within one folder, so there was no database content. Neither did I have any form of back-up - whatsoever...typical IT professional I hear you say 
Once I'd had enough of kicking myself, I thought about how to restore the content of my blog. Since I use it as a personal journal, making notes to myself, I was pretty keen to do this. I'd noticed that the blog got a lot of hits from Google, so I tried a little Googling....
Within minutes, I had found all the textual content from Google's cached pages - thank-you Google 
8/25/2005 1:56:06 PM (GMT Standard Time, UTC+00:00)

Monday, August 08, 2005
Do you get errors when generating a dataset from the designer?
I did. Here's the symptom. I was trying to recreate a sample of a typed DataSet for a course I'm writing. My original sample, which worked fine, was in a project called Junk. Call me old-fashioned, but I wanted to present it with a better name. I chose TypedDataSets since that was what we were going to be investigating.
Time after time, I found that I got the same error message - that there were problems generating the DataSet and I should build the project and fix any errors before trying again.
Here are the mental pictures I took with me to bed last night...wondering just what I was doing wrong..
This morning, I worked out the problem. It's frankly unbelievable, but I can assure you this is the case. It was because I was working on a project which was located in a path with and ampersand in its name! Yes, that's it. Strangely, none of the several dozen solutions I've built in that same path displayed any weird behaviour, although none of used typed DataSets of course!
I wonder if the same is true of .NET2 ?
8/8/2005 5:36:37 PM (GMT Standard Time, UTC+00:00)
SOAP formatting: RPC/Doc/Enc/Literal
If anyone is still having trouble remembering what the different SOAP styles are, here's a reminder of Yasser Shohoud's article that reviews the whole topic and also tells you why you shouldn't worry - just be happy you're a .NET developer.
8/8/2005 5:36:37 PM (GMT Standard Time, UTC+00:00)
P/Invoke - My version of the GetVersionEx / OSVERSIONINFO marshaling example
It's taken me a little while to unravel the example in MSDN, but I finally worked out what it was showing!
Here, in case it will help anyone else, is my version of the code, with altered names and some comments, that, I hope, will make it easier to understand.
//You need to put this bit in a form and place a button1 on that form!
private void button1 Click(object sender, System.EventArgs e)
{
OSVersionInfoClass osvi = new OSVersionInfoClass();
osvi.OSVersionInfoSize = Marshal.SizeOf( osvi );
LibWrap.GetVersionExClass( osvi );
label1.Text = "Class size: " + osvi.OSVersionInfoSize;
label1.Text += "\nMajor : " + osvi.MajorVersion;
label1.Text += "\nMinor : " + osvi.MinorVerision;
label1.Text += "\nBuild : " + osvi.BuildNumber;
label1.Text += "\nPlatformID : " + osvi.PlatformID;
label1.Text += "\nVersion : " + osvi.versionString;
OSVersionInfoStruct osvi2 = new OSVersionInfoStruct();
osvi2.OSVersionInfoSize = Marshal.SizeOf( osvi2 );
LibWrap.GetVersionExStruct( ref osvi2 );
label1.Text += "\n\nStruct size: " + osvi2.OSVersionInfoSize;
label1.Text += "\nMajor : " + osvi2.MajorVersion;
label1.Text += "\nMinor : " + osvi2.MinorVerision;
label1.Text += "\nBuild : " + osvi2.BuildNumber;
label1.Text += "\nPlatformID : " + osvi2.PlatformID;
label1.Text += "\nVersion : " + osvi2.versionString;
}
//This stuff goes outside the form class. Either in a separate .cs file or just outside the form class
//class demo
[ StructLayout( LayoutKind.Sequential )]
public class OSVersionInfoClass
{
public int OSVersionInfoSize;
public int MajorVersion;
public int MinorVerision;
public int BuildNumber;
public int PlatformID;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
public String versionString;
}
//struct demo
[ StructLayout( LayoutKind.Sequential )]
public struct OSVersionInfoStruct
{
public int OSVersionInfoSize;
public int MajorVersion;
public int MinorVerision;
public int BuildNumber;
public int PlatformID;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
public String versionString;
}
// This class just hides the externs
// note they both map to the same function in the API, but I'm giving them a more useful name within .NET
public class LibWrap
{
[ DllImport( "kernel32", EntryPoint="GetVersionEx" )]
public static extern bool GetVersionExClass( [In, Out] OSVersionInfoClass osvi );
[ DllImport( "kernel32", EntryPoint="GetVersionEx" )]
public static extern bool GetVersionExStruct( ref OSVersionInfoStruct osvi );
}
8/8/2005 5:36:37 PM (GMT Standard Time, UTC+00:00)

Monday, March 14, 2005
http://www.connectionstrings.com/
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)
Use Starter kits in your organisation
OK, so I'm a believer in mentoring and learning
by example. This feature of Whidbey is such a good
idea: (copied from the What's new page) Starter
Kits A starter kit is essentially an enhanced project template that can be
shared with other members of the community. A
starter kit includes code samples that compile, documentation, and other helpful resources to enable you to learn new tools
and programming techniques while building useful, real world applications. For
more information, see How to: Create a Starter
Kit.
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)
UDDI Server in Windows 2003 Server (Part 1 of 3)
I have been trying for nearly a year to get W2k3's UDDI server to do a couple
of neat tricks for me. I've seen both done in
demonstrations, but had been unable to recreate the steps in one case and in the other, was unable to
track down the demo movie (even the project manager at Microsoft was unable to find it again.) Then a colleague located something that looked very much
like the same demonstration on a Microsoft Webcast page, but when I ran it, the commentary talked about doing the fail-over I was hoping for, but the picture had frozen. Tantalizingly, I knew it was
there but couldn't actually see it!
Anyway, that spurred me on to have another go
at getting it to work, and this time I was more successful, finding Karsten Januszewski's blog and returning to his articles (about the only ones published on coding UDDI in W2k3) and also
finding the code file archives for the Webcast.
It turns out that there are a couple of unexpected issues that I can pass on to anyone hoping
to program UDDI that will be helpful.
The tasks that I will document are:
1. Adding services into UDDI so they can be
discovered from Visual Studio's Add Web Reference wizard
2. Writing (.NET) client code that connects to an UDDI server, locates
service, then retrieves the bindings (endpoints) for that service. The idea is that it can be used for
fail-over.
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)
Get hold of great .NET Samples
This looks like a useful set of links and
recommendations: (Just noticed the hyperlinks
didn't make it via email, so will add them in
later - Russ)
Adding Oomph With Samples by Mike Taulty
There are a whole host of resources that can help you learn about developer
technologies. You can read books, check out magazine articles, attend
conferences, watch online sessions, hang around in newsgroups and so on, but I
think it's rare that any of these options give the
same amount of pure oomph <http://go.microsoft.com/?linkid=1510970>
as a good sample. With that in mind, I
thought I'd use this article to list some oomph-packed samples of .NET applications that will potentially speed up your
own development with (or conversion to) .NET. Here's the shortlist of three
sites that I'd recommend:
Windows Forms.NET Sample Applications: <http://go.microsoft.com/?linkid=1510971>
If you're looking at Smart Client
applications then you need to take a look at
samples such as FotoVision <http://go.microsoft.com/?linkid=1510972>
and IssueVision <http://go.microsoft.com/?linkid=1510973>. The new Infragistics Tracker
application <http://go.microsoft.com/?linkid=1510974>
which makes use of the patterns & practices <http://go.microsoft.com/?linkid=1510975>
code blocks and comes with
documentation detailing the design and
implementation decisions made during implementation is particularly useful.
The ASP.NET Starter Kits: <http://go.microsoft.com/?linkid=1510976>
If you're building a web-site with
ASP.NET then you need to take a look at these six applications that provide a fantastic starting
point to get you going. Download them, install
them, play with them
and then discuss them in the ASP.NET Forums
<http://go.microsoft.com/?linkid=1510977>.
Learn247.NET <http://go.microsoft.com/?linkid=1510978
> -
The WeRock 247 <http://go.microsoft.com/?linkid=1510979>
& Football 247 <http://go.microsoft.com/?linkid=1510980>
Samples:These go way beyond just being 'samples'.
Both applications come with training materials that lead you through building
the applications from scratch. Introductions are
given to the technologies involved which span
Smart Client, Web Client, Mobile Client and Web Services and the materials are available online or for order on DVD.
From
***************************************** MSDN Flash
***************************************** 22 November
2004
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)
MSDN Nuggets
This promises to be
a great mini series - 10 minute nuggets of
technical knowledge. Great idea, great presentations
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)
Show(owner) is so neat
I was building a
simple menu system from LinkLabels and wanted this behaviour: when the user chose a link, to minimise the menu form, show the chosen form, then
restore the menu form when the user closed their
chosen form.
Here's the code:
//minimize this window, and show another
this.WindowState =
FormWindowState.Minimized;
frmDemo f =
new
frmDemo();
f.ShowDialog(
this);
//this form *owns* f
}
// in frmDemo, control the calling (owner) form!
private void Form1 Closed(object sender, System.EventArgs e)
{ //restore parent
this.Owner.WindowState = FormWindowState.Normal;
}
It happens that I
was investigating .NET 2, but actually this is a .NET 1 feature, although in
.NET 1 it is only available for modal forms (ShowDialog method) and in .NET 2
it's available for both Show and ShowDialog
methods.
3/14/2005 6:33:27 PM (GMT Standard Time, UTC+00:00)

Sunday, November 21, 2004
Connection String testing tool
I wanted to experiment with the different forms
of referencing the
local machine's database localhost, (local), ., 127.0.0.1, etc., so I built this
little tool.
Warning - the tool uses sa & no password -
I dont! And neither should you!!!
Source available here
Exe from here
BTW - the “.” seems to work
well
11/21/2004 6:30:28 PM (GMT Standard Time, UTC+00:00)
Micro(soft) Speak
I loved the lingo glossary that Robert McLaws found, offering such gems
as:
Percussive Maintenance: The fine art of whacking the crap out
of an electronic device to get it to work
again.
Salmon Day: The experience of spending an entire day swimming upstream only to get
screwed in the end
Crapplet: A badly written or profoundly useless
applet. "I just wasted 30 minutes downloading this stinkin’
crapplet!"
Brain Fart: A by-product of a bloated mind
producing information effortlessly. A burst of
useful information.
11/21/2004 6:30:28 PM (GMT Standard Time, UTC+00:00)
VB.NET, option strict on
This morning I read with glee, Rob Chartier's mini rant about VB.NET's option strict. I say “mini rant”
in the hope of
encouraging Rob to rant some more, but first I wanted to rush to the defence of the VB .NET team on one point.
I'm a VB programmer who moved to C#, so I also had a phase of damning the team for
not adopting a consistent set of keywords across
the two languages. Rob cites static (C#) and Shared (VB) as
an example and asks why not just adopt one or the
other. It would certainly make life easier for me.
Actually, the benefits are even greater when you
consider override (C#) and Overrides (VB) or new (C#) and
Shadows (VB).
By now I've mentioned enough examples to set out the arguments against such a move. If C# and VB.NET had
the same keywords:
- Which case would you adopt, lower case throughout as in C, or Icapped as
in VB?
- Perhaps we could have a set of aliases
like we do for the primitive types so that a
C# programmer can type new and a VBer New
- Which set of keywords do you choose?
- The C# set are good because C, C++ and
Java people are all familiar with them
- The VB ones are good because they often describe
the functionality far better (isn't Shadows a
nice way of describing the effect achieved by adding a function in a
derived class that eclipses the function of the same name in
the base class?)
- Maybe you decide each on its merit and produce a mixed ancestry. Yet
sometimes the words are equally meritorious.
Static variables are both static in memory and shared
between instances.
VB .NET developers, in the main come from VB
developers. I've not yet heard of people moving
into .NET as their first programming experience
(although a couple of Universities have started
exactly such programs.) When they do start
learning programming by learning .NET, I guess they are more likely to choose C# as the language - I would certainly advise them so to do.
So, VB .NET is there to allow millions of VB 3/5/6 programmers to move into OO and for them to stay up to date with the MS environment. Consequently VB .NET has to keep
it's existing set of keywords for those people.
But VB .NET introduced several keywords that did not exist in VB to allow for
inheritance. And they chose descriptive words as
is the tradition of
VB because there was no reason to maintain a
tradition with C. Interestingly, many of these VB developers have found the move to VB .NET too tough, but that's another story!
So, if the decision was to produce a single
keyword set that was mixed, they would alienate
both sets of developers. If they chose the C keywords,
as they did for C#, they would alienate the
oft-mentioned “millions of VB developers”. And if they went mixed, they
would upset everybody!
IMHO, what the VB .NET team have done (or were
told to do) is to “dumb down” VB .NET to the point
where it is no longer the language of choice for serious, knowledgeable VB developers. I
read sometimes that they are trying to
re-introduce the RAD into VB, yet I don't think
there's much difference in the number of keystrokes
taken to type VB and C# code. Where it will make a difference is when wizards
and helpers start to generate code. But frankly, that code could be in any
language.
I do a lot of training and am involved in
writing courses, where VB .NET has its place. For example, it's easy for the wider audience to read 5 lines of VB code that demonstrate some point, than it would be
to read C#. Whether the audience chooses to write VB or C# is another matter, but I'm sure the C# writers can read both languages with ease.
However, I do agree with Rob and many others
who have made the point about Option Strict - it
was madness of them
to default that to Off. Especially when you
consider the rationale was to make VB .NET more
like VB and to allow VB6 code and coding practises to be supported in
.NET.
11/21/2004 6:30:28 PM (GMT Standard Time, UTC+00:00)
Visual Studio Tools for Office 2003 Training Available on MSDN
11/21/2004 6:30:28 PM (GMT Standard Time, UTC+00:00)
What is WSE?
Since I've added WSE to the Web Services
course, I was please to discover this 'positioning piece' from Omri Gazitt.
The full version is here, but this extract describes WSE nicely:
So what is WSE? WSE is a different kind of release. It
is a platform enhancement technology. Shipping major platforms
every few years is a fact of life, but some
technologies move so quickly that customers need updates well before the next platform comes out. Web services is one
of those technologies. So we created a new
model for getting enhanced platform technology to our customers - and thus WSE
was born.
WSE is a supported product in the same way that
any Microsoft platform is - you can deploy on it,
and we support it via Microsoft's Product Support
Services. But there are a few important
differences. First, each WSE release is supported for 2 years + 1 year
of extended support (compared with the 5+2 model for major platform releases). This
is because we anticipate doing releases on around a yearly schedule, and our
goal is to have at most 2-3 versions to support at any given time, so we can
deliver on our goal to ship on the order of once a year. Of
course when the major platform comes out, we
encourage developers to move to that platform, which is supported at 5+2.
Another difference is that WSE is not necessarily
integrated with anything - there are no complex
technology interdependencies - WSE is a standalone product and can therefore ship on a faster schedule. Yet another difference is that we don't guarantee compatibility
between releases - Web services are evolving quickly, and we often implement early versions of the specs which get
superseded by the final versions (e.g. WS-Security
getting superseded by OASIS WSS-Security). Finally, while WSE is
also "hardened" from a functional quality, security, and stress point of view, there are
things that we don't do with WSE that we do for major releases - for example, we
don't localize WSE. For all of these reasons we are able to create new versions of WSE faster than we can roll out major platform
releases.
11/21/2004 6:30:28 PM (GMT Standard Time, UTC+00:00)
Catch-all exception handler for desktop apps
Trapping Application.Run(new Form1())