tag:blogger.com,1999:blog-42614936237143419802024-03-14T09:43:53.466+02:00Design CodesAviad Ezra on Software ArchitectureAviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-4261493623714341980.post-33178449785934326862017-07-22T21:46:00.001+03:002018-07-08T17:56:36.527+03:00Down with NULL!The introduction of null is arguably the biggest mistake in the history of computer science. Usage of null makes for sloppy code, cascading and often redundant null checks, buggy code due to missed null checks, and it makes for poor APIs.Tony Hoare, the inventor of ALGOL W, calls it his billion-dollar mistake.“I call it my billion-dollar mistake…At that time, I was designing the first Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-60769698128202138462016-04-09T15:07:00.001+03:002019-07-20T10:13:13.496+03:00Scale up and scale out with .NET frameworkRecently I came across a question about the ability of .NET to scale, comparing to other frameworks. Here’s my answer. I hope you’ll find it useful. While the scalability of an application is mostly determined by the way in which the code is written, the framework / platform that is being used can significantly influence the amount of effort required to produce an application that scales Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-68842881911987379562015-01-24T10:34:00.001+02:002015-01-25T00:34:52.827+02:00Could not obtain exclusive lock on database 'model'? Here’s how you find the smoking gun..If your team owns a process that provision SQL Server databases in masses, you probably encountered the below exception in one of your test clusters, or even in production: Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for Database '***'. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-23125254214932495392014-05-11T10:04:00.001+03:002015-08-24T08:58:23.614+03:00Testing in Production – Benefits, Risks and MitigationsTesting in Production (TiP) is the most important mind-shift required for building and operating a successful service at scale. This post outlines the benefits of Testing in Production, walks through the methodologies and explains the practices that can be applied to mitigate the associated risks. Abstract As your service grows and becomes more complex, it becomes increasingly difficult to Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-4479082740391853032014-05-09T00:47:00.001+03:002014-05-09T00:47:40.824+03:00Azure Table Storage: Writing data in a batchAzure table support writing items in a batch, as long as 1) all the items are in the same partition and 2) the batch is not bigger than 100 items (if it is, you get ‘unexpected response code for operation : 0’). If you have a big list of items of different partitions you will have to write the logic to split the items by partition and send 100 items at a time. This post provides a Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-42898284336656227492014-01-05T02:17:00.001+02:002015-02-03T04:58:29.475+02:00HDInsight Service (Hadoop on Windows Azure) – Hive PartitionsThe post will walk you through the process of creating, loading and querying partitioned Hive Table via HDInsight. Follow the steps here to create HDInsight Cluster and to install Windows Azure PowerShell. Upload data to HDInsight Cluster Download the file w3c_2MB.txt to your local drive, say to ‘C:\w3c_2MB.txt’ Since HDInsight uses the Azure Blob Storage as its distributed file Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com2tag:blogger.com,1999:blog-4261493623714341980.post-57530547007595825212014-01-03T09:49:00.001+02:002014-01-05T02:17:05.769+02:00HDinsight Emulator – Using Sqoop to import/export data from/to SQL Server ExpressThis post will walk you through the process of importing/exporting data from/to SQL Server Express via Sqoop . Create dev box in the cloud (optional) If you don't want to install the HDInsight Emulator on your development machine, you can create a VM in the cloud via Azure IaaS Virtual Machine Service (given that you have Azure Subscription). Open the Azure Management Portal, click on the Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com4tag:blogger.com,1999:blog-4261493623714341980.post-55126590895814139992013-12-28T01:51:00.001+02:002014-06-21T21:00:50.230+03:00HDInsight - Hadoop on Windows Azure!!In the past year, I’ve been working with the HDInsight team on making the Hadoop eco-system available on Windows Server and Windows Azure. We built services that enable Azure users to quickly deploy elastic Hadoop clusters (based on Hortonworks’s Hadoop Distribution Package for Windows) on Windows Azure. By harnessing the parallel processing power of Hadoop, HDInsight clusters enable users Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-68885900742321849042012-01-02T03:58:00.001+02:002012-01-28T03:08:13.394+02:00Tracking Performance Degradation with Visual Studio Load Testing Framework and Cruise Control .NETIn previous posts we created a Load Test for the book store service and saw how the Load Test can be executed continuously via 'Cruise Control .NET' (CCNet), In this post, we'll take a step forward and add a custom task to CCNet that will query the database and generate a custom xml summary that includes performance comparison with previous runs, performance counters measurements per machine (Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-81790456405411983822011-12-30T23:55:00.001+02:002012-01-04T21:24:40.405+02:00Continuous Integration for Visual Studio Load Test via Cruise Control .NETIn the previous post we created a load test for the book store service. We developed a functional test per user scenario for generating synthetic load and walked through the entire process of creating and running the Load Test. In this post we will see how the Load Test can be executed continuously via 'Cruise Control .NET' (CCNet) and provide immediate feedback via CCNet's portal. here's a Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-4963763251584973062011-12-29T17:59:00.001+02:002012-01-04T21:23:26.959+02:00Creating a Load Test using Visual Studio 2010Visual Studio Team System Test Edition provides extremely powerful framework for developing load tests for web applications. The framework (Load Testing Framework) introduces a simple process for generating synthetic load, possibly from multiple machines, and provides rich infrastructure for generating reports. The framework can be used to generate load and collect results for different purposesAviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com1tag:blogger.com,1999:blog-4261493623714341980.post-67217318882351475522010-12-03T00:48:00.001+02:002011-10-15T21:57:54.442+02:00Component Testability KILLERS (and suggested solutions)Since system quality depends on component quality, any defective component causes a ripple effect throughout systems that include that component. Hence, validation and quality control of isolated components is crucial for producing quality systems. In order to validate component quality, we must follow a cost effective test process and implement a rigorous quality process for all generated Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com2tag:blogger.com,1999:blog-4261493623714341980.post-68907299876371740132010-11-07T01:36:00.001+02:002010-11-13T08:26:11.913+02:00Testing with Managed Extensibility Framework (MEF) for SilverlightIn the previous post, we developed test strategies for a three tiers, MVVM based Silverlight application, which uses the Managed Extensibility Framework (MEF) in order to loosen the coupling between the components and to provide better testability and extensibility. In this post, we’ll see how the Managed Extensibility Framework (MEF) fit in with the overall testing strategy and try to figure outAviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-40081854410042656052010-11-01T12:46:00.001+02:002011-12-05T06:27:20.583+02:00Testing Silverlight 4.0 App with MVVM, MEF and WCF Data ServicesIn the previous post, we reviewed a simple 3 tiers Silverlight application that follows the MVVM design pattern, uses MEF for applying the dependency injection pattern, and uses WCF data service implemented using a custom data provider for CRUDing data in a RESTfull way (via HTTP). In this post, we’ll put together a testing strategy for the application and demonstrate testing in component level Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com1tag:blogger.com,1999:blog-4261493623714341980.post-42434268213032325692010-10-24T00:41:00.001+02:002010-11-07T04:08:06.679+02:00Developing Silverlight 4.0 App with MVVM and MEFIn the previous post we walked through the process of developing three tiers web app using Silverlight 4.0, MVVM and WCF Data services. In this post, we’ll see how we can take advantage of the new Managed Extensibility Framework (MEF) for Silverlight in order to loosen the coupling between the parts in the application and by that 1) simplify the development process, 2) make our application more Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-735111555310066732010-10-13T00:27:00.001+02:002010-11-07T21:11:30.598+02:00Developing Silverlight 4.0 Three Tiers App with MVVM and WCF Data Services (OData via ATOM)In this post we’ll walk through the process of developing a three tiers, rich web application using Silverlight 4.0. As many applications built on top of WPF/Silverlight technologies, we’ll based the design on MVVM design pattern, and we’ll use WCF data services to query/update data exposed by a mid tier application. In the next posts we’ll add the new Managed Extensibility Framework (MEF) to Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com9tag:blogger.com,1999:blog-4261493623714341980.post-25859235872096927642010-08-08T05:39:00.001+03:002010-11-07T04:08:06.680+02:00The Pillars of ConcurrencyIn recent years, microprocessors designers are hitting the walls of memory latency, heat dissipation, and number of transistors for single core processors. As a result, the microprocessors industry consistently introducing more cores on the same chip in order to keep on providing stronger processors and maintain Moore's law. Consequentially, applications' parallelism become more fine-grained, Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-72772701458337047212010-02-23T21:35:00.001+02:002013-04-25T19:56:08.985+03:00Scaling Up with STM.NET (Software Transactional Memory)Every developer that spent enough time with concurrent applications must have learned that producing a reliable, high performance application that scales gracefully to many core hardware is extremely difficult to do. In order for the application to scale and maintain high throughput, we have to design the threading model such that at any given time the application will produce the optimal amount Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com5tag:blogger.com,1999:blog-4261493623714341980.post-15436825536279195942009-10-18T03:14:00.001+02:002010-11-07T04:08:06.681+02:00Concurrency Levels Tuning with Task Parallel Library (How Many Threads to Use?)In the post ‘Scaling Up with Task Parallel Library’ we reviewed the way in which the TPL (Task Parallel Library) library facilitates the process of adding concurrency to applications. One of TPL’s features that I thought worth a separate discussion is that it enables developers to manually tune the amount of threads (concurrency level) that will be used to serve a given set of tasks. Manual Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-5182516853844931912009-10-03T17:44:00.001+02:002009-10-25T21:13:48.514+02:00UML Use Case Diagrams – Modeling the System FunctionalityUML Use case diagrams are used to illustrate the behavior of the system during requirements analysis, they show system wide use cases and point out which use case is performed for which actor. A use case describes a sequence of actions that make up one or more business process and provide something of measurable value to an actor, an actor is a person, organization, or external system that Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com5tag:blogger.com,1999:blog-4261493623714341980.post-13927220622458084282009-09-04T09:52:00.001+03:002009-09-27T02:08:18.752+02:00UML Deployment Diagrams – Modeling the System Physical ArchitectureIn the previous post we saw how component diagrams can be used to model the logical architecture of a system. In this post we’ll see how deployment diagrams are used to model the physical architecture of a system; we’ll start from the most simple use of the deployment diagram in which we only present the nodes and their inter-relationships, and complete the picture by including the components andAviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com3tag:blogger.com,1999:blog-4261493623714341980.post-35561019230078523052009-08-22T20:00:00.001+03:002009-12-09T02:02:10.232+02:00UML 2.0 Component Diagrams – Modeling the System Logical ArchitectureIn UML 2.0 Component diagrams are used to model the logical architecture of a system by showing the system high level components and their inter-relationships. In the next post I will show how components are used in deployment diagrams to model the physical architecture of a system.  A component is an encapsulated unit within a system which provide one or more interfaces. When using Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com0tag:blogger.com,1999:blog-4261493623714341980.post-42591545117120255352009-08-02T02:51:00.001+03:002012-02-10T09:10:10.739+02:00MVVM for .NET Winforms – MVP-VM (Model View Presenter - View Model) IntroductionThis post introduces the MVP-VM (Model View Presenter – Model View) design pattern, which is the windows forms (winforms) equivalent of WPF/Silverlight MVVM. The MVP-VM pattern is best suited to winforms applications that require full testing coverage and use data binding extensively for syncing the presentation with the domain model. Evolution Before we start digging deep into MVP-VM, lets haveAviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com40tag:blogger.com,1999:blog-4261493623714341980.post-83426120518227153852009-07-10T07:05:00.001+03:002011-05-02T17:52:07.075+03:00Multicast Application with Multihomed Support (C# .NET Sample)In the previous post we’ve reviewed the multicast addressing technology and examined some of its pitfalls. In this post we’ll dive through the implementation of a simple application that allows sending and receiving multicast data over the LAN, while enabling the selection of the network interfaces (IPEndPoint) through which the multicast traffic will be sent and received. As illustrated in Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com4tag:blogger.com,1999:blog-4261493623714341980.post-467524436185142112009-07-07T17:39:00.001+03:002010-11-07T04:10:13.436+02:00Multicast Addressing PitfallsThe IP multicast model has been described as follows: “You put packets in at one end, and the network conspires to deliver them to anyone who asks”. That sounds pretty simple indeed, but as you spend more time with applications that deliver multicast services you find that in many cases you will ‘put packets in at one end, look at the network protocol analyzer, and see nothing that you expect’. Aviad Ezrahttp://www.blogger.com/profile/09707070940026784485noreply@blogger.com6