I’ve recently decided to wrap up my previous at home project and start a new project code named WheelJack. I will be posting sometime in the future what WheelJack actually is, but for now you’ll just have to guess based on what I’m writing about. I will be using Team Foundation Server to manage the project, source code, work items, builds, etc. While we have TFS where I work, we do not utilize all of it’s functionality, and part of this new project is an attempt to better understand what TFS can bring to the table. I will have to admit that it’s a complete overkill for a single developer scenario, and I face a very real risk of loosing precious time dealing with TFS, but in the end I think it’s worth it. If it becomes to much of a burden, I can always switch over to subversion and re-task the SharePoint site with project management. Before I sit down and start writing code, I need to setup a new team project, determine my branching strategy, and get Team Build running for nightly and continuous integration builds. For this project I will be using the Scrum Template for Team System created by Conchango. Detailed instructions for installing a new template into TFS and creating a new Team project are outside the scope of this post. Provided that you have full administrative rights to the TFS box, the MSI installer does all the heavy lifting, and creating a new project is a 5 step wizard process. With my new project created I can begin adding work items to the product backlog, define sprints, and areas. I’ve also created a Wiki on the project SharePoint site to various information, including feature description, architecture, design and implementation details. The wiki is a great tool to use when working on a project because it is so easy to create content and organize content. With all of that out of the way for now, I can move onto creating my source tree, which involves the selection of a branching strategy. The branching strategy used for WheelJack is the Single Team Branching Strategy as defined in TFS Branching Guide version 2.0. Single Team Branching Strategy The single team branching strategy requires 3 branches, MAIN, DEV and RELEASE, where DEV and RELEASE are branched from MAIN. While I say 3, there will in fact be more then 3 actual branches. Whenever a new release is created, it gets it’s own branch. This strategy also allows for concurrent DEV branches. Working in DEV After each successful nightly build, code should be merged from MAIN to DEV. In this project, with only one dev branch, and only one developer, there will usually be nothing to merge. The following situations are examples of when there will actually be code in MAIN that needs to be merged to DEV. - Once we create a release branch, if a show stopping bug is discovered and fixed in a release branch, that change is merged to MAIN, and then merged from MAIN to all dev branches.
- If we have multiple dev branches, changes in one DEV branch could be merged to MAIN, and then from MAIN to all other dev branches.
Key features of working in DEV (taken from TFS Branching Guide) - Focus on wide, flat branches to enable steady code flow to MAIN and then back to peer DEV branches
- Work in DEV branches can be segregated by feature, organization, or temporary collaboration.
- Each DEV branch should be a full branch of MAIN.
- DEV branches should build and run Build Verification Tests (BVT’s) the same way as MAIN.
- Forward Integrate (FI) with each successful build of MAIN
- Reverse Integrate (RI) based on some objective team criteria (e.g. internal quality gates, end of sprint, etc.).
Working in MAIN Aside from the initial solution and build creation, no work should be done in Main. Working in a Release Branch Work in production should be limited to show stopping bugs. Changes should be merged into Main once completed. The following list was taken from the branching guide. Key features of working with Release Branches (taken from TFS Branching Guide) - Each RELEASE is a child branch of MAIN.
- Your major product releases from the RELEASE branch and then RELEASE branch access permissions are set to read only.
- Changes from the RELEASE branch RI to main. This merge is one way. Once the release branch is created MAIN may be taking changes for next version work not approved for the release branch
- Duplicate RELEASE branch plan for subsequent major releases. This means there will be one branch per major release.
Source Code Repository Directory Structure - WheelJack$
- DEV
- 1.0 (Version or Feature)
- 1.1 (Version or Feature)
- MAIN
- Source
- Project1
- Project1.Tests
- Project2
- Project2.Tests
- References
- BuildTypes
- Releases
- Release 1.0
- Release 1.1
- Release 2.0
- Release 2.1
Every branch from Main contains everything that is in the Main branch, including the Source and BuildTypes folder (BuildTypes contain the Team Build files that define a build). I started out by creating a new folder on my hard drive that corresponds to the root folder TFS (WheelJack$), and working my way down the hierarchy for Main, creating Source and BuildTypes folders. My project contains a server piece and a client piece, so starting with the server side, I created a folder named MessagingServer, and then created 4 projects under that folder. I also created a _Solutions folder under WheelJack which is where I store all of my Visual Studio Solution files (*.sln). The solution files are not checked into source control. Below you can see what my folder structure looks like in Windows Explorer, and in Solution Explorer. After cleaning up the project names, namespaces, and adding the correct project references, I was able to begin looking at setting up the automated builds. I’ll pick up here next time.
On Saturday May 30th I attended the first ever Chicago Code Camp. Thankfully it wasn’t actually in Chicago, but closer to Wisconsin which made the drive bearable. I rode down with Steve (thanks for driving) and I-Lin, and met up with Lance down there. Overall, the event was a great success I think, and it’s something we’d like to put on in Madison sometime in the near future. Session #1 – Introduction to AOP with Post Sharp by Michael Hall This was a good introduction to Aspect Orientated Programming (AOP) using Post Sharp (.Net Environment). I’ve looked into Post Sharp before when it first came out, but it looks like it has come a long way in terms of stability and features. AOP involves moving code which implements non-functional requirements such as logging, security, transaction management, into Aspects which can be then applied across your application. Another term for non-functional requirements would be cross cutting concerns. An aspect can be though of as a class, and is made up of advice, or methods. A common example used when describing AOP is the cross cutting concern or non-functional requirement of tracing. Typically, in each class where you require tracing, you will create a static read-only variable for your tracing object, and then in each method, you will call Trace.Write(). With AOP, you can apply an attribute to the class to perform tracing for all methods, or on specific methods. When the method is invoked, the tracing code is executed, either before and/or after the method body depending on how the aspect is coded. The advantage in this scenario is that you do not have to declare that tracing variable or write the code to write the trace statement every time. This way if you need to change the way the tracing works, you only have to do it in one location. Post Sharp provide a framework for building and applying the aspects. The aspects are applied at compile time by injecting code into the compiled MSIL code. Aspects are created as attributes by inheriting from several Post Sharp base classes, which include: - OnMethodBoundaryAspect: Used with code you own. Allows for code to be executed before and after the method body.
- OnMethodInvocationAspect: Used with code you do not own, allows for code to be executed before method.
- OnExceptionAspect: Code to be executed if an exception occurs.
- OnFieldAccessAspect: Code to be executed when a field is accessed, providing for property getter/setting like functionality on fields.
- CompositionAspect: Change code at compile time. For example, you can force a type to implement a specific interface.
Out of the box, Post Sharp gives you an incredible amount of functionality with those base classes, but you can add new custom aspects if needed. Normally Post Sharp needs to be installed with the MSI installer since it is integrating with Visual Studio. However, instructions are available for an XCopy deployment. Session #2 – Guarding your code with Code Contracts by Derik Whittaker Code contracts is a project from Microsoft Research which is being integrated into VS2010, and is available in VS2010 Beta I, or as a download for VS2008. Code Contracts are a way to define static assertions at design time, to be validated at compile and run time. You probably have written a “code contract before”, but have never realized it. A simple example is where you check to see if an object is null at the beginning of a method, and if it is, you throw an ArgumentNullExpcetion. The Microsoft version of Code Contracts replaces the If Then Throw convention with Contracts.Assert(boolean expression). So why is the Microsoft Solution better? The Microsoft solution integrates directly into Visual Studio giving you support for Static Analysis at design time. This means that if you call a method with a Contract.Assert(paramter != null) and pass in null, you will get an error at compile time, as well as a warning in the form of a squiggly line under the method call at design time. Automatic testing tools like Pex can take advantage of the code contracts as well. The real power of Code Contracts can be seen when you look at some of the advanced contracts offered. For example, you can validate that a return variable is not null, as well as validate a condition every time a method is called using the Invariant contract. Run time errors are displayed using Debug.Assert behind the scenes. This is automatically disabled in the build type is set to release. You can also handle the debug assertion yourself by implementing an failed contract event handler. Session #3 – Fluent NHibernate by Hudson Akridge This was an excellent session and probably my favorite of the conference. Hudson is a member of the Fluent NHibernate team, so he obviously is an authority on the topic, and also has a deep passion for Fluent NHibernate that is hard to reproduce. Hudson had all of his demos compiled and running ahead of time. He simply created new projects and used printed copies of the source to type from. This saved a tremendous amount of time. When time did start to run out, Hudson simply switched over to his already completed projects to finish things up. Memo to presenters, follow this approach! The Fluent NHibernate (FNH) wiki, as well as the project members blogs provide an excellent amount of documentation, that I simply can not duplicate in this blog post, so be sure to check out those resources. FNH is built on top of NHibernate, and it’s purpose is to replace the NHibernate Mapping Files (HBM) with a strongly typed fluent interface, with the goal of making the use of NHibernate easier, while producing more maintainable code. It succeeds on both fronts. FNH provides two mapping options, AutoMapper, and Fluent, both of which can be used at the same time. AutoMapper uses a convention based approach where Property and Class names map to tables in the database. This is great for simple domains and green field projects with simpler database schema requirements. The fluent interface provides for a much more granular approach to mapping, and currently supports most of the functionality provided by HBM files (most people will not know that anything is missing). The fluent interface allows you define conventions which allow you to reduce repetive mappings. For example, if all of your entities have an integer based Id field, you can define that, saving yourself from having to write the mapping code over and over. FNH does have some limitations, such as, all properties must be public. Obviously there are some situations where this is not desirable, so you could switch to HBM files, or utilize on of three work-arounds for fluent. The first two involve nesting code at some level, while the 3rd involves the use of strings to identify the non-public field names. While you loose the strong typing and compile time checking, I think I like the string option the best. Two general tips I learned during the session, was to always make your public properties virtual so that NHibernate’s default behavior of lazy loading will work. Hudson made the comment that you should not try to outsmart NHibernate’s lazy load mechanism. The only time you should consider eager load is if you have to detach your object from the NHibernate session. The other tip was the feature that allows you to generate a complete database schema from the NHibernate mappings. From comments I heard in the crowd, the schema generation is very impressive compared to other ORMs. Session #4 – Mass Transit by Dru Sellers Mass Transit is an Enterprise Service Bus (ESB) written in .Net 3.5 and is designed around simplicity and speed. I had a general idea of what Mass Transit was going into this presentation, and was hoping I would learn that it would be directly applicable to a project at work. However, it’s a little too much functionality for what we need, and that’s not a bad thing, as we could probably make use of it in the future. While I have no immediate need for an ESB at work, I was very impressed with the .Net 3.5 syntax the project uses to handle subscriptions. I’m currently starting a prototype project that could make use of an in memory service bus, and I think I will be reviewing the Mass Transit source to see what I can borrow. Coming from a BizTalk background, a lot of the features and functionality was comparable. However, whereas BizTalk costs money, Mass Transit is free, open source, and would probably meet the needs of most organizations. Both of the authors (Dru, the presenter is one of them) use Mass Transit daily in their jobs in the banking industry. Session #5 – Solid WPF by Michael Eaton This presentation could have been titled WPF and the MVVM pattern. Not that Solid WPF is a bad name, but for those of you at home, it was a talk on MVVM with some YAGNI thrown in for good measure. This is not my first MVVM presentation, and it probably won’t be the last. Unfortunately I’m still struggling to fully understand the pattern, which is partly due to my lack of experience with WPF (which I need to remedy soon). However, the approach that Michael took in presenting MVVM was different, in that he started with a WPF app coded using just the code behind, then did a copy/paste to a new project and tried a MVC pattern, and then finally worked in MVVM. Seeing the transformation of the application from the first to the third project did help solidify some of the MVVM concepts.
Some recent events have led me to do some experimenting with Windows Embedded Standard, or WES. This is an upgraded version of Windows XP embedded. WES adds support for .Net 3.5 and Software Update Services, which are the top two new features that caught my eye. One of the nice things of WES over say, WinCE, is that you have a much richer development ecosystem to work with. Everything from the Full .Net Framework, WPF, WCF, to a huge library of open source tools and utilities, and not to mention driver support. I’ve done some WinCE development in the past, and one of the best tools you can have, is the WinCE emulator. So when it came to WES, I wanted something where I could test stuff out without needing any hardware. The following walk illustrates what is needed to get a basic (and I do mean basic) WES image created and running in a Hyper-V vitalization environment. The following instructions were created were created from with help of the the Windows Embedded Standard (WES) help files, and a video tutorial by SJJ Embedded Micro Solutions. Each WES image must include 7 Core Components. - Computer Componet/HAL
- Shell Component
- Language Component
- NT Loader Component
- File System and format components
- Logon Component
I am going to select two macro components (macro components are components that are only made up of other components) in order to get those 7 core components. One of the macro components is provided for us, the other is one that we will create in order to get a HAL for a Hyper-V based VM. - Installed Windows Embedded Standard Trial edition on a Windows XP Pro SP3 Virtual Machine in Hyper-V
- Navigate to C:\Program Files\Windows Embedded\utilities and run Tap.exe as an administrator. This creates a devices.pmq file in the same directory as the Tap program
- Open Component Designer and from the File menu, choose Import. Select the .pmq file you created in step 2, then click start.
- After the import is complete, click Save from the file menu to save the .sld file
- From the tools menu, choose component database manager
- On the database tab, click import and browse to your .sld file created in step 4 and then import.
- Close Component Designer and component database manager
- Open target designer and create a new target named HyperV_Test (or whatever you want to name it)
- Your new component should be at the bottom of the components tree on the left hand side of the IDE, double click it to add it to your target
- Under Software\Test & Development, double click the Runtime Quick Start Helper marco. This adds the explorer shell, FAT, NTFS and a few other essentials
- Go to the Configuration menu option and click check dependencies. This will add additional components, such as all those required by the Component we created from the .pmq file.
- From the tools menu, click Build. According to the video by SJJ, you must select release, but I think they were using the previous version of Target Designer. I only tried release. Also, you will want to specify the exact destination that you want the “image” to be created. Target Designer will delete everything in the destination folder. I decided to use a folder structure like /WESBuilds/HyperVTest/
- Copy the resulting image to a bootable partition. I created a new VHD file and attached it to another VM running XP. From within the running VM, I used Disk Management to partition, format and mark the partition as active. Finally I copied my image files over to the root of the new partition.
- Attach VHD to a new VM and boot. The first time an image is booted, the First Boot Agent (FBA) runs and completes the creation of the image.
So what did I end up with? Well, I had a WES image running in Hyper-V that used 210MB of disk space. This is a very, very basic image. The shell has an empty start menu, there is no logon, no command prompt, no networking, pretty much the bare minimum. So while this would be a good start for a final production build depending on requirements, its not very functional for development. I hope to be able to expand on this image and add the following: - Hyper-V extensions?
- .Net Framework 3.5 SP1?
- Networking and Firewall?
One question I have is, if you leave something out of an image, is there anyway to add it at a later time? For example, if you have no requirements for a web browser, and a media player initially, but need to add support in the future, what is the best way to implement? Lot’s of potential with WES, and I’m looking forward to learning more about it.
Below is a quick overview from the TechEd 2009 Keynote. It was focused on the IT side of things (vs. the developer side). - Group Policy settings for BitLocker to Go. One option will dis-allow writing to a removable drive if BitLockerToGo is not enabled for that drive.
- AppLocker
- Specify allow or disallow by publisher
- Use rules like version 1.0 or higher from Publisher X and Program Y. This allows you to allow a specific application to run, but not have to update the rule when a new version comes out (like you did in the previous version).
- Problem Steps Recorder
- End-User can record problems as they re-produce them. Creates a zip file that contains a compiled html file and a series of images.
- PowerShell V2 included in Windows 7.
- PS v2 can target remote computers.
- Also looks like it comes with a IDE for power shell.
- Enterprise Desktop Vitalization
- Seamless virtualization experience for end users. They really don’t even know stuff is virtualized, aside from possible the window chrome looking different, and a red outline around the window
- VMs can be configure to expire
- Restrict VMs such that data can not be copied off of them
- Office 2010 preview released in July
- Server 2008 R2 and Windows 7
- Server 2008 R2 is 64bit only
- Server 2008 R2 and Win7 tracking for holiday 09 release
- Mount and interact with VHD files in Win7 and R2, boot from VHD, and patch VHD’s while they are offline.
- New Active Directory Undelete feature
- Iain McDonald – Server Manager from MS
- Option to “View Script” in the Management GUI’s and see the power shell script that is being executed. Allows you to quickly learn how to write scripts for management.
- Says that most people who have Live Migration (VMWare) don’t use the automated migration, but manually move stuff around.
- Clustered Hyper-V in R2 will support migration between physical hosts with different specs, processors, etc.
- Remove core dispatcher lock to allow apps live SQL Server to scale very well
- File Classification Infrastructure:
- Find files by keywords and then set policies for those files. For example, search for all documents with company confidentiality statement and move them to a secure folder leaving a symlink in the original location, and setup links in a SharePoint site.
- OCR technology built into R2 for searching for text in images.
- Use FCI to do housekeeping, clean up old files, etc. For example, if a file is older than 10 years, or hasn’t been modified in the last year, delete the file. However, send a warning to the owner of the document 15 days before.
- Exchange 2010
- Search e-mail by keyword and apply policies
- Outlook Web Access (OWA) is now able to view protected documents
- OWA can search documents in e-mails
- System Center Virtual Center
- Shows the “View Script” feature
- Migrated a VM running streaming video from one host to another with no noticeable disruptions.
From Twitter: - Something called “Windows Phone” announced in a Windows Mobile 6.5 session. Confirmed as a phone (hardware) created by Microsoft running Windows Mobile 6.5. Actually it sounds like it is made by HTC and looks like the touch HD. Can’t find anything online about this as of yet.
- The ability to ignore a thread in Exchanged 2010
Back in March, I posted about creating a custom authorization filter to enable Partial SSL. While using the filter on an application I was porting to Windows Azure, I discovered a bug, which has led me to revisit my implementation. Here is the original code.
1: public class RequireSslFilter:AuthorizeAttribute 2: { 3: protected override bool AuthorizeCore(HttpContextBase httpContext) 4: { 5: if (httpContext.Request.IsLocal == false && httpContext.Request.IsSecureConnection == false) 6: httpContext.Response.Redirect(httpContext.Request.Url.ToString().ToLower().Replace("http", "https")); 7: 8: return base.AuthorizeCore(httpContext); 9: } 10: }
As you can see, I’m calling base.AuthorizeCore at the end, which is what you usually do when overriding a method. However, since the purpose of he Authorize Filter is to, well authorize, the call to base.AuthorizeCore will return false if the user is not authenticated. This is a problem because you might not be authenticated at the time that this filter runs.
The reason I chose to use the Authorize Filter, is because it’s called before any other filter, as explained by Phill Haack. At first I thought about removing the call to the base.AuthorzieCore, but that seemed more like a hack, then a correct solution. Digging deeper, I discovered that the AuthorizeAttribute that I am inheriting from, implements the IAuthorizeFilter, which requires you implement the OnAuthorization method. So instead of inheriting from AuthorizeAttribute, I could just implement IAuthorizeFilter.
However, someone already did it for me. In the Asp.Net MVC futures project, released with the Asp.Net MVC RTM source, there is a RequireSSL attribute ready to use. The future’s project has more functionality then mine, allowing for the option to redirect or throw an exception. It’s nice to see I was on the right track at least.
RequireSSL Attribute from Asp.Net MVC Futures:
1: public void OnAuthorization(AuthorizationContext filterContext) { 2: if (filterContext == null) { 3: throw new ArgumentNullException("filterContext"); 4: } 5: 6: if (!filterContext.HttpContext.Request.IsSecureConnection) { 7: // request is not SSL-protected, so throw or redirect 8: if (Redirect) { 9: // form new URL 10: UriBuilder builder = new UriBuilder() { 11: Scheme = "https", 12: Host = filterContext.HttpContext.Request.Url.Host, 13: // use the RawUrl since it works with URL Rewriting 14: Path = filterContext.HttpContext.Request.RawUrl 15: }; 16: filterContext.Result = new RedirectResult(builder.ToString()); 17: } 18: else { 19: throw new HttpException((int)HttpStatusCode.Forbidden, MvcResources.RequireSslAttribute_MustUseSsl); 20: } 21: } 22: }
Since my last training update post (Indoor Triathlon), I’ve had a couple of rough weeks. Immediately following the indoor tri, I was out of town in Las Vegas for over a week. Biking was non-existent, I got a little bit of swimming in, and also some running. The running was really slow as I didn’t know how long my route was ahead of time, and my new Gamin Forerunner 305 was waiting for me at home. Back from vacation, I set about picking up where I left off. My biking performance was the most impacted, with running and swimming close to wear I left off. This makes sense since I got no biking in, running was focused on base building, so not much to loose, and swimming was focused on technique, which I didn’t seem to forget. However, by the following week, things were back to normal, at least for a couple of days. About a week and a half after my return from Vegas, I came down with the stomach flu, which sidelined me from Wednesday to the following Monday. Once again, my biking was shot, and running was about the same. In addition to the stomach flu, our community pool was closed for a annual maintenance and I lost out on 3 swim workouts. However, I’m still doing pretty good on the swimming. My 200m intervals are a couple of seconds slower then they were before, but today I swam 1000m and then did 8x75m on 1:15 (actually a little faster). I’m also starting a 4 week master swim program in a couple of days, and I’m really looking forward to some instruction/coaching. With the unusually warm weather we had this past week, I decided it was time to switch over to biking outdoors instead of on the indoor trainer. I forgot how much wind resistance plays a roll in outdoor riding, and I’m really thinking a tri-bike would make things easier ;) I got in 21, 24, and 30 mile rides and I am looking forward to the most riding I’ve ever done this season. The 24 miler, was supposed to be 43 miles, but unexpected rain and an unsure forecast forced me to cut my ride way short. I did however complete my brick workout by doing a 30 minute run after the bike, and that went really well. While the route was a little flatter then what I have been running on, it was still a great confidence builder to feel as good as I did on the run after 24 miles on the bike. This season, starting sometime in may, my goal is to ride to/from work at least 3 times per week. I will be incorporating a specific bike workout on the ride home at least 2 times per week in order to continue to build my bike skills. This will be in addition to my long Saturday endurance ride, which will feature quite a few attempts at the Ironman Wisconsin bike course. A co-worker of mine also gave me some info on local coach who offers bike classes 3 times per week, but at $20 per class, I’ll probably only do a few this season just to try them out. What’s a training update without some new gear? I mentioned earlier that I picked up a Garmin Forerunner 305, and could not be any happier with it. The constant knowledge of how fast your are going is great for training. I was a little worried the Garmin software wouldn’t work on my 64bit Windows Server 2008 install, but it installed and runs great. It’s not crappy software either, it actually has a decent UI with lots of meaningful data. I think one of the coolest features of the software and watch, is the ability to program in workouts, like interval sets. Using the software, you can program something like, warm up in zone 3 for 10 minutes, then do a 30 second sprint in zone 7 followed by a 30 second cool down, repeat 10 times. If you are looking for a wrist mount GPS for running or biking, look no further then the Garmin 305 (I think it’s better then the 405 even). The price on the 305 has been slashed. I got mine off E-Bay, new, for around $130. I just saw Bet Buy advertising it for $149 as well. Next up is the iBike Aero power meter I purchased for my bike. After training with a power meter on the stationary bike all winter, I just couldn’t see switching to outdoor riding without one. Not only that, but the data I get off the iBike and the analysis provided by Training Peaks is worlds better then the average watts I’d get off the stationary bike. I picked up a used iBike Gen 2 Aero for $314 off E-Bay, and then used the iBike upgrade program to get a brand new Gen 3 unit for only $249. So instead of paying $799, I only had to pay $563. Getting the wireless sensors mounted turned out to be a longer task then I had anticipated. You need to have at least 12 inches, if not more, between the cadence and speed sensor, or you will get whack readings. The speed magnet that goes on the wheel also gave me a good deal of trouble, as I couldn’t seem to get it tight enough to keep it in-place without deforming it. The iBike is a little more complicated then the Garmin, but I don’t consider that a con in anyway. The calibration rides were pretty easy, at least easier then mounting the wireless sensors. The amount of information available from the iBike is overwhelming, and I will need to finish reading the instruction manual to learn all the features and how to begin to interpret the data. Thankfully I also picked up a book, “Training and Racing with a Power Meter” which has a lot of good info on how to interpret, and act on the data provided by a power meter. With the acquisition of the Garmin Forerunner 305 and iBike Aero, I’ve gone back to TrainingPeaks.com and signed up for a premium account. While BuckeyeOutdoors.com is free, and has some nice features (Interval and Race specific workout entry), the analysis features in TrainingPeaks is too much to give up. Also, you can upload workouts from the Garmin and iBike to TrainingPeaks, and this saves on a lot of data entry. I had only wished I would have made the decision earlier, as not only did I spend an hour moving the last 8 weeks worth of workouts over to TraininPeaks, but now I’m in the middle of my training plan, and can’t very easily switch over to the virtual coaching (training plan) that Training Peaks offers. I think I’ll wait until after my first race in June and then look to make the adjustment over to the TrainingPeaks virtual coach. Until next time.
I’m using LinqToSql as a quick way to access my database for some brownfield testing. I needed to execute a stored procedure that returned a result set, but after adding it to the LinqToSql design surface, I noticed that the return value was set to none, and I was unable to change it. This stored procedure had two exec statements, and a Set Transaction Isolation level statement as well. After commenting these out and re-adding the stored procedure to the design surface, I was still faced with a return value of none. I ended up deleting the stored procedure, rebuilding, and then re-adding. This finally resulted in a auto generated return value. I then uncommented the lines I had previously commented out. While researching this, I found some other people with a similar problem, and rebuilding helped a few people, but not all, so your mileage may vary.
This is the first of a two part post on my trip to Las Vegas for the Microsoft Mix 2009 conference. This first part will focus on Las Vegas from the tourist point of view, with part two focusing on Mix itself. Hotel This was my first time in Las Vegas and I stayed at the Trump Hotel, which is only a 5 minute walk from the strip (Las Vegas Blvd). Located on Fashion Mall drive, it is on the North end of the strip (Fasion Mall Drive is across the street from the Wynn). I highly recommend the Trump Hotel, and both my wife and I enjoyed our stay there. The room was only $89/night plus the mandatory $15 resort fee (which seems to be common). The rooms themselves are like a studio apartment, complete with enough of a kitchen to cook some basic meals, and a huge marble tiled bathroom with a whirlpool tub. There is a 32” LCD TV in the living area, and a 9” LCD in the bathroom mirror. I’m surprised they didn’t have a LCD TV next to the toilet to go with the phone. I didn’t do any cooking, but I did make use of the refrigerator to keep some beverages available. They have a pretty nice exercise room, and a pool area with lots of room to just layout in the sun. The pool isn’t fancy, there are no fake rocks, slides, or kiddie play areas, but it is quite functional and heated. In addition to the pool, there are two hot tubs and two rows of cabanas available for rent. While I didn’t walk around to the other side, I noticed on the model of the hotel property which was in the lobby, that the other side had additional room for sun bathing. I saw a couple of kids in the pool, but for the most part, it was pretty quiet, and I was even able to get in some “lap” swimming on Thursday night before the pool closed. The Strip I spent a lot of time walking up and down the strip, before and after my wife came. There is quite a parity between walking the strip at night, and heading over to the Venetian for the conference in the morning. At night, it’s like you see in the movies, big crowds and bright lights, while in the morning it’s like any other busy downtown city street. I noticed a good number of people out jogging on the strip, and I just couldn’t pass up the opportunity to go running in the idea morning weather. Maybe it was the result of being inside all winter, but the air smelled very fresh in the morning, and I really enjoyed the two runs I got in. I was pressed for time, so I was only able to do a 30 minute run (15 out and 15 back), which got me as far south as south end of Caesars Palace one morning, and up to the Stratosphere on the other morning. A good amount of my time was spent in the Venetian and Plazo, since that is where the conference was, and by the end of the week, I felt pretty good at navigating the labyrinth under the two hotels. I think that the Venetian and Plazo were my favorite hotels to wander around in. My wife really liked Caesars Palace and the Forum shops (so much that I had the pleasure of walking all the way thru the Forum shops twice) due to the roman architecture and theme. Everyone says the Wynn is awesome, but I must have missing something because I was unimpressed given the high praise. I think I ended up catching the TI Pirates/Siren show 3-4 times during the week. You can get a pretty good view from across the street, and it’s usually less crowed on the north side (closest to the Fashion Mall). However, I would recommend watching it at least once from the “front row” which would be on the bridge that leads to the hotel, closest to the Siren’s ship. Also, the show is more impressive in complete darkness, as you get to see the full light show. Also at TI, is a most excellent brunch buffet, offered on Saturday and Sunday until 4pm I believe. Without champagne, it’s only $17/person, which is really cheap compared to other buffets and sit down restaurants in Vegas. Considering a large orange juice would easily run you $3/glass, and I had two, that’s $6 right there. The line was long, but moved fast. They have a VIP line, so if you hunt around, you can probably get your hands on some VIP tickets and skip the line. Other notable dining experiences were Del Torro (Lamborghini resturant) in the Venetian, and the Harley Davidson Cafe towards the south end of the strip. Shows and Attractions We saw two Cirque du Soleil shows, Ka at the MGM Grand and Mystere at TI, and they were freckin awesome. I was a little apprehensive about spending $400 on show tickets, but it was worth it. I highly recommend spending the extra money and getting the best possible seats you can. We had front row seats for Mystere and were able to see everything in such detail, from the performers costumes to the expressions on their faces. The half price ticket place was actually a pretty good deal. Right now if you buy online thru Ciruqe Du Soleil, you can get two category 1 tickets for $257.50 after a 25% discount and all fees, where as we only paid $218 a the half price ticket place. Ka is the only Cirque du Soleil show that has an actual story line to it, set in ancient china I believe and follows the ordeal of a young brother and sister (prince and princess) caught in the middle of a war. It is a high energy performance with incredible choreography, stunts and martial arts. My wife described it best as live action anime. Check out the trailer on youtube, and another video that shows some of the mechanical engineering behind the scenes. Mystere is similar to Ka without the storyline and martial arts influence, however it is no less incredible. It would be hard to choose just one. Next time we are looking to go to O, and then change things up with the Blue Man Group. On our last full day in Vegas, we rented a BMW Z4 convertible and drove to the Hoover Dam. The last 4 miles to the dam was bumper to bumper traffic, as all the weekend visitors were trying to get back to Arizona, and it’s only a 2 lane road over the dam. However, they are working on a 4 lane highway and brand new bridge over the river just south of the dam, which looks impressive itself. We opted for the 45 minute power plant tour, and felt a little underwhelmed. We both thought that the 2 hour dam tour might have been better, but we didn’t have enough time for that. Needless to say, it was somewhat of a downer coming back home to cold weather, and snow. Both my wife and I were looking for Vegas deals all week, and we will definitely be going back sometime.
On Wednesday, March 25, the first meeting of the Madison All.Net special interest group (SIG) was held at Herzing College. The All.Net SIG is all about discussing all things related to Microsoft .Net technologies in an open spaces style meeting. Instead of the lecture hall style room we traditionally use for the Madison .Net User Group meetings, we opted for a classroom style room due to the format of the meeting itself. Aside from a brief survey form I created to get an idea on what people were interested in, we had no set agenda. Below are the results of the survey, which I took to get a general idea of what people were looking to get out of the group. Just because something didn’t get a lot of votes (i.e. Windows Embedded only got one vote, which was me) doesn’t mean people can’t come to a meeting to ask for help, share their code and participate. Topics | Asp.Net MVC | 8 | WCF | 5 | Windows Mobile | 2 | | Architecture | 8 | Project Management | 5 | Windows Forms | 2 | | Silverlight | 8 | SQL Server | 4 | IIS | 2 | | Agile | 7 | Asp.Net Web Forms | 4 | BizTalk | 2 | | Test Driven Design/Development | 7 | TFS | 4 | Other ORM | 1 | | Entity Framework | 6 | WPF | 4 | XNA | 1 | | Alt.Net (General) | 6 | Sharepoint | 4 | Linq2Sql | 1 | | Domain Driven Design | 6 | nHibernate | 3 | Windows Embedded | 1 | Topics – Write-in Suggestions Scrum, Prototyping, Requirements Gathering and Analysis, Networking (Wired, Wireless, etc), Dynamic Languages (Iron Ruby/Python), Security, WMI, Debugging, Best Practices, Subversion, db40 SQL CE, Sync Framework, Ado.Net Data Services, Azure Meeting Formats | Group Project | 8 | Peer Code Reviews | 6 | Open Spaces | 3 | | Pair Coding | 6 | Scheduled Topics | 6 | Guest Speakers | 3 | After the survey, I talked about the Mix09 conference I attended last week. This was a two way discussion, with lots of good questions, and not a presentation (no power point at all!). We talked briefly about Silverlight 3, Blend 3 (Sketchflow), Expression Web 3 (Super Preview), and .Net RIA services. While we were enjoying some Pizza, we watched a bit of the Bill Buxton/Scott Guthrie keynote, and had a good laugh at Scott’s intro video. After the Pizza break we started looking at the Entity Framework, and some ideas on a group project. I did a quick tally in my head of the technologies people were interested in, and Asp.Net MVC, ORM (EF, nHibernate, etc), and general architecture were the top 3. I sketched out a pretty lame diagram showing how we could create a project that allowed us to tackle the top 3 (and other) technologies. The project I proposed was basically a typical 3 tier application consisting of a Asp.Net MVC front end, domain layer (business logic/objects), and a data access layer implemented using a variety of ORMs. The reason for working with multiple ORMs, is that everyone has different needs, wants and desires, and we’re trying to be as inclusive as possible. I think almost everybody has some type of standard they need to use at work, and in addition to pushing the boundaries of technology they be already familiar with, they also want to try new things, and see how things work when implemented with a different ORM. In order to allow for the use of multiple ORMs, I suggested the use of a repository pattern, which in simple terms, is a in memory collection of domain objects. To implement, you define a set of interfaces in your domain (business layer), and then create concrete implementations of the interfaces for each ORM you wish to implement. This is quite a common approach in Domain Driven design, and in the Alt.Net space, however, it’s usually done to aid in the testability and maintainability of the code base. The following is my best attempt to create a list of all the web sites and projects that I referenced during the discussion (in no particular order). It is important to note that everyone’s implementation and terminology is a little bit different. I don’t believe there was any final decision made on if or when we will start a group project, but I am excited to continue to talk about this. I already got one e-mail from someone who attended asking for examples which is why I included the list above. Our next meeting should be around April 15th, but be sure to check the MadDotNet web site for the official date and time.
Even though I’m not actively developing in BizTalk these days, I still have a need to go in and do some support on an existing system a couple of times a year. Of course it takes me a little bit to get back into the BizTalk frame of mind. Today, I had to make a couple of changes to an orchestration and deploy. Part of this process involved un-enlisting several receive locations while I made this change. When I re-enlisted the receive locations and went to check for problems, I noticed that all of my messages where not being processed due to there be no subscription setup for them. I knew that my orchestration should be subscribed to these messages, and thankfully BizTalk creates a suspended message instance that lists the context of the message at the time of the routing failure. I immediately noticed that none of my promoted properties were in the context, which would explain the routing issue. It took me a while to figure out how to fix this, but in the end I noticed that the receive pipeline on my receive locations looked incorrect. Checking a staging server, documentation, and an XML copy of the bindings I exported before the change, I confirmed my suspicion. It seems that during the the deployment process and the un-enlist and re-enlist, some of my receive locations reverted to the default pass thru receive pipeline. After changing them back the XML receive pipeline, things are all good.
|