Yow-Hann Lee - Software Happens

All things Computer Science, .NET & WWW

  Home  |   Contact  |   Syndication    |   Login
  127 Posts | 7 Stories | 27 Comments | 50 Trackbacks

News


Article Categories

Archives

Post Categories

About

Friday, June 27, 2008 #

A picture is worth a thousand words. So in honor of a technology icon, I present the following picture:

 

What does the above image represent?

Of course, one can point out the irony in the image itself. The fact that the Start button is where you go to "Shut Down" your machine. But we'll let Andy Rooney's flame take care of that. Speaking of that, Andy represents a good portion of typical users. For other BillG videos over the years, you can check out the Microsoft collection.

Bill Gate's vision was to bring PCs and the power of computing to the masses. Obviously, this is an extreme nutshell of all the epiphanies on his credit list. But this was a double edged sword and generated the love/hate relationship you see today. Having a plate so full already, the polish became secondary. Yet the audience always craves more...

What is the polish?

The polish was in the UI and interaction design. One needs to look no further than the fanboy mentalities of Mac users. As an engineer and particularly non-UI centric developers, it becomes easy to forget that "polish" and the intended audience. After all, for a long time and even today, the interface has been treated as an afterthought or beneath a "real" engineer to work on.

Who are our users?

For typical consumer software and web applications, they are our grandmothers, fathers, mothers, aunts, uncles, sons and daughters.

And on the day BillG's exit, we are inspired by all his contributions and are reminded of the "polish" for your own software initiatives. Love him or hate him, he does inspire others either way.

Usability, Availability, Accessibility and Intuitiveness


Tuesday, June 24, 2008 #

In going with the old new saying, you sometimes remind yourself of an old new thing.

You know... the kind of thing that at one time that you know you knew but now has fleeted away thanks to the meat surrounded by your skull? And you know that you keep a blog to keep you from forgetting the very things you don't want to forget?  <--- How's that for grammar? Now repeat the above five times fast :)

Well, today's example is the very reminder that HTML alt attribute tags are not honored as tooltips in all browsers. http://www.mozilla.org/docs/web-developer/faq.html#alttooltip has describes this and the original intents. Darn you Internet Explorer and your mind corruption games!? Where have all my standards gone?

Let this be a reminder to self about memory lapses and being subdued by IE's ways and even going to the extent of installing IE8 Beta 1. Guess that is you get for using beta-ware, software happens.


Thursday, June 19, 2008 #

A bit of a coincidence recently to witness a slew of recent outages/scalability issues on high profile sites. First  it was the well-publicized Amazon outage, followed by Mozilla's Outage on Firefox 3 Launch Day, Google Apps outage and now Facebook's logged-in HomePage:

One of the publicized outages from last year was due to a site update. This spotted the last hour (perhaps a lot earlier than this) and the root cause release should be interesting.


Tuesday, June 03, 2008 #

You know the little watch window that you get in Visual Studio...well, in the scope of the software development world, this is what is currently in my watch window:

  1. Microsoft Project Codename "Velocity" - Distributed In-Memory Application Cache Platform

This one is huge for .NET. All things considered, it is arriving late to the party (Reference memcached and jcs) but it is worth watching how it all plays out. I am looking forward to trying out the optimistic/pessimistic concurrency models and other cache configurations. So while like the rest of the folks who are excited about Silverlight 2 Beta 2 this week, it is Velocity that is going in the watch window.

As a side note, this now also means there is another answer to BrainSharpener #10. Depending on the scenario, that could either be a good or bad thing :)


Sunday, April 27, 2008 #

The title seems a little out of place given that this is a predominantly .NET Oriented Community. But this was an opportunity to immerse myself in a different environment where people face similar challenges. As a side benefit, it was also a little nudge towards learning Python. The NLTK talk certainly helped this motivation along.

I have skimmed over .NET libraries in the past (i.e. SharpNLP); but there is definitive value in examining an earlier and more mature project. As evidenced by the presenter, Sean Boisen of Logos Bible Software, NLTK is not only a useful academia tool, it also serves practical purposes in his organization. His major push being that analytics (based off of well known standards such as Levenshtein distance, Zipf's Law) on large data sets were much more valuable than AI interpretations. Given the disappointments and progress in the AI field, I can understand his assertions. It turned out to be a light dose of Python as he didn't dig deep into the bowels of NLTK and more complex examples.

The other benefit of attending LinuxFest is in picking up on similar problems/solutions that the Linux community faces. While the technology stacks differ, the problems we face are inherently the same. A great example of this was a network protocols and security talk. Man in the middle and time-based attacks apply regardless of the stack. Another example was on the subject of caching via xcache and memcache. Other highlights included The State of Mono Project and Ted Haeger's presentation on Bungee Labs' Platform as a Service. It contained quite a bit of marketing buzz such as "build.theApp() != theCrap" but did unearth some interesting issues startups in the open source community face around licensing models in the cloud. It was an eye opener as I am not in the startup space nor have I given much thought to this area. Check out his blog post on Sharing Source Code In The Cloud.

This turned out to be an awesome learning experience. It has been a couple years since I had an Ubuntu (hoary hedgehog) server setup and ran on a LAMP stack. While I was definitely exposed to some neat tools on the Linux platform, the most important takeaway was one I sought for prior to the event. That is: Keeping focused on the problems at hand and not getting too entangled into a particular technology stack. These, along with Google TechTalks, Papers and MIT OpenCourseWare, are the types of things that can prevent one from having tunnel vision and becoming complacent.


Tuesday, April 22, 2008 #

Jeremy Miller, Ted Neward, Charlie Calvert in the Fish Bowl.

Fortunate to get the email invite after being on the waiting list, this turned out to be a tremendous experience with participants such as Martin Fowler, Brad Abrams, Jon Lam, Scott Hanselman, Phil Haak, Scott Guthrie (sneak peek), Roy Osherove, the list goes on.

Jeremy Miller convened a talk on the growing pains in dealing with an evolving system over the years. In his development of StructureMap, he highlighted some anti-patterns that caused him much grief (i.e. simple duplication leading to a great headache during refactoring) as well as some principles that saved his bacon (i.e. open close principle, tell/don't ask, double dispatch, etc). What intrigued me was that two of the most qualified individuals (Martin Fowler and Brad Abrams) in the open space did not dominate the discussion and focused on listening to the trials and tribulations of the developer. In a relaxed environment, I saw a level of respect for fellow developers.

The JavaScript Session convened by Eleutian folks churned for a bit with some philosophical debates. But it did turn out with people sharing their pains/experiences developing javascript heavy applications. One guy was highlighting his experiences starting off with a Ajax/DHTML application and subsequently scrapping that for Flex and highlighting pieces that were reusable.

What actually stuck out for me was a VS2008 plugin tool from Justin Angel. Though not yet refined, I'm hoping he makes this publicly available. I think we can all agree that the tooling for javascript is lackluster and this was an attempt to improve some of the DX during his Silverlight 1.0 development days. UX being User Experience; thus, DX shall be the Developer Experience. Yes, it's all about agility. Just like how users don't appreciate un-intuitive and unresponsive UIs, developers also seek that constant feedback mechanism. Nothing like an empty error list or a list of green lights to validate your development contributions.

I was somewhat surprised to see only 5 people in attendance for the PEX talk: Roy Osherove, two Microsoft employees, another attendee and myself. I suppose it's a hard sell when you have Scott Hanselman speaking at the same time slot. Albeit, this talk was no slouch either with the creator of MBUnit, Peli de Halleux and the guy who started this up, Nikolai Tillmann. I had heard about this project and was initially skeptical but was ready to get my hands on this at the end of their demo. As you can probably imagine, this isn't just a random test generator. There are attributes allowing you to specify your object of interest. As PEX avoids branching into BCL and testing the framework, I can see this going further to exclude in-house components. Regardless of this, Roy verified with Peli the ability to mock objects. This is the type of tool you can simply setup and distribute the workload amongst your spare machines. While there is a lot of potential here, there are also two major brick walls:

  1. Lack of support in multi-threaded testing as each test executes on a thread. Although, this problem isn't specific to PEX or its concepts and is a general debugging/testing problem.
  2. There is no ship vehicle for this nifty project. This means that only Microsofties can play with this on codebox right now. Productizing is a long a windy road (strangler application anyone?).

Other highlights included a conversation on Next Generation Architectures and another conversation on Scaling Agile Development. This composed of about 10 people describing their experiences running an agile shop and enforcing different strategies. Finally, Jon Lam's talk on IronRuby was a great example of testing suites in action. To maintain its Ruby Roots, the folks have taken the testing suites of Rubinious and made it pass against IronRuby.

Jon Lam on IronRuby

Aside from all of the above, personal takeaways from this conference include:

  1. Learning more about IronRuby and picking up on new idioms via reading the code of these native speakers
  2. More on Dynamo
  3. Playing with Framework Design Studio Brad spoke of
  4. Learning how to PEX IT!

Looking forward to more of these in the future.


Tuesday, April 01, 2008 #

Well, Google came up with Gmail Paper last year. So how could they top the 2007 Edition. Here's how:

 

They must have been peeking at the Hallmark e-cards feature request list. Enjoy!

Check out the specs at: http://mail.google.com/mail/help/customtime/index.html and their formula for a maximum of 10 emails per year:

Their findings:

N = Total emails sent
P = Probability that user believes the time stamp
φ = The Golden Ratio
L = Average life expectancy


Friday, January 25, 2008 #

Haven't been contributing to this series in a while, so here's a standard one to ease back into the flow...

Given any two large List<int>, what is the quickest way to find the mutual intersection of the two? Now take into consideration memory constraints?


Thursday, January 24, 2008 #

In about a month, Windows Server 2008 will RTM. With Windows Vista, we've become familiar with the more modern looking Event Viewer. And for Windows Server 2008, the event viewer is also updated. However, if you check out your DNS Manager Global Logs in 2008, the event log dialogs retain the 2003 look and feel. Guess they never got to it and is no more than a fun quirk. In any case, looking forward to this immense release and not simply for the IIS7 web server environment. Although, they did recently release a web migration and replication tool for IIS7. More here.

It appears that I've been staring at Windows products too much lately and noting quirks. The next upcoming post will be quirk free...I hope :)


Wednesday, January 23, 2008 #

I blogged about MSDN Community Content last year. A month ago, they celebrated their first anniversary. Recently, I logged in and was ready to add content only to find some quirks:

  1. On an initial glance, it would appear that previous posts had disappeared.
  2. Discrepancies in the URLs between the user's page and the rss feed. (i.e. http://msdn2.microsoft.com/en-us/library/system.collections.specialized.listdictionary(VS.85).aspx vs. http://msdn2.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx). This meant that community content in the former URL didn't show up in the latter and vice versa.
  3. http://msdn2.microsoft.com/en-us/library/*(VS.71).aspx doesn't accept community content.

From #1 and 2, it seemed like MSDN community wiki was experiencing some issues with content migration. A quick search through Microsoft Forums confirmed this to be the case. Based on the thread, it appears the community team is working on ironing out their migration story though they didn't describe how.

One particular strategy to take would be to allow users to select which offerings (VS.85, VS.80, etc) to percolate to. However, the ideal flow would be to have the MSDN Community Content display all content regardless of the URL version. The UX would be a lot smoother and save users from having to sift through each version/URL to find community content. Additionally, if the community content only applies to a particular version of .NET, the content contributor should call that out. And if that is missing, readers can either check the date on the comment or another contributor can come in and add, "this is a 2.0 issue and has been fixed in 3.0" OR "this class is obsolete, please use X to conform to best practices". Ah, that is the beauty and very purpose of wikis! It handles content history/versioning and empowers the users to drive up content quality and conciseness.

So if you're interested in adding community content, be weary of which entry point you take (i.e. http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(VS.85).aspx vs. http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx (currently VS.90)). Unfortunately, if they're issues pertaining .NET 1.1 or a BCL issue inherited over the different iterations, note that you won't be able to add content in the VS.71 pages.

 

Video of the Day:

The Lone Server from Windows Server Division Weblog


Tuesday, January 01, 2008 #

One way to look at the computer glitch malfunction for the 2008 Space Needle Fireworks Celebration is that we got extra time to savor the welcoming of 2008. What would normally have been an 8 minute show turned out to be 10+ minutes. All the more time to inspire ourselves for this new year. In continuation with the previous post...

"The hardest thing is to go to sleep at night, when there are so many urgent things needing to be done. A huge gap exists between what we know is possible with today's machines and what we have so far been able to finish."
- Donald Knuth

As Brian Scarbeau pointed out, see Randy Pausch's final lecture at Carnegie Mellon at: http://video.google.com/videoplay?docid=362421849901825950&hl=en

Monday, December 31, 2007 #

As I part ways with 2007, I admire the scores of bloggers with their resolutions for 2008. As I am without such a list, I only have the following quote to offer.

"Live as if you were to die tomorrow. Learn as if you were to live forever."

Mohandas Gandhi

In that spirit of continuous learning and personal edification, provided below is the link to MIT Open Courseware:

http://ocw.mit.edu/OcwWeb/web/home/home/index.htm

Courtesy of news from Wired.

 

Marching into 2008, looking forward to another year where "Software Happens" and more learning along the way! :)


Thursday, December 13, 2007 #

I've been meaning to post the following but only got to it just now. For those that have started playing around with the ASP.NET 3.5 Extensions CTP, you will have no doubt come across being unable to access controls declared in aspx from code behind. This is a heads up for those wanting to start dabbling in the MVC framework.

When you create a new ASP.NET MVC web project, the pages don't have a designer.cs file. In a typical web project, this is still dandy since you can access the controls by ID in code behind; the designer files are simply abstracted. However, in the MVC web project, you will get compilation errors. Instead, you could access inline. ASP.NET runtime will generate your declared controls (peek in temp dirs of your loaded modules), which explains why you can access and manipulate the controls inline.

Naturally, you may not want to do this inline. To access your controls in code behind, simply right-click on your web project and select "Convert to Web Application". And Voila!

Courtesy of ScottGu


Monday, December 10, 2007 #

Well, Microsoft Download Center Beta was launched recently. I only came across this today while I was uninstalling very early bits of ASP.NET MVC bits and went to download the new ASP.NET 3.5 Extensions CTP.

Their new download center is powered on Silverlight. Note that the Detailed Download pages are still typical ASP.NET pages. It's the Search results and the Quick Details Download views that are new (i.e. http://preview.microsoft.com/downloads/Search.aspx?SearchText=entity+framework).

My early impressions leave me undecided on the new search results behavior. Since it is now done in Silverlight, you lose the ability to page back through your history. Granted, their results page provides a more seamless experience without entire page loads; however, this is duplicated with AJAX. I was really looking forward to seeing more innovation, interactivity and a showcase of Silverlight power.

 

In any case, this will be a big step for Microsoft's quest into Flash territory. When Microsoft Download Center is brought out of Beta, you should see a dramatic increase in the Silverlight adoption rate.


Saturday, December 08, 2007 #

As if there weren't already enough new technologies to play around with recently, here comes another that I mentioned previously.

The hub for Parallel Computing is at: http://msdn2.microsoft.com/en-us/concurrency/default.aspx. And you can download the Parallel Extensions CTP at: http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&DisplayLang=en.

Late Nov and Dec has been a developer's dream, so many toys to play with in such a short timespan!