 Okay, hi. I'm Radraksh, although unfortunately, when I signed up for the proposal, my name came up as Rudy, which happens to be a nickname. So you can call me anything, you can even call me the weird, math, nerdy, loon, anything works. So a bit of background about me, I happened to have co-founded a startup called Math Harbor, where we're trying to create a cloud-based platform for mathematical and scientific computing. And in the course of that, let's be honest, all of us look for that one perfect language that does everything that we wanted to do. And I got into the same rut as well. I started looking for that one perfect language that runs everywhere, does a lot of math for me, and is expressive enough for me to express my ideas and my semantic constructs. And back in May, I don't know why, but somebody, a mathematician it seems, said that JavaScript is definitely something worth looking at. So I jumped in, and here I am today, ready to present those results to you. All right, so what's the first thing that jumps into mind when you say scientific computing? I mean, where do you think we're going to apply it? So it's basically about applied mathematics, applied statistics, data science, which is huge, going crazily huge today. And it's got a lot of applications across astrophysics, bioinformatics, genome sequencing, trying to figure out what diseases you might get later in your lifetime, what diseases your children might get. That's bio statistics, M-informatics, trying to figure out, trying to analyze chemical elements in multiple compounds, things like that. And it doesn't stop there, so let's go somewhere closer. Computational finance, the stock market, we see fund valuations, that's all econometrics. What are the current languages that are used? Python, that's like the first thing that jumps to mind, are great language for statistical computing. Julia, which is relatively new, from a couple of MIT chaps. And boy, it's a great language too. Yes, we do. Hey, what's up? Shashi, where are you? Hola. Love you, by the way. Love the language too. All right, so what's wrong with Python and R? By the way, I removed Julia from there. Didn't want to offend him. So, yeah. Well, nothing's really wrong with them. I mean, the great languages. I grew up with Python and R, well, yeah, I kind of grew up with that too. But for one, I believe, personally, that they don't have the advantages that JavaScript currently has. For instance, asynchronicity. Python does have a couple of third-party libraries that allow you to write asynchronous code, but that's not something that the language itself supports. JavaScript? Hell, yes. Supports it like a charm. And then the second reason, runs everywhere. Again, let's not even go with R. R just runs on a server or on a normal computer, so let's not even touch it. Python does run in the browser as well. I believe there's an open-source project called Brython. I hope I'm pronouncing it right. But again, it's not exactly the same thing as JavaScript. JavaScript? Over the last couple of hours and yesterday, we've seen everywhere that it runs. You saw that talk on Tessil, amazing stuff. There was this gentleman here who talked about Zeta or Zeta. That was, again, mind-blowing too. We know that JavaScript runs everywhere, including telephones, including set-top boxes, drones. The drone thing is one of my favorites, and I'll come to that in a bit. All right. So I think that JavaScript can be the phone gap for scientific computing. We can all agree that phone gap totally revolutionized the way web developers would interact with mobile app development. I mean, you're a web dev. You know HTML. You know CSS. JavaScript's your primary nuclear weapon. And now suddenly you've been given a tool that allows you to write mobile applications not just for one platform, but for multiple platforms. That's like a godsend, right? In the same way, I think JavaScript can do the same thing for technical computing, where web devs, like all of you, can easily get into machine learning, data science, computational finance, higher-order mathematical computing, without having to jump into another language altogether. And again, like I mentioned before, it's going to be a really powerful experience across clients, servers, and other devices, because it's not just the same language that's running on different devices. The same set of libraries, the same ecosystem is available throughout the game. All right. So applications. One of my favorite applications is the first one, calculating airline ticket costs inside the browser. Nowadays, when you book a ticket at your favorite or non-favorite carrier, usually they have to calculate ticket costs based on a lot of variables. It depends on, you know, what day you're planning to take your flight. It obviously depends on the distance. It also tries to take in weather conditions into account, always fails. And it tries to calculate great circle routes if you're taking transatlantic or intercontinental flights. So great circle routes are basically specific routes that circle predefined points on the globe in order to minimize fuel. Now, there's a particular branch in mathematics called linear programming. You might recognize it as optimization. Optimization is used heavily in this regard, trying to calculate what's the best ticket cost based on all these different variables that I have. Now, usually, when you're booking a ticket, all these calculations are done on the server. So, you know, there is that drag over there. Imagine a world where every airline can give you these calculations right in the browser. Admittedly, when you think about it right now, you're like, big deal. I don't even notice the difference. But going forward, as devices get smaller, as we start booking flights on our phones, I think this is going to be really important. Then the second one, machine learning, clustering, classification, regression algorithms. Why not run them on the server and then just pass the results as JavaScript objects into D3 visualizations on the client. And that's just, you know, D3. Later, I mean, there's a lot more that you can do. There was that talk on famous. Imagine doing visualizations using famous. That's got to be really powerful. And the last one is amazing, running JavaScript-based neural networks on the server so you can literally develop them and test them there. And then you can just run them on a parrot drone. So a personal project that a friend and I have been working on is training a neural network to recognize cats from dogs and so on and so forth. And then putting it onto a drone, the drone can then go and chase cats away, scare them off. It's a lot of fun. And before you accuse me of animal cruelty, I'm telling you, those cats are a nuisance. Big time. Unfortunately, it's not working because I can't find too many pictures of thin cats. So the neural network tends to fail and ends up scaring other people. So yeah, anyway, to cap it, the possibilities to put it mildly, they're endless. You can do so, so much. Sorry. Actually, I couldn't find pictures of thin, dirty Indian cats is the problem because all the pictures I found of cats were fact, tabby cats. Okay, so I give the same talk at the Delhi run-up event. And there was this lady there who asked me a very pertinent question after the talk, but I'm going to pose the same question to you so that you can keep in mind as we progress further. She said, do you really think after all this and after seeing how big the ecosystem is around other languages, do you still think JavaScript is suitable? Let's go there. There are two basic guidelines to evaluate any languages' feasibility for a given problem. The first thing is, is this language expressive enough? Does it provide the right semantic constructs for you to be able to model your problem and any actions that you want to perform on your problem? Can you do that easily? Is it too painful to do that or not? The second thing, does the language have a decent ecosystem to help you in your job? Does it have enough libraries so that you don't have to reinvent the wheel? So JavaScript does cater to the first point. It straddles the two seemingly disparate worlds of object-oriented programming and functional programming. Now, object-oriented programming is still necessary. I mean, it's one of the best ways we still have of modeling the real world. But at the same time, we're going into mathematics. We're trying to hack the source code of the universe as a friend once put it. We need functional programming too, because functional programming is all about treating everything as a mathematical function. And so far, as I've seen, JavaScript is one of those very few languages that bring the two together in a very non-optused manner. The second part, however, is a bit of a challenge. The ecosystem. You look at Python, NumPy, SkyPy, SimPy, there are loads of other pies. I can't remember all of their names. There are so many libraries out there, even R. R has 33 libraries for random forests alone. Random forests are a very popular machine learning algorithm. 33 libraries for one algorithm. I'd say it's overkill. But the point is, there's a broad ecosystem, which unfortunately is missing in JavaScript. Anyway, I was hoping to do a couple of demos, but going forward, I don't think I'm going to be able to show you the code. So GitHub repos will be provided shortly. Anyway, there are a couple of good libraries for JavaScript for scientific computing. So there's one called numbers.js, which is very basic, differential, integral calculus, basic linear algebra. Then there's a numerical JavaScript, which is slightly more advanced, and it provides math optimization. Math optimization is something that's got a lot of applications in a lot of different fields. Like I mentioned, one was airline fuel routes and ticketing costs. Then let's assume you're working for Mintra or Amazon or Flipkart. Supply chain optimization. That's a huge problem that retailers face, especially online retailers. And that's where optimization plays a big role. Then we have something called clusterfuck. Please excuse the language. It's basically a clustering library. Clustering is a really powerful technique in machine learning, which is all about clustering seemingly disparate objects based on one common variable or one common parameter. And then we've got braindog.js, which is actually quite powerful. Herarchical neural networks for deep learning. And incidentally, this is what has been used on the drone to recognize cats. The best part is that all of these libraries work with Node. They work on the browser and they work on embedded clients. And embedded clients can mean anything. It can mean a pebble watch. It can mean a raspberry pi, a beagle bone. It could probably be the zeta, the tessell, that's right. So it works everywhere. Node modifications, nothing. No cross-compiling. That's the most important part. But obviously it's not enough. This is just four libraries. R had 33 for random forests. Three minutes. Damn. Anyway, so we have three options. I'm going to skip this part. M script n. We all know what M script n is. ASM.js implementation by Mozilla, GCC compatible compiler. That's got a lot of different optimizations available. Translates C, C++ into runnable JavaScript. So again, I prepared a demo where I compiled an entire linear algebra library. It's called eigen, written in C++. And it works on Node without any hassles. Unfortunately, it doesn't work in the browser so well, because you can imagine. Huge library tends to crash your computer. Funnily enough, it works on Safari and I would love it if somebody could figure out why. And what else? So yeah, anyway, forging ahead with M script n. Imagine mixing Scython, which is basically Python compiled for C. Compile that with M script n. You have NumPy, SkyPy on JavaScript. You can compile existing C++ libraries like MLPack, which is for machine learning. Intel's math kernel libraries, which is for high order number theory. You can compile them for M script n. Essentially, you're now going to be piggybacking off existing ecosystems to build one for science around JavaScript. But the biggest challenge that I've faced as of now is, like I mentioned, that code could not run in the browser because it was too big. Thankfully, M script n is based on top of LLVM. So all of LLVM's optimization methods are available. It's just a matter now of going into them, diving deep into them and seeing what works. Anyway, and then my favorite line, one language to rule them all. So try mixing it with L, which is what Shashi talked about yesterday. Try restifying scientific models using Express. So you have machine learning models or neural networks running on the cloud, and you can quickly build HTTP routes around them. Then math on the client for rendering more powerful WebGL scenes. And like I said, famous. So you can actually plug it in and have a powerful visualization framework. NACL, running complicated models in the browser, but I still think this is a few years into the future. So let's not really talk about it right now. Then Cylon and Tessel. Cylon is amazing. It's basically a JavaScript library that allows you to run JavaScript across a lot of different embedded platforms. They support BeagleBones, Pies, Tessels, and a lot of other things. And similarly, Tessel. So something that just came off the top of my head yesterday when I heard that gentleman talking about Tessel. You could actually share intelligent neural networks across servers and embedded hardware for more intelligent home automation or industrial automation. Right, so that was it. If you have questions, you can accost me. GitHub's repo right there. And yeah, thank you very much for being a captive audience. Questions? Anyone? Or are we two running too far behind? Hello, hi. I come from a financial company. So they do a lot of numerical processing and then statistics. So the one reason like why we're not able to use JavaScript is it boils to one issue in JavaScript. The number of format that is used in JavaScript is constant. It's a 64-bit floating point integer. So you'll have really run into a lot of mathematical issues if you're trying to add to numbers or do any of the mathematical operations. So how does these libraries like whatever you're telling is going to handle it? Right, I think that's gone. Well, okay, let me just, so existing libraries don't. Existing libraries still have, so the ones that I mentioned, for instance, they still have issues with the whole 64-bit sign numbers. The thing is when you compile it using M-script 10, that is when JavaScript ends up going into float and that is where I notice that the problems start to decrease. So actually the 64-bit floating number, right? You can't, that's the underlying JavaScript notation itself. See, whatever the library or the JavaScript library have written, it can't change the underlying number format it is stored, right? I haven't actually, it's somebody else. But yeah, I get the point, I agree. Which is why I wanted to demo another library which I wasn't able to. So have you heard of Duetto by any chance? No. Okay, so Duetto was this old clone of M-script 10 and they've now named it something called Cheap. I can't pronounce it, don't ask. Cheap basically what it does is while it compiles C++ to JavaScript, it also retains blocks of code where you've got variable definitions, especially number definitions. Essentially what it then does is have RPC calls between JavaScript and C++ when it comes to those 64-bit numbers. And that is how they are trying to get around the problem. Unfortunately, I haven't had the time to play with it because it was just released a couple of days back. But stay in touch, let's see if it works. Thank you, super. Awesome Rudy, thank you so much.