ARCast.net - CAB in the Real World

Ron Jacobs: Hey, welcome back to ARCast TV. This is your host Ron Jacobs and today we are going to go back to Tel Aviv to Cinema City where I was with, yet, another panel of wonderful architects as we talked about the Composite UI Application Blocker, or CAB.

Now, it's kind of an interesting topic because we are not only talking about what CAB is and what it does, but also about how these people have used CAB in their applications and how they've realized value out of it.

Now, I don't want to give you the impression that CAB is for everybody or that it's super simple or anything like that. I think you're going to hear that in the discussion today and well, once again, we had some microphone issues going on. [Laughs] I really need to learn more about proper audio engineering but I'm getting there.

So let's relax, go back to Tel Aviv, and the CAB architecture panel.
Ron: Welcome back to ARCast. I'm your host Ron Jacobs and today I'm here at Cinema City in Tel Aviv where we are at this Developer Academy put on by Microsoft Israel.

It is a fantastic event. Lots of people here in the movie theater and joined by the star of one of the movies here [Laughs] Ohad. Ohad, tell me, for the sake of the listeners who haven't met you, you've been on ARCast before, but tell me about yourself.
Ohad Israeli: OK. My name is Ohad Israeli. I'm a CEO (inaudible) joint sphere for Experts4D, a company which helps get people into Microsoft technologies, works a lot with Microsoft Israel, and during one of the courses about CAB, Composite UI Application Block, I met both of these guys which are with me right now. The first one is...
Guy Ronin: Hi my name is Guy Ronin. I work at Synagon which is a company that develops learning management systems that combines e-training and PC based simulations mostly for air forces and aircraft, in general.

I also teach at the Academy. I teach in colleges --.NET technologies and C#. Many colleges mostly in Tel Aviv Academy College. That's what I do and I specialize -- I'm a system architect in Synagon and specializes in.NET technology, but not only.
Ron: OK. Great. And?
Elli: Hello everybody. My name is Elli. I'm from Intel. I'm a developer and I'm moving to project management stuff and actually our department is working on managing activities of fab operations and automation stuff. So, what we are doing there.
Ron: OK. So in fab operations meaning in the plant you fabricate the chips that Intel is producing?
Elli: Yeah, right. Its silicon wafers we produce flash memories or CPU's. All the technologies to support this process, our department is working on it.
Ron: Wow and that's really fascinating stuff. Now, I know that Microsoft has worked with Intel at a number of the plants.

I've met some of the guys from Intel in the US who told me about these plants are highly, highly automated because you can't have people running around in there. They're too dirty. [Laughs] Stuff starts falling off of the people and they contaminate the process.
Elli: Yeah. (inaudible) automatic machines that you have to manage all the stuff and to make the systems as much automatic without human intervention.
Ron: Yeah.
Elli: Is our part.
Ron: OK. Fantastic.
Ohad: Actually, after this session we are going to have a session about Composite UI Application Block. At the end of the session we'll show a movie from Intel about their implementation of the Composite UI Application Block in the fab.
Ron: OK. Great.
Ohad: So if you want to come out.
Ron: OK. Good, good. For the sake of the listeners that don't know, we are talking about this Composite UI Application Block which is something that my former colleagues on the Patterns and Practices team produced and it's just a fantastic piece of work.

We are always excited to hear about people using it, being successful with it. So Ohad, for the listeners who go "What is Composite UI Application Block", tell them about it.
Ohad: OK. The Composite UI Application Block is what you said is, what Patterns and Practices made up together. I see it as a leveraging the service oriented world to service oriented UI.

It gives you the ability to compose lots of, lots of parts of your application to one big application, one composed application, and then manage all the information that is gathered from all diverse applications to build your one and only application.
Ron: OK. In fact, for a lot of people who have listened to ARCast, they have seen, we did a video series with Commonwealth Bank of Australia. They built this kind of amazing user interface composite and it was just beautiful.

A lot of people ask me, "Oh I want to build something like that." Now they built theirs before the Composite UI Application Block was available but, in fact, their application was one of the inspirations, if you will, for a Composite UI Application Block.

So, today, if anybody wants to build anything like that, they have a lot easier time. They don't have to build everything. They can go pick up CAB, as we like to call it, and take advantage of it. So you three are kind of working together on a project with though CAB, right?
Ohad: Well each in one and every one of us is working solely on his own project.
Ron: Oh, OK.
Ohad: I am working with several companies on a project with CAB and I met with both of the guys I told earlier in the CAB closet that ran during the MVP's week that we ran here in Israel about a month ago and both of them have a working CAB application and what I wanted to hear is to have them also say what they think about it in the real world.

What kind of benefits that CAB brings to their application in the real world.
Ron: Yeah. OK. So let's start with Guy. What do you think about, tell me a little bit about what the application does and what the scenario is.
Guy: OK so basically it's a, as I said, it's a learning management system which combines e-training and simulation-based capabilities. We train pilots and forces and doctors and drivers and that's what the product does.

It publishes training materials and learning materials and simulation scenarios materials. It manages users groups. It produces reports about the trainees' progress. Stuff like that.
Ron: So, is the application that is using CAB here, is it the training application? Like if I were taking one of these courses, I'm going to start up an application, is that the one that is using CAB?
Guy: So, OK, I'm going to connect you to CAB. First of all, the looks of the application, which CAB is, as you know, UI, so you have to first talk about the looks of the applications. It's kind of an Outlook kind of an application you know with an Explorer bar at the left, server layout, and server screens that you can open in server windows.

We have several abilities that we wanted to have in our application. All the -ilities, you know scalability, extensibility, sensibility, and stuff like that. Our main goal when we developed our product is to also to, not only to sell the product, but to sell an SDK above the product for it to be extensible by our customers.

So that our customers can extend the product by building their own plugins and to change the layout and to change the functionality of the product. So we don't only sell only the end product, but we sell a complete package that enables our customers to change it and to modify it for their needs.
Ron: Oh, OK.
Guy: That we wanted to -- our first goal is to build a pluggable application, a modular application. Then we saw the CAB and was in its early, better stages, and what it gives us, and I think, the CAB is mostly a framework for best practices and design patterns.

You know, we'll talk about maybe later, but stuff like factory design patterns and singletons and builders and all those design patterns that are implemented in those little frameworks and in this whole framework, you can use as an architect, and as developer, to implement the rest of your functionality.
Ron: When you first were talking about this, I was trying to think, well why would CAB be a great thing for this kind of application?

But when you hit on the plug-in, modular, and extensible concepts, then it makes a lot of sense because now, I mean, the thing is, if I were buying your product, then you say "Well you can extend it."

That means I'm going to have to understand how does your UI work, where is it safe for me to extend, what is the pattern that I need to follow to extend your thing, and if you write your own framework, you have a lot of documentation to produce, a lot of support level to take on. But since you're using CAB, you can just tell me, as your customer, you say "Microsoft has this thing called CAB.

Here's all the documentation for CAB. There's a website where you can get help with it. We use CAB and if you want to plug-in you can create a module just like CAB does for everything else." That makes your life a lot easier.
Guy: And more than that. CAB itself is so extensible. So you can inject your own logic into the CAB framework so even those abilities will be more simple for developers. Because as an architect or developer, it's not that simple to use the CAB infrastructure, and you want your customers to use it even more with user friendly.

So you can extend the CAB and inject your own logic to even simplify the way you build modules and the way you change the modularity or you change the layout.

You can write your own logic that wraps this great framework to make it even simpler.

Like the Smart Application Factory did and using the Guidance Automation Toolkit, above all that you can build your own set of tools, and SDK tools, that you give with the product so your customers will be able to build, very easily, modules, and to change the layout and to configure the application if it's a matter of layout or matter of functionality or service or.
Ron: Yeah. So, Ohad let me ask you though about this because I'm glad you mentioned that, Guy. I don't want people to think, "Oh, CAB that sounds really easy.

I'm going to pick this up in an afternoon. I'll figure out how to write an application. I'll be an expert in a couple of hours." Because when you first look at CAB, it doesn't feel that easy. What do you think about it?
Ohad: Yeah, I think there is a learning curve. The learning curve is not easy and if think the administration is oh so simple, everything, it's a model, I just configure everything in the config file, everything works.

But, then, when you start working with it, not everything is so simple. But as you learn it, you can get to status like, for example, in Intel, that you have students after training of two hours, they can write down your business models.

This is something amazing. The main thing in your application is the business models, not the infrastructure. As soon as you're bringing all the infrastructure to a state that everything is working, all you have to deal with, is the business logic. And this is the main thing that we are doing here.
Ron: Oh, OK. That's an important point. So, Elli, tell me about that. It seems to me like a lot of places are going with this model. They say, "Look we are going to have a smaller team of very good developers who understand CAB at a pretty deep level.

They are going to set this thing up and make it, "like Guy was saying, "kind of easy for the other guys. And then we have a larger team of other guys that just, they don't have to understand everything about CAB, they're just going to build little pieces." Is that what you guys are doing?
Elli: Right. Actually, you can separate the project into two different parts. The guys that manage the framework, or the boundaries conditions for the models, and the less-skilled developers, like students for example, that can develop business logic of each model without understanding the layout and what is the position of each model.

The development will be really fast, so this is great. We made an hour project and the time for the project were very teeny. You get advantage of this CAB stuff. Very nice.
Ron: Well, you know, the truth is, every development organization has a mix of a few really good developers and a lot of people who are just learning or just getting started and without something like CAB, they've really got a problem.

Right? You've got people who are creating all kinds of crazy things and because they are not very skilled they're making a lot of stuff that you might have to live with for a long time that's really poor and you spend a lot of time dealing with that where if you put up in place an infrastructure like CAB, then it makes it manageable. Do you think, do you find that's true?
Guy: The main advantage of management is that you can change each one of the models without impacting the framework. For example, you may change business logic and just put it directly into the directory and that's all.

It's all integrated into the system and other models are not impacted. So the managing is very simple. Everything is configurable in XML file -- events between models, all the input configuration, everything. You can make it without impacting, without compiling the code again. So it's very strong advantage.
Ron: Yeah, so Ohad, I think one of the things Elli was just highlighting is that, in the composite UI, you have individual pieces that make up the composite but they're very loosely coupled. Which is kind of odd for a UI.

Usually you think of all the pieces of a UI to be very tightly coupled together. You know, this thing knows about that thing, this thing has to disable that control, or enable that button, to make all of the things work together.

That works OK when the UI is small, but once it gets past a certain size, or the team reaches a certain size, where there's a lot of people trying to do things, it gets very difficult to understand all the interactions between the pieces of the UI. So you need this kind of modular breakdown, don't you think?
Ohad: Yes, of course. Because all the models are decoupled one from the other and you can design the shell and extend all the UI extensions from the shell outside to other models. You can extend to models, for example, if I'll take a C++ application that I have,

I can extend out from the C++ application, the menu. I can extend services, business logic, from the C++ application out to the CAB application. Then I can share it, or use it, from other models. Because, I see the CAB as a framework that let me compose applications, let me integrate applications, even from various technologies.
Ron: Oh, you know, you brought up a great point, because one of the things a lot of enterprises find is that over the years they've built up a number of important systems that people have to use in day to day work and, like you said, one might be C++, one might be a web application.

Maybe they have to sign on to all these different applications, and, you know, and they're not integrated, so you find people doing something like copy something in this one, go over here and paste it in that one, to make them work together.

And, yet, you can take, with CAB, and host these things inside the same shell and actually make them mesh together.
Ohad: Yeah, of course, I see it as something that you can leverage your application to.NET, easily, step by step, and even look to.NET 3.0, if you want to, for example, integrate a WPF model in your application.

Yeah, it's very pretty easy. Just maintain the same interface from you to the shell and from you to the other models, consume whatever events that you want from the event broker that you get on the CAB, consume the state that you have in the CAB, and you can just replace models from all these technologies. For example, from C++ to WPF models, just [finger snap] like that.
Ron: Now tell me about this, the event broker in CAB; because this is one of the key elements that makes it work. What is that about?
Ohad: OK. It's a system that let you have published subscriber events and the nicest thing is that you don't have coupled between the publisher and the subscriber.

Because, for example, you can have several publishers to the same event, and of course, several consumers to the same event. And all you have to do is to maintain some kind of key to the name of the event. OK? Whenever you publish the name of the event, you can consume it from whatever model that you want.
Ron: Oh, OK. So this allows you to have, so most people can visualize Outlook. So if you're thinking about Outlook, you click on the mailbox, and this thing shows the messages in that mailbox, and then this pane over here shows that selected message.

So you have each independent pane kind of reacting to events in other panes, so when I click on a different message, this one refreshes, and so forth.

This is how you accomplish this in CAB because the pane that gets clicked on publishes a message like, publishes an event, rather, through the broker, and says, "I have a new email selected." And the other panes could subscribe to that and do whatever they are going to do when they get selected.
Ohad: Of course, and if you are looking for, for example, for tomorrow for a new model. The model only needs to know that it wants to consume such an event and be able to interact with your system.

Now you can take a look at Outlook but you can take the composite UI that everyone here is using -- Visual Studio. Visual Studio itself, you can plug-in modules over there, OK? And all the models are decoupled with each other and also they can share information. So everyone here is already using composite UI application.
Ron: Ah, OK. Wow. This sounds really fascinating, I'm just wondering if any of the people who are here in the crowd today, have any questions?

[Start of overlay from Ron]

OK here was a question where somebody said, "CAB sounds great for a new application, but if you had kind of an existing environment, can you slowly, over time, merge pieces of an application into CAB?"

[End of overlay from Ron]
Ron: Yeah, you know, what do you think, Ohad? You were talking about kind of taking an existing application and surfacing it in CAB. Would you do that?
Ohad: OK. CAB has lots and lots of abilities. It doesn't force you to do the things in specific architecture ways. So you can just use the infrastructure and develop your own way as your own application as you are using today.

So, for example, take your own WinForm application and use the event broker, use the state over there. OK, you don't need to implement in the CAB way, but if you are using, for example, the SmartLine Factory software with the CAB, it will help you.

It will get you to the guidance of using the patterns the right way. The model view presenter, for example. How to, for example, to consume events in much, much, more easier and, say, documented way. So all your solution also will look much, much, righter, much, much easier.

Now for consuming, for example, application that I have (inaudible) today and leveraging it to the CAB is very, very easily. All you have to do is close your application in a model, say what it extends to the world, and then have it host it in CAB.

And then you can just extend it, whatever you want, and however you want. There are two samples over the web that you can extend, for example, a Word, you can extend Outlook, using CAB, very, very easily.
Ron: So let me ask you about something about something you mentioned that people might not know about is the Smart Client Software Factory. Now, CAB is an application block that you can get just by itself, but the Smart Client Software Factory is something more. Tell me about that.
Ohad: The Smart Client Software Factory just helped me manage the CAB directly. It helped me automate Visual Studio and helped me do things, less coding things. OK.

All I have to do is, right-click, add event, right-click, add a new view that will automatically add the presenter and all the right interfaces. So it's very, very easily to work with CAB when you have the Smart Client Software Factory.

You can also extend the Smart Client Software Factory also to support other automations of your own work, of your own procedures, in your own company.
Man 1: In general the Smart Client Software Factory is a code generator to write CAB related code when you don't want to mess with the, you know, which attribute you want to put on a property, or on a class. So it makes the coding and the model building much easier because it makes lots of dirty work for you.
Ron: OK, OK, cool.
Ohad: other services that Smart Client Software Factory enters into the CAB. For example, all the connecting between, all the choosing between, the models in the CAB is used by the model catalog. Now, the model catalog in the CAB base is only a XML file.

The Smart Client Software Factory also enters the ability to have models from web services. There are lots of other services, small parts that are implemented in the Smart Client Software Factory that can help leverage the CAB to a real, existing application.
Ron: Yeah. Usually what I tell people is that the team set down and said, "We have this composite UI application block. It is one part, it is a large part of building a Smart Client, but it is not all." It doesn't cover everything.

There are certain things that people like to do... they said, "That's out of scope for the CAB itself." But, with the Smart Client Software Factory, they tried to address all of the top concerns that you have for building a Smart Client.

Things that were in the CAB and some things that were not. They have a larger scope with the Software Factory.

OK, what other questions do we have? The question is, "Is there a relationship between CAB and the codename Acropolis?"

Acropolis is a codename for a project where Microsoft is taking the ideas that we first created for CAB, and we're building them into a future version of the.net framework.

Yes, there is a relationship, but the way that patterns and practices likes to work is to take an idea... We look at what customers need to do, and then we create a solution which is really the best practices and the patterns that implement that.

We find an idea that is working really well, and then we say, "Wow, this should be in the.net framework." The next step is to take these ideas and put them in the.net framework. The ideas will be produced in a way that is similar to the way CAB works.

I say similar because it might not be exactly the same. In fact, it probably won't be exactly the same. There will be new capabilities that it has that CAB doesn't have, or it might do things in a simpler way, or more complicated way. I don't know.

Anyway, that plan is coming together for Acropolis, and you'll see that in a future version of the.net framework.

Any other questions?
Ohad: One thing that I can add right now is that there is an implementation of CAB in WPF. It exists on the web, so we can also use CAB with WPF enabled systems. If you're looking to convert to Acropolis, it is a step forward.
Ron: Just to be clear on this, what we're saying is that the CAB as it exists today can be used to put WPF side by side with other winform things.

Then, Ohad was just saying that there's another version of CAB that's built around WPF that takes it in a slightly different direction. So, there's two different kind of CABs you're talking about there.
Ohad: Yeah, because all you have to do is you have to implement the UI, implement part of the CAB and then extend it in other directions. For example, you want mobile?

OK, you have CAB for mobiles. That can lead to building mobile applications very easily, with the same concepts of the composite UI application.

For the sake of the audience, I think that... I guess that most of the audience is pretty confused because CAB is confusing. What is it, anyway, and what did I do before? How does it help me? What does it give me?

I think that the right way, as I see it, to address the composite UI block, is essentially a set of frameworks, a set of design patterns or implementations. Design patterns that help you... Mostly help the architects. Those framework implementers did that stuff for you.

The factory, the single tone holder, the object builder, the event broker, all of those framework stones in their applications. You as an architect, or chief developer, or whatever needs to build an application above some great unknown practices and design practices. You already have those practices by the team.

In fact, regarding the question about WPF... It doesn't really help you, in its own way, to integrate between WPF controls and models, and Super splice or.net to zero, because the implementations of integrating between those elements are not CAB oriented.

What CAB gives you is the ability, in general, to integrate between independent models and to have a certain level of obstruction, and to have a certain level of interface that each model has the sharing of services in the business logically. Their publishing and subscribing of the events and all that stuff that can make each model independent.

It makes it easier to create a WPF model, and to create a C++, old MFC module to integrate it and create a.net model. Each one of them are independent, just as Ohad said, and all of them can just integrate an interface, and CAB helps you do that. Guides you and enforces you to do it right.
Ron Jacobs: Yeah. That's the thing I like about CAB. People look at an application like Outlook or Visual Studio. Many of the composite applications that we all use everyday, and we go, "Wow, I'd like to build something that looks like that."

You wonder... You can imagine different ways of doing it, but you wonder which way would be best, which is the right way to do it.

Something like CAB takes a lot of those questions away. It is recognized as the recommended way to build these things. It provides a lot of basic infrastructure and framework for you, so you don't have to dream this up from the beginning. You can start at a much better place.

I'm looking forward to hearing what you have to say about CAB Ohad and thank you guys so much for joining me today on ARCast.
Ohad: Thank you very much.
Ron: all right. Thanks to the architect panel there in Tel Aviv. These are the guys that are doing it. I always like to talk to people about their real life experiences. Its not all rosy. There's a learning curve. There are problems that you have to deal with.

CAB is a very powerful framework, and like a lot of powerful things, with power comes great responsibility, as Spider-Man's grandma liked to say. But, I think it is worth it. From many scenarios, for many of them a more powerful kind of applications you want to build, it is going to make sense.

So, hope you enjoyed that one. We'll have more coming from Israel in the next week or so. So, stick around...