Thanks for this explanation. I understood most of it but could you explain why you should normalize using 1/sqrt(n) and why doing so makes the result converge in distribution?
This holds for any n, which means that, if you normalize by 1/sqrt(n) instead of 1/n, the "randomness" never vanishes even when n gets infinitely large. If you normalize by something bigger than 1/sqrt(n) the variance blows up, and if you normalize by something less than 1/sqrt(n), the variance collapses to zero so you get something concentrated at a single point.
The CLT tells us more than that, it actually tells us how the randomness is distributed when n gets very large, which is pretty remarkable when you think about it. (and it holds under much weaker conditions than what I mentioned above, it's just that those assumptions are probably the easiest to understand).
"Our website has over 50,000 monthly hits - programmers from all around the world visit LearnJavaOnline.org to increase their professional programming expertise in the Java programming language."
However, I notice that the domain was registered very recently (on 19-Feb-2013) and there are hardly 15 tutorials on the site and most of these pages are blank.
Edit: looks like this site is just using a template. Please see the OP's response to this comment.
« By running real Java code directly from the web browser, students are able to try out Java without installing it. » their "directly from web browser" solution is using http://learnpythonjail.appspot.com/ so I wonder if it's using jython to interpret the java code.
The .appspot.com subdomain tells us his site runs on Google App Engine.
Now, as it happens, I have some experience trying to get Java to compile and run on Google App Engine. Actually, at the outset I thought it was impossible because of the way the sandboxing works on App Engine (writes to the file system are disallowed and the javax.tools. package is not part of their white list). So straightforward approaches such as invoking the Java compiler from code will not work.
Here are various approaches that I have tried and the results:
1. Use Beanshell and approximate Java:
Beanshell is a scripting language for the JVM with Java like syntax. It also has a "strict" mode where it will behave like a strongly typed language.
Pros: you can run this on App Engine and can trust Google Engineers to worry about security of their sandbox. You also get the scalability of App Engine.
Cons: It is not really Java and language features like Generics are not supported. The error messages are also not as useful as what the regular Java compiler outputs.
2. Get users to compile code on their own machines and upload the .class file. Then write a class loader that will load this class and then execute whatever method you need to.
Pros: Works perfectly and no language issues.
Cons: The interactivity is lost to an extent. Also, beginners need to start worrying about installing Java and configuring CLASSPATH etc. from get go.
3. Use an in-memory compiler like Janino.
Pros: Works like the Java compiler and error messages are useful.
Cons: it does not support generics and it also does not support other features like the for(String value : values) {} syntax.
4. Use Google App Engine as the front-end and then run a compiler-as-a-service somewhere else (Linode etc.).
Pros: Full language and you are in control.
Cons: You better know how to sandbox the code (chroot / SecurityManager etc).
5. Use Google App Engine as a front-end and outsource compilation and execution to some other service like Ideone.
Pros: Full language support and someone else worries about security issues.
Cons: Expensive (the Ideone API only allows 1000 free submissions per month).
If you know some other method, please let me know. I love trying to see how to make things work on App Engine (I learn quite a bit this way).
You say 'trig comes up a surprising amount'. It would be great if you could give a few examples of these instances. I have always thought of trigonometry as one of the areas I really enjoyed in school but something I have never used ever since.
Two recent projects come to mind, one where I was working on a program to draw and manipulate points in 2d space where I used rotation matrices, and another where I was testing the graphing routines in a monitoring service by sending load in sinusoidal spikes.
Trig? Fourier series and its introduction to functional analysis and Hilbert space and the ideas of inner products and orthogonality there. JPG image compression. Shannon's information theory. Characterization of time invariant linear systems, e.g., acoustics. Antenna theory. Phased arrays and beam forming. Imaging in optics. Holography. The fast Fourier transform. Seismic data analysis via the fast Fourier transform. Characteristic functions and Bochner's theorem. Power spectra. X-ray crystallography. The fundamental theorem of interpolation and the Nyquist sampling theorem (e.g., how music CDs work).
There's a cute idea to put 100 wireless customers all on the same wavelength. Basically have a tricky antenna pattern with a lobe for each user and so that each user gets only their own signal. It's all trig.
Indeed, I agree. Those all fall under the umbrella I gave. But those are all particular subject areas that many people can go through their career without touching.
Yes, all or nearly all! That the trig functions are the source of the most important orthogonal basis in Hilbert space theory need not be good to know just for physics or signal processing!
Let's see: Also I mentioned characteristic functions and Bochner's theorem which are core probability and not just physics or signal processing. Characterization of time invariant linear systems might be in mechanical engineering and might be tried even in economics! Seismic data analysis via the fast Fourier transform is, yes, in signal processing but is also mostly regarded as geology or just looking for oil or anything 'down there'.
I tried, as you can see, I really tried, to show how trig was for more than just your father's topics in physics and signal processing. I tried!
Is there a course on udacity that teaches you how to build apps on Google App Engine? They do have one on building web apps but it does not specify which platform they use (if any).
The web application course is taught by Steve Huffman (creator of Reddit) and the first lesson is actually to write a "Hello World" script and publish it on App Engine.
For anyone new to Python, I highly recommend Udacity. It's still a little unbelievable to me that it's free.
*edit: I should have mentioned that this course uses app engine throughout it's entirety. Not just the first lesson :)
"Google Apps Script gives users a new level of control over Google products. Now you can access and control Google Spreadsheets and other products using JavaScript scripts that you write yourself and can share with others. Unlike browser-based JavaScript, the scripts you write run directly on Google servers in order to provide direct access to the products they control.You can also use Google Apps Script from Google Sites."
This online code editor seems to be a new and improved UI for creating / editing apps scripts. That said, this editor isn't proprietary. A quick look at the source shows that they're using CodeMirror (http://codemirror.net/). We've tried out various code editors for unclassroom.com (where I work) and code mirror has been the best to work with in terms of features, ease of use and comprehensive documentation. The second version (CodeMirror2) is really top notch compared to other alternatives out there.
One difference between different linux distros and android is that, in the former case, end users recognize that software written for another distro may not work on their specific OS. In the latter case, however, end users (especially ones that aren't technical) think that they have the same OS (when in reality they all own phones with different levels of API support / compatibility) and are upset when a specific app does not work as expected on their device.
Is there a way to style dynamically inserted <code> blocks (say inserted via an ajax call) after the page loads? I did not see an equivalent of the prettify() function of google-code-prettify that lets you do this. Looks great otherwise.
Yeah I just have to make Rainbow.init() public and make it ignore blocks that have already been processed. Then this will work. Feel free to make a ticket for me on https://github.com/ccampbell/rainbow/issues
You are correct that we both teach programming and hence the blog post. That said, we've removed the pay wall for the PHP course and would appreciate your feedback. Thanks!