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