Is there any hope for the ideal bookstore?

Borders – My favorite bookstore

Recently, Borders Group Inc filed for Chapter 11 and closed a local Cincinnati store that I frequented. You can find details about the filing here. As I have explained in a previous post, I love to work at bookstores. They offer a great way to stimulate my mind while also offering the essentials (Internet and power outlets) to do actual work if I want to. We all knew that bookstores, in their current form, were going away. However, because I still love them is why I feel compelled to write about the disappointment that comes with their closing.


Borders Bookstore Closing


Photo by Mark Hillary

I remember hearing about Borders’ attempts at changing the layout and offerings of their stores with a new model. They were supposed to open one such store here in Cincinnati (the Kenwood area) about a year and a half ago. I waited with excitement to see how they attempted to approach a changing information market, but never was able to see it for myself. The construction project became a debacle and Borders, along with other companies, eventually backed out.

Borders realized that people are becoming less likely to purchase full-priced, bound books at the store. The demand is clearly not enough to warrant thousands of square footage for store space. People can both browse the information at the store for free (and then not buy anything) and find the exact piece of information needed online. It is rarely necessary to take a book home, and when it is it can usually be shipped home more cheaply.

Drastic changes must be made to save the bookstores…

Is there any hope?

Is there any way to fix the dying bookstore industry and make a brick and mortar store work? After all, there are an increasing number of people who can work without an office. Does that mean there is a growing market of people who would pay for a workplace at a bookstore?

Let’s analyze the benefits of bookstores versus other similar establishments (e.g. Libraries and Coffee Shops)…

Bookstore Pros

  • Social gatherings – bookstores are a great place to meet with friends to chat.
  • White noise – they realize conversations can get loud, so they try to please those trying to concentrate by piping music over the speaker system to generate white noise.
  • Food is served – is there any reason to leave when there are vital nutrients and caffeine within a cricket pitch from my table?
  • Research – bookstores have magazines and a wide variety of recent non-fiction books with which to perform research. When a topic can’t be found, just go online (with the free Internet service) and try to fill in the gaps.
  • People watching – for those of us who get a little more enjoyment occasionally working around people.
  • Store hours – bookstore hours are not usually as flexible as coffee shops but are much more so than libraries.

Library Cons

  • Less Noise – theoretically, loud library-goers are supposed to be shunned. At least, that’s how they were when I was growing up. Nowadays, with constant cell phone interruptions, it seems people no longer treat libraries as a quiet place for reading.
  • Food/Caffeine prohibited – I am getting sleepy, very sleepy…
  • Obsolete resources – most libraries now have free Internet, which is a savior because very few of their nonfiction books are useful anymore.

My ideal bookstore

I don’t know if it can make any money, but as I alluded to in a previous post, I have an idea for the ideal bookstore.

It would combine all the best aspects of current bookstores, coffee shops, and bars.
 

  • Books/Resources/Internet – this is a great benefit to current bookstores. If a goal is to reduce floor space, then books can be made available in electronic form but can only be accessed from within the bookstores’ provided Internet connection.
  • Coffee/Food/Alcohol – follow a similar formula to normal bookstores but provide alcohol as well. If Chipotle can serve beer, can’t a bookstore too?
  • More people watching – current bookstores are pretty good social environments as they are. However, for those people who want to be around others but not subject to their noise, there is no solution. My ideal bookstore would have social (loud) and focused (quiet) gathering areas. The quiet area would be surrounded by glass walls so as not to carry sound but to enable visibility.
  • Great location – a nice perk would be to have an outdoor seating area or a window that overlooked heavy pedestrian traffic.

As I have never been employed in the bookstore industry, I do not know if my concept could even make money, but that is not my concern. I just want someone to build it so I can live/work/play there.

 

 

Ponderous Thought: I have found that I often get “in the zone” during .NET User Group meetings and Firestarters, which leads me to believe that if my bookstores could somehow incorporate training or presentations that they could be even more valuable!
Advertisement

Were my Microsoft Certification Exams Worth it?

As important as it is for Software Developers to keep current with emerging technologies, it is equally important to choose wisely when it comes to learning them. Indeed, there is a finite amount of time to devote to self-improvement. This truth became evident most recently while I’ve been thinking about my personal goals for the year and trying to decide whether or not I should try to obtain the more recent Microsoft certifications on .NET 4.0, such as Web Developer or Azure Developer on Visual Studio 2010. It got me to thinking about all the time I spent at the beginning of my career getting certified and whether or not that investment has paid dividends.

As described in Contrasting 2 Job Rejections, I was scared about my job prospects after graduating college. Once I got a job, I felt that I needed to ensure I had opportunities going forward and figured getting Microsoft Certifications would be the best way to differentiate myself from the candidate pool. I took 14 tests in less than 3 years, passing 12 and failing twice. I obtained the status Microsoft Certified Systems Engineer (MCSE), Microsoft Certified Database Administrator (MCDBA), and Microsoft Certified Solution Developer (MCSD). You can see my transcript here (enter transcript ID “677424” and access code “insights”).

Some of the tests were paid for by my employer, some were not. I usually studied using the officially released self-paced training kit for each test, but I’ve also purchased expensive training videos, exam crams, used free web casts, etc. I was completely immersed in the certification process. I actually understood all the options and the Microsoft certification path, of which there are now many. Since it’s been almost 2 years since I’ve taken any, I find myself out of the loop, wondering if it makes sense for me to re-enter this world.

At the time of this writing, I have about 7 years of professional software development experience, enough to significantly reduce the amount of studying required to pass a certification test compared to earlier in my career.

Microsoft
Certifications
Expected Study time (hours) Completed Study Time (hours) Practice Tests (hours) Days Studying Hours Per Day Test Date
70-270 (Microsoft
Windows XP Professional)
45 51.00 9.50 35 1.73 February 12,2004
70-290 (Windows Server
2003 Environment)
31 28.00 3 23 1.35 March 10, 2004
70-291 (Windows 2003
Network Infrastructure)
47.5 78.00 11.5 122 0.73 July 9, 2004
Took Test on July 9th 9 4.5 12 1.13 July 21, 2004
70-293 (Windows 2003
Planning a Network)
22 12 4 15 1.07 August 5, 2004
Took Test on August 5th 30.50 8.5 64 0.61 October 8, 2004
70-294 (Windows Server
2003 Active Directory)
21 14.08 4 31 0.58 April 2, 2005
70-297 (Win2003 A.D.
& Network Infastructure)
16.5 16.92 2.5 17 1.14 April 19, 2005
70-228 (SQL 2000
Administration)
55 53.42 5.5 72 0.82 May 27, 2005
70-229 (SQL 2000
Development)
24 23.50 3 151 0.18 October 29, 2005
70-315 (Web Apps with
Visual C# .NET)
34 45.50 13.5 81 0.73 January 24, 2006
70-320 (XML Web Services
with C# .NET)
40 34.00 3 42 0.88 May 2, 2006
70-316 (Windows Apps
with Visual C# .NET)
14 15.42 3.25 22 0.85 June 6, 2006
70-300 (Solutions
Architecture & Req’ts)
12 7.58 9 47 0.35 September 28, 2006
70-553 (Upgrade MCSD to
MCPD : Part 1)
82 16.00 4 428 0.05 April 12, 2008
70-554 (Upgrade MCSD to
MCPD : Part 2)
55 0.00 5 22 0.23 May 5, 2008
Took Test on May 5th still counting 0.00 February 28, 2009?
70-502 (.NET 3.5 –
Windows Presentation Foundation)
14 14.00 6 108 0.19 December 13, 2008
70-561 (.NET 3.5 –
ADO.NET)
12.25 12.50 0.5 18 0.72 May 2, 2009

Would obtaining more certifications be valuable? Looking back, I feel that it was worth it to work towards achieving the certifications that I did. They served 2 purposes:

Milestones for Self-Motivated Learning

By deciding to get certified, I was declaring a personal goal that was tangible and had benefits other than just self-improvement. Many of the topics involved in certification were topics that I wanted to learn about anyway, especially early in my career. For example, I was assigned to my first professional web application project about the same time that I was ready to begin studying for the related certification. Since my professional life and personal interests were colliding, I found it much easier to be motivated to study and create small side projects to practice what I had learned. Better yet, knowing the milestone of passing the test would aid in job security added to the incentive to learn.

Measurable Proficiency

I have heard people in the IT industry downplay the significance of certifications, especially those from Microsoft. Some have argued that the tested topics do not accurately reflect skills that are required to perform well on the job. Others state that the proliferation of “brain dumps,” practice tests that have actual questions from real exams (and are considered cheating), marginalize what the tests represent.

My feeling is that there is a lot of truth to these points. However, employers still seemed to have placed some value on certifications. They may have asked, “If certification tests are so trivial, why doesn’t everyone have them?” I found in the years after my achievements, that it did help in my job search. I believe it exhibited measurable proficiency in topics that I claimed to have experience in. This differentiated me from others who could merely state something to the effect of: “Experience = ASP.NET – 2 years.” The achievement generated conversation in interviews. When asked about my certifications, I got to explain how I set personal goals and followed through on them, learning a great deal of relevant skills in the process. @MikeWo also reminded me on twitter that companies need certain certification requirements of their employees to keep partner status, yet another benefit to hiring someone who has them already or displays the ability to pass them quickly.

Having established that it was worthwhile to get certified in the past, does that mean I should set a goal for future certifications?

It is yet to be determined, but I don’t think so. The direction I am trying to take with my career is not to spend focused time learning the details of the next version of ASP.NET, for example. I have also already built my resume to a point where “getting my foot in the door” is not the problem it used to be. Therefore, the benefits listed above do not quite align with what I want to achieve going forward. I could always afford to learn more about Microsoft technologies, such as .NET, but I already know enough to be effective. I am more interested in learning non-Microsoft technologies these days, like jQuery, Mercurial, or anything Google, so I may be convinced to take a test for a new, interesting technology once it is released and known to have value throughout the industry. Lastly, I believe that the best way to get a great job is a great network and by establishing the ability to get things done.

Time to buckle down and get things done then…

Exam Tip: No matter how much you study before-hand, always cram: it’s important to have that info in short-term memory going into the test. It’s also highly beneficial to gauge your readiness by taking a practice test with a company like Transcender.

Mind Map Software – a Great Tool for Brainstorming

Are you struggling to be creative? Looking for ways to organize your brainstorming sessions? Or maybe you’re just bored? I have found a good solution for when I am stuck in one of these situations. I look to Mind Map Software for help.

What is Mind-Mapping Software? It is software that helps you to keep track of related thoughts on a bubble-laden canvas. It produces a similar drawing to what you would have put on the chalkboard in 5th grade. Remember that? When no idea was a bad idea?

 

The nice thing about good Mind Mapping-Software is that it speeds up the rate at which we can record information while brainstorming. I type faster than I write so if I can brainstorm digitally, then I am less likely to forget a key idea I had before recording it. Additionally, soft-copies are more easily stored (than 50 white-boards) and can be updated later.

I have used a few of these applications and have definitely found them useful but I would like to do it more. I am just looking for the perfect option at a good price. Below are a couple neat options:

Installed Applications

Mind Manager – I understand this to be one of the leaders in the market, and at $349 it better be robust. I downloaded a trial and was impressed with the software. It had many templates for creating different types of documents, like organization charts and process flow charts. It was also very easy to add new nodes (spacebar) and new child nodes (insert), which is my most important feature.

Using Mind Manager reminded me that these Mind Mapping Software applications are also great for capturing flow charts. During times when you are trying to explain how a process works or how different things interact, fire up the software and draft a quick mind map diagram. Sure, you could use Microsoft Visio to do it but since you’re getting familiar with your Mind Mapping tool you might as well use that.

FreeMind – This is the other leader. It is open-source and free. The interface for this application is not nearly as beautiful as that of Mind Manager, but for technically-savvy folks like us, it is just what we need. FreeMind also suggests some other interesting uses for their product here, such as for a task list or meeting notes. I would choose FreeMind if I were going to install a windows application, but that’s not what I really want…

iPhone Applications

It would be extremely helpful to be able to record brainstorming sessions on my mobile platform (iPhone). Usually, when I am sitting in front of my computer, my head is buried in my work, writing code, blog posts, or email messages. I struggle to take a step back and reflect while sitting at my desk, because I tend to act on the first idea I have with my computer so close and accessible. The best broad thoughts I have seem to arise when I am not distracted by my computer: waiting to board a plane, riding a bus, or running on a treadmill. I’d like to capture those thoughts as seamlessly as possible.

iBlueSky – I am still searching for the perfect iPhone Mind Mapping application and this is not it. It is $9.99, seems limited, and only has a 3.5 star rating in the App Store. It is amongst the leaders of iPhone Mind Mapping applications but I think I will pass on it.

iThoughts – I am definitely going to give this a try. It is $7.99 and looks very intuitive. It has a 4 star rating in the App Store. I am excited to use this with my Bluetooth iPhone keyboard.

Google Wonder Wheel

Google Wonder Wheel is in a class of its own. It’s useful and yet many people do not even know it exists. To use, search for a topic in Google around which you are trying to brainstorm. How about “Mind Map iPhone Applications?” The lowest option on the left menu should be “More search tools.” Click that. Then click “Wonder wheel.”

I could not describe this tool any better than GoogleWonderWheel.com:

“Did you say mind mapper? This tool is a built in mind mapper with the intention to sort out search results in a logical way of relevancy creating a visual wheel of terms that can make your searching enjoyable and time effective at the same time.”

Clicking around the wonder wheel reveals related topics to what was originally searched for. It’s how I generated the chalkboard image above. I recommend playing around with it as you never know what it might help you to find.

How to Make a Whiteboard Wall for your P90X Workout Calendar

A computer scientist is writing about health, so I know you’re thinking this must be one of those New Year’s Resolutions posts in which I talk about how I need to get myself into shape. Is that what this post is all about?

While we’re discussing it, here are my health-related New Year’s Resolutions for 2011:

– Lose weight to less than 205 lbs by end of February

– Reduce cholesterol by the end of January

– Run a half-marathon by August

– Dunk a basketball in a pickup game

 

Yes. And No.

You see, I’ve already begun to whip myself into shape since the 2nd half of 2010. Specifically, I’ve been using the P90X workout routine and have been pleased with the results. Sure, recompositioning fat into rock-solid muscle may seem like the end goal, but for analytical folk like you and me it is not the only reward. My wife allowed me to dedicate an entire wall in my workout room to track which exercises I completed, how many reps, how much weight I used, and my goals. It’s a real-life data dashboard!

If you share my excitement for tracking progress, doodling, or staring at reflective surfaces, you may want to know how I did it. p90x whiteboard wallHere’s how:

  1. Determine a wall in one of your home’s utility rooms (e.g. office, workout room, basement) which is segregated from normal clutter.
  2. Purchase Dry Erase wall paint. I used Rust-Oleum and I recommend it. The price was right and I have had 0 complaints.
  3. Follow the directions on the label of your paint to apply it to your wall. The highlights of my process were:
    1. Prepare my wall by sanding rough spots and wiping off dirt.
    2. Dry Erase paint comes with 2 separate cans of different paint mixtures. I had to mix them both together before the next step.
    3. Apply a coat of the mixture as you would with any paint. I used a roller and a brush after taping the edges of my wall.
    4. Recoat if necessary. In my case it wasn’t.
    5. Wait a few days before writing on the wall with Dry Erase markers.
  4. Next is the part where the data comes into play… Look over your P90X workout calendar and map it out on the wall. Leave space to fill in the blanks for each workout.
  5. As you go through each video, especially those involving lifting (e.g. Chest & Back, Shoulders & Arms, Legs & Back), Tony will tell you to write down your results. Take action on his advice.
  6. Each week you can look back on what you have accomplished previously as your baseline. Since we’ll be getting better and stronger every week, our baseline changes frequently. A white board is the perfect vector for storing our results!
  7. After a couple weeks of doing the exercises, I recommend setting goals for each exercise. For my whiteboard, I used blue marker to record my most recent accomplishment and red marker to set a goal for myself at the end of the 13 week schedule

    Results and Goals.

 

The only step I left out was purchasing the P90X videos if you have not yet. Otherwise, that’s it!

I’m still learning a lot about working out and eating right. Hit me up in the comments or on twitter if you want to discuss.

Looking for extra motivation? In Tim Ferriss’ 4 Hour Body, he shares a story of Richard Branson, the ridiculously successful head of Virgin Group, and how he remains productive. His short answer: “Work out.”

Many of us have a habit of lounging around when tired, especially after a long, stressful day of work. I know this can be a default activity for me at times. However, we must all acknowledge that the best way to reach our goals, both physically and mentally is to work out if there is still time in the day. I realized this on my own a couple years ago, that if I force myself to get my blood pumping, even by doing something as simple as jumping rope for 5 to 10 minutes, I will feel re-energized and ready to be productive. Keep that wisdom with you when thinking about lying on the couch and turning on the television.

Additional Links for setting up your workout room:
http://www.beachbody.com/product/fitness_gear/p90x_gear/p90x_chin_up_bar.do (But I recommend getting a cheaper option)

Contrasting 2 Job Rejections

Job interviews have 2 purposes: the 1st being the need for a company to evaluate a job candidate and the 2nd being for the candidate to evaluate the company. Far too many interviewers forget the importance of the latter.

In my experience, I have several interesting stories regarding interviews from both sides of the table (candidate versus interviewer), but 2 personal stories stand out from my job search. Both of them involve the same outcome, rejection. However, the 2 companies could not have been less similar in the process that got us to that outcome.

(Photo by bpsusf)

Job Search 1.0

After graduating college years ago, I did not have a job lined up for me. To overcome this, I admittedly began applying to jobs with brute force. My resume got fired off to any ad in the newspaper, whether I was qualified or not. Being inexperienced with the job search process, I was also fairly unorganized. I commonly received follow up phone calls from companies that I didn’t recognize. One such company was headquartered in Westlake, OH. Despite my confusion about how I applied, my lack of knowledge of the company, and general stumbling behavior, I was invited to a job interview for a technical support position.

At the time I was naïve. I had prepared for behavioral interview questions such as, “what was an example of a conflict you have resolved?” but I had not prepared for a technical interview. I did not realize that this type of interview would be a comprehensive test of everything I learned during school. As a result, the interview did not go well.

I failed to answer 70 to 90 percent of the questions delivered to me. I was in way over my head and so were the interviewers. There were 2 men on the other side of the table, firing basic undergraduate level computer science questions at me. With each of my failed attempts, they reacted with impatience. I could see them trying to hold back the disgust and frustration from such a miserable process. Near the end, I asked a canned question: “what are the next steps?” While 1 of the men tried to be professional, starting with “we’ll get back you if…” he was immediately cut off by the more senior employee with the statement “I don’t think so.” I suppose that was his idea of a rejection letter.

Clearly, I did not make a good impression with this company. Had I realized that I could not simply go into a technical interview and wing it or had I done some review of the syntax, definitions, and algorithms from my previous terms I would have passed the test. I just hope I didn’t end up on The Daily WTF. The result was demoralizing, in a good way. Just as clear as my incompatibility with the position was the unprofessionalism of the company. My embarrassment motivated me to get my act together. After I did, I knew better than to send this particular company another job application.

Job Search 2.0

Much more recently, I applied to Fog Creek Software with an excellent cover letter and resume. In case you have not heard of Fog Creek, it is an exclusive company in New York, known for hiring elite programmers. The CEO is Joel Spolsky, about whom I have referred multiple times on this blog. Perhaps I should not have been surprised, but I received a cleverly written response in the form of an email inviting me to have a technical phone interview with a Fog Creek developer. I became extremely excited and began to prepare for the interview immediately. Because Joel is so open about his interviewing techniques, I knew that I had to re-learn the C programming language, so I spent the few days I had reading as much as I could and writing some sample programs.

Despite my preparation, I struggled mightily during the interview. I fielded difficult questions designed to eliminate a high percentage of applicants that were qualified based on their resumes. The questions were not completely foreign to me, but I wasn’t able to internalize C programming to the degree I needed to in order to answer these abstract questions quickly. Consequently, I received a pleasant rejection letter about a week later.

In contrast to the 1st story, the interview with Fog Creek was a much more enjoyable experience. Throughout my struggles answering questions, the interviewer remained patient and calm. He seemed to grasp the importance of being a professional vector for the company to the outside world. When I struggled, he rephrased the question. I am pretty sure he even ended the interview early, but I have no problem with that. Why should he continue to waste either of our time? Despite ending the technical part of the interview early, he thoroughly answered all my questions about the company and sent me off with a cheerful blessing. As a result, I still speak highly of Fog Creek Software and would recommend other software developers to apply there.

Lessons Learned – Job Interview Tips

When performing job interviews, I urge you to place importance on making a good impression for your company to all job candidates. Being professional and courteous leads to positive word of mouth, which in turn leads to a better array of candidates. To remind my readers and myself of this goal, here are some tips to remaining professional during a candidate’s train wreck:

  • Be patient with failing interviewees. Let them answer questions at their own pace. At a certain point, try rephrasing the question before moving on.
  • Smile and be friendly. Think of the interview as an opportunity to have an intellectual conversation. There will likely be something you can learn from it.
  • Finish short if necessary, but do not do it abruptly. Find a good breaking point after a fair minimum amount of time (for me this is usually 15 to 20 minutes). Politely mention that your questions are finished but that you are open to fielding questions from the candidate. Field those questions as you would to any candidate.
  • Send a rejection letter to rejected candidates. Do not just remove them from candidacy without informing them.

Surprising Costs of Windows Azure Hosted Services

This summer I had a few days to twiddle my thumbs between quitting my job and starting with my new employer, Unstoppable Software. Creative ideas ran wild inside my head, the time off made me feel like I had an infinite amount of time to make them tangible. I whipped up a few websites and wondered where I could cheaply host them since they were built in ASP.NET MVC. Naturally, the first thing that came to mind was to store them in Windows Azure. After all, my BizSpark benefits included a reasonable amount of free service and I wanted to learn more about how the hosting service worked.

At first, this turned out to be a great idea. I was able to quickly get my site up and running in a Production environment on Windows Azure with a custom domain. Best of all, hosting was free!

Getting a working site in Production ended up being my biggest mistake.

I soon realized that I wanted a second hosting environment so that I could test development changes without affecting the working application in Production. Windows Azure’s easy to use deployment interface suggested the creation of a Staging Environment.

Azure Deployment Interface

 

The Staging site worked great. It allowed me to test with a different URL until I was satisfied with the results, then pushing my code to Production. Unfortunately, deploying to a second environment doubled the rate of consumption of a key cost metric, Compute Hours!

A Compute Hour is an hour of application use multiplied by the number of server instances. This is calculated regardless of the state of deployment (Suspended versus Active) and the environment (Production versus Staging). I was very surprised to discover this when I found a charge (below) for Microsoft Online on my credit card statement. Apparently, other developers found out the hard way as well.

Azure Deployment Cost

 

I expected the Compute Hours to be accumulated only by my Production environment. I certainly did not expect my billed rate to increase simply by following the best practice of using a Staging environment to test my application, especially if it was suspended when I was not testing. Additionally, I had incorrectly assumed that Compute Hours were only calculated when my web application was processing requests (of which I was not receiving many). I had not really thought about the cost since hosting was free at first. My recommendation to Microsoft is to make it more obvious to developers that the cost doubles when using an additional environment. I would also like to see a long-term Azure strategy for hosting low-traffic sites. Luckily, I found out about the increase in cost without running up a huge bill.

Implications of Windows Azure Container Types

In 7 Reasons I Used Windows Azure for Media Storage, I described the download process involved in streaming a large video through a Silverlight applet using the Microsoft cloud offering. My scenario involved the use of public containers to store large files (blobs) for a web application. Public containers are convenient because they can be accessed via a simple GET request. Unfortunately, being that simple begets some negative behavior. By being accessible via a simple URL, any user on the web can link to that file and/or download a copy for personal use.

If you are already using public containers, do not be alarmed as if your storage is entirely exposed. I tested my site by typing a URL in which I removed the file name and the result indicated that the URL could not be found. I immediately breathed a sigh of relief. In other words, even public containers do not act the same way that IIS would if the Directory Browsing setting were enabled.

Example URL: http://{ApplicationName}.blob.core.windows.net/{Container}/

Still, for cases in which public containers are not satisfactory due to their openness, the alternative is to use private containers.

Private containers are similar to public containers and remain fairly simple to use. They require the inclusion of a unique key during the GET request for stored files. This is extremely easy using the Azure SDK sample, which abstracts away the details of what must be included in the request.

Effectively, the container type determines where the request for Azure blobs come from. For public containers, the request comes from the client, because a simple URL fetches the file. In contrast, the request for private containers must come from the server. The server-side code embeds the key in the GET request, receives the blob, and processes it or delivers it to the client accordingly.

The obvious benefit to private containers being accessible only to the server-side code is that security logic can occur in it, thereby restricting who can access blobs to specific users based on rules. It also makes it much more difficult, but still possible, to download files stored in private containers for personal use. The drawback to this solution is that streaming now passes through the server, greatly increasing the bandwidth consumed by the application.

As described above, there are cases to be made for the use of both public and private containers. The best solution comes from weighing security requirements against bandwidth and development costs. Of course, there are ways to reap the benefits of both paradigms, but the above restrictions cover the “out of the box” web application scenario.

 

5 Things I Hate about my Favorite Programming Language: C#

In episode 73 of the StackOverflow podcast , Jeff Atwood mentions one of his favorite questions to ask developers, “What are 5 things that you hate about your favorite programming language?”

It got me thinking. I definitely like some of the language features of C#, especially when developing within Visual Studio. Some of my favorites are Generics, Intellisense, and Short-Circuited conditionals. However, there are other pains that I encounter repeatedly when it comes to language syntax.

 

  1. In C#, there is the nifty syntax of following a variable with “??” allowing the developer to specify a replacement value in the case of the variable being null. In theory this is a great feature. However, I never end up getting to use this and I imagine that is the case for most developers. I find I usually end up using the “?” and “:” syntax because I typically want to use a member of the null object like “user.Identity.ToString()” but I have to check if “user” is null or I will get an object reference error.
  2. Why do I always have to lookup how to format a DateTime object in code without the minutes?
  3. If “ToString()” is a member of every object, why should I have to explicitly call it when setting the value of a string variable from another non-string variable? As an example, why can’t a string value be inferred from my int variable by just calling “ToString()” when there would otherwise be a type issue?


    int i = 0;

    string j = String.Empty;

    j = i;

  4. The compiler considers the use of “=” valid within an if condition. This can be confusing and often causes accidental issues where “==” is the intended code. As a solution, I use a coding standard of typing the constant value to be compared first because it cannot be assigned to (i.e. “if (0 == count)”).
  5. Nullable types seem like a great idea but they are not always intuitive. In the example below, the code seems like it should work. However, I receive a compiler error on the second line.


    int? i = null;

    i = (sender != null) ? sender.GetHashCode() : null;

 

Most of the above complaints were compiled off the top of my head. If you have found a better way to leverage the C# language so that you do not run into these issues, please share them with me in the comments. Perhaps it is my mis-use of the language features that has caused my agony.

Analyzing my Choice of Attending Ohio State

It’s that time of year

We are into the heart of college football season which means I have a date with the television every Saturday around noon to watch my Buckeyes. Can I blame the inconsistency in my blog-posting schedule on football season? I suppose so, but I made a 2010 football season resolution to not make stupid excuses.

In spending so much time thinking about the Buckeyes football team, visiting campus, and discussing school among friends I have recently begun to reflect upon The Ohio State University and whether or not it was the best choice of college for me. While in school, I generally knew that those would be the best days of my life. Ohio State meant a lot to me and I had even gone as far as referring to it as “the Greatest University in the World.” Looking back, it was definitely an excellent choice, but could I have done it better?

To properly analyze the decision means to review the benefits and drawbacks to my personal career and education situation.

The Great

Let’s start out with the obvious. Ohio State has an elite athletics department. At the time of this writing, it is one of the few universities to win a Division I championship in each Baseball, Basketball, and Football and is the reigning 5 time Big Ten Conference football champion. Although it may not seem important in supporting my career, the prestige of the program has made it convenient to connect or keep in contact with fellow alumni. I have yet to meet a fellow Ohio State graduate who did not care about the direction of the football program, providing for a useful icebreaker.

Speaking of alumni, did I mention the sheer size of Ohio State’s Undergraduate class? It is routinely ranked in the top 5 in the nation, sometimes as high as 50,000 students enrolled. Such a high number of students yields a high number of alumni, many of whom have taken jobs at leading companies or have established networks in remote locations. Fellow alumni are more likely to network and pull favors than some other successful stranger.

(OSU alumni have a tradition of taking pictures of this O-H-I-O formation in exotic locations)

(The Columbus Skyline – by voteprime)

With Ohio State being as huge as it is it must accommodate a wide range of needs. The University offers diverse majors, libraries, science & computer labs, and recreational facilities. Essentially, if you can think of a resource that should be available for students, you will be able to find it somewhere on campus. The problem is that many students do not realize what is available until it is too late. Perhaps a more specialized school would not run into this issue.

When I attended OSU, it was ranked respectably in its Computer and Information Science (CIS) department. The program provided a fundamental knowledge of theoretical computer science concepts. According to this site, Ohio State’s Engineering & IT ranking is 157 in the world.

A subtle benefit to Ohio State is the location. Although Columbus, OH does not boast many geographical advantages (it is flat with limited bodies of water), its development has been well-planned and it is of considerable size. Contrasting Ohio State with other schools, like Ohio University, which is clearly the primary attraction of its city, residing in Columbus enables students to find quality careers, co-ops, and interests without traveling a great distance.

The Disappointing

I am proud to be a Buckeye and I still live in Ohio. However, I would like to think that I am objective about the school’s educational program. In my time on campus and afterward, I have met some truly elite individuals. Unfortunately, the curriculum is not as challenging as it is at prestigious academic institutions. Therefore, the average undergraduate student is not very motivated. To draw on a previous point, students at Ohio State have incredible opportunity for success due to vast resources, but in order to take advantage of opportunities requires serious self-discipline.

During my early years at Ohio State (99-01), it was disappointing to realize that the school was more well-known for “riots” than for any of its brilliant research. It seemed as though any off-campus party involving multiple houses quickly turned into an angry mob throwing beer bottles at COPs. Going to class the next week I could hear the frustration in my professors’ voices that their hard-work had translated into negative national headlines.

My biggest regret about choosing Ohio State involves the aforementioned limited geography. Ohio State is located in Columbus, Ohio, right in the middle of the Midwest. The following big cities are within a 3 hour drive: Detroit, Indianapolis, Cincinnati, Cleveland, and Pittsburgh. While convenient for those wanting to visit 5 NFL teams within a short drive, it is not exactly close to any technology hotspots such as San Francisco, Seattle, Boston, nor even Chicago. Additionally, the region lacks exciting recreational activities. There are no beaches, mountains, nor warm days in November. If I could search for colleges again, my new strategy would be to at least research gorgeous campuses in exotic locales. I have heard Pepperdine University is one example of such a beauty as opposed to the “concrete campus” that was my destiny.

 

Having graduated and entered the workforce, I look back on my decision to attend Ohio State with satisfaction. Although there were some drawbacks, its size helped me stretch my capabilities socially and introduced me to a vast network of professional connections. I wouldn’t be the same person if I were not a Buckeye.

7 Reasons I Used Windows Azure for Media Storage

Windows Azure is one service that Microsoft offers as part of its Cloud Computing platform. Earlier this year, I began leveraging a small piece of the entire platform on my side projects for what is considered “Blob Storage.” Essentially, I am just storing large media files on Microsoft’s servers. Below I outline why I chose this option over storing the large files on my traditional web host.

 

General Reasons for Cloud Storage

  1. Stored Files Are Backed up

  2. Workload Scalability if traffic increases

  3. Cost scalability if traffic increases

 

Benefits of Microsoft’s Windows Azure

  • Easy to Learn for .NET Developers

I am a pretty heavy Microsoft developer so I more easily learned: how to use it, what the resources for learning it were, etc.

  • Azure Cheaper than Competitors

Thirsty Developer: Azure was cheaper than competitors

  • Azure Discounts with Microsoft BizSpark program

Azure is heavily discounted for BizSpark program members (Microsoft’s Startup program that gives free software for a 3 year time frame). BizSpark members get a big discount for 16 months, and a continued benefit for having an MSDN membership for as long as it is current (presumably a minimum of 3 years).

  • Ease of use

Retrieving and creating stored files is extremely easy for public containers. One can just get the blob from a REST URI.

 

How this applied to me

Traditional hosting had a very low threshold for data storage (1GB) above which it was very expensive to add on more storage. The same was true for Bandwidth but the threshold was higher (80GB). Instead, with Azure, the cost is directly proportional to each bit stored and/or delivered, so it is much easier to calculate cost and it will be cheaper once I get over those thresholds.

Using Azure for Storage produces the following Download Process

1. When a user requests a video file, he/she receives the web content and the Silverlight applet from my website.

2. Embedded in the web content is a link to a public video from Windows Azure storage.

3. Silverlight uses the link to stream the video content.

 

The link that my Silverlight applet uses to retrieve the file is a simple HTTP URI, which Silverlight streams to the client as it receives it. This is nice behavior; especially considering the file is downloaded directly to the client browser and does not incur additional bandwidth costs (from my traditional webhost) for every download.

 

What this means in terms of cost

There are several cost-increasing metrics as I scale my use of Windows Azure (see pricing below). Fortunately, Azure is much cheaper than my traditional web site hosting provider.

Under my current plan, costing roughly $10 per month, my hosting provider allows us to use:

80 GB of Bandwidth per Month

1 GB of storage space

For each additional 5GB of bandwidth used per month, a $5 fee is charged

For each additional 500MB of storage on the server above 1GB, the additional fee would be $5.

 

Fees for Windows Azure uploads & downloads can be easily predicted using the metrics below.

Azure Pricing (Effective 02/01/2010)

Compute = $0.12 / hour (Not applicable to this example)

Storage = $0.15 / GB stored / month

Storage transactions = $0.01 / 10K

Data transfers = $0.10 in / $0.15 out / GB

 

An Example

Let’s say that I average 80 GB of Bandwidth Usage per month on a traditional hosting provider. Because I would be using the full allotment from my provider, that would be the cheapest scenario per GB. Let’s assume that half of my $10 payment per month accounts for Bandwidth and the other half accounts for storage. In that case, my cost for Bandwidth Usage would be $5 / 80 GB, or $.06 / GB.

That may seem cheap, but remember that this price is capped at 80 GB per month. If my website sees tremendous growth, to say 500 GB per month then I would be in real trouble. For that additional 420 GB, I would have to pay a total of $420 per month. My total monthly bill attributed to Bandwidth Usage of 500 GB would be $425, or $.85 / GB.

In contrast, the Azure storage model is simple and linear. For the low traffic case of downloading 80GB per month, it would actually be more expensive. However, as Bandwidth Usage grows, the rates do not go through the roof. Case in point, my total monthly bill attributed to Bandwidth Usage of 500 GB would be $75 (assuming all outgoing traffic).

I could walk through a similar example for the cost of storage but I think you see the point. In fact, it would likely be even worse. Since my website collects videos, it would be more likely that the amount of storage used would grow faster than the Bandwidth used.

As you can see, Azure storage and bandwidth is much cheaper, especially after scaling over the initial allotment.

Note: Storage transactions are a negligible contributor to cost in comparison.