Archive for June, 2008
What: Chicago Day of Dot Net/Chicago Tech Fest (Name to be decided)
When: September 6th 2008 – 8:30 am – 5:00 pm
Where: Wheaton IIT
The Chicago area .Net based users groups are looking for speakers for our forth coming conference on September 6th.
This is a one day event that will be hosted by located at The Illinois Institute of Technology (IIT) Wheaton Campus and is a free, community based event. This means we are looking for both seasoned speakers as well as ones trying to get their feet wet. Our sessions will last between 1 – 1.5 hours and are meant to teach and enlighten the audience.
We are in process of planning a great day of learning and we need your help. We are looking for energetic, charismatic, passionate and engaging speakers. If this is you, we want you to help us out. We need your passion towards software development to fill our session slots. We are planning on having 5-6 tracks with 5 sessions per track (25-30 total sessions).
Possible areas of interested are
.Net based technologies (Linq, .Net 3.5, Asp.Net, Smart Client, MVC)
Agile techniques (TDD, BDD, DDD, CI)
If you are someone who would like to present, please send the following information to Keith Franklin (KeithF@Magenic.com).
My wife and I have had ideas for different ventures over the years. Because we always had a youngster in the house and not in school, we focused a lot on making the years before school started as happy years. This Fall, our youngest enters full day Kindergarten in Lake Villa, IL. This means that Mom and I will finally be able to get one or two of these ideas off the ground. We like the idea of an arrangement where I act as Architect on most projects and as a developer as needed. To this end, we are launching Friseton.com. Jean and I got to name the titles we wanted. She’s the president of the company. She’s been in charge of running the household for the last 13 years, so this title just seems right. I always liked the idea of a Chief Software Architect. Bill Gates gave himself that title when he stepped down as Microsoft’s CEO.
This doesn’t mean I get to quit my day job. We don’t have the resources to do this and, quite frankly, I don’t know that any of our ideas will ever generate that kind of income. We are hoping for something that will generate enough revenue to pay expenses and allow us to save for a more comfortable retirement. The current crop of ideas centers around things we would like to make available to charities so that they can run more efficiently. We are on the committees for a few different charities and know what we wish we had access to for coordination and collaboration. Our goal is to make something that helps all the issues one runs into and charge enough to make the services generate a positive cash flow within 18 months of our initial deployment. If annual net revenue ever got to $50,000 US, we’d be thrilled.
I’ll post news and update as we progress. Right now, Jean and I are learning SilverLight 2.0. She’s quite a bit ahead of me on this one, so it’s likely she’ll handle the UI portion of the site. You can check out where we are at by keeping tabs on www.friseton.com. If you subscribe to this blog, I promise that I’ll post updates as we make progress. At this point, the site represents a total of 60 minutes time in Powerpoint (to generate the banner) and VS 2008.
The site is hosted over at www.crystaltech.com. We have a developer account setup now. I have to say that I really like the admin tools they have. This is far better than others I have used. That said, I’ve only hosted through Verio and GoDaddy. Verio and GoDaddy were ok. CrystalTech has developed a web interface that is extremely easy to navigate. I’ve read almost no documentation and figured out how to setup e-mail accounts, FTP, etc. I like the fact that I don’t have to think too hard in order to get stuff working.
Tonight, I ran into a scenario where adding the SqlTrackingService to my WorkflowRuntime set of services caused the completion of a simple workflow to hang. To diagnose, I instructed Visual Studio to break when exceptions were thrown. With this, I was treated to a break in System.Data.Sql.SqlConnection.OnError. The SqlException being thrown stated “MSDTC on server ‘[machine name]‘ is unavailable.” If you look, you’ll see that MSDTC is a manual start service on Vista. To fix this issue, just start MSDTC in the Services Control Panel applet and run your workflow code again. You’ll be treated to full tracing at this point.
Some friends recently saw my resume and asked about the 40+ languages that I claim to have written code in. Essentially, they asked why I have that claim and questioned if it was even factual. I have that claim because many employers want someone who knows ‘Special Language X’ in addition to all the other qualifications. In any interview, I usually explain this as follows: “I want to make it clear that no matter what odd wrinkle you have in your system, I know enough about languages and programming in general to tackle your special case.”
Still, 40 sounds like a big number. How, exactly, did I arrive at that figure? First off, understand that many of the languages I have programmed in have had little more than two weeks of the following:
- Learn the language. This involves finding a good tutorial and burning a day getting conversant. The language choice was frequently driven by either class work, larger system requirements, or “this looks like fun”.
- Write the application. Again, this might be “deliver a PHP web page,” an assignment, or an interesting experiment.
- Deliver the application.
I have used enough of these to know that learning a new language is something that one can do in a day or two. Mastering a new language and its toolset still takes some serious time-I would guess about 3000 hours of full time use prototyping, developing and debugging in that language. Many folks tend to learn a language by learning just enough to get by. In mastery, I would say that the person also actively tries to understand the language grammar, libraries, and how the language interacts with the systems it runs on. 3000 hours just getting stuff done will not allow for mastery.
With that in mind, I’ve probably only mastered a handful of languages:
- Visual Basic (3.0à6.0)
For another set of languages, I’m just at the intermediate level. I define the intermediate level as this: the user can write moderately complex systems with minimal access to reference material. Code can be debugged, augmented, and generally ‘read’ with little to no difficulty. This encompasses a larger set of languages-some of which are cheating but included since I see so many places where things like each XML technology counts as a separate ‘language’:
- Basic (think QBasic and its relatives)
- DOS Batch programming
- Ladder Logic (programming Programmable Logic Controllers/PLCs)
- Visual Basic.NET
- x86 Assembler
Finally, there are the languages I’m a beginner in. Let’s define beginner as a language one can read and write with the assistance of the Internet and a good reference book. At some point, I have written at least a small application (~2 weeks of effort) in these languages:
- Bash shell
- Motorola Assembly
- Objective C
Is this a long list? Sure. But I also know of many folks who know far more than this. Consider any language designer or language geek. Many of these folks have actually mastered more languages than I’ve gotten to beginner on.
Finally, I want to take note of one recent observation. In the past 5 years, I have slowed down the pace at which I learn new languages. This is happening largely because C# and .NET are providing many of the facilities I would normally need to be more productive. C# 3.0 has added functional language features in the form of LINQ. Its libraries are surprisingly rich. .NET provides so many other features that I’m finding that its pace of innovation is keeping me busy enough without needing to look elsewhere to get the productivity gains I used to look for in other languages. .NET adds wonderful libraries, language features, and more at such a pace that I don’t have time for learning language X when technologies like WPF and WF are beckoning to me.
Every once in a while, Visual Studio 2008 will lock up on me. When it was in beta and even after release, I ran into a situation where it put up a dialog saying “Blah blah blah” with the options:
- Switch to application
- Continue waiting
From someone, probably either directly from John Robbins or via one of the many blogs he has recommended through his presentations, I learned that this was being caused by a managed debugging assistant. Looking around on the web, it seems that this bug has been known for quite a while. Here is the issue and why it happens as explained by a Jim Stall from the Visual Studio team (link to post):
It is possible for this MDA to be falsely activated when all of the following conditions are met:
* An application creates COM components from STA threads either directly or indirectly through libraries.
* The application was stopped in the debugger and the user either continued the application or performed a step operation.
*Unmanaged debugging is not enabled.
The reasoning is that:
1) When you’re stopped in the debugger while managed-only debugging, unmanaged threads are still running. This means that any unmanaged threads that are waiting on some timeout from managed code will continue to run. The unmanaged thread will see the timeout fire, but it won’t realize that the managed thread is actually stopped by the debugger. Thus the managed thread looks it’s deadlocked. This is not an issue when unmanaged debugging because then the timeout thread is also frozen when stopped in the debugger, and so the timeout won’t fire.
2) The finalizer for an STA COM objects needs to run code on the STA thread. So there’s some cross-thread stuff between the finalizer thread and the STA thread.
So the STA thread may be blocked by the debugger (since the whole managed process is frozen at a breakpoint), while the timeout check (on an unmanaged thread) is still ticking.
This is a race because it needs the finalization and debugger event to happen at just the right windows.
We assessed that this scenario as a rare situation. I’d expect you to see this only on very rare occasions (due to prerequisite timing issues).
If you are hitting this bogusly, one workaround is to disable this specific MDA.
Let’s walk you through disabling the specific MDA, since this problem still exists and is not as rare as these guys think. I don’t get the issue when debugging normally, but I will get it when I run Visual Studio as an admin. Running Visual Studio 2008 as admin is required if you want to deploy applications straight over to the same machine’s IIS instance-something I do often enough. Note: I haven’t run into this issue in a non-admin context in several months. I think the two conditions are somehow linked.
Please note-you have to run this sequence for every project. VS2008 will not remember your settings across invocations.
- With an open project, go into the menus and select DebugàExceptions.
Expand the Managed Debugging Assistants node.
Select ContextSwitchDeadlock and uncheck it.
- Click OK.
I hope this helps a few other brave souls out there.
Over the past month, I’ve finally taken the plunge and decided to finally read those classic technical books that everyone seems to have read (though that many have only skimmed). I’ve also been reading oddball classics that are recommended by acquaintances and folks in the know. As for the big classics that I’ve read since May 1:
- The Algorithm Design Manual by Steve Skiena
- Programming Pearls by Jon Bentley
- Peopleware by Tom DeMarco and Timothy Lister
- The Mythical Man-Month by Frederick Brooks
I’ve also been paging through my Knuth’s again. Why, oh why would I be doing this? First off, I love the act of designing systems, writing code, and just geeking out in my chosen profession. Second, I know that I needed to read these classics so I could stop being an architect with no grounding in classic computer literature. I mean, I knew what the books were all about, but that was only through someone else’s eyes, not my own. So, with this journey still in motion, what have I been learning?
First, I needed a refresher on my algorithms. I was able to get most of the exercises in Programming Pearls and Skiena with a little bit of thought and some time by a compiler. It felt good to go through Bentley’s text and figure out the really advanced, best performing solutions to many problems. It was a morale boost to see that I could still figure this kind of thing out with just a little bit of effort.
From Peopleware, I took many ideas I have for this programming shop I want to start up ‘someday’ and refined the heck out of a bunch of ideas. For example, did you know that most people find performance reviews to be demotivating? I didn’t. I thought I was the oddball that hates performance reviews and would prefer life much better if I never got another one. It turns out that no one likes these-they are stressful. Unfortunately, I also learned some things about businesses I’ve been introduced to in my area. There are a lot of poisonous businesses out there taking a great profession and turning it into something where you feel odd to be one of the following:
- A proud, 36 year old developer. In my opinion, that’s still young. Yet, many folks in the profession stop coding much before this age. I’m SOOOO glad I’m not one of those people.
- Unwilling to ship because the quality bar is not only low, it doesn’t exist. Apparently, the shipping feature matters even when things aren’t right.
- Unit testing is an OLD idea. JUnit, NUnit, and other unit testing tools are not new ideas. Shoot, Fred Brooks talks about unit testing going on for IBM back in the 1950s and 1960s. And yet, I still have a really hard time convincing folks that unit testing is important and it is an OLD idea. Unfortunately, fixing build breaks takes time when unit tests are present. They slow down development and make it take longer to get to the official test, file bug, fix, repeat cycle.
I find that my focus on my career is getting sharper. I’m seeing how I can make a difference, how to achieve it without stepping on toes and hurting feelings, and I’m seeing how fast people can be expected to change. People hate change and will only do so slowly when you are trying to move a group. People are more willing to change when they are being assimilated into a group-it feels better to be a part of the group than apart from the group. (yes, the use of ‘a part’ and ‘apart’ is intentional) At the moment, I’m trying to find a place where I can be a positive force for change and I need to make sure that I do this at a proper speed. If you know of a development shop that is top notch and just wants to get better, give me a call. I’d love to talk to you and find out what you are doing to make things happen.