 Saturday, May 07, 2005
I got to spend 2 days with the folks from the Microsoft CLR team, but I don’t feel like I learned enough from them. Heck, I think you could lock me in a room with them for a year and I’d still come out feeling like a mushroom on the underside of a log. However, I was scanning through Kirk Allen Evans’ blog post about a conversation with the CLR team (great questions and answers, btw) when I got to the bottom. A collection of links to other people’s blog postings about their times with the CLR team. Since I’m big on writing what I think, I had to go read what other people had to say. My two favorite posts are:
But I was jealous when I got to read Joseph DeCarlo’s post about what the team talked about while they spent time with the fine development staff of Turner Broadcasting. I’d have loved to hear Jason Z. really explain generics to me (and why they’re different from C++ templates). I wanted to leave a comment on Joseph’s post asking him to give the blow-by-blow, but he appears to have comments turned off. So I’m sending him an e-mail instead.
— Matt Ranlett
posted with BlogJet
 Friday, May 06, 2005
We had a few new faces at the VB.Net meeting tonight. After a bit of social chatting, Jim Wooley started the meeting with a presentation of the FileSystemWatcher done in VS2005 Beta 2. For the sake of simplicity, we went with a Windows Forms applications. Take a form, drop on a ListBox and a FileSystemWatcher control. A FileSystemWatcher component basically does what it sounds like – it watches the file system for some file and some event. You can filter by file type (ex. *.txt) and you can filter by event (changed, created, deleted, etc.). With this really simple demo, we were able to see that the operating system raising events to our code. Something we did notice is that the OS throws several events where we might only expect one event. For example, open Notepad, type some text, and save it into your monitored directory. You’ll see that you get CREATED, DELETED, CREATED, CHANGED, and CHANGED events. So you’ll want to do error handling to prevent yourself from acting on the wrong one of those events. Extremely simple, but a great demo to show how useful the FileSystemWatcher can be.
The next presenter was Harrell Perlman, showing us Avalon. If you plan on taking a look at Avalon, you need to have XP service pack 2. Longhorn’s betas are not supported yet. You’ll also need a beta copy of VS2005 to work with it. Harrell had a heck of a time getting his Virtual PC installed with the WinFX and Avalon, so he spent a good deal of time making sure that we’d understand the installation procedure. WinFX is an extension of the .Net Framework that is utilized by Avalon (meaning that Avalon runs entirely on managed code). Avalon uses XAML (a flavor of XML) to describe the layout and ties to code behind classes for event wiring. We’re really early in the Avalon lifecycle (still Alpha) but there are already a wealth of articles discussing Avalon concepts. Download the Avalon, WinFX, and (possibly) the LongHorn SDKs, install them in a Virtual PC or Virtual Machine, and go! We took a quick look at a demo or two to see what the XAML markup language looks like. The general reaction of the group was that we didn’t really know where we were going with XAML. To me personally, it looks like the ASP.Net seperation of the presentation layer and the UI Process Layer.
Dan Bredy was presenting an article from Mike Gold (VBHeaven.com), recreating the W2 tax form. The program uses GDI+ to render the content of some textboxes and place them directly onto an image of an actual W2 form. Basically, set the background of a form to an image. Place a bunch of textboxes and checkboxes on the form. Then use the DrawString function to render the text directly onto the image (you basically can’t see the textboxes). This takes place during the print preview portion of the application. This makes use of the System.Draw.Graphics namespace to render the image and to draw the text from the various textboxes onto the image based on the location of the actual control.
— Matt Ranlett
posted with BlogJet
 Wednesday, May 04, 2005
Everyone has been putting their own report of what they learned from the CLR team on their blog, so I thought I would add mine. I was lucky enough to have dinner with them twice this week and had plenty of time to get to know them, just like a friend you know from the user group. The first night anyone that attended the UG could have come out with us after the meeting and talked with the CLR guys. They stayed out with us until Midnight after a long day and long flight. Let me tell you, the Microsoft guys that travel and talk with us are the nicest guys you could ever meet and they are always willing to go the extra mile. Over the last 2 years Microsoft has made an effort to see what the users of their products want and have made the effort to go find out. Keep coming out to user groups they are full of great people and the UG leaders are always working hard to get good speakers for you. Big thanks to Microsoft and UG leaders for all the hard work everyone is putting in.
Matt and I, have been giving recaps of the user groups for some time and we have always made them a recap of the meeting. This is a great plan and helps to share what happened at each group, but does not complete the circle. What do I mean by this? Well one of the CLR guys asked me what the UG members thought about each meeting and what was their feedback to the presentations. I told him we only do a recap of the meeting and don’t usually put feedback information on the blog entry. I told him if we do hear feedback about topics or presentations we would try to get some feedback for the Microsoft team about the UGs up with the reviews. So we would really like to get UG members input on the meetings and without putting up names, give some feedback to the meetings. Obviously we will not put up that you didn’t like the meeting because you don’t like the speaker, but anything that can help constructively, we will look into. Come see us at the end of the meeting or leave us some comments! Microsoft is looking for feedback so make sure you get it to them.
—Brendon Schwartz
Posted with BlogJet
I like to tell really bad one-liner jokes, and one of my favorite categories is the "guy with no arms and no legs" variety. I've written down the ones I knew and then I've culled some from various websites. I know you'll laugh at some of these!
what do you call a guy with no arms and no legs sitting on a doorstep? Matt
what do you call a guy with no arms and no legs hanging on a wall? Art
what do you call a guy with no arms and no legs stuffed in a mailbox? Bill
what do you call a guy with no arms and no legs in a lake? Bob
what do you call a guy with no arms and no legs in a lake being dragged behind a boat? Skip
What do you call a guy with no arms or legs in a pile of leaves? Russell
What do you call a guy with no arms or legs in a ditch? Phil
What do you call a guy with no arms or legs in your hot tub? Stu
What do you call a guy with no arms or legs on your grill? Frank
What do you call a guy with no arms or legs going over a fence? Homer
What do you call a guy with no arms or legs In your girlfriend's lingerie drawer? Teddy
What do you call a guy with no arms or legs Who every one takes a dump on? John
What do you call a guy with no arms or legs who holds up your car? Jack
What do you call a guy with no arms or legs who's upside down in the end zone? Spike
What do you call a guy with no arm and no legs in a coffee cup? Joe
What do you call a guy with no arms and no legs on a poker table? Chip
What do you call a guy with no arms or legs nailed to your spice rack? Herb
What do you call a guy with no arms or legs on a stage? Mike
What do you call a guy with no arms or legs under a car? Axel
What do you call a guy with no arms or legs in a bank? Buck
What do you call a guy with no arms or legs on a piece of paper? Mark
What do you call a guy with no arms or legs in a British restroom? Lou
What do you call a guy with no arms and no legs in a field of marijuana? Bud
A girl with no arms and no legs, lying on a grill? Patty
What do you call a girl with no arms or legs on a beach? Sandy
What do you call a girl with no arms or legs in your dishwasher? Dawn
What do you call a guy with no arms or legs between two buildings? Ali
What do you call a girl with no arms or legs hanging on a clothes line? Peg
What do you call a girl with no arms and no legs who is stuck on a fence? Barb
What do you call a girl with one leg shorter than the other? Eileen.
What do you call an Asian girl with one leg shorter than the other? Irene.
What do you call a cow with one leg missing? Lean beef.
What do you call a cow with no legs? Ground beef.
What do you do with a dog with no legs? Take it for a drag
Why does Snoop Dog carry an umbrella? Fo' drizzle.
What does Snoop Dog use to do his laundry? Ble-atch!
-- Matt Ranlett
I feel like a lucky guy - I've been able to go out to dinner with the CLR team (Brad, Claudio, Kit, and Jason) twice now. Each time it's been three or four of them and about ten or so of us. We sat around and discussed their recent presentations, the future directions of the industry and random bits of trivia. It makes for an entertaining and instructive evening all the way around, adding depth to the people behind the CLR. These guys are out traveling the country (Atlanta and Arizona count as the country, right?) trawling for feedback from the users of their products, and we try to give them what they ask for. What do we like about the .Net Framework? It's easy to work with and it genuinely makes your job of developing applications easier. What don't we like about it? It's memory intensive and it doesn't go far enough - Brendon specifically asked Claudio for the Psychic Friends namespace. I'll do a bad job of explaining his idea, but Brendon has this theory about creating a low level eventing system where the CLR or OS pushes the events to registered software. The catch is, with Brendon's design, he wants the registering software to define the event, not the event server. So you would essentially be telling the event server what events it should create and serve. Like I said - the Psychic Friends component.
One of the topics that came up was the upcoming Professional Developers Conference, or PDC. Some of the folks on the CLR team have input to the PDC content, and they want to hear from us what we want to learn about. Do we want this PDC to focus on the here and now of VS2003? Do we want to look at the near future with Whidbey and Yukon? Should we be looking 2 or more years down the road at LongHorn? *I am not saying that LongHorn won't deliver inside of 2 years - let's not start that rumor.* Beyond the topics covered at the PDC, what kind of presentations do we want to see? Of course, there will be plenty of lectures with slides and code demos, but what kind of code demos and slides do we want to see? Do we want to see the low down nitty gritty stuff where you need conceptual diagrams of memory stacks or do we want higher level application logic. Do we want to see more easy to follow tutorials or do we like larger, more involved examples of best practices? What kinds of hands on labs do we want to see? Should those be the tutorials or best practices? Should they show us how to use the Enterprise Library and BizTalk or should we be looking at the effects of memory pressure on the GC and how we can add graphical monitoring to our own applications? Would you guys like the opportunity to bring your own applications to a booth and sit with a MS developer for 30 minutes (or an hour? Two?), letting him or her give you advice on how to improve performance or security? I'm actually soliciting feedback on behalf of Microsoft now. What do you guys want to see? Jim Wooley and I blue-skied for a while with Brad and we came up with the idea of taking a non-trivial application written in VS2003 and learning how to correctly profile the app with freely available tools and simple instrumentation. Then improve the program in VS2003 based on the information we've just learned. Then take that exact same application and migrate it to VS2005 (without making any code changes). Check the profiling and see what improvements we get with just the new CLR. Now take advantage of the new features offered in 2.0 like generics to speed things up and simplify the code. Look at the profiling again to see what kind of performance improvements we have gained. Maybe next we could migrate the UI of this same app to Avalon. Finally we could talk theory about the changes coming up for LongHorn and the next version of the .Net Framework. But the basic idea is that we take an app and work it through several generations of code review and performance monitoring until we've gone from currently in production code to the theoretical future of our applications. This sounds to me like a fantastic lab and I'd love to see it. If nothing else, maybe it should be turned into an article for MSDN or something. *I am not volunteering to write this - it sounds like it might require a book!* These were a great bunch of guys to hang out with and I really enjoyed meeting them. I'll bee keeping up with them via their available blogs and I urge everyone else to do the same.
— Matt Ranlett
posted with BlogJet
I think that lots of people are of the “try it first, read the manual last” mindset. I’m one of them, and it recently jumped up to bite me on the rear. I had previously installed the February CTP of VS2005 and played around a bit. Then I downloaded Beta 2 and ran the installer. It told me to uninstall Beta 1 before continuing. I did so, re-ran the install and everything seemed to go just fine.
Then I tried to create an empty project and look at the form. The empty form wouldn’t display and I got this error:
——————————————————————— Microsoft Visual Studio ——————————————————————- Could not load type 'Microsoft.VisualStudio.Shell.Interop.IVsRunningDocumentTable2' from assembly 'Microsoft.VisualStudio.Shell.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Browsing around on the web, I found that I was not alone, other people ran into the same problem. Apparently there are a set of manual uninstall steps that must be followed in exact order before installing VS2005 Beta 2. Of course, I failed to do this. The Beta 2 install program told me to uninstall the VS tools, but said nothing about the earlier version of the framework or anything. So I didn’t remove any of that other stuff. I tried uninstalling anything even vaguely related to .Net and tried reinstalling Beta 2. Same error message. This went on for like 3 uninstall/reinstall cycles.
Finally I found Aaron Stebner’s blog posting where he talks about creating an automated cleanup tool that helps us get through the “prep the machine for Beta 2” steps. Too late for me to bother with the tool, but he did have this post where he details the manual steps a user can go through to get the machine back in shape. Going through the steps one at a time, I believe this step was the one that finally made things work:
Go to %windir%\assembly and delete anything with *1.2* or *2.0* in the folder name. Delete the GAC_32 and GAC_MSIL folders as well.
You can not view the contents of %windir%\assembly in Windows Explorer when the .NET Framework is installed. In order to view the contents, you will need to set the following registry value and reopen Windows Explorer
Key name: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion Value name: DisableCacheViewer Data type: REG_DWORD Value data: 1
Note: You should remove the DisableCacheViewer value after you complete this step because this is only used for debugging purposes.
I had two different versions of the 2.0 framework, and I think that something, somewhere was conflicting. I know that shouldn’t happen thanks to .Net’s stand-beside ability. I have no proof that this was the magic bullet to the problem (other than everything works now). I just thought I’d throw this info online because it deserves to be easy to find online.
— Matt Ranlett
posted with BlogJet
 Tuesday, May 03, 2005
Kit George, Program Manager on the Common Language Runtime (CLR) team in charge of the base library, stood up as our first presenter. He jumped right in to some demos to show some v2 improvements. (All the demos are available on the Visual Component Library (VCL) website)
- The first demo introduced us to some memory management (Garbage Collection) concerning unmanaged resources.
- The second demo showed the improvement in performance between Try{Parse}Catch and TryParse.
- The third app showed us how the VCL now supports the serial ports. It also showed us color in console applications and generic collections.
Brad Abrams, a founding member of the .Net Framework team, was here to present the deep internals of the CLR and basically show that he knew everything about CLR and compilers. He strongly warned us that his presentation was not going to cover knowledge required to be a programmer and that everything he showed us was going to change as the CLR evolved. After a rapid review of the process of creating an executable, we created a quick “Hello World” application and looked at the Intermediate Language (IL) code thanks to ILDASM. Looking at the IL we were able to see which version of the CLR the exe was compiled with, the assembly hash information, and the entrypoint information. We even saw that by modifying the IL entry point and recompiling via ILASM, the behavior of the program could be changed (not that there is ever any practical use for this information). We learned that .Net assemblies are made up of the Manifest (external data) and the compilable IL + it’s metadata and required resources. IL metadata is the actual language for execution. It is independent of the CPU and platform, making it capable of running as both 32 bit and 64 bit applications without change. IL is also a stack based language, meaning that every operation runs on a stack – pushing and popping variables. IL bakes type safety into the CLR through a process called verification. This helps prevent mixing incompatible types and bad array handling. Brad covered the startup logic, showing how the CLR uses mscoree.dll to check version numbers and run the correct CLR version, allowing multiple .Net frameworks to be on the same machine and code designed for each to run successfully. We looked at what happens in memory when an object is allocated and its methods are called. This included understanding the memory hex addresses (pre-stub dispatcher addresses and compiled method addresses), JIT compilations, and more. We looked at the Just In Time (JIT) Compiler optimizations, including register allocations, loop unrolling, dead code elimination, constant and copy propagation, and processor specific code generation. A new JIT optimization in v2.0 is range check elimination – not repeating range checking on arrays when the array is reused in an identical or safer manner (resulting in faster JIT compile times). Brad’s favorite runtime service (I’m guessing b/c this is the one he covered) is the Garbage Collector. Brad wanted to point out that a better way to think of the GC was to consider it a stuff collector – it copies everything that still has references and anything left behind is zeroed out. Brad then introduce Claudio, who would cover the GC in more detail.
Claudio Caldato presented how to write faster managed code. When talking about application performance, the following points are important to keep in mind. You need to set realistic goals and evaluate them continuously so they’re not too optimistic or conservative. You need to measure frequently. Know your platform to know where to make changes (memory, processor, etc). Performance improvements are not a one shot deal – make continuous improvements (automated tests help). Finally, build a performance culture – the developers need to understand that performance is part of their development process. Claudio talked about the garbage collection in action – maintaining objects with references and collapsing the memory queue to prevent fragmentation. Garbage collection works in a generational cycle. Gen 0 is run every time. Gen 1 is run only when Gen 0 doesn’t have enough memory on the heap to create all the required variables. The GC will pause threads, trace reachable objects from roots, compact live objects and recycle dead memory. Each generation is it’s own heap, so there are three Gen heaps and a large object heap (separated b/c moving large objects is expensive). To improve performance, make sure you understand the lifetime of your objects – don’t let them live to Gen2 if you can help it. Use perfmon and the CLRProfiler to examine your allocation profile. Some common pitfalls include keeping references to dead objects (be sure to null out object references). Implicit boxing (casting value types to ref. types) without knowing it happens when you do something like creating an ArrayList of Ints. Don’t do GC.Collect if you can help it. Because ~C( ) is not deterministic (you don’t know when the memory is cleared) you should try to use the Dispose pattern – implement IDisposable and call .SuppressFinalize. In C# this is as simple as the using keyword. Claudio showed us what he was talking about with some demos, using the CLRProfiler (available online for free). The demo also showed us explicitly how much the String.Append object method costs vs the StringBuilder.Append object method when modifying the string. The difference was astonishingly huge. The next demo showed the difference between the Finalize method and the using statement (which calls the IDispose interface). The point of this demo was to show how much memory could be saved by having deterministic memory clearing. We talked about Reflection a bit – noting that the new Token/Handle resolution APIs are very fast. An example would be calling MemberInfo on an object (a costly call), retrieving a token for that member, and then calling the Token API for future references to that object. COM Interop is efficient but frequent calls add up. This is because marshaling can be expensive. Primitive types and arrays of primitive types are cheap, but Unicode to ANSI string conversion are not. To diagnose some of these problems, you can use some of the built in CLR Interop counters in Perfmon. You can mitigate Interop call costs by batching calls (chunky, not chatty) or move the boundary (helpful if you control both the managed and unmanaged code). finally, some deployment considerations are to reduce the number of assemblies to speed load times, use the GAC to prevent repetitive signature verification, and use native code (NGEN) to reduce startup time and improve code shareability. Also, keep in mind that XML is not always the answer – System.XML.dll is 2Mb and might be overkill if you’re storing extremely simple data. When working with Performance Counters, start by looking at how much time is being spent in GC. 20% is too much. Next you’ll want to look at the promotion rate. If Gen2/(Gen0+Gen1) > 1/20 then look at the objects’ lifecycles. Next you’ll want to check the byte allocation to ensure you’re not above 30Mb/s under stress. This indicates too many objects. When using the CLRProfiler, examine the total allocation, the reallocated memory, the allocation graph, and the time line. To improve startup time, reduce the number of dlls loaded at startup (your own app dlls and .Net platform dlls), NGEN your assemblies to prevent JIT costs. Place strong named assemblies in the GAC. Finally, check your own application logic to see if your own computations are the bottleneck.
These guys are seriously smart. They’re so smart that just writing about them makes ME sound smart! Well, they’re product managers so you have to keep that in mind, but even so… I think they might each have more than one brain. Be sure to check out their blogs and books.
— Matt Ranlett posted with BlogJet
 Monday, May 02, 2005
Large companies can frequently act out like an 800 lb gorilla, throwing its weight around. Microsoft, with its 40 billion dollar cash reserve, makes an awfully big Goliath. Don't get me wrong, I like Microsoft. Heck, they enable me to make a living. I am an avid follower of MS user groups (averaging nearly 30 hours a month) and I'm even going to Orlando for TechEd! But every once in a while, David gets in a good shot, and that makes for a good story.
An article was recently published documenting the story of a legal battle between Microsoft and a college student over a cash value of $143.00. According to the article, a college student at the U. of Akron sold 2 pieces of unopened software on Ebay. Microsoft sued for "Microsoft has suffered and will continue to suffer substantial and irreparable damage to its business reputation and goodwill as well as losses in an amount not yet ascertained … [the] Defendant's acts of copyright infringement have caused Microsoft irreparable injury." Rather than giving up, the student, David Zamos – a student attending Kent State U for a biochemistry degree, fought back and browbeat the MS lawyers into submission with a combined 37 court filings.
http://clevescene.com/issues/2005-03-30/news/feature_print.html
For a similar, humorous incident, recall the legal threats made by Microsoft against 17 year old Mike Rowe for his domain www.mikerowesoft.com. [Screenshot]
— Matt Ranlett
posted with BlogJet
 Wednesday, April 27, 2005
Big news announcements up-front: CLR Team coming to C# Group – Monday, May 2nd David Chappell coming to present the Indigo Roadshow at MS Building (instead of New Horizons) – May 18th MSDN Event – May 19th
The job market really seems to be picking up – we had several people with job openings, including Microsoft itself!
The first presenter – Shawn Wildermuth was running late so Michael Earls stalled for time by showing us site maps and tab controls in ASP.Net 2.0 (both taking advantage of MasterPages). A sitemap is an xml file which defines the layout of a website. A cool feature of sitemaps is a new feature called security trimming – the ability to hide tabs or parts of a site based on a user’s security role. As far as the tab control itself, just include the new Asp:Menu control and you’re pretty much good to go! Michael showed us a quick live demo (complete with demo gremlin) of a three page site using a tab control. By setting the SiteMapDataSource control, you can tie your MasterPage to the sitemap.
Shawn Wildermuth showed up about twenty minutes late but he brought food so everyone forgave him. Shawn elected to give up his time slot to Alan Griver – the group manager for Visual Studio Data. Alan’s group is in charge of data views, designer connections to data, the SQL query tool, XML tools, Visual FoxPro, the Reporting Services report writer, SQL CLR integration, and more.
Last Thursday the VB team announced that VB is going to support refactoring in Visual Studio 2005. Alan’s first demo showed off a very simple VB app. VB Refactoring supports creating a constant, creating a local variable, creating a method, reordering parameters, inline temps (removing local variables). Not available with the latest Beta 2 download, you can download and install the refactoring support from http://msdn.microsoft.com/vbasic. The quick little demo (a tiny little app that calculates the area of a cylinder) was actually very impressive, complete with animations during the refactoring process. The slick refactoring capabilities are courtesy of Refactor! for Visual Studio 1.0. The out of the box VB.Net 2005 capabilities can be purchased for Visual Studio 2002, 2003, and C# 2002 – 2005 from Refactor!
The next demo Alan showed us involved the benefits of the background compilation. The example was the creation of a property with get and set methods. When the property was changed to a readonly property, the background compiler was able to symmantically check the code and show that the readonly property should have a set method. A smart tag showed up informing us of two methods for fixing the problem – removing the readonly attribute or removing the set method. Very nice.
The snippets demo was very nice as well – small amounts of code prewritten and insertable, complete with editable fields you can tab through. The example shown was the creation of an HTML e-mail. The fields were the TO, FROM, BODY, SUBJECT, and SMTPSERVER attributes. A snippet editor will be available but Alan wasn’t sure if the editor would be included in the package or if it would be a download from the new 2005 community site. An important point about snippets is that they can include comments
A tangential conversation covered the Ladybug project – a community bug tracking and submission initiative where the community at large can contribute enhancement and bug reports (and vote on them) which are fed directly into Microsoft’s internal bug tracking system. Another method of submitting feedback to Microsoft and the Microsoft user community is the Community menu option built directly into Visual Studio. There are links directly into Ladybug and into the Microsoft forums/newsgroups.
The next demo focused on a few neat Winforms tricks.
- The first nice thing was the addition of the ability to specify a default data source type – once you pick SQL Server you don’t have to pick it again unless you need to change to something else.
- Another nice addition is the ability to change views in the server explorer. This means you can change the default view to see an object view (tables, views, stored procedures, functions), a schema view, and more. This is to give you the same views you’d get in the datasource tools themselves. You can, for the first time, see Oracle packages.
- When you use the wizard to create a new datasource, the connection string you specify is automatically saved to the app.config file.
- The ALT+SHIFT+ENTER key combo gives you a full screen view
- The Data Sources window allows you to pick columns and tables. New to Beta 2 is the ability for the Data Sources window to autodetect relationships within the data (ex. Customers -> Orders table relationship) and render them as such
- The databinding example (complete with a demo of the winform layout enhancements) was really impressive. By dragging a few fields and an entire table (child relationship) onto the form, the text boxes, labels, and data grid view were all generated automatically. Even more impressive, a manually created text box can be data bound simply by dragging a data field onto the control.
- The neat ability to data bind a combo box was really impressive – dragging a foreign key field from the parent child relationship onto the form creates a record bound to the parent record. By dragging the foreign key table onto the control causes a new binding source to be created – automatically binding the combobox to the table.
- Windows projects can be made into single instance applications (preventing multiple copies from running at the same time) by simply checking a box in the project properties dialog
- Application Events allow VB projects to be aware of app events like NetworkStatusChanged, StartupNextInstance (when the second or beyond instance of a program is started), and UnhandledException (an exception of last resort)
- The new XSD data designer is really slick – strongly typed and complete with the ability to get to user data or create new stored procedures.
- The XML editor is also really slick – if you specify a schema file (XSD or DTD) VS2005 will automatically create snippets for you. This way, if you open a node with 10 required child nodes and several attributes, simply by specifying the parent node you’ll automatically get an auto-generated snippet inserted into the code with tabbable fields.
- XSLT can now be debugged from within projects. Microsoft has hooked XSL into the debugger by having it generate IL. This enables you to step from a C# debug session to an XSLT session back to a C# debug session.
The MY keyword works like a “speed dial” into the framework. For example, to play a song in the background (different thread) all you have to do for the thread generation is use the MY keyword with the Computer.Audio namespace. To get to configuration values saved in App.Config, just use the My.Settings namespace to have Intellisense access to the elements of the config files. Eventlogging is now built into the VB framework using the My.Application.Log namespace. You can easily see how the My keyword has the potential to greatly speed the development process. In fact, the MY namespace is actually extensible so companies can extend the MY keyword with their own business objects.
The final demo was of Object binding. Alan opened a new instance of Visual Studio and created a pair of classes using the new Class Designer (anyone remember WhiteHorse?). The Class Designer allows for a drag and drop GUI that allows quick class outlines. Drop a blue box on the screen to represent a class and use the simple list editor below to add methods and properties. Drag associations between the classes and “foreign keys” are created for you. The code is automatically generated. Back to the demo –> the new ClassLibrary was compiled and then included in the original data binding demo. From that point forward, the Intellisense and data binding worked exactly like the database data binding worked. Also, changing the code will automatically update the drawing.
Alan was a great presenter, willing to redirect his demos to answer everyone’s questions. The presentation was a quick overview of a tremendous amount of stuff, and there was no slideshow presentation for the .Net UG to post on their website.
We had great turnout tonight – 78 people came to hear Alan’s presentation. A familiar face at the UGs – Marcy the DataGrid girl is back in town. Everyone say “Hi!” I’m sure some of them showed up to hear Shawn too, but he’s a local boy now and doesn’t have the same mystique he once had. I wonder if Shawn’s still a Red Sox fan? Isn’t that a requirement of living in Boston?
— Matt Ranlett posted with BlogJet
 Tuesday, April 26, 2005
VB.NET re-cap from 4/20/05. We checked out how to put scripting code into an Windows Form application. Stephen had a great test harness for using a function to perform a task based on the two variables he put in. He would change the script in the Windows Form and then take the script from the textbox and put that into the application. You could compare this to writing C#, VB.NET, or any other language on the fly. Something very similar that we talked about was using the CodeDom class to write code on the fly. Once we finished up with our discussions of how to use this in a business case we moved on to the new features of VB.NET 2.0 and VS2005. Dan gave an overview of some of the great new features like operator overloading. He demonstrated some of the features with demos and fielded questions about the new features that he had been looking at.
—Brendon Schwartz
Posted with BlogJet
 Friday, April 22, 2005
May 2nd Brad Abrams and some of the CLR team are going to be at the C# user group. I have just received a wonderful package from Addison Wesley that has a couple small gifts. This is nothing big, but it was very nice of them to send something for the group. I don’t think I will have enough for everyone so if you would like a gift put a comment/trackback on this post with your name and I will make sure you get one at the meeting.
Fine print: You must put your name in a comment on this post or a track back to a blog post about the C# meeting with Brad Abrams and you must be at the meeting to get the gift.
Update***** In response to a request from the UG leaders, we will be giving out the gift packs as raffle prizes like normal. The people who have already signed up on the blog for gifts will get ones as promised (after the meeting), but the rest will be given away as part of the C# meeting. The ADNRG want to thank the C# group for their hard work in getting great speakers and would like to continue to help them in any way they see fit.
—Brendon Schwartz
Posted with BlogJet
With the recent release of VS2005 Beta 2, a lot of people are playing around and experimenting with things like CLR queries in SQL Server 2005, membership websites, etc. Some of these people are thinking about writing their experiences down in an article format so it can be published and shared with the world. It takes time to write an article, especially if you’ve never done it before. Take a look at this set of author guidelines from MSDN (the Mecca of technical publications as far as Microsoft technologies is concerned).
Other writing aids:
Share your thoughts with the world, even if you do nothing more than write a few humble blog posts. You never know when your experiences might prove valuable to someone else.
— Matt Ranlett
In the Perimeter Mall, over by Bloomingdales, there are several seating areas with sofas, coffee tables, and comfortable chairs. These are great spots to hold a small group meeting, as the Book Club found out. Several people can easily sit around a coffee table and hold an interesting conversation without having to move any of the chairs around.
Like all the previous book club meetings, the discussions were very free-ranging and open, covering large areas of subject matter. While not specifically discussing the chapters of the ASP.Net 2.0 book by Dino Esposito everyone is reading, we did talk about website design including 2.0 components such as membership services. The conversation started out of a discussion between Brendon and Keith – they are talking about their plans to build an events server that helps keep several user group websites up to date. The design discussions of this events server turned to web services and ownership of data. The question became, is it ‘better’ to have a central events server which gets directly updated by UG leaders and then sends down to the UG website a self updating calendar, or is it better for each site to be individually maintained and have the events server be nothing more than a central calendar that gets notified of updates by autonomous user group websites. The basic question here is, who should own the data, the UG website or the central server? Brendon and Keith (and I, for that matter) feel that UG leaders don’t really want to worry about maintaining their websites – there is so much to do when running a UG, and no one is getting paid to do it. So offloading a task like the website management (or a portion of the website) to a central server which handles data storage is preferable to each web site being responsible for maintaining their own data store. There was some dissent in the group initially, but I think we managed to sway everyone to our side. Look to Keith and Brendon for upcoming implementation details.
We also talked about notification services, or the lack thereof. One of the group members was complaining that he didn’t know when the new VS2005 Beta was released until several days after it happened. He was wishing he could have signed up for an e-mail from MS to alert him when this specific event occurred. A comparison was drawn to the Saturn car company. Saturn announced months or years ahead of time that it would be developing an SUV and people could sign up for an e-mail when the SUV was released. Why, the question was asked, couldn’t Microsoft do the same thing. After some initial bickering over which implementation method was better (e-mail or RSS) we all finally seemed to agree that the difficulty lies in getting an announcement for an event that is not yet defined. With both e-mail and RSS, unless someone at the company has the forethought to create a subscription point for that particular event, the only option you have as a consumer is to subscribe to a mass mailing list or general RSS feed. The analogy here is like looking to fill a small bottle of water from a fire hose. You end up with a listening service and some kind of keyword based raw text search. No one could think of a way to subscribe to an event that hadn’t been defined yet. Well, almost no one. Brendon actually has an idea about this and he’s writing a white paper he plans on submitting to Microsoft.
All in all, this was one of the better book club meetings because we not only discussed technology, but we discussed the technology from the book we were all supposed to be reading. We all hung around until about 9:00 when we noticed the mall closing around us. Check back with the book club website, a map of the mall with the meeting location will be posted soon. We enjoyed the location enough that we’re heading back there next time.
— Matt Ranlett
note – a comment was made in the book club meeting that some of Dino’s examples from the book wouldn’t work with the new Beta 2 due to some framework and tool changes. Take a look at this post from Shanku Niyogi – the ASP.Net group program manager outlining the Upcoming Changes to ASP.Net 2.0 in Beta 2.
The time has come for us to get rid of the intro to cell phone messages that takes a minute and half. When I call Matt I really don’t want to hear my options on how to leave a message after the tone, I just want the phone to let me leave the message. If anyone works for the cell phone companies or knows someone that works for the cell phone companies can you ask if we can make it an option to turn OFF.
—Brendon Schwartz
Posted with BlogJet
I might be a bit late blogging about this, but better late than never. Apress is sponsoring a “User Group Puzzler” – the user group members can each individually create a crossword puzzle with 10 different Apress and friends of ED author last names. The puzzle should have 5 across and 5 down clues. One submission per person. For complete rules and to submit your puzzle, visit www.apress.com by April 30th
— Matt Ranlett
 Thursday, April 21, 2005
It seems you can actually say a lot with out really saying anything. As many of you might have noticed both Matt and I became really busy at the same time. I have been working on a bunch of technical projects such as BizTalk, SharePoint, ASP.NET 2.0, Visual Studio 2005 TS and Mobility, so I ran out time to blog (not that I really blog that much). Due to the fact that Matt became busy at the same time we didn't put much on the website, didn't change much on the blog and as it seemed to the world didn't put much effort into the community. I just wanted to let everyone know that we are still working as hard as ever to figure out what the .NET community needs and what we can do to improve the Atlanta community. There are a bunch of good events coming up soon so make sure you don’t miss out. If this month and next month got any better we would be in trouble.
Atlanta .NET User Group April 25th (Wow) Shawn Wildermuth – Author of a great book Pragmatic ADO.NET Alan Griver – Group Manager for the Visual Studio Data group
Atlanta C# User Group (Wow Wow) Brad Abrams and the .NET CLR Team – The CLR team that is all I have to say
Atlanta VB.NET and Atlanta .NET User Groups (Wow Wow Wow) David Chappell on Indigo David Chappell will be in town to discuss the next version of services and remoting codenamed Indigo. The presentation is scheduled on our regular meeting date so we will likely just use this presentation as a substitute for our regular meeting.
Atlanta Code Camp (Too much excitement for one month, but we will take it WoooooooooooooW!)
So as you can see we have a lot of planning and work coming up for the user groups in May. Thanks to Doug for getting this done for us. I can’t believe how many great speakers we have coming to all of our groups.
—Brendon Schwartz
This blog posted with BlogJet
I spent a large part of the last two days installing the newest Visual Studio 2005 Beta. This was quite a long process!
- First of all, I’m using Virtual Machines (VMWare’s equivalent to Microsoft’s Virtual PC) so I had to get an XP VM image working.
- Then I had to spend several hours getting my XP image upgraded with Service Pack 2 (required for VS2005) and all the latest security fixes.
- Then I had to install and format a new hard drive in the VM because VS2005 requires 2.6 GB free and my XP VM had far less than that available on its C: drive (SQL Server 2000 is also installed). Oddly enough, VS2005 required free space on my C: drive even through I was installing onto the E: drive. In fact, VS2005 Beta 2 required 870 MB free on C: and 1.7 Gb on E: – and this is without MSDN!
- Once I had enough free space on the C: drive, I ran the install program and let it go for hours unattended. When I came back, one component I had selected failed to install – SQL Server 2005 CTP. I’d run out of disk space with 122 Mb still free! Since I’ve got SQL Server 2000 installed, I’m not worried about that just yet.
Now I’m ready to do some ASP.Net 2.0 work! I’m fairly excited. I’ve got my Dino Esposito ASP.Net 2.0 book ready and I’m looking forward to creating my first website that uses a membership database. I’m going to base my work off of Michael’s recent presentation.
I also wanted to give credit where credit is due – I’m using a piece of software called Alcohol 52% to mount ISO disk images as usable DVD-ROMs. My laptop doesn’t have a DVD burner and I can’t really be bothered to copy the 2.85 Gb disk image file I downloaded from MSDN to the machine that does. I don’t really need a physical copy of beta software. What Alcohol 52% (free 30 day trial) allows me to do is use the ISO disk image file as if it were a real CD or DVD. I can even share it and use it inside of my Virtual Machine. That’s a nice bit of functionality and it really cuts down on the amount of disks I need to carry with me from place to place.
— Matt Ranlett
I have been super busy at work these last several weeks. After a long period of development with a defined schedule (I was on loan to the development team – I’m officially part of the “customer team”), I’ve entered that hectic mode where I’ve been preparing demos, testing and tightening up code releases, travelling to the customer site to ensure they feel as warm and fuzzy about our new version as we do, etc. All of this has meant lots of late nights, phone calls, and general craziness. I’m hoping that once we get the final code drop to the customers (bug fixes repairing issues discovered in the client’s labs) things will calm down again and I’ll have time to breathe. As it is, last night I ended up missing the VB meeting b/c I stayed at work until 8pm then had to rush to a local FedEx shipping facility to drop off a demo system that needed to be in the UK overnight. I was running so late that I had to call the FedEx 800 number, get them to transfer me to the local office, and pretend to be lost so they’d stay on the phone with me and stay open! It worked and I made it by the skin of my teeth. Once I was out of there, I was going to head over to the VB group, but they’d pretty much finished up so I just went home to visit my poor, neglected doggies.
Work, work, work. I’m tired of work – I want time at home so I can study up on some of my .Net stuff. Different work! Work with no deadlines feels different from work where people actually expect things from you. But seriously, it is a statement about us, those of us who work all day then go home to do more work, isn’t it? Is it a good statement? I hope so!
— Matt Ranlett
© Copyright 2009 Atlanta .NET Regular Guys
Theme design by Bryan Bell
newtelligence dasBlog 1.7.5016.2  | |  | Page rendered at 1/8/2009 3:12:52 PM (Eastern Standard Time, UTC-05:00)
Reset | Slate | Movable Radio Heat | DasBlog | Just Html | Candid Blue | Discreet Blog Blue | Movable Radio Blue
|
|