IgorShare Thoughts and Ideas

Consulting and Training

Tips for building Large-Scale rich Web sites and applications

Posted by Igor Moochnick on 06/09/2012

When you’re building a workflow-rich web site or application, you’re in a danger to get buried under piles of entangled JavaScript code, web pages, styles and other related artifacts.

It’s better to follow the best practices from the beginning to reduce the weight of the complexity and enable easy extensibility of your code. Here are a couple of links that may put you on a good path:

Here is an entry list of frameworks to know about:

I’m not afraid to admit that I’m not a web designer and I struggle with building good-looking sites, but there are a couple of tricks that I use to make sure that I’m not stuck:

Tips for VisualStudio–devoted crowd:

UPDATE:

Here are a couple of more helpful ones:

  • async.js – Async utilities for node and the browser

Posted in Architect, Javascript | 4 Comments »

Turn your management upside down – the upside-down pyramid style

Posted by Igor Moochnick on 06/02/2012

Just read an amazing piece from Joel Spolsky where he describes his own unique style of management. I could agree more. It’s the best description I ever heard about how to make successful teams:

“Stop thinking of the management team at the top of the organization. Start thinking of the software developers, the designers, the product managers, and the front line sales people as the top of the organization”

It is so true – when you hire smart people, let them do what you’ve hired them for. Self-organizing teams, that we’ve all learned about from the Agile practice, can work ONLY when you hire smart people. If your teams are not successful and not self-organizing – check the root cause: are you sure you hired the right smart people?

Organizations can scale successfully and move forward ONLY when the sub-pieces of the organization can be self-directing. The management exists ONLY to provide general message, coordination and support for the employees (removing impediments).

Posted in Agile, Thoughts | Leave a Comment »

BlueMetal opens new Chicago office (and my face is in the article)

Posted by Igor Moochnick on 05/26/2012

Recently BlueMetal has announced opening a new Chicago office. We’re all very excited to have more smart and amazing people joining our adventure.

You can read more about this in the Mass High Tech Business article “BlueMetal opens new Chicago office, names director”.

Posted in Press | Leave a Comment »

Designing & Consuming a Cloud 2.0 API

Posted by Igor Moochnick on 05/17/2012

I really loved the QCon presentation by Andrew Phillips where he discussed Cloud API 2.0: the current state of cloud computing, why a Cloud API, the choices made while designing jClouds API, and how to consume such an API.

I really advise to check it out: http://www.infoq.com/presentations/Designing-Consuming-a-Cloud-2-API

Posted in Cloud, Presentations | Leave a Comment »

Cloud Virtualization. Cloud Standardization is unavoidable

Posted by Igor Moochnick on 04/22/2012

[This is a repost from my post on BlueMetal Consulting company blog]

I think it’s time to start talking about Cloud Virtualization. Today cloud diversity is driving customers out of the clouds instead of embracing them. Multiple cloud providers are trying to lure customers in by developing feature specialization and this may well serve to fracture the markets and the community even more.

Specialized clouds have a good reason for existence, but an explosion of many different ‘flavors’ of clouds are creating a similar problem to choosing an insurance policy – there are thousands of them, you have to be an insurance agent to understand it and there is a lot of fine print that hides the details of the policy.

Cloud Virtualization should provide a common ground for the generic solutions. This allows standardization of the knowledge and principals by which the general population can abide by. Where the "cloud citizens" can thrive and teach the juniors the basic rules of the environment and the survival practices. When the specific needs of your product or your solution require some special sauce – you’re welcome to shop around and choose a provider that can satisfy your specific taste.

The Cloud Virtualization is a necessity that should be recognized by now. You see some standardization in the IaaS platforms around Amazon stack (I.e. OpenStack, Eucalyptus, etc…) but still no specifications around PaaS.

Some of the major providers are starting to recognize the problem. Check out the recent VMWare announcement (VMware seeks Linux-ization of cloud with any-cloud app platform) where it claims:

“The key, …, is allowing developers to build applications using just about any framework, with the ability to deploy to just about any cloud.”

"Just as Linux provides a high degree of application portability across different hardware, Cloud Foundry provides a high level of application portability across different clouds and different cloud infrastructure," VMware CTO Stephen Herrod wrote in a blog post.

The calls for Cloud Virtualization are coming from everywhere, but, since developers have higher tolerance for complexity (they just have fun solving it by writing more code), you hear more vocal calls from the IT industry:

“What’s more important than cost savings for companies — at least in the U.S. and Asia-Pacific regions — is the ability to standardize their software and business processes across the company, according toa new survey of 600 large companies by Tata Consultancy Services, the $8 billion IT service provider. In Europe and Latin America, the primary rationale was the ability to ramp systems up and down faster.”

http://gigaom.com/cloud/in-cloud-computing-moves-money-isnt-everything/

More and more organizations are beginning to recognize the need and advantages of operationally consistent clouds. The recent announcement from Zynga to move to an internal cloud architecture is the proof of my point:

“We own the base, rent the spike. We want a hybrid operation. We love knowing that shock absorber is there.” – Allan Leinwand, Zynga’s Infrastructure CTO

Zynga uses Citrix Systems CloudStack as its virtual machine management interface superimposed on all zCloud VMs, regardless of whether they’re in the public cloud or private cloud.

Inside Zynga’s Big Move To Private Cloud by InformationWeek’s Charles Babcock

To achieve progress in this direction we need to talk not only about different clouds and about private data clouds in the data centers (so called “private clouds”), but about a standard that can span across both of these (for the moment) different domains – hybrid clouds. The hybrid cloud should become the main topic in these conversations. It is a commonality between the public and the private clouds (we, developers, call it an abstraction – hybrid cloud with “empty” public component will give you the “private cloud” and vice versa).

“Thus if hybrid cloud is to become the architectural model of choice, it becomes necessary to unify operations across all environments – whether public or enterprise.”

The Conspecific Hybrid Cloud, HighScalability.com

“This ability to invoke and coordinate both private and public clouds is "the hidden jewel" of Zynga’s success, says Allan Leinwand, CTO of infrastructure engineering at the company.”

Lessons From FarmVille: How Zynga Uses The Cloud

So, in my opinion, Cloud Virtualization, (or in “dev speak” Cloud Abstraction) is the next evolutionary step of our industry. For the moment Platform-as-a-Service (PaaS) systems spanning the same APIs across different cloud providers are a great (and realistic) promise to achieve the cloud unification.

Here is why I think it’s true:

  1. The PaaS layer, in its core definition, has to provide an API for all the Cloud infrastructure control knobs. Otherwise it’ll not be considered as a CLOUD.
  2. The same control API will enable the development unified control tools ecosystems that can control in the same way multiple clouds from different cloud providers. Thus unifying all the IT and DevOps processes.
  3. Unified PaaS API layer will enable a new evolution cycle of the application development that will enable the same applications to run seamlessly on different clouds as well as on local data centers without modifications. Hence enabling IT and DevOps to make decisions how and where to deploy them.

Today there is only one publicly available project that shows some promise to achieve the Cloud Abstraction for the developers – JClouds. Lately, VMWare has been making some changes with their Cloud Foundry platform by promising to change the balance with BOSH – an open source tool chain for release engineering, deployment and lifecycle management of large scale distributed services.

So, to sum all this up, I believe that Cloud Virtualization is unavoidable. Customers are looking to be able to scale across multiple cloud factors, and vendors are looking to lock in with feature creep. This tension will continue to grow in the models which are marketed today. The goal of reaching the cloud promise of true elasticity and flexibility based on what the application demands is the opportunity for our industry to deliver on, and we can wait for it passively or we can do something about it by architecting for this now.

For me personally, I choose the latter.

Posted in Cloud, Thoughts | Leave a Comment »

Controlling TopShelf via REST interface + Dashboard

Posted by Igor Moochnick on 04/11/2012

My recent update for the TopShelf enables the new Nancy-based REST interface and provides improvements to the current dashboard.

The new REST interface allows you to see what are the currently running services by sending a GET request to the dashboard URL (i.e. http://dasboard_url/services).

As a reply, you’re going to get a JSON block that contains small snippets of information about each seevice and shelf that is running inside the TopShelf process.

[...
   {
      "Name":"clock",
      "ServiceType":"Shelf",
      "CurrentState":"Running",
      "Action":"stop"
   }
...]

The most important piece of the block above is the URL-encoded Name of the service. You can use this name as an ID to control the service’s lifetime via HTTP GET requests, i.e.: start, stop, unload:

  • /service/{name}/start
  • /service/{name}/stop
  • /service/{name}/unload

The latest addition to the control interface is the ability to upload shelves remotely by uploading a ZIP file with all the relevant bits of your service.

You can do the upload via the dashboard by navigating to the ZIP package or by dragging and dropping the shelf archive onto a designated area.

In addition, you can do it programmatically via file upload POST request. This sounds complicated, but, in fact, if you’re using .Net framwork, it may look as simple as this:

using (WebClient client = new WebClient())
{
     client.UploadFile("http://localhost:8087/service/upload", @"C:\Packages\clock.zip");
}

All the above functionality can be configured and fine-tuned via the new optional configuration settings that you can put in the TopShelf host configuration file:

<appsettings>
	<add key="ServicesLocation" value="Services" />
	<add key="DashboardUri" value="http://localhost:8087" />
	<add key="DashboardUploadsEnable" value="true" />
	<add key="DashboardUploadsPackageFolder" value="Packages" />
</appsettings>

Here is a short explanation of the settings:

  • Services – contains a full or relative path of the shelves folder
  • DashboardUri – defines a Uri (ip and port) that the dashboard module (and REST web service) will use to listen to the incoming requests
  • DashboardUploadsEnable – this value controls if the uploads of the shelves are enabled (both through the dashboard and the REST service)
  • DashboardUploadsPackageFolder – defines a temporary location where the ZIP archives of the shelves will be stored before unpacked into the shelves location (defined by the Services setting)

Posted in .NET, REST | 2 Comments »

Adding Nancy to the existing ASP.NET MVC site

Posted by Igor Moochnick on 04/08/2012

There is an issue adding Nancy to the ASP.Net MVC site due to a simple fact that MVC controls the routes not through the web.config but through the routing table.

If you adding Nancy to the existing MVC site – make sure to remove the sub-route that controlled by Nancy from the routing table.

Here how it works:

1. Follow all the steps from the Nancy Documentation Wiki

2. Add your module and make sure that it has an “offset” path (via inheritance)

public Module() : base("/nancy")
{
   ...
}

3. Remove the “nancy” route from the Routing table in the Global.asax.cs

MvcApplication.RegisterRoutes(...)
{
   ...
   routes.IgnoreRoute("nancy/{*pathInfo}");
   ...
}

Posted in C#, Web | 5 Comments »

Building responsive scalable cloud Web applications with ASP.Net MVC4, WebApi, SignalR and Knockout

Posted by Igor Moochnick on 04/03/2012

Thanks for everyone who’ve attended my CodeCamp presentation. Thanks for organizers for making it happen.

I’ve had a chance to build the realistic distributed application live-coding from scratch. The application consisted from 2 roles – web role and a worker role. During the demo I’ve used the Amazon AWS cloud, but the similar technique can be applied to Azure deployments.

The audience was great and engaging even though we didn’t have enough and I was flying through the code.

The code I’m publishing (Amazon AWS demo) is a beautified version of the one we’ve created during the Code Camp.

Stay tuned for the mirrored Azure demo code…

NOTE: This is a simplified version and should not be treated as a real-life application.

Posted in Amazon AWS, Cloud, Community, Presentations, Training | 2 Comments »

Windows Azure Platform capabilities overview

Posted by Igor Moochnick on 04/01/2012

Recently I’ve stumbled upon a nice infographics that in one place outlines all the current Windows Azure services and capabilities. See the original Windows Azure article on MSDN.

Posted in Azure, Cloud | Leave a Comment »

Summary of Windows Azure Service Disruption on Feb 29th, 2012

Posted by Igor Moochnick on 03/14/2012

Microsoft gives a very well thought through and executed summary of the Azure service disruption that happened due to the Leap Year bug: http://blogs.msdn.com/b/windowsazure/archive/2012/03/10/summary-of-windows-azure-service-disruption-on-feb-29th-2012.aspx

I liked their in-depth explanation of how the internals of the Host OS and Application VMs are interconnected.

Posted in Azure, Cloud | Leave a Comment »

 
%d bloggers like this: