LEARN JAVASCRIPT
- Easy-to-follow VIDEO LESSONS on YouTube with Dr Abstract!
- Matching theory and reference sections at ZIM SKOOL
- ZIM SKOOL also features online code practice sections
- Inclusiveness and creativity for STUDENTS and TEACHERS
- View PROPS from excited learners and educators
- Supported by general ZIM LEARN video and code tutorials
- 0:01 - video intro screen and music
- 0:25 - set up code editor
- 5:28 - canvas template
- 7:40 - describing template
- 9:23 - code comments
- 9:47 - scaling the stage
- 12:10 - code syntax (constants, keywords, statements, operators, terminators)
- 14:24 - string and numbers
- 15:16 - colors
- 21:16 - var, const and let
- 23:05 - Frame (Framework)
- 28:30 - objects and classes (class is the instructions or recipe to make new objects)
- 30:27 - indenting in { }
Lesson 01 - VID 01 - Editor, Canvas Template and Code Basics
- 0:01 - video intro screen and music
- 0:26 - naming the videos VIDS not Lessons
- 1:02 - lesson 01 review (VIDS are part of Lessons)
- 3:55 - review of code template
- 5:07 - learning by seeing visual things!
- 6:02 - zog() and the Console!
- 11:35 - objects and properties
- 13:40 - const and let (ES6 replacements for var)
- 15:10 - ZIM Docs and ZIM Bits references
- 16:15 - put your code here! Finally coding!
- 16:50 - display Objects - something we see on stage
- 17:10 - making a button object from a Button class
- 20:00 - coordinates on the stage x and y and 0, 0
- 22:55 - centering on stage .center()
- 23:30 - setting parameters
- 28:10 - parameters versus arguments
- 29:13 - dot syntax, methods, properties
- 31:40 - chaining methods onto objects
- 34:25 - Blob for Kids apps - and conclusion!
Lesson 01 - VID 02 - Object Oriented Basics, Docs, Display Objects, Parameters and Chaining
- 0:01 - video intro screen and music
- 0:37 - review of earlier vids
- 1:04 - transformations - position, scale, rotation, skew
- 2:16 - coding review and setup
- 3:00 - registration point - important!
- 7:00 - rot() rotation and outline()
- 9:08 - sca() scale grows from registration
- 13:55 - centerReg() - sets registration in middle
- 17:15 - pos() - left, top, right, bottom
- 21:50 - traditional properties before chaining
- 26:10 - chaining - reducing code!
- 32:11 - ZIM Docs - to see more chainable methods
- 35:09 - Docs intro video and conclusion
Lesson 01 - VID 03 - Transformations, Registration and Properties
- 0:01 - video intro screen and music
- 0:41 - overview of lesson 2
- 1:23 - starting new page with template
- 2:20 - making a Slider
- 3:10 - parameters for Slider (in Docs)
- 5:25 - interactivity - getting value from slider
- 8:40 - currentValue property of slider
- 10:20 - slider value in console (F12)
- 10:55 - min, max, steps, vertical, useTicks
- 17:34 - literals and object literals
- 20:51 - properties in an object literal
- 21:40 - accessing properties (dot syntax)
- 23:08 - object literal as configuration object
- 25:02 - using a configuration object
- 27:49 - advantages of configuration objects
- 29:32 - conclusion
- 30:32 - new ending!
Lesson 02 - VID 04 - Components, Literals and Configuration objects
- 0:01 - video intro screen and music
- 0:20 - review of lesson 02 and where to practice
- 1:34 - review of last code with slider and the plan ahead
- 2:38 - loading in a picture asset (bitmap)
- 9:58 - setting the scale of the car with the slider
- 16:57 - scaling from the center (centerReg - the registration point)
- 18:00 - starting scale and the slider at the same value
- 21:23 - custom round button for the slider button
- 32:43 - final button and conclusion
Lesson 02 - VID 05 - Images and Controlling Properties with Custom Components
- 0:01 - video intro screen and music
- 0:13 - summary of last vids - third vid of Lesson 02
- 0:57 - animation discussion
- 1:18 - code review so far
- 1:40 - manual animation in time with a Ticker
- 3:49 - easing and the animate METHOD (said property for some reason)
- 4:39 - animating alpha
- 6:48 - animating position - and animating FROM not TO
- 8:10 - from parameter and using configuration object
- 13:27 - easing examples
- 14:53 - animating interface - rolling the button!
- 23:24 - animation is a feeling, not really to be seen
- 24:10 - the ANIMATE constant
- 26:30 - ZIM animate() examples
- 27:35 - shape animation example
- 27:47 - animation and wiggle along editable path example
- 28:20 - conclusion - this is FUN! Please share...
- 29:03 - dancing with Dr Abstract
Lesson 02 - VID 06 - Animation, Ticker and Path Animation
- 0:01 - video intro screen and music
- 0:38 - Baby, you can tune my car! with wiggle and sound
- 2:40 - review of last video code
- 3:20 - series and sequence - animating in Dials
- 5:18 - Tile of Dials
- 12:28 - Containers, bounds and registration
- 19:13 - sequence animation on Tile
- 26:27 - sequence and animation example page
- 28:39 - rewind and loop
- 30:58 - wiggle and wiggling car!
- 35:45 - conclusion - animation is fun!
- 36:14 - Dr Abstract dancing
Lesson 02 - VID 07 - Animation Series, Sequence and Wiggle
- 0:01 - video intro screen and music
- 0:13 - skool review!
- 0:56 - Lesson 03 - functions & starting from a template
- 2:20 - making a basic function & defining parts
- 2:50 - reasons for a function
- 3:28 - add a Label for the function to operate on
- 4:33 - filling in the body of the function
- 5:16 - function will only run if called
- 5:42 - calling a function
- 6:56 - order of code with functions - and a stage.update()
- 7:50 - parameters and arguments
- 9:49 - variables and parameters
- 10:33 - ( ) are like a portal!
- 10:43 - scope - parameters only available inside function
- 12:04 - variable scope
- 15:24 - running a function more than once!
- 16:28 - hoisting - running a function before we declare it!
- 18:14 - revisit scope and global scope
- 20:36 - scope of let - save it for later
- 22:13 - passing TWO parameters (or more)
- 22:52 - concatenation - joining strings with +
- 25:09 - quotes within quotes - escaping with \
- 27:40 - returning a value from a function
- 30:36 - summary - functions, parameters
- 31:03 - ( ) as hands giving and receiving
- 31:32 - parameters for Label() - arguments usage
- 32:13 - more review - scope, hoisting, return
- 32:29 - next video and new Dance Video!
Lesson 03 - VID 08 - Functions, Parameters, Scope
- 0:01 - video intro screen and music
- 0:12 - summary of last vids on Functions
- 1:09 - lesson03.html file with function greet and review
- 1:30 - function literal or anonymous function format
- 2:26 - functions are objects in JavaScript
- 3:08 - storing function in constant or variable
- 4:00 - running a function literal
- 4:30 - storing function literals in object literal
- 8:00 - calling a function literal when we finish animating
- 10:30 - calling a named function when done animating
- 15:02 - other calls, timeout, events, etc. can call functions
- 15:43 - arrow function in JavaScript 6
- 17:15 - calling an arrow function when done animating
- 17:52 - collecting parameters with arrow functions
- 18:34 - removing ( ) if only one parameter for arrow function
- 21:50 - templating in JavaScript - embed variables in quotes like PHP
- 24:25 - summary of anonymous and arrow functions
- 25:19 - libraries are built by storing functions on objects (namespaces)
- 27:06 - binge watching and dancing interlude!
Lesson 03 - VID 09 - Function Literals / Anonymous Functions and Arrow Functions
- 0:01 - video intro screen and music
- 0:13 - Lesson 03 Function review so far
- 1:30 - tidying up the function example getting ready for events
- 2:52 - introductions to events
- 3:30 - the on( ) method for capturing events - click, etc.
- 4:08 - adding the arrow function to on method as second parameter
- 4:43 - Atom shortcut for arrow function (af)
- 5:05 - adding function body to event handler function
- 6:52 - adding pointer cursor rather than default cursor
- 7:36 - addEventListener() for events for the DOM
- 8:42 - the event object - often the parameter e
- 10:10 - the target of the event object (e.target)
- 12:36 - the "mousedown" event
- 13:00 - the ugly "DOMContentLoaded" in DOM JavaScript
- 14:30 - back to mousedown
- 14:50 - mouseover, mouseout and mousemove
- 15:59 - drag() and pressup
- 16:30 - pressmove (note, NOT pressdrag)
- 17:32 - Frame's "ready" event and review of on() parameters
- 18:32 - functions within functions
- 19:18 - keydown event
- 20:00 - the event object's keyCode - e.keyCode() and how to get them
- 20:30 - seeing keyCodes in the console - arrows, enter key, etc.
- 21:50 - deleting an object with the delete key
- 22:50 - arrow keys, MotionController, issues with keydown
- 24:12 - events on a Container - using a Tile
- 26:14 - the on() method should not be chained
- 29:01 - short chainable methods - tap() and change()
- 29:50 - using e.target on a container gets child!
- 30:40 - one hundred monsters!
- 31:07 - adding a tap() to the tile container
- 32:17 - event object's currentTarget - owner of event
- 33:31 - dragging a container drags child (the target)
- 34:01 - dragging all the container - use drag({all:true});
- 34:50 - conclusion and little relax! Dancing interlude
Lesson 03 - VID 10 - Events, Event Objects and Targets
- 0:01 - video intro screen and music
- 0:14 - summary of last lessons
- 1:30 - abstraction and abstract art
- 2:30 - Creativity Framework - reviews
- 3:44 - context and content
- 4:38 - a medium - sits between
- 5:33 - hierarchy - and bosses bosses...
- 6:45 - terms of a hierarchy - nodes, etc.
- 8:08 - siblings, parents, children, sub and super...
- 10:06 - organization and mapping of hierarchy
- 10:35 - drawers - sections or boxes - Web page wireframe
- 11:23 - add angle brackets to top and bottom - XML or HTML
- 12:00 - indented list / table of contents with same data
- 12:50 - indenting code represents boxes / functions - organization!
- 14:07 - directory tree for folders and files - store a hierarchy
- 15:00 - nested or multidimensional arrays - store a hierarchy
- 15:55 - the traditional hierarchy drawn from nested boxes!
- 17:16 - letters and delimiters in formation - INFORMATION!
- 17:59 - code and language - linear to hierarchy
- 18:49 - a tree and the round things for trunks and branches
- 19:33 - nests, cells and organs - we are organizing!!
- 20:03 - code for cells is DNA - chemical delimited (said comma... oops)
- 20:45 - node zero in middle - radial hierarchy (mind map)
- 20:27 - our brain - axons and dendrites 3D hierarchy
- 21:47 - at any given time... a single hierarchy - our consciousness
- 22:50 - mapping of hierarchies - organization summary
- 23:18 - chaos and the big hug
- 23:24 - e-learning app made with JavaScript (ZIM) to recreate diagram
- 24:12 - multiuser version
- 24:40 - isomorphism of hierarchy e-learning app
- 25:50 - MISTAKE - can you see it? Oops.
- 26:40 - composition (and) parts - reality
- 27:05 - classification (ors) types - theory
- 28:05 - flexibility of hierarchy
- 28:25 - composition... things move!
- 28:53 - classification... different contexts...
- 29:33 - only context - empty and described
- 29:49 - all content in me... directly under node zero
- 30:20 - relativity and Einstein...
- 30:50 - conclusion and relevance to coding
- 31:00 - we are philosophers modeling life
- 31:27 - the philosophy of Nodism!
- 31:53 - mobile mediated app TOUCHY vid
- 32:52 - mediated reality / mobile mediated app
Lesson 04 - VID 11 - Abstraction, Hierarchy and Creativity Framework
- 0:01 - video intro screen and music
- 0:13 - Lesson 04 review
- 0:44 - abstraction summary
- 1:00 - watch out for an upside-down hierarchy
- 1:33 - the plan - abstract to constants, functions and classes
- 1:48 - starting our code for lesson04
- 2:13 - Createjs and ZIM are abstractions
- 3:23 - Teacher not prepared?
- 3:39 - starting with making pupils!
- 4:17 - wearing a little hat
- 4:50 - making a classroom - adding pupil to container
- 7:02 - efficiency by abstracting to a variable or constant
- 7:25 - embarrassed students
- 8:07 - single variable - changing color to yellow
- 8:45 - variables act as a convenience
- 9:12 - taking repeated code and making it a function
- 10:00 - function makePerson()
- 11:11 - returning an object from the function
- 12:14 - numbering things often means you can abstract
- 12:49 - don't use variables from outside the function
- 13:22 - using parameters to send information to the function
- 14:27 - specific and general (abstract)
- 14:57 - classes as an abstraction
- 15:35 - a class is what objects are made from
- 16:14 - a class is a metaphorical overlay in OOP
- 17:08 - using class keyword and extends
- 18:02 - contstructor runs when making a new Person
- 18:42 - parameters go in the constructor
- 18:46 - the keyword, this - new Person() is this inside class.
- 19:45 - object and class, class and object
- 20:00 - most at this level don't work with custom classes ;-)
- 20:40 - calling the super constructor
- 20:56 - inheritance
- 22:12 - a class or classroom - a group with things in common - a class
- 22:58 - next lesson is loops for more efficiencies!
- 23:23 - last view of Touchy game on Dragon's Den and in clubs
- 24:09 - creative coding also goes beyond visual creation!
Lesson 04 - VID 12 - Abstracting to Constants / Variables, Functions and Classes
- 0:01 - video intro screen and music
- 0:15 - previous lesson summary
- 1:57 - starting code page for Lesson 05
- 2:44 - an Array - a data structure that holds a list
- 3:05 - Array literal - and review of JavaScript literals
- 4:10 - storing array in constant and logging array
- 4:43 - accessing array elements with array access operator
- 5:18 - index number starting at 0
- 5:44 - length property is total number of elements
- 6:00 - logging elements of array - index practice!
- 6:43 - logging last element of array
- 8:10 - assigning a value at an index in the array
- 9:11 - making an array of colors!
- 10:11 - changing a circle color with color from array
- 11:02 - getting a random element of array with Math.random()
- 13:57 - Math.round() and Math.floor() - also Math.ceil()
- 16:33 - ZIM rand() to get range of whole numbers
- 18:40 - ZIM shuffle() to shuffle array and get first element
- 21:05 - ZIM Tile() to tile colored circles
- 22:05 - ZIM VEE value to pass an array for random picks!
- 22:52 - ZIM series() to get colors in order
- 23:52 - Array literals versus Object literals
- 24:55 - arrays store similar things
- 25:16 - objects store different things (different properties)
- 26:24 - an array of different things - but what are they?
- 27:49 - an array of monsters!
- 28:16 - accessing properties of an object stored in an array
- 29:48 - multidimensional arrays - arrays within arrays!
- 30:42 - accessing elements in a multidimensional array
- 32:44 - a multidimensional video conclusion - Trippy!
Lesson 05 - VID 13 - Arrays and Accessing Elements, Comparison to Object Literals
- 0:01 - video intro screen and music
- 0:18 - brief look at last array video
- 1:35 - into the code
- 2:00 - making a candies array and adding an element
- 3:15 - the push() method to add to the end of an array
- 4:49 - the pop() method to remove (and return) last element of array
- 6:05 - the shift() method to remove (and return) from the start
- 7:07 - the unshift() method to add to the start of an array (lollipop!)
- 8:19 - story of push, pop, shift and unshift
- 9:15 - split() method of a String to make an array
- 10:58 - the join() of an array - makes a string
- 11:39 - the indexOf() method to find index of element
- 13:18 - the splice() method to insert or delete from middle
- 17:20 - deleting an element with splice()
- 18:08 - assignment makes a reference to the SAME array
- 19:36 - using the slice() method to make a (shallow) copy of array
- 20:23 - ZIM copy() for (deep) arrays or objects
- 21:30 - the reverse() method to change the array to reverse order
- 22:22 - the sort() method - to sort by default string
- 23:53 - the concat() method to make a new array from two arrays
- 25:47 - conclusion and exit video!
Lesson 05 - VID 14 - Array Methods
- 0:01 - video intro screen and music
- 0:14 - last vid summary on Arrays
- 0:50 - what is a loop
- 1:20 - last code - spelling lollipop wrong - sigh
- 2:42 - general format of a for () {} loop
- 3:57 - comparison of structure to function and conditional
- 5:00 - parts of the loop - starting at 0
- 5:50 - logging results of for loop
- 6:10 - ZIM world domination
- 6:33 - parts described again
- 7:33 - looping backwards
- 8:30 - increment operators ++, --, +=, etc.
- 9:00 - post and pre incrementing
- 12:40 - looping by 2 or any other number
- 12:54 - using continue to skip to next loop
- 14:11 - using break to leave the loop
- 14:50 - nested loop - i and j, and name of iterator
- 16:42 - looping through an array
- 17:22 - using the length of the array to determine loop
- 18:14 - accessing elements of array with loop number
- 19:01 - explaining how the index number works
- 20:08 - hard-coding instead of looping - not for 1000 loops!
- 20:50 - creating Display Objects in a loop
- 23:10 - positioning objects with i to shift each object like a tile
- 24:56 - looping through a colors array to color objects
- 27:00 - the modulus % operator to get remainder
- 29:50 - using the modulus to cycle through array in loop
- 31:28 - conclusion and closing video - looped rings!
Lesson 05 - VID 15 - Basic Loops, looping through Arrays and Modulus
- 0:01 - video intro screen and music
- 0:05 - past lesson summary
- 2:21 - while loop format (ES6 loop mentions too)
- 5:23 - ZIM loop
- 6:45 - loop matches format of events, timeout, interval
- 9:35 - looping backwards with third parameter true
- 9:54 - loop backwards when removing from array or container
- 10:50 - looping through an array with a ZIM loop
- 11:57 - looping through an object literal
- 13:31 - getting index and total in ZIM loop
- 14:32 - looping through Container - creating our Container
- 16:23 - containers have a loop method - other loops are functions
- 17:36 - format for using loop method
- 19:54 - removing from container in a loop
- 22:00 - the equivalent of continue with a ZIM loop is return
- 25:47 - the equivalent of break with a ZIM loop is return a value
- 28:07 - making art with a loop - random circles on stage
- 30:54 - animating scale in a loop
- 33:21 - conclusion and trippy vid
Lesson 05 - VID 16 - While Loop and ZIM Loop for Numbers, Arrays, Objects and Containers
- 0:01 - video intro screen and music
- 0:13 - lesson review
- 0:45 - the basics and soon creative coding with building and controls
- 2:00 - getting template for Lesson 06
- 2:23 - CreateJS and ZIM have 3000 to 5000 conditionals!
- 2:47 - the structure of an if statement if () {}
- 3:09 - else and if else
- 3:50 - inside the round brackets is a statement
- 4:00 - things that evaluate to true and false
- 4:46 - is a new Circle() true? yes
- 5:05 - Boolean operators (less than, greater than, etc.)
- 5:16 - testing x values (btw - an equal to is == NOT =)
- 5:37 - using conditionals to make Rectangle and Circle objects
- 6:50 - Boolean or (||) and and (&&) operators and brackets
- 8:38 - odds and testing random numbers
- 10:34 - sneezing and Bugles dust!
- 11:05 - using interval to test random in time
- 13:53 - animating to make an odds factory!
- 16:58 - dynamically changing odds
- 17:16 - conditional concepts and examples
- 18:40 - controlling odds with slider
- 21:39 - the factory to make circles and rectangles!
- 23:46 - conclusion and new closing video for Droner!
- 24:24 - cameo by Pragma in Pink...
Lesson 06 - VID 17 - Conditionals - if Statements, Booleans and Odds
- 0:01 - video intro screen and music
- 0:15 - review of last lessons and places to practice
- 2:22 - review of last lesson - the assembly line!
- 2:58 - the == operator for equality
- 3:52 - the else if () {} revisited
- 5:02 - the embarrassed triangle
- 5:47 - the != not equal operator
- 7:20 - debugging - a build test example!
- 8:23 - demonstration of the build test
- 9:29 - history of the word bug
- 10:58 - missing comma - white screen of wonder
- 11:13 - F12 to see console with error messages (tab to console)
- 11:47 - missing a bracket? Wrong line wrong error?
- 12:15 - missing a : colon - and words used...
- 12:50 - lowercase class name - not defined
- 13:14 - do not name variable the same as the class
- 13:40 - lexical declaration... Oxford error!
- 14:14 - missing brackets - can be tricky
- 15:45 - undo to when it was working / test often!
- 16:30 - no error - but something is missing
- 16:58 - make sure the function is being called!
- 19:04 - undefined values - watch scope
- 23:45 - proper scope example summarized
- 25:00 - something not showing up? Add to stage!
- 26:22 - examples of bugs in ZIM Skool
- 27:30 - the five minute rule - working on right file!
- 28:34 - ZIM Tips - for helpful debugging tips
- 28:44 - errors, missing, indenting, zog, ask & changes
- 29:32 - types of errors
- 29:37 - simplify! comment out code or isolate code
- 30:19 - make sure the file is saved!
- 30:52 - hitTest errors or too many results
- 31:28 - why things might not show up!
- 31:39 - why indenting can help you understand code
- 32:24 - be messy in the real world - but not with indenting!
- 32:48 - conclusion and look forward to building
- 33:05 - Droner video end video
Lesson 06 - VID 18 - Equality and Not operators and Debugging and Error Messages
- 0:01 - video intro screen and music
- 0:17 - lessons review - now on Lesson 07
- 1:03 - showing the intro app that we will build
- 1:30 - intro demo
- 3:28 - templates - minimal, fit, outside, full, tag, assets
- 6:36 - template for Adobe Animate (Flash) called ZIM Shim
- 7:07 - setting up the fit template for Lesson07
- 7:38 - quick template review
- 9:26 - Coding! Making background from Rectangles
- 10:30 - ZIM colors
- 12:40 - using pos(x,y,horizontal,vertical,container)
- 13:52 - reminder of registration point and outline()
- 14:40 - making a Tile instead!
- 16:10 - randomizing colors with array and ZIM VEE (Pick)
- 16:55 - ZIM VEE (Pick) series() to get colors in order
- 19:29 - Using Container objects - theory
- 20:45 - making a Container for the first section
- 21:28 - two types of containers - dimensioned and flexible
- 21:55 - setting dimensions on containers
- 22:38 - outlining container (shows our container dimensions are wrong!)
- 24:08 - centering the Circle in the container!
- 25:27 - dragging the circle in a Boundary
- 28:18 - checking the boundary... the registration point stays inside
- 28:56 - adjusting the boundary to accommodate the radius
- 30:58 - adding the Label text
- 32:23 - using STYLE to set the color of all the Label objects
- 33:26 - no semi-colon at end (not CSS) we use commas
- 33:58 - setting the alpha with STYLE
- 34:48 - setting a general style for everything
- 35:45 - setting styles for a Circle
- 36:15 - overriding styles
- 36:44 - purple in the circle!
- 36:50 - conclusion and "hanging" around with new Vid! (loud)
Lesson 07 - VID 19 - Building an Intro App panels, Draggable Circle, Labels and STYLE
- 0:01 - video intro screen and music
- 0:10 - the Learn JavaScript interactive promo!
- 0:29 - summary of intro app - we are building components
- 1:30 - summary of the code so far
- 1:55 - creating headings for parts
- 2:55 - starting in on new code with a Container
- 3:45 - making a Dial
- 4:12 - adding dial to container
- 5:55 - using place() to place objects
- 7:37 - making a Slider
- 8:42 - change events
- 9:19 - difference between on("change") and change()
- 10:40 - the currentValue property (and e.target review)
- 12:48 - OPTIMIZE setting to not let components update the stage
- 14:00 - applying change event to slider
- 16:15 - dial parameter discussion
- 16:38 - useTicks and step parameters for Slider (or Dial)
- 18:00 - creating a ColorPicker
- 19:08 - change and close events of ColorPicker
- 21:12 - making a Button
- 22:34 - changing color of Button with ColorPicker
- 23:50 - removing the alphaPicker from the ColorPicker
- 24:20 - adding tap() to Button (like an on("click"))
- 26:40 - adding Label for Components
- 27:46 - checking the alpha STYLE
- 28:06 - we're a Designer - let's go on break...
- 28:49 - conclusion and wearable computer vid!
- 30:03 - reference to Hamilton SuperCrawl with Hangy
Lesson 07 - VID 20 - Building Components - Dial, Slider, Button, ColorPicker
- 0:01 - video intro screen and music
- 0:15 - summary of lessons so far
- 0:30 - summary of intro app we are building!
- 0:50 - view of animations for sections
- 1:27 - review of code so far
- 1:45 - making a Squiggle in a Container
- 3:20 - testing the squiggle in a browser
- 3:28 - configuring the squiggle
- 4:34 - making a Triangle to move along the path
- 6:29 - dragging the triangle on the path!
- 7:04 - drag and animate along a path
- 8:36 - adding the Label
- 10:40 - using expand() to increase interactive size
- 11:55 - animating in the containers
- 15:42 - ZIM animate series
- 16:30 - demonstration site of different animations
- 17:50 - using ZIM DUO config object to get to wait parameter
- 20:50 - putting animateTime in a variable or constant
- 22:20 - animating FROM - more efficient at times
- 25:26 - the ANIMATE constant to turn off animations
- 28:34 - conclusion
- 29:25 - Hangy video - still loud!! We'll get it next time
- 30:28 - description of how Hangy works
Lesson 07 - VID 21 - Animating and Dragging on Path, Animating Sections
- 0:01 - video intro screen and music
- 0:15 - summary of last vids - app summary
- 1:13 - summary of the code so far including ANIMATE = false
- 1:58 - making a Tile in a const pixels
- 3:03 - making a Container to hold part 4
- 4:52 - adding a Border to the rectangles
- 5:10 - randomizing colors
- 5:35 - moving tiles up 20 pixels
- 5:58 - making eraser Rectangle
- 6:48 - shadow - and positioning based on x property
- 7:27 - dragging the eraser - and drag story!
- 8:26 - pressmove event as we are dragging
- 8:56 - logging to test event is working F12 for console
- 9:43 - hit test between eraser and each pixel in loop
- 10:20 - using a conditional (if) for hit test
- 10:47 - removing a pixel - and looping backwards!!!
- 12:26 - setting loop to loop backwards
- 13:48 - animating pixels rather than removing pixels
- 15:02 - not working because ANIMATE is false!
- 15:57 - setting ANIMATE to true to see animations ;-)
- 16:33 - adding instruction labels
- 18:18 - using JavaScript toUpperCase() method right on String
- 19:30 - animating sections in - grouping animations together
- 20:00 - using SHIFT TAB to outdent all the selection
- 21:00 - repeated code can be abstracted to loop - let's practice!
- 21:38 - preparing to Abstract - and finding the differences
- 22:00 - using a Container... or add objects to an Array [ ]
- 23:09 - looping through array
- 23:54 - functions versus methods
- 24:37 - we did not add a loop method to the JS Array class (bad form)
- 25:10 - back to Abstraction - how Abstraction works
- 26:10 - collecting the index number and using it in Abstraction
- 26:52 - comparing before and after Abstraction - saved half the code!
- 28:32 - loading the logo asset in to the Canvas
- 30:30 - animating the logo asset in with alpha and rotation
- 32:05 - oops - need to center the registration point!
- 32:47 - adding a link to the logo icon on a tap event
- 33:55 - conclusion - JS talk - final video with volume down!
- 35:22 - stories of Hangy
- 36:16 - Lesson 07 wrap up - see Code in Five Minutes and Explore series!
Lesson 07 - VID 22 - Building Tiles, Looping, Hit Test and Animating
- 0:01 - video intro screen and music
- 0:14 - summary of last lessons
- 2:13 - summary of the controls lesson
- 2:55 - docs for controls
- 4:55 - Parallax examples!
- 5:07 - ZIM Bits - parallax image example
- 5:36 - Gorgolon - Window scroll example
- 6:28 - Scroller (Flintstone) - with Parallax
- 7:02 - dancing aliens with mouse parallax and wiggle
- 8:13 - parallax site - most advanced and complete ZIM VR
- 9:13 - scrollbar parallax - Holiday Card
- 9:58 - basic scrollbar and mouse Parallax example
- 10:55 - getting a template to code!
- 11:40 - bringing in image assets
- 12:57 - new Waiter() or new ProgressBar() info
- 13:24 - adding the asset to the stage
- 13:49 - viewing asset - thanks Frank Force
- 15:00 - version number updates eg. ZIM 10.6.1
- 15:54 - only need asset() now... not frame.asset()
- 16:36 - comparison of HTML img and asset()
- 17:03 - making midground and foreground assets
- 18:04 - setting alpha and blendmode
- 18:27 - canvas compositeOperation or blendMode info
- 19:45 - viewing effect of blendmode soft-light...
- 20:16 - concept of parallax - the plan
- 20:49 - the Parallax class - and a new parallax object
- 21:30 - using an array [ ] to store a list of similar things
- 22:00 - using an object literal { } to store properties of a layer
- 22:40 - creating the background layer object for parallax
- 23:47 - seeing the background moving with mouse x
- 24:10 - moving too much!
- 24:25 - making it move just the right amount
- 25:00 - copying in atom by sitting on line and CTRL C CTRL V
- 25:20 - setting parallax in y
- 25:38 - adjusting x to y or horizontal to vertical - easy to do!
- 26:18 - changing y based on an input of mouseY
- 26:30 - mouseY acts from the bottom - in this case set split:true
- 27:23 - testing the split - it works
- 27:50 - copy the background to the mid and foreground
- 28:28 - multiple select in Atom with the CTRL key pressed
- 29:16 - setting the damping to slower! .01 rather than .1
- 30:00 - ooo - parallax complete!!! Looks better in real life
- 30:22 - fit, full and outside mode
- 31:12 - when would we use the outside mode?
- 31:43 - full screen parallax (looks great live without screen capture compression)
- 32:13 - why we learned the basics - creative coding!
- 32:26 - new outro video - sound controlled lights
- 32:39 - animating with sound - is a control too!
Lesson 08 - VID 23 - Loading Images and Applying Parallax Controls
- 0:01 - video intro screen and music
- 0:12 - summary of lessons so far
- 0:38 - intro to the Ticker!
- 1:19 - grabbing the template
- 1:38 - ready to code!
- 1:51 - Ticker.add() and static methods - Math class
- 2:30 - Ticker description - frames per second
- 3:12 - adding a function to the Ticker
- 3:28 - timeout, interval, loop and Ticker comparison
- 4:58 - showing console log from a Ticker
- 5:18 - animating a Circle in a Ticker
- 5:42 - using +, +=, ++, -=
- 7:09 - adding bounds to motion animation
- 8:48 - watching ball bounce!
- 9:00 - making circle follow the mouse - frame.mouseX
- 9:33 - making movement smoother with damping
- 10:46 - ZIM Damp class and converting with the damp object
- 11:30 - seeing the damping - smooth!
- 11:42 - slowing down the damping from .1 to .01
- 12:35 - moving and damping in the y as well!
- 13:13 - something broken at 13:13
- 13:34 - working again!
- 13:38 - leaving a trail that follows the mouse
- 15:19 - seeing the trail
- 15:38 - setting the alpha lower
- 16:00 - discussion of redrawing circles - blitting description
- 17:06 - animating the tail to go away
- 15:50 - removing the circle when the animation is done (call)
- 18:34 - seeing the animation out
- 19:23 - experimenting with the settings to make art!
- 19:51 - results of creative coding!
- 20:14 - animating color - object literal format reminder
- 21:00 - adjusting colors
- 21:43 - final mouse follow example
- 22:03 - MotionController - var a variety of control
- 23:35 - mousedown, mousemove, keydown
- 24:56 - examples of MotionController - Butterfly
- 25:51 - controlling a ZIM Pen with the pressmove
- 26:26 - making a Pen
- 26:40 - ZIM controls work on existing display objects
- 27:42 - seeing the Pen work!
- 28:02 - seeing the Gen-Pen example - splatter, city, grass, etc.
- 28:44 - working with layers in Gen-Pen
- 29:25 - Gen Art on ZIM banner page
- 29:47 - conclusion and looking forward!
- 30:29 - outro video made with SoundWave controls
Lesson 08 - VID 24 - Ticker, MotionController, Pen
- 0:01 - video intro screen and music
- 0:16 - lesson review
- 0:48 - intro to Sprite, Dynamo, Scroller, and Accelerator
- 1:47 - grabbing a template
- 2:25 - bring in assets with Asset List tool!
- 3:20 - warning about ES6 and IE - use a tool like Babel
- 4:15 - using CTRL and arrow key in Atom to move line up and down
- 4:25 - looking at the assets
- 4:40 - a SpriteSheet - images in a graphic for animation
- 5:03 - a look at JSON, Texture Packer, animation information
- 5:44 - types of SpriteSheets - regular spacing does not need JSON
- 6:28 - exporting to EaselJS (CreateJS) from TexturePacker
- 6:48 - describing JSON - JavaScript Object Notation
- 7:30 - ZIMON - to store any ZIM Object as a string!
- 8:38 - JSON stringify() and parse()
- 9:04 - loading assets and path into Frame
- 9:30 - showing an asset - copy and paste names!
- 10:15 - asset showing in Browser
- 10:26 - adding asset to a Scroller with a speed
- 11:02 - asset scrolling on screen - and explanation
- 11:54 - changing the speed of the scroller
- 12:06 - making all the scrollers
- 13:26 - adjusting heights and size of Frame
- 14:45 - all the scrollers working!
- 15:11 - adding a Sprite
- 17:00 - running the sprite
- 17:15 - running an animation at a label
- 17:34 - looping the sprite
- 18:00 - moving sprite and changing layer
- 18:26 - sprite looking good!
- 18:36 - changing the sprite speed with time
- 19:41 - adding sprite to Dynamo to adjust speed dynamically!
- 21:48 - percentSpeed discussion for Dynamo and Scroller
- 22:13 - an Accelerator can dynamically change the percentSpeed
- 22:24 - moving backwards - reversible and flip
- 23:40 - adding everything to an Accelerator
- 24:03 - using an Array [ ] to pass objects to the accelerator
- 24:50 - adding statements to array and switch to commas
- 25:08 - using CTRL select for multiple editing in Atom
- 25:50 - playing scene at 100 percent in accelerator
- 26:02 - the magic... changing the speed of the whole scene
- 27:11 - discussion of how to change speed based on mouse
- 27:38 - Proportion, ProportionDamp, JavaScript map()
- 28:28 - MotionController to control speed!
- 31:02 - the results of the MotionController - cool!
- 31:23 - registration point issue
- 31:48 - adjusting speed of MotionController to flip better
- 32:41 - yay - nice speed change - all is good!
- 35:02 - switching to a keydown motion (or a gamePad)
- 35:50 - results of using keyboard!
- 34:00 - summary - comparison to other frameworks
- 34:57 - creative coding with gaming aspects!
- 35:27 - oo oo - the end video
- 35:43 - singing da da ba doo around the world
Lesson 08 - VID 25 - Sprites, SpriteSheets and Scrollers
- 0:01 - video intro screen and music
- 0:14 - summary of last lessons
- 0:44 - the Pages class to go from page to page
- 0:59 - looking ahead to Layout class and others
- 1:23 - grabbing the minimal template
- 2:01 - adding the stageW and and stageH constants
- 2:18 - pages are just Containers that we can add and remove
- 2:42 - making two containers and swapping them
- 3:08 - making a background color with a Rectangle
- 3:43 - adding rectangle to page1 container!
- 4:02 - adding an arrow button - or just a Triangle with hov()
- 5:26 - looking at the page in the Browser
- 5:44 - using chainable tap() - like an on("click"...) event
- 6:05 - making a page2 - watch the tab indenting
- 6:44 - removing page1 and adding page2 in tap
- 7:34 - do not start with page2 added to stage
- 7:55 - testing clicking from one page to the next
- 8:08 - Swipe object discussion would need more code...
- 9:26 - discussion of animation - so more and more...
- 9:40 - preparing for using the Pages class
- 10:38 - storing buttons on the page object
- 11:05 - difference between constants and properties
- 11:31 - JavaScript has dynamic classes/objects
- 12:10 - issues with dynamic classes
- 12:26 - making a new Pages object
- 12:43 - using an Array to specify the list of pages
- 13:06 - making the pages objects
- 13:28 - an array of Swipes - where are the pages we swipe to?
- 13:54 - making a third page... talk of automation
- 14:30 - discussion of keeping nav separate from page
- 14:58 - specifying pages for swiping
- 15:34 - swiping up and down to a help message
- 16:15 - swiping up and down to different structures...
- 16:45 - setting up swiping for other pages
- 17:21 - ADDING the Pages object to the stage
- 18:00 - adding transition (lots of types) between pages
- 18:52 - live swiping of pages!
- 19:05 - making buttons work with HotSpots!
- 19:43 - using an Array to pass in multiple hot spots
- 19:52 - theory for using hotSpots - Model View Controller
- 21:10 - hotSpots are like an image map in HTML
- 22:13 - making the hotSpots objects with the page and the rect
- 22:49 - the callback function for clicking on the hotSpot
- 23:12 - using the go() method and other pages features
- 24:22 - testing the button to change the page!
- 24:57 - making the other arrows work
- 25:40 - easy to see we could build in a loop
- 26:08 - testing all the buttons! Yay!
- 26:18 - swiping up and down and various events
- 26:48 - capturing our custom help event
- 27:12 - making a new Pane (pop-up window)
- 28:10 - calling the pane and testing
- 28:27 - setting up a different help for different pages
- 28:52 - setting names for the pages
- 30:36 - changing the words in the pane
- 31:00 - accessing the page in the event
- 31:30 - seeing the different messages
- 32:52 - adding content to pages (with oops)
- 32:58 - adding a Tile to page1
- 33:28 - adding a RadialMenu to page2
- 33:44 - adding a Slider to page3
- 33:54 - discussion of separating view in another file
- 34:17 - can't see content? Debugging...
- 35:11 - solution - move objects in front of backing rectangles!
- 35:48 - yay - the working pages with content
- 36:14 - conclusion and ending video!
- 36:35 - next video on Layout class
Lesson 08 - VID 26 - Going from Page to Page, Swiping and HotSpots
- 0:01 - video intro screen and music
- 0:13 - review of last lessons
- 0:37 - introduction to the Layout class
- 1:00 - demonstration - responsive and adaptive layout
- 1:26 - the bounds to show the regions of the layout
- 1:47 - Grid and Guide example - P key for pixel/percentage
- 2:38 - grabbing the minimal template (with stageW and stageH)
- 3:10 - reminder of what the fit scaling mode gives us
- 3:40 - using full scaling mode to not waste space on mobile
- 4:06 - manually scaling and positioning
- 4:39 - using a resize event on the frame to reposition
- 5:14 - scaling an object using scaleTo() with percent on resize
- 6:05 - positioning based on percentage
- 6:38 - updating stageW and stageH in resize event
- 7:35 - using a Grid to see percentage
- 7:49 - resizing the Grid - and Guides, Layouts, etc.
- 8:33 - seeing percentage on the grid as stage changes
- 9:07 - talking percentages - .2 is 20%
- 9:40 - the Layout class distributes regions with margins, widths, etc.
- 10:20 - making containers for regions
- 10:27 - keep aspect ratios within regions - we scale, but not stretch!
- 11:20 - giving the container a size and add them to the stage
- 11:43 - adding a Pad to the left region - discussion of padding
- 12:39 - seeing the pad on the screen
- 12:55 - making the middle container for our content
- 12:28 - making a title
- 13:48 - discussion of Flexive design - Adobe, FlexBox discussion
- 14:58 - the most complicated code in ZIM to handle flex design
- 16:07 - using scaleTo() to scale label to content container
- 17:27 - outlining the content area with outline();
- 17:49 - making the right side with a ColorPicker
- 20:03 - seeing the color picker
- 20:26 - making the Layout object on the stage
- 20:55 - using an Array [ ] to pass in the regions as object literals { }
- 21:30 - making the region objects
- 22:20 - different properties for different orientation
- 22:38 - align, minWidth percentage, maxHeight percentage, etc.
- 24:32 - more layout params - lastMargin, backgroundColor, vertical
- 25:33 - the bounding shape parameter
- 26:08 - viewing the results of the Layout!
- 26:29 - resizing the layout in the resize event
- 26:43 - results of resize - and hiding bounding box
- 26:55 - discussion of layout on mobile
- 27:52 - squeezing Layout (and it is the right region not left!)
- 28:20 - the ResizeManager for multiple resizes in one!
- 29:10 - adding the layout to the resize manager
- 29:46 - resizing the resize manager
- 30:23 - conclusion - responsive, percentages, arrays, objects, etc.
- 31:30 - ending video - da do da dee da doo da doo!
- 31:43 - look ahead to more visual controls!
- 32:14 - come join us on Slack - we are REAL people!
Lesson 08 - VID 27 - Responsive and Adaptive Layout on Canvas
- 0:01 - video intro screen and music
- 0:18 - making art with noise!
- 0:24 - noise examples
- 0:45 - noise description - it is an equation with inputs
- 1:10 - moving along the equation
- 1:20 - how zoomed in we are in the equation
- 1:52 - example of zooming in and out - how many bumps we see
- 2:34 - blobs - we can add more dimensions to noise
- 2:47 - a cross section across mountains
- 3:04 - conventional view of noise - little specks
- 3:48 - getting started with a template (minimal today)
- 4:23 - the plan - apply noise to a tile and animate in a Ticker
- 5:07 - making the Tile of white Rectangle objects - on dark background
- 5:42 - centerReg - and discussion of registration and scaling
- 6:30 - seeing the tile in Browser
- 6:40 - making a Noise object and discussion of seeds
- 7:16 - making the same mountain based on a single little seed!
- 7:46 - looping to apply noise equation to each rectangle in the tile
- 8:22 - collect the index number so we can move along the noise equation
- 8:38 - setting the scale of the rectangles
- 8:54 - the noise equation - simplex (open source) vs perlin (closed)
- 9:12 - 2D equation - two numbers - "where" and "zoom"
- 10:10 - seeing the result - the height is between -1 and 1
- 10:28 - amplifying the noise
- 10:46 - zooming in on noise equation for smooth line
- 11:25 - we want to see the equation move!!!
- 11:34 - testing the seed number before we see it move
- 11:56 - seeing a zoomed out view with a specific seed
- 12:15 - refreshing, we see the same pattern - until we change the seed
- 12:54 - changing -1 to 1 results to 0 to 1 (add 1 and divide by 2)
- 14:20 - oops - we needed to centerReg the Rectangles!!
- 15:10 - view of 0-1 range - nice!
- 15:57 - separating the code into multiple lines
- 16:51 - separating out the values we will dynamically change
- 17:44 - applying a base value (min starting scale)
- 18:28 - how do we know to do all this? Experience...
- 19:17 - discussion of using a dial or slider to change values
- 19:40 - exploring the bounds of the numbers - what change does
- 20:28 - the range of x will dictate how fast we move
- 21:05 - how much we are zoomed in
- 22:20 - we have a starting range - discussion of proportion (mapping)
- 23:18 - making a MotionController
- 23:52 - adding a Circle to see where the MotionController is operating
- 24:48 - moving the circle with mousemove
- 25:22 - using the x and y of the circle to control the noise
- 26:22 - using a Ticker to constantly change
- 27:15 - demonstrating the x value changing
- 27:35 - converting range of 0-stageW to our desired ranges
- 29:10 - the proportion / mapping equation
- 29:30 - the ZIM Proportion class
- 30:17 - converting the circle's x with the proportion object
- 30:58 - seeing the results of the conversion
- 30:48 - using the conversion to control the noise!
- 32:05 - copying the Proportion for the y
- 32:45 - summary of the noise code so far!
- 33:05 - testing it in the Browser
- 33:22 - ooo - smooth motion
- 33:36 - too much jiggly - and a bit too quick!
- 33:56 - making adjustments
- 35:08 - tuning results and removing the circle for the target
- 36:05 - full screen final version!
- 36:24 - ending video - do da doo
- 36:40 - a few videos left! Come join us at Slack, examples, etc.
Lesson 08 - VID 28 - Noise (Simplex) and Generative Art
- 0:01 - video intro screen and music
- 0:12 - review of lessons so far - parallax, pages, sprites, etc.
- 0:40 - animating to SOUND! and grabbing a template
- 1:22 - loading in sound assets from assets folder
- 2:04 - passing assets and path into Frame call
- 2:17 - playing the asset
- 2:37 - we can now just use asset() rather than frame.asset()
- 2:59 - recording reference to sound in a const
- 3:19 - CreateJS SoundInstance to control sound after making
- 5:56 - playing the sound in the Browser
- 4:14 - changing circle sizes based on the frequency of sound!
- 4:46 - animate anything to sound - taught lip animation in China...
- 5:24 - making the SoundWave object!
- 5:36 - sound has frequencies, description... base, mid, treble
- 6:24 - setting parameters of SoundWave...
- 6:31 - microphone discussion - animate to live sounds for lightshows!
- 7:15 - adding a ready event for when the object is ready (sneezes!)
- 8:26 - making the circles once ready - and move to black background
- 9:24 - loop through soundWave.num and make circles
- 10:15 - dimensions come later when radius is set with sound
- 10:20 - randomizing the colors with ZIM VEE (Pick) array value
- 10:45 - discussion about how to randomly pick with raw JS
- 11:11 - what is a ZIM VEE value - and why is it called that?
- 12:13 - adding circles to container and container discussion!
- 13:26 - needing a stage.update() and viewing circles
- 13:37 - fanning out the circles with a move based on i - the iterator
- 14:34 - container dimensions demonstration and conversion...
- 15:47 - making radius of circles equal to the frequency of the sound
- 16:14 - adding a Ticker to animate circles based on sound data
- 16:35 - getting the soundWave data with calculate method
- 16:55 - data is array that has frequencies - and tweaking...
- 17:51 - viewing the data in the console F12
- 18:42 - logging to the console in a Ticker can bog the app
- 19:06 - loop through circles and set radius to match data
- 20:15 - viewing the results in the Browser
- 20:41 - reducing the size by multiplying the data by half (or some factor)
- 21:16 - beautiful result
- 21:45 - setting the blendMode ble() to see how many circles there are!
- 22:27 - startling results!
- 22:53 - reducing the number of circles to 10
- 23:11 - the result of reduced number of circles with difference blendMode
- 23:54 - discussion of making art with sound
- 24:08 - conclusion and view of standing in circles with mic input!
- 24:43 - come join us on Slack! Tell your friends, come code with us!
Lesson 08 - VID 29 - Animating to Sound Frequencies
- 0:01 - video intro screen and music
- 0:12 - last lesson! More to experience and to do with JS and the Canvas
- 0:30 - guessing game for last topic - looking at examples...
- 0:47 - pinball with sparks
- 1:05 - ice cream with bubble bling
- 1:16 - rocket with jet tail
- 1:43 - spark with fuse
- 1:58 - emitter following a mouse for line art!
- 2:28 - the mini-emitter site! With emitter trails menu
- 2:50 - fire... like the tail of the spaceship
- 3:13 - wiggling a sink... and snow falling (vertical emitter)
- 3:54 - emitting shapes again with a sink... like a gravity well
- 4:22 - making fireworks! Particle and line versions
- 4:49 - drawing lines that look like an atom!
- 5:14 - code example of a recent exercise app
- 5:35 - having a look at some emitter parameters
- 6:34 - starting paused and spurting...
- 7:14 - viewing the Flexercise app
- 8:58 - quick view of emitter in the app
- 9:13 - review of the ZIM Skool lessons at https://zimjs.com/skool
- 11:13 - grabbing the minimal template and starting our code
- 11:59 - making an Emitter - same as all the other classes and objects!
- 12:50 - viewing the default Emitter - lesson over... hahaha
- 13:10 - things we can do with the emitter... MotionController, etc.
- 13:49 - the plan... any where we click, run the emitter!
- 13:59 - reference with a const... JavaScript basics review...
- 14:37 - review of chaining...
- 15:35 - starting paused - and review of configuration object as parameter
- 16:28 - parameter discussion, defaults using undefined, etc.
- 18:05 - clicking to show the emitter - mousedown versus stagemousedown
- 18:44 - discussion of CreateJS with many thanks!
- 19:33 - review of functions, arrow functions, function literals
- 21:26 - putting the emitter and the same location of the mouse
- 21:44 - review of the event object (e)
- 22:20 - e.stageX and e.stageY - we no longer use due to Retina conflict
- 23:00 - use frame.mouseX and frame.mouseY instead
- 23:24 - using x and y property to set the position of the object
- 24:04 - centerReg adjustment... and discussion
- 24:49 - the loc() method - shorter and can chain
- 26:09 - spurting the emitter!
- 26:18 - discussion of statements... use ; at end of chaining
- 27:00 - clicking to show emitter in Browser
- 27:23 - setting the background color to black and trying!
- 28:12 - indenting our code
- 29:29 - adjusting the emitter parameters - checking in the Docs!
- 32:18 - emitting rectangles - and centerReg waffling...
- 33:18 - bug! bug! forgot Rectangle has width and height parameters...
- 33:42 - debugging example - simplify... or go back to where it worked
- 35:35 - seeing the centerReg rectangle - boo - and solution {add:false}
- 39:24 - randomizing the color as we make the rectangle
- 39:56 - randomizing the objects we are emitting using ZIM VEE
- 40:34 - emitting squiggles too (for the first time)
- 41:43 - viewing the squiggle emitting!
- 42:08 - adjusting gravity to go up - and discussion of force
- 42:50 - a little force (can also set angle range of force)
- 43:03 - wow, building is wonderful! Yay - to all these settings!
- 43:17 - not shrinking with boolean false
- 43:50 - setting random rotation or random any property!
- 44:03 - final viewing of weird squiggly
- 44:18 - coding in JavaScript on Canvas versus not on Canvas...
- 44:42 - the canvas is one big image that we dynamically change
- 44:52 - painting on the canvas with our creativity!
- 45:11 - closing video for the last time - da da dee doo...
- 45:25 - other videos - ZIM Explore, Code in Five Minutes with ZIM
- 45:50 - thank you, please share, join us at https://zimjs.com/slack
Lesson 08 - VID 30 - Particle Emitters - Fire, Flames, Fireworks
- 0:12 - new module on data with PHP and mySQLi
- 0:22 - form on the canvas demonstration
- 0:33 - quick view of database
- 0:44 - viewing things on Canvas and HTML DOM - same techniques
- 0:56 - what is data? Fully understand this!
- 1:30 - meta data - id, property, variable, name, label
- 2:00 - combination of data and meta data is information
- 2:27 - information to FORM circle
- 2:39 - information informs us - data in an HMTL FORM...
- 2:56 - information in a visual way vs text information
- 3:22 - looking into the code - template and focus on data
- 4:00 - two sets to all the pages - the second with detailed comments
- 5:17 - the information to form a circle = meta data + data
- 6:26 - "both sides need each other"
- 6:58 - storing information - example without storing
- 7:45 - want to remember the information
- 8:08 - BINDING information to localStorage - data on user computer
- 9:54 - properties we want to remember - x, y, level
- 11:03 - localStorage discussion - remembering on local computers
- 12:00 - wanting to share with others? a Database!!
- 12:27 - looking ahead to doing HTML and Canvas forms
- 12:46 - exit video and... exit!
Lesson 09 - VID 31 - Data and Information - localStorage
- 0:13 - summary of module - canvas, HTML DOM, PHP, MySQLi
- 0:30 - canvas excitement
- 0:48 - HTML form - design inspired from canvas
- 1:30 - submitting the form
- 1:57 - form results... information from form to database to results
- 2:15 - showing table of top ten per color chosen
- 2:35 - GET format on the command line - handy for debugging
- 3:29 - POST versus GET - most forms are POST
- 4:03 - view of the Database Table and future plan with PHP
- 4:50 - looking through the HTML page
- 5:10 - styles
- 5:30 - script - sample of form validation and color change
- 5:56 - the form with action to PHP
- 6:02 - error running PHP locally - ew!
- 6:54 - run the PHP on a server! And AJAX security mention
- 7:26 - looking through the form fields - input fields
- 8:10 - the name parameter is IMPORTANT - to receive data
- 9:05 - custom colors not working in Firefox (works in Chrome)
- 9:35 - intro to JavaScript in example
- 10:23 - length of commands on DOM!!!
- 10:48 - ZIM on canvas is HALF the size of the DOM form code
- 12:10 - changing the color of the background
- 12:25 - clicking the submit - popup and stop form if no name
- 14:37 - making an event function to close the popup
- 15:35 - conclusion for the front end and future videos
- 16:15 - ending video and ending!
Lesson 09 - VID 32 - HTML Form
- 0:11 - data from Canvas or HTML DOM to the server summary
- 0:38 - demonstration of Canvas - same back end for both canvas and HTML DOM form
- 1:00 - the Database! - cPannel, and view through examples
- 1:48 - tables and database discussion / when to use which
- 2:37 - a table is where we hold the data with fields/columns and records/rows
- 3:24 - phpMyAdmin and types of fields text, int, etc.
- 3:44 - key field - primary, unique and auto increment
- 4:16 - browsing the table, edit, insert, reports, etc.
- 4:51 - making our table with new table link
- 5:26 - adding the field names - the same as the field names in the form
- 6:25 - setting auto increment and primary key
- 6:55 - insert and note that SQL statements are shown
- 7:25 - yay we have our table - and what's next, PHP to table!
- 7:44 - closing video - creative coding... ya!
Lesson 09 - VID 33 - Database Table
- 0:12 - review and looking forward... all the way to the server and back!
- 0:23 - summary of last lessons - data, html form, database setup
- 0:40 - canvas demonstration - note the backend system is the same for Canvas or DOM
- 1:08 - sumbitting the HTML DOM form - and the results
- 1:38 - reminder about the command line and adjusting results
- 1:49 - looking at the code! HTML review of the field names in the name parameters
- 2:17 - PHP! An overview of the PHP page - HTML part, adding and selecting to database
- 2:53 - zooming in and PHP basics - echo to print or view
- 3:35 - uploading the file to the server (from editor or FTP client)
- 4:05 - ERROR! a blank white page
- 4:22 - missing a semicolon ; Lesson 1, PHP needs the semicolon
- 4:28 - ERROR! what happened! Lesson 2, upload the file!!
- 4:55 - adding style to our result - and we upload!
- 4:17 - HELLO WORLD!
- 5:30 - variables with $
- 6:07 - embedding PHP variables right in a string
- 6:27 - collecting the information from the command line $_GET[]
- 7:48 - making sure variable exists with isset() and ternary operator ? :
- 9:29 - connecting to the database with PHP and mysqli() class
- 11:10 - collecting the data with the same names as form fields and table fields
- 11:33 - SQL string statement for INSERT into table13
- 13:05 - any value coming from client (front end) use a ? in mysqli
- 13:52 - binding the values from the front end into the ?
- 14:16 - making a mysqli statement for us to operate on
- 15:05 - preparing the statement with the query
- 15:20 - binding the parameters with information about the variables
- 15:40 - discussion of input variables - tainted, etc.
- 16:00 - executing the statement and closing it!
- 16:18 - information will go into the database - does it work?
- 16:50 - maybe the data is always put at the end of the table
- 17:44 - browse to refresh the table!
- 18:39 - woot woo darth zoo! Summary and selecting coming soon!
Lesson 09 - VID 34 - PHP MySQLi INSERT
- 0:14 - summary of earlier videos - data, php, mysql
- 0:45 - canvas form demo and future saving shapes
- 1:08 - an HTML form with results - data being sent with GET - results discussion
- 1:50 - Retrieving information from database!
- 2:09 - PHP - review... HTML in PHP, connection and INSERT with binding to variables
- 3:23 - Query to find out what is in the database table
- 3:28 - binding because color comes from client - so need ? and binding
- 3:48 - plan to loop through results and make the HTML table!
- 4:26 - the SELECT query - selecting which fields we want from the table
- 5:42 - getting all the records
- 6:24 - WHERE clause - limiting the data to the same color as we entered
- 7:14 - ORDER BY, DESC, LIMIT, etc. SQL functionality talk about DELETE and UPDATE
- 8:34 - making the mysqli statement and the binding like before
- 9:10 - receiving what comes back from the database - look at the commented version
- 9:52 - binding the results into our own names for the fields
- 10:20 - looping through the results - starting with making an HTML table
- 11:17 - fetch() get one row at a time and populate our variables
- 12:00 - making the table rows and cells
- 12:37 - reporting an error and conclusion!
- 13:42 - a look to the future with AJAX to send and get data without reloading the page
- 14:00 - final dance video!
Lesson 09 - VID 35 - MySQLi SELECT
- 0:11 - review of data lessons
- 0:38 - submitting form without a results page?
- 0:51 - AJAX - asyncronous data
- 1:03 - JSON and JSONp discussion
- 1:23 - HTML form and reminder that backend is the same
- 1:34 - popping the message bar and testing
- 1:48 - not loading a results page versus loading a results page
- 2:08 - review of the HTML code - styles, scripts, form fields, message div
- 3:00 - zoom in zoom out - the JavaScript!
- 3:40 - event object stopping submit
- 3:47 - form tag has no parameters - we use AJAX
- 4:12 - pop up function
- 5:23 - AJAX - the remote AJAX imported class - scroll up scroll down!
- 7:08 - new AJAX object request type POST
- 8:29 - sending information in CGI format with encodeURI()
- 12:16 - using ES6 templating with back tick / tilt
- 15:00 - sending the information with AJAX
- 15:30 - callback function to receive data back from server
- 16:20 - looking at the result from the server
- 16:50 - AJAX review
- 17:22 - PHP page - no HTML needed because we are not making results page
- 18:50 - connect to database, collect variables in POST
- 18:40 - INSERT into the table with bound variables for mysqli protection!
- 19:30 - echo the result - no XML needed, or could use JSON
- 20:12 - last test to see if data enters!
- 20:28 - data does not always get added to end ;-)
- 21:07 - exciting end to video and look forward to Canvas and JSONp
- 21:35 - closing dance video
Lesson 09 - VID 36 - AJAX
- 0:10 - data videos so far
- 0:35 - data on the Canvas with ZIM
- 0:44 - demonstration of remembering shape locations
- 1:05 - sharing the data with other computers
- 1:42 - not multiuser - that is sockets (ZIM has sockets in code section)
- 2:20 - example of sharing data - Tower Talk example
- 3:00 - the love shack!
- 3:21 - into the code for the shapes
- 3:40 - slight review of binding with localStorage
- 4:03 - what is different when storing to server - delayed response
- 4:29 - callback functions
- 4:41 - the Bind object and discussion of GET and POST
- 5:24 - discussion of testing on server and using a local server
- 5:47 - Bind and the from() call to get the starting data for the shapes
- 6:18 - callback options and functions discussion
- 7:09 - binding to place the circle at the start information
- 7:24 - binding id discussion
- 8:26 - GET as a constant is just the string "get"
- 9:15 - GET and POST review - GET to create and test - POST final
- 10:05 - preview of the provided files including comment files
- 10:47 - adding method (GET or POST) to the URL and why!
- 12:35 - master parameter for Bind - use as general id, etc.
- 13:54 - report parameter for Bind - and examples!
- 15:09 - Bind from() details
- 15:36 - reporting historical data with data.report()
- 17:37 - binding the shapes and properties - see older videos
- 18:19 - code inside from call is same as localStorage code!
- 19:10 - put video on pause and get a cookie!
- 19:27 - PHP side! Quick review
- 19:49 - content-type with ZIM async() sending via GET
- 20:35 - collecting the type using GET (always)
- 21:01 - collect variables as either $_GET or $_POST
- 21:55 - variables - master, and command discussion (to, from, etc)
- 22:23 - the to command and error checking for master (the id)
- 22:42 - sending back information for GET or POST (ternary)
- 24:48 - Database table - JSON saving time - less fields!
- 25:19 - discussion of ID - not auto incrementing
- 25:40 - INSERT - the id and json from client use ? for binding
- 26:00 - either INSERT or UPDATE in one SQL command!
- 27:55 - MySQLi all the same as the HTML videos and Skool lesson 9
- 28:25 - returning a results to the client (success or error)
- 29:14 - from command - using callbackFROM() vs callbackTo()
- 29:45 - FROM query - just grab the JSON! Similar steps to HTML
- 30:27 - back in ZIM we collect the data that comes back
- 31:13 - bind.removeAll() to remove the data with DELETE query
- 31:40 - reports as we send data and example of error callback
- 33:44 - files are in a zip file and conclusion video
- 34:10 - come join us at https://forum.zimjs.com
Lesson 09 - VID 37 - BINDING
- 0:09 Dr Abstract counting to 123 in a Canvas Form!
- 0:35 review of videos
- 1:28 canvas code in ZIM template
- 1:56 Bind object
- 2:54 different than last video - just sending data
- 3:28 review of the form parts name, color, count, submit
- 3:58 the name field and wiggling the label
- 5:02 TextArea - trying out the placeholder - and TextArea issues
- 6:23 binding to TextArea .bind("name", "text"); id and properties
- 7:26 Emitter() sneak info about ZIM VEE (Pick) for ranges, random, etc.
- 8:57 Stepper() activates emitter
- 9:19 Bind options - how to target specific binds - objects, ids, to, from, etc.
- 11:00 ColorPicker
- 11:14 Button press! All the action - check for name and if none, pop Pane
- 11:49 bind.to() and bind.toLock() discussion (but not used here)
- 14:33 Tower Talk example with respect to locking records for sharing JSON storage
- 16:03 the filter! Adjust data before to data gets sent - or at a couple times in from()
- 18:27 filtering the color before sending - ZIM color
- 20:53 data.report() for saved data - not for data going through filter (long story)
- 24:22 callback function to show the results
- 25:35 Accessibility for the Canvas components - screen reader ready
- 26:20 PHP code - quick review and reminder of the commented files
- 28:15 collecting the data - just JSON in data!
- 28:44 json_decode() in PHP to turn string into PHP object
- 29:17 json_decode() to PHP Associative Array (not used in this case)
- 30:17 PHP Objects dash greater than instead of dot syntax
- 31:27 looking at the data and its information - ZIM Bind format
- 32:44 Database table - auto incrementing id, name, count, color fields
- 33:30 INSERT query and binding client data
- 34:35 storing separate data fields or storing single JSON object?
- 35:34 executing query and reporting back
- 36:36 Dr Abstact dancing - conclusion to data lesson!
- 36:56 Join us at https://zimjs.com/slack and https://zimjs.com/tower ciao!
Lesson 09 - VID 38 - CANVAS FORM
- 0:10 - launch of ZIM Base - https://zimjs.com/base/
- 0:37 - ZIM Base page for accessing Database with 1/3 the MySQLi
- 0:57 - intro ZIM Base and what it can do
- 1:38 - examples - HTML example form
- 2:15 - examples - ZIM shared shapes
- 3:14 - the Code - ZIM Base file and data connections you must set
- 4:45 - calling ZIM Base from the app PHP page
- 5:17 - getting variables with ZIM Base makeVars()
- 6:00 - inserting data with ZIM Base insert()
- 6:30 - ZIM Base uses MySQLi in the background
- 6:44 - affected_rows, errors, etc.
- 7:09 - selecting data with ZIM Base select()
- 7:50 - num_rows - and difference between num_rows and affected_rows
- 8:25 - looping through results with $result->assoc()
- 9:07 - using $result->array() to get field indexes
- 10:00 - using $result->record for one result (or $result->row for array)
- 10:49 - brief view through the HTML - traditional form
- 12:27 - viewing the commands - connection and variables
- 12:50 - INSERT
- 14:36 - INSERT OR UPDATE
- 17:00 - UPDATE
- 17:44 - affected_rows - 1(new), 2(updated), 0(repeat), -1(unsuccessful)
- 18:34 - SELECT - single record
- 22:19 - SELECT - multiple records
- 24:25 - DELETE
- 26:25 - QUERY - plain SQL
- 26:55 - REPLY
- 27:30 - LOCKING
- 27:50 - Canvas Example - shared shapes
- 28:15 - binding
- 28:42 - from() to get the server information
- 29:13 - binding the shapes with their properties
- 29:33 - to() send the changes to the server when shape changes
- 29:58 - sending and receiving specific information - we do not usually
- 31:05 - review of bind - and how simple it is!
- 32:23 - PHP for the shared shape - id discussion - ONE record ONE id
- 33:53 - TO - inserting the data to the table - $data automatically made
- 34:50 - review of insert or update
- 35:32 - error checking
- 35:42 - converted 100 pages with multiple SQL calls converted to ZIM Base
- 36:40 - FROM - getting the JSON from the table - send back $result->json
- 37:36 - Review of PHP process - just a few lines of code!
- 38:35 - ending video - calling Dr Abstract!
Lesson 09 - VID 39 - BASE
- 0:11 - last Data video!
- 0:32 - review of last video on ZIM Base
- 1:18 - example for this video - star rating!
- 2:08 - looking that the HTML for the example
- 2:42 - ZIM Explore on this code:ZIM Explore Star Example
- 3:10 - has the user voted? Bind to localStorage
- 6:16 - default bind when there are TWO binds
- 7:15 - binding the rating data
- 8:00 - processing data in JavaScript rather than in PHP or SQL
- 9:33 - record locking to ensure only one person changing data
- 10:25 - solution 1. - steps: call from, change data then call to
- 13:22 - solution 2. - toLock - handles all the steps!
- 14:02 - updating data in filter in the "from" stage
- 16:12 - PHP for the stars - single record with JSON id, lockid, json
- 17:12 - random lockid
- 18:15 - FROM comes first to get latest data
- 18:50 - locking the record on the from
- 19:35 - how locking works in PHP
- 20:15 - sending results back
- 20:45 - inserting vote and clearing the lockid
- 21:55 - review of PHP
- 22:19 - wrap up of ZIM Base and data
- 23:09 - Ending video - Pragma calling Dr Abstract with symbol of Nodism
- 23:18 - Thank you! Hope vids help! Please share - https://zimjs.com/slack
Lesson 09 - VID 40 - RECORD LOCKING