DOKK Library

Which language(s) are best? (For Web Development)

Authors Jackson Stone

License CC-BY-4.0

Plaintext
University of Tennessee at Chattanooga
UTC Scholar

                                                                     Student Research, Creative Works, and
Honors Theses                                                                                 Publications

5-2016

Which language(s) are best (for web development)
Jackson A. Stone
University of Tennessee at Chattanooga, ffr569@mocs.utc.edu




Follow this and additional works at: https://scholar.utc.edu/honors-theses

   Part of the Computer Sciences Commons


Recommended Citation
Stone, Jackson A., "Which language(s) are best (for web development)" (2016). Honors Theses.




This Theses is brought to you for free and open access by the Student Research, Creative Works, and Publications
at UTC Scholar. It has been accepted for inclusion in Honors Theses by an authorized administrator of UTC Scholar.
For more information, please contact scholar@utc.edu.
                          Which language(s) are best?
                           (For Web Development)

                                             By
                                    Jackson Stone
          Expected Graduation: Spring 2016, BS in CPSC: Scientific Applications

                                      Honors Thesis
                       The University of Tennessee at Chattanooga
                                     Honor’s College

                                Examination date: 3/28/16


                                  Professor David Schwab
                                      Project Director


                                Professor Katherine Winters
                                         Examiner


                                     Dr. Jonathan Mies
                                          Examiner

                                      Dr. Greg O’Dea
                              Honor’s College Representative



                                        Abstract

This thesis is intended to shine light on the complex nature of the online software ecosystem,
in the hopes that it may help students who wish to pursue web development determine how
            to best spend their time researching and learning varying technologies.



This work is licensed under a Creative Commons Attribution 4.0 International License.
Table of Contents
Introduction .................................................................................................................................................. 3
The Anatomy of a Webpage ......................................................................................................................... 5
Servers and Browser Interactions ................................................................................................................ 8
Webstacks of Study ..................................................................................................................................... 11
Ruby ............................................................................................................................................................. 12
            Language History ........................................................................................................................... 12
            Current Usage ................................................................................................................................ 13
            Ruby on Rails .................................................................................................................................. 13
PHP .............................................................................................................................................................. 17
            Language History ........................................................................................................................... 17
            Current Usage ................................................................................................................................ 18
            Laravel ............................................................................................................................................ 19
JavaScript .................................................................................................................................................... 23
            Language History ........................................................................................................................... 23
            Current Usage ................................................................................................................................ 26
            Employability ................................................................................................................................. 27
            Node.js ............................................................................................................................................ 28
            MEAN stack ..................................................................................................................................... 29
            Meteor............................................................................................................................................. 36
Measurements ............................................................................................................................................. 42
            Resource Usage .............................................................................................................................. 42
            DoS Attack ...................................................................................................................................... 42
            Results ............................................................................................................................................ 44
Conclusions ............................................................................................................................................... 47
Definitions .................................................................................................................................................. 48
Sources .......................................................................................................................................... 50




                                                                                                                                                                  2
                                       Introduction
       This thesis is intended to shine light on the complex nature of the online software

ecosystem, in the hopes that it may help students who wish to pursue web development

determine how to best spend their time researching and learning varying technologies. More

specifically, this thesis is meant to compare and contrast several, often times competing,

different ways of constructing a website on the internet. For the sake of the nontechnical

individuals reading this, the thesis will contain frequent analogies to help the understanding

of technical jargon and concepts. To begin with, a useful analogy for thinking about different

technologies on the internet will be that of organisms in an ecosystem.

       Every website is more or less unique. However, websites are all made of the same

fundamental bits. Much like how all living things have DNA and a metabolism, all websites

have shared core components. Each of these websites is built using some sort of language or

languages, and for the sake of this paper it will be useful to think of these languages as a way

to taxonomically group websites. Much like how all forms of life can be grouped into a

handful of kingdoms, all modern day websites are a result of a handful of languages. Also,

like biology, many of these languages share a common ancestor, and have deviated from

each other at some point in the past. Some languages have managed to develop their own

strategy to maintain an edge, while others have been unable to adapt to the changing

landscape (in this case the Internet), and have faded away into extinction.

       Over time, as the demands and expectations of internet users has increased, many

languages have grown in complexity and have become more specialized in their tasks. Often



                                                                                                   3
times these specialized versions of a language will become a higher level abstraction of the

root language. These language abstractions are usually not as flexible as the original, but

able to do a specialized task much more efficiently. These language abstractions are often

called frameworks. This process continues until one framework is so specialized it is not

adequate to create most of a site, and several language frameworks technologies become co-

dependent for the creation of websites. These language co-dependencies are often called

webstacks.

       So to summarize, all websites are made from one or more languages. These

languages usually share common ancestors, but have branched off of each other at some

point in their past, some earlier than others. Some languages are on the rise while others are

on the decline. Often times a given language has branched into specialized applications of

that language called frameworks. These specialized frameworks will frequently group

together in symbiotic relationships with other frameworks in order to create a holistic

webstack.

       In order to try and make some sense of this crazy jungle, this thesis will first discuss

the basic components all modern websites share, the anatomy of a typical website. It will

then discuss the origins of several of the most popular root languages on the internet today,

and discuss their history up to today. From there it will discuss some of the resulting

frameworks and webstacks that are currently in widespread use and show useful metrics to

gauge longevity and trajectory of these technologies. Then it will discuss my process of

constructing an identical website using each of the aforementioned webstacks, showing



                                                                                                  4
language syntax examples for comparison. I will also run a denial of service (DoS) attack on

each of these sites, and gather metrics on each website and how it holds up against the

attack, as a way to simulate scalability of the technology.

       In conclusion, the reader should have a basic understanding of what is out there in the

Internet Ecosystem, the niche that each language is currently filling, the expected trajectory

and performance capability of a given technology, and can make an informed decision on

what technology to use for a given problem or for a desired website.




                                The Anatomy of a Webpage

       Every website uses Hypertext Markup Language (HTML) which defines the webpage’s

text, and the structure of content blocks within the browser window. To view the HTML

making up any webpage, if you are using Google Chrome, you can simply right click on any

webpage, and select “inspect element”. This action will display the code your browser is

using to generate the webpage you see. All modern websites also use Cascading Style Sheets

(CSS). CSS, as its name implies, provides styling to the content within a page such as images,

width and height, font family, color, and animations. HTML and CSS combine to form

everything you see within your browser. HTML is the infrastructure, while CSS is the

furnishings. Below is a very simple example of each. (Table 1)




                                                                                                 5
HTML                             CSS                                End result

<h1>Hello world</h1>             h1 {                               Hello world
<p>This is a test</p>             color:red;                        This is a test
                                  font-size:16px;
                                 }
                                 p {
                                  color:blue;
                                  font-size:12px;
                                 }

                                             Table 1.

       Though it may seem hard to believe, this is what makes up the entirety of what you see

on the internet. However, many sites are not simply arrangements of text and images, they

have an interactive component to them as well, like a Google search bar, or a drop down

menu. This is where JavaScript (JS) comes in. To continue the infrastructure and furnishing

analogy, JavaScript is the electrical work and appliances in the building. It is not required for

a building to have electricity to be a functional building, but chances are you do not want to

spend a large amount of time there if it does not. It is the same with JavaScript and websites.

It is a language that can directly change a given web page's HTML and CSS on the fly. When

one scrolls down their Facebook feed, JavaScript is changing the HTML on the screen to

contain your new posts as they stream in. In some cases this means very little actual HTML or

CSS are sent by a server when you visit a site, but it is instead all added in by JavaScript, like a

self-assembling house. Table 2 shows an example of this in JavaScript. Notice how the end

result is the same. This is because JavaScript is generating identical CSS and HTML as in

Table 1.



                                                                                                   6
   JavaScript file                                                       End result

   var d = document;                                                     Hello world
   var header = d.createElement("h1");                                   This is a test
   var para = d.createElement("p");
   var root = d.getElementsByTagName("html")[0];
   header.innerHTML = "Hello World";
   para.innerHTML = "This is a test";
   header.style.color = "red";
   header.style["font-size"] = "16px";
   para.style.color = "blue";
   para.style["font-size"] = "12px";
   root.appendChild(header);
   root.appendChild(para);

                                                    Table 2

        You may be asking why anyone would ever want to go through so much work for so

little and the answer is they wouldn’t. In practice it would generally not be practical to

structure a site like this entirely out of plain JavaScript. It is a lot of work for relatively little

result. However, moving forward it is important to know that JavaScript can insert and mold

HTML and CSS, as well as communicate to servers. Though one would likely not use plain

JavaScript, frameworks have been created for JavaScript to specialize it for creating HTML

and CSS which this thesis will elaborate on in later sections.

        These three languages: HTML, CSS, and JavaScript (HCJS) are how the web developers

package the things that are sent to users. Everything they send, with the exception of static

assets like pdfs and images, is described in these three languages. (Any discrepancies one

experiences between different internet browsers is a result of some browsers choosing to

interpret these three languages in subtly different ways.)




                                                                                                         7
       Although a combination of these three languages is the end result seen by a visitor to

a website, this is only half of the story. More often than not, a user will expect a “custom”

webpage experience, such as logging into their Facebook profile and looking at their unique

newsfeed. Frequently, every user has a unique webpage sent to them. It may have the same

general format for everyone, but the content is customized for each user. It would be

massively impractical to hand make a unique webpage for each user that plans to visit a site,

and it would be far too much data to send it all to each user and subsequently filter it. How

this magic is able to take place is with server-side programs.




                            Server and Browser Interactions

       When dealing with websites, there are two major sides. The first is client-side which is

composed of what we have discussed up to this point, namely HCJS. The other half is server-

side. This is what Google has running on their endless server-racks in San Jose, trying

desperately to find what a user is looking for as fast as possible when they input a search.

Figure 1 shows a possible interaction with a Google webpage.




                                                                                                8
                                       Figure 1

1. The user types something into their search bar, and the search bar is made from

   HTML.

2. When the user presses enter, JavaScript files take the text from the search bar and

   perform some preprocessing on the text, packaging it for the server.

3. The JavaScript files then send the user’s search query to Google’s servers over the

   internet, including a cookie to help Google identify who you are.

4. Google’s servers process the search, and generate a new web page of results

   personalized to the user based on their search and cookie, in the form of new HCJS or

   data packets.

5. The browser replaces the old HCJS with the new code sent from Google’s servers, or

   pipe the new data packets to the current JavaScript files




                                                                                         9
   6. The freshly sent JavaScript then does some slight tweaks to the HTML and CSS, to

       make them just right for the user.

   7. The browser then updates and displays the user’s search results.



       Though seemingly over-complicated for a simple search request, this chart is actually

a drastic oversimplification of what is really going on, and is by no means the only way a

server interacts with a user. This is to show however, that though HCJS is all that a user sees

and interacts with, it is often the tip of the iceberg. Most web applications have a majority of

their complexity on their servers, which are generating custom HCJS for their users. That is

where the secret sauce for most web giants exist, and it is where there is the least amount of

standardization.

       Browsers force web developers to use HCJS, however, how a web developer decides

to create and then send those files is totally up to the developer. HTML, CSS, and JavaScript

files are only text files. They can therefore be generated by any language capable of

processing and creating text files, which is most programming languages. (It is not

uncommon for one language to generate another when dealing with web technologies.)

        All of this to say, there are two main layers to any website, Client-side (HCJS), and

Server-side (nearly any language a programmer chooses) which generates custom HCJS and

fetches custom data for each user.

       A webstack is a set of technologies designed to work together to make this process as

easy as possible for a developer. As stated before webstacks can be a combination of several

languages, and these languages work together to create the custom HCJS modern internet

                                                                                                10
users expect to see. This is why almost all websites on the internet are created with one of

these stacks. So in discussing currently used technologies in the web world, one needs to talk

about webstacks.



                                Webstacks to be discussed


       The first webstack this thesis plans to delve into will be Ruby on Rails (RoR), which is

one of the most popular webstacks to date using a combination of its predominant language

Ruby, a dialect of JavaScript called CoffeeScript, an abstraction of HTML called html.erb, and

an abstraction of CSS called SASS. The next webstack will be Laravel, a framework that uses

PHP as its main language, one of the oldest server-side languages still in widespread use

today. It also uses an abstraction of HTML called blade.php, and a CSS abstraction called

LESS. (PHP is an acronym for PHP hypertext processor. The first P in PHP stands for PHP. In

the computer science community irony is common, even among language creators.) Many

aspects of Ruby on Rails influence can be seen in this framework. The last two webstacks this

thesis will cover will be more recent webstacks that are composed almost entirely of

JavaScript. The first is called the MEAN stack, and the second, Meteor. The last two represent

a current shift in the philosophy of web-developers who feel many frameworks are bloated

with complexity because of all the interactions happening between different languages, and

attempts to streamline development by having everything in one language.

       To understand these webstacks one needs to know some basic information about the

main languages used in them. Therefore this thesis will briefly discuss the history and


                                                                                                  11
intended use case for PHP, Ruby, and JavaScript, and then delve into the nitty-gritty of how

they are each able to create a website, showing code snippets in each webstack. I have

created four identical versions of a website in each of these stacks, and though they look the

same, they share relatively little similarities in code. I will then briefly discuss their professed

strengths and weaknesses, and show statistics on employability of these technologies.




                                                  RUBY
       Language History

       Ruby is the only language this thesis will discuss that was not created in the United

States. It was developed in Japan by Yukihiro Matsumoto, or “Matz”, as the Ruby community

refers to him. His intent in creating the language was to have an object oriented scripting

language. As defined by Oracle, object oriented means: “a method of programming based on

a hierarchy of classes, and well-defined and cooperating objects.” [2] In essence this means,

while programming, one creates structured sets of data, called objects, which each contain

certain methods or functions that can be performed on their stored data. The “scripting

language” component, means the language is not compiled. In other words, the code is read

dynamically, while it is being executed. To give an analogy, it is like performing a heist where

no one knows what they are supposed to do until it is time to execute, only given knowledge

of the current task. Because of this, the code can perform operations on itself, and be more

flexible. In a way, it can improvise. These two seemingly conflicting concepts, one of rigid

data structure, and another of dynamic and flexible code execution, are what make up Ruby.



                                                                                                  12
       Current Usage

       Another distinguishing factor of Ruby, unlike JavaScript and PHP, is it is almost

exclusively used in the context of its webstack, Ruby on Rails. JavaScript and PHP exist

within a number of different contexts and webstacks and are fairly agnostic about how a

programmer should structure their whole workflow. Ruby on the other hand, is less of a

standalone language (though technically it has the capacity to be), and more of a syntactic

component of Ruby on Rails, or “Rails” for short. [3]

       For this reason, the advancement of Rails as a webstack, has steered the development

of Ruby as a language. As a counter example, Laravel, the PHP webstack in discussion, must

add multiple libraries (packages of code that give a programmer access to certain common

use-case functions that are not built into the language) into the framework to make the magic

happen. Also though many people may be programming in PHP, only a fraction will be using

Laravel. Rails, on the other hand, has the advantage of having the full attention of the Ruby

community. It has evolved into a webstack specific language.

       Ruby on Rails

       As mentioned before, the line between Ruby and Ruby on Rails is thin, because Ruby is

almost exclusively used in the context of Rails. However, while Ruby introduces some

interesting ideas as a language by combining Object Oriented design with a scripting

language, Rails also introduces some new concepts into webstacks. One of the most

notorious is the idea of “Convention over Configuration”. In short, Rails enforces having a file

structure in a particular layout (All your HTML.ERB layouts must go in App/views/layouts

                                                                                                13
folder for example.) In this way you do not need to tell Rails where you have stored any of

your files. If you adhere to its rules, it will know where to find everything it needs. This also

means a Ruby developer can more easily pick up where any other ruby developer has left off

with their Rails app. The downside is less freedom in how you choose to structure your app’s

organization. Rails also enforces a Model-View-Controller architecture which is a way of

separating concerns of an app between your data (models), business logic (controllers), and

displays (views). There are several components to allow this kind of behavior.

       HTML.ERB is the HTML abstraction Rails uses to generate HTML pages. Table 4 shows

a basic example that loops through a set of data, generating all the HTML necessary to display

the page as desired.



Shows all “Year” fields in a database. File: app/views/welcome/index.html.erb

 <% @years.each do |year| %>
   <tr>
    <td><%= year.title %></td>
    <td><%= year.text %></td>
    <td><%= link_to 'Show', year_path(year) %></td>
    <td><%= link_to 'Edit', edit_year_path(year) %></td>
   </tr>
 <% end %>

                                              Table 4


       Table 5 shows an example of code that would pass the “year” data to the code in table

4. In this example, table 4 is an example of a “view”, while table 5 is the corresponding

“controller”.




                                                                                                    14
Controller passes @years to the view. File: app/controllers/welcome_controller.rb

class WelcomeController < ApplicationController
 def index
  @years = Year.all
 end
end

                                             Table 5


       Table 6 is an example of the “model”, which defines the structure of the year data. In

this example, the database’s default structure of rows and columns is used, so the file is

mostly blank. (Also an .RB file)




Model tells controller what to fetch from database. File: app/models/year.rb

class Year < ActiveRecord::Base
end

                                             Table 6

       Most of the work is done based on naming conventions of the folders and files in the

system. In other words, I never need to specify that the year model is in app/models/year.rb,

it simply expects to find it there. This is the core of convention over configuration and this

concept will be seen in Laravel as well, which is heavily influenced by Rails in terms of

infrastructure.

       Also, to generate CSS, Ruby developers tend to use SASS. This is a language that

compiles into CSS (Table 7). Notice that like Ruby, SASS uses white space in the place of “{”

and “}”. This is an example of convention over configuration present in the SASS language

                                                                                                 15
itself. The core idea is if a programmer is doing what they are doing the correct way they need

to type a lot less code. However one must adhere to the rules, otherwise the system will

break.



SASS (character count: 116)                      Resulting CSS (character count: 151)

.navigation                                      .navigation ul {
 ul                                               margin: 0;
  margin: 0                                       padding: 0;
  padding: 0                                      list-style: none;
  list-style: none                               }
 li                                              .navigation li {
  display: inline-block                           display: inline-block;
 a                                               }
  display: block                                 .navigation a {
  padding: 6px 12px                               display: block;
  text-decoration: none                           padding: 6px 12px;
                                                  text-decoration: none;
                                                 }



                                             Table 7

         In principle this comprises a very simplified list of Ruby on Rails components. There

are volumes that could be written on the language Ruby alone, which is about 20 years old

now, let alone all of Rails. Ruby is still under continual development as a computer dialect,

going through a new release last December[4]. Rails too, now 10 years old, is about to release

version 5 of the framework, which is still being maintained by its creator, David Heinemeier

Hansson (known as DHH in the Rails community) and his team. They have just released the

beta version 5 of the platform, which offers websocket support, a more recent technological

innovation in the web to allow real-time data updates[5]. Websockets will come up again

when discussing Meteor.

                                                                                                 16
        The image count will be the same across all the different versions of the website.

However, the size of doc (HTML files), js (JavaScript files), and css (CSS files), will vary slightly

based on the webstack in use. Also, what is not shown here is the amount of work being done

by the cloud server to generate these pages. This will vary heavily based on the webstack.




                                                PHP

                                   (PHP: Hypertext Processor)

       Language History

       PHP was created by Rasmus Lerdorf in 1994. Initially PHP stood for Personal

Homepage Page tools. PHP was later renamed to the recursive title of “PHP: Hypertext

Processor”, PHP being the first P in PHP. It was originally created to track visits to Lerdorf’s

resume site. Originally written in C, the toolkit grew and grew over time, acquiring a richer

feature set. It eventually allowed for the data within databases to dynamically direct what a

webpage presented. In June of 1995, the PHP source code was released, allowing the public

to tweak and improve the language. The language began to get popular in the young web

landscape, and in 1998, at least 60,000 domains had the distinct “PHP” headers in their

webpages. This was approximately one percent of all websites at the time, all while the

language was still chiefly being maintained by a single individual. [7]

       Current Usage

       Over time, more developers began to join in and cultivate the language, and by 1998 a

reported ten percent of all web servers were running the language. PHP 5, the most current


                                                                                                   17
version, is currently installed on tens of millions of web servers and is one of the leading

server-side languages by the numbers. It is what much of Facebook, and Wordpress is built

on, though several of the companies heavily using PHP are trying to move away from the

aging language[8]. It was one of the first to enter the web game in a big way, and that has

solidified it in the modern market, for better or for worse. The language was created by a

hobbyist with a specific task in mind (track visits) and that has shown with time.

       The common analogy with PHP is if you ask for a hammer, it will hand you a tool with

claws for pulling out nails on both ends. The tool can be used to hammer in nails still, but it

does not work the way you would expect it to work [9]. Debugging is also a large

inconvenience in PHP. Because errors will frequently not show up until trying to see your

webpage, and no PHP is run in the browser, one has to juggle between their console and the

browser and try to figure out what has gone awry. PHP is one of the few languages where

missing a line terminator “;” can still result in hours of searching for where you missed placing

that single character. The webpage simply will not appear until the semicolon is in place.

       However the language has a lot of momentum, arguably the most popular of which

comes in the form of WordPress which makes up an estimated eighteen percent of all self-

hosted websites on the internet, which is an enormous market share [10]. That means there

are tens of millions of sites built on PHP, so the language will be in use for quite some time

despite its eccentricities and inconsistencies. This also results in there being a number of

people that have specialized in the oddball language.




                                                                                                  18
       Because of the talent density of the language there have been some attempts at

creating webstacks that help alleviate much of the language’s security flaws and ad-hoc

structure. The framework this thesis uses as an example (though there are many PHP

frameworks) is Laravel.

       Laravel

       Laravel was created by Taylor Otwell in 2011, so it is a relatively young framework

compared to Rails, but it makes a good example for cutting-edge PHP development. Like

Rails, Laravel incorporates a Model-View-Controller (MVC) architecture. In other words, there

are separate files for the actual user interface or UI (views), the data structures (models) and

the business logic (controllers)

       Considering that PHP is a language that has been patched together over the years

with, sometimes, dozens of ways to do the same thing, Laravel offers decisiveness with how

to structure your application. Laravel also goes one step further than Rails. Laravel not only

requires you to structure your app in a particular way but they also provide you with a virtual

machine (VM) configured identically to the servers they will provide to you to host your

application, for a fee. This allows a developer to test code on their local machine knowing it

will operate in an identical way to when they push their code up to a cloud server offered by

Laravel through Forge, a service the developers of Laravel offer. In addition to that, they offer

Laracasts that allow a beginner to become competent with the technology starting off with

minimal programming experience. They also have a suggested service for collecting online

payments through Cashier and social sharing through Socialite.



                                                                                               19
       In other words, a developer working in the Laravel webstacks, needs to make no

decisions about which service to use to learn, publish, or cash in on their apps. Laravel makes

all of those decisions for them from the start. This, depending on who one asks, is a great

strength and weakness of the webstack. As an example, for the purposes of this thesis in

testing Laravel’s performance, I was required to publish my Laravel app through a service

other than Forge (Amazon web service, in particular). Because the system is highly coupled to

Forge for cloud hosting, this was difficult to do, and documentation on how to do this was

practically non-existent. Nearly all of Laravel’s tight-knit community is using the suggested

services the Laravel officially supports. This means it is hard to go off of the well-treaded path

when using Laravel.

       Components of Laravel

       Views: For view creation Laravel uses a Laravel specific template system called Blade,

all of which have the file prefix “blade.php”. All views are also in a particular directory in the

predefined file tree structure, similar to Rails. Blade files in particular for Year objects go in

“/resources/views/years/”. Table 8 gives an example of a Blade file showing all of the year

objects sent to it from a controller:


/resources/views/years/index.blade.php

@foreach($years as $y)
   <div class="year">
     <h1 id="{{$y->title}}">
      {{$y->title}}
     </h1>
     <p>{{$y->path}}</p>
  </div>
@endforeach


                                                                                                     20
                                              Table 8



The controller in question is a PHP file structured like the text in Table 9.




/app/http/controllers/YearsController.php

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use DB;
use App\Year;

class YearsController extends Controller
{
 public function index()
 {
  $years = Year::all();
  return view('years\index', compact('years'));
 }
}



                                              Table 9



The “Year::all();” command above gets the “Year” objects from the database, whose location

is in the file that defines the Model which is another PHP file structured like Table 10.




                                                                                            21
/app/Year.php

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Year extends Model
{

}




                                           Table 10

       Table 10 shows code that implies there should be a “years” table in your database.

Any controller file that subsequently uses “Year::all()” will know to check the database table

named years when trying to fetch years. The Laravel specific system that allows for this to

take place is named “Eloquent.” The above example is similar to how Rails defines models,

with the exception of namespaces being necessary at the top of the file.

       In terms of a CSS abstraction, Laravel gives developers a couple options, but the only

one that works from the very start is LESS, also known as “{less}”. Like Rails with Sass, LESS

compiles to CSS. Table 11 shows an example of LESS and the resulting CSS.




                                                                                              22
{less} (Character count: 68 )                     Resulting CSS (Character count: 82)

#header {                                         #header {
 color: black;                                     color: black;
 .navigation {                                    }
  font-size: 12px;                                #header .navigation {
 }                                                 font-size: 12px;
 .logo {                                          }
  width: 300px;                                   #header .logo {
 }                                                 width: 300px;
}                                                 }




                                             Table 11



       All of this together resulted in the lightest site by far. Due to all business logic of the

site happening inside the server and practically none happening through JavaScript, fewer

files need to be sent in response to user requests. This means the bottleneck for the load

time of a site is determined more by the performance of the server, rather than a user’s

bandwidth. A full table of comparisons between the differing sites memory footprint can be

seen in table 22.




                                          JavaScript

       Language History

       JavaScript (JS), not to be confused with the similarly named common computer

technology Java, has a complex history. First of all it was created in only ten days, in 1995 by

Brendan Eich, who at the time was working at Netscape (modern day Mozilla.) After receiving


                                                                                                     23
a trademark license from Sun (the owners of Java at the time), its name became JavaScript.

The association with Java was desirable due to the widespread adoption of Java during that

time, meaning the name carried an air of familiarity and dependability in the computer

science community. The fledgling JavaScript language was then able to latch onto the rise of

Java and ride on its coat tails.

       Creating a new language in only 10 days was an impressive technical feat, but the

short development time left some serious gaps in JavaScript. A group called the European

Computer Manufacturers Association (ECMA), a non-profit computer standards organization,

began to standardize the language, ironing out several of its quirks, in late 1995. This early

standardization is in opposition to PHP’s overall lack of early organization. For this reason,

JavaScript, though far from a perfect scripting language, is a much more consistent language

than PHP [9]. How JavaScript became a part of every webpage we visit today is also an

interesting piece of history.

       The purpose of JavaScript back when it was first created was to manipulate Java

Applets (A method of embedding Java Programs inside a browser) in the Netscape (now

Firefox) browser. It was designed for people who did not want to spend weeks learning all of

the intricacies and complexities of Java. JavaScript abstracted away most of that complexity

behind a simple and flexible scripting language. Rather than compiling into static executing

code, JavaScript was able to change how it executed on the fly, unlike its popular counterpart

Java, making it easier to experiment with. This lead to JavaScript being used for much more

that Java Applet manipulation. Developers began using it for a number of things, like



                                                                                                 24
manipulating images and the text that appeared on the screen. With Netscape being the only

browser with a JavaScript engine, it had a monopoly on this kind of dynamic behavior [1].

What followed is known as the “Browser Wars” and it is arguably the best thing that ever

happened to JavaScript.

       Browsers are constantly in tight competition for market share of internet users. The

main opposition of NetScape’s browser at the time was Internet Explorer. Not to be outdone

by Mozilla, Microsoft implemented their own JavaScript engine, one that claimed to be much

faster. An arms race followed. By the time Google joined the fight with Chrome, all three

major companies had some of their best engineers working to make their JavaScript engines

airtight and faster than the competition. Tens of millions of R&D dollars, and hundreds of top

notch engineers’ best efforts were put into the little language until it became the fine-tuned

powerhouse it is today, ubiquitous across all web pages.

       Over time, two major additions came to the language. The first was AJAX

(Asynchronous JavaScript and XML) calls. This allowed JavaScript functions to ask a server

for more data without having to visit a new page. This is something most internet users take

for granted, but it is a relatively new invention (2004-2005) [12]. The change this caused can

be shown in Figure 2.




                                                                                              25
By DanielSHaischt, via Wikimedia Commons - https://commons.wikimedia.org/wiki/File%3AAjax-vergleich.svg,
CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=29724785


                                               Figure 2

        Current Usage

        The introduction of AJAX meant that instead of sending whole web pages in a big

batch over the internet, one could just send data, and allow the JavaScript that was sent


                                                                                                      26
earlier to make the web page on behalf of the server. In this way one can distribute the

computational burden between users. Also after the initial load, limited bandwidth is not as

limiting. Data heavy interactive web applications (like Google Maps) became possible.

       Employability

       JavaScript began to take on more and more of the complexity of web applications.

Over time, more and more of an application’s muscle was moved into JavaScript files that ran

in the user’s browser. To cope with this rise in JavaScript complexity, more JavaScript

engineers had to be trained and hired to handle the demand, leading to JavaScript being the

most popular language today in terms of job offerings, and community size (Table 14) when

compared to any other programming language. This also proved to the industry that

JavaScript was capable of scaling and handling enterprise level problems. What followed

was that industry leaders started to write all of their application, client-side and server-side,

in JavaScript.




                                                                                                27
Language           Jobs with language      Package counts        Stackoverflow     Github
                   as keyword on           as of Feb. 20162      users using       popularity
                   Glassdoor as of Feb.                          language3         rank4
                   20161

JavaScript         57,772                  npm: 245,487          54.5%             #1
                                           Bower: 49,452

Ruby               16,352                  Rubygems:             8%                #3
                                           114,958

PHP                15,575                  Packagist: 87,433     27.9%             #4

                                           Table 12

1.https://www.glassdoor.com/index.htm
2.http://www.modulecounts.com/, https://rubygems.org/search?utf8=%E2%9C%93&query=
 https://packagist.org/statistics
3.http://stackoverflow.com/research/developer-survey-2015
4.http://githut.info/


Node.js

       Node.js, also known as Node, is the server-side implementation of JavaScript, first

created in 2008 by Ryan Dahl. It runs using the V8 engine, which is the same JavaScript

engine used by the Google Chrome browser. In essence it makes a server into a faceless

browser that executes JavaScript code continuously, waiting for requests from users. It is all

asynchronous by default, meaning whenever I/O operations are taking place it can continue

to run, while a chunk of code is pushed onto a worker, which waits to hear back from the

database. In other words, there is no downtime. The “Event Loop”, which is the name of the

JavaScript mechanism that makes this behavior possible, is always spinning. Ruby and PHP

can imitate this behavior if a few hoops are jumped through, but with Node, it is the default

behavior. For this reason Node Servers are known for scaling well, and are gaining

                                                                                                28
popularity. As proof of Node’s popularity, its community package system is already the most

popular in the world, nearly twice that of the second most popular, Java [13]

       The advent of Node also meant developers that had been programming client-side

scripts (front-end developers) could start to do server-side programming (back-end

developers). All web-centric companies were already staffing JavaScript developers, because

one needed them to create most websites. After Node.js, conceivably, companies only

needed to heavily hire JavaScript developers, which were already plentiful due to preexisting

demand.

       As a result of this relatively new JavaScript ubiquity, several “Pure” JavaScript stacks

have come into being. This thesis discusses two such stacks. The first, MEAN, is a

combination of several very popular NPM, or Node Package Manager, packages, used in

conjunction with one another. The last, Meteor, is perhaps the most ambitious of the

webstacks covered so far, which blurs the line between Client and Server altogether.

       MEAN

       The MEAN stack is chiefly a combination of four things: MongoDB, ExpressJS,

AngularJS, and of course, NodeJS. This is the most flexibly structured of all the webstacks

covered in this thesis, being composed at its very base of four decoupled packages.

       MongoDB is in a family of databases called “NoSQL”. The name NoSQL is somewhat

purposefully inflammatory of SQL databases, which are by far the most common family of

databases. To give an analogy, an SQL database, like MySQL, is anatomically structured like a

several paged Excel spreadsheet. It is a large collection of named columns called “attributes”



                                                                                              29
and rows called “entries”. This is then broken up further into tables. Each table can be

thought of as holding a single type of entry. The problem with this kind of database is if your

data is not conveniently structured in a two dimensional way.

       For example, say one wanted to make a meaningful database of classes at UTC. A

“class” has many students enrolled, it may also be offered several different times. To

structure this data in a SQL database, one would require several tables. One would be the

class table itself. Each class entry would have an ID column, as well as entries like “name”

etc. Then there would be a student table, each with their own ID and other pertinent

information about the student. Then one needs a table of “offerings” which stores a class ID,

and a date for when the class is offered. Then one needs a table of “enrollments” which

stores, for each student in each offering of each class a pair of student IDs and offering IDs.

This is not an uncommon scenario in SQL database architecting. The web of tables explodes

rather quickly for a complex system.

       This is where NoSQL, or non-relational databases come into the picture. Rather than

creating a separate table for each type of object, and relationship between each object, one

can embed objects inside of each other. That may sound complicated, but it is really the way

most humans already think of things.

       To demonstrate the previous example, to create the above “class” database in a

NoSQL database like MongoDB, one would need only two data types in their database,

student and class. They would be structured as shown in Table 13




                                                                                                  30
Student                                          Class

_id: (The student's unique ID)                   id: (class ID)
name: …                                          offerings:[
(other stuff about student)                       {
                                                   time: 9:00am,
                                                   students_enrolled:[list of
                                                   student IDs]
                                                  },
                                                  {
                                                    time: 11:00am,
                                                    students_enrolled:[list of
                                                    student IDs]
                                                  },
                                                 ],
                                                 other stuff about class…



                                            Table 13



       Each class data point contains a list of offerings that each in turn contain a list of

student IDs. This makes the database more intuitive, because it can be organized in the way

one already thinks about it. Lists within lists are OK in a Non-relational database. Put simply,

your data structure does not need to be flat. The data is formatted into JSON (JavaScript

Object Notation), which, ironically, is a prevalent data structure in many programming

languages. And as the name implies, it has the same syntax as Objects in JavaScript. In other

words, MongoDB stores data as JavaScript Objects. Even the database is structured like the

JavaScript.

       In order to secure one’s database against injection of attributes that are undesirable, a

typical package to use along with MongoDB is called Mongoose. This checks everything that




                                                                                                31
is entering the database to ensure it meets the desired structure of JSON. Table 16 shows an

example of a year model in Mongoose.

model.js

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

  var YearSchema = new Schema({
    poi: [{
      title: String,
      text: [String],
      additions: [String]
    }],
    title: String,
    languges: [String]
  });

  var YearModel = mongoose.model('Year', YearSchema);




                                               Table 14



        Code shown in table 14 is all one needs to create a “Year” object in their database that

contains a list of pois (Points of interest), that each contain titles, a list of differents texts, and

a list of additions. It also contains a “title” field for a title of the year, and a list of languages.

The last line attaches the Schema to the model of Year in MongoDB. In a SQL database, this

same data structure would take at least 5 different tables. So though it seems complex,

compared to the status quo, it is a drastic improvement in coder efficiency. Also, after pulling

the data from a database, if one is coding in JavaScript no parsing is necessary because the




                                                                                                      32
data is already formatted to the shape of a JavaScript object. One can directly begin using

the data like any other JavaScript variable.

         ExpressJS handles routing. In other words, when you visit a site with a URL like:

“https://www.mysite.com/about/jackson” Whatever site is dishing out the “mysite.com”

domain name, has their server listening for what’s added at the end of the URL. It sees at the

end of “mysite.com” is the text “/about/jackson”. Express sets up listeners for these strings

and will return the appropriate pages based on this string. If nothing is added at the end, the

server will usually have a default homepage setup.

         In ExpressJS, a file to handle the above URL looks something like what is shown in

Table 15.


app.js

var app = express();
index = function(req, res){
  res.render('/views/index');
};
app.get('/about/jackson', index);



                                             Table 15



When a user asks for the URL “https://www.mysite.com/about/jackson” ExpressJS will fire

the index function which will render the index page stored in the views folder. In Rails and

Laravel, this “routing” is built into the webstack. Because MEAN is more of a set of commonly

loosely grouped packages rather than a cohesive webstack, ExpressJS is what provides this

functionality.


                                                                                                33
       Also because the whole application is JavaScript already, most of the view behavior is

defined in client-side JavaScript. This is done in a front-facing JavaScript Framework called

AngularJS. Unlike Laravel and Rails, that have a Model-View-Controller architecture server-

side, with a MEAN stack application, the server only worries about responding to API calls and

updating the database, and all the other logic is run in the client’s browser.

       AngularJS was developed by Google, and offers a number of organizations for

JavaScript development that are not normally present. Using the Ajax calls described earlier,

it creates dynamic web applications that after the initial page visit, only need bits and pieces

of data from the server to generate subsequent pages. This can result in a slow initial load

time because the server sends all logic at the start, but all subsequent interactions with the

application are generally much faster. Table 16 includes the JavaScript used to make an Ajax

call to the server to fetch some data, and the HTML below it that renders each “year” object

returned from the NoSQL database. Notice how no parsing is necessary to use that data

returned from the database.


yearcontroller.js

myApp.controller('years', ['$scope', '$http', function($scope,
$http){
  $http.get('/data').then(function(result){
    $scope.years= result.data;
  });
}]);

index.html

<div ng-repeat="year in years">
{{year}}
</div>
                                            Table 16

                                                                                                 34
       Also, if the computational complexity of the application is great enough, this can allow

a service provider to distribute the computational load of the app. In other words, if one were

to submit a profile photo to a Laravel server, the cropping of that photo would likely take

place on the server, increasing your server fees for an adequately sized application. On the

other hand a heavily client-side JavaScript application, can have a user’s computer use its

own resources to crop the photo before it is sent to the MEAN server. As a user this may only

be a couple second delay on their end, but the server does not have to do any of the work.

This approach tends to scale much better because of each visitor to the site effectively

donates their machine to run application logic. Their computational resources grow with

each new visitor. All their servers have to do is send a user the scripts to run.

       In terms of the size of the site, a MEAN stack website is larger in the initial size of

packages delivered (conventionally), because it sends the index.html page, styling, and

JavaScript files that handle dynamic page generation. Data is then fetched from the server

on a need-by-need basis. So at least two round trips are needed to generate the page. The

JavaScript then needs a couple frames to re-render the page for the user to fit the new data

that has come in. The payoff however, is shown when there is a multi-page website, and

users jump from page to page. All subsequent calls to the database are just data fetches.

Frequently, no new HTML or CSS needs to be fetched, as is the case in many server-side

rendering stacks.




                                                                                                 35
       Meteor

       There are however unique downfalls to the MEAN stack. Mainly, unlike Laravel, and

Ruby on Rails, there are many different flavors of MEAN stack, and no one’s two MEAN stacks

are identical in terms of packages being used, and version numbers. Because MEAN is a

loosely coupled set of open sourced Node packages, not maintained by any central authority,

the likelihood is that your stack is a unique snowflake among all other servers on the internet.

This means when debugging, resources that fit one’s exact needs are hard to come by

because the community is so fragmented. Some use Angular 1.4, while others have decided

to opt for Angular 2, which is not backwards compatible and has some pretty substantial

syntactic differences. Also a package like ExpressJS may one day simply lose its contribution

base in a matter of months because the package is supported by volunteers. When building

something of scale or enterprise level, this can be a deal breaker. MEAN stack applications do

not age well, because the 4 technologies are widely evolving on different trajectories, and

there is no central authority ensuring backwards compatibility.

       That is where Meteor comes into play. Meteor is an open sourced webstack, but

where it differs from stacks like the MEAN stack is all of its major components (with a couple

small exceptions like routing) are built in-house by a single for-profit company (Meteor

Development Group) that is well funded [14]. The company earns revenue through offering

development support and deployment automation and scaling through a service called

Galaxy. The whole system is built on NodeJS, and offers a unique approach to Client vs.

Server style applications.



                                                                                              36
       Being a centralized JavaScript solution, Meteor is able to do things other webstacks

cannot. As an example, Meteor can run the same code on the server and the client. An

example of this is shown in Table 17.


Example of how Meteor separates client, server, and code meant to run on both.

if (Meteor.isClient) {
//code here will only execute on the user's browser
}
if (Meteor.isServer) {
//code here will only run in the server.
}

//Code outside will run on both the server and browser.



                                           Table 17

       This allows for “optimistic UI” features out of the box. It also means you only need to

write your validation once. The same code that validates a submission on the server, can be

sent to the client. (If say I want usernames to have a minimum length of 8 characters, I do not

need to check that on the browser and the server. I only need to write code for that once, and

it can be run in both locations.) This also allows Meteor to have a unique advantage when it

comes to its packages.

       Because Meteor is a uniform JavaScript webstack, that guarantees certain structures

of a developer’s app. This means package authors are able to write packages that incorporate

front and backend logic.

       To illustrate what this means, for most applications, if one wanted to implement a

login system, they would need a number of packages. They would need to have a way to

store user data securely, either on their own server or a 3rd party. They would also need

                                                                                               37
some method of client-side hashing of passwords, and usage of cookies to maintain that

logged in state. They also then need to make a module that allows users to actually input a

login and password. Then they need a server-side system that can authenticate that the user

is in fact logged in for the current session. This usually amounts to four different things

needed to be implemented. If one wants to use packages to achieve this they will have to find

four different packages that can handle all of this, and the packages need to be aligned in

how they interact. This is rarely the case so some configuration and integration overhead will

be incurred.

       Because Meteor abstracts the server-client relationship largely behind the scenes, a

single package can add all of this to your project. What previously would take a week to

implement in the MEAN stack, in Meteor - if a good package is available - can take a matter of

minutes to get up and running because package authors can be more confident is how a user

has structured their app.

       When an app is pushed to production, Meteor will by default compress and package

all of your JavaScript in the most efficient way possible. Any Precompilers (CoffeeScript,

TypeScript, ES6, {less}, SASS, Stylus, etc.) can all be used easily within the meteor ecosystem,

because a single package can edit the innards of a Meteor app as is necessary to allow this

kind of behavior. Packages really are plug and play, with minimal configuration and

integration.




                                                                                              38
       Another advantage to a Meteor app is that a nearly identical code base can be

published to mobile platforms such as iOS, and Android. But because this thesis is about the

web world, this will not be taken into consideration.

       The default database for Meteor, like the MEAN stack, is MongoDB. However, instead

of using Mongoose, which is an ExpressJS specific package, Meteor uses SimpleSchema.

Figure 18 shows an example of creating a year object in SimpleSchema:


collections.js

let Years = new Meteor.Collection('years'); //creates DB entry

let POISchema = new SimpleSchema({ //is embedded in yearschema
 title: {type: String},
 text: {type: [String]},
 additions: {type: [String]},
});

let YearSchema = new SimpleSchema({
 poi: {type: [POISchema]},
 year: {type: String},
 languages: {type: [String]},
});

Years.attachSchema(YearSchema);



                                           Table 18

       Because all data object definitions go through the “Meteor.collection” method,

packages are able to create object types in your database, reducing the amount of boilerplate

code one has to write.




                                                                                          39
        In terms of front-end templating of HTML, by default Meteor uses Blaze, though it

supports a variety of different front-end frameworks. Table 19 shows an example of a Blaze

view.


index.html

<template name="year">
  {{#each years}}
    <div class="year">
      <h1 id="{{year}}">{{year}}</h1>
      <div class="language-header">Languages Known:</div>
       {{#each languages}}
         <span class="bolder">{{{this}}}</span>
       {{/each}}
     </div>
  {{/each}}
</template>



                                           Table 19



        The above example will output each year, and each language associated with each

year, that is passed to the template named “year”. A controller that pulls in the data to the

“year” template is known as a helper, and the Table 20 shows an example of that.


helper.js

if (Meteor.isClient) {
  Template.year.helpers({
  years: () => {
   return Years.find({}, {sort: [['year', 'asc']]});
  },
 });
}



                                           Table 20

                                                                                                40
Using the convention over configuration rule established by Ruby on Rails, this snippet of

code knows to hand this data to the “year” template.

        To allow a template to actually pull the data from the server, one needs to explicitly

publish this data. This is done by a JavaScript file structured like Table 21:


later in collection.js

Meteor.publish('years', function(){
  return Years.find();
});



                                            Table 21



        This means anyone who visits the webpage has access to all years within the

database. This also has the added benefit of have real time updates. If an administrator

added a new year to the database, that new year would automatically appear on all users’

pages without them even having to hit refresh. This has a performance cost associated with

it, because it means Meteor has a websocket connection with every user using the site, but it

has the added benefit that all data being shown is the latest data to show. No extra

configuration is needed on the part of the developer on this. It is Meteor’s default behavior.




                                                                                                 41
                                         Measurements

          Resource Usage

          Each of the sites, though identical in appearance, sent slightly different types of files in

different proportions in order to generate the end result. Table 22 shows a comparison

between the various sites. This was measured using Google Chrome’s YSlow extension.

Components             Ruby on Rails       Laravel             MEAN stack           Meteor
                       (Ruby)              (PHP)               (JavaScript)         (JavaScript)
All                    3531 KB             3155 KB             3522 KB              8536 KB

HTML                   16 KB               14 KB               4.2 KB               7 KB

JavaScript             385 KB              132.8 KB            466.9 KB             5455 KB

CSS                    135 KB              148.2 KB            143.2 KB             151 KB

Images                 2923 KB             2923 KB             2923 KB              2923 KB

Favicon                72 KB               0 KB                0 KB                 0 KB




                                                  Table 22




          DoS Attack

          To give each framework a run for their money, I deployed an identical site built in each

corresponding stack, and deployed them on an identical server spec (AWS EC2 t2-micro cloud

instance). I then used an online service centralized in Sweden called LoadImpact

(https://loadimpact.com/) that sent 200 virtual users to each server within the span of a

minute. Given that each of these websites was being dished out of Amazon’s smallest single



                                                                                                   42
core servers, this was plenty to see how the stack handles itself under pressure. LoadImpact

then recorded load times for each virtual user. It then returned the results in a graphical

format. On the next two pages are the results of that experiment. The results are unexpected

to say the least.




                                                                                              43
Results

Ruby on Rails (Ruby) - 3273 reqs, 274.39 MB




Meteor (JavaScript) - 10019 reqs, 993.38 MB




                                              44
Laravel (PHP) - 3686 reqs, 939.56 MB




MEAN Stack (JavaScript) - 3210 reqs, 348.83 MB




                                                 45
       Laravel by far performed the best of any of the other stacks. PHP is not known for its

performance, however there are several explanations for why the results varied to the degree

they did. (By more than a factor of 10!)

   1. By nature the internet is fickle and yields irregular results. It is very possible AWS

       simply had a performance hiccup while I executed the previous three tests. Given how

       a vast amount of the load time should have been images, which in all cases were over

       fifty percent of the site’s memory footprint, a x10 speed is unexpected to say the least

       given that all sites had identical images.

   2. Laravel out-of-the-box does some caching on behalf of the developer, meaning if a

       similar page is continually requested from users, it saves the page and does not re-

       render it, but sends it to the new user. All stacks have the capacity to do this, but it is

       not built in from the start.

   3. No optimization was done on the part of any of the stacks. For example, Meteor was

       never published in production mode, because the AWS server did not support that

       functionality. As a result the site was not nearly as preformant as it would be

       otherwise.

   4. The small websites are also not indicative of what a real web-app may be like. Most

       production websites are not single, static page applications.

However, all that aside, with the least amount of effort put towards optimization, based on

this single experiment, it appears Laravel wins the prize.



                                                                                                 46
                                         Conclusion

       The web is a wild and crazy place for a developer. A technology only invented a few

decades ago, the Internet, has spawned one of the most fantastic and diverse realms of

enquiry and craftsmanship. In some sense it’s all as simple as some HTML, CSS, and

JavaScript, but in another sense, it’s not about those technologies at all. The languages in use

on servers are as numerous as they are diverse. Countless webstacks in circulation each have

different fundamental philosophical approaches to the task of web development. They each

have certain strengths and goals, and each has within it a nugget to learn from.

       Although this thesis gave an overview into four very different webstacks, it has only

scratched the surface of this topic. There are several other important technologies such as

Google’s GWT [15] (a full-stack Java framework), Microsoft’s ASP.NET (which is built on C#),

and an up and coming webstack called Phoenix [16] (a webstack built on a dialect of Erlang

called Elixir - a functional language unlike anything covered in this paper). Clearly there is a

wide array of ways to code for the web. In terms of personal exploration and growth, the

options are near limitless.

       This thesis has given the reader an overview of the types of webstacks that exist today

in order to springboard them into further web technology based studies. Though

employment leans heavily toward technologies such as JavaScript, ASP.NET, and Java as of

2016, if one looks hard enough, one can find a business doing development in just about any

technology. Therefore, if an individual wishes to pursue a career in web development, the




                                                                                                   47
most important question to answer is “which language(s) do I enjoy the most?”. The only way

to answer this question is to explore.




                                         Definitions

API: Application Program Interface. How a business exposes their server-side programs to be
used by other programs. Example: When a user logs into a Spotify account using a Facebook
account, Spotify is utilizing Facebook’s API.

App: Short for application, which is a general term for a full software product. Could be a
website or a mobile application based on context.

Asynchronous: While the code waits on input or output, the rest of the program continues to
run. This gives a rise in performance.

Client-side (Front-end): Aspects of a website that live in a browser. This includes HTML, CSS,
and a certain kind of JavaScript. NodeJS is an example of JavaScript that is not client-side.

Codebase: The full body of source code. The sum of all program related text files making up
an application.

Compiled: When source code has been converted to machine code, which are binary
instructions that a computer can understand. The result is not human readable and it is the
form most programs are distributed in. The result is so gnarly that it makes the program
difficult nearly impossible to reverse engineer.

Cookie: A unique digital “finger print” that identifies a user for a server. Under normal
circumstances, every request a user sends to a server, has a cookie attached.

CSS: Cascading Style Sheets. Used to decorate a web page’s content.

Data Packet: Small pieces of a message sent over the internet in a sequence in the form of
binary information that is decoded when it arrives at its destination.

DoS Attack: Denial of service attack. When a server is intentionally flooded with requests so
that it crashes or is unable to respond to genuine users trying to access the content.




                                                                                              48
Framework: A specialized abstraction of a computer language, usually good at a particular
group of problems. Example: AngularJS is a JavaScript framework, created to make front-end
JavaScript easier.

HCJS: HTML, CSS, and JavaScript in conjunction with one another.

HTML: Hypertext Markup Language. The language that content is displayed through on a
browser.

JavaScript (JS): The Turing complete language that can run in a browser. It can be run on a
server in the form of NodeJS.

Open Source: Code that is distributed through one of many potential publishing licenses
with the intent of allowing others to build on the codebase. This code is not compiled before
hand.

Package: A reusable and modular collection of programs that preform a particular function,
that are intended to be used in a larger system. Commonly open source.

PHP: PHP hypertext processor. One of the oldest server-side technologies still in widespread
use today.

Piped data: Data that is input into one program, and the subsequent output is used as input
for another program, and so on.

Production: When a program is accessible by its intended audience, it is considered in
“production”.

Rails: Shorthand for the webstack Ruby on Rails.

Server-side (Back-end): Aspects of a website that live on a remote server. This is the aspect
of the business that is generally kept secret. This can include nearly any language. This
combine with client-side scripts make up a full website.

Server: A computer with a corresponding IP address that is “listening” for user requests, and
responds to those requests using server-side programs.

Stack: Short for webstack.

Source code: The text that makes up a program. Ideally it is human-readable.




                                                                                            49
Web-socket: A way for a browser to stay in constant communication with a web server,
taking in streams of flowing data. If data changes in the server, it is immediately pushed down
to connected browsers that have a maintained web-socket connection.

Webstack: A group of technologies, typically composed of several languages and
frameworks, that work in conjunction to create a website.




                                          Sources
       Citations

[1] "A Short History of JavaScript." Web Education Community Group. Web. 01 Apr. 2016.
<https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript>.

[2] "Lesson 8: Object-Oriented Programming." Oracle.com. Web. 01 Apr. 2016.
<http://www.oracle.com/technetwork/java/oo-140949.html>.

[3] "The History of Ruby." Site Point. 2014. Web. 01 Apr. 2016.
<http://www.sitepoint.com/history-ruby/>.

[4] "Ruby." Programming Language. Web. 01 Apr. 2016. <https://www.ruby-lang.org/en/>.

[5] "Imagine What You Could Build If You Learned Ruby on Rails…." Ruby on Rails. Web. 01
Apr. 2016. <http://rubyonrails.org/>.

[6] "Ruby." About. Web. 01 Apr. 2016. <https://www.ruby-lang.org/en/about/>.

[7] "History of PHP and Related Projects." PHP.net. Web. 01 Apr. 2016.
<http://php.net/manual/en/history.php>.

[8] "Why Hasn't Facebook Migrated Away from PHP?" - Quora. Web. 01 Apr. 2016.
<https://www.quora.com/Why-hasn-t-Facebook-migrated-away-from-PHP>.

[9] "PHP: A Fractal of Bad design." Fuzzy Notepad Atom. Web. 01 Apr. 2016.
<https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/>.

[10] "14 Surprising Statistics About WordPress Usage - ManageWP." ManageWP. 2014. Web. 01
Apr. 2016. <https://managewp.com/14-surprising-statistics-about-wordpress-usage>.




                                                                                            50
[11] Meyer, Eric A. CSS: The Definitive Gui<img
src="https://lh3.googleusercontent.com/EWjISouKv8KAdJ58XNJDpcNy_yUk_BFhvyAmTnbyQ
4aVcaKkywQ5NICo9JzjnDu6daNg=rw">

[12] "Ajax: A New Approach to Web Applications." Adaptive Path » Ajax: A New Approach to Web
Applications. Web. 01 Apr. 2016.
<https://web.archive.org/web/20080702075113/http://www.adaptivepath.com/ideas/essays/
archives/000385.php>.

[13] "Node.js." Node.js. Web. 01 Apr. 2016. <https://nodejs.org/en/>.

[14] "People." Meteor Blog RSS. Web. 01 Apr. 2016. <https://www.meteor.com/people>.

[15] "Productivity for Developers, Performance for Users." GWT Project. Web. 01 Apr. 2016.
<http://www.gwtproject.org/?csw=1>.

[16] "Phoenix." Phoenix Framework. Web. 01 Apr. 2016.
<http://www.phoenixframework.org/>.

[17] Rao, Siddhartha. Sams Teach Yourself C in One Hour a Day. Indianapolis, IN: Sams Pub.,
2012. Print. de. Beijing: O'Reilly, 2007. Print.

[18] Flanagan, David. JavaScript: The Definitive Guide. Sebastopol, CA: O'Reilly, 2006. Print.

[19] Chodorow, Kristina. MongoDB: The Definitive Guide. Beijing: O'Reilly, 2013. Print.

[20] Lerdorf, Rasmus, Kevin Tatroe, and Peter MacIntyre. Programming PHP. Sebastopol, CA:
O'Reilly, 2006. Print.

       Code Repository Links

PHP (Laravel): https://github.com/jacksonStone/LaravelPersonal

JavaScript (Meteor): https://github.com/jacksonStone/meteorPersonal

Ruby (Ruby on rails): https://github.com/jacksonStone/rubyPersonal

JavaScript (MEAN stack): https://github.com/jacksonStone/js-stack


       Website Links (As of March 2016)



                                                                                             51
PHP (Laravel): http://ec2-52-87-211-140.compute-1.amazonaws.com/

JavaScript (Meteor): http://54.84.130.254/

Ruby (Ruby on rails): http://54.175.129.165

JavaScript (MEAN stack): http://52.23.200.234/




                                                                   52