Moonlight and you
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 97 | |
Author | ||
License | CC Attribution 2.0 Belgium: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/45729 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
00:00
Menu (computing)Inclusion mapGoodness of fitTouchscreen2 (number)Graphical user interfaceDemo (music)Software developerPresentation of a groupImplementationDescriptive statisticsCartesian coordinate systemQuicksortCodeProjective planeSampling (statistics)Visualization (computer graphics)Right angleTemplate (C++)Distribution (mathematics)System callTelecommunicationCrash (computing)BuildingINTEGRALType theoryObject (grammar)RootStructural loadCodeRun time (program lifecycle phase)Web browserMereologyMathematicsWeb 2.0BitTranslation (relic)1 (number)Bookmark (World Wide Web)Default (computer science)Computer fileData structureRevision controlOpen sourceDebuggerEvent horizonSlide ruleRoutingWebsiteWindowPoint (geometry)Multiplication signNetwork topologyWeb pageLecture/Conference
09:50
Shader <Informatik>UsabilityDirectory serviceFunction (mathematics)Thread (computing)Data modelInformationPhysical systemService (economics)Link (knot theory)DivisorRevision controlDialectSign (mathematics)Run time (program lifecycle phase)Web browserWeb pageGUI widgetSymbol tableCodePlug-in (computing)Line codeBitType theoryDemosceneBuildingBranch (computer science)Graphical user interfaceVideoconferencingFreezingBridging (networking)Front and back endsProcess (computing)Web browserLine (geometry)Software bugRandom matrixSource codeComputer animation
12:00
Branch (computer science)Graphical user interfaceSlide rulePhysical systemWeb 2.0Directory serviceScripting languageSoftware developerCore dumpBinary fileWeb pageResultantLibrary (computing)Integrated development environmentObject-oriented programmingCartesian coordinate systemLecture/Conference
14:12
WikiColor managementElectric currentMaxima and minimaExecution unitCodeSoftware testingUser interfaceSimulationMathematicsVaporAsynchronous Transfer ModeConvex hullDefault (computer science)Library (computing)Menu (computing)Computer fileEmailSample (statistics)Installation artMultiplicationSymbol tableVideo gameStrutWechselseitige InformationPersonal identification numberCore dumpCartesian coordinate systemSoftware developerRight angleCodeWindowDifferent (Kate Ryan album)Descriptive statisticsComputer fileBuildingSampling (statistics)Bit.NET FrameworkTerm (mathematics)DatabaseCompilerWeb pageAssembly languageDirectory serviceRun time (program lifecycle phase)DebuggerSubsetSystem callInterface (computing)Vector graphicsVideoconferencingThread (computing)Mobile appLimit (category theory)Software bugException handlingStructural loadObject (grammar)QuicksortInterpreter (computing)Plug-in (computing)AverageWeb browserBootingLecture/Conference
21:44
Convex hullMenu (computing)Ultimatum gameRootUser interfaceGraphical user interfaceMaxima and minimaBellman equationCartesian coordinate systemWeb browserNormal (geometry)Open setLecture/Conference
22:11
Execution unitLine (geometry)Menu (computing)Maxima and minimaInclusion mapWechselseitige InformationGraphical user interfaceConvex hullMIDIElectronic data interchangeHill differential equationLink (knot theory)Demo (music)Goodness of fitLecture/Conference
22:49
Generic programmingQuantumType theoryStandard deviationFunctional (mathematics)Game controllerObject (grammar)CuboidDemo (music)Source codeXML
24:01
Maxima and minimaKernel (computing)TwitterClient (computing)Cartesian coordinate systemWeb browserMathematicsObject (grammar)Lecture/Conference
24:37
Normed vector spaceIntelMaxima and minimaPerpetual motionInstallation artTraffic reportingMoment of inertiaSynchronizationDemo (music)Different (Kate Ryan album)Game controllerNetwork topologyLecture/Conference
25:45
outputScatteringNetwork topologySeries (mathematics)Computer fontNetwork topologyDemo (music)HypermediaRule of inferenceGame controllerWeb browserEntire functionMixed realityVideoconferencingCartesian coordinate systemRight angleLecture/ConferenceSource code
27:27
Electric currentEmpennageAddress spaceRootDirectory serviceError messagePhysical systemSocket-SchnittstellePrisoner's dilemmaPoint (geometry)Network socketLocal ringSample (statistics)Boolean algebraServer (computing)Exception handlingWrapper (data mining)Process (computing)Demo (music)Hidden Markov modelLecture/Conference
28:10
GUI widgetElement (mathematics)Network topologyLogicObject (grammar)LeakZoom lensMotion blurAlpha (investment)Reflection (mathematics)Sound effectComputer-generated imageryChemical equationDistanceComputer hardwareMoment (mathematics)BitShader <Informatik>Computer animation
29:08
Inverse elementSound effectZoom lensMotion blurDistanceComputer-generated imageryScale (map)VideoconferencingAlpha (investment)Logical constantStrutReflection (mathematics)Hash functionDevice driverVideoconferencingBinary codeVirtual machineBitPixelMathematical optimizationShader <Informatik>Computer animation
30:04
Menu (computing)Convex hullCartesian coordinate systemSound effectMultiplication signWeb 2.0Run time (program lifecycle phase)Lecture/Conference
30:33
Computing platformMultiplication signFocus (optics)Moment (mathematics)Device driverLimit (category theory)BitPatch (Unix)MiniDiscEvent horizonSpecial unitary groupMereologyWebsiteType theoryFormal grammarLecture/Conference
Transcript: English(auto-generated)
00:04
I hope this works. So welcome to the Moonlight Talk. Let me just find my stuff, hopefully.
00:21
This is good, OK. Hi, we're late, but hopefully I won't take too much of your time. I'm not going to do that many slides. I have four slides, because I want to do a hands-on demo presentation. We haven't done one of those of Moonlight for a while, ever, I think.
00:43
So you've heard about Moonlight all day long, Silverlight and Moonlight, so I'm not going to tell you what it is. I'm going to show you what it is. The talk is entitled Moonlight and You, because I want to show what you need to work with Moonlight, you, the user,
01:02
with you, the developer. What tools we have right now to build applications, what works, what doesn't, what features are available. And basically, I'm going to show you what I had to do to get the demos working today,
01:21
so you can do the same with your applications, basically. So you know what Moonlight is, Opusar's implementation of Silverlight. This is the goals that are stated on the site. They're still the same. I find the third one, the fifth one is funny,
01:42
but the third one is the one I like best, because one thing that we had from day one was pretty much support for desktop applications. Because when we did Moonlight, it was just a quick step
02:01
to run it on the desktop, because we don't actually need the browser for anything. It's GTK backend. The browser's there to provide us a window and events, but we can do that too, so it's not that complicated. So usually, the good part about that is that most applications that work on Silverlight,
02:24
the code can be just compiled for the desktop and run on the desktop with no changes or very few changes, basically. And the more you go into Silverlight versions, the less problems you have, because the less you're depending on JavaScript and web technologies.
02:42
Originally, Moonlight 1.0 was completely JavaScript and the runtime. No C Sharp, no anything. But as we plugged in the good parts, which is the C Sharp and the runtime and everything, you cut down on the web technologies a bit.
03:01
So it's easy to do the translation between one and the other. So I like that goal. I like the other ones too. That one's my favorite. This is how Silverlight and Moonlight works, OK? There's a lot of layers, a lot of structure,
03:22
a lot of everything. But this is what happens. The runtime is sitting in the middle, OK? It's C++. You don't see it. It's there, you know? You're doing stuff, you as an application developer, you as the user of the APIs, you're doing stuff in C Sharp, which is talking
03:43
to C++ via a lot of calls. If you're running on the browser, there's two-way communication between all these layers, basically. So when you load the plug-in, the browser loads the plug-in,
04:00
initializes C++, eventually ends up in C Sharp, which ends up in C++ back again, tells you something in JavaScript. And then you can do calls from one end to the other. And it's transparent for you. So this is basically what you care about are the two endpoints.
04:21
And the middle is what we care about. We hopefully care about it enough so it doesn't crash or anything. That's our business. So I'm going to start off with demos.
04:40
Kill this thing. OK. So I don't know if all of you are here for the monodevelop talk. This is monodevelop. I'm running it locally. It's the latest build. But it's the same thing that's released.
05:04
Before we had moonlight integration on monodevelop, we had to do everything on the command line. I'll show you how to do that in a bit, because there are important tools on the command line that you will need to know, because we don't have designers and GUI tools for everything. But we do have now integration on monodevelop.
05:24
So basically, because that's what I do on monodevelop, it's a moonlight application project. So I don't know if this is actually already on the latest version of. Where's Luis?
05:41
It's in 2.4. I'm sorry, 2.2 and it was in 2.0. It's not on yet by default. Moonlight type projects on monodevelop. But some distributions disable it. Right, right, right. Because we're, well, yeah. Anyway, we're talking about leading edge, basically. Because moonlight 3 is just coming out.
06:02
And we're just starting to have all these tools available. So what do you want, basically? Let's just go quickly through a little tiny small sample. Hello world, usually. This is, it has a purpose, believe me.
06:22
So I'm just going to change this. OK. For those lazy of you, well, you probably haven't used Visual Studio interview. But this is pretty close, basically.
06:45
This is the hello world that Michael had to send. I think that the template original is still there. Sorry, hello moon, not hello world. OK. This is your basic XAML description of a moonlight application.
07:01
It's just totally empty. If we're talking about doing moonlight applications like this, you don't have to even leave monodevelop to run and debug. Because it's all integrated right now, which is basically what I'm going to show you.
07:20
So we are debugging right now a moonlight application. It doesn't do anything. But if I step in, you can see that it's jumped into this page, which is the initialization that's separate. This is a basic, basic template of a moonlight application.
07:41
So this is the entry point, monodevelop, moonlight, as soon as we release everything and all the distros have it, that's what you're going to get. Debugging applications, hopefully will get a designer really, really nice and really, really soon. So you don't even have to have XAML written down.
08:01
But this stuff is starting to work. So this is a generated file. So what Silverlight Moonlight does is it takes your XAML description file and generates, sort of generates, all the hookup codes
08:22
so you don't have to basically, which is just basically hooking up all the objects that are described on XAML. So there's a grid layout root, which means layout root is going to be hooked up here so you can access it later.
08:42
So this is a hello world. This is, by the way, you can't see it because the screen is too small, but we're going to see it in a second. This is running, as soon as it shows, on Firefox 3.6.
09:02
So monodevelop launched Firefox, connected the debugger, which is asynchronous. And then, so you're debugging a plug-in inside Firefox on monodevelop visually, which is a good step forward, I think.
09:21
It's a good one. So Miguel was complaining earlier that we don't have Chrome support. We do have Firefox support up to 3.7. I think it's working fully. We do have Chrome support. And just because he was complaining,
09:49
I'm going to quickly fake it, basically.
10:00
And while I do this, while this is running, you're not going to see it. You're going to see it in a bit. I'm typing, but you're going to see it, as soon as this goes.
10:23
Yes, now you're going to see it. OK. So while I'm building a separate brand, just for Chrome, so what happens is with the Chrome support,
10:43
Chrome is a bug. Chrome has this nice feature of running plug-ins out of process so they don't interfere with the browser. Basically, if they blow up, the browser doesn't blow up. So it just so happens that you can do a plug-in with one line code that freezes the browser.
11:01
And that one line code happens to be in Moonlight. So it freezes. So it does work. It just kind of doesn't. So just moves that line to another place that doesn't freeze Chrome. It just so happens that Firefox doesn't work with this one.
11:23
So we either have one or the other. You can't have both, for now. I'm working on it. Hopefully, it's going to be fixed very soon. So anyway, for now, Chrome supports is it's full except for video. So we don't have video because video requires a back end
11:43
that we need to do. Firefox has quirks that we support. But then, obviously, a Firefox bridge for video doesn't work on Chrome. So we need to do that. And everything else basically works on Chrome, which is what I'm going to show you in a bit as soon as this ends.
12:07
So this is a little script that just setups a bunch of LD library path, path, and C include path, and whatever that's sitting on my home. This is really useful, because if you
12:23
don't want to blow up your environment, it's kind of handy. Because Moonlight runs on the 2.6 branch of Mono, not Trunk. So if you want to start playing around with it, and you have Mono installed on the system, and then you have to have separate Mono, you're going to blow up your system.
12:41
So I'm going to put this on. When we have the slides on the web, I'm going to put the script somewhere. So if you want to play with it, you can just pull it and not blow up your system. So we were showing a Hello World. So this is what MonoDevelop created, the two XAMLs, two CS.
13:06
MonoDevelop dumps everything on the bin directory. So I'm going to go there. This is what it runs, the HTML page. I can actually do this, because it's just a simple page
13:21
that Firefox is going to work. This is the same thing that MonoDevelop does. Just to prove that Chrome works. Chrome works. Oops, you can't see it, sorry.
13:44
See me now? Chrome. OK, now let's just switch branches again.
14:04
It's not going to be very. OK, so now while that's doing that, so we were looking at the application on MonoDevelop, right? There's tools on command line to do the same thing that MonoDevelop does, basically.
14:22
So we have this Hello World. And what MonoDevelop essentially does is run mzap. mzap is a front end. It basically drives the compiler and the resource packer and everything to create a zap file, which
14:41
is basically a zap file. Also the HTML impacts every resources in the assemblies. So it's the front end to build Moonlight applications, basically. So if I run mzap here, it's smart. And it knows that everything XAML on XAML.cs
15:01
is going to be compiled. Anything, any DLLs that are yours and that you reference, basically, are going to be included. Everything that's in there is going to be included. And it's cute. It creates the DLLs and everything. It's messy. MonoDevelop is cleaner. And it creates a HTML page somewhere around here,
15:24
which is usually the same name as the directory where you are. So this guy is done. So basically, it's the same thing. You just run still in the same place, our hello world.
15:45
Now, the trick is for desktop apps, it's very complicated. You do desktop. And then you have another tool called MOpen,
16:01
which does the same thing as Firefox, which is basically create a ttk window and then initialize the Mono runtime and Moonlight and everything, and basically do the window. So what you do here is call the zap file, not the HTML file, obviously, because the zap file contains everything
16:20
that the application has. And then you have a ttk window that is running exactly the same code as Firefox. If you don't want window decorations,
16:41
Vashti will give you what we call a desklet that we haven't touched in a really, really long while, which is basically window with no decorations, which allows you to now do something cute like we're
17:06
going to go somewhere else because I love opening windows. There are some very old samples of desklets, like three years old, maybe, something like that.
17:21
The launcher has some problem with something.
17:41
This is old code that needs to be reviewed. There's some problems with the ttk side. This code hasn't been touched in two or three years, maybe. So we need to review it, basically. But this is a really, really simple clock application that has no code, basically. It's just all description and animation.
18:01
We can look at the code very quickly. But it's running on desktop. And it's totally transparent and needs fixing in the drawing. There's no window decoration because it's run with dash d. So you can basically do little applets, right,
18:23
just to show you the difference. That's what dash d does. This is the original. The transparency code has a few bugs. So this is a moonlight desktop app, which could technically be compiled to run on a browser.
18:43
There's no difference. The HTML file doesn't do anything except load the plug-in. So this application is very simple. Let's just open with something big so we can see.
19:01
There's no highlighting. But it's basically just simple. This is SVG. For those of you who don't know XAML but know SVG, Inkscape can export XAML. So if you want to draw nice ellipses, nice gooeys, anything, you go to Inkscape. You do whatever you want.
19:20
You just load your SCGs if you have them. And then it just exports XAML. And it'll be done. And you don't have to have any sort of driving code for this because here you have the canvas on top. And this will get drawn immediately. It's just a XAML file, literally. You don't even have to technically compile it.
19:42
You could just load it. The interpreter will just parse it and draw it for you. You just want to compile it because there's C-sharp code that can manipulate these objects and then do nice stuff. The difference between desktop applications and Moonlight applications is that Moonlight is very restricted in what it can do.
20:03
So the APIs that you have access to are very restricted. You only have one thread, which is a theme today, which is not exactly true. But essentially, you have one main thread. Everything that you do, any calls, HTTP calls,
20:23
anything that you want to do to the outside, is completely asynchronous. You cannot do synchronous calls to anything outside your app to make sure the main thread is always going no matter what. So you can't just freeze the plug-in and probably kill the browser along with it.
20:42
And also, there's a very limited subset of calls that you can make. On the other hand, the same application, exactly the same application, compiled for desktop has no restrictions because it's the desktop. It's yours. It's an application. You can do whatever you want with it. So this is basically an interface
21:03
on XAML, which is, for those who know, SVG, vectorial drawing with animations, with videos. I'm going to demo in a bit. With everything you really want to do, that you can draw on Inkscape, basically. You can dump the work on your designers on whatever.
21:23
You can draw pretty nice vectorial things. And then you can drive it with C-sharp with full access to everything that .NET has to offer in terms of database access, in terms of everything, basically, that the runtime can do. So I like it, but I'm biased anyway.
21:41
You must like it because you're here. Anyway, so that's, let's see. Let's go back to our, it's here? Yes. So yes, this is built. So mzap for compiling, normal or desktop applications,
22:02
mzap open for running desktop applications. Anything else is via the browser. So I don't forget, we've seen Hello World. So let's look at some demos, basically. What do we have available?
22:24
Okay, I don't remember if I built this for the desktop or not. Sorry, it's too big.
22:45
My mouse is not that good. So, okay. So this is something I just, I was messing around with,
23:01
just to show you different types of, so these are standard moonlight controls, moonlight controls, dot, down, box, and everything. So basically this is an animation demo,
23:20
for built-in animations, basically. So different types of how to animate an object. So basically, all the animations are done with storyboards, and then you just define animations,
23:43
how long do you want them to take, and what type of using functions that they're gonna take. So how they'll delay or they'll accelerate, what type of stuff that's gonna happen on the animations. And this is basically the demo. A bunch of the storyboards that animate objects. Doesn't do much else, but it's running,
24:03
again, if you compile this on Moda Developer, it just ends up, you can run this on the browser. It's exactly the same code, no change. So that's animations. You can imagine taking the decorations out, picking these objects, and then doing animations
24:24
on your applications, whatever they are. So if you wanna, I don't know, Twitter clients with nice trade-ins, whatever, you can do that. What else? Next.
24:46
Something that's working, again. That wasn't. I'm on the right place. Next. Okay, so this is more detailed.
25:05
This is the Silverlight Toolkit, the Silverlight 3 Toolkit. So it's basically a demo of a bunch of different controls that we basically have built in. You can use them, they're in the API. This is Silverlight 3, we are in the preview.
25:22
So not all of this is supported. Basically we have all the controls, but not everything is working 100%. I don't know. Yeah, well, anyway. These, yeah.
25:54
So the font is really small. So this is, can you see it? These are all the several different controls.
26:03
Some of them are special. They come in the toolkit themselves, so the others are built in. But they're here, they work, they're running on moonlight. So I think this one was cute, basically. Okay?
26:27
So this is fully, oh, okay. I'm gonna demo the video, but I'm not gonna demo the Microsoft Media Pack. I purposely removed it, because we've been doing demos with the Media Pack.
26:42
Five? Okay, I'm gonna do the demo next. We've been doing demos with the Media Pack, and we know the Media Pack works. I have FFmpeg here, so we can see moonlight for you guys that are like, FFmpeg rules. You can see moonlight doing FFmpeg.
27:01
This is handy for debugging your own applications, if it shows, if it doesn't blow up the browser. Oh, when it's like huge, right? Yeah. Forgot this one is huge. These are features that are not available on Silverlight,
27:21
but we have them because we like them. So basically, you can see the entire tree of stuff that is done here, because this entire GUI is done on Silverlight, so it's pretty big. One final demo.
27:41
We are building up to it. It works. One final. I'm sure I have it running somewhere else again.
28:04
Really? What's the syntax?
28:27
So finally, this is a pure C Sharp Silverlight 3 feature, which just got working. David Grievman is working on this,
28:41
and we just got it working two or three days ago. Well, in 64 bits anyway, 32 bits was working before, but I'm running 64 bits, so I wanted it to work too. So basically, Silverlight 3 has Pixel Shaders, which take advantage of nice hardware that you have to dump stuff that you really want
29:02
to be fast and isn't at the moment. So we are implementing this, and I don't think I have updated driver, so it's probably, it's gonna be slow on the video, because this is an Nvidia, and I didn't update my VDPOW, whatever, but yeah, you can't hear it.
29:28
This is running with FFmpeg on the back, as the engine, not with the binaries. For what it's worth, I tried both on this machine. It's the same thing, same speeds.
29:40
It's, they're both working perfectly, so. Let's see if, so you can tell that it takes a bit of a hit as soon as Pixel Shaders go in, but then again, this code, this bit lands a week ago, so it's really not that optimized. But this is doing, this is,
30:03
this is happening live on, you can apply these, all these effects at runtime, because everything is described with XAML, and that's easy to just, you can just create XAML on the fly and just dump it. You can do all of this on runtime.
30:21
And you can do all of this in your application's desktop or on the web, basically. So you have everything available. And well, that's all the time I have for it, I think. I don't know, Q&A, questions? Kill me.
30:40
Has anyone already tried all the Pixel Shaders on any day, has he already tried running it on like, you know, a graphic driver, which is to support Guardian? I think so. I think, I don't know, but I think I'm the only one running Nvidia at the moment. Am I? Well, I'm sure. Actually, I think on Nvidia, you have Google,
31:01
which is already used, I'm pretty sure they're performing already well. I, there's like, there's, the drivers are too new. There's stuff that's not supported yet. So they, we want trunk or whatever. I'm sure I'm not running them. I'm sure I'm not running them, because when I, when I built stuff,
31:21
half of it complained that I wasn't high enough. So I'm sure this is slower than it should be. But yes, I think Riven is trying them with decent hardware, so. So, users who have got disabilities, sighted people, et cetera, with GTK apps, they've got less accessibility,
31:41
so it works fine. What happens when you've got the Moonlight? Moonlight, there's, the accessibility team is on the side, putting all the accessibility APIs on Moonlight to make sure everything goes on par. They actually blow us up a lot, because it's accessibility, it just pushes the limits a bit.
32:04
So they're, while we're working, they're working on the side to plug everything in, basically. In fact, what's funny is that, because of, you know, government requirements, or work in Moonlight, the size of the accessibility team for Moonlight alone is the same size as the Moonlight team that we have. So there's this whole other team,
32:22
inside and out, that just does accessibility. Exactly. They showed up from time to time with huge patches of accessibility to plug into the, our stuff, so, yes.
32:40
We, well, 64-bit problems is more of the disk code, which Riemann was working on 32-bits, and we needed a few tweaks, so we support all Linux and Unix-y platforms in general, and all major platforms.
33:00
None, I don't know what else, I'm not currently aware of what else we support. Well, yeah, we did support, yeah, Mac is, yes, exactly. It's just, we have, our focus is Linux and Unix at the moment. There's support for there, but it's,
33:21
there's not, lack of hands, basically.