---
title: WWDC2003 Session 000
framework: wwdc
role: article
path: wwdc/wwdc2003-000
---

# WWDC2003 Session 000

## Transcript

Kind: captions Language: en [Music] [Applause] good afternoon in the history of the Macintosh operating system there are some defining moments one of those moments was of course 1984 with the release of the first Macintosh I'm sure everyone here is really fond of that little black and white screen if you look carefully you'll see all the sizes for folders I express for disk sizes I expressed in kilobytes we've gone quite a ways over the last two decades now there's another moment that's very dear to my heart which is 2001 when we released the first version of Mac OS 10 version 10.2 it already had all the elements you are now familiar with the aqua user interface and the strong unix underpinnings the reception has been fantastic from our users and from you who have brought thousands of applications to the platform so we felt it was time last year at the Developers Conference to symbolically burry Mac OS 9 and that meant that for development purposes Mac OS 9 life was over it was time to move on to 10 and a few months after the Developers Conference last year we released Jaguar which was probably the most or one of the most successful arrest releases Apple has ever had in its history there were lots of features in Jaguar some were brand new revolutionary features and some were just evolution were committed to constantly improving all our components so now we're moving towards Panther so what's in store for Panther I add a little bit of a challenge preparing for this presentation because there are so many features in Panther pretty much every you look every component has been opened and we've added features there so I thought hmm maybe I could draw an analogy and I chose for the analogy the Apple music store that we introduced two months ago and that has been widely successful why is the music store because it has the same wealth lots of songs wherever you go your brass and you listen to a song and it's it's just wonderful and hopefully you will buy a few along the way now of course I'm not going to talk about songs here I'm not going to talk about the top songs also top albums I'm going to talk about features and there's of course user features and you got to test this morning in Steve's keynote but I know that you all came here to the Developers Conference to hear about the developer features all the features that help you for your development for your application and so the first category of feature I chose to talk about is mobility why mobility because we all like to roam [Music] now the basics of mobility of course is great portables and we are happy because we have the best portables in the industry we introduced at the beginning of the year the 12 inches 17-inch fantastic portables but of course what you're interested more is what's inside those things so this is an x-ray this is what's really inside one of those portables so if you notice at the top of that x-rays is kind of funny-looking bent piece of metal that's the antenna we've been of course the leaders in wireless technology first with 802 11 be the airport 11 mega mega bits of course and more recently at the beginning of the year with 802 11 G which goes to 54 mega bit that's what we call export X Airport extreme we are also adding for Panther 802 1x now the whole naming of those things is a little confusing at all those bizarre letters that are added after numbers L 2 when X is actually not just wireless protocol it's an authentication protocol that can be used for all networking and this is where we put it into the system at the place where it should be so that all networking can leverage 802 when X ok so let's go back to that picture of the portable and let's focus on the modem port and the Ethernet port and the antenna again all those things together or networking ports so networking is a big focus of what we do there's a lot of resources that go into doing networking right and that's really hard because networking is fundamentally very hard there's a joke that networking is only one letter away from not working and that's really true and when you do the rehearsals for Vishu and you have all kinds of networking problems the rattles Attucks the rest of you realize networking is really really hard so because it's so hard we make it a system service so that if your application is a document-centric application it should not have any networking code we do the networking code so we have a number of new features in Panvel that your application can leverage we adding ipv6 IP SEC and based on IPSec we're adding VPN that I'm sure a lot of you who in corporate environments will will enjoy 802 NX I already mentioned and something that your application may actually want to use is what we call the advanced reach ability API let's say your application depends on the server out there and one way to to make sure that the service you depend on is there is to ask every every second every minute you just poll and ask this is terrible this is polling this is really bad for a number of reasons so what we have provided is rich ability API where you can say hey I'm interested in this server call me back when the reachability change whether the server becomes reachable or not reachable and one thing which is fantastic is that we know exactly as a reach ability because we are working on the lowest layer here so I already mentioned that that working is hard and this is BSD networking at the lowest level is very tricky and so what we did is we put a layer on top of the role BSD networking that we call CF network that abstract some of the difficulty away and it's an abstraction to support a number of protocols circles DNS all the common protocols that you use in your application it's also a layer that really meshes well with your application because all the data types are to use in your application as a same data types that are provided by CF network so you have a bag of byte you have a string and also it meshes with the event group so run loop of your application so see all the events coming from safe network addressed events that all get merged together in this run loop and that get redistributed to wherever you want in your application we added some new functionality for CF network in Panther we have a new host concept and that's where you can do dns lookups all a synchronous and that's also where the reach ability plugs in so CF network is definitely easier it's also fast now why do I say fast well we use it okay we use it in key applications that are fast and if you look for example at Safari the speed derives from the rendering engine of course but also from very fast networking all the networking in Safari is done with CF network that's how we make sure that what we do is really good and all the other applications presented here do you see F network okay so let's go back to that picture and let's focus on another interesting rectangle down there and that's the hard drive that's a storage for your computer now with mobility you have new problems with your storage the first problems that you have is disconnecting because let's say you access the server an NFS server an SMB server and FP server now you close the lid and move to another location you may not have access to the servers so what we are doing in Pantera is putting some effort into filesystem mobility to facilitate disconnection and reconnection so the AFP is the DFP client is now reconnecting when you move to another locale now in an industry-first our NFS also supports mobility this is for all of you who have been using NFS this is really industry first and you usually when you connect with an NFS that you start ok you move to another location without service not accessible you have spinning wheel forever so another problems that you have with mobility and storage is that you are going to evolve the storage on your computer you are going to work on a number of documents that you have locally now at some point you want to bring those documents back to the rest of the world and so you have this thinking problem now this goes both ways the rest of the world also evolves and you may have some caches of the rest of the world or some documents from the rest of the world and they're still as when you reconnect after your airplane travel so that's why we have over the last year developed new syncing technologies to help this mobility story to help the whole mobility program area so we started at the end of last year with addresses syncing calendar information syncing we added just a few weeks ago bookmarks bookmarks syncing for those of you who are who have that Mac and have several computers now you can keep the bookmarks on these computers the same it's really a lifesaver for me now I'm new in pant fur and this was touch upon this morning we're adding file syncing with the eye disk syncing that enables you to keep the IDS the same on all your computers ok so let's go back to that picture and this those bizarre cylinders down there what are they well those are all the weights that you carry when you carry your portable is that when most of the masses we enter land of physics here that's your energy source so there's an interesting equation this is the biggest equation I have in the presentation by the way I won't go any further than that which says that if you compute more you consume more energy any registered transfer that you do is going to eat a little bit as that battery so so the more you compute so more battery you eat the more energy you consume the same thing goes with the frequencies actually roughly wherever the frequency so if you compute very fast you are going to consume a lot more of that battery than if you compute slowly so what can we do about that well if you look at that frequency term first the first thing that we can do is slow down the OS when it's not needed to go very fast and so we do that okay in we have this low power mode where we just don't consume too much energy and we slow down the processor we power step back now let's look at the over term that's the computation and of course you want to get rid of all unneeded computation now that's sometimes some computations as I need it for example polling to have that server to know whether that server is online or not that's not needed you can use a reachability API to avoid that computation so to summarize how to save that battery you should minimize the computation be even driven and above all no polling okay so there's a number of recipes here to have to be a great citizen for mobility and you should adopt all the system services that we provide at the lowest level at the lowest layer for system networking you should use api's like the rich ability api if that applies you can program at a higher level using CF network you can performance tune by having things more synchronous more even driven more on demand you can use spreading because we have a modern operating systems that support threading in the networking intrinsically and you can be more even driven if you do all that you will reach the near vanna for mobility which for me is careful computing okay so that was mobility now what are you going to do with all this mobility [Music] reaching people is one of the activities that we do the most on our computers nowadays which is fantastic it's human centric computing so we added a key technology to reaching people and that's on level only who enables you to discover your neighbors it's Auto discovery its breath ability of the people nearby in the networking sense now rendezvous is totally compatible with existing hardware software it's you don't need to change your routers or anything like that it's all based on a standard networking it's all based on tcp/ip and DNS it's fundamentally a new way to use DNS and to build upon that whatever of course is modern and supports human readable names not you know eight character limit or anything like that and it's a key to a DAC networking when you don't have a sysadmin that's going to hook up everything just right and give you know all the IP addresses and put everything in control and all that stuff when you just have totally a dork you just plug in like here in in this conference this is a dark networking and the holiday vu is fantastic in those situations now what's very pleasing is that we released on day through last year with Jaguar we had adopted it in a number of applications this year we are using other whoo even more we enhance some of those applications to leverage even more rendezvous and we're adding new applications into the mix but beyond the adoption one thing that is really making me happy is the innovation that has taken place we've owned a room and that innovation comes from you it comes in the different forms it for example you have printers that have adapted on a room you have games multiplayer games that are using on the room you have some devices and you have some brand new way to do collaboration using on a room and that's very exciting to me so our view is from testing to find out who your neighbors are or to communicate with your neighbors but there are times where you want to reach someone who's not nearby and that's when the address book comes handy so the address book is an application we've invested a lot of effort to make it just right and the address book of cross manages all your addresses now we have a number of applications that use the same addresses and as time goes we put more and more application that that go to the same storage fundamentally the address book is an application that chooses the databases underneath and the key here is the database the application is fantastic but it's on top of the database that database has a number of API is that you can use for your application we consider that the repository of addresses is a system service that we provide for all your application we want this to become the hub for all the communication centric applications and we are doing a lot of refinements in Tantra we are improving the API adding some functionality that has been requested here and there one of the functionalities that we add is what we called the action plug-in so let me set this example let's say I want to call this this person I have his address scout there and now I need to reach the phone to call that person so I promise that my screen is over there my phone is over there so I can just click at the right place and now I can enlarge the phone and now I can type the phone so this is a functionality that we've added to the address book and that functionality is using the action plug-in and it's available for all of you to specify for your data type how you want to have what action you want to have happen for that data type another functionality we've added is what we call the people picker which enables you to filter the database of all addresses and select and let the user select which address they want to have and then that selection is available through your API okay so you education can definitely in many cases uses two fundamental technologies or they rule and address book and that's reaching people one of the activity we do the most on our computers now let's change the beat so this is my techno session that's really UNIX that I want to talk about so we have now Mac OS 10 totally based on on UNIX this was a bold move and we wanted to let the world know about that so we run this ad a year ago telling everyone hey we are unique space why would we choose UNIX for a number of obvious reasons UNIX is very very solid UNIX is powering the internet most of the servers out there the Internet servers are running UNIX computers so that's kind of testimony of how solid it is it's very mainstream there's no doubt that you hear but talk about UNIX everyday and nowadays it's it's quite interesting it was for us the fastest way to get to a number of features no other place we could have gotten a networking stack that has thousands of engineers put into it in terms of tuning in terms of being standard compliant all those things in fact networking is defined on UNIX in general and this was also a way for us to attack new markets markets where Apple traditionally had not been particularly strong and now that we can go towards so we've the great mobility that we have we have now a dream machine for UNIX folks it's a portable that you can take on your conference draws you can do presentation because you get all the standard software all the productivity software you get PowerPoint but also now keynote of course and if you also have world you know all those things to all of us use daily and so some people are really liking it and if you look carefully and at that picture that's Jem Gosling or of Java FM who of course is using a power book so our UNIX is very very standard we are very good unique citizen in fact if you work to a book store and you look at some titles you will see titles like this that all apply to a platform so is it perfect well we always get a lot of feedback that's always kind of requests and even though everyone is telling us yes it's it's really a good citizen I mean I was very surprised to find everything I would expect there's always the top of the list and the top of the list for us was X 11 so X 11 is a tool box a window toolkit that a windowing toolkit that is very ubiquitous in the UNIX world I think x11 has been ported on all the machines all the UNIX machines in the world and if you go to the scientific areas you'll find applications that are programmed to x11 something for higher ed or the enterprise so we've integrated x11 right into Panther and by integration I mean that rather than having one big windows that has all your x11 applications kind of inside that window now you can have x11 applications that have Windows that mix with other windows from all the cooker herbs or all the cabinets so fully integrated with quads another thing that was heavily requested is to have really really fast x11 and especially for doing OpenGL functionality because a lot of the scientific apps do use OpenGL and so those applications didn't want some installation layer with OpenGL so I wanted to go down to the metal and this is what we have done when your application uses your x11 application uses OpenGL it's a native OpenGL now let's talk about standard so another request that we have constantly is to add things to add little things and one of the top requests after X 11 was to add a great XML parser so we've looked around and we asked a lot of people what's the best XML parser that we could add and pretty much the consensus that has formed is lib XML - so this is what we're adding in Panther another place where we had some request was for locales and we added ICU the international components to Unicode for Unicode we adding wgot which also was heavily requested to help you port applications to Mac OS 10 and a few others and of course there's a constant refresh we are committed to constantly refresh all the unix components that need to be refreshed one of those things on the list of the Refresh list is ufs and that brings me into file systems we added journaling to the file system last year for the server now in Panther it is a standard all panful systems by default will have a journaling file system this is taking the high end technology and making it available for everyone we added NFS looking quite frankly it was a shame that we didn't do lucky we fix that we added mobility for the file systems as I already mentioned and we've had a lot of emphasis on performance performance of the remote file systems like SMB NFS and web dev but also performance of ufs now for those of you who used you FS you are pretty much at parity with HFS+ which is quite a feat ok so I'd like to digress a little bit and talk to you about architecture and I've been architecting systems or being involved with authorizing systems for over two decades now and I've realized over the last few years that I'm kind of part of the old school of design so what do I mean by old school oops okay so that's I started to realize a few years ago so that's kind of the old way to do design let's say you have like a subsystem to architect the first thing in the old school that you do is really try to get to the essence of the problem and you create this wonderful engine that's going to just address the problems you know there's a core problem so you design this vision and the API of course that you have on top of the engine for all the applications and you spend a lot of design work there now there's some books that says hey you should do top-down design all that stuff but we all know that it's it's both top-down and bottoms up you actually write some code along the way and then you verify your assumptions are correct and all that stuff but essentially this is the design phase after that you write a lot of code and that can take months because it's brand new piece of code and so we all know that there every ten lines or so you make a mistake and you have to debug find that mistake and even with something like Xcode it can take a bit of time so then you have this systems that's perfect okay you have it just perfectly integrated to your system you are very happy with it and you say well now I need to connect to the rest of the world and that's really ugly because the rest of the world has all those legacy systems ISO standards you need to connect to and that's where you need to write adapter code this is this is tasteless and you write all those I've kept the codes and finally you have the system that works well for your system and that integrates with the rest of the world now I think that's a new way to do that and the new way is open source so how does that go with a new way the first thing you do is you go shopping this is very bizarre you just go shopping the problems that you are trying to solve probably has been solved by quite a lot of folks in the past so you try to identify those bodies of God that's solve use the same problems that you are trying to solve and you evaluate those bodies of code you evaluate them looking at the speed of those buddies of God you look at the standard Ness as I started compliant and this is the most bizarre of all things you look at the reputation that they have on the net okay this is this is really like shopping so the next thing that you do is you write adapter to your system so this is kind of the reverse of the previous picture the piece of code that you have is totally standard it totally fits with the rest of the world now you are trying to adapt it to your system so maybe your system has a different UI maybe your system has an aqua user interface that's where you will write some code to adapt it to your system now this is not as really a bad thing because you're actually going to add value there's some examples that can come to mind there where you add value by making this fantastic user interface on top of this engine that was an open source engine and the last step which is very important is to advocate your changes with the community you don't want to be on a diverging branch of evolution because guess what the rest of the world will win not you and so you want to make sure you are all converge okay so so you need to to advocate your changes and the best way to advocate your changes is to make sure that you have value in your changes you don't want to do like crazy renaming your variables and changing everything no no no that won't work you want to do the minimal amount of code that adds value so what are the advantages of this approach obviously this time to market you no longer have the downtime of going away for a few months and writing all this new code also it's a lot more reliable which sometimes may be misunderstood but the open source code is actually very reliable and this has been proven in our experience we've done that with lots and lots of bodies of code and typically the open source code has way less bugs than the new code that we write because the new code that we write is new there's no secret here it is also very secure very important in this modern age if the code is not open source say it's closed it's not secure that's pretty much always true and there's a social aspect of this which I personally like which is this two-way exchange with the community you get some you give them back so we are using this strategy of course in my Christine we've used that in Jaguar for a number of components and we are doing that for more and more component I just listed a few here one of the most noticeable in this list is of course KHTML which is the rendering engine of Safari but the there's many more in fact you go to any group at Apple and pretty much every group is incorporating open-source went from another okay so in summary with your application and Unix first if your application has been running on UNIX forever but not on Mac OS then bring it drawing the party this is the place where things happen and it's easy to port your application to Mac OS 10 because my question is very very standard we've got all the facilities that you want to help you port now conversely if your application has been running on the Mac forever now you have some new markets where you can expand you can go to the scientific market you can go to the higher ed to the enterprise market and the two sides can come in there's some technologies at a longtime Mac OS technologies or technologies in your application and there's some technologies that come from the UNIX world just new synergies to explore there and think about incorporating open source this can save us quite a lot of time and you end up with a better product in the end so this was my techno section [Music] at this point I'd like to thank you to have come from all over the world to San Francisco and one reason while you may have come here is that you went on the web and so this enticing video saying come here to San Francisco and that video of course features Scott frost all my friend and colleague that is going to take over at this point so now you know that I only have one nice shirt this is not an intro for me this is intro for aqua so we believe aqua is incredibly sexy and we've worked this year to make it even sexier and we've worked to improve the usability of Mac OS 10 as a whole so let's get into it we started with the open and save panel here's the open panel here is the open panel here there's the open panel in Jaguar a few people didn't think it was the greatest open panel they'd ever seen in the background and we agree the problem with this open panel is it wasn't user centric it wasn't human centric it was all about the computer it was computer centric I mean just to get your home directory your floor levels down right you're always scrolling back and forth trying to find things so one thing we did this year is we have this brand new finder right a user centric finder and inspired by this we have a brand new open panel as well so the open panel has the same left column you see in the finder you can get to your you know your Documents folder your pictures anything your home directory extremely easily it's right there for you you can also get to your your devices and really importantly and I've been using this for a while I love it you can get to your removable media right so you throw a disk in or you mount a drive it's right there in your open panel in your face another request we have which we have for Panther now is we've added ListView so this fuse built-in we also have a path pop-up up there we have back and forward buttons so we think you're gonna love it now we haven't forgotten about how you like to customize the open panel right you like to add your own widgets so we have that as well in an accessory view at the bottom so we've done this in a binary compatible way there's no new API so you should have to worry about your application should just get this much improved open panel when you run it on Panther please install the seed you got this morning test it out let us know if there's any issues because we try to do lots of tricks for those of you who are doing crazy things in your open panels to get your controls in the right place we think we've done it but let us know and of course we didn't forget about the safe panel so again we've made it user centric we've been asked a lot about that that switcher thing people say hey you know what about that switcher thing not that's what your thing although we get asked a lot about that switch with thing also that switcher thing right there so we have this view switcher in the finder and we've decided you know it really works well as a control in a number of different places so we have it in the finder you notice we have it in iPhoto as well we added it to the address book so we had a lot of requests people saying hey you know you're using that and we actually had implemented that ourselves and each of our apps but it clearly was a nice standard control that you wanted and so for Panther it's built into both carbon and cocoa you've got it we worked really hard this year to polish aqua and make it even that much better [Music] all right here is aqua in Jaguar which we thought was great but we knew we could do better and every release we try to refine it and make it even better the first thing we looked at were those white corduroy lines we felt they were a little too strong in some places you'd look at a window and if there was text over it it felt more like an interference pattern than it did like a nice texture so we went through tons and tons of different background patterns trying to look for something better I mean sort of like Thomas Edison going through filaments for a light bulb we through each one out we throw out different materials we had a mock-up with gold and at the end we settled for something which is very very subtle you can see it better on your machine when you install it but here it is so here's Jaguar Panther Jaguar Panther what we've done is we've toned it back it's very very subtle your eye sort of notices that there's something there's a texture there there's something elegant but it doesn't get in the way of readability of text or other elements the next thing we looked at were the tabs so you know these tabs work fine but the top felt a little bit clunky and we love this switcher thing we've added to the tool kits so we looked at that and said if we can start with that and then we can we can do better we can make a tab out of that you notice the tab here also it's a sheet that sits sort of awkwardly on top of the window we decided to etch it in so there's the tabs on Jaguar there's on Panther it's a Jaguar panther Lia's great and the most important thing for all of you is the mantra this year was save the same metrics so this is the exact same metrics as the tab in Jaguar the content regions the same the control is the same you don't need to do anything you get it for free the next thing we looked at was the toolbar so there's some apps that use the toolbar in a way where it's more of a view switcher when you click on it like in System Preferences it takes you to a given pain but there's no persistent state in the toolbar in Jaguar to show you where you are now there is so here's Jaguar here's Panther persistence date let you know where you are there's an API you can adopt for that if you use the tool or in that way next we looked at the title bars the inactive title bar goes translucent nice use of courts bad use of UI to find what windows are inactive you have to sort of look around and say well what windows are translucent and how do you know that well gets a different color depending on what the background is behind it you look at it be untitled there and it's a little difficult to read you get interference especially if it's over another text document so we said okay we're gonna take and make the inactive title bar windows opaque now once you do that it becomes more difficult to tell what the active title bar is so we took the active title bar and we add a nice simple gradient on top of it and here it is there's Jaguar Panther Jaguar Panther we think you're gonna love it the next thing we do is panels so in Jaguar there's no way for you to tell if a panel is key meaning if you hit delete here is it going to delete a font collection or is it going to delete characters in your text document right there was absolutely no distinction what we've done and Panther is there's now a key state for your panels so here's Jaguar here's Panther you can actually tell and it turns out there's three distinct states now there's the key States and this in the panel is now key there's the document it's acting on which actually has a little bit of a gradient but it's very light gradients and that's the main window and then there's the inactive window in the background now you shouldn't have to worry about this as a developer the toolkit should handle this for you automatically unless you're doing wacky stuff for the tool kits and windows so you should pay attention to make sure you're not breaking our job of doing this automatically for you so that's the third state so here is aqua and Jaguar Aqua and Panther Jaguar Panther all right so we heard this year that a size definitely does matter and we've reacted to that you see we've had our standard controls and the standard controls you know button and sliders and everything work great almost everywhere right I mean in most usage you want to use the standard controls but some places you want to use small controls because you're creating a pallet so you want to squeeze a little more into that pallet but we found that in some pallets or you know pro apps with lots and lots of pallets even with these small controls it feels a little bit cramped and so we got requests to have even smaller controls so new for Panther we're adding mini controls so we still have our standard size controls are small controls and now this suite of mini controls and if you look back at that palette again here's the palette with the small controls which looks pretty good here's the Palace same palette with mini controls you can really tighten it up and you save that much space so if your app is the type that it's a it's a pro app you have lots of palettes take advantage of the new mini controls and Panther so we're gonna help you find what you're looking for in Panther when we built iTunes we found that one of the most important elements we added one of the most important features we built in was this it's this great search field there's three elements of the search field it's fast it's incremental and it's readily accessible - right there in the main window as we've built other applications like mail we found the exact same thing we wanted to have a fast search field incremental and right there in the main window address book fast incremental right there in the main window iCal has the same thing as does the new finder right it's one of the really important features of the new finder the new font book great search fields built right in even Xcode is really built around having great search built right in we found this wasn't just an element for us to do it's really more about the user experience of using most applications if you can build great search right into your application your application will feel better it'll be a better experience for the user so we're gonna help you out in two ways this year number one we're gonna provide the UI there's now a standard search widget built into both cocoa and carbon it looks like this we're branding the rounded text fields to mean search so if you use a rounded text field that's a search field don't use it to mean anything else it has an optional magnifying glass you can use that to have a drop-down menu where you can scope your searches where you can save older searches and and someone can choose the older searches from there so that's the optional magnifying glass it also has an X in there which clears the search once someone's typed it so we're providing the UI and both cocoa and carbon for Panther next we're providing the engine so we're building in a new framework into Panther called Search kit search kit is an a search engine you can all use for your applications we already use it for these applications so for the finder for the address-book mail help it works really well so what is Search kit its v-twin but much evolved so back in mac os9 we had something called v-twin it's a search engine people really liked it and we've been moving it forward and we got it to the point now we're ready to make it public and Mac os10 and fully support it going forward it supports a bunch of different kinds of searches so prefix searches like you'll see an address book and a lot of these apps boolean searches natural language searches so you can ask a question and even similar documents so if you do a search and it comes back with the document but that isn't the document you're looking for but you know the doctor you're looking for is similar to that document will actually do an analysis of that document look at all the other documents you've indexed and returned these similar ones and it's fully Unicode based CF string API is built right in so you can index any of your different languages for Japanese we actually do some really difficult work which is we have to do linguistic analysis to figure out where the word boundaries are because there aren't obvious word boundaries we do that all built right into search kit it supports these six document types right out of the box so text RTF RTF with graphics HTML PDF and even word but when your application adopts search kit you can add on support for any type of application that your or any type of document that your application knows how to parse so that's aqua we've taken the finder and made it very user centric instead of computer centric we've taken the open and save panels and moved them right along with the finder we've added that switcher thing as a standard widget we've really refined aqua and we think you're gonna like it we've really you know tried to polish every little thing there's a lot of other things I didn't show you which we've polished we've added mini controls and we encourage you to adopt search and we provided both the search field and a framework to help you do the indexing itself [Music] I'm not gonna moonwalk so for text we've done a bunch of things this year starting with text input for Japanese we've really improved text input for Japanese the first thing we did was simplify it and Jaguar you had to go to a bunch of different menus different palates to try to find the right input method in Panther there's a single menu for you to go to it has everything you need and there's a standard single palate you can keep on your screen to switch between the different input modes so we've simplified the UI the next thing we did is we improve the accuracy we made it a better input method there's two main ways we did this we started off by using the latent semantic mapping technology from our speech team now this is the same technology we use to do junk mail filtering and what we've done is we use it to sort of predictably guess based on the characters you're typing what actual character you're going for so based on the keystrokes you're typing what character you're going for and this actually improves our accuracy quite a bit the next thing we've done is we use the context in which you're typing to figure out what character you're looking for so as you're typing along rather than having to guess what character you're going for purely based on you know the the keystrokes you've done we look in the document we look around in the document for other characters so if the keystrokes you've typed could resolve in three different characters and you've already typed one of those characters into your document a line above will guess that character so it helps the user you know get the better characters faster now the important thing here is you need to adopt this to help us out so there's a protocol you need to adopt this protocol which will vend back the context of the document the person's typing in so it can pick the right characters we've also added a preference for all of those people who are coming from the dark side to the Mac and you know they still want to feel comfortable with elements of the old crack home in the new home so you can use the same pipe but it's now on the Mac and it feels comfortable bond support we've really simplified dealing with fonts and Panther the first thing is installing fonts is as easy as double-clicking a font file it comes up with this preview you hit install it goes right to the font book so installation incredibly easy but the access for those fonts is in the font panel itself so you should build the font panel and use the font panel in your applications that's where your users will get at the fonts but they install it through the font panel or through the font to book next the font book is for organization so you can create new collections you can populate these collections and again you access those collections you access those fonts through the font panel in your application you can also activate and deactivate fonts so take that font collection we just had we deactivate and you'll see it disappears from the font panel so we really encourage you to use the font panel as the standard access method on the system for fonts however we know that some of you have very custom UIs for your fonts and the font panel doesn't make sense for you so for all of you and Panther we've added a new set of api's to get directly at these collections at the activation and deactivation of those you can use it directly text performance there's one thing we heard loud and clear from you about our text performance in Jaguar [Music] I see that all the fish fans have perked up from making bongs out of their new cameras the only fans where textfields opens too fast all right so okay so if you sample your application you're gonna find that a lot of time and your application is spent dealing with text right it's spent laying out the text measuring the text drawing it to the screen redrawing it when there's a window resize and that makes sense because a lot of what your application does is draw text right so this is how we've optimized it all text is wrong translucent and Panther yeah so so we looked at that and we actually said well here's a great opportunity because anything we can do to improve the performance of text is going to improve the performance of every one of your applications and of the system as a whole and so we looked at all this text we draw and we spent a lot of time optimizing all of this for Panther and I think you're going to be really pleased with what we have let's look at the stages where we went through an optimize we looked at the font system so 80s and all the different pieces involved there we looked at core graphics and how we get everything to the screen atsui does a lot of the layout and the carbon and cocoa api's we had a concerted effort this year where we went through and we optimized every single layer of the text system then we stood back and we optimized holistically we looked across different layers and said are there places where atsui needs to leverage the font system directly is there an impedance mismatch and can we plug that up with some new api's to make it faster are there places where carbon should talk directly to core graphics and so we optimized across layers as well well I'm pleased to say is the outcome of this is if you look at any of the text API is pretty much from the lowest level to the highest level they're all more than twice as fast and Panther so this is a great achievement there's some places where it's even much faster than that so it's you know five or ten times faster again I absolutely encourage you please install the new seed and see what performance improvements you get out of the text and Panther we're continuing to optimize text and we'll do so until the final version of Panther is in the box so you still have time to let us know are there any bottlenecks remaining if so we'll try to improve them before we go 100 or before we go ten three with Panther that's text so we've improved that Japanese input we've added great support for font maintenance and management and most importantly a lot of performance work so carbon we believe is a gem and we're treating it that way and continue to evolve it a lot of what I've already talked about for things like the switcher thing and many controls are features that we've added to carbon this year so I'm just going to talk about a few specifics for carbon in this section this is the age of a chive you last year we introduced HIV you to you we spent a lot of our time this year improving HIV you and sort of making it permeate throughout carbon HIV is the future of the h-i toolbox so if you have a carbon application adopt a chive you most of you who have already adopted carbon events which is great HIV you is the next step in this progress we've added a chai textview so we took em LTE and it's now in a chive you we have a chive you based menus so it's much easier for you to extend menus for you to add your own functionality if you saw this morning we have this action menu in the finder and allows you to set different colors for labels that's all done through the use of the new HIV you based menus and we've had a great layout support so we have springs and rods but we also have a very complex relationship so you can look at different views can sort of pay attention to each other and when the window resizes they can resize and very complex relationships whatever you need for your application and it's much faster which is another theme of the H I toolbox this year performance optimizations we have a complete set of quartz themed api's so we used to use quartz in our lair then we go through quick drill and we go back to quartz and it was a little slow we now have top to bottom a complete path which is all quartz we encourage you to take advantage of it it's much much faster data browser data browser we heard from you wasn't fast enough we made a 25% faster to add new items 80% faster to remove items and if you have very large data sets it is much much much faster much and it now supports compositing mode as well we've also added really improved window resizing so it's at least 30% faster in most cases if you have a fully composited window it's even faster so we encourage you to have your app be fully composited it's carbon all right so we think you'd be Loco not to use Coco for a new application all right again just like carbon we've added a lot of things to cocoa this year but I'm going to talk about just one so stepping back there's a standard development developer paradigm called Model View controller right and so most of you probably know what this is but you take your application you separate out separate out the UI piece which is your view from the model piece your data and there's this controller layer in between which pretty much is the glue that moves things back and forth so cocoa has had a model and NS document and it also had a view and ennis view but it hasn't had a controller layer what this means is you've had to write a lot of glue in your applications to do that controller layer well how did you say that for Panther we're adding a controller layer and as controller so why should we do a controller layer okay this is up to ten thousand feet now our goal as a platform vendor is to make you the most efficient develop you possibly can be right we want you when you have a new idea to implement that idea on Mac os10 first and get it done the fastest possible so that's our goal we believe that cocoa that the shortest distance between a brand new idea and an app implementing that idea is cocoa on Mac OS 10 so what do we do to that end number one we provide all the standard functionality right so we provide views and controls and and text views and collection classes not and on and on right cocoa is our advanced object-oriented framework and it provides all that standard functionality the next thing we do is we continue to try to eliminate redundant code so if we see that several applications are trying to do a certain thing with text we add new api's to the text system to help you out but this year we sat back and said can we do more and inspired by a couple technologies apples had EOF and web objects we've added a whole new layer which eliminates an entire class of glue code so we're getting rid of the glue code so what is this glue code you know when you're writing an application and a user updates a value in a text field and then you need to write this glue code which goes and updates your model based on it you don't have to write that code anymore it's gone the controller layer we provide does that automatically for you when your model changes you have to have glue code which then reflects that new value in the UI you no longer have to write that code in Panther the controller layer take care of that for you you might have a couple UI elements or multiple UI elements all reflecting the same data value the same model and you have to write all this code where if it changes one place synchronize all the other ones so they don't get out of sync so you see the same value everywhere you no longer have to write any code for that it's all done automatically in the controller layer and sometimes the user will click to change something for instance you have a table view a big list of values with multiple columns and depending on which column the user clicks on you sort by that column you've had to write all this glue code to do sorting for your table views no longer the controller layer now supports sorting out of the box for free and of course we didn't forget that if we're doing it we better integrate it into IB so interface builder in the past has supported hooking up targets and actions meaning you could tie your UI directly to the controller layer you were writing and Panther you tie your UI directly to your data directly to your model you don't have to write any of that controller glue in between it's all provided by this new controller layer in cocoa that's the controller layer all right let's talk about the internet let's start off with Sherlock so what is Sherlock Sherlock is a web services host application so you can write quickly write a web service a client side of a web service as a Sherlock Channel it'll run inside of Sherlock and and you'll get this great client side experience for that web service O&H an XML feed or an HTML feed you can get that right inside here so here's an example of one of the ones we've written for our movie channel it seems that we're required by our CEO to have everything be Nemo this year so you know this is a nice standard channel what we found this year is that more of you have been writing channels and so we needed a way to organize these channels so we used the same library organization mechanism that we have in Safari and have brought it into sure lock so we now have that the most important one of those collections on the left though is this one this is a dynamic collection it's a dynamic collection of every channel which appears either on dmoz and dmoz is an open directory sort of the Yahoo open directories they collect things they collect Sherlock channels so if your channel appears on dmoz or you submit it directly to us it'll appear in everyone's copy of Sherlock dynamically every time they launch it so this is the way for you to get your channels out to everyone else that's Sherlock all right Safari when we built Safari we had five main goals the first two were performance related it had to be fast it had to be fast and it had to be small so we've succeeded on these two goals and Safari is the fastest browser on the Mac as you know most of you probably use it and I get asked a lot well how did we succeed on it how did we make it small and fast what did we do so let me take you through that just a little bit because it wasn't magic and I think this might help you understand what we did so we'll help you make your applications fast as well most importantly we made performance the most important feature of the application right and this is one of those things where for engineers to actually work on things you have to make it a feature that they're going to measure it against or else they're going to sort of ignore it till the end so we made it the most important feature for everyone on the team we start it with a small code base if you have a small code base you're running less code it also means you can get your head around all that code so you can optimize the entire thing and this is probably the one which is the most controversial and it's the first project I've seen actually that does this we allowed no performance regressions from build to build period so even when an engineer implemented some new feature and they check that new feature into the codebase and we built that and we measured it if our page load times got any slower at all we checked that back out of the main trunk of the code the engineer had to find a way to make it to implement it again without any performance regressions or they could be tricky and go optimize a different part of the system of different part of the application and check it back in so it still didn't regress that was the rule now you can't tell people that upfront because they put really slow stuff all over the place and the sleeps come out as they add features so we measured constantly to know where we were also this was really important we hand time things we sampled running processes we built automated tests and we created charts charts all over the place so we saw what was happening with our performance so we were never surprised you know a chart would come out every day or every other day whenever there was a build and if we saw there was a blip going the wrong direction we checked that code back out there's a lot of great tools in the system and we use them so sampler is a really good tool to find out where you're using CPU time malloc debug and heap are great for memory usage quartz debug if you haven't run it is fantastic for finding your drawing problems if you're drawing a control two times three times four times you were drawing it multiple times quartz debug will flash it right in your face and let you know that you're drawing something multiple times FS usage tells you how often you're touching the file system and the more you touch the file system the more your application runs at the speed of the disk instead of the speed of you know the g5 and trust me the g5 s faster than your disk so run FS usage and cut down the number of times you're touching the disk and there's a lot of other tools we ran all the tools this one I think is one of the most important we built performance tests directly into the application that means that anyone internally running Safari throughout the entire development cycle could run the performance tests that means I could run them and I did each time I got a new version of Safari I would run the PLT I would run the tests they were built right in I would see what the speed was on my machine I knew what it was supposed to be I would know if it got any slower and if it did I'd call someone so building tests directly into your application is I mean I can't overstate this if you look at applications where people have done this those are generally fast applications so what are the lessons we learned make performance a priority if you do your app will be fast use the right API for the job this is one of those things where it should be obvious but we have lots of api's on our system and some of them are generic and do a good job of a large amount of functionality for instance we have api's that are meant for a large editable text view and it's meant to handle bi-directional Unicode text right so this is great but it's not great if you're drawing a label so we've added optimized api's for certain smaller pieces of functionality so when you're going through and you find an API that solves the need you want keep reading through that header file to see if there's anything else we've added just for your usage use the write API for the job and you'll get better performance measure measure measure measure to find where your bottlenecks are measure to find if the new API you're using is better for the job and measure to prove to yourself after you've made the optimization that it actually made your application faster and never regress again this was controversial but it really helped us nail it instead of trying to optimize at the end we were optimizing the entire time so we made architectural changes that would make the app fast all right let's get back to the goals the next goal we want it to be native so we want it to be a great Mac OS 10 citizen leverage all the features we have on the system like CF Network we wanted it to be real world standards compliant so of course we wanted to support all the standard buzzwords all the standard you know the standard standards but if you go to eBay and yeah I don't know if I was here from eBay if you go to eBay and it doesn't render for you even if it's not following a standard it you want it to render you don't care and so we made sure that all the sites out there would render we wanted real world standards compliance but most important for you one of our main goals from the moment we started this project was that it be embeddable our goal was to be able to open this up and have you and bed everything about the guts of safari into your applications so let's look at that here is Safari here's the way we built it Safari itself is just a thin layer on the top of this stack everything else our public API s so we start with the standard BSD sockets see if network is where we implement most of our protocols and port Ron talked about that earlier Foundation URL api's so Foundation has been greatly enhanced and panther it has fantastic URL loading it's much enhanced from Jaguar it has automatic content caching it supports standard authentication schemes as extensible streams who we now have a stream object you can subclass it you can extend it we provide all the standard protocols but you can extend that with custom protocols and we support cookies I've got a four year old alright WebKit let's look inside WebKit this is Safari this is WebKit WebKit is that content region of Safari you can build it into your applications we built it directly into mail so mail now has much better HTML rendering but this is WebKit most important for you you can build it into your application so WebKit is that content region and more of Safari we support standards so here's all the buzzwords at HTML 4 XML I'm not going to read to you but we support all the standards and we are a member of the w3c and are actively working on new standards which will support as the w3c decides on them that's WebKit let's look inside it for a moment there's two main pieces inside of WebKit it's webcore and javascriptcore so web core is the open source HTML library we encourage you to become members of the open source community contribute to this the same way we're contributing to it and it'll benefit all of us javascriptcore is kgs again the open-source version of the library we encourage you to support it now one thing we've been telling you for the last few years is if you're building a brand-new application you should go find some open source code that's great and then if the brand new application build a beautiful cocoa UI on top of it it's the fastest way for you to get your application out the door it's exactly what we did here KJ s is C++ web core is C++ both open source we used objective C++ and WebKit to marry the whole thing together and build this beautiful UI called Safari but the important thing for you is webcore and javascriptcore are pieces and implementation details of WebKit but for you the API to use on Mac OS 10 is WebKit itself so this is WebKit and that is where it falls in the stack we've taken and built Safari in such a way that you can take advantage of almost all of the api's directly in your application and to show that I'd like to bring Richard Williamson engineer extraordinaire up on stage to blow you away with how easy it is to use WebKit hi so I'm gonna give you a demo of WebKit and what better way to do that than to build a web browser so let's get started I'm going to launch interface builder and start a new application and you'll notice that interface builder has a new palette the WebKit palette this palette has a single class on it it's called the webview let's add a webview our window resize it let's set some resize flags on the webview itself now how do I load a URL into this webview I'll use a text field so I got a text field place it in the window and using the normal target action mechanism connect to the webview now I'd like to add a few this is good but I'd like to add a few more features maybe a back in a forward button so let's drag out a back button place it in the window and a forward button give these buttons labels back forward and again using target action connect them to the webview and finally I'm going to set the resize flags on these widgets that's it I mean any code nothing's compiled let's go ahead and test this how about checking out Apple site the Scots can assign for one of these eg fives I hope so back and forward these buns work you know you'll notice though a few things aren't quite right the URL in the text field doesn't update as I navigate and the back forward buttons don't disable and enable as I'd expect now we all know at this point to really make an application work you write lots of glucose glucose be gone so I'm gonna add these features enable and disable the back forward button update the URL in the text field and also show a progress indicator without writing any code and I'm going to do this using the new controller technology so the first thing we'll do is create a controller now going back to the text field what I'd like to do is share the same underlying URL for the web view and for the text field as I navigate I'd like to update that in the text field so we're going to bind the URL to both the webview and the text field but first let me disconnect the target action then I'm going to go to the new bindings inspector and this lets me bind cloth ities to the various elements that are selected in this case i'm going to bind the value of the text field to the main frame URL now for the back and forward buttons I'm going to associate their enabled state with cloth occurs on the web view that tell me whether or not I can go back or forward and then finally I'd like to add a progress indicator so I know when the page is loading it will make this clovis indicator determinate its value will go from 0 to 1 and let's find it its value again will come from the web view controller estimated progress we set the resize flags now we have another browser again no globe no glue code nothing compiled let's test it it's time I'm going to go to the mandatory Pixar site let me emphasize the content you see here is exactly the same content you would see in Safari let's check out of a trailer I note the back and forward buttons enable and disable as we expect and as I navigate the uol is correctly reflected in the text field that's the WebKit and the connection and the controller technology thank you there are more in-depth sessions on both of these areas so I encourage you strongly to go out and check out the more in-depth sessions thanks Scott thank you all right so that's the architecture the web kit is available to both carbon and cocoa it's available on both Jaguar and Panther and it's available today you can download the SDK the 100 SDK for Jaguar today and ship your apps on it so what we've done is we've taken Safari and we've opened up the engine and giving it to you to embed in your applications with that well I can turn it back to Burt Ron thanks so we are running a little late and just so machine punch faster I said I'll take a few things and put them together in the Panther parade so ladies and gentlemen Japan for parade okay enough of that so so the first technology I chose is colorsync color think is about color correct images and it's really a shame if you go to real-life safari in Africa take this picture of this lion and you open it with several layers and it doesn't look the same in the different apps so it's really a shame because we have this great technology color sync and we've made it really fast over the last few years so that there's no excuse for not using color sync now I know that many of you have not used color sync because it was a little too hard because by default color sync was earth which change the default now coalescing is on and so you automatically get the benefits of coalescing and you can if you have a color specific application turn it off with a little more code now and QuickTime graphics importer supports that philosophy as well another longtime technology we've had is AppleScript AppleScript is a blessed technology for an end users who want to automate certain workflows we also use that in a lot of the publishing space so there's two sides to Apple scripts as a supplier side providing script ability and as the consumer side using script ability so for the supplier side obviously you need to make your application Apple scriptable and that's not too much work but you have to do go do that now for the consumer side was really beautifully that you can use and leverage the other applications that are poor scriptable and we've made more and more applications upon scriptable with enhance the terminology in all those applications we also added a facility to do UI scripting so that even if you haven't made your application scriptable it we'll work with Apple script of a technology vac Lib vac Lib is fast math it's really really super fast math it's used in all kinds of context it's used for linear algebra so of course something like Mathematica uses that but something that's not obvious is that even our little drunk male filter in male uses linear algebra it's used for signal processing all those FFT is for audio big names for crypto and what we've done in Panther we've optimized V clip for the g5 now we added another technology that we called V image which is now fast math but for 2d Ras this is for graphics of course it's for doing convolution operations morphology operations all those things that I don't know what they really really mean or I don't understand the math underneath them but what I can show you is some pictures which is an example of blur hopefully you can see it's blurred an example of embossing another technology that we have is DVD we have had the DVD player for a while we've made that DVD player functionality available to your application so if you want to embed early usage of a DVD in your application for example for training or whatever now you can do it by using those api's another technology is of course quick time we've seen mandatory shot and QuickTime and is embedded in my Creston we embed the latest QuickTime we have focused for this release a lot on infrastructure a lot of you have asked to have fred safe quicktime and now in punt for quicktime will be fred safe for static images and for playing movies we have full support for Unicode and we've gutted the audio infrastructure underneath QuickTime to replace that we've called you now that brings me to code York or Joe has been a wonderful technology on my quest and one reason is that it has been conceived from the ground up to be a great 10th citizen now we're adding features to code you were adding surround support and we're enhancing the real-time effects want to encourage all of you to bring new audio units which is real-time effects to the platform we are supporting new formats and we make it really really really fast it has a very small latency and it also consumes very little CPU to play and for example on gigahertz PowerBook you can play AAC which is what we use for the Apple music store of course with less than 2% of the CPU so that means you have 99% of the CPU for the rest of your application another technology that we has is a window manager quartz extreme the vision behind quartz and quartz extreme is to have Hollywood effects right on everyone's desktop and we're really moving in that direction and some of the features that you saw the movies this morning like expose totally leverage this kind of facility now what we've done we call graphics is the API to cross and we have rendered it a little more we've added a lot of the functions that you've been requesting and so little function here and there to do shadowing to to screen scrape you know all those things now we also added some brand new areas of API notably superscript to PDF Converter and so maybe ice to deal with PDF both PDF in terms of document structure we've also snowed the document 3 and with PDF in terms of what gets drawn into pages so you can access the pages that are getting drawn another technology in the graphics land is OpenGL now OpenGL is of course how to accelerated its Freedy imaging and it's used for games I mean most of the common games use OpenGL but one thing that I'd like you to think about is that OpenGL is not just for games you can use OpenGL to your advantage for your application to get to the next level of great user interface and my favorite application of course is keynote that totally leverages OpenGL now the last technology that I have is world readiness now we've had an effort since the inception of Mike Western to be a great global citizen we have devised this technology that we call at packaging which is really fundamentally an object-oriented concept all the application all the languages supported by your application go along the application we use that for all kinds of plugins our frameworks are packaged that way and I am very pleased that all of you have adopted that packaging in your applications so our users out there in the world really enjoy that we are doing just more of it with more support for Locard's languages and font it's easy to internationalize on 10 so this is a very very quick quick and prepare a ladies and gentlemen thank you for going along that front for a parade and now I'm going to conclude so we've gone through a tour of a lot of the developer features of pant fur and the transition from 9 is over for all you know for all of us for development purposes thank you thank you for bringing thousands of application onto the planet I hunt to the planet and onto the platform now we have some next challenges what are the next challenges for all of us it's to strive for excellence what do I mean striving for excellence the number one things that I mean is performance we should all make all our applications more performing there's always some extra speed to gain there and the key to do that is to think 10 not 9 a lot of the code that we have originated on 9 and was moved from 9 we need to think and get rid of all the dependencies on 9 all the conceptual dependencies on line and think 10 10 10 we have great performance tools that should be used and that can be used to address the performance issues and performance does make a difference suffer he has a great streamlined UI it has nabek and all those things but fundamentally it's fast fast fast that's what users love now fast is not everything of course this functionality and one of the key is to add value of course to differentiate your application from your competitors and one way to do that is were dubbed and integrates the basic system services the basic system frameworks they give you an extra bit of lift or give to your application and you can focus on the higher level of your application the higher level functionality rather than having to reinvent the wheel it's more value with less code I hope you will enjoy our pre-release of Panther we work hard for it thank you [Applause]
