Dzone Guidetowebdevelopment 2016
Dzone Guidetowebdevelopment 2016
Dzone Guidetowebdevelopment 2016
DZONE.COM/GUIDES
DEAR READE R ,
EXECUTIVE SUMMARY
BY MATT WERNER
year I often reflect on the past months. The rate of change around
web development has been increasing. Hardly a day goes by where
we dont see a new framework, or a new technique. Methods that
seemed advanced when we overhauled DZone.com just 1.5 years
ago, seem much more commonplace now. And who remembers
Web 2.0? That seems like ancient history today, when in truth it
was just a few short years ago.
The world of Web Development is growing. JavaScript, and other
front-end technologies, are by far the most popular languages
on Stack Overflow. The DZone Web Dev portal has been steadily
growing, and is now our second most popular portal. Modern-day
web development spans both the front-and the back-end. Today,
the full-stack developer often reaches into their toolbox and pulls
out JavaScript, as tools like Node.js allow the developer to leverage
a single language across the entire stackallowing for focus and
productivity. The number of developers familiar with JavaScript
ensures that your projects will have an easier time finding qualified
people as well.
With a low barrier to entry, many new developers (and experienced
ones as well) are building web applications. Looking back to our
recent Application Security Guide, XSS (Cross-Site Scripting)
and other front-end attacks are the most prevalent. How will we
enforce security in this fast-moving and fast-growing world where
new frameworks appear nearly daily? As we begin to rely more and
MARKETING
KELLET ATKINSON
EDITORIAL
CAITLIN CANDELMO
BUSINESS
RICK ROSS
DIRECTOR OF MARKETING
DIRECTOR OF CONTENT +
COMMUNITY
CEO
MATT WERNER
JESSE DAVIS
LAUREN CURATOLA
MARKETING SPECIALIST
KRISTEN PAGN
MARKETING SPECIALIST
NATALIE IANNELLO
MARKETING SPECIALIST
MIKE GATES
DIRECTOR OF PRODUCTION
SARAH DAVIS
ANDRE POWELL
a server. Some in the industry will say that this is the way of the
G. RYAN SPAIN
telland given the rate of change lately, I imagine that time will
be soon!
NICOLE WOLFE
PRODUCTION
CHRIS SMITH
CONTENT COORDINATOR
MICHAEL THARRINGTON
CONTENT COORDINATOR
CONTENT COORDINATOR
TOM SMITH
RESEARCH ANALYST
ASHLEY SLATE
DESIGN DIRECTOR
MATT SCHMIDT
MATT OBRIAN
DIRECTOR OF BUSINESS
DEVELOPMENT
sales@dzone.com
ALEX CRAFTS
DIRECTOR OF MAJOR ACCOUNTS
JIM HOWARD
SR ACCOUNT EXECUTIVE
JIM DYER
ACCOUNT EXECUTIVE
ANDREW BARKER
ACCOUNT EXECUTIVE
CHRIS BRUMFIELD
ACCOUNT MANAGER
ANA JONES
ACCOUNT MANAGER
Thank you for reading the first edition of The DZone Guide to Web
Development, and thank you to all our sponsors and contributors
who helped make this years series be the best one yet. Happy
Holidays to everyone and I hope you enjoy reading this guide as
much as we enjoyed making it!
BY MATT SCHMIDT
PRESIDENT & CTO AT DZONE
RESEARCH@DZONE.COM
SPECIAL THANKS
to our topic experts,
Zone Leaders, trusted
DZone Most Valuable
Bloggers, and dedicated
users for all their
help and feedback in
making this report a
great success.
DZONE.COM/GUIDES
Executive
Summary
BY M AT T W E R N E R
C O N T E N T A N D C O M M U N I T Y M A N AG E R , DZO N E
RECOMMENDATIONS
DATA
said they do server side. 56% said they worked on the full
IMPLICATIONS
IS ANGULAR 1 DEAD?
DATA
used either Angular 2 or React and would not use either again.
full-stack development.
IMPLICATIONS
RECOMMENDATIONS
users unhappy with Angular 1 over the next two most popular
RECOMMENDATIONS
are finding that they have a lot of issues with their Angular
vs. 89%), and are more likely to use newer JS features such as
front or backend.
DZONE.COM/GUIDES
Key
Research
Findings
BY G . R YA N S PA I N
P R O D U C T I O N C O O R D I N ATO R , DZO N E
FRAMEWORK POPULARITY
The AngularJS framework has had an enormous impact
on web development since its release in 2010. Among our
survey respondents, Angular was the most widely used
framework, with 69% use, well ahead of second- and thirdplace frameworks Node.js (50%) and React (30%). However,
attitudes towards Angular, at least Angular 1, suggest
that developers may be searching for alternatives to the
original Angular framework. 11% of respondents said they
have used Angular 1 and would not use it again, almost
1/5 of the respondents who said they have used Angular at
all. Compared to attitudes about React and Angular 2, the
two next most popular client-side JavaScript frameworks,
each of which having <1% of users saying they would not
use again, this number is not insignificant. And while
React and Angular 2 are not yet as widely used, with
30% of respondents saying they have used each in some
capacity, interest in both of these frameworks is high: 50%
of respondents said they have heard of and want to use
each framework. While the broad interest in Angular 2 likely
means Angular is not going anywhere soon, these results
indicate a move away from Angular 1, and possibly toward
other, non-Angular frameworks.
ANGULAR 2
70%
60%
50%
ANGULAR
40%
30%
20%
REACT
10%
Never heard
of it
10%
20%
30% 40%
50%
60%
70%
0%
Serverside does
integration bet.
systems like
database, message
queues, EIS
AVERAGE
Serverside
exposes APIs
Serverside
does business
logic
BACK-END DEVELOPER
Serverside
generates UI
Frontend does
integration bet.
systems like multiple
RESTful services,
message queues,
etc.
FRONT-END DEVELOPER
Frontend
does
business
logic
Frontend
generates
UI
DZONE.COM/GUIDES
like modules (34% vs. 21% and 20%), classes (30% vs. 21%
and 24%), and arrow functions (36% vs. 17% and 28%) than
FULL-STACK PREFERENCES
The way respondents answered whether they worked more
on the frontend, backend, or full-stack of web apps often
have changed how they answered other questions. Frontend
and backend respondents generally leaned more towards
options that emphasized their frontend or backend focus,
and the full-stack respondents generally fell somewhere
in between. So it was interesting to learn which way fullstack respondents were leaning. As one example, fullstack respondents leaned much more closely to backend
respondents regarding client/server work division. On the
other hand, full-stack respondents leaned towards frontend
respondents when it comes to responsive design; backend
respondents were about twice as likely (11%) to say they
did not use responsive design as frontend (4%) and fullstack (5%) respondents. But full-stack respondents were
more likely than frontend and backend respondents to say
they would not use Angular 1 again (14% versus 6% and 8%,
100%
90%
7.5
80%
70%
YES
60%
50%
92.5
40%
30%
NO
20%
10%
0%
BROWSER
SERVER
HYBRID
MOBILE
(CORDOVA/PHONEGAP)
90%
100%
80%
90%
70%
80%
60%
70%
50%
60%
40%
50%
30%
20%
40%
10%
30%
0%
REACT
ANGULAR
NODE
jQUERY
SERVER-SIDE DEVELOPMENT
MOBILE DEVELOPMENT
AVERAGE/BROWSER DEVELOPMENT
20%
10%
0%
GOOGLE
CHROME
MOZILLA
FIREFOX
INTERNET
EXPLORER
SAFARI
EDGE
OPERA
SPONSORED OPINION
By Optimizely
Optimizely X Full Stack lets you quickly and reliably run experiments, learn, and launch
new features anywhere in your technology stack.
CATEGORY
NEW RELEASES
OPEN SOURCE
STRENGTHS
Experimentation
Platform
Monthly
All SDKs
CASE STUDY
BLOG blog.optimizely.com
Event tracking - Monitor all the conversion metrics and KPIs you
care about.
Open-source SDKs - Install any of our SDKs and run your first
experiment in 10 minutes.
NOTABLE CUSTOMERS
CBS
ADP
TWITTER @optimizely
Clorox
Spotify
HP
LOreal
Microsoft
Adidas
WEBSITE optimizely.com
DZONE.COM/GUIDES
Functional
Reactive UI
Programming
QUICK VIEW
01
02
03
BY M ICHAEL HEINRICHS
SOFTWARE ENGINEER AT CANOO ENGINEERING AG
application developer.
STATE
VIEW()
DOM
DRIVER
UPDATER
ACTION
VIRTUAL DOM
ACTION
CREATOR
DOM
EVENT
DZONE.COM/GUIDES
{ tagName: div,
attributes: {
class: view
},
children: [
{ tagName: input, ... },
{ tagName: label, ... },
{ tagName: button, ... }
]
}
STRAIGHTFORWARD TESTING
the future.
SUMMARY
DZONE.COM/GUIDES
QUICK VIEW
Totally Modular,
Dude!
BY BILL SOUROUR
FOUNDER AT DEVMASTERY.COM
01
Modular programming
leads to better readability,
collaboration, reusability, and
encapsulation. This means
fewer bugs and cleaner code.
02
03
READABILITY
Suppose that the entire text of this article was presented to you
is a big challenge. Thats why, since the mid-late 2000s most web
COLLABORATION
Now that Modules are officially here, its worth exploring how best
REUSABILITY
to use them.
ENCAPSULATION
called Modules.
a module.
10
DZONE.COM/GUIDES
Chrome and Mozilla have announced their intent to support the newly
for importing and exporting values to and from modules. The full
details can be found in section 15.2.2 and 15.2.3 of the EcmaScript
2015 Language Specification. Below is a summary of the new syntax.
:: EXPORT SYNTAX
// default exports
export default
export default
export default
export default
export default
export default
export default
export default
export default
Node.js has not yet committed to adopting the ES2015 standard, but
there is a solid proposal in place and a good deal of pressure from the
community.
In the meantime, a transpiler (e.g. Babel) is needed in order to use
42;
{};
[];
(1 + 2);
foo;
function () {}
class {}
function foo () {}
class foo {}
// inline exports
export var foo = 1;
export var foo = function () {};
export var bar;
export let foo = 2;
export let bar;
export const foo = 3;
export function foo () {}
export class foo {}
// named exports
export {};
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};
// exports from (re-exports)
export * from foo;
export {} from foo;
export {foo} from foo;
export {foo, bar} from foo;
export {foo as bar} from foo;
export {foo as default} from foo;
export {foo as default, bar} from foo;
export {default} from foo;
export {default as foo} from foo;
BEST PRACTICES
USE THE ES2015 SYNTAX
:: IMPORT SYNTAX
// default imports
import foo from foo;
import {default as foo} from foo;
// named imports
import {} from foo;
import {bar} from foo;
import {bar, baz} from foo;
import {bar as baz} from foo;
import {bar as baz, xyz} from foo;
default export.
// glob imports
import * as foo from foo;
// mixing imports
import foo, {baz as xyz} from foo;
import foo, * as bar from foo;
// just import
import foo;
Source: https://github.com/eslint/espree/pull/43
11
At the time of this writing, the export and import syntax described
DZONE.COM/GUIDES
Defining the API near the top of the module allows anyone reading
the code to immediately understand its interface without the need to
read the entire listing.
Note: One might expect that an ES2015 destructuring syntax would
work when importing this module, but in fact, it does not. Specifically,
the following line will fail to work as expected:
import ( add, subtract } from calculator;
// calculatorFactory.js
export default function(radix) {
return {
add,
subtract,
multiply,
:: IIFE
(function(){ /* code */ }());
:: AMD
define(myModule, [dep1, dep2], function (dep1, dep2) {
return function () {};
});
:: AMD - Simplified Common JS Wrapping
define([require, dependency1, dependency2], function
(require) {
var dependency1 = require(dependency1),
dependency2 = require(dependency2);
return function () {};
});
:: Common JS
function myFunc(){ /* code */ };
module.exports = myFunc;
:: UMD
(function (global, factory) {
if (typeof define === function && define.amd) {
// AMD
define([jquery], factory);
} else if (typeof exports === object) {
// Node, CommonJS-like
module.exports = factory(require(jquery));
} else {
// Browser globals (global is window)
global.returnExports = factory(global.jQuery);
}
}(this, function ($) {
// methods
function myFunc(){};
// exposed public method
return myFunc;
}));
divide,
};
function add(a,b) {/* code that uses radix somehow */}
function subtract(a,b) {/* code that uses radix somehow */}
function multiply(a,b) {/* code that uses radix somehow */}
function divide(a,b) {/* code that uses radix somehow */}
function somePrivateHelper() {/* code that uses radix somehow */}
}
REFERENCES
This author prefers not to use ES2015 classes, but that will have to be
a topic for another day.
CONCLUSION
The ES2015 specification has finally brought real Modules
to JavaScript, further cementing the advocacy of Modular
Programming in the JavaScript community. Using Modular
Programming in JavaScript promotes better readability,
collaboration, reusability, and encapsulation.
While not yet fully supported, third-party libraries make it possible
to start using ES2015 today. Adoption of the ES2015 Module
standard will make applications future-ready. So, start now.
12
DZONE.COM/GUIDES
Debugging
JS with
These 10
Tips
BY FREYJA SPAVEN & DANIEL WYLIE, RAYGUN
COMPLEX DEBUGGING
functions
Console.log,
console.debug,
andwhen,
especially
when
like:
Even though you think you know your script well, this
can still be useful. Lets say you want to improve your
code. Get the trace and your great list of all related
For example:
In the console.log() you can set%s for a string,%i
for integers, and%c for custom style. You can
probably find better ways to use this. If you use a
single page framework you may want to have one style
for view message and another for models, collections,
controllers, etc. Maybe also name the shorter like
wlog, clog, and mlog.
Its time to use your imagination.
DEBUG JAVASCRIPT
SUMMARY
These tips should provide you with a starting point
when it comes time to debug JavaScript. You can
access these same tips and more with thorough
examples right here on DZone.
13
QUICKLY
it in your console. Chrome inspector keeps the last 5
You find yourself stranded in the web development jungle and need to find your way out. You hear some vague
requirements that you need to 'create a web app.' You don't know how much (or how rich) database access you'll need,
how complicated the business logic will be, what your target devices will be, or really anything that imposes specific
technical constraints. What is your first instinct in regards to which framework or full stack to use? We received over 700
responses as to which server-side or client-side frameworks come to mind first, as well as which full web stack would
be the go-to one. Results are illustrated below. Welcome to the world wild web.
CLIENT-SIDE
REACT. JS
JQUERY
ANGULAR. JS
SERVER-SIDE
FULL STACK
SPRING
NODE . JS
MEAN
(MONGODB, EXPRESS,
ANGULAR, & NODE.JS)
DZONE.COM 2016
DZONE.COM/GUIDES
Adding Authentication
to a Web Application
with Auth0, React,
and JWT
QUICK VIEW
01
02
03
BY JOS AGUINAGA
WEB ENGINEER
LINKS
Auth0.com
SETUP
The initial setup is fairly easy thanks to Facebooks create-react-
app utility. Calling the tool with a name will setup a repository
\$ create-react-app download.repos.club
After running the command successfully, the folder will have the
following structure:
README.md
package.json
public
favicon.ico
index.html
src
App.css
App.js
App.test.js
index.css
index.js
logo.svg
version 10 for performing calls against Auth0, and use the create-
16
We will focus on the src folder for our application. As with many
DZONE.COM/GUIDES
</div>
button, and the Repositories List View. The files src/Navbar.js and
<div className=Repo__container>
src/Navbar.js
return (
</div>
</div>
</div>
)
</div>
<div className=pt-navbar-group pt-align-right>
<button onClick={onClick()} className=pt-button ptminimal pt-icon-user>
loggedIn
? Logout
: Log in
</button>
</div>
</nav>
)
src/Repo.js
src/Auth.js
import React from react
import emoji from node-emoji
import {
Colors,
AnchorButton
} from @blueprintjs/core
export const Repo = ({name, description, stars, forks,
updatedAt, forked, disabled, downloadRepo}) => (
<div className=Card pt-card pt-elevation-3>
<div className=Repo>
<div className=Repo__container>
<div className=Repo__headline-container>
<span className=Repo__name>
<span className={`pt-icon-standard ${forked ? pticon-git-branch : pt-icon-git-repo} Repo__icon`} />
<b>{name}</b>
{ forked && <span className=pt-tag pt-intentwarning Repo__tag>Fork</span> }
</span>
<span style={{color: Colors.GRAY1}}className=Repo__
description>{description ? emoji.emojify(description) : }</
span>
</div>
<div className=Repo__metadata-container>
<span className=Repo__stars><b>{stars}</b> stars</
span>
<span className=Repo__forks><b>{forks}</b> forks</span>
</div>
</div>
<div className=Repo__container>
<span className=Repo__latest-update>Last Updated:
<b>{new Date(updatedAt).toDateString()}</b></span>
17
DZONE.COM/GUIDES
getToken () {
// Retrieves the user token from localStorage
return localStorage.getItem(id_token)
}
logout () {
// Clear user token and profile data from localStorage
localStorage.removeItem(id_token)
}
async getProfile () {
const profile = await axios.post(https://jjperezaguinaga.
auth0.com/tokeninfo, {id_token: this.auth.getToken()})
return Promise.all([
profile.data,
axios.get(`https://api.github.com/users/${profile.data.
nickname}/repos?per_page=100&sort=updated`)
])
}
isLoggedIn () {
return this.auth.loggedIn()
The most important parts of this class are the constructor and
login () {
this.auth.login()
your own credentials, while the login will trigger the Auth0
logout () {
this.auth.logout()
}
}
docs/libraries/lock.
We are taking advantage of both Promise and Axios to perform
Before we continue, we need to retrieve our Client ID and Domain
control the flow of our requests, and chain each response to then
retrieve the user GitHub repositories. Finally, src/Api.js provides
us with utilities to communicate with our src/Auth.js class and
log out whenever we dont need the resources anymore.
CONCLUSION
The process we used to authenticate our user is known as the
our application with the Auth class with the button, and display
We are now able to log in our user, but we still need to fetch
its data. Thats where JSON Web Tokens (JWT) come in. On
of the user. Since JWTs are encoded with a secret that only
jjperezaguinaga.auth0.com, callback)
}
getRepos () {
return this.isLoggedIn()
? this.getProfile()
: Promise.reject(new Error(User is not authenticated))
}
18
DZONE.COM/GUIDES
Diving Deeper
INTO WEB DEV
Learn more & engage your peers in our Security-related topic portals
@swizec
@jdalton
Web Dev
dzone.com/webdev
@davidwalshblog
@rachelandrew
@addyosmani
@collis
and new standards for user experience. The Web Dev Zone is devoted
to all things web developmentand that includes everything from
front-end user experience to back-end optimization, JavaScript
@rauschma
@rasmus
@paul_irish
@chriscoyier
Java
dzone.com/java
The largest, most active Java developer community on the web. With
Node.js
dzone.com/refcardz/nodejs
Developing distributed, multi-threaded applications using traditionally
synchronous languages can be complex and daunting, Node leverages
JavaScripts asynchronous programming style via the use of event loops with
callbacks to make applications naturally fast, efficient, and non-blocking.
news and tutorials on Java tools, performance tricks, and new standards
Mobile
dzone.com/mobile
The Mobile Zone features the most current content for mobile
developers. Here youll find expert opinions on the latest mobile
platforms, including Android, iOS, and Windows Phone. You can find
in-depth code tutorials, editorials spotlighting the latest development
dzone.com/refcardz/functional-programming-with-javascript
Functional programming is a software paradigm that will radically change the way
AngularJS
dzone.com/refcardz/angularjs-essentials
Provides an essential reference to AngularJS, an MVW framework that enables
web developers to build dynamic web applications easily.
19
Python Cookbook
by David Beazley, and Brian K. Jones
try {
QlikPlayground.learn();
} catch (Exception e) {
System.out.println(never called);
} finally {
me.setGenius(true);
}
SPONSORED OPINION
How Reactive
Programming
Can Elevate Your
Data-Driven
Development
Over 2.5 quintillion bytes of data are generated each
day across the interneta never-ending onslaught of
information that requires a level of programming that
can capture, manipulate, and transform that data into
actionable and relevant knowledge. Reactive programming
Sources: https://medium.com/reactive-programming/what-is-reactive-
programming-bc9fa7f4a7fc#.ah2e144gi
21
DZONE.COM/GUIDES
Executive Insights
on Web Application
Development
BY TOM SMITH
RESEARCH ANALYST AT DZONE
QUICK VIEW
01
02
03
this, you must understand who and what you are building for
KEY FINDINGS
01 The keys to developing sound web applications are planning,
22
chips will meet FCC regulations. Apps are empowered with voice
DZONE.COM/GUIDES
when better ones come along. The best developers dont always
.NET, and Java are emerging every week. Things tend to get too
technical and too hard to integrate. Teams need to support a wide
company?
to DevOps?
correctly with web apps and IoT since this will affect our homes,
our cars, and our medical devices. Theres still a lack of planning
upfront and this becomes critical as complexity increases. We
need more standardization across browsers. Breaking changes
introduced by new versions of consumed frameworks can
be a nightmare. This increases the need to choose the right
technology platform for the job.
23
DZONE.COM/GUIDES
Embracing
Simplicity with Static
Site Generators
QUICK VIEW
01
02
03
BY RAYMOND CAMDEN
For this reason and more, static site generators provide a great
the fly.
personal favorite, but it was the first one I encountered and was
24
DZONE.COM/GUIDES
trash$ harp
h1 Welcome to Harp.
h3 This is yours to own. Enjoy.
Even if you've never seen Jade before, you can probably guess as
Commands:
directory
inside it, and the second line is creating an h3 block. Modify the
template like so:
h1 Welcome to Harp.
i generators!
All we've done is added a new paragraph with a bit of styled text.
Options:
Reload the page in your browser and you'll see the new output:
-h, --help
-V, --version
If you view the source, you'll see HTML, not Jade. This ispretty much
like every other old app server out there. PHP acts the same way.
Harp let's you freely mix and match different template engines
within one site, although probably you'll stick to one for your project.
You can open this new file by requesting about.html in the browser.
Harp is smart enough to know this maps to the Markdown file you
just created.
For rendering HTML, Harp supports Markdown, EJS, and Jade. For
rendering CSS, Harp supports Less, Stylus, and Sass. You can even
use CoffeeScript as well. Harp automatically converts the particular
language into the right output. Let's see this in action. At the
command line again, run harp server.
demo1$ harp server
-----------Harp v0.23.0 Chloi Inc. 20122015
Your server is listening at http://localhost:9000/
Press Ctl+C to stop the server
------------
Where did the sites rather simple layout come from? The _layout.
jade file:
doctype
html
head
link(rel="stylesheet" href="/main.css")
body
!= yield
25
So how did this work? By default, Harp's initial files are all using the
how it worked for both index.jade and about.md. It takes the content
Jade template language. Jade was recently renamed to Pug, and you
from those files and places it in a variable called yield. This then
allows your template to put the page content anywhere you want.
DZONE.COM/GUIDES
For the coup de grace, lets now kill off this server and output in
doctype
static files. That takes all of one command: harp compile -o ../
html
demo1_output
head
link(rel="stylesheet" href="/main.css")
body
This tells Harp to compile the current directory and output it one level
higher in a folder called demo1_output. This will create four files: 404.
!= yield
footer This site is copyright #{ new Date().getFullYear() }
Note the user of a bit of code at the end to include a dynamic year.
Now when you run the home page, youll see (below, left):
now take these files and deploy them as a simple static site.
Harp has more features than weve covered here so be sure to check
the harpjs.com/docs for more information!
now, well look at the simpler of the two optionsglobal data. Add a
your email address, and they will forward along the results to you.
new file to your site named _harp.json. Harp will not render any file
{
"globals":{
"email":"raymondcamden@gmail.com",
"name":"Awesome Site!"
}
}
In order to use global data, you must use the file named _harp.json
(theres an exception to this, but dont worry about that for now)
and an object defined with the name globals. Outside of that, you
can then use whatever variables you want. In the example above,
two variables, email and name, are defined, but thats completely
arbitrary. You can include any valid JSON you want here.
Once defined, these variables will be available in all your files. Heres
an updated _layout.jade file that includes the name value as the title:
Contact Me
===
<form action="https://formspree.io/raymondcamden@gmail.com"
method="POST">
Your Name: <input type="text" name="name"><br/>
Your Email: <input type="email" name="_replyto"><br/>
Your Comments: <textarea name="comments"></textarea><br/>
<input type="submit" value="Send Comments">
</form>
In this rather simple (and kinda ugly) form, the action points to
Formspree and includes my email address. Now when the form
is submitted, Formspree will take the contents and email them
to me. The very first time this happens Formspree will require
you to confirm that you want the form to work, but after that its
automatic. You can even tell Formspree where to send the user next
by including a hidden form field: <input type="hidden"
name="_next" value="some url on your site telling the
user thank you">.
Formspree is a great service with a very generous free tier. Check
doctype
the site for current costs and whats supported at that level.
html
head
title #{ name }
On top of forms, you can also find services for calendars, comments,
link(rel="stylesheet" href="/main.css")
body
!= yield
footer This site is copyright #{ new Date().getFullYear() }
WRAP UP
While obviously static site generators arent going to be a good
option for every site, its amazing how many places they can be used.
h1 Welcome to Harp.
h3 This is yours to own. Enjoy.
p I love static site
i generators!
p Email me at
a(href="mailto:#{email}") #{ email }
26
DZONE.COM/GUIDES
Solutions Directory
This directory contains solutions for debugging platforms, platforms as a service, device
detection, various web dev frameworks, web testing, IDEs, and more. It provides feature data
and product category information gathered from vendor websites and project pages. Solutions
are selected for inclusion based on several impartial criteria, including solution maturity,
technical innovativeness, relevance, and data availability.
27
COMPANY NAME
PRODUCT
TYPE
FREE TRIAL
WEBSITE
ActiveState
Komodo IDE
PaaS
21 Days
activestate.com/komodo-ide
Afilias Technologies
DeviceAtlas
Device Detection
30 Days
deviceatlas.com
Amazon
PaaS
aws.amazon.com/elasticbeanstalk
Aryaka
SmartCDN
Available by request
aryaka.com/services/web-app-acceleration
Automattic
Wordpress
CMS
wordpress.com
Backtrace
Backtrace
Debugging Platform
Available by request
backtrace.io
Bithound
Bithound
Node.js Debugging
bithound.io
Blue Spire
Aurelia
JavaScript Framework
Open Source
aurelia.io
Browserling
Browserify
Open Source
browserify.org
BrowserStack
BrowserStack
Web Testing
Available by request
browserstack.com
Cake Foundation
CakePHP
Open Source
cakephp.org
ClojureScript
ClojureScript
Compiler
Open Source
clojurescript.org
CoffeeScript
CoffeeScript
Language
Open Source
coffeescript.org
CommonJS
CommonJS
Package Manager
Open Source
commonjs.org
Django
Open Source
djangoproject.com
DocumentCloud
Backbone.js
JavaScript Framework
Open Source
backbonejs.org
DocumentCloud
Underscore.js
JavaScript Library
Open Source
underscorejs.org
Dropbox
Dropbox platform
PaaS
Available by request
dropbox.com/developers
Drupal
Drupal
CMS
Open Source
drupal.org
DZONE.COM/GUIDES
28
COMPANY NAME
PRODUCT
TYPE
FREE TRIAL
WEBSITE
Ecma International
ECMAScript
Scripting Language
Open Source
github.com/tc39/ecma262
Elm
Elm
Language
Open Source
elm-lang.org
Engine Yard
PaaS
21 Days
engineyard.com
React.js
JavaScript Library
Open Source
facebook.github.io/react/
Flow
Open Source
flowtype.org
Fujitsu
PaaS
No Free Trial
welcome.globalcloud.global.fujitsu.com
GNU
Make
Open Source
gnu.org/software/make
AngularJS
JavaScript Framework
Open Source
angularjs.org
PaaS
60 Days
cloud.google.com
Grails
Grails
Open Source
grails.io
Grunt
Grunt
Open Source
gruntjs.com
HPE Helion
PaaS
Available by request
hpe.com/us/en/solutions/cloud.html
Web Testing
Open Source
www8.hp.com/us/en/software-solutions/unifiedfunctional-automated-testing/
IBM
Bluemix
PaaS
30 Days
ibm.com/bluemix
IBM
LoopBack
Open Source
loopback.io/
Intel
Crosswalk
Web Runtime
Free Solution
crosswalk-project.org
Jelastic
Jelastic
PaaS
Varies by hosting
provider
jelastic.com
JetBrains
WebStorm
IDE
30 Days
jetbrains.com/webstorm
JetBrains
PyCharm
IDE
jetbrains.com/pycharm
JetBrains
RubyMine
IDE
30 Days
jetbrains.com/ruby
JetBrains
PHPStorm
IDE
30 Days
jetbrains.com/phpstorm
JetBrains
Rider
IDE
jetbrains.com/rider/
JetBrains
Resharper
Debugging Platform
30 Days
jetbrains.com/resharper
Langa
Trails
Open Source
trailsjs.io
Laravel
Laravel
Open Source
laravel.com
LeaseWeb
LeaseWeb
IaaS
Available by request
leaseweb.com/cloud
Less
Less
CSS Preprocessor
Open Source
lesscss.org
DZONE.COM/GUIDES
29
COMPANY NAME
PRODUCT
TYPE
FREE TRIAL
WEBSITE
Lightbend
Play
Open Source
playframework.com
Mendix
Mendix Platform
PaaS
Up to 10 Users
mendix.com
Meteor
JavaScript Framework
Open Source
meteor.com
Microsoft
IDE
Free Solution
code.visualstudio.com
Microsoft
ASP.NET
Web Framework
Free Solution
asp.net
Microsoft
Microsoft Azure
PaaS
azure.microsoft.com
MochaJS
Mocha
Web Testing
Open Source
mochajs.org
NearForm
Hapi
JavaScript Framework
Open Source
hapijs.com
Node.js Foundation
Node.js
JavaScript Environment
Open Source
nodejs.org/en
Node.js Foundation
Koa
Web Framework
Open Source
koajs.com
Node.js Foundation
Express
Web Framework
Open Source
expressjs.com
Nodesource
N|Solid
Node.js Runtime
Available by request
nodesource.com
npm, inc.
npm
Package Manager
Open Source
npmjs.com
Joomla!
CMS
Open Source
joomla.org
OpenQA
Selenium
Web Testing
Open Source
seleniumhq.org
Optimizely
Optimizely
30 Days
optimizely.com
Oracle
Oracle Cloud
PaaS
Available by request
cloud.oracle.com
OutSystems
OutSystems
PaaS
outsystems.com
PhantomJS
PhantomJS
Web Testing
Open Source
phantomjs.org
Pivotal Labs
Jasmine
Web Testing
Open Source
jasmine.github.io
Pivotal Software
Spring
Open Source
spring.io
Progress Software
OpenEdge
PaaS
60 days
progress.com/openedge
Qlik
Qlik Playground
Open Source
playground.qlik.com
QuickBase, Inc.
QuickBase
PaaS
30 days
quickbase.com
Raygun
Pulse
30 days
raygun.com/products/real-user-monitoring
Red Hat
OpenShift
PaaS
openshift.com
RequireJS
RequireJS
Package Manager
Open Source
requirejs.org
RisingStack
Trace
Node.js Debugging
trace.risingstack.com
DZONE.COM/GUIDES
30
COMPANY NAME
PRODUCT
TYPE
FREE TRIAL
WEBSITE
Zend Framework
Open Source
framework.zend.com
Ruby on Rails
Ruby on Rails
Web Framework
Open Source
rubyonrails.org
Salesforce
Heroku Platform
PaaS
heroku.com
SAP
OpenUI5
JavaScript UI Library
Open Source
openui5.org
SAP
PaaS
hcp.sap.com
Sass
Sass
CSS Preprocessor
Open Source
sass-lang.com
Sauce Labs
Sauce
Web Testing
14 Days
saucelabs.com
Sencha
Sencha Platform
30 Days
sencha.com/web-application-lifecyclemanagement-sencha-platform
Sencha
Ext JS
JavaScript Framework
30 Days
sencha.com/products/extjs
Sencha
Sencha GXT
30 Days
sencha.com/products/gxt
SensioLabs
Symfony
Open Source
symfony.com
Stylus
Stylus
CSS Preprocessor
Open Source
stylus-lang.com
Swisscom
Swisscom Application
Cloud
PaaS
Available by request
swisscom.ch/en/business/enterprise/offer/clouddata-center-services/paas/application-cloud.html
Telerik
Kendo UI
Available by request
telerik.com/kendo-ui-html-framework-opt
jQuery
JavaScript Library
Open Source
jquery.com
QUnit
Web Testing
Open Source
qunitjs.com
Tilde
Ember.js
JavaScript Framework
Open Source
emberjs.com/
Tsuru
Tsuru
PaaS
Open Source
tsuru.io
Bootstrap
Web Framework
Open Source
getbootstrap.com/
Bower
Package Manager
Open Source
bower.io
Vaadin
Vaadin
UI Framework
Open Source
vaadin.com
Edgecast CDN
CDN
Available by request
verizondigitalmedia.com/platform/edgecast-cdn
Vue.js
Vue.js
JavaScript Framework
Open Source
vuejs.org
Walmart Labs
Joi
Validation System
Open Source
github.com/hapijs/joi
Walmart Labs
Lazo
Web Framework
Open Source
github.com/lazojs/lazo
WaveMaker
WaveMaker
PaaS
30 Days
wavemaker.com
Webpack
Webpack
Package Manager
Open Source
webpack.github.io
DZONE.COM/GUIDES
GLOSSARY
AJAX: A method of using
asynchronous data exchange
between the client and server
in order to create interactive
websites.
DEPENDENCY INJECTION: A
MODULE: A component of
software programs.
preprocessing.
browser environments.
authentication.
a language-independent textual
understand.
31