I can say with pride that I have completed my first Windows Azure application. You Have a Message is a simple application designed to allow visitors to leave an inspirational message or retrieve one, sort of like a verbal equivalent of the “have a penny, leave a penny” bin at the convenience store. It may not win me the $15,000 in prize money, but I did definitely earn $50 for writing an Azure app.
More than money, however, I feel I have developed some new skills on cloud computing. For the most part, Windows Azure allows you to leverage your existing .NET skills. While I was working on the project, I discovered a few “gotchas” that I wanted to share in case you find yourself working on an Azure project.
- There is a development storage option that you can use while building your application or service. There is only one account name and account key that you can use for this to work properly; do NOT try to use your production account name and key, as they won’t work. This MSDN article on differences between development storage and Windows Azure Storage Services will fill you in on the name and key to use, in addition to other differences you need to know.
- Get familiar with the storage service URI format – you will use URIs to access your storage queues, blobs and tables. That part is fairly straightforward. Queues, I discovered, have additional naming limitations; essentially they have to be all lowercase and only the “-” is allowed, symbol-wise. It took several attempts at debugging with cryptic error messages before I stumbled upon the article that walked me through this. It’s too late to put back the hair I pulled out while “debugging” this one.
- When building your solution for deployment, it’s not as simple as going to the Visual Studio 2008/2010 Build menu. To acquire the two files necessary to deploy to your Windows Azure account – a config (*.xxcfg) and package (*.xxpkg) where “xx” == language code for your .NET language of choice, you need to right-click on the Windows Azure project in your solution and select Publish. Conveniently, Visual Studio picks up from there, opening an Explorer window with the two files and a browser window directing you to sign in to Windows Azure. It would be nice if the Windows Azure VS add-in group went the extra mile and give you a deployment dialog to push the project right up at publish time – perhaps in a later release.
Have you dabbled in Windows Azure? Learned any neat tricks? Stumbled upon any frustrations? Tell your tales here – we’re listening.
[NOTE: This blog post builds from the earlier post introducing the concept of LinkedIn Connection Path Values]
From an information architecture perspective, the first thing we need to decide is what raw data we will use to calculate the path values and how we will gather this data. Although either the what or the how could influence the other, I have opted to begin with the how discussion and transition from there to what we will be gathering.
How to gather the data
It would seem that there are three approaches to gathering the data that we will need: completely manual, completely automated, or a hybrid approach.
- completely manual – users have to complete a survey or submit details of relationships. This approach would be labor-intensive, assumes that users can accurately assess the strength of their relationships and relies on a significant number of users to submit information before the system would truly be of any value. VOTE: NO WAY!
- hybrid – a hybrid approach – using some available data and relying on users to augment the information – could be valuable to improve the information LinkedIn already possesses, but holds many of the same weaknesses as the completely manual system. This might be suitable for a long-term approach, but not good to get the system up and running quickly. VOTE: MAYBE IN THE FUTURE
- completely automated – an automated system relies on the existing information in the LinkedIn databases. Conveniently, LinkedIn has a plethora of information (see below) available through their new API that developers can access via code and use to calculate the CPV figures that we will need in the future. VOTE: YES, BEST APPROACH FOR PROTOTYPE PROJECT
Now that we’ve determined to rely on existing data, at least until the system is tested and found useful enough to enhance, we can figure out which data will be useful in determining the value of paths.
What data to use
I am certainly no psychology expert. Although I have identified a few pieces of information that I suspect are either available in the LinkedIn API or somewhere in LinkedIn’s database (if they decided to implement this directly), there certainly is room for other data that could provide more proof of peer-to-peer relationship strength. When we get to determining the strength of multiple paths, the individual peer-to-peer values that I explore below will be of significant import.
There are two types of data that will be relevant: user-specific and user-to-user. User-specific data is information about an individual that could make him or her a valuable node on any LinkedIn connection path. User-to-user data is specific to a 1:1 relationship between connections, showing a relative value over other connectors.
This may be a pipe dream, but if I could consume any data that I would imagine is already in the LinkedIn database system, it would be the following:
User-specific
- average response time on introduction requests – from the time a user reads an introduction request to the time that they pass it along or decline it
- percent of successful introductions in which this party played an intermediary (either 2nd or 3rd person in a 3 or 4-person introduction path, respectively)
User-to-user
- how long two connections have been connected
- which party made the connection request
- does either party recommend the other party; if so, which
- when was the pair’s most recent exchange on LinkedIn – message, intro request, recommendation, etc.
- user-specific data: response time on introduction requests, introduction success rate
I am confident that these values alone provide enough insight to know if and when a particular user would be a good choice for a connection request. In my next post, likely coming in the new year due to holiday plans with my wife’s extended family, I will explore a strategy for taking these raw values and converting them into relative CPV data to use in my proposed user experience enhancement for LinkedIn.
At work, we are using CruiseControl.NET for continuous integration of our many software projects. It’s a pretty robust system, which we have configured to use NAnt and MSBuild to compile the projects and package them up for our operations team. However, there was no comprehensive coding style enforcement on our projects… until now.
My manager approached me to add FxCop enforcement into the mix. FxCop is, in short, a combination style guide/enforcer. There is a UI tool that makes it easy to define your FxCop projects, setting the rules and target files to review. A command-line tool can be called directly or integrated into Visual Studio or other build/test tools (like NAnt in our case). You could even build your own rules on top of those that come with the FxCop 1.36 toolkit. If you want to ensure that you have easy-to-read code conforming to standard guidelines – either Microsoft’s or your own – check out FxCop.
There is not yet direct support for FxCop in CruiseControl.NET, so I had to do a bit of research. The page listed in the prior sentence did not actually offer me enough guidance to successfully implement FxCop on ccNET, so I did a bit of googling (well, ‘binging’ to be more exact) and found two blogs with entries that were quite useful in clearing the way for me to implement this solution – Mikhail says… and Ben Reichelt’s Weblog. Ben and Mikhail – thank you for sharing your learning so that I too could integrate FxCop and ccNET.
If you’ve been tracking my progress with the Illinois Workforce Development System (IWDS) and workforce investment act funds (WIA) – earlier posts here and here, you know that I have completed what I thought was all of the paperwork. Last Friday, I made a special trip out to the Illinois WorkNet office in my neighborhood to drop off these papers and discuss with my career counselor the training programs I would like to take. I had already decided that I was interested in either project management (PMP or Agile development techniques) or software development (.NET or Silverlight) and even found the firms that offered the most comprehensive courses that worked with my schedule. It turns out that there is some additional work for me to do.
For those of you preparing to go through the same process, come prepared to discuss training courses that would help you with your long-term career vision, but keep the following advice in mind:
- You cannot split WIA voucher funds between multiple training providers OR multiple courses from the same provider. Do a bit of research on the IWDS training database to find the two providers (and ideally two courses that you would prefer to take.
- When you visit training providers (which I will be doing next week), give the providers advanced notice so that they can be prepared with the requisite paperwork. There appears to be a set of standard documents they need to supply, so an experienced provider should already have this ready to go. It’s also good to schedule the visit, in case the current economic climate and holiday time make things busy for them.
- From the time you return the paperwork from your training provider visits, your counselor will need 15 business days to prepare your voucher. Look for courses at least one month out from the time you begin the training provider visits.
Once I’ve visited my selected training providers and returned the documents to my career counselor, I’ll fill you in on what happens next.
Greetings viewers, and welcome back to the most riveting adventure on earth: securing WIA funds from Uncle Sam. Last episode, we were just learning the ropes of navigating the system for Illinois WIA funds, patiently awaiting the scheduled appointment date. Well, I can’t withhold news from my loyal readers – I was able to move up my meeting by two days and met with a career counselor this afternoon. As of now, for those of you seeking WIA funds or simply curious, I have two insights about the second stage in the process (assuming you already have a college degree – see the earlier post for more details):
- They keep the temperature in the Illinois Workforce office in my neighborhood at what is easily 80 degrees. For the love of G-d, please wear layers, so you can acclimate to the sauna that is your local workforce office.
- Understand that they really make you work for the WIA funds (no pun intended).
The first point is self-explanatory, so I won’t labor it further (NPI*). However, the second point does justify additional explanation, so anybody in the running for WIA funds knows what is in store.
First, if you haven’t yet made it to the live meeting to determine eligibility – yes, that’s correct, WIA funds are not entitlement funds like other government services – take the time to thoroughly prepare the documents they request of you… and know the order in which you have them arranged. When you went in for the introductory workshop, you were given a list of the documents you would need to bring – make sure you have everything covered. I brought my passport, driver’s license, social security card, proof of selective service participation (available here), current resume, paystubs from last employment and from unemployment insurance, my list of job applications for the last several week (required simply to collect unemployment), and proof of college graduation (note that they accept unofficial transcripts). Based on feedback from the introductory workshop coordinator, I also came with a handful of printouts for WIA-eligible training organizations that would be the best selections based on my career trajectory. As I went through this afternoon’s meeting, it was clear that I had a great career counselor. He walked me through the process, asking me for papers one at a time and giving me time to rifle through my stack, pointing what fields to complete on the various documents and then guiding me through a series of questions he needed to answer on his computer to create my “client profile”. All of this took roughly an hour, partly due to a computer glitch on one of the forms and a phone call from what I can only assume was a training provider seeking special treatment (note: my counselor wouldn’t take it and told them that they could not have a recurring course listed multiple times – I was glad to see that he was no pushover). I had completed all of the paperwork (or so I thought) when he told me that he would print out my “homework”. And yes, that is exactly what he called it. He returned with a brand new stack of papers, which he collated into three stapled documents: decision-clarification activities, training program assignment and training assessment package. As frustrated as I am to have additional work to complete in order to have access to these training funds, I am grateful that IWDS puts these hurdles up to ensure that only those who are willing to go the extra mile will receive these training funds.
For those of you who will make it this far, I will briefly explain the three packets and what I look forward to about each:
- decision-clarification activities – this is a few surveys to help you make sure that you want to and are capable of taking the time to train. This includes items like transportation, time availability, and sufficient budget to cover ongoing living expenses. Mostly a practical exercise to make sure you can afford to devote time to training.
- training program assignment – worksheets to help select training providers and specific course, along with a couple of sheets I like that deal with long-term career goals. Anticipate questions like “Someone you have just met asks, ‘What do you do for a living?’ What answer would make you feel happiest? What are your occupation goals?”
- training assessment package – this one has to be my favorite. It’s got a little something for everybody. There’s
- a career assessment tool, like an “interest inventory”, to help you determine potential career paths
- a labor market assignment to determine long-term viability of your chosen career path
- informational interviews to encourage clients to meet with current workers in the field of choice to find out more about whether it’s a good choice
As I reviewed the documents to write this post, and prepare for the activities, it seems like quite a bit of work. I hope to be able to complete all of this by the end of the week. For those of you eager to acquire and spend WIA funds on training, bear in mind what my career counselor told me – it takes him 15 working days from the time that I complete all of the worksheets before he can provide me with a voucher. In my position, with the holidays coming up, that means that I realistically can’t even consider any training programs that begin prior to the middle of January. Keep that in mind if you find a dream course that is only offered in your area once or twice a year. You may have to settle for a different class or work your butt off to have all of the documentation completed in time.
I’m signing off now, but I’ll be back with an update once I have completed the paperwork and had a follow-up appointment.
*I have decided to start abbreviating “no pun intended” as NPI, simply to cut down on extraneous words. I have found that I have the unfortunate talent of being unintentionally punny, which according to most is the lowest form of wit there is. I disagree, but I think I’m outnumbered in that debate.
Cloud computing seems to be one of the big industry buzzwords. But what’s all the buzz about?
Well, for one thing, $50/application and a potential $15K in prize money, thanks to Elance and Microsoft… but more on that later. In addition to crafty gimmicks in which yours truly hopes to take part, cloud computing seems to be catching on in organizations and among professionals seeking to reduce time to market, equipment costs and service outages. Several major players are on board, including Microsoft (Windows Azure), Amazon.com (Amazon Web Services), Google (Google Apps, AppEngine) and Salesforce.com (Force.com). There are many other players and I’m not intentionally leaving any off the list – for the detail-oriented (and marketing managers), feel free to add a comment promoting your service of choice. I don’t mind… really.
I’ve personally dabbled with Windows Azure and Amazon Web Services. It’s worth discussing both, as they represent fairly different service models. Amazon Web Services encompasses a number of offerings within the AWS brand (like Mechanical Turk, my personal favorite), but is most well-known for EC2, the elastic compute cloud. To put it as simply as possible, imagine an unlimited number of servers that you had access to whenever you needed to scale up or down your applications and services. Essentially, that’s what Amazon offers with EC2. It’s akin to an infinite supply of ready-to-use servers in a remote data center – you can access the machines remotely, set up software and services and be up and running. This is often referred to as “infrastructure as a service.” On the other end of the spectrum, you have Windows Azure, often described as “platform as a service.” To be frank, I hear that most often from people who are not fond of Microsoft, so I’m not sure how far removed from Amazon’s service Azure truly is. Many of the services available to users are mirrored; if Amazon has a data storage service, Microsoft’s is comparable, both in terms of functionality and price. However, I have heard that the encapsulation of some functionality – you don’t create “from scratch” images in Windows Azure – makes it easier to get up and running, while limiting your overall flexibility.
For the past few months, I have been attending the recently organized Amazon Web Services Chicago Meet-up to learn more about AWS and cloud computing. For those of you in the area, I encourage dropping in for the January meeting. Everyone is very friendly, the breakfast hits the spot and lots of knowledge is served up. On the other hand, if you are into Windows Azure, you might check out this promotion that Microsoft and Elance are offering (which I eluded to above… you were patient enough to read everything first, right?). Yesterday night, I got an email from Elance inviting me to participate in a special project to create a Windows Azure application. Every successful proposal would receive $50 on completion of a live project – it’s brilliant and everyone wins. Microsoft has several new developers using and promoting Azure, Elance has a bunch of new professionals seeking projects (not to mention the publicity from this event) and I get $50 – sweet!
Stay tuned – once I get approved, I will share details of my Windows Azure application, which everyone will be welcome to beta test.
The folks at Geneca “get it”. Mark Haddas (CEO) and Michael Klynstra, both of Geneca, presented a morning seminar today on their approach to project definition planning that they have aptly titled “Getting Predictable”. Both their methodology and terms of service resolve around this mantra. After a morning sitting in the workshop, I understand a bit more about their methodology and I am impressed.
The majority of their session focused on the first couple weeks of a project. Geneca distinguishes the stages of requirements gathering a bit further than most, moving beyond Discovery and Specification to squeeze in Definition. Unlike discovery, in which the broad project is envisioned, and specification, when the minute technical details are ironed out, “definition”is the stage where all parties, particularly the business stakeholders, come to agreement on what the project is trying to achieve. This includes identifying features, both in and out of scope, as well as defining terms and processes that may be ambiguous. Moving beyond simply hashing out ideas, Geneca’s process includes cataloging “U.S.E.R.” – UI, System interfaces (APIs), Engines and Reports. Again, everyone reaches consensus on what goes in and of what it consists, allowing the project team, whether at Geneca or in-house at the client, to better estimate the time to produce each of the features. Finally, Michael discussed what they describe as “low-fi prototyping,” in which the business stakeholders themselves are called upon to do the prototyping work. This ensures that the business group “owns” the project and recognizes the decisions they are making, versus simply providing feedback on an IT-driven design.
From this session, I came to recognize several elements of the requirements gathering stage that I could have done better on projects that I’ve led, as well as some solid general takeaways:
- Capture the workflows and scenarios that define the “intent” of the system with the business group before diving into any technical analysis
- Keep the business stakeholders accountable throughout the definition stage
- Record in your documentation any assumptions or facts that business group members provide
- Have business group prepare simple prototypes to ensure buy-in and consensus on UI and workflow
- Track “excluded” or “out-of-scope” deliverables in the project planning documentation – it’s just as important as in-scope features
Whether you are a project manager, business decision maker or software developer, the techniques that Geneca espouses can serve you well if you want to more predictably execute on software development projects. If you want to learn more, check out the whitepapers on their site.
On a side note, the section on paper prototyping inspired me to think about other, easier ways than with paper bits. I hit upon the idea of magnetic prototyping and decided to investigate this evening. Well, I’ve discovered not one, but two inspiring magnetic prototyping toolkits. One is a bit less costly, DIY magnetic prototyping solution provided by the design folks at Konigi; the other is a bit more expensive magnetic prototyping kit, but works better with whiteboards and markers.

