Generic

97 Things Every Software Architect Should Know

During my recent Borders’s-browsing, I came across Richard
Monson-Haefel’s book, 97
Things Every Software Architect Should Know
with the tag line, “Collective
Wisdom from the Experts”. The book is interesting and even though it falls
short in providing details, gives a good overview of architectural principles. Mind
you, this is not a book with case studies or principles of how to define an
effective interface with example but more of a 10K ft view of software
architectural “principles”. Recently I have seen few books which belong to this
genre of collective wisdom aka geek interviews such as “Secrets
of the Rock Star Programmers: Riding the IT Crest
” and “Coders
at work
”. I think 97 things is a good addition to this observe-and-report
tradition from people presumably working in the trenches of software
development.

Following is the table of contents and I have highlighted
the chapters/metaphors I liked.

1. Don’t Put Your Resume Ahead of
the Requirements

2. Simplify Essential
Complexity; Diminish Accidental Complexity

3. Chances Are, Your Biggest
Problem Isn’t Technical

4. Communication Is King;
Clarity and Leadership, Its Humble Servants

5. Application Architecture
Determines Application Performance

6. Seek the Value in Requested
Capabilities

7. Stand Up!

8. Everything Will Ultimately
Fail

9. You’re Negotiating More Often
Than You Think

10. Quantify

11. One Line of Working Code Is
Worth 500 of Specification

12. There Is No
One-Size-Fits-All Solution

13. It’s Never Too Early to
Think About Performance

14. Architecting Is About
Balancing

15. Commit-and-Run Is a Crime

16. There Can Be More Than One

17. Business Drives

18. Simplicity Before Generality,
Use Before Reuse

19. Architects Must Be Hands On

20. Continuously Integrate

21. Avoid Scheduling Failures

22. Architectural Tradeoffs

23. Database As a Fortress

24. Use Uncertainty As a Driver

25. Warning: Problems in Mirror
May Be Larger Than They Appear

26. Reuse Is About People and
Education, Not Just Architecture

27. There Is No ‘I’ in
Architecture

28. Get the 1,000-Foot View

29. Try Before Choosing

30. Understand the Business Domain

31. Programming Is an Act of
Design

32. Give Developers Autonomy

33. Time Changes Everything

34. “Software Architect”
Has Only Lowercase a’s; Deal with It

35. Scope Is the Enemy of
Success

36. Value Stewardship Over
Showmanship

37. Software Architecture Has
Ethical Consequences

38. Skyscrapers Aren’t Scalable

39. Heterogeneity Wins

40. It’s All About Performance

41. Engineer in the White Spaces

42. Talk the Talk

43. Context Is King

44. Dwarves, Elves, Wizards, and
Kings

45. Learn from Architects of
Buildings

46. Fight Repetition

47. Welcome to the Real World

48. Don’t Control, but Observe

49. Janus the Architect

50. Architects’ Focus Is on the
Boundaries and Interfaces

51. Empower Developers

52. Record Your Rationale

53. Challenge
Assumptions—Especially Your Own

54. Share Your Knowledge and
Experiences

55. Pattern Pathology

56. Don’t Stretch the Architecture
Metaphors

57. Focus on Application
Support and Maintenance

58. Prepare to Pick Two

59. Prefer Principles, Axioms,
and Analogies to Opinion and Taste

60. Start with a Walking Skeleton

61. It Is All About The Data

62. Make Sure the Simple Stuff Is
Simple

63. Before Anything, an
Architect Is a Developer

64. The ROI Variable

65. Your System Is Legacy; Design
for It

66. If There Is Only One
Solution, Get a Second Opinion

67. Understand the Impact of
Change

68. You Have to Understand
Hardware, Too

69. Shortcuts Now Are Paid Back
with Interest Later

70. “Perfect” Is the
Enemy of “Good Enough”

71. Avoid “Good Ideas”

72. Great Content Creates Great
Systems

73. The Business Versus the Angry
Architect

74. Stretch Key Dimensions to
See What Breaks

75. If You Design It, You
Should Be Able to Code It

76. A Rose by Any Other Name Will
End Up As a Cabbage

77. Stable Problems Get
High-Quality Solutions

78. It Takes Diligence

79. Take Responsibility for
Your Decisions

80. Don’t Be Clever

81. Choose Your Weapons Carefully,
Relinquish Them Reluctantly

82. Your Customer Is Not Your
Customer

83. It Will Never Look Like That

84. Choose Frameworks That Play
Well with Others

85. Make a Strong Business Case

86. Control the Data, Not Just the
Code

87. Pay Down Your Technical
Debt

88. Don’t Be a Problem Solver

89. Build Systems to Be Zuhanden

90. Find and Retain Passionate
Problem Solvers

91. Software Doesn’t Really Exist

92. Learn a New Language

93. You Can’t Future-Proof
Solutions

94. The User Acceptance Problem

95. The Importance of Consommé

96. For the End User, the
Interface Is the System

97. Great Software Is Not Built,
It Is Grown

 

Share

Note to Self – Helpful links in getting MVC to work on IIS 5.0

Helpful links in getting MVC to work on IIS 5.0

Using ASP.NET MVC on IIS 5

http://blogs.microsoft.co.il/blogs/dorony/archive/2007/12/15/using-asp-net-mvc-on-iis-5.aspx

and if you encounter the same error as I did

ASP.NET 2.0 Application on IIS 5 Resulting in Error (aspnet_wp.exe (PID: XXXX) stopped unexpectedly.)

http://stackoverflow.com/questions/233478/asp-net-2-0-application-on-iis-5-resulting-in-error-aspnetwp-exe-pid-xxxx-s

Share

SQL Azure Talk @ Orange County SQL User Group

Last night I spoke to Orange County SQL user group on SQL Azure, Microsoft’s cloud based relational database. SQL Azure, dubbed as re-launch of SQL Data Services (SDS) (and later SQL Services) is a cloud-based service from Microsoft offering data storage capabilities for Azure Services Platform. In the talk I discussed the challenges of putting a relational database in the cloud and Microsoft’s adaption to user feedback that they wanted SQL server in the cloud and not a schema-less entity-attribute value tables as offered by other vendors and previously was the main focus of SDS. Azure team changed course for a better customer targeted implementation catering to the relational cloud even though conventional wisdom states that relational databases aren’t as scalable as the schemaless Entity-Attribute-Value (EAV) tables used by Amazon SimpleDB, and Google’s BigTable and the App Engine’s data store.

Slides SQL Azure Presentation.pptx and code sample Connectivity.rar

Not surprisingly, a lot of focus during these talks are put on short-comings of the SQL Azure instead of the wonderful capabilities it offer. Being a VLDB aficionado, I found the attempt of putting the relational database in the cloud quite heroic to be honest. Like any v1 product, there are certain limitations but again IMHO, community needs to understand the large scale distributed database implementation issues and therefore comparing it against SQL 2008 on premise is not really an apple to apple comparison.

Along with slides and code samples, I demonstrated the connectivity from SSMS (workaround for connecting with SQL Server Management Studio), discussed SQL Azure Pricing and SQL Azure SLA (Service Level Agreement) for which “Monthly Availability” of 99.9% with a 9.99 fee, is pretty awesome.

  • Web Edition:  Up to 1 GB relational database = $9.99 / month
  • Business Edition:  Up to 10 GB relational database = $99.99 / month
  • Bandwidth = $0.10 in / $0.15 out / GB

The new and improved control panel allows to do simple tasks such as firewall IP additions, connection strings and database provisioning quite easy.

When connecting to SQL Azure, please ensure that your firewall settings (as shown below) includes the IP range you are trying to connect from.

 

Feedback from Attendees (in the order of strong opinions)

·        Connectivity with SSMS needs to be fixed ASAP to avoid the workarounds

·        10GB is too small and makes the v1 not enterprise ready.

·        Error log un-availability in V1 could be a deal breaker for some DBA’s.

·        SQL Agent Support is an absolute must have from a DR and on-premise replica standpoint.

·        Programmatic way of finding the size of database

·        Linked Server Support is really important.

·        CLR Support is needed for a lot of practical purposes.

·        SQL Profiler support should be there.

The slides, code samples and links from the talk are as follows.

·        SQL Azure Home

·        SQL Azure, Let’s get started – Lynn Langit

·        SQL Azure Training Kit

·        SQL Azure Explorer Add-in

·        SQL Azure Migration Wizard v1.9

·        SQL Azure Explorer on Channel 9

·        David Yack on Starting with SQL Azure

·        geekSpeak: REST and the Windows Azure Services Platform with Adnan Masood

·        Getting Started with SQL Azure | David Gristwood | Channel 9

·        Hands on with SQL Azure (CTP 2) | David Gristwood | Channel 9

·        Billing system testing behind Microsoft’s SQL Azure outage this week

·        Amazon Attempts to Preempt PDC 2009 Release of SQL Azure with MySQL 5.1 Relational Database Service

·        SQL Data Services Abandons REST for TDS API and Knocks My Socks Off

·        Frequently asked Questions about SQL Azure

·        Stephen Forte`s Blog – Building a RESTful application with SQL Azure

·        SQL Pass Summit on Azure

·        Project Rivera, Windows Azure Code samples

PS. Conveniently Amazon attempts to Preempt PDC 2009 Release of SQL Azure with MySQL 5.1 Relational Database Service Amazon Relational Database Service (Amazon RDS) Beta, announced on 10/27/2009, which delivers pre-configured MySQL 5.1 instances with up to 68 GB of memory and 26 ECUs (8 virtual cores with 3.25 ECUs each) servicing up to 1 TB of data storage

Share

Why is naïve Bayesian, naïve?


If I had a dollar for every time someone asked me this question, I would have enough money to buy Trevor Hastie’s The Elements of Statistical Learning Second Edition :) . Anyways, here is a good explanation from Algorithm’s of the intelligent web on what is so naïve about naïve Bayesian?

“This
is the calculation of the conditional probabilities
p(Y|X).
The term
naïve has its origin
in this method. Note that we’re seeking the probability of occurrence for a
particular instance,
given a particular concept. But each instance is uniquely determined by
the unique values of its attributes
. The conditional probability of the
instance is, in essence,
the joint probability of all the attribute value conditional probabilities.
Each attribute
value conditional probability is given by the term
(aV.getCount()/concept-Priors.get(c)). In the preceding implementation, it’s assumed that all
these attribute values
are statistically independent, so the joint probability is simply the product of
the individual probabilities for each attribute value. That’s the “naïve” part.

In general, without
the statistical independence of the attributes, the joint probability wouldn’t
be equal to that product.”

And the interesting part is


“We
use quotes around the word naïve because it turns out that the naïve Bayes algorithm
is very robust and widely applicable, even in problems where the attribute independence
assumption is clearly violated. In fact, it can be shown that the naïve Bayes
algorithm is optimal in the exact opposite case—when there’s a completely deterministic
dependency among the attributes”

BTW, Algorithm’s of the intelligent web is this excellent book by Haralambos Marmanis and Babenko Dmitry; recommended reading.

Share

Theory Day @ Georgia Tech – Algorithms, Combinatorics and Optimization

ACO, a multidisciplinary PhD Program in Algorithms, Combinatorics and Optimization at the Georgia Institute of Technology, will be streaming live lectures by four prominent computer scientists. Live web streaming available at no charge.

Theory Day Celebrating 50th Anniversary of Foundations of Computer Science and 20th Anniversary of the ACO Program at Georgia Tech Held in conjunction with FOCS 2009 on Saturday, October 24, 2009 in the LeCraw Auditorium on the Georgia Tech campus. The event will be webcast live from the link below and will consist of one hour lectures by

12:30-1:30 Richard Karp, University of California, Berkeley         What Makes an Algorithm Great?

 1:50-2:50 Mihalis Yannakakis, Columbia University          Computational Aspects of Equilibria

 3:10-4:10 Noga Alon, Tel Aviv University           Disjoint paths, isoperimetric problems, and graph eigenvalues

 5:00-6:00 Manuel Blum, Carnegie Mellon University          Can (Theoretical Computer) Science come to grips with Consciousness?

The times listed are EDT, same time zone as New York.

To register, for more information and to watch the lectures live please visit

    http://www.aco.gatech.edu/conference/focs-aco/

Videos of the lectures will be archived at the same location.

ACO is a multidisciplinary PhD Program in Algorithms, Combinatorics and Optimization at the Georgia Institute of Technology.

via Jeff Bergman

Share

Debugging Tips & Tricks with Paul Sheriff – SGV.NET User Group Meeting – Wed 21st Oct 2009

Paul Sheriff will be speaking to our user group Wednesday night on Debugging tips and tricks. With his interactive and easy to understand presentation style, his sessions are highly recommended. Details below.

Debugging Tips & Tricks with Paul Sheriff
Wed 21st Oct 2009

Abstract: If you have not really dug into the VS.NET debugger, then this seminar is for you. You will explore all the various breakpoint, tracepoint, data tips, and the myriad features that this powerful debugger let’s you use. You will see how to set conditional breakpoints, learn to filter threads based on their thread id, and learn the difference between the Watch window, locals and immediate window.

You Will Learn:

   1. Set breakpoints with hit counts, filters, conditions.
   2. See how to use data tips, visualizers, and make object ids
   3. See when objects are about to be garbage collected
   4. Learn how exception handling can be used as a debugging aid

About the Presenter: Paul D. Sheriff is the President of PDSA, Inc. (www.pdsa.com), a Microsoft Partner in Southern California. Paul acts as the Microsoft Regional Director for Southern California assisting the local Microsoft offices with several of their events each year and being an evangelist for them. Paul has authored several books, webcasts, videos and articles on .NET, SQL Server and SharePoint. Paul can be reached via email at PSheriff@pdsa.com or at Paul Sheriff’s Inner Circle (www.PaulSheriffInnerCircle.com).

Meeting Agenda:

    * 6:00p Mixer/Networking/Pizza
    * 6:30p Presentation Starts
    * 7:30p Break
    * 7:45p Presentation Resumes
    * 8:45p Raffle

Directions: Park in parking structure at 570 E Huntington Dr, Monrovia, CA 91016 . Meeting is across the street in  605 E Huntington Dr. Once parked, use the overhead walk way to get to the building.  The meeting will be right inside the door after the walk way.

This is a Green Dot Corporation sponsored event. There is no entry fee and the event is free for attendees.

Share

Web Application Testing using WATIN – Speaking to South Bay .NET User Group

Tomorrow
I will be speaking to the Southbay.NET users group in Torrance.
Following is the abstract of my talk. For details and directions,
please see the link below.


Web Application Testing using WATIN
Thursday, October 8th, 2009 at 6:30 PM

Web
application testing is a tough task especially in the ASP.NET web forms
environment where model‐view‐controller boundaries intermingle. To
solve this presentation is a premier to WatiN (inspired from WatiR, its
Ruby counterpart), a feature rich and stable framework. WatiN is
developed in C# and aims to bring you an easy way to automate your
tests with Internet Explorer and FireFox using .Net. Watin is
open‐source functional testing tool for web‐applications which simulate
the user actions (filling/submitting form), drives the browser and
allows you to do your web application testing in a convenient and
developer friendly way. This talk focuses on how you can use WatiN to
do web application testing and integrate it with your acceptance
testing framework. The presenter provides a step by step guide to build
test frameworks for your website using WatiN. This is a code intensive
talk so those allergic to slides are encouraged to come.

For details and directions.

Share

Windows 7 Developer Boot Camp – Free Training

Free Developer Training for Windows 7 Developers in LA Area.

“Jump-start your Windows 7 experience by joining some of the top Windows
7 engineers, including Mark Russinovich, Landy Wang, and Arun Kishan,
for an intense, high quality boot camp. Whether you are looking to
create more performant, reliable, or secure applications, or you are an
application developer looking to leapfrog past your competition, this
FREE Boot Camp can get you from zero to hero in less than eight hours!
This fast-paced Windows 7 marathon will cover it all including: (1)
Kernel and architectural improvements, (2) new shell integration
points: taskbar, libraries and search, and (3) applied tips for getting
the most out of today’s hardware with the sensor & location
platform, multitouch, and the new graphics libraries (Direct2D, DirectX
11) that take advantage of the GPU. Whether you’re a C++, C# or Visual
Basic developer, building a .NET or a Win32 application, we’ll give you
actionable tips to get the most out of the Windows platform.”

How to Register:

Yes, you’ll have to register through the regular registration site.
Simply select “pre-conference workshop only” as your registration type
and when you get to the workshop selection page of the registration
form, you’ll be able to pick the Windows 7 bootcamp as a free item. The
workshop is indeed on Monday Nov 16th.

Details here: http://microsoftpdc.com/Sessions/WKSP08

Share

WCF Interoperability – ASMX, WCF or MVC REST SDK – Open Questions

A while ago I did a blog
post
on WCF-ASMX interoperability which came out from an experience I had in service collaboration with a partner. In a recent conversation
with Jeff Bergman, a friend
and co-worker, there was a question of WCF or not to WCF on a project which
requires similar service interop and since I believe in Atwood’s theory of strong opinions
held weekly
, I jumped in with the opinion of using WCF contrary to my
own earlier recommendation
.

Jeff of course disagreed and pointed out the Christian’s Weyer’s
article on flattening. For my excellent
logging and tracing
in WCF argument, he stated that “for asmx, you can add the [SoapLoggerExtensionAttribute]
to get some kind of logging of soap requests”
. Therefore I am quoting his argument below; I am still somewhat unconvinced ‘in principle’ but pragmatically speaking, he drives a hard bargain!

“At the end of the
day, I think the WCF architecture is powerful but with power comes complexity,
complexity in configuration files and complexity in the wsdl it generates and
complexity in the pipeline architecture and how you can plug into it.

As for Rest, the WCF
team has developed the MVC Rest SDK.

I prefer convention
over configuration and simplicity of code instead of injection as a general
principle.

My preference would to
be to use WCF in situations where you have more control over the client
(internal uses mainly) and want to support different communication
channels.  At the end of the day when dealing with partners,
Interoperability is the biggest challenge and making things as simple to
consume as possible is desirable.

Have you encountered an interop issue with your WCF service and
what has been your approach? Leave a comment or email me.

Happy Coding!

Share

Call for Volunteers – SoCal Code Camp – LA @ USC – November 21-22, 2009

Call for volunteers: Seeking volunteers for the code camp support team to help register
speakers, attendees, & help with general organization on the
up coming SoCal Code Code Camp LA event days (Saturday/Sunday Nov 21/22).

James Lin and I are heading up Volunteer Coordination effort so if you are available please contact us directly via my email (my full name @ gmail.com or james at chasecom dot com and put volunteer in subject line). You can also sign up via the “Contacts” menu of www.socalcodecamp.com.

Thanks!

Adnan Masood
Volunteer Coordinator
SoCal.NET Code Camp
www.SoCalCodeCamp.com

President & Co-Founder

San Gabriel Valley .NET Developers Group
www.SGVdotNet.org

Share
Go to Top