A. Intro - Web Application Development on the Cloud - Platform-as-a-Service (PaaS)
- introduce self, low level coding, video game background
- wanted to create cloud web app, taking into account scalability and performance
- needed to answer several questions: real time interaction, SQL ceiling
- explain project, real time google doc microsoft visio (only white board) google drawings now exists
- explain that project needed to be reasonable, but I also did research on related technologies
- explain how project can be optimized for real time interaction and scalability
Picture of LOTS of logos
- this was my experience
- tons of tools for same task
- exponentially more tools to interface between them
Network Diagram
- reason we have so much is heterogeneous nature of internet
- variety of different hardware, operating systems, and platforms servers must interface with
- including special devices connected to internet, embedded devices, like ATM machines
Technology Diagram
- how do we go about choosing technologies?
- have more control over servers with machine images (not Google App Engine) and is only one server
- only neeed to figure out better conncurency (Erlang) and databases (NoSQL)
- tricky in deciding client technologies, may need to implement client multiple times for higher user base
- client tech can impact choice of server tech, if you have Android & iOS clients, may not get to do remoting
- if you use SOAP rather than direct remoting, it can solve this problem (can't use mobile agents though)
Keep technologies to a minimal
- idealy we should keep technologies to a minimal
- reduce application dependencies
- reduce context switching for developers
- reduce time needed to keep up with changes to each technology (SQLi)
- reduce technologies used to bridge gaps (BlazeDS, converts AMF to Java)
Web Browsers
- exist on most hand held devices and PCS
- 1) javascript hacked into HTML with comments
- 2) jQuery reduces problem with API
- 3) can use javascript to make new widgets, but javascript can be turned off
- 4) "hack fest" can't upload multiple files, need single pixel flash
- 4) AJAX uses fake pushes "polling" for more interactive connection
Solution: Plug ins!
- by pass clunky browser app programming with plug in designed for apps SUN, Microsoft, Adobe
- plug ins have come much farther for app UI, QT QML looks like flex MXML, silverlight AML
- Microsoft Silverlight sub-set of Windows Presentation Foundation (WPF)
- can program your own controls using object oriented programming with lower level GUI environment
- more advanced layouts than "floats", enhances modularity
Big Mobile Diagram
- mobile much more commonplace
- platforms and OSes needing support exploded
- flash, silverlight, java, all have thier own platform, not just plug in now
- mobile developers in favor of bypassing browser (mobile facebook native app rather than HTML5) except affects user base
- all of these could be thought of as virtual operating systems
- Steve jobs against flash in iOS at first
- how to reduce all of this complexity?
HTML5 to the rescue!
- a lot of people putting a lot of faith in HTML5 for write once deploy everywhere
- microsoft and adobe jumping on the HTML5 bandwagon
- HTML5 has lots of problems
W3C too slow
- one critisism is it is solving problems from years ago 2007
- finalizing standards is too slow
- still has rigid functionality like old HTML bad widgets (but now has drag and drop, canvas and websockets)
- large amount of high level standards
HTML5 diagram
- a lot of standards taking a lot of time to finalize and implement in commercial browers
- what happens when something new is invented (Google Glass)
- trying to solve too many problems in one set of standards
- they got the idea and started making standards more modular
What are we trying to solve?
- what are we trying to solve with all of this technology?
- what about HTML5 is everyone so excited about?
HTML5 diagram
- it's not the portability that people are excited about, its the standardization
- Java has been around a long time, just not as standard. Flash now installed on most machines.
- unfortunatly other platforms are much more elegant about being application platforms
- HTML5 the focus is on standardization, all devices will use it, sort of like mainframe terminals
Some Limitations
- 1) standardization process takes a long time 2007-2014, 7 years
- 2) became modular to speed up process, WebGL for low level, could make google glass with gestures faster
- 3) Web Hypertext Application Technology Working Group (WHATWG) (Living Standard)
- 4) Plug-ins still offer advanced Widget framework (must use HTML5 canvas, make them from scratch, google glass)
Weakest aspect of HTML5 JavaScript
- 1) JavaScript is another weakly typed, garbage collected scripting language (adding strong typing)
- 2) Google went thought the trouble to invent (GWT) to fix this problem
- 3) dot NET is more advanced here, byte code decoupled from langauge
- 4) we are now using GPUs for parallel processing, gonna have to wait for a HTML5 interface to something like Cuda
- 5) if someone invents a superb language, we are still stuck with javascript
- 6) going away from object hierchys, and going towards data oriented design, component architectures
Better Idea - Universal Byte Code
Good trends
- HTML5 is attempting to become a universal computing system
- NaCl interesting because it uses Chrome as Virtual OS, LLVM as UITF, and Pepper, HTML5 interface as device drivers
- maybe could have been created faster if was designing a system like this from the start
- if the target was mobile, needs to be as effiecent as possible
- build canvas on top of lower level standard for faster standardization process
- don't need to make any specifications about JavaScript with Universal Byte code can decouple as much as possible from std process
- we have the technology to do this, but not the technology to standardize it
Server Considerations
- people building NoSQL databases to speed up operations (may not be nessisary if you do caching with an SQL database)
- Most Server techs can't cache (Php, ASP, JSP) (Erlang can, Zotonic CMS uses SQL)
- World of Warcraft uses SQL, but servers are C++ so caching is certainly taking place
- Operating Systems designed to run across distrubuted networks (CloudOS) CloudLinux, Oracle Solaris 11
- Node.js has non-blocking IO (bit of an odd creature)
- Erlang has high concurrency, also runs nicely across cluster (completely parrellel, actors do not share memory)
- apache can't compete with Erlang actors with threads
List of various application structures
- Would be nice if these servers could more seamlessly interface with clients using their own languages, may not be possible with JavaScript, but possible by JIT compilation to some universal byte code