Step 4 – Show up in the community

Community involvement is one of the most, if not the most important thing you can do to increase your marketability. In yesterday’s post I stressed the importance of public speaking. Whether we realize it or not, we are constantly speaking in public, even if the public is a small crowd. A meeting with your boss, the project team, staff meetings, even simple group lunches are all places where we speak before small crowds. User groups, code camps, and conferences are places where you can practice the kind of public, technical speaking that will make you valuable. Nervous? Do it as a group. Partner up with one or two friends so none of you has to speak more than fifteen or twenty minutes. Or participate in something like the recent IPSA Idea Spark, where each presentation is limited to no more than five minutes. Don’t worry about whether a user group will want you. As a leader in several user groups I can assure you we are constantly in need of speakers, and will gladly welcome first timers to our meetings.

But community extends beyond the borders of a user group. Blogging can be a very effective way of communicating your ideas and participating in the community. Even better you can do so freely or inexpensively via sites like WordPress.com, who offer free hosting to blogs. You can also participate in forums. In addition to those on MSDN and TechNet, sites like SQL Server Central offer forums focused on a particular discipline.

You can also participate with your coding skills. Sites like MSDN Code Gallery allow you to post samples for your particular expertise. I have two sites there myself. Or you can participate in one of the many open source projects on such sites as Code Plex or Source Forge.

Finally, consider joining an on-line community at someplace like Twitter. I have met many, many good people through Twitter, and using it can communicate with them on a regular basis.

The critical point here is that community builds relationships, and these relationships are vital to your career. Sometimes these will help you find good people to work with. Sometimes they can help you find answers to difficult questions. Sometimes it’s just about good friendships. And yes, sometimes they can even help you find that next job. It is these relationships that will form the cornerstone to your success.

Step 3 – Understand the business

By far, the people I see who make the most money in the marketplace are those that have a good understanding of both technology and business. I’ll never forget an important business lesson I learned many years ago, from a former boss. Businesses are there for one reason: to make money. It may sound a bit harsh, but let’s face why else would you go into business. Hopefully the business is the type that wants to do so in a moral, ethical way, and in a fashion that makes both the business and the customer feel good.

If you’re like me, you got into technology because it’s “cool”. We love making the electrons sing and dance within the computer at are whim. However, our bosses, or customers, our internal business partners don’t necessarily share our love of tech. In order to get the approval to implement our new whiz-bang project, we need to be able to do two things. First we need to determine the benefit to the business. How much money will the company ultimately save by implementing your project? What will the increase in productivity be? Being able to identify the benefit to the company is crucial.

Once you have identified the benefit, you need to be able to communicate it. Avoid techno-jargon, all it will do is make your listeners eyes glaze over and cause them great confusion. Learn how to speak in terms the business understands. In order to learn the language of business, once per quarter read a book on business strategy. If you don’t have time for reading, consider an audio book. Unlike programming books, business books work well in audio format. Listen in on your Zune as you work out, drive to work, or do those household chores.

In order to communicate clearly, I would highly suggest the Toastmasters organization. Just think of them as a user group for speakers. Going through the program will help you learn to organize your thoughts in a clear and coherent manner.

Having a good understanding of business, in addition to technology, will help you succeed in the highly competitive marketplace of today.

Step 2 – Learn iteratively

There are many ways to learn. Attending a presentation or live webcast is great because you get what I call “condensed knowledge”. You get the results of someone else spending thirty to forty hours of learning and working to condense it into a one to two hour presentation. You also get immediate feedback, you can interact with the presenter and ask questions. On the downside, if you missed something, you missed it (unless the presentation is recorded). These are great for getting an overview, however you won’t really get deep technical understanding out of a presentation like this.

The next step beyond a live presentation is a recorded webcast or video, such as those produced by DNRTV. These are great because you can pause them, rewind, and listen multiple times. However, you lose the ability to get immediate feedback from the presenter, and like live presentations it’s condensed knowledge.

Online reading is the next area available to us for learning. Blogs, MSDN, TechNet, etc. These have a much deeper level of information than previously mentioned formats. Plus they tend to be updated as changes are made. However, there do tend to be some limitations. Content is not quite as polished as a book as often it does not go through professional editors. Also, while the content will be more in depth than a presentation, it will still be limited in scope. It will be rare to find the equivalent of a book given out for free in a blog. Most of the time it will be equivalent to a really long magazine article.

This then, brings us to good old fashioned books. For true topical mastery, there’s nothing like a good thick book filled with code examples for learning. Some pundits are already predicting the death of the print book. However, in my opinion print is simply a medium. Books could be read online, or downloaded to something like a Kindle. Whatever the form, it’s still an in depth presentation of content.

So does this mean you should favor books over other forms of learning? Absolutely not. If you recall yesterday’s post, I mentioned being able to keep up your base. Podcasts, webcasts, user groups, and blogs can be great ways of doing just that, while using books for honing your expert skills in some topic.

Deciding on a delivery mechanism for your learning is the first step. Now you need to decide the process. Learning is a gradual process. It takes learning a little something every day for it to take hold. Even as little as 20 minutes a day can rapidly bring your understanding up to new levels. Avoid cramming, cramming works for short term but studies show long term retention is not good. For ultimate learning, start with a goal. Decide what you want to know. Then gather the materials you’ll need: books, articles, manuals, blogs, etc. Next, schedule the time. As I mentioned you want at least 20 minutes a day devoted to learning. Turn off your e-mail, close your twitter, turn off the radio, close the home office door, and focus on the material.

Practice what you read as well. Type in the code samples, run them, debug them, step through the code line by line. Make changes and see how it affects the flow of the code. Find the patterns and practices for your environment and try them out.

Using an iterative process you will soon be on your way to expert level knowledge.

Step 1 – Become an expert

Last week I did a presentation on “How to become a more marketable software developer”. I thought I would spend this week going over each of the five steps. Today we’ll discuss the first step toward becoming more marketable, “Become an expert”.

image While “Become an expert” sounds obvious, there are several things to consider. First, you need to pick an area that is viable. I don’t see much call these days for Microsoft BOB experts. For me, it is a mix of SQL Server Full Text Searching and SQL Server Compact Edition. For a friend of mine, Shawn Wildermuth it is Silverlight and his Silverlight Tour that is his current expertise. But Shawn’s story is one that beautifully exemplifies my next point: don’t be afraid to change your expertise!

While Shawn is known today for Silverlight, it wasn’t that long ago he was known as “The ADO.NET Guy”. Before that he was known as a co-author to many of the .Net MCTS/MCPD study guides. You need to constantly be flexible and react to the needs of the market. Don’t be afraid to retool your skill sets as new technologies emerge on the marketplace.

While you focus on an area of expertise, don’t forget your base skills. I recently heard someone describe your skills as a pyramid. Your expertise is right at the top, but it’s built upon a broad, wide foundation. Don’t forget to take some time on a regular basis to work with the basics, write some code, listen to some podcasts, read a “general programming” book so you keep in touch with the core development skills in your area.

How to be a more marketable software developer

On Thursday I am presenting a quick talk at the Internet Professional Society of Alabama. This is part of an event called Idea Spark, where multiple individuals give five minute talks. I thought it’d be fun to steer away from the normal tech talks and talk about something near and dear to all of our hearts: money!

My talk will give a few quick points on some basic, inexpensive things you can do to make yourself more valuable, and thus command a larger salary in the marketplace. I can testify these things work, having done them myself. However it’s not with out a lot of sweat equity. You’ll need to invest a fair amount of time to achieve success, but everything worth doing is worth taking the time to do right.

Here’s the slide deck in PDF format: how-to-be-a-more-marketable-software-developer

I have to give thanks and much credit to Doug Turnure, a content architect for Microsoft. He first gave a very similar presentation some time back and was gracious enough to share the slides. I took them, did some rearranging, trimming, and additions to achieve this current version which is a blend of his thoughts and mine.

I hope you find the talk and the slides valuable as you give yourself the edge in this competitive marketplace.

Second Chances – The MSDN Developer Conference

If you are like me, you missed PDC this year, and are probably pretty bummed about it. Fortunately you do get second chances sometimes! Microsoft is hosting a series of developer conferences around the country called the MSDN Developer Conference. This is a one day event that highlights the best of the PDC presentations, put on by a mix of Microsoft employees and community leaders in the area where the conference is held. I’ll be attending the Atlanta event on December 16 2008, but there are events in Houston, Orlando, Chicago, and other areas beginning in December and running into February of next year. Be sure to check the site for more info.

There will be three tracks at the event, the new Azure Services Platform, Client and Presentation, and Tools Languages and Frameworks. There is a $99 attendance fee, but if you compare that to the cost of PDC that’s quite a bargain. There’s also going to be some cool swag, and attendance is limited so be sure to register today. 

Gentleman, JumpstartTV Your Engines

Thought I’d spread a little link love today, and to start with I will point you to the http://jumpstarttv.com website. JumpstartTV hosts short training videos with one very specific, focused topic per video. When I say short, I mean short. Three to five minutes is the goal for each video. I was honored recently when asked to participate in the site, and have created a series for them on SQL Server Full Text Searching. The first video on installing was featured yesterday, but you don’t have to wait for the videos to be featured, you can see all of them by jumping to my JumpstartTV profile.

One thing to note, you will be asked to create an online profile. This is free, and it turns out very useful. You can use it to track all of the videos you watched. This makes it very convenient to come back later and refresh yourself on something you learned. In addition, the site has a “watch it later” feature. You can go all over the site picking out videos you think would be interesting and clicking the “watch it later” link. Then when you go to your profile, you’ll be able watch the selected videos one after the other. JumpstartTV has videos on both SQL Server and .Net, as well as some interesting ones in the “Misc” category, including bartending, self defense, and more.

The second link for the day is an interesting article on the simple-talk website, “Taking Back Control of your IT Career”. It was written by a friend of mine, Stephan Onisick and chronicles his ordeal of getting laid off from his company of seven years, through a period of retraing himself and ultimately landing a new job that met the needs he set out. Even if your company is nice and stable, you will find good advice for keeping your skills up in this article. Disclaimer, he does mention a presentation I did in the article, but in spite of that it’s still a good read. 😉

Next is a new SQL Server resource brought to us by the fine folks at Quest Software, it’s the new SQLServerPedia. The site is both a wiki and a series of podcast like videos you can subscribe to from your Zune or other music player. I have my Zune setup to automagically download new episodes as they come out. I believe it was @BrentO himself who clued me in on the site.

I’ve written in the past about CodeRush, the tool I refuse to code without. Well the wonderful folks at Devexpress have created a free version called CodeRush Xpress for Visual Studio. Now if you need to code on a budget, you can still enjoy CodeRushy goodness in your 2008 IDE! And it’s not even Christmas yet!

Many of you follow me on Twitter, if you don’t I’d love to invite you, I”m on as @arcanecode . Guy Kawasaki has a great article on How To Pick Up Followers on Twitter. Good article that shows some of the strengths of Twitter, and how to use them to everyone’s advantage.

Speaking of Twitter, thanks to @theronkelso I found a new service called TweetLater. This service lets you schedule a tweet to be delivered to Twitter at a later time. For example, I would like to be able to tweet that our BSDA meeting is about to begin. But as the current President I’m usually up front introducing the guest speaker, and thus not at a keyboard. TweetLater to the rescue, I can set it to auto post the meeting is starting and be in two places at once.

It’s also great as a reminder tool, I can queue up meeting reminder tweets for the entire year ahead of time and forget all about it. Another feature, you can set it to auto reply with a message to new followers, and it can even be setup to automatically follow anyone who is following you. I believe this is a resource I’ll be using a lot.

The next to final link is a reminder really, to the Alabama Tech Events site. This is a community site for posting technical events of interest to folks in the state of Alabama. Please note that the event doesn’t have to be in Alabama, just of reasonable interest to folks in the state. We’ve posted events in Tennesee, Mississippi, Florida and Georgia. If you have a technical event contact me or one of the other user group leaders to get it added.

I’ll wrap up today’s link lovefest with the site analogous to the Alabama Tech Event site, but for the entire country: Community Megaphone. This site lists events from all over the United States. You can filter by state or event type.

PDC2008 – What’s in a name?

As many of you know, the Microsoft PDC (Public Deveopers Conference) 2008 took place last week. Lots of new announcements, and in a class move Microsoft has made all of the sessions available for download from their site.

However, navigating the site, as pretty as it is, and downloading all of the sessions can be a bit time consuming. One of my twitter friends, Luciano Guerche (@guercheLE ) has posted a series of blog posts for each day with quick hyperlinks to everything for faster download. He’s even done a post on how to bulk download using Firefox and DownThemAll.

PDC 2008 – Day 1 (46 matching sessions)

PDC 2008 – Day 2 (50 matching sessions)

PDC 2008 – Day 3 (60 matching sessions)

PDC 2008 – Day 4 (49 matching sessions)

How to download PDC Sessions using DownThemAll! Firefox addon

While this makes it much easer to download, my one complaint, regardless of where you download from, is knowing what you have. Microsoft simply named each file for it’s session number, leaving you with files such as PC47.wmv or BB08.wmv. Come on folks, what’s the point of having long file names if we’re not going to use them?

So I wrote a series of batch files that will rename each file, adding the name of the session after the session number. This will make it much easier to determine what you have when browsing with explorer or when watching on your Zune. Simply copy the text below into your favorite text editor and save them as one or more .bat files.


RenamePDC2008Day1.bat
rename TL02.wmv "TL02 Under the Hood- Advances in the .NET Type System.wmv"
rename TL47.wmv "TL47 Microsoft Visual Studio Team System- A Lap Around VSTS 2010.wmv"
rename BB08.wmv "BB08 Microsoft Dynamics CRM- The Appealing Business Application.wmv"
rename TL29.wmv "TL29 Live Labs Web Sandbox- Securing Mash-ups, Site Extensibility, and Gadgets.wmv"
rename BB53.wmv "BB53 SharePoint Online- Extending Your Service.wmv"
rename BB48.wmv "BB48 Microsoft Advertising Platform- A Lap Around.wmv"
rename BB11.wmv "BB11 Identity Roadmap for Software plus Services.wmv"
rename PC12.wmv "PC12 Deep Dive- The New Rendering Engine in Microsoft Internet Explorer 8.wmv"
rename ES16.wmv "ES16 A Lap Around Windows Azure.wmv"
rename TL46.wmv "TL46 Microsoft Visual C Sharp IDE- Tips and Tricks.wmv"
rename BB58.wmv "BB58 Case Study- Bridging On-Premises with the Cloud.wmv"
rename ES30.wmv "ES30 Datacenters and Resilient Services.wmv"
rename PC47.wmv "PC47 Microsoft Expression Blend- Tips and Tricks.wmv"
rename BB56.wmv "BB56 Showcase- Industry Leaders Moving to the Cloud.wmv"
rename BB49.wmv "BB49 Microsoft Advertising Platform- A Day in the Life of a Click.wmv"
rename TL40.wmv "TL40 Dublin and .NET Services- Extending On-Premises Applications to the Cloud.wmv"
rename PC53.wmv "PC53 Building High Performance JScript Applications.wmv"
rename PC17.wmv "PC17 Developing for Microsoft Surface.wmv"
rename PC20.wmv "PC20 ASP.NET 4.0 Roadmap.wmv"
rename BB42.wmv "BB42 Identity- Geneva Server and Framework Overview.wmv"
rename BB09.wmv "BB09 Microsoft Office Communications Server and Exchange- Platform Futures.wmv"
rename TL33.wmv "TL33 Managed Extensibility Framework- Overview.wmv"
rename TL19.wmv "TL19 Microsoft Visual Studio- Bringing out the Best in Multicore Systems.wmv"
rename TL30.wmv "TL30 Microsoft Sync Framework Advances.wmv"
rename TL16.wmv "TL16 The Future of C Sharp.wmv"
rename TL52.wmv "TL52 Team Foundation Server 2010- Cool New Features.wmv"
rename PC21.wmv "PC21 ASP.NET MVC- A New Framework for Building Web Applications.wmv"
rename PC27.wmv "PC27 Microsoft Silverlight, WPF and the Microsoft .NET Framework- Sharing Skills and Code.wmv"
rename PC59.wmv "PC59 Commerce Server Mojave- Overview.wmv"
rename TL25.wmv "TL25 Parallel Programming for Cplusplus Developers in the Next Version of Microsoft Visual Studio.wmv"
rename TL10.wmv "TL10 Deep Dive- Dynamic Languages in Microsoft .NET.wmv"
rename TL03.wmv "TL03 Microsoft Visual Studio Team System- Software Diagnostics and Quality for Services.wmv"
rename BB29.wmv "BB29 Identity- Connecting Active Directory to Microsoft Services.wmv"
rename BB01.wmv "BB01 A Lap Around the Azure Services Platform.wmv"
rename TL17.wmv "TL17 WF 4.0- A First Look.wmv"
rename TL48.wmv "TL48 Microsoft Visual Studio- Web Development Futures.wmv"
rename PC58.wmv "PC58 Framework Design Guidelines.wmv"
rename BB45.wmv "BB45 Office Communications Server 2007 R2- Enabling Unified Communications.wmv"
rename TL13.wmv "TL13 Microsoft Visual Cplusplus- 10 Is the New 6.wmv"
rename BB15.wmv "BB15 SQL Server- Database to Data Platform - Road from Server to Devices to the Cloud.wmv"
rename TL49.wmv "TL49 Microsoft .NET Framework- Overview and Applications for Babies.wmv"
rename TL45.wmv "TL45 Microsoft Visual Studio Team System Database Edition- Overview.wmv"
rename TL09.wmv "TL09 Agile Development with Microsoft Visual Studio.wmv"
rename ES32.wmv "ES32 Microsoft Application Virtualization 4.5.wmv"
rename TL44.wmv "TL44 IronRuby- The Right Language for the Right Job.wmv"
rename ES01.wmv "ES01 Developing and Deploying Your First Windows Azure Service.wmv"

 

RenamePDC2008Day2.bat
rename BB36.wmv "BB36 FAST- Building Search-Driven Portals with Microsoft Office SharePoint Server 2007 and Microsoft Silverlight.wmv"
rename TL39.wmv "TL39 Coding4Fun- Windows Presentation Foundation Animation, YouTube, iTunes, Twitter, and Nintendo's Wiimote.wmv"
rename TL54.wmv "TL54 Natural Interop with Silverlight, Office, and Python in Microsoft Visual C Sharp and Microsoft Visual Basic.wmv"
rename BB57.wmv "BB57 Microsoft Dynamics AX- Building Business Process into Your Application.wmv"
rename ES29.wmv "ES29 Showcase- Windows Azure Enables - Nsoftware and Full Armor.wmv"
rename PC44.wmv "PC44 Windows 7- Programming Sync Providers That Work Great with Windows.wmv"
rename TL59.wmv "TL59 Visual Studio Debugger Tips and Tricks.wmv"
rename BB52.wmv "BB52 SQL Services- Tips and Tricks for High-Throughput Data-Driven Applications.wmv"
rename BB41.wmv "BB41 Live Services- What I Learned Building My First Mesh Application.wmv"
rename TL38.wmv "TL38 WCF- Zen of Performance and Scale.wmv"
rename PC24.wmv "PC24 Windows 7- Welcome to the Windows 7 Desktop.wmv"
rename TL07.wmv "TL07 Developing Applications Using Data Services.wmv"
rename BB04.wmv "BB04 Live Services- A Lap around the Live Framework and Mesh Services.wmv"
rename TL14.wmv "TL14 Project Velocity- A First Look.wmv"
rename BB16.wmv "BB16 SQL Server 2008- Beyond Relational.wmv"
rename ES13.wmv "ES13 How to Develop Supercomputer Applications.wmv"
rename TL55.wmv "TL55 The Concurrency and Coordination Runtime and Decentralized Software Services Toolkit.wmv"
rename PC52.wmv "PC52 Windows 7- Writing World-Ready Applications.wmv"
rename BB07.wmv "BB07 SQL Server 2008- Developing Large Scale Web Applications and Services.wmv"
rename PC51.wmv "PC51 Windows 7- Best Practices for Developing for Windows Standard User.wmv"
rename ES04.wmv "ES04 Windows Azure- Essential Cloud Storage Services.wmv"
rename BB26.wmv "BB26 SQL Server 2008- Business Intelligence and Data Visualization.wmv"
rename PC46.wmv "PC46 WPF Roadmap.wmv"
rename TL23.wmv "TL23 A Lap around Oslo.wmv"
rename TL27.wmv "TL27 Oslo- The Language.wmv"
rename PC11.wmv "PC11 Microsoft Silverlight Futures- Building Business Focused Applications.wmv"
rename TL56.wmv "TL56 Project Velocity- Under the Hood.wmv"
rename PC50.wmv "PC50 Windows 7- Using Instrumentation and Diagnostics to Develop High Quality Software.wmv"
rename PC33.wmv "PC33 Microsoft Visual Studio- Easing ASP.NET Web Deployment.wmv"
rename PC10.wmv "PC10 Microsoft Silverlight 2 for Mobile- Developing for Mobile Devices.wmv"
rename BB43.wmv "BB43 Identity- Geneva Deep Dive.wmv"
rename BB20.wmv "BB20 Live Services- Making your Application More Social.wmv"
rename BB23.wmv "BB23 A Lap around SQL Services.wmv"
rename PC23.wmv "PC23 Windows 7- Integrate with the Windows 7 Desktop.wmv"
rename BB02.wmv "BB02 Architecture of the .NET Services.wmv"
rename TL20.wmv "TL20 Entity Framework Futures.wmv"
rename PC06.wmv "PC06 Deep Dive- Building an Optimized, Graphics-Intensive Application in Microsoft Silverlight.wmv"
rename ES10.wmv "ES10 Developing Solutions for Windows Server 2008 Hyper-V Using WMI.wmv"
rename PC31.wmv "PC31 ASP.NET and JQuery.wmv"
rename BB22.wmv "BB22 Identity- Live Identity Services Drilldown.wmv"
rename TL12.wmv "TL12 Future Directions for Microsoft Visual Basic.wmv"
rename BB40.wmv "BB40 Sync Framework- Enterprise Data in the Cloud and on Devices.wmv"
rename PC04.wmv "PC04 Windows 7- Writing Your Application to Shine on Modern Graphics Hardware.wmv"
rename ES11.wmv "ES11 Developing Connected Home Applications and Services for Windows Home Server.wmv"
rename TL50.wmv "TL50 Research- BAM, AjaxScope, and Doloto.wmv"
rename BB05.wmv "BB05 Live Services- Building Applications with the Live Framework.wmv"
rename ES20.wmv "ES20 Developing Applications for More Than 64 Logical Processors in Windows Server 2008 R2.wmv"
rename PC16.wmv "PC16 Windows 7- Empower users to find, visualize and organize their data with Libraries and the Explorer.wmv"
rename ES02.wmv "ES02 Windows Azure- Architecting and Managing Cloud Services.wmv"

 

RenamePDC2008Day3.bat
rename TL06.wmv "TL06 WCF 4.0- Building WCF Services with WF in Microsoft .NET 4.0.wmv"
rename BB19.wmv "BB19 Live Services- Live Framework Programming Model Architecture and Insights.wmv"
rename TL57.wmv "TL57 Panel- The Future of Programming Languages.wmv"
rename BB38.wmv "BB38 .NET Services- Connectivity, Messaging, Events, and Discovery with the Service Bus.wmv"
rename ES14.wmv "ES14 IIS 7.0 and Beyond- The Microsoft Web Platform Roadmap.wmv"
rename BB14.wmv "BB14 SQL Services- Futures.wmv"
rename ES12.wmv "ES12 Exposing Connected Home Services to the Internet via Windows Home Server.wmv"
rename ES31.wmv "ES31 Showcase- How HP Built their Magcloud Service on Windows Azure.wmv"
rename TL58.wmv "TL58 Research- Concurrency Analysis Platform and Tools for Finding Concurrency Bugs.wmv"
rename PC27.wmv "PC27-R Microsoft Silverlight, WPF and the Microsoft .NET Framework- Sharing Skills and Code [REPEAT].wmv"
rename PC25.wmv "PC25 Windows 7- The Sensor and Location Platform- Building Context-Aware Applications.wmv"
rename TL26.wmv "TL26 Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio.wmv"
rename TL42.wmv "TL42 Microsoft SQL Server 2008- Powering MSDN.wmv"
rename PC48.wmv "PC48 Research- Designing the World Wide Telescope.wmv"
rename PC35.wmv "PC35 Silverlight Controls Roadmap.wmv"
rename TL61.wmv "TL61 Panel- The Future of Unit Testing.wmv"
rename ES25.wmv "ES25 Showcase- Windows Azure Enables Live Meeting.wmv"
rename TL37.wmv "TL37 Microsoft Visual Studio Team System- Leveraging Virtualization to Improve Code Quality with Team Lab.wmv"
rename TL60.wmv "TL60 Improving Code Quality with Code Analysis.wmv"
rename TL43.wmv "TL43 Microsoft XNA Game Studio- An Overview.wmv"
rename TL46-R.wmv "TL46-R Microsoft Visual C Sharp IDE- Tips and Tricks [REPEAT].wmv"
rename BB37.wmv "BB37 SQL Server 2008- Developing Secure Applications.wmv"
rename BB59.wmv "BB59 Behind the Scenes- How We Built a Multi-Enterprise Supply Chain Application.wmv"
rename PC22.wmv "PC22 Windows 7- Design Principles for Windows 7.wmv"
rename TL18.wmv "TL18 Oslo- Customizing and Extending the Visual Design Experience.wmv"
rename TL24.wmv "TL24 Improving .NET Application Performance and Scalability.wmv"
rename ES07.wmv "ES07 Windows Azure- Modeling Data for Efficient Access at Scale.wmv"
rename ES22.wmv "ES22 Extending Terminal Services and Hyper-V VDI in Windows 7.wmv"
rename PC18.wmv "PC18 Windows 7- Introducing Direct2D and DirectWrite.wmv"
rename TL22.wmv "TL22 Concurrency Runtime Deep Dive- How to Harvest Multicore Computing Resources.wmv"
rename PC39.wmv "PC39 Inside the Olympics- An Architecture and Development Review.wmv"
rename BB51.wmv "BB51 Live Services- Programming Live Services Using Non-Microsoft Technologies.wmv"
rename PC03.wmv "PC03 Windows 7- Developing Multi-touch Applications.wmv"
rename BB25.wmv "BB25 SQL Server 2008- New and Future T-SQL Programmability.wmv"
rename BB39.wmv "BB39 .NET Services- Logging, Diagnosing, and Troubleshooting Applications Running Live in the Cloud.wmv"
rename TL28.wmv "TL28 Oslo- Repository and Models.wmv"
rename BB06.wmv "BB06 Live Services- Mesh Services Architecture and Concepts.wmv"
rename PC40.wmv "PC40 SQL Server Compact- Embedding in Desktop and Device Applications.wmv"
rename BB18.wmv "BB18 Dublin- Hosting and Managing Workflows and Services in Windows Application Server.wmv"
rename BB24.wmv "BB24 SQL Server 2008- Deep Dive into Spatial Data.wmv"
rename PC43.wmv "PC43 Deep Dive- What's New with user32 and comctl32 in Win32.wmv"
rename TL08.wmv "TL08 Offline-Enabled Data Services and Desktop Applications.wmv"
rename BB55.wmv "BB55 .NET Services- Access Control In Microsoft .NET Services.wmv"
rename ES23.wmv "ES23 Windows 7- Optimizing Applications for Remote File Services over the WAN.wmv"
rename PC30.wmv "PC30 ASP.NET Dynamic Data.wmv"
rename PC55.wmv "PC55 Oomph- A Microformat Toolkit.wmv"
rename TL16.wmv "TL16-R The Future of C Sharp [REPEAT].wmv"
rename ES06.wmv "ES06 Developing with Microsoft .NET and ASP.NET for Server Core.wmv"
rename ES03.wmv "ES03 Windows Azure- Cloud Service Development Best Practices.wmv"
rename PC14.wmv "PC14 Windows 7- New Shell User Experience APIs.wmv"
rename BB30.wmv "BB30 Live Services- Building Mesh-Enabled Web Applications Using the Live Framework.wmv"
rename TL15.wmv "TL15 Architecture without Big Design Up Front.wmv"
rename BB32.wmv "BB32 Microsoft Dynamics CRM- Building Line-of-Business Applications.wmv"
rename ES15.wmv "ES15 Web Application Packaging and Deployment.wmv"
rename TL21.wmv "TL21 WF 4.0- Extending with Custom Activities.wmv"
rename TL33.wmv "TL33-R Managed Extensibility Framework- Overview [REPEAT].wmv"
rename PC56.wmv "PC56 Windows Embedded Quebec- Developing for Devices.wmv"
rename TL23.wmv "TL23-R A Lap around Oslo [REPEAT].wmv"
rename BB28.wmv "BB28 .NET Services- Access Control Service Drilldown.wmv"
rename PC54.wmv "PC54 Mono and .NET.wmv"


RenamePDC2008Day4.bat

rename TL04.wmv "TL04 Microsoft Visual Studio Team System Team Foundation Server- How We Use It at Microsoft.wmv"
rename BB31.wmv "BB31 Live Services- FeedSync and Mesh Synchronization Services.wmv"
rename BB09-R.wmv "BB09-R Microsoft Office Communications Server and Exchange- Platform Futures [REPEAT].wmv"
rename TL51.wmv "TL51 Research- Contract Checking and Automated Test Generation with Pex.wmv"
rename BB03.wmv "BB03 SQL Services - Under the Hood.wmv"
rename ES24.wmv "ES24 PowerShell- Creating Manageable Web Services.wmv"
rename PC02.wmv "PC02 Windows 7- Extending Battery Life with Energy Efficient Applications.wmv"
rename BB46.wmv "BB46 Exchange Web Services Managed API- Unified Communications Development for Exchange.wmv"
rename BB33.wmv "BB33 Dynamics Online- Building Business Applications with Commerce and Payment APIs.wmv"
rename BB13.wmv "BB13 SharePoint 2007- Creating SharePoint Applications with Visual Studio 2008.wmv"
rename PC01.wmv "PC01 Windows 7- Web Services in Native Code.wmv"
rename TL35.wmv "TL35 WCF- Developing RESTful Services.wmv"
rename SYMP01.wmv "SYMP01 Parallel Symposium- Addressing the Hard Problems with Concurrency.wmv"
rename SYMP04.wmv "SYMP04 Services Symposium- Expanding Applications to the Cloud.wmv"
rename TL36.wmv "TL36 Microsoft .NET Framework- Declarative Programming Using XAML.wmv"
rename ES19.wmv "ES19 Under the Hood- Inside the Windows Azure Hosting Environment.wmv"
rename PC49.wmv "PC49 Microsoft .NET Framework- CLR Futures.wmv"
rename PC34.wmv "PC34 Open XML Format SDK- Developing Open XML Solutions.wmv"
rename PC41.wmv "PC41 ASP.NET- Cache Extensibility.wmv"
rename TL32.wmv "TL32 Microsoft Visual Studio- Customizing and Extending the Development Environment.wmv"
rename PC42.wmv "PC42 Windows 7- Deploying Your Application with Windows Installer (MSI) and ClickOnce.wmv"
rename BB12.wmv "BB12 .NET Services- Messaging Services - Protocols, Protection, and How We Scale.wmv"
rename ES21.wmv "ES21 Windows 7 Presentation Virtualization- Graphics Remoting ( RDP) Today and Tomorrow.wmv"
rename BB35.wmv "BB35 Live Services- The Future of the Device Mesh.wmv"
rename PC26.wmv "PC26 Microsoft Visual Studio- Building Applications with MFC.wmv"
rename SYMP02.wmv "SYMP02 Parallel Symposium- Application Opportunities and Architectures.wmv"
rename SYMP05.wmv "SYMP05 Services Symposium- Enterprise Grade Cloud Applications.wmv"
rename PC29.wmv "PC29 Microsoft Silverlight 2- Control Model.wmv"
rename PC13.wmv "PC13 Windows 7- Building Great Audio Communications Applications.wmv"
rename BB34.wmv "BB34 Live Services- Notifications, Awareness, and Communications.wmv"
rename ES09.wmv "ES09 Enabling Test Automation Using Windows Server 2008 Hyper-V.wmv"
rename BB47.wmv "BB47 SharePoint 2007- Advanced Asynchronous Workflow Messaging.wmv"
rename TL34.wmv "TL34 Managed and Native Code Interoperability- Best Practices.wmv"
rename PC45.wmv "PC45 WPF- Data-centric Applications Using the DataGrid and Ribbon Controls.wmv"
rename PC05.wmv "PC05 Windows 7- Unlocking the GPU with Direct3D.wmv"
rename TL01.wmv "TL01 Office Business Applications- Enhanced Deployment.wmv"
rename BB54.wmv "BB54 Designing Your Application to Scale.wmv"
rename TL31.wmv "TL31 Oslo- Building Textual DSLs.wmv"
rename SYMP03.wmv "SYMP03 Parallel Symposium- Future of Parallel Computing.wmv"
rename SYMP06.wmv "SYMP06 Services Symposium- Cloud or No Cloud, the Laws of Physics Still Apply.wmv"
rename ES17.wmv "ES17 Windows Azure- Programming in the Cloud.wmv"
rename BB27.wmv "BB27 .NET Services- Orchestrating Services and Business Processes Using Cloud-Based Workflow.wmv"
rename PC07.wmv "PC07 WPF- Extensible BitmapEffects, Pixel Shaders, and WPF Graphics Futures.wmv"
rename BB10.wmv "BB10 Live Services- Deep Dive on Microsoft Virtual Earth.wmv"
rename PC19.wmv "PC19 Windows 7- Designing Efficient Background Processes.wmv"
rename BB44.wmv "BB44 Identity- Windows CardSpace Geneva Under the Hood.wmv"
rename PC15.wmv "PC15 Windows 7- Benefiting from Documents and Printing Convergence.wmv"
rename TL11.wmv "TL11 An Introduction to Microsoft F Sharp.wmv"
rename PC32.wmv "PC32 ASP.NET AJAX Futures.wmv"


Update – After I wrote this, I found @Jorriss (another twitter friend) post which essentially does the same thing as what I do above, only he uses some cool C# and reading the sessions names from the web, rather than the simple batch file approach I took above. Read his post then choose which solution best fits your needs.

SQL Saturday Orlando Full Text Searching Session

On October 25th, 2008 I presented “Getting Started with SQL Server 2008 Full Text Searching” at SQL Saturday in Orlando. First off, I want to apologize to the attendees for taking so long to get this material posted. But I can finally reveal what has been sucking up my spare time lately!

I, along with other MVP’s have been working on something called the SQL Server 2008 MVP book project. Many SQL MVP’s, myself included, volunteered to write one or more chapters for the book. Once published, all proceeds will go to charity. I’m very excited at the opportunity to contribute the chapter on Full Text Searching, which I submitted today. I’ll keep you posted as things progress.

We’re not the first ones to go down this road, Sara Ford is donating the proceeds from her Visual Studio Tips book to supply scholarships for the young folks in the hurricane ravaged town of Waveland MS. I hope you’ll support her efforts as well.

Meanwhile, what you really came for was the links relevant to my talk.

Detailed descriptive material can be found on my blog, ArcaneCode.com, with links to specific posts below.

First off, the slides and sample code can be located at the Code Gallery site I setup specifically for Full Text Searching with SQL Server:

http://code.msdn.microsoft.com/SqlServerFTS

Look on the downloads page to see various projects around SQL Server Full Text Searching. I’ve created one “release” for each of the projects around FTS. Be sure to look on the right side at the various releases in order to see the various projects.

Next, you can get started with the basics by reading these entries on my blog:

Lesson 0 – Getting the Bits to do Full Text Searching in SQL Server 2005
Lesson 1 – The Catalog
Lesson 2 – The Indexes
Lesson 3 – Using SQL
Lesson 4 – Valid Data Types
Lesson 5 – Advanced Searching

After that you’ll be ready for some advanced topics.

Can you hear me now? Checking to see if FTS is installed.
Exploring SQL Servers FullTextCatalogProperty Function
Using the ObjectPropertyEx Function
Using FORMSOF in SQL Server Full Text Searching
Creating Custom Thesaurus Entries in SQL Server 2005 and 2008 Full Text Search
Creating and Customizing Noise Words in SQL Server 2005 Full Text Search
Creating and Customizing Noise Words / StopWords in SQL Server 2008 Full Text Search
Advanced Queries for Using SQL Server 2008 Full Text Search StopWords / StopLists

SQL Server Reporting Services, Oracle, and Multivalued Parameters

I am working on a series of reports that will use SQL Server Reporting Services 2005 for the reporting tool, with the data stored in Oracle. One of the requirements was that several of the parameters had to be Multivalued, users could pick from one to all of the items in a drop down list. Sounds like it should be straight forward, but there were a lot of gotcha’s that drove me nuts trying to get this to work. Some of the workarounds I had seen on the web, one I figured out for myself, but none had this information consolidated in one spot. So I thought I’d pass along the hard fought hours I spent and perhaps save you some time.

I’m going to keep my example very simple. I’m also going to assume you are familiar with using parameters and reporting services, perhaps just not with Oracle. We’ll pull our data out of a table called “table1”, and have four fields, field1, field2, field3, and field4. Field1 will be the one we’ll use for our multivalued parameter.

So the first thing we’d do with our report is create two datasets. The first will be used to populate the dropdown list for the parameter. We’ll call it dataset1, and it will have some simple SQL with it:

Select field1 from table1 order by field1

Pretty easy so far. Now create a parameter for the report. Name the parameter prmField1, and have it supply the values and labels from dataset1. This should all be familiar so far if you’ve done parameters with SQL Server. Now let’s create dataset2, which will be the main one to supply data to the report. When you create the new dataset, use this for the SQL:

Select field1, field2, field3, field4 
  from table1
 where field1 in ( :prmField1 )

Then click on the parameters tab, and bind :prmField1 to the Parameters!prmField1 parameter.

Now if you’ve used parameters with SQL Server, you’re probably scratching your head. It’s time for that first “gotcha” I mentioned. While SQL Server uses an @ sign for it’s parameters, Oracle uses a : (colon) to prefix it’s parameters. Thus :prmField1 is the parameter in this SQL. Note I could have named it anything, I just used :prmField1 to make it consistent with the parameter we setup to make debugging easier.

There’s one other potential gotcha here, depending on your version of Oracle. Only Oracle 9 and greater support this multivalued parameter syntax. It wasn’t an issue for me since we are on a version later than 9, but if you are on version 8 or earlier, you will have to turn the whole thing into an expression and break out the multivalues manually. Very ugly.

OK, if you run the report it would work, but it would have a few drawbacks. If you use the “Select All” check mark, Reporting Services will create SQL that looks like:

Select field1, field2, field3, field4 from table1 where field1 in ( ‘a’, ‘b’, ‘c’, ‘d’, …

Which works OK if you only have a limited number of items in the list, but if you have a lot of items selected your performance is going to be poor, and if you have more than 1000 Oracle won’t run the query at all. So how do we get around this gotcha?

The common wisdom here is to add your own ‘ALL’ selection to your drop down multiparameter list. Let’s go back to dataset1, and change the SQL statement to read:

selectALLas field1 
  from dual
union all
select field1 
  from table1
 order by field1

This will add ‘ALL’ as the first item in your list. If you are not familiar with Oracle, I’ll also mention “from dual” is just a way to tell Oracle that no table really exists, just return this one row with the fields I specify. Now we need to modify the query in dataset2 to take advantage of this shortcut. My first pass looked like:

select field1, field2, field3, field4 
  from table1
 where ( field1 in ( :prmField1 ) OR :prmField1 = ‘ALL’ )

Only problem is, this didn’t work right. If I picked ‘ALL’, or one item in my list the report worked, but if I picked more than one item from the list the report errored out. I believe that by using the :prmField1 = ‘ALL’ syntax, my multivalued parameter was getting converted to a single valued parameter. After several hours of head bashing though, I finally came up with this rewrite:

select field1, field2, field3, field4 
  from table1
 where ( field1 in ( :prmField1 ) orALLin ( :prmField1 ) )

Success! By changing my syntax to check for IN on both items I don’t coerce prmField1 into a single valued parameter, instead leaving it as multivalued. Another benefit / gotcha. You can execute this query from the dataset editor window. When you do a small dialog pops up and asks you to supply values for each parameter in the query. Through this dialog you can supply one value, thus I could use ‘ALL’, or some other valid value for prmField1, but only 1. This dialog does not allow you to enter more than one value, if you want to test your multivalue functionality, you’ll have to actually execute the full report.

You may also be wondering why I wrapped my where clause in parenthesis. Future maintenance. It will make it easier should I come back later and add more items to the where clause, like so.

select field1, field2, field3, field4 
  from table1
 where ( field1 in ( :prmField1 ) orALLin ( :prmField1 ) )
   and field2 = ‘Arcane Code’

Because there’s an OR in there, wrapping in parenthesis will keep my and/or logic correct for the rest of the query.

There is one final “gotcha” you need to be aware of when using this approach. While it does indeed solve the problem, it will take some education to train the users to use your ‘ALL’ feature instead of the built in ‘select all’ that comes with SQL Server Reporting Services. Once our users got used to it, it worked fine, but did take some education.

So let me summarize the key points for quick reference:

  1. Be sure your Oracle version is 9 or greater, none of this works on versions 8 or older.
  2. When using parameters with Oracle, use a : instead of an @ sign – :param instead of @param.
  3. Add an ‘ALL’ option to your datasets that supply values for multivalued drop down parameters.
  4. Check for the ALL in your where clause by using “where ( field1 in ( :prmField1 ) or ‘ALL’ in ( :prmField1 ) )” syntax.
  5. You can execute your query from the dataset window, but can only supply 1 value. However that value can be ‘ALL’.
  6. Educate your users on ‘ALL’ versus ‘(select all)’ .

Hopefully this will help you as you create your own SQL Server Reporting Services reports against Oracle databases using multivalued parameters.

Devs and Data Dudes Oh My!

Microsoft has made a big announcement regarding the next version of Visual Studio, Visual Studio 2010. Among other welcome news is that the Developer Edition and Database Editions of Team System will be merging into a single product. This is great news for folks like me (and I suspect many developers) who do a lot of work on both the database side as well as the application side.

The really great news though is that we don’t have to wait for 2010 to take advantage of this. As part of the announcement Microsoft said that effective October 1st, 2008 people who are MSDN Licensed for the 2008 (or 2005) version of Visual Studio Team System Developer will now have access to the Database version, and vice versa.

Database Edition has some great features. One of the ones I use the most is the database comparison tool. It lets me compare data in one database with another and get them into sync. This is great for keeping my local development database that sits on my computer identical with our production system.

I’m sure Database Edition will be new to many developers, so I’d like to mention to books that will help you get up and running with “Data Dude” (as Database Edition is often called).

masteringvstsde The first I have mentioned before, it is SQL MVP Andy Leonard’s Mastering Visual Studio Team System Database Edition Volume 1. This is a great book that focuses exclusively on the database edition. It’s a great resource and one of my favorite books on the subject, I can’t wait for the next volume to come out.

 

 

 

 

apressprovsts The other book is from APress, Pro Visual Studio Team System with Team Edition for Database Professionals. This book covers all aspects of VSTS, including the database tools. I think too often we make life harder on ourselves than we have to, if we took some time to learn the tools available to us, we could be much more productive. I’ve found this book to be a good aid to help me do just that.

Bug.Net meeting on SQL Server Compact Edition

A few months ago I did a presentation to the Birmingham .Net Users Group (BUG.NET). The subject was SQL Server Compact Edition, in it I discuss both the ‘traditional’ way of accessing a SSCE file as well as using LinqToSQL.

This is a recording of a live presentation, so the audio quality may not be as good as some of the previous presentations I’ve done, it was my first experiment in recording a session live. Let me know how it works for you, I did make every attempt to clean up where I could and ensure the audience was understandable as well.

The wmv is about 76 meg, you can download the wmv directly or watch streaming below.

SQL Saturday – Orlando – October 25th

Just a note for my friends in and near Orlando, I have agreed to come down and speak at the SQL Saturday event on October 25th. Just follow the link and pick SQL Saturday #8 for more details. My presentation will be on Full Text Searching. A big thanks to Andy Warren of End To End Training for inviting me and helping to make this possible.

My Dev Kit

There’s a new meme of sorts on the web, folks talking about the tools they use to develop with. I first saw it on Shawn Wildermuth’s blog. Shawn’s a great guy, he co-wrote most of those .Net MCTS/MCPD study guides from MS Press, and does a lot of training on Silverlight. So I thought I would keep the meme alive and talk about my own tools.

Hardware

I do a lot on the road, so a laptop is essential. Mine’s getting up there in age, it’s an HP Pavillion dv8000. 2 gig ram, two internal 160 gig hard disks, 17 inch wide screen, single core 64 bit processor. It’s OK, but will hopefully get replaced next year with something with more cores and horsepower. I don’t care much for the keyboard, so I bought an external keyboard from Lenovo. It’s got a trackpoint so I don’t have to take my hands off the keyboard very often, and I use it with both my laptop and the Dell that work supplies me.

At home I use a larger wireless Microsoft mouse, on the road I use one of the smaller Microsoft travel mice. Also in my hardware list is an external Seagate 1TB drive. It hooks up via either firewire or USB, which is nice when my USB ports are all full.

Also in my list is my Zune. Yes my Zune. Cubical farms can get noisy at times, some good tunes on my Zune really help me to zone out and ignore my surroundings, focusing on my code. It’s also nice on my commute or daily walk, I listen to podcasts to keep up my technical knowledge. At night I hook it to my TV via my X-Box 360 to watch video podcasts, or sometimes I lay in bed before going to sleep and watch.

My final piece of hardware is my iPaq, it helps keep my appointments in line and my contacts, plus I have lots of e-books loaded on it for reading. I also used to use it for podcasts prior to getting my Zune.

Operating System and Dev Tools

My laptop currently runs 32 bit Vista Ultimate with Service Pack 1. Since it maxes out at 2 gig, and some 64 bit drivers were not available when Vista first arrived, I saw no benefit to 64 bit and took the path of least resistance. I have quite a few virtual machines in a variety of OS (Server 2008, 2003, XP, Vista, and Ubuntu) for testing, development, and running Beta versions of programs. For a web browser, I bounce back and forth between FireFox and IE7. For a while I was using FF most of the time, but IE7 was a big improvement over 6, and I’m now using them about 50/50. I suspect when IE8 comes out I may be using it more, but will have to see.

Like Shawn I also use Outlook 2007 for my e-mail client. It’s so much easier to organize my mail in Outlook than the g-mail host. But I also use the other features, such as the calendar and task list to help manage my life. I also use the rest of the Office suite for my daily tasks.

I use SnagIt for grabbing still screen captures, awesome tool, and Camtasia for video screen captures. I’m working on several video tutorials now, which is fun but time consuming (which also explains while my blog posts have been off of late). I use Paint.Net for basic photo / image editing. For creating my blog posts, I write them originally in Word 2007, then use Windows Live Writer to post them to my blog.

For quick access to my daily programs, I use one of two things. I really like Bayden Systems SlickRun. I also create a shortcut menu using a technique I blogged about in February.

Developer Tools

As you might expect I use both SQL Server Management Studio and Visual Studio 2008 Team System for day to day development. My top add-ins are Red-Gates SQL Prompt bundle for SSMS and CodeRush for Visual Studio. For a text editor, I absolutely love UltraEdit. Since I have blogged a lot about my dev tools in the past, I will keep this section short.

The Cloud

I’m on a couple of social networking sites, in addition to this blog:

· Twitter

· Posterous

· LinkedIn

· MSDN Code Gallery – One site for SQL Server Full Text Searching and one for SQL Server Compact Edition.

Passing the Baton

OK, your turn, let’s see your blog with your tools!