 Welcome to another edition of RCE. I'm your host Brock Palin and I have again Jeff Squires from Cisco Systems and the open MPI project Jeff thanks for some time again Oh, not a problem. Sounds like we got something interesting to talk about today. Yes, we have two people from Kitware who work on VTK the visualization toolkit And I'll let them explain what that is. So let me go ahead and introduce them first we have Will Schroeder and We have Barak Gavichi and again, they're both from VTK. So guys welcome to the show Thank you. Hi So can you guys? Introduce yourself a little bit and give us a little rundown on Kitware Sure, this is Will Schroeder talking. I'm one of the five co-founders of Kitware. I'm currently president and CEO We're a very technical company So I actually still write a little bit of code now and then and As far as VTK and where it came from is is that the question that we're on right now? Sure. Yeah, we'd like to know what that is Right. So VTK many years ago. I was actually working on Individualization group at GE corporate research and we decided that our current our tools at that time were obsolete So we decided to to do something different and we wanted to open source what we did We wrote a textbook We wrote some code to go along with it and that was in 1993 the beginnings of that and Then around 1998 the community of VTK had grown to the point where we realized we could support The software and make a living doing it and that's what we did Okay, so Will Thanks for that. Um, Bear, can we get a little bit of your history? Yeah, this is back of a GN. I'm the director of scientific computing at the kit where I've been here. Let's see for nine years I my main role at kit where it has been VTK development and also I'm the I'm the lead of the pair of you team here So I work mostly on the HPC side of things Okay, so VTK is you said that it's open source and that it originally came from GE And then you set up kit where to support it is VTK kit wears only product Let me back up a little actually VTK It was owned by the three people that wrote it myself Ken Martin and Bill Rensen It was never owned or sponsored by GE just happened We were working at GE at the time and we had permission and clear legal ownership of the software that we wrote on our own time And then yeah, we we got to the point where we wanted to do something outside of the GE research center And as far as kit where and its products we started with VTK, but we now have a whole host of open-source products including CMake Which you may have heard of many open-source tools and non open-source tools use CMake now for example KDE has adopted it We have a system called the insight toolkit, which is a medical image processing system we have pair of you that bear mentioned which is a super computing application and Let's see what else is worth mentioning We have an image-guided surgery toolkit. We call IGSTK. So there's a whole host. We've developed over the last 11 years Okay, so VTK though is still the cornerstone offering from kit where I Would say it's not the cornerstone because we rounded out the company to not only do visualization, but medical imaging Computer vision data hosting and publishing as well as software process So if you ask if you showed people our suite of tools, they would probably recognize CMake before anything else Which is a software process. It's a software build tool and then they would probably recognize VTK So we're trying to develop a Wide palette of tools that we can use to address scientific computing needs Okay, so we're here to actually talk about VTK. So we got that VTK is what you started with Can you explain in your own words? What is VTK and what is its target? The goal behind VTK basically is to take data of any sort process it and then produce something that Communicates what the data is about to a to an end user and so when we started off It was more about scientific visualizations. So you would take, you know a Simulation data set or an MRI scan or something along those lines something that you would recognize If you looked at a picture of it and we've since gone to the point of doing informatics or information visualization where you take more random sort of Abstract data like marketing demographics or a text document and you try and visualize that So the whole idea behind visualization is to take data and make it put it in a form that people can apprehend and perceive rapidly So is VTK an end user application VTK is a toolkit It's basically a lot of little components that do things like ingest data process data Convert data to a graphics layer and then render the data and also provide interaction with it So there's you know complicated 3d interaction widgets and also there's querying and analysis modules But there's a lot of little classes that float around that we put together in our applications like pair of you to Make VTK usable by the sort of end user Okay, so would a regular person stumbling across VTK it would look more like a library something they would use With Something else they wrote or someone else's tool then they wouldn't just invoke VTK Generally not although we have wrappers so we wrap into like Python or tickle And so you can actually run a little shell load of VTK and start writing little scripts that do various things Yeah, so if you actually had VTK, there is an executable in there. That's called VTK And that if you run that that will bring up an interpreter with what you can type you can start typing commands To create a visualization program, right, but you're right. I mean basically VTK is embedded in other applications What language bindings do you have available? So you mentioned I think tickle already and what were the other ones? Python tickle and Java Yeah, other people have experimented with other bindings For Ruby for example, there is if you search out there. There's a there are Ruby bindings for VTK And I even heard of people experimenting with Lisp Okay, so what just out of curiosity what language is VTK itself written in then see plus plus Ah, so you do is there a C++ binding as well Well, yeah, the toolkit at its core is all C++ classes And then we built into VTK. There's this whole wrap we call a wrapping technology Which basically performs a certain amount of introspection on the C++ class library and then develops the appropriate Wrapping layer into the various targeted languages like Python Yeah, very simple to swig Swig Swig is your friend. Yes. So I would assume this may be a silly question But I assume that you use C make to build the whole thing. Of course Yes It had to be asked of course I was I was going to say C make was actually original though up to build itk But VTK was the second Library that really started using C make this was nine years ago or so. Yeah, 1999 So what is the the target scenario that you're trying to address with VTK and you know pretend I'm an application developer am I writing an applicant, you know an HPC application That's perhaps parallel and running on multiple nodes Am I using VTK and then application or is it more commonly used and say a you know a post processing? Scenario where I've run a job I have my terabytes of data or whatever and I use VTK to look at the data after the fact I mean, I guess I'm asking how do people tend to use this? so the most common use case is as a post processing tool, but In in a lot of cases you can still use it, you know distribute it on the cluster because One of our main focus in the last ten years or so have been to scale the visualization tools with the simulation tools because People run into a situation where their simulation results got so large that they can no longer Visualize them on a single workstation even though it may have multiple processors So we have been building support for distributed computing into VTK So yes, despite the fact that you may be doing post-processing you would be you know, you would be doing a distributed if the data was large enough to require that and And if you want we can also talk a little bit more about We do have the ability of embedding VTK into a simulation code as well. Oh Yeah, so actually I'm interested in that so I'm an MPI guy myself So I'd be interested in hearing you know you said that you have support for distributed computing What do you mean by that? It's MPI based, you know distributed memory computing. So we VTK can load data Usually the data generated by large simulations is already either parted pre partition or written in a way such that the post processor Can load it in a partition way. So you can run VTK well, of course, I'm now in getting into more kind of the application layer and Into the realm of applications like visit and purview So if you were running one of these applications, you would actually run a server that runs distributed That will be probably connected to a client that the user interacts with And the server would load the data in a distributed way and it will be running MPI and Would do the necessary inter-process communication to generate, you know the images and then deliver those to the client for the user to see So on that same kind of note I've used your pair of you product some and also we had some Guys from a national lab who made a product that relied on VTK. I'm called visit When they are doing to distribute memory is that all being handled by? VTK like that's where pair of you gets its ability to Visualize data multiple nodes is it's through VTK so In that pair of you and visit have slightly different approaches In that pair of you does use VTK to do all the distributed computing Whereas visit has its own layer to do the distributed computing and they actually use VTK as more of a serial Processing but for in the case of pair of you All the server is doing is to essentially run a VTK application to build VTK visualization pipelines pair of you provides a little bit more functionality in that They have used the one that's providing the client server communication So that when you interact somehow with the client We need to really serialize some commands and send them to the server and that's a really the pair of you layer But is it's it's really intertwined And all of the tech lot technology is really based on VTK for example VTK a pair of you provides just as some extra libraries that are in the same style and then uses the same sort of Wrapping technology for example to provide the client server communication then as myself if I wrote some large distributed memory parallel scientific application I could take VTK and Kind of wedge it in there so that I could Basically visualize my application as it ran that's correct, and that's actually one of the Active research projects that we're working on currently Is to be able to do that specifically with some of the common large data? You know simulation codes that generate large data The idea there is that you don't have to save the full-scale data to disk and then load it up on a separate Cluster to visualize it, but to actually do it in the same in the same run and then save up to the disk Smaller the data sets for example geometry that then you can visualize with either a Single workstation or a smaller cluster than the one that you run the supercomputer I mean the simulation on the geometry would be something we call extracts and it might be a streamlined or a Contour surface something that's much much smaller than the original data So what are some of these applications you've done this with is there anything out there that? Someone working at a lab or at a large HPC site might have ran across before that there's people have used VTK with before So we are working with several simulation codes The one of them is essentially a hybrid code developed by by the army and And I probably cannot get too much into the specific of the of that code In another there's another code that we are really close to the Rensselaer Polo Technic Institute here. They are probably 20 miles from us So we're collaborating with them and they have a CFT Computational fluid dynamics code that they are really running on on really large Systems, you know going up to 100,000 cores and we're working with them on integrating VTK with their simulation that their simulation code is called pasta So if you're close to RPI that means you did escape Schenectady, but it sounds like you're still in New York then I Actually do live in Schenectady Okay So let me ask a little further question here about some of the nuts and bolts of VTK itself So what kind of Operations are available? What what does an application programmer do with it? Do you do image transforms or or format transforms or say take this data and turn it into a graph or you know What what are the core operations that are available in VTK itself? Okay? So the the core model there's an execution pipeline that runs behind What VTK does in a typical application and the execution pipeline is built by combining these so-called Filters together so you might have a filter to read data a filter to an extract an isosurface a filter then to to render it I'm using loose terminology here But you get the idea that you're stringing together a bunch of if you will algorithms that do various tasks to eventually Either write the result to disk or display it on the on the user screen so What people tend to do with VTK is you have to first of all understand there's hundreds and hundreds of filters You're gonna find the right filters to combine to do what you want And so that that's part of the use of VTK the other part is that VTK's it has supports a very rich Set of data structures, so it supports images. It supports structured grids Supports meshes on structured grids if you will it supports more complicated data sets like AMR and and sort of these hierarchical data sets So our algorithms are written to handle these various types flowing through the pipeline Okay, and so if I had to draw a crass distinction Would it would it be that the VTK is kind of the number cruncher side of it? And Para view is the the visualization the actual display side of it. Is that accurate or no? I think what's different bear can weigh in this as well, but I think VTK provides all the pieces to do the work that you're talking about and Paraviews puts everything together into a very friendly GUI including supporting interaction analysis interrogation Yeah, I mean I'd say that Paraview essentially puts a user interface So that's one thing that it does and the other thing that Paraview provides Is this client server functionality, but everything else is really handled By VTK going all the way from reading data to disk I mean from this to generating images that you would display on on the screen So interacting with the graphics card, that's VTK's job loading data and processing it. That's VTK's job Paraview is mostly the driver You know so that allows the user to visually create the analysis pipeline and then to see the results afterwards Okay, what what platforms does this support? VTK pretty much runs on anything. Yeah, it goes I would say from PlayStation to To essentially all the supercomputers that you can think of So anything that's in anything that's in in between pretty much We even at one point ported VTK to Windows CE. I believe we did. I don't know if the port is still alive But we even did that So do you have an iPhone app in the works then? No, not currently. I think that iPhone the way we would hit iPhone. It's probably more a client server Scenario where you wouldn't run VTK on the iPhone, but you would probably be fetching images and stuff like that VTK is not a small library and I would not want to be the developer to try to cram it into something like iPhone So when you say you support all kinds of these different platforms all the way up to large supercomputers and whatnot Do you have you know any GPU specific codes since that's kind of the computational? Fad of the day, I suppose that you know, you can get really really nice computational rates for certain kinds of problems and do you support other specialty architectures you mentioned the PlayStation Do you have cell specific ports or anything like that? Let me answer that by saying VTK has an abstract factory Mechanism for instantiating classes. So often we will instantiate a class Which has specific code in it for driving a particular device whether it's a GPU or something else and we We do support that we also have specific code in VTK for particular GPU related activities. So and then the community around VTK has done many of these things you allude to Yeah, and I mean as a group we tend to be At the core a little bit conservative in the sense that we don't immediate the jump on the in the latest Research topic or you know the latest technology but we have We have been exploring the idea of integrating GPU based processing Into VTK. I mean we of course are using GPUs for doing rendering things like you know from polygonal rendering to volume rendering Those are things that we have been doing for a long time But the general purpose GPU computing is probably what you're alluding to We're being a little bit more cautious, but we are definitely building Example algorithms and algorithms that we are going to be using into VTK And as far as the cell goes We did not do the port, but I believe that it was mostly running on the VTK was mostly running on the power PC chip Which is what controls the cell processors, but not the cell processors themselves there are some research efforts that are going towards that because the number one supercomputer Right now is the Roadrunner at Los Alamos And that is essentially a bunch of cell processors and there's definitely effort right now into running VTK on On the Roadrunner mainly to actually use the cells to do the rendering to ray tracing So actually with the rendering topic when I asked VTK to finally render some 3d mesh say Completely you know with surfaces and everything does it just rely on GL or you know on DirectX What about on systems where I don't have hardware GL available? Does it use something like software Mesa? Yeah, so the way VTK has been written we have these abstract object model layers that I mentioned previously And the rendering system is similar in that you create a scene that consists of a renderer render window Actors lights cameras none of these is specific to a particular rendering library When the sys when you instantiate one of these things It basically sniffs around under the hood and instantiates the appropriate subclass which might be open GL actor open GL light And then under the hood all this stuff flows depending on the graphics layer At one time we supported multiple graphic subsystems open GL X GL and so on and so forth But right now we're pretty much settled on open GL with the opportunity if you desire to support something like DirectX We could do it if we wanted to but we haven't seen the need as of lately and Yeah, getting back to your question about Mesa. We do support that Yeah, and actually On the software side of things We are also adding support to use ray tracers So, you know, that will be an alternative to Mesa slash open GL Just directly use pure ray tracing for the purpose of rendering So that will again be running, you know And in completely in the software and would be just portable to any any cluster that does not have graphics cards And this ray tracer will support to distribute memory model. Yes awesome, I Would love that So back at the beginning you said something earlier about VTK It has its own file formats It seems why does VTK support its own file formats? We well actually it has more than one file format. It has a couple So we wrote code originally in 93 we started with something extremely simple Since that time we developed some XML file formats Now we never expect to replace what's out there, but there are certain advantages for example We can easily random access and pull out pieces of data through these files And we also wanted to provide implementations for certain types of data For example unstructured grid hierarchies or AMR data that would be more accessible For researchers to read and write But we also have you know probably close to a hundred different readers writers We're agnostic to file formats, but at the same time there are certain applications that demand certain performance and Capability that at the time we wrote them didn't really exist So if these file formats are an XML does that mean they're all ASCII a lot of sites now We're using things like net CDF and HDF 5 and other these binary formats You said you're agnostic, but using something like xDMF or something to make it really easy to pull in these binary formats to Yeah the to answer the first question is that the It's a hybrid in the sense that You can actually append Binary data to these XML file files So the parser will read up to that point and the rest could be a binary It could be the row binary or compressed and it's chunked usually so that you can do random access relatively easily into these files The in the other one the other format that you mentioned xDMF is and that's something that We also support And that that has a little bit of different Approach in the sense that that separates the metadata Into the XML file And then the the heavy data as they call it Into another file and they actually the number one format that they'd support is HDF 5 and And of course we you know support other variants of variances of HDF 5 and net CDF And other other binary formats. I mean the file format is I mean I could go on complaining about it for a long time because for us Post-processing Software developers, it's it's really difficult because we have to provide support for a lot of different file formats because it's really Hard for people to come and agree on a single file format that will work both, you know for serial In parallel parallel applications So yeah, we we spend a fair amount of our time dealing with IO issues and Writing readers and writers that will perform well in different platforms and things like that So what would you say is is the value add of VTK, you know what makes what makes it unique what makes it great What makes me as an application developer want to use it? I? Think there are several things that I could mention. I think first of all its sheer size and capability It's open source that combination together sort of sets it aside from anything else. I think the design is relatively Good, it's simple people have a simple time picking it up and learning from it And so that means people tend to embed it in a lot of applications We've been talking about HPC, but VTK has a huge presence in the biomedical computing community Also VTK has a nice combination of features for example We have this informatics or information visualization component with the scientific visualization That's a very rare thing. I'm not really sure any large system has that sort of combination And then also the interaction with it with that we call 3d widgets And some of the query operations and so on make it a very potent platform on which to build these interactive 3d applications Okay, and and taking that on a little bit of a tangent. We've talked a little bit About the scalability and whatnot what? It's kind of hard sometimes for open source developers to say, you know How many people are using my product and how exactly are they using it and so on but you have Solid customers and things like that and groups that you work with and applications that you work with What's the largest data sets that you have heard? VTK or even pair of you used with just out of curiosity So I think the the largest this is I mean this as you said this is hard to really find out for us But I think that the largest visualization done Is recently by the visit folks and you know, you guys talked to the visit folks before But I think that this happened before you had that conversation And they have not published this Officially yet, but they had some announcements. They have run Visit on up to hundred and fifty thousand cores And and I'm not sure about the data size, but they are talking about one trillion cells They are probably reaching the the petabyte scale cool So that that you know We routinely work people with people that use Visit and pair of you own hundreds to thousands of cores to do, you know to do terabyte size Visualization but the the visit guys really wanted to push the limits to really see how scalable Visualization especially kind of this this sort of VTK based pipeline visualization Is scalable And they I and I think that as I said I don't have the results on the paper yet But I think that they have demonstrated that you can really make it quite scalable and The next step is really for all of us is really tied closely With the simulation codes so that we can run in situ with them and Make use of these these architecture, you know scale with the simulation codes to you know hundreds of thousands of cores So what kind of things do you have in the software to make it? Scalable, you know as an MPI implementer I'm well familiar with many of the dirty tricks we have to do on the network side You know to make things scale and make it just work and so on but I would imagine you're you're very concerned with you Know computational architecture and buses and memory locality and things like that. What what kind of stuff do you guys have to do? So on the parallel scaling of things we have a great trick in the sense that we actually don't do a lot of Interpreter process communication because visualization a lot of the visualization algorithms are Sort of embarrassing the parallel and there's there's maybe a layer of Cells that that you need extra to kind of generate results that are Processing in a number of process independent, but beyond that there are a lot of algorithms that will just run fine If you just chunk the data and then run a run it Completely distributed without it doing any communication the communication really happens at the end When you need to bring this data together because the user is going to see this on one window And you need to either bring the geometry together and render it on one graphics card Or you need to render this in a distributed way and there are Various ways of doing this and then bring the final result together The most common way of doing it is that you let essentially each process do its own rendering And then you do what we call sort last compositing and that is you compare Images generated by the different processes and go pixel by pixel And you look at what we call the Z buffer and essentially the Z buffer controls Tells you how far that particular pixel was from the from the camera And then you you essentially compare these two images and pick for the opaque case the pixel That's closest to you, but you have to do this for example in their case on up to 150,000 Processors and you you have some binary tree that that you build and you keep doing this comparison And that's where you really hit You know scalability issues you have to make sure that You you you use the right MPI calls to transfer the data and you also build the right Communication mechanism and the right tree to do that fast Of course beyond that we have to look at the you know serial scalability things that you know Using the cache optimally and things like that and that's really not that different than any other Simulation code development that you would be involved in So could I use VTK and actually hook Displays right up to the cluster and instead of having it composite all this into one image just Composite like a subset of it and build like a tile wall just using VTK not having to use anything like chromium Yes There is There is a library that the sandy of folks send your national labs folks developed called iced tea The library itself is in pair of you Repository, but it's really not dependent on in any way on pay we so you actually visit I believe uses it now too so you can take iced tea and combine it with VTK to drive a tile display without Relying on chromium so you would actually be running distributed and It's a more complicated compositing problem because essentially for each tile You have to potentially composite the results for all the processes what iced tea handle that transparently and then you can then render to a tile display and People have done this on quite large tile display. You know it is routine for people to do this on six by four Tile displays and get interactive rendering performance Interactive that's pretty impressive. Yeah, we're talking about probably 15 frames or frames per second to 20 frames per second So on a different idea you mentioned that you thought VTK You had this what's relatively simple to use and had this nice class structure and you could you know even use it from tickle Is VTK something that I may find simple enough to use and like an introductory class on 3d graphics and image manipulation Yeah, the the answer is yes, I actually have taught as an adjunct at at Rensler and We teach an open-source software practice course right now and we use VTK and some exercise VTK And the students generally find it fairly intuitive to use and you know part of it, too Is that the documentation? There's a couple books that go along with it and there's online documentation and tons of examples so it's very easy to sort of get into an example look at how the pipeline is constructed and and Generate and generates images and then tweak play with it and do various things So it's very easy to sort of get the basics and get up and running. Yeah, and actually the VTK Book is used as textbook in various classes, you know under undergraduate level Computer science classes that teach computer graphics So it is you you know it is likely that you actually if you were to take such a class that VTK is part of it Okay, and also how easy is it to extend VTK? What if I wanted students to write a very simple filter and add it to VTK is that pretty easy to do or is that Rebuilding everything. Yeah, certainly. I mean you can sort you can derive classes easily if you don't want to compile anything There's actually in the interpreted layers. There's There's a sort of classes with that define sort of virtual methods that you can fill in through say a Python a Python Function or a tickle function So it's very either there's multiple directions to extend it ranging from having to compile code with By driving classes to in the script itself or a Python language a writing little functions and binding them into the library You can definitely load in Shared libraries as plugins and overwrite existing functionality or extend functionality. That's also support So you've mentioned open source a couple times going off a little different direction here What is what is your interaction with the you know the open source community? You've mentioned a couple of different ports and things like that are are the main developers at Kitware and you kind of accept patches or are there other random authors out there? How do you guys do that? We're an open-source company. So most everything we do is open and we engage and collaborate with our community We certainly accept patches from whoever develops good code Now depending on the nature of the change Sometimes there's very specialized things, you know, we have to sort of say well It doesn't belong in a more general purpose toolkit, but whenever possible. We try and incorporate Editions corrections Changes to the code base if it makes sense and if the the VTK repositories is actually if you look at the the users People that would write access to that repository. It's it's a large group of from variety of institutions We very closely collaborate with the Sandia labs and the Los Alamos labs And they they have right access to the repository But we also grant right access to essentially Anybody that demonstrate that they are good coders and that will have positive contribution to the repository So let me ask a question that I like to ask about their open-source projects because I am Cisco's representative to an open-source project and and it's a it's a difficult thing to manage an open-source project when you have a lot of different organizations Working on a common code base, you know people have similar but different goals and things like that How do you manage the beast of of of these open-source projects that you guys kind of sponsor and host as a company? Well the answer varies depending on the project So projects like VTK were probably The great majority development occurs a kit where It makes it a little bit easier because we can sort of talk amongst ourselves and make sure the right thing happens A project like the inside toolkit ITK is a bit more difficult because the community is more dispersed and What we do to manage that project is we actually have a open journal That requires submission of of larger changes and the submissions also include data and source code Which is then compiled and checked and evaluated prior to acceptance So depending on the project we either have a fairly lightweight thing which is more communication amongst the developers here kit where To a broader more formal approach where we actually require people to Provide enough background so that we can evaluate a pending submission And we're also, you know, we're not as big as a Linux community obviously We're getting fairly large and we're starting to look into alternative methods for a lightweight management structure to sort of control various subsystems in VTK and We should be talking and developing something in the next six months or so to address that Related question to this Um, it's really influences management style, but I'm always curious as to what version control system people use So what do you guys use and why? Well, okay, so VTK the coding was started in 1993. We're using CVS. It's not our favorite Since that time we've gone to SVN on various projects And we're starting to also use get to some extent. Yeah, so VTK is still VTK and pervy are still Hosted in CVS and actually there is a There is a technical reason That we still do that in that I think we need to change our workflow really to move out of what we're doing currently and the reason is that The pair of your repository actually does include the VTK repository So when you check out pair of you you get out you get VTK as well the development version of VTK as well and that's the kind of workflow because they're really the development of VTK and pervy are really intertwined and The way that was originally implemented was essentially in a as a server side sim link from You know the pervy repository into the VTK repository and there are Really no direct equivalence of that in in other version control systems There's SVN has this SVN externals, but it's really it's not the exact same thing and it requires that you change your Workflow and that's that's something that actually in the next Six months to a year or so we're going to have to bite the bullet and really force the community pair of you community really to To change their workflow around that So two questions first Exactly how large is VTK either in terms of number of lines or number of functions? I'm giving a ballpark here. I think it's around one and a half million lines of code Okay, I mean there's there's there are Open source web websites out there that kind of monitor the sort of stuff You know we'd have to go to what check one of those but I think that's the kind of a ballpark for how big VTK is Okay, it's about 1200 to 1400 classes, I believe Okay, so to test this thing because you have this pipeline model on and there could be all these different interactions between different filters How do you test and verify that all these filters work and interact correctly? Oh? We love this question We love this question because one of the dings that you often often get especially in the early days of open source was oh You know open source a bunch of cowboys running around just hacking code Well, we have to address that because we're dealing with some very serious customers ranging from national labs to folks doing oil and gas Exploration and so that's why as a company a kit where we focus so hard on our software process And we've developed tools like C make which along the way brings C test and C dash which are testing client and server So to make a very long story short basically what we do we any project a kit where we write this core software and With tests to go along with it and so we sort of follow a model of test driven development and agile programming So as we develop our software We continuously evaluate tests that have been written as a software is being developed Test results then are gathered together by the C dash server and displayed on a on a web page Or we call it a dashboard and then our all our developers located around the world can look at the dashboard And they can see the results of testing on in the case of the DK multiple dozen different clients Platforms ranging from different os's to different hardware to different, you know 32 versus 64-bit platforms And these tests run not only nightly, but we also have a continuous builds During the day so that anytime anyone makes a change the repository It compiles a system run some tests and shows a result and we also have experimental builds So that people can play around with changes promoted to the dashboard without necessarily committing it You know completely to the repository So we had this very thorough Process that causes sort of a feedback loop to to occur between the developer the repository and the testing systems So if you were to for example commit a code that Breaks the built in less than an hour you will get an email saying that hey you broke the dashboard What we call those nasty grams you will get one of those telling you that you did something wrong Yeah, as a developer of an open source project myself. I could say that those are just vital We have something similar although it sounds like not quite as complex as yours in the open MPI project But you know, we do it only once a day Instead of every hour, but you know, we'll get those nasty grams in the morning like George broke the build You know and things like that, but it's it's critical You got to have that stuff to you know maintain the quality and have developers all over the world So, you know, it's great. I like to hear it when other people have spent large amounts of time and energy into testing because it's just It's so important. Yeah, so we have Projects going ongoing with the folks at Sandia the Trinos and Sierra projects They're large numerical computing systems toolkits, if you will and they're adopting our our testing process And the thing that's cool about it is like I developed most of time on a Windows platform And I can check code in and it then will be tested against a Mac or a Linux box And even though I don't have access to the hardware on a day-to-day basis The dashboard tells me you did something that screws up this compiler on this piece of hardware that you don't own And often I can figure out what went wrong and I can make a correction on my system check it back in and fix it Very rapidly, so that's pretty nice, too Cool So what are some upcoming features you are coming out in VTK and also a pair of you in upcoming releases? I would say one of the things that gets me most excited is this ongoing marriage of science scientific Visualization and informatics. I think this is really important to the future of visualization And then bear can talk more about the execution model, but we're also addressing Execution models that will run on thousands of cores So I mean we have a few projects that some of which directly contribute to the releases and some of which actually are going to be independent projects, but a few things that we are looking at one is essentially running the visualization pipeline In a multi in a multi-core system in a multi-threaded way. I mean VTK already supports Multi-threaded, you know shared memory parallelism, but this is a kind of a slightly different idea in the sense that The idea of distributing different tasks across the visualization pipeline to different Processes of different cores and that's that's a research project. That's on ongoing with the Folks from University of Utah the ski group there And another thing that we're focusing on and these are not necessarily things that will be in the like next release another thing that we're focusing on is being able to because On the simulation side the things are going to pedascale and the visualization systems are not really going to scale To that in terms of buying this clusters that actually have graphics cards on them That now are going to be hundred to thousand times the size of what they used to be It's just not going to happen because just the people that do not assign the right budget to do that so we are putting a lot of effort to To provide more scalable solutions so that you can actually visualize these tremendous large data sets using either small resources and that would be Things like multi-resolution Analysis so that you can actually loading a subset of the data as you need it All the way to what what I was referring to originally the Institute processing where you're linking essentially VTK together with the simulation code and running it on the same distributed job as the as the simulation Another area that warms my heart is the 3d widgets and interaction capabilities in VTK This whole area of being able to interact with data which includes not only sort of fancy three-dimensional geometric representations of widgets But also some of the probing and data extraction that you want to do interactively So that area really turns a visualization system into a visual data interrogation engine And that's a very interesting place as well Cool now one thing I think we neglected to ask way back at the beginning is what license do you guys distribute all this stuff under? BSD Okay, guys. Thank you very much. This has been good Before we leave though come can we get the VTK website? And if there's like a mailing list and online documentation, where's all that located? Sure the best place to go is vtk.org and you'll find all the links to mailing lists and Doxygen documentation and so on there and if you need commercial support you go to kitward.com and That's pretty much it Okay, well, thank you. Um, this show will be up soon. So thanks a lot guys appreciate the time. Thank you very much Thank you. Bye. Thank you. Bye. Bye. Okay guys