 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
 Wednesday, April 20, 2005
It’s recently been a very busy couple of weeks for me, causing me to miss several user group meetings. I also forgot to update the Mobility website for an entire month! I’m really sorry about that. I’ve also been having Exchange problems – the server ended up having hardware problems that required complete replacement (replacing the motherboard and both hard drives didn’t fix it). All of this trauma aside, we managed to have a very successful UG meeting.
Michael Earls presented a topic totally unrelated to Mobility programming, membership services with ASP.Net 2.0. Beginning with a few slides to introduce the basic concepts of Members, Roles, and Profiles, Michael quickly dove into a demo where he built an entire website with a membership database and login capabilities right in front of the group. The demo went extremely well; even when Michael couldn’t get a tool to work, he was able to show off the depth of his knowledge by attacking the problems in different directions. All this while fielding questions from the group! Extending the scope of the discussion a bit, Michael also showed off Master Pages and some of the new Beta 2 capabilities. Refactoring, Intellisense support of custom types, generics, etc. I hope he’s ready to represent this discussion (again – Atlanta isn’t the first group to see this particular presentation).
Following the meeting and the traditional raffle of prizes provided by our sponsor (everyone say “Thanks” to Doug Turnure at Microsoft for both the continuously available meeting space and the incredible wealth of swag), the Mobility UG leaders got together to discuss the future of the group. We talked about widing the scope of our meetings to include more presentations on other .Net topics. The general feeling of the group leadership is that we seem to be running out of mobility topics due to a lack of presenters in the area. So if anyone wants to present mobility topics, feel free to contact us and get yourself scheduled!
— Matt Ranlett
 Tuesday, April 12, 2005
When learning .NET I find it useful to have a couple different methods of learning. Here are some of the learning resources that I use.
First, I find that if I want to learn a topic thoroughly I turn to books or SDK documentation. I find that books give a more straightforward approach to many topics than just trying to find article to read on the web. Next I go to training classes, which could include anything from webcasts to in person training such as Dunn Training or Developmentor. These classes can help get you up to speed on a topic in fractions of the time it would take you to learn them on your own or to ask your friend in the cubical next to yours. Then to stay up to date or to learn new topics I attend user groups or free events. These are such thing as the C# User Group or MSDN Events. These are a great way to talk with other developers and to learn about a topic that you find interesting.
Here is my list of how I would rank these training materials based on Content per dollar: 1) Books – Best return on the amount of money they cost and if you have time to read it you will probably know more about the topic than listening to someone tell you about it. 2) Training classes – Even though it costs a little more than a book, these are well worth the cost and are life savers if you have to learn something very quickly. These are also great if you are not directly paying for them because the content per dollor goes up considerably. Also you have the opportunity to ask the instructors questions on topics you don’t understand, which will make learning much faster and more in depth. 3) User Groups – Well I bet most of you thought I would put this as the number 1 bang for the buck deal, but in most cases I feel that the books and training are more in depth on topics. I think that user groups are great if you want training that is low cost and you have time to go to them. Don’t get me wrong even at number 3 it is still a very important part of being a developer.
Based on cost: 1) User Groups – These are the best way to learn current and new topics without having to spend any money and they are usually after hours, which make them easy to get to. Also you might win prizes that make them an even better deal. 2) Books – If you are willing to put in the effort to read the book you will have a great return on the money. What I have found is that most people actually don’t read the entire book they skim through chapters they don’t find interesting. I feel those people are missing out a little bit because it always happens that I find something I didn’t know about in those chapters I wasn’t interested in reading about. 3) Training classes – Aside from Microsoft Webcasts which could be consider under user groups, training classes usually cost more money and are held for a limited amount of time. If you don’t think of your questions during the event, people tend to usually shy away from emailing the instructor to ask how to accomplish something.
Overall summary: 1) Books – 1.5 Ranking 2) User Groups – 2 Ranking 3) Training – 2.5 Ranking
Like I said in the beginning, I use all of these resources. Just because I list them on how I use them doesn’t mean that is how you have to use them. Actually, let me know what you think, tell me how you would rank these learning resources or if you have others that I didn’t talk about.
--Brendon Schwartz
© Copyright 2009 Atlanta .NET Regular Guys
Theme design by Bryan Bell
newtelligence dasBlog 1.7.5016.2  | |  | Page rendered at 1/8/2009 3:10:37 PM (Eastern Standard Time, UTC-05:00)
Reset | Slate | Movable Radio Heat | DasBlog | Just Html | Candid Blue | Discreet Blog Blue | Movable Radio Blue
|
On this page....
Search
Navigation
Categories
Blogroll
Sign In
|