Henrik Høltzer (heho)
Webprogramming - WebApps with Angular and other JS-frameworks

Semester: 4.sem., Spring 2019
Email: heho@zealand.dk

Education guidelines and Objectives for the course
Resources:
lynda.com: https://www.lynda.com/Web-training-tutorials/88-0.html
Get a free School-Account to Lynda.com.


NB: The plan is preliminary and will properly be changed during the semester! (Last updated: April 9, 2019)

Week
Topics
Literature/Material
Exercises/Notes
5
29/1
Welcome

Introduction to the Course

HTML5/CSS3
Semantic tags:
<nav>, <section>, <article>, <footer>

Flexible box model
(-webkit)
More CSS3 Features

Rounded corners
Shadows
Gradients
Alpha (transparencies)
Animation with transitions


More HTML5
querySelectorAll
<video>, <audio>, <embed>
Geolocation

 

 


Intro.ppt

Goal for this Course?

Prerequisites survey

Visual Studio Code (VSCode)
Links (VSCode):
Download: https://code.visualstudio.com/
Beginner's Guide: https://channel9.msdn.com/Blogs/raw-tech/Beginners-Guide-to-VS-Code

HTML

http://www.w3schools.com/htmL/

CSS(Cascading Style Sheets)
http://www.w3schools.com/css/default.asp
http://www.w3schools.com/css/css3_intro.asp

JavaScript
http://www.w3schools.com/js/default.asp


HTML DOM
http://www.w3schools.com/js/js_htmldom.asp


Video:

Lynda.com:
http://www.lynda.com/HTML-training-tutorials/224-0.html
http://www.lynda.com/JavaScript-training-tutorials/244-0.html

Lynda.com is also a good site for you to lean more at home (if Web programming has your interest - and of course is has, otherwise you have chosen a wrong elective! ^^)

Note:
If Basic Html and CSS is new for you - take a turn with the exercises at codecademy.

Codecademy:
https://www.codecademy.com/learn/learn-html-css

Alternativ or suplement to Codecademy:
https://www.w3schools.com/

If you allready know some HTML/CSS - look at Lynda.com and find som tutorial that gets your interest.

More Notes:

If JavaScript is new for you, start watching JavaScript Esential Training with Simon Allardice (Lynda.com): http://www.lynda.com/JavaScript-tutorials/Welcome/81266/87513-4.html

If you need a very basic introduction you could also watch: Introducing the JavaScript Language with Joe Chellman (Lynda.com): http://www.lynda.com/JavaScript-tutorials/Introducing-JavaScript-Language/123563-2.html

Later you should watch: JavaScript: Functions with Ray Villalobos (Lynda.com): http://www.lynda.com/JavaScript-tutorials/JavaScript-Functions/148137-2.html

If JS allready is well know for you -watch: Up and Running with ECMAScript 6 with Eve Porcello (Lynda.com): http://www.lynda.com/JavaScript-tutorials/Up-Running-ECMAScript-6/424003-2.html

 

Examples (Code demonstated in the class):
TestHTML4.zip (VSCode)
TestHTML5.zip (VSCode)
SemanticTag.zip (VSCode)
FlexibleBoxModel.zip (VSCode)
RoundedCorner.zip (VSCode)

HTML5Stuff.zip (HTML5 Media tags)
Geolocation.zip (Geolocation with simple HTML5 and Google Maps API)

 

Exercise:
MyFirstMovies - HTML/CSS

6
5/2
Responsive web design (RWD)

Bootstrap 4

Responsive Web Design (RWD)
Ethan Marcotte: A List Apart
In this article, from May 2010, Ethan Marcotte define the term “Responsive Web Design” for the first time – he cited fluid grids, flexible images, and media queries as three “technical ingredients” of RWD.

Kezz Bracey: The State of Responsive Web Design
In this article, from Jan 2015, Kezz Bracey give an up-to-date description of “Responsive Web Design”.

More to read about RWD:
This Is Responsive There you can find responsive design patterns, more responsive resources, and responsive news.

Mediaqueri  There you’ll find a huge showcase of responsive websites (perfect if you need some inspiration).


Bootstrap
Links (Bootstrap):
Bootstrap: http://getbootstrap.com/
How to add a Navigation bar to your app:
https://www.youtube.com/watch?v=23bpce-5s8I ( Bootstrap 4 Navbar Concepts ) NEW!



Free themes for Bootstrap
Bootstrap CDN: http://www.bootstrapcdn.com/#bootswatch_tab

W3schools: Bootstrap get started
http://www.lynda.com/Bootstrap-training-tutorials/1421-0.html

Google
Test tool: Mobile-friendly Test

Examples (Code demonstated in the class):
BootstrapTest.zip (Bootstrap 3 - VSCode)
Bootstrap4Test.zip (Bootstrap 4 - VSCode)
BootstrapLynda.zip(VSCode)


Examples
(Responsive and not Responsive):
A good responsive website (New York Times)
https://www.youtube.com/watch?v=YRZqSKp71mI

 

Exercise: (Lynda.com)
Bootstrap 4: Essential Training with Ray Villalobos
Watch the video, redo the demonstrated stuff and do the Challenge.




7
12/2


JavaScript
(JS Basic)
HTML DOM(Document Object Model)

ES2015 (ES6)




ECMAscript, ES2015 (ES6), ES20XX


Video
JavaScript - Understanding the Weird Parts (the first 3.5 hours)
What is ECMAScript 6? (ES6, Transpiling, BabelJS, new features ...)
Anjana Vakil: Learning Functional Programming with JavaScript

Recommendation:
Udemy: JavaScript - Understanding the Weird Parts (Price ~ 11 euro, for the full 11 hours course)

New in ES2015 (ES6):
let
class
const
Arrow function "=>"
Template Literals (Template Strings) back-tick (` `) and String interpolation

 

ECMAscript 6 compability table

 

Note: ArrayHelperMethods.zip (Henrik H)



Examples (Code demonstated in the class):

HTML-Calulator.zip (VSCode)
JavaScriptObjects
(VSCode)
ES2015Test (VSCode)

JavaScriptBasic (VSCode)
JavaScriptSamples (VSCode)


Exercise:
ArrayHelperMethods.zip

Do the exercises in Codecademy:
Codecademy: https://www.codecademy.com/learn/introduction-to-javascript



8
19/12
  No lessons in this course  
9

JavaScript (JS Advanced)

Callbacks
Closures
Promise

Concurrency and event loop
Asynchronius callbacks

ES2017
Async/Await

NodeJS
NPM


 

Video (YouTube)
Techsith: JavaScript callback functions
Philip Roberts: What the heck is the event loop anyway? (Understanding CallBacks)
Arindam Paul - JavaScript VM internals, EventLoop, Async and ScopeChains
Kyle Simpson: Advanced Async and Concurrency Patterns in JavaScript (Promises / Generators) (Skip the first 7 min. ;))

W3Shools: JavaScript Closures
Techsith: JavaScript promises*
MDN web docs: Concurrency model and Event Loop


Note: Closures&Callbacs.zip (Henrik H)

Async JS: From Callbacks, to Promises, to Async/Await (Blog, by Tyler McGinnis) NEW!
https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/

NPM (Node Package Manager)
Video (Lynda.com)
Up and Running with NPM with Ray Villalobos

Kennedy, Hugh; DeVay, Paul
"Understanding npm"Nsight. Retrieved 22 July 2016

 

Examples (Code demonstated in the class):
JavaScriptAdvanced.zip (VSCode)

Exercise:
ClosuresOpgaver.zip
PromiseOpgaver.zip

10

React

Up and running
Components
JSX
Props
States
LifeCycle methods
EventHandlers
Request Handling async/await

Recommendation:
Udemy: Modern React with Redux [2019 update] (Price ~ 12 euro, for the full 47.5 hours course)
Dette kursus kan klart anbefales. Gennemfør de første 6 af 34 sections, gerne inden tirsdag!!

Desværre er prisen pr 01.03 2019 34 euro (den falder nok igen snart :)), i mellemtiden kan du evt se en af følgende tutorials (ps jeg har ikke selv set dem alle endnu, men gode anmeldelser :)):
Mosh: Learn React - React Crash Course 2019
Techsith: React
freeCodeCamp: Lean React.js - Full Course for Beginners - Totorials 2019

 

React
Links (React):
https://reactjs.org/
JSX In Depth
How to pass props to components in React

 

Examples (Code demonstated in the class):

jsx-src.zip
component-test-src.zip
season-src.zip
pics-src.zip

Notice:
zip-filerne indeholder kun src og public folders, dvs for at kunne køre projekterne skal du først oprette nye React-projekter i VSCode (med samme navn som filerne) og erstatte de auto genererede folders med src og public

Exercise:
ReactBasicOpgave.zip
ReactMovieInputOutputOpgave.zip (movie-input-output-src.zip)

Solutions:
React-movie-input-output-solved.zip

11

Redux

Actions / Action Creators
Reducers
Store
Dispatching Actions


React-Redux
Provider
Connections

Note:
How to share React projects: ReactAppFiles

Redux
https://redux.js.org/introduction/getting-started

Meget interessant artikel der forklare sammenhængen mellem Redux reducers og Array-metoden .reduce( ):
https://medium.com/@thejasonfile/the-redux-reducers-and-reduce-puzzle-ecc935191fbf

React Redux
https://react-redux.js.org/introduction/quick-start

Examples (Code demonstated in the class):
counter.zip (Redux)
songs.zip (React-Redux)

Exercise:
ReduxExercise
ReactReduxExercise1
ReactReduxExercise2

 

Solutions:
color.zip (ReduxExercise)
react-redux-counter-solved.zip (ReactReduxExercise1)
react-redux-movie-input-output-solved.zip (ReactReduxExercise2)

12 React Router
react-router-dom
<BrowserRouter>
<Route>
<Switch>
<Link>
<NavLink>



React Router v4
https://blog.pshrmn.com/entry/simple-react-router-v4-tutorial/
https://reacttraining.com/react-router/web/guides/quick-start

React-Router v4 - Dynamic Routing (Philosophy): NEW!
https://reacttraining.com/react-router/core/guides/philosophy
Super! - Gode forklaringer der uddyber ovenstående:
https://tylermcginnis.com/react-router-philosophy-introduction/

URL Rarameters with React Router (Blog, by Tyler McGinnis) NEW!
https://tylermcginnis.com/react-router-url-parameters/

Pass props to React Router's Link component (Blog, by Tyler McGinnis) NEW!
https://tylermcginnis.com/react-router-pass-props-to-link/

Examples (Code demonstated in the class):
react-router.zip


Exercise:

ReactRouterExercise1

 

Solutions:
ReactRouterExercise.zip (movie-router)

13 Redux Thunk

Redux Thunk with axios
Redux Thunk
https://github.com/reduxjs/redux-thunk
https://daveceddia.com/what-is-a-thunk/
https://medium.com/fullstack-academy/thunks-in-redux-the-basics-85e538a3fe60

Examples (Code demonstated in the class):
blog.zip

 

Exercise:
ReduxThunkExercise1

Solutions:
ReduxThunkExercise.zip (formular1 - under construction)

Mandatory Assignment

14

Angular

Component interaction (Input/Output)

Routing & Navigating

Angular
Henrik Høltzer: Angular - the PIXI Book (draft - under construction)
Slides:
Introduction to Angular.ppt
Angular-Input&Output.ppt
Angular-Routing.ppt

Video (Youtube Links):
Mosh: Angular 2 Tutorial for Beginners: Learn Angular 2 from Scratch Mindspace: Angular 2 Tutorial - Complete Introduction - Angular 2 CLI Setup, ...
JavaBrains: Angular 6

Links (Angular):
angular.io: Learning Angular
angular.io: Angular Architecture overwiew

angular.io: Component interaction
angular.io: Routing&Navigation
Victor Sakin: Angular Routing


The Ultimate Angular-cli Reference


Todd Motto: https://toddmotto.com/
Victor Sakin: https://vsavkin.com/


Exercise: (Angular)
AngularExercise1-FirstApp.html
AngularExercise2-SimpleCalculator.html
AngularExercise3-SimpleCalculator-refactor.html
AngularExercise4-Movie-InputOutput.html
AngularExercise5-Routing.html

Solutions:
AngularExercise1-FirstApp.zip (MyFirstAngularApp)
AngularExercise3-SimpleCalculator-refactor.zip (SimpleCalculator.zip)
AngularExercise4-MovieInputOutput.zip (MovieInputOutput-Solved.zip)
AngularExercise5-Routing.zip (MovieRouter-Solved..zip)

Notice:

The solution zip-file don't contain the node_modules. If you want to try the solution:
1) Just unzip the file in your VSCode/Angular folder
2) Open VSCode an navigate to the new folder
3) Run: npm install in the integrated terminal window
(don't foget it takes some minuttes to generate the project).
4) Start the server by running: ng serve -o
(Don't forget to stop the server after use with: CTRL + C )

15 Angular (continue)
Ajax & RxJS

Web-Architecture
Webservice



Links (RxJS):
RxJS: http://reactivex.io/rxjs/
Andre Staltz: The introduction to Reactive Programming you've been missing
Interactive diagrams of Rx Observables: http://rxmarbles.com/


Links
Enable cross-origin resource sharing
Enabling Cross-Origin Requests in ASP.NET Web API 2

Examples (Code demonstated in the class):
MovieHttpServiceRxJS.zip

Exercise: (Angular)
AngularExercise6-HttpService.html

Solutions:
AngularExercise6-HttpService.zip (F1SimpleHTTPServicel.zip)

Notice:
If you are using Crome and have your webservice on your localhost, the "same origin policy" prohibits you accessing your data. You can disable the same origin policy on Google's Chrome browser by closing Chrome an open it from the cmd with: --disable-web-security (C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security - on my computer)
see: stackoverflow: disable same origin policy in chrome

or install: Allow-Control-Allow-Origin: *

16 No Lessons Easter Holidays  
17 Mandatory Assignment Supervision

Notice:
The Assignment has to be approved by me in the class, no later than Tuesday, April 23, 2019 at 14.45.

18-22 Synopsis

Senest onsdag 03.04 skal du indmelde dit emne på denne formular https://docs.google.com/forms/d/e/1FAIpQLSfPrQwg2hQ9n8sZFYt_-VPqOei2vnOcY8mat2dB2QtNtG14OQ/viewform
Specialization in one of your electives
The report must be handed in no later than Wednesday 29. May 2019 at 11.00 am in Wiseflow

Synopsisdescription
Synopsis ideas

Supervision - Booking Sheets

24 Exam: 18 - 21. June 2019 Examination meetinglist  

 

Extra materials:

More about: HTML/CSS/JS

HTML:
30 Must-See HTML5 tutorials ...
HTML CSS BOOK

HTML5 Video player: http://videojs.com/
HTML Video Tutorial: http://www.mrc-productivity.com/techblog/?p=722
HTML5 Geolocation: http://www.mrc-productivity.com/techblog/?p=714
HTML5 Canvas: http://www.mrc-productivity.com/techblog/?p=718

CSS:
CSS Selectors: Class vs ID: http://www.tizag.com/cssT/cssid.php

CSS-Grid (Layout with Grid and Media-Queries)
MDN: Grid template areas
MDN: Realizing common layouts using CSS Grid Layout
Tony Thomas: A Beginners Guide to CSS Grid Layout

 

JavaScript:
Webucators JavaScript Tutorial: http://www.learn-javascript-tutorial.com/
JavaScript cheat-sheet: http://firstsiteguide.com/javascript-cheat-sheet/

Debugging JavaScript
Chrome DevTools (Ctrl Shift I)

JavaScript Debugging:
http://www.w3schools.com/js/js_debugging.asp


Object Oriented JavaScript
Introduction to Object-Oriented JavaScript

JavaScript Objects
http://www.w3schools.com/js/js_objects.asp
http://www.w3schools.com/js/js_object_definition.asp


JavaScript Hoisting
https://www.w3schools.com/js/js_hoisting.asp

 

 

 

DOM4: W3C Recommendation 19 November 2015
https://www.w3.org/TR/dom/

What is the DOM:
https://developer.mozilla.org/en-US/docs/Gecko_DOM_Reference/Introduction#What_is_the_DOM.3F

 
     
  Asynchronous Programming:
https://egghead.io/courses/mastering-asynchronous-programming-the-end-of-the-loop

ReactJS
Lynda.com:
Learn React.js: The Basics with Eve Porcello
Building a Web Interface with React.j with Ray Villalobos

RxJS
Reactive extensions for JS (RxJS) and reactive programming
 
Extra
JQuery

JQuery
Links (JQuery):
http://jquery.com/
http://jqueryui.com/

jQuery.com Tutorial:
http://try.jquery.com/

W3Schools JQuery Tutorial:
http://www.w3schools.com/jquery/

JQuery Tutorial / Best practice
http://www.learn-jquery-tutorial.com/BestPractices.cfm#.USx5vB1WySp

Lynda.com:
http://www.lynda.com/jQuery-tutorials/jQuery-Essential-Training/183382-2.html


Slides:

JQuery.ppt
Codeschool_try_jquery.pdf
JQuery-essentials-slideshow

Examples (Code demonstated in the class):
JQuerySelectTest.zip (VSCode)


Exercise:
Do the tutorial at TRYjQuery: http://try.jquery.com/
Do the tutorial at CodeCademy: https://www.codecademy.com/courses/web-beginner-en-bay3D/2/1
  Extra material (if you want to go futher with MEAN and/or FireBase)

NodeJS
Introduction to Node with Ryan Dahl

Lynda.com:
Up and Running with Node.js with Alexander Zanfir
Building a Website with Node.js and Express.js  with Ray Villalobos
Node.js Essential Training with Alex Banks

MongoDB
https://www.mongodb.org/
MVA: You've Got Documents! A MongoDB Jump Start
Code School: The Magical Marvels of MongoDB

MEAN
Code School: Become a MEAN Stack Developer

FireBase
https://firebase.google.com/
https://www.youtube.com/user/Firebase?hl=da
 
 

TypeScript
Anders Hejlsberg: Introducing TypeScript
Anders Hejlsberg: What's new in Typescript
Classes: http://www.typescriptlang.org/docs/handbook/classes.html
Interfaces: https://www.typescriptlang.org/docs/handbook/interfaces.html
Overloading TypeScript functions: https://visualstudiomagazine.com/articles/2015/11/01/overloading-typescript-functions.aspx
Modules (imports and exports): https://www.typescriptlang.org/docs/handbook/modules.html

Video (Lynda.com)
Essential Training with Jess Chadwick


TypeScript Playground


Understanding ES6 Modules
import
export


WebPack 2

What is Webpack?

Video (Lynda.com)
What is Webpack?






Exercise: (Install: Node + npm, Git and TypeScript)
Install Node + npm (download: https://nodejs.org/en/)
Verify that it works by running: node -v

Install Git (download: https://git-scm.com/)
Verify that it works by running: git --version

Install the TypeScript compiler globally by issuing:
npm install -g typescript
Verify the compiler works by running
tsc -v

Exercise: (Typescript)
Exercise1-TypeScript.html
Exercise2-TypeScript.html


Solutions:

Exercise1-TypeScript.zip
Exercise2-TypeScript.zip

 

 

Exercise: (Webpack)
Exercise3-Webpack.html (Extra exercise - only if you have time left)

Solutions:
Exercise3-Webpack.zip (JS-Modules)