Showing posts from 2012

Scratching the Surface

I just received my pre-ordered Microsoft Surface RT the other day, and aside from the fact that it was 2 weeks late and those at the Microsoft Store were clueless about exactly what happened or apparently how shipping or tracking even works, my first impression was profound disappointment. Why him? Why not me? I like Windows 8, I’ve been running it on my PC and my wife’s laptop for a few months now.  I have a windows phone 7 which I also like.  I find the unified Metro experience across devices and the integration between them appealing.  I was hoping that the Surface would basically be an iPad that ran Windows 8 instead of iOS.  I wanted the form factor of the iPad2 with the familiarity and convenience of windows (things like having separate accounts for my kids, Zune, printing, etc.).  He’s good, you’re not. However, the Surface is not an iPad.  Most strikingly due to its odd dimensions.  Its taller and narrower than an iPad2 by a lot. Its also heavier and thicker.  When I tried

(The long overdue) RIF Notes #20

“I have offended God and mankind because my work didn’t reach the quality it should have” – Leonardo da Vinci The end of formality – “Formality is more than a dress code, of course. It infects how people talk, write, and interact. It eats through all the edges and the individuality, leaving only the square behind. In other words, it’s all about posture, not productivity.” Productivity vs. Guilt and Self-Loathing   Competing in forgotten markets - Alan Cooper talks about where the opportunities are in the market. Take Control of FogBugz - Fogbugz is customizable. Windows 8 Terminology and Concepts – By explaining the terms Rocky demonstrates how much complexity there is. Scrum in 5 Minutes Bandwidth, Priority, and Service Contracts – “Everybody’s talking scalability in terms of number of servers and memory, storage, CPU per server – but what about the network? More importantly, what happens when (not if) you run out? Well, the latency of your calls increase – and that can be

RIF #19

“Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely” – Agile manifesto Software Inventory - Joel makes the analogy that unused code is costly “inventory” and discusses three places where inventory piles up: Feature backlogs, bug database, undeployed features. Visual Studio 2012 and TFS 2012 Official Release Timeframe Announced Is the laptop doomed? - Rocky lays down a pretty compelling case for using a powerful tablet and a docking station as your primary workstation, with some caveats. The jQuery Mobile team is excited to announce the release of version 1.1.1 Chutzpah 2.0 Released - Can we get some javascript unit tests up in here? Here’s why we keep getting hacked – clear and present Billabong failures - Troy hunt details some pitiful security Clean up your MVC app with SignalR - Another reason to take a look at SignalR Google Now: There’s A Fine Line Between Cool And Creepy Announ

Optical disks are a form of torture.

CD’s, DVD’s, Blu-Ray’s and Wii games are an aggravating lot.  Every time I go to put in a movie for the kids, whether the DVD player in the minivan or the Blu-Ray player in the house I find myself aggravated before I’ve even begun.  Hari kari Playing a movie involves an obsessive compulsive like ritual.  First I must daintily remove it from its delicate casing, without touching it, like a game of Operation .  Then I crane my neck from side to side while tilting it in the light to catch a glimpse of any smudges or blemishes, which there always are.  To be followed by gentle polishing and re-inspecting.  When I’m satisfied that I’ve done what I can I put it in the player and then wait patiently for what seems like minutes, to be greeted by a series of frustrating menu’s and images that I’m maddeningly not allowed to bypass no matter how many times I’ve already suffered through them, until I’m finally able to select play.  Then I wait for the inevitable complaints from the kids, “Dad it

Blinded by my fear of being blind

“the act of observing will influence the phenomenon being observed” Last year we implemented dynatrace as our APM tool to monitor and troubleshoot performance issues with our .NET applications.  Dynatrace is an incredibly powerful tool and immediately provided deep and rich analytics on the performance characteristics of our applications.  We had a bit of a bumpy road with the initial implementation, on-going difficulty tuning it, and occasional unpleasant side-effects.  Overall, however, I feel like a blind man who’s been given impaired vision.  Out of the emptiness Prior to dynatrace, performance optimization involved an extremely painstaking process of Trace.Write/trace.axd, real-time analysis was virtually impossible, and debugging major performance problems required dump files, WinDbg and luck.  But now, at a glance, I can see top consuming methods, database calls, and a whole host of other metrics that help me see how the application is behaving in the real-world with the ab

RIF Notes #19

“A late change in requirements is a competitive advantage” - Mary Poppendieck See the Entire List of Free E-Books from Microsoft Press Facebook & your privacy – More than a little disconcerting An Overview of Performance Improvements in .NET 4.5 Responsive design using Foundation with ASP.Net MVC Time-Saving VS11 and ASP.NET 4.5 Features you shouldn't miss Using IIS Logs for Performance Testing with Visual Studio – Using weblogs to playback traffic in for testing. Computer Hard Disk Performance – From the Ground Up FluentAssertions – Unit Testing Made Better – Part 1 “Don't you roody-poos wish that you could Be a hip hop soldier”

RIF Notes #18

“Ignorance more frequently begets confidence than does knowledge” –Charles Darwin Stop working all those hours – Harvard business review article urging leaders to focus on results not hours. Who's the Boss? There Isn't one – Wall street journal article discusses a few companies that operate without traditional managers, GitHub among them. Top 7 dilemmas facing today's developers - Platforms, databases, user control -- programming quandaries take hold before the first line of code A good day's work - Advice from 37signals on how to feel productive. JavaScript Strict Mode Explained 5 Useful Lies to Tell User Research Participants Upshot.js - A glimpse at relatively undocumented new javascript library that will be included with MVC4 Bundling and Minification - A technique for optimizing external js and css files that will be available in ASP.NET 4.5 Google Is Evil Microsoft Declares the Future of ASP.NET is Web API - Interesting post from Shaun Walker (DotN

Another article on This time with comments.

A private cloud that isn't really a cloud at all

Azure unbranded

It seems like Microsoft is dropping the name Azure from its cloud offerings? I guess I need some help from marketers understanding why Microsoft gravitates towards names for products that are so generic and bland as to be unsearchable terms.  I liked the name Azure, it made it clear when discussing and comparing technologies to know what you were referring to. And more importantly when trying to search for information “Windows Azure” and “SQL Azure” are pretty specific.  Try to search for “Windows” or even “.NET”.  Now we can add to that list “Cloud Services”, “CDN” and “Service Bus”, yeah I’m sure that’ll narrow it right down. There must be some branding reason for it but it eludes me.  I have my own terms that might work better. Windows Azure Compute The Windows Azure Platform Thing Windows Azure CDN It Windows Azure Storage That Windows Azure Traffic Manager This Windows Azure Virtual Network Some AppFabric Cache More AppFabric Service Bus Stuff AppFabr

RIF Notes #17

“Simplicity is prerequisite for reliability” - Edsger W. Dijkstra Ajax Control Toolkit May 2012 Release - I’m always fascinated when the ajaxtoolkit gets updated. A/B Testing: It's not about the results, and it's definitely not about the why - Pointing out that you can measure behavior but you can’t discern why a certain change had a particular effect on behavior from an A/B so you need to understand your expirement. Your WebAPP’s Worst Performance Bottleneck Maybe in the CSS Stylesheet - This another potential source of performance problems I’ve personally never paid attention to. Knockout 2.1 Is Out More ways to measure your website's performance with User Timings - New Google Analytic metrics for measure performance characteristics of the page execution client-side. Mobile analytics This just in: Cloud computing is hard and takes a long time - So its not just me? Nice C# idiom for parameterless lambdas - Interesting little syntax trick I came across The Flop

RIF Notes #17

“Simplicity is prerequisite for reliability” - Edsger W. Dijkstra Ajax Control Toolkit May 2012 Release - I’m always fascinated when the ajaxtoolkit gets updated. A/B Testing: It's not about the results, and it's definitely not about the why - Pointing out that you can measure behavior but you can’t discern why a certain change had a particular effect on behavior from an A/B so you understand your expirement. Your WebAPP’s Worst Performance Bottleneck Maybe in the CSS Stylesheet - This another potential source of performance I’ve personally never paid attention to. Knockout 2.1 Is Out More ways to measure your website's performance with User Timings - New Google Analytic metrics for measure performance characteristics of the page execution client-side. Mobile analytics This just in: Cloud computing is hard and takes a long time - So its not just me? Nice C# idiom for parameterless lambdas - Interesting little syntax trick I came across The Floppy Disk means Save

You can’t have your cookie and cache it too

I recently discovered a poorly documented (in fact I couldn’t find any documentation about it) side effect of writing server-side cookies.  They cause outputcaching not to work, and they do so in a nonobvious way.  If your outputcache directive looks like this: <%@ OutputCache Duration= "100" VaryByParam= "none" location= "Any" %> But somewhere in your page you have code that looks like: Response.Cookies[ "user" ][ "value" ] = "something" ; The page will not be cached.  Sure, it’ll have the public cache-control/expires headers, but the value will always be 100 (duration), and it won’t be cached by IIS.  There won’t be any errors or warnings, it simply won’t cache properly.  In our case it was even less obvious because the cookie writing code had been written a long time ago in a base page, and was only triggered on certain pages with certain querystring parameters.  Even when I discovered pages that I had assumed to

RIF Notes #16

"One of the painful things about our time is that those who feel certainty are stupid, and those with any imagination and understanding are filled with doubt and indecision" – Bertrand Russell Learn to Read the Source, Luke – Jeff Atwood encourages us to read source code. 10 Reasons Why Visual Basic is Better Than C# – See, VB is better! The ASs of Distributed Computing – Overview of definitions of cloud computing terms Estimating is often helpful. Estimates are often not Kiva Engineering: Innovation Iteration – Dedicating development sprints to infrastructure or other IT chosen features. Providing Synchronous / Asynchronous Flexibility With jQuery.when Storytelling that inspires and delivers vision: Lessons from Google Glass –“But there's little that's emotionally resonant. It feels like a demonstration of how you'd do all the stuff you do on your iPhone today in your Glass tomorrow. The focus is on performing tasks that highlight features. It com

Jason speaks out…sort of.

I was recently interviewed on the Uhuru podcast .  Other than the fact that you could probably play a drinking game based on the number of times I say “sort of”, it turned out pretty well. Listen

The 40 year old Twinkie

Last year I experienced a confluence of events that would be an exaggeration to say  changed my life, so I’ll opt to say they modified my life, not the least of which was turning forty.  Turning forty itself wasn’t that significant, more of a relief once the threshold had passed. I guess I had been subconsciously aware of its looming arrival.  Nevertheless, it got me thinking about my age and my health.  Until my thirties I had always been extremely thin, but that lost decade had seen me fluctuate between 160 and 190 lbs.  Each time I’d get heavy, disgust myself and then attempt to loose some weight fast, using Atkins , South Beach and other nonsense.  They worked temporarily but weren’t sustainable lifestyles.  About the time I turned forty last year, a few other things happened.  I had been diagnosed which some severe reflux and some other minor health concerns that required that I alter my diet.  I went to Disney with my family and found myself once again disgusted with my 180 lb.

Cuckoo for POCO Puffs: NHibernate edition

Migrating from EF model-first to code-first with FluentAPI wasn't terribly difficult and resulted in far simpler code.  Once completed, the resulting POCO's were pure enough to appear to be compatible with NHibernate.  The question I wanted to answer was how similar Fluent NHibernate is to EF’s code-first FluentAPI in terms of how it managed those POCOs.  What I was ultimately looking for was some kind of definitive answer that demonstrated that they were either similar enough as to make no difference or dissimilar in ways that made one clearly superior to the other.  The most thorough and recent comparison I had seen was Dino Esposito's in 2010 , and that wasn't definitive nor was it necessarily tailored to our particulars. Hey my man, what it look like? What I found was that the model-first to code-first conversion was a much bigger switch than from code-first to NHibernate.  The resulting NHibernate implementation looked nearly identical to the EF code-first Fluent

Cuckoo for POCO Puffs: Prequel

What exactly am I hoping to accomplish by moving to EF code-first or NHibernate? The short answer is that I'm looking to gain features that I'd otherwise have to implement while at the same time simplifying and reducing the amount the code we already have.  For the benefit of getting my own thoughts in order I want to articulate a slightly longer answer which will inventory the features and identify the potential areas of simplification and reduction. And that is what grieves me the most We have a substantial codebase which utilizes our own class-in-charge patterned persistence ‘framework’, the bulk of which still works by using the Enterprise Library and manually mapping ADO.NET structures (datarows, datareaders, commands) back and forth to the database. This approach first started in the .NET 1.1 era. The framework mainly consists of a few base classes that provide more of a template (for consistency) than anything else. This approach has lasted a long time and continues t

Cuckoo for POCO Puffs: Week 1

I completed converting my moderately complex sub-model (24 entities) from the database-first style to code-first style this week.  The results are pretty encouraging. I find your lack of faith disturbing The use of foreign key associations, POCO’s and the Fluent API vastly simplified the resulting code.  Not that I didn’t encounter my share of learning curve struggles.  The fluent api syntax for declaring relationships is a bit clumsy, and the difference between declaring properties as virtual or not and its resulting impact on lazy load behavior confused me on at least one occasion.  Notwithstanding those, the bulk of the effort was simply the brute typing involved in re-implementing all the class, repositories and relationships, as well as refactoring tests to use the new code. The EF 4.x POCO Entity Generator gave me a really good starting point, although it didn’t allow me to pick which tables, instead generating the whole database. All too easy What I found most compelling wi

Improving readership?

Just published my second article on . And, in case you missed the first .

RIF Notes #15

“If you don’t know why it works, it probably doesn’t. You just don’t know it yet.” – Steve McConnell Do you monitor negative events? - Not only monitoring errors, but watching for things that haven’t happened, like orders haven’t processed in a while. Build Mobile-Friendly HTML5 Forms with ASP.NET MVC 4 and jQuery Mobile Should All Web Traffic Be Encrypted? - This is a good question and would simplify quite a bit if we just ran our whole site under ssl. What are you in for? – Ayende talks about the tension between developers working on cool things and clients just wanting stuff done. Visual Studio 11 Beta in Context – “One ASP.NET” Dark Matter Developers: The Unseen 99% – About the silent majority of developer who aren’t blogging, tweeting, lecturing, just working. Windows 8 And Enterprise App Dev Strategy - Rocky’s take on what might be microsoft’s tablet strategy in the enterprise. “In reality, it might be less expensive for organizations to buy employees Windows 8 tabl

Cuckoo for POCO Puffs: Day 1

Now that we’re firmly on .NET 4.0, and EF 4.x has arrived I’ve begun revisiting our EF v1 style repository pattern looking to see if the new code-first and POCO support will help mitigate some of the frustration we’ve encountered with Entity Framework. The pain we’ve experienced over the past couple of years primarily falls into two buckets: The models (EDMX and designer files) can become large, unwieldy and idiosyncratic.  Refreshing it with underlying changes to the database can often result in cryptic errors, and source control merges of these files can be painful. Independent Association relationships are tricky and complicated when working in a disconnected mode.  Properly navigating these relationships often involves loading entities from two or more contexts, associating them together, and then getting them to properly persist as a complete graph when reattached to a new context. Models, Inc. Over the years we’ve mitigated some of the giant model problems (our primary datab

More Cache please

In my last post on this topic we had sailed through our peak load season only to start experiencing frequent NCrashes which brought down our web farm on a fairly regular basis.  After many conversations with Alachisoft support (and licensing) we agreed to attempt a hail Mary.  Pretend like everything’s gonna be alright, although you know it won’t be We decided to upgrade from NCache Professional 3.8 to NCache Enterprise 4.1.  It wasn’t clear whether the issues we were having were version related 3.8 vs. 4.1 or edition related.  By upgrading to 4.1 Enterprise it gave us the opportunity not only to hope that the new version was more stable but more importantly gave us the opportunity to try different topologies.  The professional edition only allowed for one topology, Replicated Cache (synchronous).  Originally, Alachisoft gave us every assurance that at our scale and load this topology should work fine (as it did for many other clients).  They insisted that our troubles with NCache w

RIF Notes #14

“There are only two hard things in Computer Science: cache invalidation and naming things” — Phil Karlton Trust is fragile – 37Signals guys relate a recent security-ish breach and how they chose to handle it. Web Standards Update for Microsoft Visual Studio 2010 SP1 - Adds CSS3 support and updates the HTML5 intellisense and validation including new JavaScript API's Better BugzScout Error Reporting – BugzScout is a simple interface for collecting crash reports from your software in the wild integrated with Fogbugz. Embracing RavenDB - Ayende’s good overview of his particular NoSql solution. One ASP.NET Sneak Peek: Elegant Web Forms and Snowballs in Hell – Hanselman points out some features of ASP.NET Webforms 4.5 The Rise of Developeronomics – Don’t know if I buy this argument but there are some amusing aspects of this article (e.g. “The one absolutely solid place to store your capital today — if you know how to do it – is in software developers’ wallets”) Farewell Stac

RIF Notes the 13th

“I can calculate the motions of heavenly bodies but not the madness of men” – Isaac Newton Here are some really interesting follow-up stats regarding black friday/cybermonday website performance Top 8 Performance Problems on Top 50 Retail Sites before Black Friday Top 10 Performance Problems taken from Zappos, Monster, Thomson and Co 5 Things to learn from JC Penney and other Strong Black Friday and Cyber Monday Performers Third Party Content Management applied: Four steps to gain control of your Page Load Performance! Why do we pay sales commissions – Fogcreek challenges the whole notion of paying sales people commissions. A really compelling argument. Stop Multitasking - “Changing tasks more than 10 times in a day makes you dumber than being stoned. When you’re stoned, your IQ drops by five points. When you multitask, it drops by an average of 10 points, 15 for men, five for women (yes, men are three times as bad at multitasking than women). “ Why Attacking Application