Category Archives: Technology

UI Smackdown: Session 3

XAML/MXML: Why both?

I'm always curious when we have competing standards emerging, and I wonder how that happens, and why.  So, since we had people who were knowledgeable about both Flex and WPF at the UI Smackdown, it seemed reasonable to explore this issue with respect to XAML (Microsoft's XML scripting language for use with WPF) and MXML (Adobe's XML scriptiong language for use with Flex).  How similar are they?  Do they strive to solve the same problem? Will one standard emerge?

MXML is Adobe's markup language. It's essentially a DSL (domain specific language) for ECMA script.  You write MXML and it compiles into Action Script.  It has a familiar feel to HTML.  Used for layout.

ActionScript is used for all procedural components.  In Apollo, ActionScript compiles to byte code on the server.

XAML is Microsoft's markup language.  You use it to write WPF applications.  Instead of ActionScript, procedural components are written in C# or VB.NET.  XAML is not just for WPF.  It's a serializable format that can be used to:

  • serialize event wireups
  • refer to other objects in serializing code
  • serialize property injections
  • add properties to a language

You can pull in more than just state with XAML.  WPF and WF use XAML (and other technologies will as well).

Thus, MXML is really more specific to layouts, while XAML manages serialized formats.  The general consensus from both vendors is that the technology needs to mature before it can be standardized.  It's hard to work with other primary vendors while trying to innovate (e.g., XUL, SVG).  It's better to give the technologies time to mature and then let them come together.

With that understanding, we moved on to what some described as the "real" question.  The tooling on top of XAML and MXML is really the key, not the underlying technologies that implement it.  So the real question is: WPF/E or Flex? 

In designing tools toward productivity in developers, Microsoft has the edge.  Adobe's process is more manual, but this will be addressed in Flex 3.

Microsoft's Expression UI writes to XAML source files in the same project as Visual Studio Developer.  On the other hand, pure designers feel more comfortable using Photoshop, so Adobe certainly has an edge there.

For now, the jury is out regarding which to use.  As they both mature, this will be interesting to watch.

MXML
Adobe's markup language, used to build Flex apps
XAML
Microsoft's markup language, used to build WPF apps

UI Smackdown: Session 2

How to Hook into an Existing App

The second session that I attended at the UI Smackdown discussed opportunities for hooking new technologies into an existing application.  In particular, one of the participants wanted to hook a WinForms app with a WPF app.  While we were there, Drew Robbins from Microsoft demonstrated how to do this, and gave references to some tutorials at msdn.microsoft.com.

One discussion that came out of this session was the idea that the goal in generating user interfaces is to be able to suspend the disbelief of the users that they are actually using software.  They need to feel like it's a natural progression toward getting their work done.  With WinForms, this is difficult, but WPF improves this experience. 

One objection that people face when moving away from winforms is that there is a lot of third party support for it.  However, looking at WPF, it's apparent that a lot of these things have been built into the framework, so third party support is not as critical.  Rather, the downside of WPF at this point is in documentation (or lack thereof).  Once you figure out what to look for, WPF is a lot easier than Winforms.

If you're looking for a mobility solution, for now, WPF isn't going to help.  It doesn't appear that there's any intention to have WPF/E (E=Everywhere except mobile?).  WPF/E builds true web apps using layout/vector graphics from WPF with XAML.  Javascript drives it.

An aside that came out of this session was the idea that we often look at migrating an application based on what it currently does.  Rather, we should consider what the USER is trying to accomplish.  This will offer us more of an opportunity to provide a rich web application experience, since we aren't stuck in the mode of what has been done.

WPF

WPF/E
Scott Guthrie's Blog Entry
Winforms with WPF
(Thanks, Drew, for the link!)

UI Smackdown: Session 1

Web App Limits: Real World Experiences

A group convened a session to talk about web applications, and where they break down with real world experience.  The limitations were noted as:
1. Javascript requires testing in many different browsers, but the GWT strives to solve this problem
2. May experience CSS challenges with GWT
3. Limited browser support for multi-media and vector graphics (resulting from lawsuits between Apple and Microsoft?)
4. Drag and Drop onto a scrollable pane generated some headaches for those who had used GWT

The recommendations and observations included:
1. Use Javascript for fast prototyping and then build in GWT once the interactions are discovered
2. Flex can talk to AJAX apps
3. Controls in Flex are builg using vector bitmaps.
4. WPF and Flash allow designer to build whatever they want and the programmer can use it
5. Can encrypt Flex and send over SSL.
6. Can unitttest classes using Flex
7. Javascript, Flex, and WPF build on strengths of the designers
8. Innovation in the browser has stagnated.  By adding in elements other than pure Javascript, Microsoft and Adobe (and others) are able to innovate more freely.

Google Web Toolkit Designer
A great tool for building apps using GWT

UI Smackdown 2007

Summary
Adobe's Flex, Microsoft's WPF, and Google's Web Toolkit (GWT) were all discussed in an Open Spaces format at the Ann Arbor ITZone on April 4.  I'm very late in reporting how it all went, since I've been trying to catch up with the other things that I'm working on.

About 35 people attended, from various companies.  Two people came in from out of the area: James Ward from Adobe, and Chris Bernard, from Microsoft.

Feedback after the event was overwhelmingly positive.  Some people want us to do something like this again.  Bill and I agree — these Open Spaces events are a lot of fun and very educational, for everyone involved.  If you haven't read about Open Spaces, I've included a link below.

I know that I learned something in every session that I was able to attend.  My only regret is that I was only able to be in one place at a time.  I really like what the Java Posse did at the Roundup.  Because they taped the sessions and are releasing them as podcasts, I am able to listen to those sessions that I didn't attend.  Of course, they DO podcasts, while we really don't.  We will have to see if it makes sense for us to record sessions for later release.

We kicked it off with an introduction to each of the technologies, and to the open spaces concept in general.  We had quick "lightning" talks of each, before we broke up into groups to explore questions that we had about each.  We had time to do 2 time slots of 3 concurrent sessions before lunch, and 2 time slots of 3 after lunch.  We concluded with an overall session where we asked what we could do better, and if this format and location worked for people.  The response was positive.  If we have many more attendees, we will quickly outgrow the ITZone space, but for this event, it worked great.  One unintended result was that two of the groups could actually SEE one another.  We were able to gauge a little about what was going on in the neighboring session.  One person even noted that it seemed like the "other" group was having more fun and he wasn't learning anything in the session that he was in, so he exercised the Law of Two Feet, and moved over, where he actually had quite a bit to contribute.

I'll summarize the sessions that I attended and hopefully others have done the same.  We hope to do about one of these per quarter, because we find them to be great learning experiences, for our consultants, for our customers, and for the community (as well as for ourselves).

Open Spaces

Java IDEs at the Roundup

Discussions of IDEs, and the special challenges of having choice

The Java Posse has released yet another session from the Java Posse Roundup. I attended the Roundup in March, and we had a lot of great sessions, all of which were recorded and will be released over the next few months. They’re releasing about one a week so that they don’t overwhelm their bandwidth restrictions. Most of the sessions that have been released to date, were sessions that I had missed. The session that was released this week #115, on Java IDE’s, was one that I not only attended but also was responsible for convening. That simply means that it was a topic that I hoped that people would want to discuss, so I put a post-it note on the board, and people came. We had a great session, and I learned a lot.

If you want to download the recording for the session, you can get it at http://media.libsyn.com/media/dickwall/JavaPosse115.mp3, or from whatever you usually use to download such things (I subscribe with iTunes).

Oh, and yes, there’s a little bit of Microsoft-bashing, but also some accolades too. For one thing, it occurred to me that this is not a conversation that Microsoft developers would be having (i.e., which IDE to choose). Most people use Visual Studio, and that’s an appropriate choice. Yes, there are plug ins, but my bet is that 99% of the community doesn’t bother installing them. I suspect that useful things make their way into Visual Studio, much as useful things make their way into MyEclipse and NetBeans. And yes, I’m sure that there are enterprising developers who customize their environments, but I seriously doubt that Microsoft programmers face quite the same number of choices that Java programmers do when configuring a developer environment. That’s not a bash; that’s actually a compliment. Out of the box, Visual Studio is not only usable, it’s quite useful. With the Java tools, there’s not simply “a box”. There’s “the web”. Go forth, young (wo)man, and find your IDE. Then decide how to customize it. This approach is self-selecting, I think. The types of people who have been drawn to Unix and Linux aren’t put off by this approach. They see it as an advantage. I’m not exactly put off by it, but if you listen to my comments during the session, you will realize that I do struggle with the sense that it’s a waste, some of the time, but then again, I love the fact that people are so motivated to build cool tools that can be easily plugged in.

My biggest concerns with this approach are:

1.It’s hard for new developers to get started
2.Young developers, who expect an IDE as part of modern software development practices will be put off and not choose to develop in Java
3.Time spent evaluating and selecting an IDE, and choosing customizations for it is time that I don’t spend solving problems for my clients.

I haven’t looked at NetBeans in a while, and I will (soon) spend some time looking at that again. I’ve been pretty happy with Eclipse and in the spirit of getting work done rather than once again evaluating tools, I was pretty happy to stay with it. But with some of the new features that NetBeans 6 will provide, I’m thinking it’s time to look at it again.

In any case, what I got out of this session after experiencing it both in person and later, as an observer, I took away the following:

1.We all like (and alternately hate) our IDE's. Even if our "IDE" is vi. 😉
2.Everyone struggles to find that sweet spot of plugins to use with their IDE of choice.
3.If you are a plugin "developer", write good docs and promote the tool wisely so that others can learn about it. Don't produce a 1 hr video (not kind to searching). And make sure that the Java Posse knows about your plugin/tool.
4.A rating system would go a long way toward helping the mere mortals among us to help find cool and useful plugins, and shorten our own individual evaluation cycles.
5.nbextras is a good place to look for plugins for NetBeans.

I think that *** said it best. It really comes down to community. Active participation within the community, sharing about tools, etc. is really essential to knowing what you can do better.

NetBeans
Stable Release (5.5)
NetBeans in Progress
Milestone releases
Eclipse

IntelliJ's IDEA

Mylar
Plugin for Eclipse, discussed in the session
Findbugs
Plugin, discussed in the session

Kathy Sierra, Jake Baker, and online threats

Here’s a link to the interview on CNN that included both Kathy Sierra (one of my favorite bloggers) and Chris Locke (one of the bloggers mentioned in her post as being involved with the meankids site).

http://onegoodmovemedia.org/movies/0704/gma040107locke_sierra.mov

I haven’t posted anything about this on my blog since last week, when I saw her post about the threats. I offered her some support in the comments section of her blog, but I have been struggling with what to write myself. Honestly, I didn’t know Chris Locke or anything about meankids before this incident, and my life has not been improved by hearing about such mean-spirited behavior. I think it’s unfortunate that they have been given a lot of publicity now, and for that reason, I refuse to post any links about them.

But the worlds where computing and marketing meet have been dealt a great blow by Kathy taking a hiatus from blogging (I hope it’s just a hiatus), and I feel like I want to add my two cents to this entire mess.

My company uses moderated comments. Is this censorship? Sure. Would we sensor out comments such as some of those posted on Kathy’s blog? Absolutely. But what Kathy could NOT censor were comments on OTHER people’s blogs, and those threats were much more revealing and frightening than the anonymous comments that were on her blog (of course, I only know what remains, not what might have been removed). If someone were to post threats to me that were posted about Kathy, I’m pretty sure that I would have the same reaction as she did and stop blogging for a while. Or move to a new town and lick my wounds. Yes, I’m serious. As Robert Scoble and his wife posted, having children really does impact how you see these things. Nothing, not a job, not prominence in the community, NOTHING is worth putting my children at risk. And make no mistake, if someone had threatened me in the way that Kathy was threatened, I would see my children at risk and Mama Bear would be out protecting her cubs, not matter what the cost.

But the part that has really kept me silent about all of this til now has been my correlation between this and a local incident that happened here in Ann Arbor several years ago. The threats against Kathy brought all of that back to me. At that time, a student by the name of Jake Baker submitted a pornographic story about a fantasy rape and murder of one of his classmates, whose real name he used in the story. This is immortalized in wikipedia and in court judgments if you care to read the details. The similarities between this case and the threats made to Kathy make me sad. Most of all, the fact that the case against Jake Baker was dropped in spite of actual plans to meet a co-conspirator (my words, not those of the attorneys in the case) to carry out the actions. His right to free speech was upheld, and the judge did not believe that he would have really carried out these actions. Sadly, the case is seen as a precedent to free speech on the internet. The judge’s opinion in that case follows.

"It is not the policy of the law to punish those unsuccessful threats which it is not presumed would terrify ordinary persons excessively; and there is so much opportunity for magnifying or misunderstanding undefined menaces that probably as much mischief would be caused by letting them be prosecuted as by refraining from it."

The Jake Baker case (and the ultimate dismissal) alarmed me in 1995, and those feelings were brought back last week, when I read about the threats made online to Kathy. I suspect that a judge in a case against the leveler of the threat against her will find the same way, and that saddens me. If I recall correctly from what transpired in 1995, the idea was that since the “victim” in the story didn’t “hang out” in alt.sex.stories, where the story was published for ALL THE WORLD to see, it wasn’t viewed as a threat that she was likely to have seen. Indeed (again, if I recall correctly, and 12 years can make memories fade), I seem to recall that someone else told her about the site and about the story and that it included her name. And somehow that wasn’t seen as a direct threat, whereas if he had read the story aloud in class, it would have been considered more seriously. Well, this was pre-Google and pre-egosurfing! It’s very easy to find things like this now, so hopefully this litmus test will not be applicable.

I’m left with questions about where Jake Baker is. I sincerely hope that he’s an upstanding member of society who has regrets about what terror he caused. And I hope that the woman about whom he wrote this “fictional” story has long been able to put this behind her, and that she is wildly successful in the field of her choice. I’m sad to think that threats on the internet have not been taken seriously in the past, and that many, many women who have restraining orders suffer from very real violence as a result of “implausible threats”.

And yes, every day, I struggle with thoughts of the challenges that free speech bring, but I do participate in some online groups and I see intimidating, nasty “trolling” regularly. It is not tolerated in the groups that I frequent. There are moderators who remove objectionable, bullying posts and for the most part, this is a good thing. In many cases, I have seen valued members of online communities leave and “go dark” to avoid the trolling behavior because the moderators weren’t able to get to the posts before they were made public. This saddens me, but I totally understand why they would do this. I’m a bit “too exposed” online, but my business makes it so, and it’s a (small) risk that I tolerate for now. If, however, I were subjected to harassment of the form that Kathy just experienced, I would change my behavior. My family is worth more than an online presence.

I truly enjoy Kathy’s blog. The insight that she has provided in the year or so since I have been reading has been invaluable to me. Her wit and her insight are a unique offering to the community. Her way of looking at things, and of getting others to look at things is important is why I will keep her in my list of blogs, and why I hope that she will return someday. In the meantime, I hope that there are things that we can do to make this online community a safer place to be. If that means less anonymity, I’m (personally) willing to accept that.

It’s a busy week in Ann Arbor!

I’m still trying to finish up my blog from my visit to Microsoft last week (and from the Michigan Celebration of Women in Computing over the weekend), but I wanted to make sure that I mentioned the busy week that we’re having in Ann Arbor this week.

James Ward, Flex evangelist from Adobe, is coming in from Oklahoma City to present Flex both Tuesday night at the Ann Arbor Java User Group (www.aajug.org), at 7:00 (note the earlier time!), and on Wednesday night at the Ann Arbor Computer Society (www.computersociety.org) at 6:00 pm. While James has sent me the same abstract for both nights, he’s said that the Tuesday night event will be more Java-focused and the Wednesday night event will be more about the technology. There’s not much overlap in attendance at the groups but since I’m planning to attend both nights, it will be great to hear something different the second night.

Here’s the abstract:

Sexy Web Apps with Java, Mozilla Tamarin, and Flex

In this session James Ward will do live demonstrations and write code to show how easy it is to build sexy web apps with Java, Mozilla Tamarin, and Flex. The session will cover the programming model, Java Remoting, Pub/Sub messaging & JMS integration, Data Synchronization, Hibernate integration, charting, cinematic experiences, and media integration.

I’ve seen James demo some incredible stuff with Flex. He built a TurboGears widget with Flex at CodeMash. He demo’ed a nice bookshelf photo application there as well (using photos from CodeMash!). And, he showed a demo at the Java Posse Roundup that used transparent pages from an old medical textbook … wow! To be able see the transparent pages turn, and to be able to see through them to the previous page is REALLY cool, and really does give you a flavor for the compelling interfaces that can be built with modern technologies.

We’re really making the best of James’ time while he’s here. In addition to the evening events, Adobe, Microsoft, and SRT Solutions are presenting, “UI Smackdown 2007: Using GWT, Flex, and WPF”. This is a one-day workshop to learn more about all of these toolkits in an open spaces type of environment. We’re going to start off by presenting a quick overview of each, and then the participants will be breaking out into groups of their choosing to work with the various toolkits. The $90 registration fee includes continental breakfast and lunch. There are still a few slots available, so if you still want to sign up, do so right away so that we can make sure that we order enough food!

Dynamic Languages on the CLR

Jim Hugunin and John Lam

Jim created Jython and IronPython.  John is working on Ruby for the CLR, but has only recently transitioned to working for Microsoft.  I get the impression that Ruby for the CLR will be released Really Soon Now.

Just as I was getting grumpy about not having an interactive conversation, Jim and John came on to do the Dynamic Languages on the CLR talk. They turned it into a completely interactive conversation with no Powerpoint. They even turned some of the questions around to the audience, asking for our input. This was SO much more interesting for me, at least, and for the speakers as well, I expect.

The guys took questions:

1.Ruby or Python: Which sucks less? Use the language that fits your mind best. Some people work well in Python. Others have that same experience with Ruby. It’s not necessarily a fundamental difference in languages, but rather a difference in minds. Not a huge argument that one is superior to another. But comparing either to Javascsript is a different question. That language is impoverished. Doing DSL tricks is easy in Ruby and allows people to write closer to the problem domain.

2.How are you going to lock us into your platform? IronPython has always been about being completely compliant implementation of Python and completely integrated with .NET. To do both is a lot of work. So, in Python “strip()” removes whitespace, but in .NET “Trim()” removes whitespace but is illegal in Python. But if you import clr, then for that file ONLY it is allowed to run s.Trim(). So the parts of your code that are doing pure data structures or pure algorithms can ignore whether you’re working in IronPython. Being up front about wanting people to lock into .NET. By providing really cool libraries, they will lock programmers into .NET? Strength is that you can write Mac-specific or .NET-specific code. Pure Python code works everywhere. Python has a huge wealth of pre-existing modules. Those written in Python will work (or it’s a bug in IronPython). Those that are written in C are more problematic. FePy project is a community based project that includes a lot of modules that fill in these gaps.

3.What is the plan for PHP? Would PHP running on .NET, would that be convincing to switch. Not really, so it doesn’t really look like there’s interest. Microsoft is doing dynamic languages because it’s interesting to a group of developers.

4.What is it going to take for Rails to run on top of .NET? Imagine it happens. Is it a good idea? Deployment is a pain in Rails. Want to sell into .NET companies in the enterprise. What it’s going to take is a good business reason to want to use it. Developers need to want it.

5.When is the veil of silence going to be limited? Jim went dark for 8 months after coming to work at Microsoft. IronPython is being run as an open source project with an open mailing list. IronPython 1.1 was just released. Incremental releases were driven by user bug reports in an open, interactive way. Python 2.0 more modules, end of year. John’s only been at Microsoft for 2 months, so he will start becoming more open soon.

6.Why dynamic languages? There are millions of programmers who clearly love dynamic languages. It works for them. Let them program in a way that they enjoy and can be productive. More expressive. First refactoring tool written for Smalltalk. First unit testing framework written for Smalltalk. Good ideas have come out of the dynamic language community.

7.Do we want to run the CLR in IE? Killer fast Javascript and Ruby in the browser would be compelling. Performance is the big thing. Testing, running javascript on IE. As we create more sophisticated apps, there’s no visibility in the CLR. But, would you put it in Firefox too?

8.Mono? Mono doesn’t work well. Winforms and GTK# and supposedly it’s compatible. Some say it runs beautifully and some say it doesn’t run at all. Mono regularly runs IronPython.

9.Should dynamic languages be an Intro CS100 language? Yes, dramatically lower barrier to entry. Number of things you need to know to write a program in a static language: classes, methods, static method calls. In dynamic languages only need a function call or statement to write Hello World. If you want to talk about the essence of programming, it’s about control flow and data structures, not types. But the lower concept count means that people with less programming experience can write in dynamic languages. Means that it might have an impact in terms of nonprogrammers writing code. Introducing patterns on top of the language adds a different level of complexity. Malleable syntax in Ruby allows for custom languages like Rails DSL. The ability to create DSLs in Ruby is interesting.

10.What about IDE support? Today, for IronPython, Visual Studio SDK shows people how to extend Visual Studio. It includes IronPython integration (all written in C#). Minimal intellisense support, ships as a sample. Left to developers to extend. The lightweight solution to an IDE is a real challenge. Can use the debugger today. The best part of IronPython/.NET integration is availability of the debugger. Profiler works poorly. Infrastructure issue that needs to be solved fairly soon. RubyCLR: John demo’ed an IDE that he worked on before he came to Microsoft. He was running on a Mac, running RubyCLR. He used WPF with Ruby, using Ruby metaprogramming stuff. This enabled him to reduce the number of things he had to type.

Summary of the first morning at the Microsoft Technology Summit

This has been an interesting day so far. There were a lot of interesting topics, and the speakers were very knowledgeable (and all have very cool jobs). Unfortunately, I have been spoiled by the Open Spaces conferences that I have attended. While many of the speakers provided ample time for questions, there’s still the sense that there is a speaker and an audience. There’s a stage, and powerpoint. There’s a presentation. This is NOT a conversation such as I am used to in Open Spaces. I’m not just picking nits here. I’ve been spoiled by the idea that it’s a democratic conversation where opinions are freely exchanged rather than topics are handed down. There’s clearly a leader directing questions. And I’m pretty sure that the speaker isn’t getting much out of the conversation either. If the goal here is to get opinions from the non-believers in the group (and I think that’s part of it), then this isn’t going to serve Microsoft as well as having an open conversation with the participants in discussions where the participants set the agenda and we all sit around in a circle and talk. I had many interesting conversations last night at the evening reception and some today at breakfast too. Looking forward to the breaks and lunch and while I’m actually learning things in the session, I’m not actively engaged. I’m sitting here, taking notes. And reading email.

Day 1: MTS07 – Kevin Schofield, Microsoft Research

Kevin Schofield, General Manager, Microsoft Research

The second session of the day was given by Kevin Schofield, General Manager, Microsoft Research. He has a cool job!

Microsoft Research was modeled after research at Carnegie Mellon University. Researchers pick the problems, independently, across the breadth of computer science.

Microsoft Research is very aggressive about publishing papers (3700 papers in 15 years). Now that it’s a mature organization, it releases hundreds per year.

Academic programs – don’t tell researchers who to work with, and encourage publishing. They are trying to drive forward through research and they also hold workshops, to which a lot of people are invited.

Microsoft Research Mission:

  • Advance the State of the art in our chosen areas of computer science
    • Making computers easier to use
    • Reducing the cost of computing
    • Making software developers more productive
  • Transfer the resulting technology to Microsoft businesses
  • Ensure that Microsoft has a future

·         Provide Corporate agility – rapid response to change

    • New Technologies
    • New competitors
    • New Business models

·         Reservoir of technology

 ·         Pool of Expertise and smart people

He did a demo of Gigapixel panoramic photography. The zoom was incredible! We started out by looking at a photo of the Seattle skyline and ended up zooming far enough in to see 9 people standing on the observation deck.

Looking at surfaces with Vision.

He also showed us some research that Andy Wilson has done, prototyping interacting between the physical and virtual worlds. The video was cool, but I think that this demo, which was done by a separate company about which I know very little, was better. I had previously seen this demo at the Java Posse Roundup.

He also showed us some data from a study that they did using a “Sense-cam” with memory impaired subjects. These people were recorded for 1 day using a sense-cam (that video-recorded everything that they did, and then they were told to watch the sense-cam recording every day for 2 weeks. Not only did their memory of that day improve, but they were able to recall more and more details as time progressed. The surprising result was that they could still remember for 3 months after stopping. This was a small study, but it had some interesting results (not known if they would be repeatable). Microsoft is now working with memory researchers around many different memory impairments to see how this might help people maintain memories.

Microsoft Research addresses challenges for the company. Kevin described some of those challenges as follows:

  • Today’s CPU architecture: heat becoming an unmanageable problem
  • Power density too much of a problem. That’s why going to multi-core.
  • But, no generalized models for highly concurrent software.
  • Third problem: code is too big

 

How to fix:

Build smaller components that are loosely connected. Achieve verifiable composability

Loosely coupled, asynchronous, concurrent, composable, decentralized, resilient systems

Video for Kids about careers in CS