WWDC2001 Session 503

Transcript

Kind: captions Language: en morning and welcome to the chaos here as you can see we've been frantically working to put all of these these demos together for you this session is is something that Steve Llewellyn and I had talked about sort of as a showcase to all of you folks are doing Java development as to what tools are available both from Apple side and from third-party side and we wanted to put this together I'll give you an agenda with who we're going to talk about today we've got obviously project builder will have Dave Ewing from the project builder team up here to demonstrate project builder I'm not going to talk too much just a little bit here this morning we've actually got Scott Adler from our Java team at Apple who'll be demoing on behalf of VM gear with a product optimized it will have Blake stone I'm sure some of you have already seen him in some of the earlier sessions demo demonstrating J builder and then we'll have some new things that I don't think have been seen anywhere hopefully from install actually from zero-g to products from them and then lastly we'll have Metro Works showing the latest advances with Java and their coda warrior product so with trying to put together all of those demonstrations and all the various machines we'll pray that the demo gods are with us today and everything goes off without a hitch so with that I'm gonna go ahead and bring debuting up to give you guys a demonstration we're just gonna have him walk through project builder and show you some of the great features that are Java specific with project builder so I was gonna take a long time here knowing that I was first and didn't have to worry about time but we've already started late so I guess I gotta get going here we go so you guys have all seen project builder here you're gonna see it more in lots of other sessions I'm sure so the thing to note is that project builder does a lot of stuff Java is just one of them I don't need to go through all this stuff that slide is actually similar to slides in lots of other sessions too so why would you use project builder to do Java well for one thing it's a full Java and integrated development environment Java is a full class citizen in project builder and another reason is that project builder from the beginning is supported all of the Mac OS 10 platform initiatives if you're building an application on Mac OS 10 even if it's a java application you can do it the right way and build it as a bundle another another thing you might use a Java in project builder for is to do cocoa development cocoa most of the time people think of objective-c with cocoa but actually Java is a very good way to do cocoa and with that you can use interface builder actually to build your UI even for Java not just for objective-c of course interface builder supports cocoa not swing so that's something to remember I know a lot of people get confused by that and the final thing I mentioned here is that if you have other source out there that's not Java a bunch of C source or C++ and you need to get to that too you can use the Java native interface to get to it and develop all that code in the same project together and with that I'm actually going to demo just that a J&I project here okay so I have this little demo project here it's actually very simple it just has one C source file and one Java file and if we look at the C source code it does some heavy duty math here it adds two numbers okay it's a demo right and if we go ahead and in that this will be built into a giant library of course go ahead and look at the Java source file Wow copyright Apple mm it's an old demo [Laughter] in the main class here calc engine it does a system load library on that Jane high library no big surprise if you do J and I and at the very bottom there's a main routine that guess what calls the native class so calls the native function there okay well let's take a little look at how the targets are actually set up for this we have one main target here that builds everything and underneath that it has some dependencies set up to the other targets the first one generates or compiles the Java sources and then there's a library that has to get built of course and I actually have a third target here that generates Java doc now project builder doesn't actually have integrated Java doc support in it but it's actually pretty easy to do that so we just have a shell script build phase in this particular target that calls out to do the Java doc not the prettiest but you know what you can do it and that's testament to the flexibility of project builder okay well let's go and look at the Java sources target this one's somewhat interesting I mean it builds the Java source file that's no big deal the one thing it does do at the end is it also has a shell script build phase and this one calls out to Java H now it's not really necessary to use Java H when you do j'ni libraries but it's a good idea because it allows you to keep your Java source code and your C source code in sync so that little C example that had it actually had add and multiply it had it out a few routines in it it just doesn't know it doesn't know how to just add you know if you got out of sync it that file really does include the dot H file that's used that's generated here by Java H okay and then the final target I want to show you is actually the building of the j'ni library not much here in the build phases all it does is compile that see source file no big deal if we look at the settings we see that it creates a file called Lib calc Engine J and I live that's what a J and I library looks like on Mac OS 10 the final interesting thing in this panel here down at the bottom when you're building a j'ni library you want to set the library style to bundle and then the other tab just to show you when we run this little demo here what we actually run is Java the executable up here that sits down inside the Java VM framework and we want to give it some arguments on the command line which give the class path to the jar file and the main name of the main class and another thing to look at here is you can actually choose which debugger you want to use in project builder so you can actually use gdb to debug the native code and that's using gdb underneath in here so you debug with the GUI and project builder or you can use the Java debugger and we're gonna use the Java debugger so I'm just gonna do a quick I've already built this project so at least I hope it's built it was yesterday [Laughter] ok so we stop here in the debugger standard pain to look at the variables for the local routine this particular stacks not very interesting just the main routine is on it we have a pop-up here to switch between threads and we can go to another thread the reference handler and up it's taking its time so I should have been patient I selected on something else so anyhow you can drill down into variables pretty standard stuff well let's go ahead and continue to that other breakpoint you can see in the council view up above or perhaps you can see that it printed out that first print line and we stopped it the second one that says the result is result and you can look in the variable pane and in fact you can change that result if you want okay so we now have a new result we can step and see that it printed out the new value it's a good thing we use J and I for this demo got the wrong answer didn't it and you know what that's about it that's all I need to show here I think you're going to see project builder in a lot of other places so let's save a little time and get on with the other folks so we'll go ahead and invite Scott Adler up Scott's going to talk a little bit about vm gear thanks a lot it's actually really fun for me to be up here to show optimize it the people from VM Gear couldn't be here and they came by we've been working with them to get all of their all the profiling information into our new VM and they came to Apple and work with us a little bit on getting up their product and it's really fun because I've been doing Java programming for about five years and this tool is really useful I don't know are there people on the audience who've used this tool a couple okay great so it's it's an excellent tool for taking your job application and just figuring out what's going on under the covers so here's a little overview of what optivisor does it's a good profiling solution you can also fix all of your performance issues now not all of them but you'll be able to find the hotspots and determine what's really going on so let's go to a little bit of what common java performance problems are now they're sort of are two different main areas of Java problems one is memory allocation that might take a while this has gotten a lot better in hotspot so sometimes it's really good to run through and optimize her to see what's what's actually happening how well hotspots taking care of this for you but there are things like the cost of your garbage collections whether you're allocating things in a tight loop sometimes hot spot takes care that really well for you sometimes there are other things that are going on so garbage collection is really are the big thing if you're somehow allocating a whole lot and you're hitting the top of your memory limit and the garbage collector is kicking in and you've got a multi-threaded application it's gonna stop all your threads because it has to go parse all these trees of relationships and then then as soon as it's done all your threads will be let go again so that you don't want to be garbage collecting a lot during your during your running of you know if you have a UI going or something the other thing is memory leaks and you know one of the promises of garbage collection is that you don't have memory leaks the problem is we still make mistakes we still do things like write a program where we have things that are listening to other objects so they're linked together and they end up in this complex chain and you do things like add actionlistener and you forget to remove actionlistener well that's just as bad as not calling delete so you you want to find your references you want to make sure that you're disconnecting things correctly when you delete objects and then the other big thing is unsuspected performance bottlenecks and that's actually huge because you don't want to sit down and necessarily architect your code for for ultimate performance when you don't know what your performance issues are obviously you know some big things but you don't want to go and write this like great tight algorithm that really isn't your bottle that can spend like three months on that and then realize well actually it's your drawing code that's bad so so that's really useful so you get to code you know code clean code all your objects really well and then find out what your hotspots are and then go jump into them and spend send your performance engineers after that so I'll run through a quick demo so what I have running here and number guest one what I should have here in a second we'll have it well I'll talk a little bit about it while we're waiting for it to come up what the way the way optimize it works is it actually puts in some hooks into your application so when you run your application normally you'd call you'd use mrj app builder or something like that but that would eventually call java and give it your your initial class starting path what you do with optimize it is you actually you instantiate their classes which then instantiate your classes so they put a couple hooks underneath you and and then what you that's one way to start it and then what you can do is you can connect to that remotely so what I have is I have this really mic mic and demo this is a little bit of swing set I took in here and just put some members of the team and and I put some sorting on here so we can just play with a little bit of performance things now this I ran just by just by calling the optimize it classes and then launching my class so now that this is up and running I can go to optimize it which I already started up just so it can be a little quicker and here's optimize its settings and this comes up when you start up optimize it you've got all these different settings I'm not sure if you can read these that well but there's application applets servlet and remote application so I'm doing the remote application version because it's pretty cool let's you start up your application separately from optimize it and it lets you then connect to it so right here I've got hostname which says local host this could be to machine deep profiling so if I didn't want optimize it to interfere with the profiling performance on the other machine I can set up another machine and just connect to it over the net so I also have here the source path set up to my source and you'll see a little more about that later so if I just attach to this program now optimize that will come up and what it first does is it connects to the program and let's get rid of my filter here and it shows us the where right here is what mode you're in and it shows us that we're in memory allocation profiler mode and we see all of the objects that have been allocated and this is since its booted up so since that this application started so we can see we have a ton of char array strings objects and all that stuff and this can be a little useful but you tend to be overwhelmed by this so you might want to jump down into things that are in your your code so I know that I have a class called sort something wait it's not sort it's called like tables something so here are all my table demo classes now if you know in this this has all my inner classes also which is kind of cool they're they're anonymous inner classes so they get these numbers if you know about how this works so I see that I have two table demos and I might want to say you know what what's going on why are these around where were they allocated so I can just double click on these and I can see that I had two table demos and this is really useful if you have hundreds thousands of things but it's showing me an allocation pathway to each object so I can go here and say okay I've got two instances one of them was instantiated here and I see oh this was done in swing set to pre load first demo and if I want to see you know what's actually going on there I just double click here and this brings up the optimize that source code viewer and I can see oh here's what it was it just made a new table demo and I want to see the other one and see you know why it is created in different places I can look down here and see that I've actually got through a different source path here it's processing an event which is processing in action events through a menu item so and I can see where's my action and my action is here inside of my menu bar that I made I had a new menu item so that's pretty useful for finding where your objects are the question is now let's look at let's go back to the main window so now I can do things like mark this whole thing with a mark current instance count which will put this line at the end of all my instances and it will show me the difference so now if I go back to my demo and I say new test window it's now creating a whole new test window and we should see a whole bunch of instances show up and what's what's interesting about this is that now I can look at just the things that have happened since I did that action and I know I only did that one thing and then I can write here is the garbage collector and this is the garbage collector isn't running very often because we don't really need to so I can click here and run the garbage collector and it should clean up a whole bunch of things so not all of them because obviously name color there are a whole bunch in there if we look down here table demo we should have we got two more of them I'm not sure exactly why so we could go try to find out where they came from and we can see that we see we've got all we've got four of them now I may only want to look at some others so I go back here and so I want to see just the allocations since I put my mark in so I say show allocations and I see that I had two allocations and that might be confusing to me why did I have two I only press new menu once so I can go through here and see that I had an action performed action performed swing set to and that was through my menu item and I also see that I'm loading in load demo so that to me says that I've got some error in my code I might I'm loading this twice for some reason when I have one menu item setting go track it down and fix it the other interesting thing is if you are trying to find why things are sitting around in memory you can go here to your your reference graph and this is the object I was just looking at and this is the table demo itself and these are all the references to the table demo and if you've ever tried to track these down using other tools it's really difficult because you don't know who whether they actually have their parent links and their their children links and how many listeners are connected and you get to see same thing all of their links here whose listeners of what and you can actually see who's adding them where they're actually adding listeners and things so this is an inner class which automatically gets a link you can go here and see that you actually look at the swing code itself and see how swing is creating links to item so they're a whole bunch of different ways you can track down links to other items one other thing I wanted to point out is that there's a little overview of your whole your whole VM and you can have this running in the background if you want and you can just sit here and say update when invisible and this will run the whole time you get to see like when you run the garbage collector you should see garbage collector activity cranked up and then back down right here are some threads whether they're active if I actually go to my demo and tell it to sort you should see I've threaded this little demo so you've got a thread right here that that appears and dissapears these are the current number of threads they actually have and usually there's just one your your event the guy's waiting for your events then you can also look at loading classes and see you can see what classes how many classes are loaded so if you have a dynamic loading application you can you should see that you don't load everything right at the beginning and then when you start getting to more parts of your application things get loaded so there's one other big portion of this which is the CPU profiler which is really cool and I'll be showing it at the Java performance demo that's 504 that's this afternoon it basically lets you profile the whole application and it's really useful but I don't have enough time to show it here today right now so come to the 504 and you can see a little more about this so let's go back to the slides so I just want to run over what the strengths are I've optimized it the biggest thing is that you basically can profile your java code without any read compiling all you do is you run it using the optimize it runtime basically it's really easy to configure it's easy to use I didn't show it exactly back here but when you I'm not gonna switch back but when when you first come up you have a whole option to launch it all from optimize it so if you don't want to launch it separately you can just launch it right there you can set up all your class paths and everything yeah and and then the other thing is that it's it's very scalable now you may not have noticed that during the demo but when I did things it didn't automatically load everything that came in so it wanted when I asked for object allocation graphs it would only load them as I needed them so it that's really important when you've got a giant like servlet runner that's has maybe you know 20 threads running with hundreds or thousands of objects you don't want to load all of your instance data all all right at the beginning you just want to look at the portions that you're interested in and if you're loading it all it might take forever so that's really important it's a really good feature and the other thing I want to mention about this just two quick things one is the the UI for optimize it is done in IFC I don't know if many of you know that but that's why it doesn't look like aqua so I encourage you to to encourage the other developers at VM gear to work on a swing version and also that this needs the 131 VM so it needs DP one it it needs to you need to activate the hotspot VM and there's information in the 131 released on how to do that the other thing is they haven't committed to a specific release date they've said fourth quarter so again send them email find out when they're going to have releases but it's an excellent tool we use it internally because we have tons of Java code our Java implementation has lots of Java code and we use it all the time engineer come into my office and we ran through some of our graphics code and found in 20 minutes found something that was slowing us down like 20 times so it's it's really useful so that's about it and here's the contact info for vm gear pretty much vm gear com it used to be intuitive if you used optimize it before thank you Scott next I want to go ahead and bring up Blake stone from Borland and he's gonna give us another exciting demonstration Forge a builder and then you've got a session later on tomorrow is it today today five o'clock it's so many sessions I can't remember so okay Thank You Alan I'm just gonna jump into a couple of slides here so we'll quickly run through those and then we'll jump in and do a little bit of demonstration I have to try to juggle some things so you see some some cool things during the java address yesterday we'll show you a couple of interesting things here but we'll save a lot of the really good stuff for the session at 5 o'clock so if you want to see a lot of the new features of jbuilder 5 if you want to see things specific to web development xml development will defer those to the 5 o'clock session and we'll focus on some of the basics of java development here I wanted to talk a little bit about specifically of course chaebol there 5 for Mac OS 10 the real focus of this product is not on sale ability marketability buzzword compliance but on extreme productivity we are Java developers ourselves jbuilder is written entirely in Java so day by day we find out what makes us more productive and we improve the tool to make you more productive as Java developers so rapid coding individual development our big focus and we'll look at that a little bit integrated debugging and having just a state-of-the-art debugger that takes advantage of everything that we can get from the VM is a big piece of what we do and of course JDK 1.3.1 is an important piece of the debugging story so that's that under way and of course you'll have a developer preview of that shortly they're supporting therefore javabeans based development database development XML JSP a lot of the really big things that our customers told us were important to them and that we see we need internally to manage our own systems are things we've put into jbuilder so it really covers a very broad spectrum of what the pure java developer is really interested in that's our primary focus is people doing pure Java development the product again is really written entirely in Java we have a tiny little stub that gets us launched gets that the VM kicked off but then the product is Java and winds up being a wonderful torture test for apples so we've been working very closely with Apple to make sure that this enormous application works well on their VM and really is testament to the hard work they've done that it works because jbuilder has more classes in it then the whole JDK does so we are not a small app but we've done some work to specifically tailor it for mac OS 10 so I'll showcase a little bit of that as well yes it's the same source codes that we use elsewhere but we like to make sure that it really looks nice and works well in the Aqua look and feel and added some features specifically for Macintosh users where should I be aiming this there we go feeding the Macintosh spirit was a critical sort of key theme for us we don't need to produce a product that is some port some popular UNIX thing that you guys happen to get access to and should be happy about it instead we want you to really feel like this is something that is the way Macintosh users would have done it in the first place because you guys have a fantastic platform to work on and you really deserve the best tools possible so yeah it's nice that you have the best-selling Java IDE forthcoming for Mac OS 10 and we win tons of awards on that basis but this is not sort of a stepchild of Tabler on other platforms in a lot of ways we showcased of course at a technology preview last year Jabil therefore well what we're showcasing this year is jbuilder 5 which we announced last week so this isn't a long porting process here this is something we're keeping right up to date on we are trying our very best to get to point where all the technologies are in place to release this and to give you the full product that you see elsewhere a world-class product that really takes advantage of the platform it's been interesting that J builder on Mac os10 has been very tightly connected to WWDC I've been happy to be here three years in a row now the first year I was here just talking to people seeing you know his Java really important to Apple is this something you'd be interested in and talking to a lot of you to say you know do you remember Borland from the days when we had Macintosh products and you know would you be excited about something like jbuilder and we were told the resounding ly yes job was important to the future of Apple just wait there would be cool things happening and of course the Java 2 announcement was in the works at at that point and so we started doing a little bit of work in I guess the spring of last year to bring a tech demo last year now the tech demo was obviously really early we're running on a pre-release vm that's running on a pre-release operating system a good year ahead of when it would really be ready for primetime so we were happy to be able to get that level but here of course we've given you all preview CDs you have a CD in your bag that will let you look at jbuilder and please please PLEASE pull the updated VM before you consider what the performance and stability is like the updated VM should improve things dramatically over the one that shipped with Mac OS 10 our support from Apple has been phenomenal of course Mac OS 10 itself provides a phenomenal foundation for Java 2 without the the robust multitasking symmetric multiprocessing multi-threaded environment that Mac OS 10 is Java 2 would be enormous ly difficult to put on the Macintosh but Apple's enthusiasm and partnership has been a big piece of this and a really key piece for us is jdk 1.3.1 a lot of people have asked when are you going to ship what's holding you and the answer really is that jdk one 3o through no fault of apples has some pretty enormous debugging issues and Apple is working hard at integrating a lot of the fixes for those in 1.3.1 and when that releases available that's when jbuilder really starts counting down to release so we're looking forward to getting there as fast as we possibly can but this is the missing piece this is also of course what you will get with the update the Developer Preview release so with that let's just launch in and do a little bit of a demo I didn't want to spend a lot of time on this but if we can bring up demo to here I did want to showcase some of what I think is particularly exciting about J builder not just the nifty aqua icon J builder itself again is is really focused on developers so rather than spending time hiding your code from you we really spend a lot of time focusing on what we can do to make your coding environment especially effective so if you go into an arbitrary example and open a piece of source code the source code takes up the majority of your screen but we spent a lot of time finding ways to add value to the source code editor that we have the source code editor provides of course the usual features you'd expect elsewhere the ability to indent a none indent blocks of code the ability to undo an infinite number of steps and redo an infinite number of steps so just a high productivity editing environment but a high productivity editing environment with keystrokes you're not comfortable with wouldn't be all that useful I will apologize I'm using the keystrokes my my mind is trained to to use here but we do provide two sets of key bindings specific to Macintosh customers the Macintosh key bindings will use sort of a classical more of a project builder text edit type set of keystrokes whereas for those of you who are familiar with BB edit code warrior what have you we've also implemented those key bindings and you can even go in and customize them so if we've missed out on some of your favorites you can go in and tailor those key bindings to your need it's okay that gets us productive right away in doing things in the editor see if we can get that back to where it was but also we wanted to provide really rapid browsing mechanisms so we provide a structural overview of your file here that says you have a class that has all of these members that you can quickly get to but also that's dynamically updated so as I define a new class you can see that that new class simply shows up as I go ahead and add members to it then they'll show up and this is tracked in real time as you're coding so I'm gonna set a really low delay we normally keep this delay higher to avoid driving you nuts with all the flickering going on but as I type you can see that we're actually able to parse the source code and keep that up to date so not only do we know about the members and so forth but in order to figure out what the members are we need to know whether your code is actually syntactically correct and whenever you have something that is an illegal piece of code that doesn't follow the Java syntax rules we can show you why where that problem is and help you get to it immediately rather than having to go through a compile cycle to find that kind of thing so that's all pretty cool but it helps you at sort of the Java syntactic level and that's one part of the Java programming puzzle the other major part of the puzzle are the libraries they're huge there are an enormous number of Java classes available there are probably more classes being introduced every day than you can possibly learn in that day so what you need are tools that help you with these things and that's what we've provided here we've provided technology which we call code insight that allows me to say you know if I'd like to create a new jbutton then what are the possible constructors well there are constructors that take these various parameters I need to pass an icon or an action or what have you and let's say I want to go ahead and and use something from the current scope I can also get a list of things that are available in the current scope so if I want to pass a string that I already have declared let's come up here and create a string food that contains some information and I don't remember the name of my local variable or I've used an extremely long local variable name then our codeinsight can assist you for example if I had this is my variable name then I can just select it from a list by typing the first couple of characters and we get the rest so that that technology exists for browsing class names for finding out about parameter types for finding out about parameter names as well you'll note that you get not just that this takes a string and an icon but the string text and the icon icon perhaps most importantly for the codeinsight technology it's completely dynamic it's not hard-coded to understand particularly EK classes but it understands any class you could possibly throw at it so for example if I come in and I say I'd like to create a new compal it says well here are the sub packages in kampala this at all I just know that there's some classes out there and I can browse them excuse me and I go and look for completely unprepared here class and we'll see what constructors are there and it turns out it's actually an interface so there are no constructors but that's interesting in itself if it's an interface does it have any interesting constants or static members sure so we can browse and discover all the stuff on the fly we can discover it so completely on the fly that if I were to go ahead and declare right now my class foo with a public void bar method and to come down here and create a new foo and go to invoke methods look he shows up all right so we're parsing and analyzing all of your code on the fly all the time and that's a really key piece the one other thing that I wanted to demonstrate really briefly because I'm assuming I'm eating into other people's time if I don't stop this quickly is the visual design aspect because if you're doing raw coding for swing it can take a long time to figure out how to get the effect you want but if you can just drag and drop components you can get there really rapidly so we provide a way of visually designing something that I can say I'd like a button here I'd like a textfield here I would like a scrolling region with mmm say a tree in it here and what we do behind the scenes is write the source code that you would have had to write in order to accomplish that so you see here in JB in it we have all the constructors and things that do set text here we go for example on the button J button one but what's really unique to Jabil this approach is what we call two-way tools we aren't just generating code for you the code is the complete repository of our knowledge about the design so if I go and actually change the code or do something really torturous like actually put an expression in there and flip back to design we'll go and actually have a look at your code and reproduce what you've got so I hope that's enough to get you intrigued we'll be in the Civic at five o'clock and you know I'm certainly welcome to all of you there will hopefully have time to answer questions there which we probably won't run into at this session so thank you very much Alan and we'll see you later okay next we want to bring up zero-g we've got Erik and Michael and you've got the clicker learn everybody my name is Michael Acosta and I'm the lead architect for install anywhere I'm here with Eric Shapiro who is our founder of zero-g and we're really excited to be here one because we finally got our demo working not 15 minutes ago but also because you've seen a lot of products here that are helping you to develop your java applications once you're done developing your java applications and you're going to need to keep them updated maintained and configured on the machines that's what zero-g provides and Eric's got some slides can we get the slides back up here and I think your mic it might not be working there so okay so what we're gonna do here you're just gonna have to talk really loud so I'm sure you can do that where we're going to do here is we're going to show you a bunch of different things we've been in doing Java development now for about five years we've been partners with Apple during that entire time focusing in on after you have completed your applications after you've written them using any of the great tools out there some of the stuff that we've just seen some of the stuff we're going to see what do you do next you want to get it out to your users you need to create great installer for that and we've got two products one that some of you may have seen before which is install anywhere another product called power update which we're introducing here for and showing this on Mac OS 10 we've been supporting Mac OS 9 and other platforms for the last several years so the first thing I want to do is talk a little bit about install anywhere install anywhere allows you to create a single installer an installer that's entirely Java based and allows you to run that installation installing your application on any java platform we've supported the Mac OS for a while we support Windows Linux Solaris hp-ux AIX all across the board pretty much anything you want to do with a single installer that gives you the same look and feel across all the platforms now I say look and feel and really what I'm saying here is feel because we're gonna show you in just a minute here is how on the Macintosh it's incredibly important for us to have the look that people expect the Aqua looks we're going to show you that in addition to that is a technology that's part of installing we're called launch anywhere and as many of you know it's incredibly difficult to convince your users how to run your java applications you may have developed on a Macintosh you don't have a command line if you're using Mac OS 9 you do have a command line when you're using Mac OS 10 but your Windows users have command lines and batch files and your Solaris users have those as well and so what are they going to do well our technology which is called launch anywhere allows you to go ahead and create a single launcher technology that allows your users to double-click the application just by clicking on an icon now the other thing that we're going to be talking about here is a little bit about the architecture here is about what you can do with install anywhere install anywhere can build you an installer which can run from a cd-rom or you can put on to a deployment server onto a web server and you can do web installs we're going to show you a little bit about that today you allows you to do installations right from the web browser we don't have that working today with Mac OS 10 but it will as soon as we get the new release that Blake was talking about just a little while ago as well and so everybody will get that support as well now power update is a new thing that a lot of people out there have said ok installations great but I get to keep my software updated how do I do that well apples got a great technology software update but it's not available to third parties and what power update does for you is it gives you the ability to add software updating live updating to your applications not just Java applications any kind of application at all in fact the focus of install anywhere with our new release that's coming out is that you can install native applications on Mac OS 10 and you can add power update to it and you can get the live updating functionality that you would expect to get from software update as an example the power update architecture is a little bit more intense to install anywhere in the sense that it does require a server component power update server which is where you get your software updates from and there's a management aspect to that as well so you can say here's the versions that I've got here's the versions that I want my users to have etc now a real challenge for us has been as we've been focusing on the great look and feel and trying to make sure that all this stuff looks great on the Macintosh well one of the things that we wanted to do very important for us is to show how great the Macintosh platform is as a Java server platform and in fact we'll be running the power update server on our Mac OS 10 machines up here and then say a j2ee application that's got the complete software stack running a java web server running a database running the the JSP s and servlets and all the connections and the reporting modules and all that and we're running that up here as well and enough of me talking let's go ahead into a demo and what we're going to do here is we're gonna do a side by side demo because this is really a combination of both a developer tool and a end user experience and again it's really important for us to be having that end user experience so what we have here that you'll see on the screen is two different things on your left-hand side is the end user experience this is what your customers will see on the right hand side is the experience of what you as the software developer will see and we're going to tag-team our demos here and I'm gonna let Michael go ahead and take over first if you could look over there while I log us into the developer system on this side ok can you guys hear me yeah ok good ok what we have right here is an Internet Explorer a web page in this web page when you actually build your installers for the various platforms is automatically generated and right where you see this right here this is where the applet would typically be what the applet allows you to do is actually start the installation from the web what that does is it'll download it it will fire it right off so all they have to do is click on the button and get ready to go alternatively we list all the different platforms that you've built for and they can just download it directly so say they want to get something for another platform and then just put it on a central server so they can go ahead distributed among the corporation that's fine as well but I've already downloaded one got one ready to go so I'm just going to go ahead and start that for you when we go ahead and quit those guys so that we don't get it confused with the Installer that runs that runs in the webpage okay okay okay okay and this is the Installer this is the icon we put a lot of effort into making sure that the Aqua look and feel because this is going out to your end-users but the Aqua look and feel is fully supported in our installer so the sellers coming up gives you a quick splash screen and this is fully configurable also one of the advantages is as well because Mac os10 supports so many different languages and internationalized support we also support that as well when it first comes up it senses what load count your system is running on and defaults to that but it also gives you the opportunity to run it under any of the locales that you wish so go ahead and hit that and it's loading up the installer now as Michael is doing that over there what I'm going to do is I'm going to switch over to this side here and show you what install anywhere the designer environment looks like so on on this screen over here what you're seeing is again the full java application uses swing it has a little bit of a different color scheme that we put in to install anywhere and allows you to control basically all the aspects of the installer in a visual environment so as Michael is going through the different step panel zuv the installer on that screen over here I have this little step over here that set the what we call it task pre install and I will actually see the exact same panels here in a visual representation of what my installer is going to look like okay so if you look at this you'll see for the most part we've mimicked as closely as possible the actual Apple installer they're going to have a lot of different installers available for OS 10 Apple provides installers on App which is the default and use for a lot of their system software you want a very consistent and clean interface and I believe that right now we are the only application that mimics it as closely as to match apples installer so this is the introduction and we'll go ahead and go to the next now why would we want to go ahead and use install anywhere versus Apple's installer well the advantages of using install anywhere is one I mean almost everyone here I'm sure a Java developer so yes we definitely want to target Mac OS 10 because it's one of the it's going to be one of the best Java platforms especially because it's pre-installed you know what versions there and you're confident of that but you also are making your Java applications there's a reason that you that you've chose Java and that reason is you can take it across to multiple platforms when you build an install anywhere you can build the Installer simultaneously for all platforms and you get the native look and feel of each platform actually one of the advantages right here is we're running a look and feel that actually mimics the Aqua look and feel installed it on App very closely but as Eric will show you shortly this is actually skinnable you could brand your installer almost any way that you wanted what I can do is I can actually show that right now if you'd like to see that we have a step on here called panel look and feel I can change the installer background image and just by clicking preview here I can see what that image is gonna look like we have the demo going here with the Mac OS 10 look and feel you can put anything you want in there so if you wanted to quit the jbuilder background image on there if you wanted to put the Metro Works background image on there for your installer you could do that as well okay so we have additional steps as well I'm going to kind of walk through this relatively quickly it's and with all of our file choosers etc use the native look and feel so it's exactly what the end-user would expect one of the options as well that we're supporting that we haven't seen anywhere else is yet it's the ability to install one of your aliases directly into the doc this is a little bit experimental at the moment we're going to try it anyways and see how this works out and finally I'm comment on a lot of platforms and you have the option to choose is the ability to give a pre install summary and actually if you switch over to the pre install summary we have a lot of different information that you can provide to the user during the pre install summary these are the defaults that are chosen right now now before you go and click the install I'm sure a lot of people are saying okay this looks great what about installing just Mac applications so we've been focusing in on install anywhere over the last several years as being the premier multi platform deployment solution but with this new release that we have here is going to be the premier installer solution for Mac OS 10 native applications as well and one of the things that you want to do is considering how the Mac OS 10 installer the built-in one works with the looking field we've been talking about what if you want to do things like the custom panels or the custom actions or have rules or certain things that go on during your installer when you need to go into a more advanced more complex type of installation that's when you would choose something like install anywhere excellent also one of the things to remember each one of us here are probably Java developers and almost on any other platform we are Java developers people ask you you know are you a native developer or Java developer on Mac OS 10 if you're a Java developer you are a native developer it is one of the native API that's supported on the platform this is basically on Mac OS 10 a native install solution and will be one of the better install solutions available so let's go ahead and fire off the installation you can see it gives you a feedback as to what's actually going on has the proc WA progress bar but you can also use billboards and you can see there's one right here you can have multiple billboards which will be time sliced as the installation progresses well don't miss it the docs just disappeared and reloaded there and there we go we got office suite installed into the dock now what Michael just did there is the full installation talking about what we have installed but it's important how you represent what that is and so a lot of us in the Macintosh would like to see a representation of your files and where they're gonna be so again over here what we see is on our install tab we have a representation of what your files will look like on the end-user system this is really important because if you don't know what that end-user is gonna have you don't know what their directory structure is like you don't know where their home folders are you don't know if they're on a Solaris machine a Windows machine or of course a Macintosh and so what you want to do is you want to set up your installer in a way where you're referring to things in a magical way in a way where it determines what those folders are at runtime at install time we happen to call those things magic folders so as you can see here we have a bunch of files that we're installing if you choose to take a file or a folder and you want to put it into a different location you have this selection of all these different magic folders available to you including ones for the Macintosh including one specifically for other platforms like UNIX platforms or as you can see here we have some of the Windows platform locations on there as well or if you choose those here at the top these are ones that are platform-independent so if you choose the desktop location it will figure that out for whatever platform you're on Mac OS classic Mac OS 10 Windows what-have-you and if we talk about things like shortcuts or program folders what those are is we call them aliases units people call them symbolic links but basically what you can do is you can specify you can say I want to install my shortcuts into wherever the default location is for that operating system so when I go ahead over here to my platforms tab I can see that for instance here for Windows we have the default location for shortcuts go into the programs menu but on Mac OS the default alias location is on the desktop now you can choose this independently for each platform one additional thing as before we go back to Michael here is the idea that you do sometimes have files as we all know even Java applications occasionally have something that you might need to add in which is platform specific maybe it's a runtime library or it's some kind of a launcher or something like we talked about before well I can take any file here and I can add a rule to it by simply saying clicking on the rules tab here saying check platform now if I only want that application to install on Mac OS and Mac OS 10 I do that and now this file here will only install on those platforms allowing you to build again one single installer which will run on all platforms for all languages around the world so let's go ahead I'm going to show you one more thing over here I'm doing it right here because I actually want to point out one thing the interesting thing about developing with installing we're what makes it so easy is when you do add your files in it's basically a what-you-see-is-what-you-get type of environment and that's why I've switched over here to the list view if you look at the two views you'll see that although some things might be out of order because of the orderings of the sorting what-you-see-is-what-you-get they're basically the exact same if you drop down come you'll see they look exactly the same in between and that's really important so that you know that it's going to be laid out in the designer is exact what you're gonna get on the on the destination system great now we also talked about the idea that you can build this single installer for all platforms and as we know the premier platform out there has Java included with it but not all platforms out there are as well full-featured let's say as Mac OS 10 so on some of those other platforms what you might need to do is bundle a java virtual machine so if I click on my build screen here I'll see a list of platforms with the option for you to include a java virtual machine of course not necessary for Mac OS 10 but for these other platforms you might want to say that I have I like to chill I'd like to select a java virtual machine which will be used for my installer and for my application we call these VM packs and install anywhere is the only solution for these platforms which allows you to install the java vm run your installer and do all that from an uninstalled java virtual machine basically meaning you don't have to bootstrap it you don't have to worry about your users if they have java installed or not install anywhere it takes care of all those details automatically for you now let's go back over to this side here and we've done in office week I'd like everybody to see could you run off a suite and just so we can see what kind of a an interesting se classic version we have there absolutely I do want to point out two things before you go to that you do have the opportunity to provide an install log for the end user which you can do in plain text or XML and something that's a little unusual on Mac OS you automatically get if you desire it an uninstaller so that once if they choose for some reason unbeknownst to you that they need to take your application off the system that's supported and it will remove everything that was installed let's go ahead and launch office suite it is a java application as you see it has a launcher this launcher was actually created automatically through install anywhere and we would have created a platform dependent launcher on whatever platform you're installing to on Mac OS it actually uses a mrj app builder derivative so we go ahead and we're at version 9.1 and you see it comes up and it's got a very classic look and feel and I as a Mac OS 10 user I'm just not very happy about that so I've contacted my vendor and I'm the vendor so I happen to have added power updates to the application now on the screen over here what we're seeing is the power update management portal this is the developer portal this is what you use to keep track of your applications so I see over here on what is called the products overview page this this is the power update page I see a product that I'm managing using Power update and I've added a number of different versions here this version number 1010 point O is the one that is current it's the newest one that's out there now I have said that that's the newest one but Michael has installed a previous version maybe from from cd-rom or wherever he got that from we're gonna show in just a second how we can get him upgraded to update to the new version before I do that again want to point out to you that what this is running on the the way that you control this is through a web browser it is in the interface for managing power update is all done through the web and the server is a Java based server that we're also running on this machine here it's entirely can run that machine without a problem now you may be wondering well how can I try this out and how can I actually get going with this because I don't want to have to set up the server well you can also use Power update through our hosted site which allows you to do it without having to set the server where we manage this for you you still use the interface but we run that for you now don't check for updates yet well you can I'll just tell you don't have an update yet but I'm gonna go ahead and here and I'm going to take version 10 and show you what we're going to do now you wouldn't see this but a developer would see this I have in here information about what that new version is I've identified the new version with a name this is can be anything you want does not have to be a version number I can go ahead and specify some information about that version this will be displayed to your users when they check for updates if there is an update before they get their update so maybe you'd like to actually tell them what that new fee the new features are so one of the things I'm sure he's gonna be happy about is that we've added a new aqua look and feel to this so we'll get that in a second now install any power update uses something called a sequence number that's how you keep track of what the version is that's live or the next version sequence number is a real number a decimal number it's just basically you can it doesn't even have to match to your version numbers in this case we have matches the same thing and you have a bunch of different types of updates that you can do we can do things like install a single file you can update several files which are packaged into zip and with support coming for full the old style Mac files the resource files and etc will be coming as well or you can run an executable why would you want to do that in the event for instance that you want to reconfigure your application or add an entirely new feature the next section here is where can I go and get those updates from this one here it says where am I going to go and deliver those updates to to the end user and is that version live now I've already made this version live here so let's go back to our overview and we'll see that that version is live version 10 and user could you please go check for updates excellent so it's a very clean simple interface there's actually several different interface to see you can do you can actually hook up a power update directly into your application and run it silently in the background every time you launch your application for instance or as we do in install anywhere you can add a check for updates pull down menu so what I'm going to do is I'm going to go ahead and connect to the server it's giving me feedback as to what's going on oh sorry and there is a new version of office suite available with aqua excellent click Next and it's been successfully updated so if I go back and I launch office suite and see if this has worked excellent macro stuff excellent and lo and behold we've given you a little surprise we also update your status your your your toolbar there with a new awkward-looking field for office week for those of you wondering office suite is just a demo application it actually is not a real product but if you try and stall anywhere it does come with it so you can play around with the with doing that okay so that's our demo I did want to leave you with one thing a final thought I'm actually not going to be able to do it because it's licensed oh well yet oh well you won't be able to show the Easter Egg Easter egg I had written especially for this but if you stop by our booth we will be giving demos we're here until the end of the day today and in addition I'm you can get more information in our website wwm [Applause] I'm gonna go ahead and invite Metro works up here and give you a demo of the latest code warrior tools [Applause] I'm very cool potty and Serge Bertram we are the Java team in metal works as everybody knows 95% of the people off on Macintosh are code warriors and we would like to actually have the job of supporting core warrior as much as we can but in the previous release of core afraid Java when we released it we had public beta and then we made you that but the previous version of Java 6.0 doesn't all the support is not there on OSX so what we have here in early access is all the Java support functionality on a stamp so all the Java rod stuff we got it working on 10 and the Java debugger performance is much improved now so you know it's it's far better than what we had in OS 9 so there are a lot of improvements in the early access and search will go through this for detailed technical details and he will go to a big demo so as we have last time ok hello my name is Musa I'm working for matrix as software engineer I've been working in the rachels and the ID over the past few months I'm gonna show you the new rad tools that we have running on OS 10 I'm gonna I'm gonna go quite quick on the the slides because we don't have much time left but basically the new Rachel's are very big improvement over the tools that we had on OS 92 and understand so you can expect much better at the back in time and full Java to support we have a full suit of developing tools including a text editor debugger compilers file compare tools a class browser that I'm going to show you right now okay okay so this this demo you're gonna have to use the Java DP one update for being able to run it and unfortunately you're gonna have to grab a patch a Java patch from the Metalworks websites with the access city that we just got in the in the bag because we've been doing few few last-minute fixes to make this run okay so I'm gonna show you a little autorad demo so we've been adjusting for aqua all the winter x ide and how many of you guys have been using the metrics tools for developing before okay so yeah I think most of you guys already know how it works so I have this layout editor here and what I did for this little demo is I built a jar file with the Java 2d demo from Sun so I just built the jar file and I included the jar file and the component catalog here so when I click on it and it listed all the files all the classes that and including the layout editor so so for example if I drag any of them it may do something useful and may do something not as useful depending of what the classes really does like does so this is run at runtime so the commode has the opportunity to do whatever it wants so what I'm gonna do for this demo I'm gonna use a jar file that a class that I will do you know which is called rotated free and edit it right here and then I set the name of it to for example Jimbo and okay drag a button here and the label of it I got it put start and another button which gonna be stopped and I'm gonna have two lines of code from working the making this demo work and the action perform of this component I will say Jimbo start and this guy I'm gonna do to go stop so that's pretty much all of it and I'm gonna run it so the core wires generate automatically the jar file and it creates automatically the mrj ab build your application in the finder so it can be double click automatically so here I have the debugging window so I can put breakpoints and good I can put breakpoint in the source file yep so the job application starts and we are using the terminal application for running the job application so if you have a console application and you want to put some user input from the console you actually do it from the actual terminal so you have the exact same feedback that you would run it through the terminal and so I can step here and as you can see this kind of performance were just a dream on the OS 9 and came just for free understood OS 10 and there's the little demo so I can put start and stop and start there it is so inside our tools we have we have the class browser which is very useful especially for Java Java code so you can inspect all your your classes and all the methods for theirs in it so you can for example it it just a simple method and it you don't have to give you all your your source file at the same time you can just inspect a small portion of it and there's a little wizard that you can use to add actually a new big method or add a class to it so it's all done automatically and all generated source or source code for it there's also all the usual courrier tools that you can find in it and you can use for java there's the file compare tools that is very useful and actually some of our customers are using I've been told are using or Java tools only for the file compare functionality of it so I can show you a little bit what it does just to put evil modification in it so it can breaks and yep I just like or open I can compare directories or I can compare files and shows the modification and I can merge them a lot like that so it's very convenient also we you can build directly Jana application within code or if you have the signal source tools with the same environment you have your design application here that you can inspect all the classes and basically that's we are who has 15 minutes 15 seconds left and that was already mo for today we will have a presentation at the Civic Center so if you can come by and see your presentation with our zero that will give you more information about you Jules thank you you