Okay, so the theme of my talk is basically going to be better engineering and science education and I am going to make a case for the programming language called Python, okay. So my name is Prabhu Ramachandran, I am from the Department of Aerospace Engineering at IIT Bombay. I will give you a brief introduction about myself. I was basically, I have been involved with the free open source community in India for a long time. So I started off in 1998 and a friend of mine and myself actually founded the Chennai chapter of the Linux India group. So I have been involved with that community for a long while and it is actually a very active community today, the Chennai chapter of Linux India. I also worked on opening, on developing open source software, there is a package called Mayavi which is something that I created and I still maintain and develop. In addition to several other open source packages like VTK, TBTK, SciPy, all of these are Python related packages and I will explain to you why I am so fascinated about Python. And I also teach and do research. My chosen areas are computational fluid dynamics and I basically simulate fluid flow problems. So there is good amount of mathematics and computer science involved and I also happen to teach aerospace engineering courses like flight dynamics one, flight dynamics two and things like that. Before I move on, I am going to acknowledge the support of the National Mission on Education which has actually funded a major part of our initiatives at IIT Bombay for the open source effort. So this is something that I will talk about towards the end as well but I would like to acknowledge the support of the National Mission on Education in the MHRD project upfront. Okay, so coming back to our theme. So what am I trying to say? I am trying to say better engineering in science education and I am saying that Python is a good choice for this. So if Python is the solution, what exactly is the problem that we are trying to address? So this is going to be the theme of my talk. What are the motivations as to why Python, a programming language like Python is suitable and why it forms the best solution right now? So the outline of my talk is as follows, I am going to give you an understanding of the need for Python, why it is an important choice. What are the tools and capabilities that Python is capable of giving you? And then talk about a little project that connects all of us as teachers to Python. It is called the Fawcay project, I will talk to you about that at the end. But before we begin, how many of you have used Python or heard of Python? You have heard of Python. How many of you have used Python? Okay, so reasonably sized number of people have used Python. Turns out that Python is actually used by some very large companies, okay. For example, Google is a heavy user of Python. In fact, the creator of Python, the language and some of the big dadas in the programming language actually work at Google. So Google is a massive user of Python and that is one of Google's data centers. So at this data center, they actually have a huge farm of computers. Some of you may have read about the way they run things. They actually have nice clusters. They are huge clusters, probably the largest clusters in the world, managing all of our Google searches and things like that. So they are heavy users of Python. So how many of you recognize this man? Or not man, okay. So he's Yoda, he's from Star Wars. The people who make Star Wars, George Lucas, the company behind that, Industrial Light and Magic actually use Python internally, NASA uses Python heavily, okay. In addition, so I've basically said companies and research organizations use big named companies use Python. What are the applications that we can think about? Forget that. So there's basically a lot of these websites, for example. You can set up a website, a web framework for using Python, okay. Basically, this is called Plone. And Plone is a web framework where you can actually, it's a content management system. How many of you are familiar with content management systems? Okay, so basically you can put up content, have people add to the content, edit content. So Plone is one such tool. The previous one I had an image, it's called Django. It's again a web based product. Red Hat, how many of you have heard of Red Hat? All of you. So Red Hat again uses Python in all of its configuration scripts and also setting up the software. In addition, you can create games with Python. There's something called PyGame. You can write little space invaders like games. It's a very active project. So basically you can see there's a wide spectrum of users. There are people who do things like websites. There are people like NASA who do things with science and engineering, putting man in space. There are people like movie makers. There are people like Google using. So why do we need Python? What is the motivation for all of this? So if you look at technology, the way it's evolved, if you look at what's happened from a car to an airplane, from a car to an airplane, there's probably an order of magnitude speed difference. So cars travel maybe about 100 kilometers an hour on the average, and a plane on the average travels about 1,000 kilometers an hour today. And we've seen that this is revolutionized travel for us. Travel is no longer the same. We can fly in very short notice from here to Delhi in two hours. So imagine what has happened in the context of computers. Computers have actually changed by nine orders of magnitude, not one. So which means if cars had evolved the same way as computers, cars would be as small as a matchbox, would take us to the moon on one liter of petrol, and cost us 50 rupees. So basically computers have evolved to a point that they've completely changed everything. They've changed the way we do science. They've changed the way we do engineering. They've changed the way we solve several problems. Now I can actually ask a computer to do lots of drudge work and solve problems, which I couldn't do 50 years ago. In addition, unlike 1970s, when you had to make sure a program was really, really well written before you actually submitted it because it would take four hours for it to compile that program, now I can instantaneously run things. So what is important now is because the computer is so fast is that developer time is important. It's no longer important that you write the most perfect program. It's no longer important that you write the fastest program because the computer is fast enough. Secondly, the way we look at numbers. We don't compute when we do science and engineering. We don't compute numbers just for the sake of producing numbers. We are trying to get some insight into some physical problem. And a famous numerical analyst, electrical engineer called Hamming, how many of you have heard of Reed or Hamming codes? He's the same Hamming. So he says that he has an excellent numerical analyst as well. The purpose of computing is insight, not numbers. So the idea is the approach that we use for computing has also changed. So the implication of this is that we need a language that has both power and flexibility, like a gymnast. In addition, we have to deal with diverse fields. We are not just talking about computer science. Now we have science and engineering where everything is actually becoming cross. You have ideas from different fields coming into the other fields. And the fields are very, very diverse, from medicine to chemistry to neuroscience to rocket science. So you cover the whole spectrum, all of these require the use of computing. So in order to handle this, we need a toolkit that handles diversity. Very specifically we need a tool that's capable of doing numerics, that's capable of doing symbolics. In addition, many scientists actually use the computer as an exploratory tool. So supposing you have some data, you want to immediately plot it, which means I need to exploratively explore that data and then decide what's happening and then proceed. How many of you use MATLAB or heard of MATLAB? So the reason MATLAB is such an attractive option is simply because it provides an interactive environment. I can create a matrix, invert it, look at it, look at the diagonals, plot it, play around with it, look at the spectrum, all of that. So that's the power of an interpretive exploratory programming tool. We need something that's high performance. We also would like to do parallel computing because some problems are really, really large and we would like to marshal the resources of a large number of computers. We also want to build user interfaces. It's no longer enough today, in this day and age, for us to build little command line utilities. We want to build tools that can actually produce a user interface. We also want to leverage the web. If a tool is made available on the web, it makes a big difference. So in addition, there are a whole host of other tasks that a normal user of a computer needs to be able to do. So again, I'm just showing you examples of interactive exploration. So here, for example, I have an interpretive session where I'm playing around generating something and producing some plots, exploratory. I want to do symbolic computing. So look here, if you look at this line here, I have the derivative of square root of sine of x into tan hyperbolic x with respect to x and it's spitting out the actual expression. So I'd like to be able to do things like this, symbolic differentiation, integration and things like that. I'd like to be able to make three dimensional plots interactively and explore the data. I want high performance. I want to be able to use parallel computing. I want to be able to make user interfaces. And I'd like to be able to make a web page. So again, we need all of these tasks. These tasks need to be done by the modern engineer or scientists, no matter who they are. So the point is, if you use a specialized language like MATLAB, it's obviously not enough because MATLAB can only do one set of these things. For example, it can't do symbolics. For example, if you want to get something, you can't set up a web framework based on MATLAB. Building a user interface can be done with MATLAB but it's a big pain. So you need, you have diverse needs and what I am trying to show you is that Python is that choice for these diverse needs. So why Python? Why not something else? Why not Ruby or something else? Well, the answers are the following. It's very easy to learn and code. So I'll show you some code towards the end and you'll see that it's actually very readable code. It's scalable in general purpose, which means all of the tasks that I've been talking about up to now can be handled with Python. It's high level, which means I don't have to talk, I can talk up high level data structures, which is fundamentally important if I want to do any serious computing. It's modular and object oriented, which means I can break up large problems into little small chunks. That's the whole goal of modular computing. And it's cross platform, it runs on this Mac, it runs on Linux, Windows and you name it. Actually it runs on several Nokia phones and N70 series Python runs on that. It's also open source. In addition to this, it has a very powerful interactive interpreter. I'll probably show you a live demo in a little while. It has extensive libraries to do pretty much anything you can name. And because it's interpreted and has extensive libraries, it allows for very rapid application development, which means I can quickly put together an application using existing libraries in Python, open source libraries. And finally, the most important thing for scientists and engineers is that many people actually have legacy codes in C, C++ and FORTRAN. And it's relatively easy to interface to those using Python. It's not trivial, it takes some effort, but then it is doable. And thereby you can actually call your FORTRAN or C++ or C routines from Python, which now lets you marry the powerful high performance language underneath to a very elegant, highly effective programming language at the front. So Python, in my opinion, fits these requirements that we had that I've listed out to you perfectly. So let's look at the tools and capabilities that Python offers. So the first thing I'm gonna show you is an interactive interpreter called Ipython. So this basically, if I say Ipython minus PyLab, I can actually create a little plot in two lines of code. And then look at this command. I'm saying cd, work, workshop, fossey, something. So which means I can actually use it as a shell. So it actually has convenient features where I can do programming and also common tasks that I need to do as a shell user. And then I can import existing modules that I'm interested in. So what I'll do now is I'll show you a little quick demo of this. So I'll start up the interpreter and this is Python itself. So which means I can write Python programs, I can import modules of Python that I have written elsewhere and bring them in to this environment and start doing things. So for example, I can say x is linspace 0 to 2 star pi, 1000 points. So I'm creating between 0 and 2 pi, 1000 points. And now I wanna plot some function, for example. I can easily plot it. I'll show you that later. But now if I wanna look at what x is, I can do x.tab and it'll show me all of the methods that x has. So let's say, let me pick one of these. Let me pick x.nonzero, okay? So x.nonzero, I wanna know what it is. So if I do question mark, x.nonzero question mark, it actually shows me the documentation for that. So it's an interactive interpreter which gives me tab completion which I can type easily. I can search through my previous history. I can do a CD command and change my current directory and also do some science. I will show, I'll build up what I'm gonna demonstrate to you as I go along. But this is an interactive interpreter which is pure Python. So if I wanna create, say, a list. L is a list of, say, one, two, hello. I could do that. And L is no list object in Python, which I can play with. So basically, it opens up a programming mechanism that is interpreted. So I can easily learn, experiment, and do my, whatever calculations I want to do on the live interpreter. Now in addition to this basic interpreter that I was talking about, there are libraries to do numerical computing. So two of these are numpy and scipy. What numpy does is it provides a nice powerful array structure. So if you recall, I did linspace, which created an array. Now if I say sine of that x array, so let me do that. When I do y is sine of x, in one shot it has taken sine of all of those values. I could have chosen a million points, by the way. And it'll just do it instantaneously because the numpy library is actually written in C and it's very efficient underneath. But in Python, I can use it very conveniently to do rapid little calculations like that. So numpy provides this powerful array data structure that I can explore. So for example, if I print y, it's an array. It has a lot of values here. And actually it's a sine of the values here. In addition, there is scipy. So numpy just provides the basic array and manipulations for the array. Scipy itself has whole suite of other things you can do with it. For example, linear algebra. So if I have a system of equations that I want to solve, scipy will let me do it. I can do numerical integration, quadrature, Fourier transform, signal processing, special functions, statistics optimization, image processing, ordinary differential equation solvers. I will demonstrate for you ordinary differential solvers later. And linear algebra maybe I'll show you right now. And underneath scipy uses a whole suite of existing algorithms that are implemented either in C or for time. So they're very efficient, but extremely convenient to use. So would you like to see a demonstration of linear algebra, for example? Put that P of relevance. So let me create a matrix now. So I'll say A is, so first let me import. So the way you import a library in Python is you say import numpy. I get numpy now. All the numpy functionality is now available in this module called numpy. So I can now say A is numpy dot, I want to create a random matrix. Say 100 by 100 matrix, would that work? So random dot random. So now it's created a 100 by 100 matrix of random entries, one line of code. Now I want to create a right-hand side. I want to solve Ax equals b. I would like to solve A times x equals b. I want a right-hand side. So let me create a random right-hand side. So I'll say b is, so I have b. Now I want to solve this. So let me import scipy. So now I have leanAlge. I have imported the linear algebra module inside scipy. I can ask it to say, so now I don't know what to solve. So I need help. What should I do? I will simply do leanAlge question mark and look at it. And it shows me what is the documentation available with the linear algebra module. And I see there's a solve, right? So let me see if I can use the solve. So I say leanAlge dot solve, question mark. Solve the equation Ax equals b. That's what I'm looking for. So I say solve, A, b, let's say solution is that. My solution is there. So I have my solution, okay? So very easily I can create a matrix, solve it with a multitude of methods. I just showed one little method there.  Ordinary differential equations I will come to later as I move on. The important thing for most scientists is not just those numbers, as I said. The important thing is insight. So you need to be able to plot your data, right? So there is a library called matplotlib, which lets you plot, make really sophisticated looking plots again from Python, okay? So again I will show you a demonstration. This code that you see on the right-hand side completely generates these two pictures, okay? I'll show you a live demonstration of this. So let me say I wanna see x. Remember I created x from zero to two pi. I wanna plot x versus sine squared of x, right? So I can say plot x sine of x squared, sorry. That's more interesting. Sine squared of x is not that interesting. So if I do plot, it shows up a nice little plot here for me, okay? And if I wanna look at a grid, I wanna zoom in, I could zoom in, so on and so forth. So now you see that the important thing here is that my interpreter is still active. So if I wanna create a new plot, change my data plot something else, I can always go back and do it. And all of this is again Python. So which means I can leverage all of the power of Python and yet do my little plotting. So I'm showing you several other demos. I don't have the time to do live demos of each. So here is a plot with standard error bars. So each of these is an error bar in x and y. You can see log, log, semi-log, and log, log plots here. Bar charts, pie charts, scatter plots, okay? Histogram plots. You can do polar plots and you can also make things like that. That's called a quiver plot, which means you show arrows, maps. So these are the kind of things you can do with matplot. So now you put together all of these like I just showed you. I can take, I can do all my numerical calculations, right? And then I can also do plotting of various types. And I have the interpreter that I can work with and create powerful programs with this. Now in addition to this, as I said, many researchers actually have high performance code written in C or C++. And to use those, you need to interface the language to those, okay? So it turns out that you can't do this. So what I'm gonna show you is a demonstration of some of my own code. This was actually implemented in C++, but then it's wrapped to Python. So I can call these things from Python and produce simulations that look something like this. So what's happening is there's a box. Inside the box, there's this little plus sign thing which is spinning. And as it spins, it's releasing some particles which I'm tracking in C++. But I'm now plotting it and generated a movie out of this from Python, okay? So basically these kind of sophisticated codes written in C++ can be interfaced from Python, just trying to show you that. So you want more simulation. So this is again a code that we are currently working on. And this problem is basically, there's a big vessel. You see the box? Inside the box, you see that blue thing, that's water. So it's like a dam. So imagine there's a dam and the dam breaks. What happens to the water? So it's trying to simulate this. So this is again a solver that's actually implemented in Python and a high performance variant called Scython together to actually produce simulations of this kind. So you can see that it's able to simulate some of this. This is not live, of course. This is taken several hours to run on a computer. And I'm just showing you the movie made out of it. The visualization was made again with a Python-based tool. But the point I'm trying to drive home is here, that you can write high performance codes that do serious computing with a tool like Python. It requires a lot more effort to make it high performance. But the point is, you can't do it with Python. Yes? Have you just imported the data file from your C++ program, like the coordinate positions and use the plot here? And then, Snape? No, so there are two things. The first simulation, that mixer, there I can actually call it live from Python. Which means, it's a library, right? My C++ code is made in a library. I can actually call the library functions from Python and have the data seamlessly sent back and forth from the Python world. It's not like I run the C++ code, dump the data file, and plotted it. No, I'm talking of native interfacing. OK, so at every time step, whatever you're getting the output here, you give it as input again, like that, is it? No, so the visualization that I finally made is actually made like that, as you say. It comes a data file, then I have a Python script that reads the data file through my C++ code and spits something out. But I actually have code, which I don't know if I can run it right now, that can actually show you the live simulation running all the time, which is written in Python. Because I have the full libraries, I have the complete C++ library at my disposal. So in fact, all of my driver programs, the program that actually runs the simulation, is a Python script. So it's like a function called from Python? Exactly. From the script, right? In fact, let me just try. It may not work, so I warn you. If it works, good, yeah, it worked. So now v is my library. So if I do v dot, say, 0.votex, let's see what it is. This is basically pulling it out from my modules, webtifs, something. This concrete class defines a 0.votex. Concrete class sounds very much like C++, right? So there's actually documentation pulled from my C++ code. But the point is, if I create this, I can say p is 0.votex. I've created an object, it's actually a C++ object. And now I have the object live with me in Python. So I can say p dot, say, strength, 0. C dot, set strength, I can do that. Even a MATLAB script you can run then? No. So if you have, it's a MATLAB script, unfortunately, because MATLAB is proprietary, there is a tool called MLABRAP, which will let you interface to MATLAB, but I have not used. I don't use MATLAB. I don't need to use MATLAB. This is also not a wrapper to MATLAB, because the syntax is similar. No, in fact, the syntax is somewhat similar, because NumPy, linspace, for example, is used simply because everybody else is familiar with MATLAB. So we use an interface similar to it, but it's a completely different programming language. And it's completely open source. All of the stuff I'm showing you is BSD license, which means you can use it. Don't sue us. Do whatever you want to do. Thank you. So in addition to this, we may also want to do parallel computing. And Python has a plethora of options. So you can do cluster and symmetric multiprocessing based options. There's also MPI. So you can use MPI for Pi, which is an excellent library, and various others, which I'm not going to talk about at this point in time. But basically, you can even do parallel computing with Python, relatively easily. As I said, we want to do 3D visualization and also want to build user interfaces. So here's a tool that's completely written in Python, especially the front end. Again, it's talking underneath to C++ libraries underneath. But I can actually create a user interface like this, a three-dimensional plot here, and embed an interactive Python session on that. This tool happens to be Maya V, which I've written. So one of the nice things about Maya V is the fact that you can do interactive work with it.  I can write these one, two, three, four lines of code. This just produces the data. And with two lines of code, I can actually produce a three-dimensional plot. So let's try this out. I'll come back to that. The idea is what I'm doing here is I'm just saying x squared by 2 plus y squared plus z squared into 2. And I'm just saying with one line, I'm contouring that surface. And I'm producing iso-surfaces from that. So let's see if I can show you something. So I'm just going to show you the code. As you see, this is exactly the same code I showed you there. This is a little function that's there in the MLAB library. I'm just creating an O-grid, which means a three-dimensional cube of volume. I'm now going to calculate x squared by 2, y squared plus z squared into 2. And with these two lines, I'm going to contour it. Let's see what it does. So now you see a three-dimensional plot, which I can interact with. I can go into full-screen mode, play with. Then I have a full-fledged user interface. So if I click on this, it'll actually produce for me a nice user interface that I can navigate and use to change various properties. So for example, I want, say, four contours. I can click on the iso-surface. I didn't click on it. And then I can say, OK, I want six. And it actually produced six contours for me here. So the point is I can create a user interface relatively easily. I can do 3D plotting with very little amount of code and work interactively, which is the key thing for a scientist. So with few lines of code, a scientist can make a quick plot of some of the data that they're interested in looking at. So you can do things like this as well. With these three or four lines of code, I can actually produce a pretty looking picture. So here's a little more intricate example just to show you how the code looks for something that's a little more sophisticated. And it interfaces several things. I'm talking of sci-pi's ordinary differential integrator. I'm talking of a 3D visualization put together. So what we have is we have what's called the Lorentz equations. With dx dt is defined as s into y minus x dy dt dz by 2. So there's three coupled ordinary differential equations. There's a lot of interesting history behind this equation because it's the first equation where a scientist actually discovered chaos in the Lorentz equation. So it specifies the evolution of the system. It's what we want to solve. So what I want to do is I want to trace the path of the ordinary differential equation, starting from a given initial condition. Where does this path go? As you can see, it looks like three velocities. dx by dt is like u, dy by dt is like v, dz by dt is like w. So imagine I have a point and I have a velocity specified at each point. And I'm tracking this in time. So if I'm doing that, what is the trajectory that this point will follow? How would I implement that? So here is the actual code to do this. I have a bunch of imports, which basically import various important libraries for me. The first is numpy. The second is pylab, which actually I don't need. The third is my mlab, which is my always simple plotting phase. And the fourth line is do an ordinary differential equation that is imported from PsiPy's integrate function, a module. Then I've defined a little function. So I don't think all of you know Python, but I think all of you can read that code. It's a function defined, which is called Lorentz, which takes two arguments, r and t. And I'm saying x, y, z is r, which means r has to be a three to pull, not three, an array of three elements. Then I'm defining u is 10 times y minus x, v is the other, w is that, all from the previous equation. I just specified numbers for my s, r, and b. So the s is a constant, r is a constant, b is a constant. I've just specified some numerical values for those. And I'm just returning the result as an array. So it's readable code. And now to show the trajectory, I simply have, I say I sample the velocity at 2000 points between 0 and 50 times. Then I use the ODE to integrate this Lorentz function that I created from this starting point, 40 is a comma I've missed here. And then I plot it in one line. So with 16 lines of code, I can actually produce a picture that looks like this in 3D. So that's kind of the power at which you can work with a programming language that's nimble and high-level. So maybe I'll just show you a quick demo of that. So it's pretty much the same code I displayed for you there. I run it, and I get something that looks like this. Background is a little different, but that's the trajectory of the particle starting here where it goes. So that's the Lorentz attractor. So clearly, with very little bit of code, I can actually build useful content. Now it's just not that this is the only thing you can do. So here is a much more sophisticated user interface where I've built something with sliders on the right hand side, with text boxes where I can enter the equation itself, and look at the 3D visualization life. So this application is about 140 lines of code in Python, pure Python. And I can build a full-fledged user interface an application which students can use to explore the actual equations. So that's the kind of power we're talking about with a programming language like Python. So would you like to see a demo of that application? Maybe I'll do that. So this is the code. I'm just going to zip through the code. It's just showing you that it's Python. It's 138 lines of code. I'm going to run it. It'll take a little while to run because this is running on battery and it's a slow machine. But the point is it's going to generate the same Lorenz attractor, the same differential equations. It's going to integrate. Show me a visualization of that, and allow me to change parameters on the fly. So there you go. So this is a full, it's like an application. But now if I, for example, change the S parameter, I can just drag it, and it'll actually reintegrate those differential equations. And I can explore the whole solution here. And I have the full power of the full user interface that Maya v provides by going back and clicking on this. If I click on that, I can change the visualization itself, change the properties and stuff like that. I can also change the differential equations that I'm integrating. So let me make it linear. So I'll remove x star z. I hit return, and it's integrated the new set of differential equations. So you can see that for a student who's playing around with differential equations, it's very easy to start exploring, saying, let me change the parameter what happens, let me change the differential equation what happens, and actually learn from this. Now one thing I've not talked about at all is symbolic calculations. So there's a project called SAGE, SAGE, www.sagemath.org, where they build, again, an open source toolkit which bundles Python along with a suite of other tools to do symbolic and numeric calculation. So what you see here is a screenshot of a web page called a notebook. I'll show you a live demo in a short while. Maybe I'll start atop. So what you see is a web page on which I can interactively intertext. This is all again implemented in Python. It talks to other tools in the background, like Maxima and things like that, does symbolic calculations. So what I did was I just started the SAGE notebook. I just said SAGE minus notebook over here, and it starts up this web server on the background, which is again implemented in Python. And I hook up to my web browser. I get this page with a whole set of what are called notebooks, worksheets. So I click on, say, SAGE demonstration that I have. So what this is is, it's a full page with a lot of math, some text. So what I have here is a little semi-talk on this. So this is just HTML. So if I want to edit this, for example, I can just click on this. It'll open up an editor. So for example, look at this. I'm saying integral of cosine of minus cosine of theta and latex syntax. And now if I say save changes, so it actually produces the math with the suitable markup. So then I can actually start creating variables. I can say x, y, z are variables. R is this. U is some function of this. And then say show me that as an expression. What it does is it does the calculation and shows me. Now it's just showing me log of r minus x. So it will just show me an expression as soon as it completes. First time round, it's going to take a little while because I've been doing a lot of stuff. So there you go. Now it should be faster. So now I want to look at the derivative of, the second derivative of log of r minus x. And you can see that it's actually calculating it. Now I want to see if the del squared of this. Again, if we calculate del squared of u and find that it is 0, that is u is harmonic. I can do the same thing. I evaluate that. So I can keep on doing this. And then calculate, say integrals like this. Evaluate such integrals. I can calculate symbolic matrices. So for example, I have defined a matrix here, which is 0, 1, 1, 1 plus A. Now I have a symbol A. And I want to find the determinant of this matrix. So basically, you can see that that is the matrix. And the determinant is A squared plus 7A plus 4. So you can do symbolic math. You can also do arbitrary position math with this tool. So here I am printing pi for 200 decimal places. So you can do arbitrary math. One of the wonderful things about this is that you can do embedded 2D plotting. So with those two lines, I hit Shift Enter. It will actually do a plot and plot that line. So I can change the parameters and plot. And it's a live web page. So you can imagine that you people can actually collaborate. I can create a page, show it on the web. I can do it from anywhere in the web and use it. I can create interactive plots as well. So here is a simple example of a Taylor series expansion done with Sage. So what we have here is a little user interface where the function is sine of x star cosine of x. That's the plot. And I'm seeing the first-order approximation of that function at that point, which is here, and actually shows it graphically. So if I make a higher-order approximation, say, it becomes this. So if you're teaching maps to students, you can create little live demos like this and have them explore interactively on a web page, which is extremely convenient. You can also do simple 3D plots. For example, here is a 3D plot of a sphere, which is not very interesting. But here's a more interesting plot of a surface, e to the power x by phi into cosine of y. That's the curve. And you can explore it on your web page with Sage. So basically, with Sage, there's a lot you can do. And all of this is Python. So if you learn Python, you can bundle in all of the goodies that I've talked about. You could use Sage and pretty much do what you like with scientific computing. Recently, we've also sort of married Sage and Maya V so that you can do 3D visualizations on the web with Maya V as well. So in summary, basically I've motivated the need for stack of tools, powerful tools that I've talked about, the need for Python, the exact tool stack that I am particularly interested in. I think most engineers and scientists anywhere in the world would be interested, which is numerics, symbolics, visualization, interactive exploration, high performance computing, user interfaces, and web and networking. All of this is possible with Python. So what? So what does this mean for us teachers? At which point, I'd like to introduce the Fawcay project and just take five more minutes. So Fawcay stands for free open source software for science and engineering education. And this is an MHRD funded project again, where we are trying to promote the adoption of free open source tools in the curriculum in college. And specifically, we are focusing on Python, Sylab, and Blender. I think Sylab, you must have already received a CD on. I am focusing my efforts on the Python support. So Kandan and three other faculty are looking at Sylab. And Professor Sridharayar from computer science is actually looking at creating Blender-based animations for educational content.  So this whole project, the goal is to spread the adoption of Python and Sylab and other possible tools. Right now, we are focusing on these two major ones in the curriculum. In order that students be able to use these kind of tools. So how are we going to help? We are going to make courses, free material, documentation, we conduct workshops, teacher training, and also support projects of interest. And specifically with respect to all of you, we are mandate to actually spread this. So we'd be happy to conduct workshops anywhere in India for you on these suite of tools. So right now, we've been conducting Python workshops for two days. We've had one in Haiti Bombay. We're going to have one next week in Pune. We'll have one at Goa. So almost every month, we're going to have a few of these. So any time you need something, you need a workshop to be done, please contact us. We'll be more than happy to do it for you. And in fact, we should again try to see if we can do this coordinated effort to reach about 1,000 teachers on this. We'd be happy to do that if you're interested. We're also going to have a sci-pi conference. The website is sci-pi.in. It's in Trivandrum. It's short notice, but this is December 12th to 17th, 2009. We're going to have this at Trivandrum. So if you want to reach us, check out our website, foci.in. And email us at info.foci.in, if you want to conduct a workshop, if you have any questions or anything of the kind. I'll put that up again. So thank you. What can we do for you? Any questions? See, actually, you showed your fluid dynamics applications. There, your C library is using the finite difference solver or whatever. That's my, it's not actually finite difference. Any whatever technique. So that solver or anything is not there in Python. It doesn't do PDs. Actually, there are a whole suite of tools for that as well. I just, it's a world by itself. So for example, there's a tool called SFEPi. I'm going to be releasing my own code open source. But there's a tool called SFEPi, which is finite elements in Python. There's a tool called Phoenix, which is, again, Python. They have a C-based back end, but then they have a Python front end for that. And there's something called Femhub, again, which uses some of the infrastructure that Sage provides. The Sage notebook and things like that, they're actually making a smaller version of the Sage. No Sage, most of it is huge. It's like 300 MB download. Whereas Femhub will be a smaller thing, which is customized for numerical applications and some symbolic applications. So there's Femhub, where they are building high performance finite elements, or HP-refined finite elements to this. So people are actually starting to use this. Contribute, OK. Yes, it is coming. It is growing. So I have, I work in particle methods. And the tools that we are building, that's smooth particle hydrodynamic simulation, we probably open source that next year. It's not finished yet. So as soon as it's finished, we'll open source it. And that is written not in C. That is actually written in Python and Cython. So then you model from the differential equation or from the differential? So basically, whatever is your modeling technique, that has to be implemented. Can we also model from the geometry, like in finite elements, where we start with the geometry? So you're asking that we have a CAD, like some. We can import it. As you see, CAD is actually a niche market, not niche market. It's actually, if you look at AutoCAD, they've actually cornered the large part of the market. There is something called OpenCascade, which has some Python bindings, but I'm not quite sure how good those bindings are, because I don't use those tools. But there is OpenCascade, which is an open source. They have very good journals, geometry journals. So apparently, it's very good, but I have no personal experience. Thank you. Yes? Do you have the image processing support for availability? Yes. So for example, elementary image processing is actually pretty straightforward with NumPy itself. So if you use, there's a library called PIL, Python Imaging Library. You can read any image format. In fact, I have an interesting story. My niece had some problems. She was looking at some photographs they've taken, and they tried to identify the number of particles. They had some equivalent MATLAB code. I converted it to Python. You can count the number of particles with that. So basically, you can read an image. You get a NumPy array. Then you can do all the processing that NumPy arrays let you do. One. The other is, if you want sophisticated algorithms, NumPy has some support. But there's a more sophisticated library called OpenCV, which supports a lot of imaging related stuff. And OpenCV is open source, and it has Python binding. So if there are no further questions, thank you again for giving me this opportunity. I hope to hear from you.


on education.com and I'm here with tip number 13. One more to go. So this one what we're gonna focus on is just cutting a straight fringe, bang, however you wanna say it. And we're gonna do that dry. And the reason I like to do this dry is cause I learned this a while ago, I believe I'm gonna go ahead and give DJ while doing credit for this one because I definitely, after seeing him, I've seen some people do it, but it's just an easy way to do it. So I'm gonna show you a couple key things that are gonna make you successful with this. So what you're gonna do is to cut the fringe. I wanna dry the hair nice and smooth. And then what I'm gonna do is take my scissor, put it in underneath the hair.  Let's take some of this out. I don't need to cut all the hair in there. Most of your guests aren't gonna look for a super, super heavy fringe, but this is a great way to cut a straight one. So now, slight off-center parting. I'm gonna take the hair underneath my comb, comb out some of the existing. So this is really what you wanna work on. It's getting to the point where you can take the hair underneath your comb, set it into the wide teeth of your comb or he's in the 332 comb again. Lifting the hair up.  Again, head shape is a big deal. I don't wanna over-direct this too high up because then we'll layer the bang, but I don't wanna have it too low because it'll just become basically this you're looking at zero degrees here. So if we have 90 degrees here, this is zero degrees coming off. So as I cut the fringe, I don't wanna go below zero degrees. So we're gonna take the hair, put it in my comb, start with a little section first. You don't have to go crazy with it. I'm gonna put it in my comb. I've got zero degrees here, so I'm just gonna drop it slightly below and we're gonna work. I'm gonna use my Z2 scissor type Z2 from Mizetani. I like this one because it doesn't push hair whatsoever.  Then I'm gonna take a little bit more hair, toss it into my comb and just work and connect those lines together. Now I may start a little longer than I want this to be and then I'll work my way up using the scissor. Make sure you're good at the first couple steps that we did with just moving the one blade. Then I can bring a little bit more hair on, cutting through there. And you'll see me go over the section quite a few times and all that's doing is just polishing that line up. Working through. I'll grab a tiny bit more from the corner there. We'll work that line in. Now again, because the head starts to curve away and I was over directing it here, it's gonna drop a little extra weight in there.  We're gonna do the same thing on this side. When you're working with mannequins, guys, this is a mannequin given to us. Thank you, truck. Given to us again from Hair Art. And what I like about the mannequins when you spend a little extra money on them, the growth pattern goes down. So it's allowing me to practice this fringe. Most mannequins, they grow straight back in the fringe area. So you can't really do this technique on them. So we're gonna work that line, going over it and over it with my scissor, drop it down. Take a little bit more hair, put it in. Just make sure your elevation stays the same. Work in our way across, go over that line a few times. You get nice and smooth right to the corner. And really, I'm lifting it up and I'm looking at where this hair ends. And if that's where I want it to be, then that's, then we're good to go and we'll just start cutting that line in. So we work our way across. And again, right in the corner, work some of that weight off, one hair. And there you go. That's how I cut a straight fringe. You'll see other people do it as well. Again, I did not invent this. This is just the way that I like to do it. It works really well. So hope you guys enjoyed this tip. We got one tip left, step 14 coming up. So make sure you subscribe to us on YouTube, follow us on Facebook, freesiloneducation.com for more tips, tricks and everything else. We'll see you on the next video. Thanks guys.


of the Dunnidge Horror, a suspense play produced, edited and directed by William Spears. Come in, Dunnidge, Massachusetts. Come in, Dunnidge. This is Henry Armitage. I'm speaking to you... Dr. Rice, please close the window. I'm speaking to you from my laboratory on the slopes of the Sentinel Hill near Dunnidge, Massachusetts. Present with me is Dr. Warren Rice, my distinguished colleague from Muscatonic University. We are now about a hundred yards from the summit of the hill, which is crowned by a huge table-like stone set in the center of a circle of stone pillars, a place of prehistoric worship. A moment ago, you may have heard the dogs of Dunnidge Township barking, as we have heard them for three days and three nights. Dr. Rice and I know the horror which they're barking for tens, but the purpose of this broadcast is to make this unbelievable horror believable to you. I hope for your sakes and ours, we are successful tonight. It is the eve of all hallows. Tomorrow will be too late. Our time tonight is very short, so I'll speak only of those more recent events which, believe me, may culminate at any moment in a climax too frightful to wholly contemplate. I will begin with the birth of Wilbur Waitley. It was the night of February the 2nd, 1921. Candleness. Toward dawn, when Lavinia Waitley, a deformed albino woman about 35 years old, gave birth to her dark, gothish-looking son in the crumbling Waitley farmhouse east of the village. No one attended her, no doctor or midwife. No one was with her, except her aged half-insane father who was known as Wizard Waitley. So Wilbur came into this world under heaven knows what incantations, what appeal to what power. A week later, Wizard Waitley drove his sleigh into Dunnidge Village and reported the event to a group of loungers and husbands general store. Hey, your grandson got yellow hair like Lavinia Wizard? No, takes out to his father more. It's dark, dark. You never spoke of who his father might be, now, did you? Oh, you know his father when the time comes. Oh, Lavinia's read and seen some things the most of you only talk about. Calculate her husband's as good as you can find this side of Aylesbury.  Maybe it weren't in old church that none of you here, though. But you wouldn't ask no better church-widen than Lavinia's. Why didn't he tell no-widen, Wizard? When was that? Not a wedding new here, of course. Not a husband new here, of neither. But let me tell you something. Someday you folks will hear a child of Lavinia's calling its father's name on top of Sentinel Hill. Prophecy? Or idle boasting by an insane old man? Well, I know I ask a great deal when I ask you to believe that the arrival of an infant into that house of diapoverty and squalor could possibly constitute a horror and a threat to all our known worlds. Yet it has an earthly history. Perhaps through this history you will be able to give it credence. Wilbur Waitley's growth was uncanny. But even if he had been an average child, he would have become in time an unnatural being, for he was surrounded from the first by the most malign influence. There was his grandfather, old Waitley, Wizard Waitley, who each Halloween climbed Sentinel Hill to the great circle of stone, and while the hills shook, stood holding a great folk open on his arms and shrieked into the wind. Yogg Sothor! Yogg Sothor! Yogg Sothor, that dreadful name first mentioned in the hideous forbidden book, The Necronomicon, and this wizard Waitley was Wilbur's teacher. The villagers began to notice curious things that were going on at the Waitley farmhouse. Soon after Wilbur was born, old Waitley began to remodel the house. The abandoned upper story was restored, and all the windows were tightly boarded up. And then Wizard began to buy cattle in large numbers, both horses and cows. Yet the livestock on the farm didn't seem to increase. Younglem Brown was one day curious enough to creep close to the house to count the Waitley herd. Dr. Armitage, there weren't more than 12 cows than them sick. Looked like they had the blight and funny wounds on them, like cut. I heard something too in the top part of Wizard's house, something like water slapping inside, only big, big like a sea. One other person went to the Waitley farm and the years before I met Wilbur, Dr. Ken Houghton of Ailsbury, who was called by Wilbur himself, who said that his grandfather was dying. Dr. Houghton found the old man in a bedroom on the ground floor and Wilbur with him. While outside the window, a legion of whip-or-wills cried loudly and rhythmically, and Wilbur spoke about the sound. Time with his breathing now. They're ready. Listen, doctor. They know his soul's going out. They're waiting. Yes, Wilbur, that's an interesting superstition. When he goes, if they catch him, they'll keep laughing till break of day. If they don't catch him, they'll quiet down. You mean you believe it in just a minute? I think he's conscious. Yes, the bird's changed when his breathing changed, like I say. Willie, Willie. I'm here. More space, Willie. Remember, more space soon. Yes, I'll build it. You grows, but that grows faster. It'll be ready to serve you soon, Willie. I know. But remember, when it's time you open up the gates to Yogsothoth with a long chant. You weren't on page 751 of the book. But mind you, feed it enough. Because if it gets out before you open to Yogsothoth, it's all over. It's now you. He's going now. He's dead, Wilbur. Yes, sir. Winter following Wizard Waitley's death that I first met, Wilbur, he came in person to the library at Miss Katanic University to consult a copy of the hideous Necronomicon, which was kept there in its Latin version, as printed in Spain in the 17th century. I tell you, when he came into my office, I was appalled at his appearance. Eight feet tall, shabby, dirty, bearded. But I was even more appalled by his voice when he spoke to me. I wrote you a letter a month past of the book. Well, that's a book that's never learned from this library. I doubt if it is from any library. Well, I have to see it then. Very well. It's kept right here. As you know, there are only three copies of this book in existence. That's why we're careful. Here, you can look at it on this table. The wizard said it would be on page 751. What? What is it you're looking for? The formula, the long chant. The one that opens the gate to Yogsothoth. I felt a wave of fright as tangible as a draft from the tomb. It seemed, Humphile, like the spawn of another dimension, like something only partly of mankind, linked to black gulfs beyond all spheres of force and matter, space and time. And presently, he raised his head and spoke again. It's here, all right, but I'll have to have a copy. That paragraph there? I don't know. Do you know Latin, doctor? Yes, certainly. Then read it, doctor. Let's hear how you make it out. All right, that shouldn't be difficult. Let's see. Nor is it to be thought that man is the oldest or the last of Earth's masters. The old ones wear and the old ones shall be. Not in the spaces that we know, but between them, but only Yogsothoth knows the gate. Yogsothoth is the gate to where the old ones broke through of old. The hands are at your throats, yet you see them not. They're arbitrage. You see, I reckon I've got to take that book home. There's things in it I've got to try and you can't hold me up. No, I'm sorry. I'll tell you, doctor, I'll have the book sooner or later, no matter what. You see, it, that's waiting for me at home. Whoa, wait, much longer. It was a week later that I was awakened suddenly by the fierce yelping of the great watch guard on the campus, followed by a sound from a wholly different throat, a scream. And I knew instantly that Wilbur had come back for the Necronomican. I hastened into my clothes and rushed across to the library where a crowd had gathered before the smashed window of my office. Inside there was a fearful groaning and growling, and some instinct warned me that what was taking place there was not for unfortified eyes to see. I brushed back the crowd, motioning only to Professor Rice to come in with me. When we opened the study door, Professor Rice screamed, No, Dr. Armitage, no, I... Come up, come close the door. We can't let them see. He's alive, but not. What a job that dog's done. Turn him to bed.  First we ought to call a doctor. A doctor? A doctor for that? No doctor in the world would know what to do for that. Look, Armitage, it's not human, nor animal. Where did it come from? Can you tell me? Can you tell me what it is? I couldn't tell what Wilbur Waitley was. Lay half-dent on its side in a pool of greenish-yellow stickiness was nine feet tall. And the dogs had torn off all the clothing and some of the skin. It was partly human beyond a doubt, with very man-like hands and head, but the torso and lower parts of the body were the leathery hide of a crocodile or alligator. But below the waistline, the skin was covered with coarse black fur and from the abdomen, long greenish-grey tentacles. The limbs terminated in ridgivaint paths that were neither hooves nor claws. And as Dr. Rice and I stood staring at this, this presence, the whippoorwills began to cry in unison outside the study window. And then the thing on the floor roused and mumbled. The whippoorwills disintegrated. Heading away, because he isn't made of matter as we know it on Earth. I guess he took after his father, so there'll be nothing left. His father? What was his father? I don't think. I thought then that what came into our world with Wilbur Waitley left with him. I forgot what he himself had told me of it, which was waiting in the sealed house where it had been built, where the cattle were driven to disappear. But Wilbur Waitley left a diary written in a strange alphabet resembling Sanskrit. And I worked our off and on for weeks to decipher it. And finally, I read the following passage written by Wilbur when he was no more than eight years old. Stairs is more ahead of me than I had thought it would be. There's not like to have much Earth brain. I can see it a little when I make the sign or blow the powder of even Godsey at it. And it is like them I see Halloween on the hill. I wonder how I shall look when the Earth is cleared and there are no Earth beings. Maybe like that upstairs looks which has nobody. It hasn't been fed with all the blood. Morning in a cold sweat of terror, I called Dr. Rice to my house and told him we have to destroy what's in that farmhouse. Why can't we just leave the thing locked up there? The house is boarded tight. Yes, but you think boards will hold it? Don't you realize, man, it hasn't been fed? It hasn't had blood since the 18th of September when Wilbur Waitley came here to die. He left for Dunnidge that night. And we've been here on Sentinel Hill ever since, working desperately to discover the formula in time. But a week ago tonight, shortly after dawn... Yeah, hello? Dr. Armitage, this is Lem Brown. I was just up beyond the Glen Doctor looking for cows I lost last night. Yes, Lem? Well, Doctor, something's been there. Smells like thunder and there's prints in the road. Round prints. Like an elephant has been along. Any... anything else, Lem? That's all I see. Drug along. Oh, did you hear anything? Yes, long toward morning. I heard a sound over toward Waitley's place. A kind of ripping or tearing of wood like a big... Lem, who lives nearest the Waitley farm? Well, that'd be Elmer Fry's place. Oh, he's on this line too, isn't he? I'll ring him. Dr. Armitage, this is Central. I'm trying to get Elmer Fry Central. Doctor, he must be out somewhere. In his whole family. I was ringing there an hour ago. Earl Sawyer saw Elmer's cows stampetting in Cold Spring Glen. Oh, you didn't get him. All right. But if you hear or see anything more, let me know. I'll be here working all day. Fry's. Fry's. Well, wake up. It's... it's loose. It's out of the house. One family gone already. We have to work. Pray, God, we find that formula in time. Since it broke loose. A week of terror and panic here in Dunwich Township. Each night, it moves about the countryside, leaving the trees crushed in a 30-foot sways as though by a moving mountain. Leaving its monstrous tracks a trail of tarry stickiness. Leaving crushed and gutted farmhouses and whole herds of cattle drained of blood. Well, ladies and gentlemen, that is the story to this moment. And tonight is Halloween. Tonight we are here to... Just one moment, please. Doctor Rice, did you hear something? No, with the window closed. No. Well, we'll throw it open. A sound from a thousand bending trees. A sound like the sea moving across a forest. Yes. Yes, it's coming here. Of course. All hallows, it comes to Sentinel Hill. Doctor Rice, I'll try the formula and the powder from the altar stone. I want you to stay here at the microphone and report what you see. Very well, Dr. Ironman. Oh, wait a minute before I go. To any scientists who may be listening to me, if I fail, there is a possible alternative formula in Falconer's mystical formulae of the Middle Ages on page 24. Well, there are the Whipple Wheels. I better get out there. Take over, Dr. Rice. Yes. I'll do as well as I can, Armitage. Good luck. Ladies and gentlemen, Dr. Armitage is climbing to the top of the hill, to the altar stone. I can see him plainly for the moon is high and the night clear. Down the hill toward the dark village, I can see the grasses and shrubbery bending down, marking the monster's ascent. It moves quite fast and I feel a proximity to pages of being utterly forbidden. Now, Dr. Armitage stands now on the altar stone and is holding the powder which, if the books are correct, will make this thing for an instant visible. It is quite close to him now, perhaps 20 yards or less. He lifts his hands. He brings the powder in a wide arc. I can see... Oh, no! Come in, Donage. Ladies and gentlemen, this is your suspense announcer. Due to conditions... Oh, just a moment, please. One moment, please. Dr. Rice, can you hear me? Yes. I can hear you. Yes. For a moment I will overcome when I stop. Ladies and gentlemen, perhaps you can hear now the incantation of Dr. Armitage. Listen! I mean death. And Dr. Armitage is walking back here now. So we know that whatever it was, it is gone. It is dead. We can be thankful indeed. You see, I saw Dr. Armitage. Yes. Did you? Did you see it, Dr. Rice? I saw it, Lord, yes. What did it... What did it look like to you? It looked here. Like something made of squirming ropes, but bigger than a barn and shaped well like an egg and dozens of legs like barrels but half closed when it stepped and nothing solid about it and at least 15 or 20 mouths or trunks opening and closing, but what was it? Oh, kind of... a kind of force. A kind of force that doesn't belong in our part of space. Did you... see the half face on top? Half face. Like a human thing. Very large, but yes, quite human and quite like Wilbur's. Like all the weightlifters. Then it was...it was... That's right. It was Wilbur's twin brother and you saw what three weeks growth had done and it was the child of Lavinia's who called its father's name on Sentinel Hill as wizard weightlif prophesied. You heard it calling, Yogg-Sotho. Ladies and gentlemen, this night is over. It is all Saints' Day. May Heaven bless us all.